@@ -146,48 +146,6 @@ const UserParentalControl = () => {
146
146
blockUnratedItems . dispatchEvent ( new CustomEvent ( 'create' ) ) ;
147
147
} , [ ] ) ;
148
148
149
- const loadAllowedTags = useCallback ( ( tags : string [ ] ) => {
150
- const page = element . current ;
151
-
152
- if ( ! page ) {
153
- console . error ( '[userparentalcontrol] Unexpected null page reference' ) ;
154
- return ;
155
- }
156
-
157
- setAllowedTags ( tags ) ;
158
-
159
- const allowedTagsElem = page . querySelector ( '.allowedTags' ) as HTMLDivElement ;
160
-
161
- for ( const btnDeleteTag of allowedTagsElem . querySelectorAll ( '.btnDeleteTag' ) ) {
162
- btnDeleteTag . addEventListener ( 'click' , function ( ) {
163
- const tag = btnDeleteTag . getAttribute ( 'data-tag' ) ;
164
- const newTags = tags . filter ( t => t !== tag ) ;
165
- loadAllowedTags ( newTags ) ;
166
- } ) ;
167
- }
168
- } , [ ] ) ;
169
-
170
- const loadBlockedTags = useCallback ( ( tags : string [ ] ) => {
171
- const page = element . current ;
172
-
173
- if ( ! page ) {
174
- console . error ( '[userparentalcontrol] Unexpected null page reference' ) ;
175
- return ;
176
- }
177
-
178
- setBlockedTags ( tags ) ;
179
-
180
- const blockedTagsElem = page . querySelector ( '.blockedTags' ) as HTMLDivElement ;
181
-
182
- for ( const btnDeleteTag of blockedTagsElem . querySelectorAll ( '.btnDeleteTag' ) ) {
183
- btnDeleteTag . addEventListener ( 'click' , function ( ) {
184
- const tag = btnDeleteTag . getAttribute ( 'data-tag' ) ;
185
- const newTags = tags . filter ( t => t !== tag ) ;
186
- loadBlockedTags ( newTags ) ;
187
- } ) ;
188
- }
189
- } , [ ] ) ;
190
-
191
149
const loadUser = useCallback ( ( user : UserDto , allParentalRatings : ParentalRating [ ] ) => {
192
150
const page = element . current ;
193
151
@@ -200,8 +158,8 @@ const UserParentalControl = () => {
200
158
void libraryMenu . then ( menu => menu . setTitle ( user . Name ) ) ;
201
159
loadUnratedItems ( user ) ;
202
160
203
- loadAllowedTags ( user . Policy ?. AllowedTags || [ ] ) ;
204
- loadBlockedTags ( user . Policy ?. BlockedTags || [ ] ) ;
161
+ setAllowedTags ( user . Policy ?. AllowedTags || [ ] ) ;
162
+ setBlockedTags ( user . Policy ?. BlockedTags || [ ] ) ;
205
163
populateRatings ( allParentalRatings ) ;
206
164
207
165
let ratingValue = '' ;
@@ -222,7 +180,7 @@ const UserParentalControl = () => {
222
180
}
223
181
setAccessSchedules ( user . Policy ?. AccessSchedules || [ ] ) ;
224
182
loading . hide ( ) ;
225
- } , [ loadAllowedTags , loadBlockedTags , loadUnratedItems , populateRatings ] ) ;
183
+ } , [ libraryMenu , setAllowedTags , setBlockedTags , loadUnratedItems , populateRatings ] ) ;
226
184
227
185
const loadData = useCallback ( ( ) => {
228
186
if ( ! userId ) {
@@ -296,7 +254,7 @@ const UserParentalControl = () => {
296
254
297
255
if ( tags . indexOf ( value ) == - 1 ) {
298
256
tags . push ( value ) ;
299
- loadAllowedTags ( tags ) ;
257
+ setAllowedTags ( tags ) ;
300
258
}
301
259
} ) . catch ( ( ) => {
302
260
// prompt closed
@@ -317,7 +275,7 @@ const UserParentalControl = () => {
317
275
318
276
if ( tags . indexOf ( value ) == - 1 ) {
319
277
tags . push ( value ) ;
320
- loadBlockedTags ( tags ) ;
278
+ setBlockedTags ( tags ) ;
321
279
}
322
280
} ) . catch ( ( ) => {
323
281
// prompt closed
@@ -348,45 +306,28 @@ const UserParentalControl = () => {
348
306
return false ;
349
307
} ;
350
308
351
- ( page . querySelector ( '#btnAddSchedule' ) as HTMLButtonElement ) . addEventListener ( 'click' , function ( ) {
309
+ // The following is still hacky and should migrate to pure react implementation for callbacks in the future
310
+ const accessSchedulesPopupCallback = function ( ) {
352
311
showSchedulePopup ( {
353
312
Id : 0 ,
354
313
UserId : '' ,
355
314
DayOfWeek : DynamicDayOfWeek . Sunday ,
356
315
StartHour : 0 ,
357
316
EndHour : 0
358
317
} , - 1 ) ;
359
- } ) ;
360
-
361
- ( page . querySelector ( '#btnAddAllowedTag' ) as HTMLButtonElement ) . addEventListener ( 'click' , function ( ) {
362
- showAllowedTagPopup ( ) ;
363
- } ) ;
364
-
365
- ( page . querySelector ( '#btnAddBlockedTag' ) as HTMLButtonElement ) . addEventListener ( 'click' , function ( ) {
366
- showBlockedTagPopup ( ) ;
367
- } ) ;
368
-
318
+ } ;
319
+ ( page . querySelector ( '#btnAddSchedule' ) as HTMLButtonElement ) . addEventListener ( 'click' , accessSchedulesPopupCallback ) ;
320
+ ( page . querySelector ( '#btnAddAllowedTag' ) as HTMLButtonElement ) . addEventListener ( 'click' , showAllowedTagPopup ) ;
321
+ ( page . querySelector ( '#btnAddBlockedTag' ) as HTMLButtonElement ) . addEventListener ( 'click' , showBlockedTagPopup ) ;
369
322
( page . querySelector ( '.userParentalControlForm' ) as HTMLFormElement ) . addEventListener ( 'submit' , onSubmit ) ;
370
- } , [ loadAllowedTags , loadBlockedTags , loadData , userId ] ) ;
371
-
372
- useEffect ( ( ) => {
373
- const page = element . current ;
374
323
375
- if ( ! page ) {
376
- console . error ( '[userparentalcontrol] Unexpected null page reference' ) ;
377
- return ;
378
- }
379
-
380
- const accessScheduleList = page . querySelector ( '.accessScheduleList' ) as HTMLDivElement ;
381
-
382
- for ( const btnDelete of accessScheduleList . querySelectorAll ( '.btnDelete' ) ) {
383
- btnDelete . addEventListener ( 'click' , function ( ) {
384
- const index = parseInt ( btnDelete . getAttribute ( 'data-index' ) ?? '0' , 10 ) ;
385
- const newindex = accessSchedules . filter ( ( _e , i ) => i != index ) ;
386
- setAccessSchedules ( newindex ) ;
387
- } ) ;
388
- }
389
- } , [ accessSchedules ] ) ;
324
+ return ( ) => {
325
+ ( page . querySelector ( '#btnAddSchedule' ) as HTMLButtonElement ) . removeEventListener ( 'click' , accessSchedulesPopupCallback ) ;
326
+ ( page . querySelector ( '#btnAddAllowedTag' ) as HTMLButtonElement ) . removeEventListener ( 'click' , showAllowedTagPopup ) ;
327
+ ( page . querySelector ( '#btnAddBlockedTag' ) as HTMLButtonElement ) . removeEventListener ( 'click' , showBlockedTagPopup ) ;
328
+ ( page . querySelector ( '.userParentalControlForm' ) as HTMLFormElement ) . removeEventListener ( 'submit' , onSubmit ) ;
329
+ } ;
330
+ } , [ setAllowedTags , setBlockedTags , loadData , userId ] ) ;
390
331
391
332
const optionMaxParentalRating = ( ) => {
392
333
let content = '' ;
@@ -397,6 +338,21 @@ const UserParentalControl = () => {
397
338
return content ;
398
339
} ;
399
340
341
+ const removeAllowedTagsCallback = useCallback ( ( tag : string ) => {
342
+ const newTags = allowedTags . filter ( t => t !== tag ) ;
343
+ setAllowedTags ( newTags ) ;
344
+ } , [ allowedTags , setAllowedTags ] ) ;
345
+
346
+ const removeBlockedTagsTagsCallback = useCallback ( ( tag : string ) => {
347
+ const newTags = blockedTags . filter ( t => t !== tag ) ;
348
+ setBlockedTags ( newTags ) ;
349
+ } , [ blockedTags , setBlockedTags ] ) ;
350
+
351
+ const removeScheduleCallback = useCallback ( ( index : number ) => {
352
+ const newSchedules = accessSchedules . filter ( ( _e , i ) => i != index ) ;
353
+ setAccessSchedules ( newSchedules ) ;
354
+ } , [ accessSchedules , setAccessSchedules ] ) ;
355
+
400
356
return (
401
357
< Page
402
358
id = 'userParentalControlPage'
@@ -461,6 +417,7 @@ const UserParentalControl = () => {
461
417
key = { tag }
462
418
tag = { tag }
463
419
tagType = 'allowedTag'
420
+ removeTagCallback = { removeAllowedTagsCallback }
464
421
/> ;
465
422
} ) }
466
423
</ div >
@@ -485,6 +442,7 @@ const UserParentalControl = () => {
485
442
key = { tag }
486
443
tag = { tag }
487
444
tagType = 'blockedTag'
445
+ removeTagCallback = { removeBlockedTagsTagsCallback }
488
446
/> ;
489
447
} ) }
490
448
</ div >
@@ -503,11 +461,12 @@ const UserParentalControl = () => {
503
461
< div className = 'accessScheduleList paperList' >
504
462
{ accessSchedules . map ( ( accessSchedule , index ) => {
505
463
return < AccessScheduleList
506
- key = { accessSchedule . Id }
464
+ key = { ` ${ accessSchedule . DayOfWeek } ${ accessSchedule . StartHour } ${ accessSchedule . EndHour } ` }
507
465
index = { index }
508
466
DayOfWeek = { accessSchedule . DayOfWeek }
509
467
StartHour = { accessSchedule . StartHour }
510
468
EndHour = { accessSchedule . EndHour }
469
+ removeScheduleCallback = { removeScheduleCallback }
511
470
/> ;
512
471
} ) }
513
472
</ div >
0 commit comments