16
16
import { Modal } from 'bootstrap' ;
17
17
import { deleteFaq , fetchAllFaqsByCategory , fetchCategoryTranslations } from '../api' ;
18
18
import { addElement , pushErrorNotification , pushNotification } from '../../../../assets/src/utils' ;
19
- import { CategoryTranslations , FaqResponse , Response } from '../interfaces' ;
20
-
21
- interface Faq {
22
- id : string ;
23
- language : string ;
24
- solution_id : string ;
25
- question : string ;
26
- created : string ;
27
- category_id : string ;
28
- sticky : string ;
29
- active : string ;
30
- }
19
+ import { CategoryTranslations , Faq , FaqList , Response } from '../interfaces' ;
31
20
32
21
export const handleFaqOverview = async ( ) : Promise < void > => {
33
22
const collapsedCategories : NodeListOf < Element > = document . querySelectorAll ( '.accordion-collapse' ) ;
@@ -47,8 +36,8 @@ export const handleFaqOverview = async (): Promise<void> => {
47
36
const onlyInactive : boolean = getInactiveCheckboxState ( ) ;
48
37
const onlyNew : boolean = getNewCheckboxState ( ) ;
49
38
50
- const faqs = ( await fetchAllFaqsByCategory ( categoryId , language , onlyInactive , onlyNew ) ) as FaqResponse ;
51
- await populateCategoryTable ( categoryId , faqs . faqs ) ;
39
+ const faqs = ( await fetchAllFaqsByCategory ( categoryId , language , onlyInactive , onlyNew ) ) as FaqList ;
40
+ await populateCategoryTable ( categoryId , faqs . faqs , faqs . isAllowedToTranslate ) ;
52
41
const toggleStickyFaq : NodeListOf < HTMLInputElement > = document . querySelectorAll ( '.pmf-admin-sticky-faq' ) ;
53
42
const toggleActiveFaq : NodeListOf < HTMLInputElement > = document . querySelectorAll ( '.pmf-admin-active-faq' ) ;
54
43
const translationDropdown : NodeListOf < HTMLElement > = document . querySelectorAll ( '#dropdownAddNewTranslation' ) ;
@@ -211,20 +200,20 @@ const saveStatus = async (
211
200
}
212
201
} ;
213
202
214
- const populateCategoryTable = async ( categoryId : string , faqs : Faq [ ] ) : Promise < void > => {
203
+ const populateCategoryTable = async ( categoryId : string , faqs : Faq [ ] , isAllowedToTranslate : boolean ) : Promise < void > => {
215
204
const tableBody = document . getElementById ( `tbody-category-id-${ categoryId } ` ) as HTMLElement ;
216
205
const csrfToken = tableBody . getAttribute ( 'data-pmf-csrf' ) as string ;
217
206
218
207
faqs . forEach ( ( faq : Faq ) : void => {
219
208
const row : HTMLTableRowElement = document . createElement ( 'tr' ) ;
220
- row . setAttribute ( 'id' , `faq_${ faq . id } _${ faq . language } ` ) ;
209
+ row . setAttribute ( 'id' , `faq_${ faq . id . toString ( ) } _${ faq . language } ` ) ;
221
210
222
211
row . append (
223
212
addElement ( 'td' , { classList : 'align-middle text-center' } , [
224
213
addElement ( 'a' , {
225
214
classList : 'text-decoration-none' ,
226
- href : `./faq/edit/${ faq . id } /${ faq . language } ` ,
227
- innerText : faq . id ,
215
+ href : `./faq/edit/${ faq . id . toString ( ) } /${ faq . language } ` ,
216
+ innerText : faq . id . toString ( ) ,
228
217
} ) ,
229
218
] )
230
219
) ;
@@ -233,16 +222,16 @@ const populateCategoryTable = async (categoryId: string, faqs: Faq[]): Promise<v
233
222
addElement ( 'td' , { classList : 'align-middle text-center' } , [
234
223
addElement ( 'a' , {
235
224
classList : 'text-decoration-none' ,
236
- href : `./faq/edit/${ faq . id } /${ faq . language } ` ,
237
- innerText : faq . solution_id ,
225
+ href : `./faq/edit/${ faq . id . toString ( ) } /${ faq . language } ` ,
226
+ innerText : faq . solution_id . toString ( ) ,
238
227
} ) ,
239
228
] )
240
229
) ;
241
230
row . append (
242
231
addElement ( 'td' , { } , [
243
232
addElement ( 'a' , {
244
233
classList : 'text-decoration-none' ,
245
- href : `./faq/edit/${ faq . id } /${ faq . language } ` ,
234
+ href : `./faq/edit/${ faq . id . toString ( ) } /${ faq . language } ` ,
246
235
innerText : faq . question ,
247
236
} ) ,
248
237
] )
@@ -253,11 +242,11 @@ const populateCategoryTable = async (categoryId: string, faqs: Faq[]): Promise<v
253
242
addElement ( 'input' , {
254
243
classList : 'form-check-input pmf-admin-sticky-faq' ,
255
244
type : 'checkbox' ,
256
- 'data-pmfCategoryIdSticky' : faq . category_id ,
257
- 'data-pmfFaqId' : faq . id ,
245
+ 'data-pmfCategoryIdSticky' : faq . category_id . toString ( ) ,
246
+ 'data-pmfFaqId' : faq . id . toString ( ) ,
258
247
'data-pmfCsrf' : csrfToken ,
259
248
lang : faq . language ,
260
- id : `sticky_record_${ faq . category_id } _${ faq . id } ` ,
249
+ id : `sticky_record_${ faq . category_id } _${ faq . id . toString ( ) } ` ,
261
250
checked : faq . sticky === 'yes' ,
262
251
} ) ,
263
252
] )
@@ -267,68 +256,70 @@ const populateCategoryTable = async (categoryId: string, faqs: Faq[]): Promise<v
267
256
addElement ( 'input' , {
268
257
classList : 'form-check-input pmf-admin-active-faq' ,
269
258
type : 'checkbox' ,
270
- 'data-pmfCategoryIdActive' : faq . category_id ,
271
- 'data-pmfFaqId' : faq . id ,
259
+ 'data-pmfCategoryIdActive' : faq . category_id . toString ( ) ,
260
+ 'data-pmfFaqId' : faq . id . toString ( ) ,
272
261
'data-pmfCsrf' : csrfToken ,
273
262
lang : faq . language ,
274
- id : `active_record_${ faq . category_id } _${ faq . id } ` ,
263
+ id : `active_record_${ faq . category_id . toString ( ) } _${ faq . id . toString ( ) } ` ,
275
264
checked : faq . active === 'yes' ,
276
265
} ) ,
277
266
] )
278
267
) ;
279
268
row . append (
280
269
addElement ( 'td' , { classList : 'align-middle text-center' } , [
281
- addElement ( 'a' , { classList : 'btn btn-primary' , href : `./faq/edit/${ faq . id } /${ faq . language } ` } , [
270
+ addElement ( 'a' , { classList : 'btn btn-primary' , href : `./faq/edit/${ faq . id . toString ( ) } /${ faq . language } ` } , [
282
271
addElement ( 'i' , { classList : 'bi bi-pencil' , 'aria-hidden' : 'true' } ) ,
283
272
] ) ,
284
273
] )
285
274
) ;
286
275
row . append (
287
276
addElement ( 'td' , { classList : 'align-middle text-center' } , [
288
- addElement ( 'a' , { classList : 'btn btn-info' , href : `./faq/copy/${ faq . id } /${ faq . language } ` } , [
277
+ addElement ( 'a' , { classList : 'btn btn-info' , href : `./faq/copy/${ faq . id . toString ( ) } /${ faq . language } ` } , [
289
278
addElement ( 'i' , { classList : 'bi bi-copy' , 'aria-hidden' : 'true' } ) ,
290
279
] ) ,
291
280
] )
292
281
) ;
293
- row . append (
294
- addElement ( 'td' , { classList : 'align-middle text-center' } , [
295
- addElement ( 'div' , { classList : 'checkbox' } , [
296
- addElement (
297
- 'a' ,
298
- {
299
- classList : 'btn btn-secondary dropdown-toggle' ,
300
- href : '#' ,
301
- role : 'button' ,
302
- id : 'dropdownAddNewTranslation' ,
303
- 'data-bsToggle' : 'dropdown' ,
304
- 'aria-haspopup' : 'true' ,
305
- 'aria-expanded' : 'false' ,
306
- 'data-pmfFaqId' : faq . id ,
307
- } ,
308
- [ addElement ( 'i' , { classList : 'bi bi-globe' , 'aria-hidden' : 'true' } ) ]
309
- ) ,
310
- addElement ( 'div' , { classList : 'dropdown-menu' , 'aria-labelledby' : 'dropdownAddNewTranslation' } , [
311
- addElement ( 'a' , { classList : 'dropdown-item' , id : 'dropdownTranslation' , innerText : 'n/a' } ) ,
282
+ if ( isAllowedToTranslate ) {
283
+ row . append (
284
+ addElement ( 'td' , { classList : 'align-middle text-center' } , [
285
+ addElement ( 'div' , { classList : 'checkbox' } , [
286
+ addElement (
287
+ 'a' ,
288
+ {
289
+ classList : 'btn btn-secondary dropdown-toggle' ,
290
+ href : '#' ,
291
+ role : 'button' ,
292
+ id : 'dropdownAddNewTranslation' ,
293
+ 'data-bsToggle' : 'dropdown' ,
294
+ 'aria-haspopup' : 'true' ,
295
+ 'aria-expanded' : 'false' ,
296
+ 'data-pmfFaqId' : faq . id . toString ( ) ,
297
+ } ,
298
+ [ addElement ( 'i' , { classList : 'bi bi-globe' , 'aria-hidden' : 'true' } ) ]
299
+ ) ,
300
+ addElement ( 'div' , { classList : 'dropdown-menu' , 'aria-labelledby' : 'dropdownAddNewTranslation' } , [
301
+ addElement ( 'a' , { classList : 'dropdown-item' , id : 'dropdownTranslation' , innerText : 'n/a' } ) ,
302
+ ] ) ,
312
303
] ) ,
313
- ] ) ,
314
- ] )
315
- ) ;
304
+ ] )
305
+ ) ;
306
+ }
316
307
row . append (
317
308
addElement ( 'td' , { classList : 'text-center' } , [
318
309
addElement (
319
310
'button' ,
320
311
{
321
312
classList : 'btn btn-danger pmf-button-delete-faq' ,
322
313
type : 'button' ,
323
- 'data-pmfId' : faq . id ,
314
+ 'data-pmfId' : faq . id . toString ( ) ,
324
315
'data-pmfLanguage' : faq . language ,
325
316
'data-pmfToken' : csrfToken ,
326
317
} ,
327
318
[
328
319
addElement ( 'i' , {
329
320
classList : 'bi bi-trash' ,
330
321
'aria-hidden' : 'true' ,
331
- 'data-pmfId' : faq . id ,
322
+ 'data-pmfId' : faq . id . toString ( ) ,
332
323
'data-pmfLanguage' : faq . language ,
333
324
'data-pmfToken' : csrfToken ,
334
325
} ) ,
0 commit comments