@ -1,8 +1,9 @@
import $ from 'jquery' ;
import { svg } from '../svg.js' ;
import { showErrorToast } from '../modules/toast.js' ;
import { GET , POST } from '../modules/fetch.js' ;
const { appSubUrl , csrfToken } = window . config ;
const { appSubUrl } = window . config ;
let i18nTextEdited ;
let i18nTextOptions ;
let i18nTextDeleteFromHistory ;
@ -31,19 +32,27 @@ function showContentHistoryDetail(issueBaseUrl, commentId, historyId, itemTitleH
$dialog . find ( '.dialog-header-options' ) . dropdown ( {
showOnFocus : false ,
allowReselection : true ,
onChange ( _value , _text , $item ) {
async onChange ( _value , _text , $item ) {
const optionItem = $item . data ( 'option-item' ) ;
if ( optionItem === 'delete' ) {
if ( window . confirm ( i18nTextDeleteFromHistoryConfirm ) ) {
$ . post ( ` ${ issueBaseUrl } /content-history/soft-delete?comment_id= ${ commentId } &history_id= ${ historyId } ` , {
_csrf : csrfToken ,
} ) . done ( ( resp ) => {
try {
const params = new URLSearchParams ( ) ;
params . append ( 'comment_id' , commentId ) ;
params . append ( 'history_id' , historyId ) ;
const response = await POST ( ` ${ issueBaseUrl } /content-history/soft-delete? ${ params . toString ( ) } ` ) ;
const resp = await response . json ( ) ;
if ( resp . ok ) {
$dialog . modal ( 'hide' ) ;
} else {
showErrorToast ( resp . message ) ;
}
} ) ;
} catch ( error ) {
console . error ( 'Error:' , error ) ;
showErrorToast ( 'An error occurred while deleting the history.' ) ;
}
}
} else { // required by eslint
showErrorToast ( ` unknown option item: ${ optionItem } ` ) ;
@ -54,19 +63,24 @@ function showContentHistoryDetail(issueBaseUrl, commentId, historyId, itemTitleH
}
} ) ;
$dialog . modal ( {
onShow ( ) {
$ . ajax ( {
url : ` ${ issueBaseUrl } /content-history/detail?comment_id= ${ commentId } &history_id= ${ historyId } ` ,
data : {
_csrf : csrfToken ,
} ,
} ) . done ( ( resp ) => {
async onShow ( ) {
try {
const params = new URLSearchParams ( ) ;
params . append ( 'comment_id' , commentId ) ;
params . append ( 'history_id' , historyId ) ;
const url = ` ${ issueBaseUrl } /content-history/detail? ${ params . toString ( ) } ` ;
const response = await GET ( url ) ;
const resp = await response . json ( ) ;
$dialog . find ( '.comment-diff-data' ) . removeClass ( 'is-loading' ) . html ( resp . diffHtml ) ;
// there is only one option "item[data-option-item=delete]", so the dropdown can be entirely shown/hidden.
if ( resp . canSoftDelete ) {
$dialog . find ( '.dialog-header-options' ) . removeClass ( 'gt-hidden' ) ;
}
} ) ;
} catch ( error ) {
console . error ( 'Error:' , error ) ;
}
} ,
onHidden ( ) {
$dialog . remove ( ) ;
@ -103,7 +117,7 @@ function showContentHistoryMenu(issueBaseUrl, $item, commentId) {
} ) ;
}
export function initRepoIssueContentHistory ( ) {
export async function initRepoIssueContentHistory ( ) {
const issueIndex = $ ( '#issueIndex' ) . val ( ) ;
if ( ! issueIndex ) return ;
@ -114,12 +128,10 @@ export function initRepoIssueContentHistory() {
const repoLink = $ ( '#repolink' ) . val ( ) ;
const issueBaseUrl = ` ${ appSubUrl } / ${ repoLink } /issues/ ${ issueIndex } ` ;
$ . ajax ( {
url : ` ${ issueBaseUrl } /content-history/overview ` ,
data : {
_csrf : csrfToken ,
} ,
} ) . done ( ( resp ) => {
try {
const response = await GET ( ` ${ issueBaseUrl } /content-history/overview ` ) ;
const resp = await response . json ( ) ;
i18nTextEdited = resp . i18n . textEdited ;
i18nTextDeleteFromHistory = resp . i18n . textDeleteFromHistory ;
i18nTextDeleteFromHistoryConfirm = resp . i18n . textDeleteFromHistoryConfirm ;
@ -133,5 +145,7 @@ export function initRepoIssueContentHistory() {
const $itemComment = $ ( ` #issuecomment- ${ commentId } ` ) ;
showContentHistoryMenu ( issueBaseUrl , $itemComment , commentId ) ;
}
} ) ;
} catch ( error ) {
console . error ( 'Error:' , error ) ;
}
}