11import { join } from "path" ;
22
3- import type { EventGroup , EventSettings } from "../../types/events" ;
4- import type { SortTag } from "../../types/sort-tags" ;
3+ import type {
4+ EventGroup ,
5+ EventSettings ,
6+ SortTag
7+ } from "../../types" ;
58
69import { ProfileManager } from "../common/profile-manager" ;
10+ import { SettingsManager } from "../common/settings-manager" ;
711import frontendCommunicator from "../common/frontend-communicator" ;
812import logger from "../logwrapper" ;
913
@@ -90,6 +94,10 @@ class EventsAccess {
9094 this . _groups [ group . id ] = group ;
9195 eventsDb . push ( `/groups/${ group . id } ` , group ) ;
9296 logger . debug ( `Saved event group '${ group . id } '.` ) ;
97+
98+ this . rebuildSettings ( ) ;
99+
100+ frontendCommunicator . send ( "event-access:event-set-saved" , this . _groups [ group . id ] ) ;
93101 } catch ( err ) {
94102 logger . warn ( `Unable to save event group '${ group . id } '.` , err ) ;
95103 }
@@ -104,11 +112,51 @@ class EventsAccess {
104112 this . _groups = groupsToSave ;
105113 eventsDb . push ( "/groups" , groupsToSave ) ;
106114 logger . debug ( `Saved all groups.` ) ;
115+
116+ this . rebuildSettings ( ) ;
117+
118+ frontendCommunicator . send ( "event-access:all-event-sets-saved" , this . _groups ) ;
107119 } catch ( err ) {
108120 logger . warn ( `Unable to save groups.` , err ) ;
109121 }
110122 }
111123
124+ private rebuildSettings ( ) {
125+ const settings = SettingsManager . getSetting ( "EventSetSettings" ) ;
126+
127+ // Remove stale items
128+ const settingsKeys = Object . keys ( settings ) ;
129+ for ( const set of settingsKeys ) {
130+ if ( ! this . _groups [ set ] ) {
131+ delete settings [ set ] ;
132+ }
133+ }
134+
135+ // Renumber
136+ const totalSettings = Object . keys ( settings ) . length ;
137+ const sortedSettings = Object . keys ( settings )
138+ . map ( key => ( {
139+ id : key ,
140+ position : settings [ key ] . position
141+ } ) )
142+ . sort ( ( a , b ) => a . position - b . position ) ;
143+ for ( let i = 0 ; i < totalSettings ; i ++ ) {
144+ settings [ sortedSettings [ i ] . id ] . position = i ;
145+ }
146+
147+ // Add missing items
148+ for ( const item of Object . values ( this . _groups ) ) {
149+ if ( ! settings [ item . id ] ) {
150+ settings [ item . id ] = {
151+ position : Object . keys ( settings ) . length
152+ } ;
153+ }
154+ }
155+
156+ SettingsManager . saveSetting ( "EventSetSettings" , settings ) ;
157+ frontendCommunicator . send ( "event-access:event-set-settings-updated" , settings ) ;
158+ }
159+
112160 removeEventFromGroups ( eventId : string ) : void {
113161 for ( const group in this . _groups ) {
114162 if ( this . _groups . hasOwnProperty ( group ) ) {
@@ -162,6 +210,8 @@ class EventsAccess {
162210 this . _sortTags = eventsData . sortTags ;
163211 }
164212
213+ this . rebuildSettings ( ) ;
214+
165215 logger . debug ( `Loaded event data.` ) ;
166216 } catch ( err ) {
167217 logger . warn ( `There was an error reading events data file.` , err ) ;
@@ -177,6 +227,10 @@ class EventsAccess {
177227 eventsDb . delete ( `/groups/${ groupId } ` ) ;
178228 delete this . _groups [ groupId ] ;
179229 logger . debug ( `Deleted event group '${ groupId } '.` ) ;
230+
231+ this . rebuildSettings ( ) ;
232+
233+ frontendCommunicator . send ( "event-access:event-set-deleted" , groupId ) ;
180234 } catch ( err ) {
181235 logger . warn ( `Unable to delete event group '${ groupId } '.` , err ) ;
182236 }
0 commit comments