99
1010import * as Ajax from "../../../Ajax" ;
1111import { AjaxCallbackObject , AjaxCallbackSetup , DatabaseObjectActionResponse } from "../../../Ajax/Data" ;
12- import { DialogCallbackObject , DialogData , DialogCallbackSetup } from "../../Dialog/Data" ;
13- import DomChangeListener from "../../../Dom/Change/Listener" ;
14- import UiDialog from "../../Dialog" ;
1512import UiPagination from "../../Pagination" ;
13+ import { wheneverFirstSeen } from "WoltLabSuite/Core/Helper/Selector" ;
14+ import WoltlabCoreDialogElement from "WoltLabSuite/Core/Element/woltlab-core-dialog" ;
15+ import { dialogFactory } from "WoltLabSuite/Core/Component/Dialog" ;
16+ import { setInnerHtml } from "WoltLabSuite/Core/Dom/Util" ;
1617
1718class CacheData {
1819 private readonly cache = new Map < number , string > ( ) ;
@@ -35,31 +36,20 @@ class CacheData {
3536 }
3637}
3738
38- class UiUserTrophyList implements AjaxCallbackObject , DialogCallbackObject {
39+ class UiUserTrophyList implements AjaxCallbackObject {
3940 private readonly cache = new Map < number , CacheData > ( ) ;
4041 private currentPageNo = 0 ;
4142 private currentUser = 0 ;
42- private readonly knownElements = new WeakSet < HTMLElement > ( ) ;
43+ #dialog: WoltlabCoreDialogElement | undefined = undefined ;
4344
4445 /**
4546 * Initializes the user trophy list.
4647 */
4748 constructor ( ) {
48- DomChangeListener . add ( "WoltLabSuite/Core/Ui/User/Trophy/List" , ( ) => this . rebuild ( ) ) ;
49-
50- this . rebuild ( ) ;
51- }
52-
53- /**
54- * Adds event userTrophyOverlayList elements.
55- */
56- private rebuild ( ) : void {
57- document . querySelectorAll ( ".userTrophyOverlayList" ) . forEach ( ( element : HTMLElement ) => {
58- if ( ! this . knownElements . has ( element ) ) {
59- element . addEventListener ( "click" , ( ev ) => this . open ( element , ev ) ) ;
60-
61- this . knownElements . add ( element ) ;
62- }
49+ wheneverFirstSeen ( ".userTrophyOverlayList" , ( element ) => {
50+ element . addEventListener ( "click" , ( event ) => {
51+ this . open ( element , event ) ;
52+ } ) ;
6353 } ) ;
6454 }
6555
@@ -91,11 +81,18 @@ class UiUserTrophyList implements AjaxCallbackObject, DialogCallbackObject {
9181 }
9282
9383 if ( data && data . has ( this . currentPageNo ) ) {
94- const dialog = UiDialog . open ( this , data . get ( this . currentPageNo ) ) as DialogData ;
95- UiDialog . setTitle ( "userTrophyListOverlay" , data . title ) ;
84+ if ( this . #dialog === undefined ) {
85+ this . #dialog = dialogFactory ( ) . withoutContent ( ) . withoutControls ( ) ;
86+ }
87+
88+ setInnerHtml ( this . #dialog. content , data . get ( this . currentPageNo ) ! ) ;
89+
90+ if ( ! this . #dialog. open ) {
91+ this . #dialog. show ( data . title ) ;
92+ }
9693
9794 if ( data . pageCount > 1 ) {
98- const element = dialog . content . querySelector ( ".jsPagination" ) as HTMLElement ;
95+ const element = this . # dialog. content . querySelector ( ".jsPagination" ) as HTMLElement ;
9996 if ( element !== null ) {
10097 new UiPagination ( element , {
10198 activePage : this . currentPageNo ,
@@ -135,16 +132,6 @@ class UiUserTrophyList implements AjaxCallbackObject, DialogCallbackObject {
135132 } ,
136133 } ;
137134 }
138-
139- _dialogSetup ( ) : ReturnType < DialogCallbackSetup > {
140- return {
141- id : "userTrophyListOverlay" ,
142- options : {
143- title : "" ,
144- } ,
145- source : null ,
146- } ;
147- }
148135}
149136
150137export = UiUserTrophyList ;
0 commit comments