77 * @since 6.2
88 */
99
10+ import { getObject } from "WoltLabSuite/Core/Api/GetObject" ;
1011import { getContextMenuOptions } from "WoltLabSuite/Core/Api/Interactions/GetContextMenuOptions" ;
1112import UiDropdownSimple from "WoltLabSuite/Core/Ui/Dropdown/Simple" ;
1213
14+ interface HeaderContent {
15+ template : string ;
16+ }
17+
1318export class StandaloneButton {
1419 #container: HTMLElement ;
1520 #providerClassName: string ;
1621 #objectId: string | number ;
1722 #redirectUrl: string ;
23+ #reloadHeaderEndpoint: string ;
1824
19- constructor ( container : HTMLElement , providerClassName : string , objectId : string | number , redirectUrl : string ) {
25+ constructor (
26+ container : HTMLElement ,
27+ providerClassName : string ,
28+ objectId : string | number ,
29+ redirectUrl : string ,
30+ reloadHeaderEndpoint : string ,
31+ ) {
2032 this . #container = container ;
2133 this . #providerClassName = providerClassName ;
2234 this . #objectId = objectId ;
2335 this . #redirectUrl = redirectUrl ;
36+ this . #reloadHeaderEndpoint = reloadHeaderEndpoint ;
2437
2538 this . #initInteractions( ) ;
2639 this . #initEventListeners( ) ;
@@ -39,6 +52,24 @@ export class StandaloneButton {
3952 this . #initInteractions( ) ;
4053 }
4154
55+ async #refreshHeader( ) : Promise < void > {
56+ if ( ! this . #reloadHeaderEndpoint) {
57+ return ;
58+ }
59+
60+ const header = document . querySelector ( ".contentHeaderTitle" ) ;
61+ if ( ! header ) {
62+ return ;
63+ }
64+
65+ const result = await getObject < HeaderContent > ( `${ window . WSC_RPC_API_URL } ${ this . #reloadHeaderEndpoint} ` ) ;
66+ if ( ! result . ok ) {
67+ return ;
68+ }
69+
70+ header . outerHTML = result . value . template ;
71+ }
72+
4273 #getDropdownMenu( ) : HTMLElement | undefined {
4374 const button = this . #container. querySelector < HTMLButtonElement > ( ".dropdownToggle" ) ;
4475 if ( ! button ) {
@@ -71,10 +102,12 @@ export class StandaloneButton {
71102 #initEventListeners( ) : void {
72103 this . #container. addEventListener ( "interaction:invalidate" , ( ) => {
73104 void this . #refreshContextMenu( ) ;
105+ void this . #refreshHeader( ) ;
74106 } ) ;
75107
76108 this . #container. addEventListener ( "interaction:invalidate-all" , ( ) => {
77109 void this . #refreshContextMenu( ) ;
110+ void this . #refreshHeader( ) ;
78111 } ) ;
79112
80113 this . #container. addEventListener ( "interaction:remove" , ( ) => {
0 commit comments