{"version":3,"sources":["src/app/pages/internal/incidents/components/widgets/layouts.ts","src/app/services/environment/environment.service.ts","src/app/store/ui-settings/ui-settings.actions.ts","src/app/store/ui-settings/ui-settings.state.ts"],"sourcesContent":["import { NgGridStackWidget } from 'gridstack/dist/angular';\n\nexport const DefaultGridLayout: NgGridStackWidget[] = [\n  {\n    id: 'incident-summary',\n    x: 0,\n    y: 0,\n    w: 5,\n    h: 5,\n    selector: 'v-incident-summary-widget',\n    input: { widgetConfig: { cardVariant: 'glass' } },\n  },\n  {\n    id: 'incident-timings',\n    x: 6,\n    y: 0,\n    w: 7,\n    h: 3,\n    selector: 'v-incident-timings-widget',\n    input: { widgetConfig: { cardVariant: 'glass' } },\n  },\n  {\n    id: 'incident-affected-services',\n    x: 0,\n    y: 5,\n    w: 5,\n    h: 7,\n    selector: 'v-incident-affected-services-widget',\n    input: { widgetConfig: { cardVariant: 'glass' } },\n  },\n  {\n    id: 'incident-related-alerts',\n    x: 0,\n    y: 11,\n    w: 5,\n    h: 7,\n    selector: 'v-incident-related-alerts-widget',\n    input: { widgetConfig: { cardVariant: 'glass' } },\n  },\n  {\n    id: 'incident-statuspage-links',\n    x: 8,\n    y: 3,\n    w: 3,\n    h: 4,\n    selector: 'v-incident-statuspage-links-widget',\n    input: { widgetConfig: { cardVariant: 'glass' } },\n  },\n  {\n    id: 'incident-broadcast-channels',\n    x: 5,\n    y: 3,\n    w: 2,\n    h: 4,\n    selector: 'v-incident-broadcast-channels-widget',\n    input: { widgetConfig: { cardVariant: 'glass' } },\n  },\n  {\n    id: 'incident-timeline',\n    x: 5,\n    y: 5,\n    w: 7,\n    h: 11,\n    selector: 'v-incident-timeline-widget',\n    input: { widgetConfig: { cardVariant: 'glass' } },\n  },\n];\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nconst MOBILE_MAX_WIDTH = 767;\nconst TABLET_MAX_WIDTH = 1023;\nconst SMALL_DESKTOP_MAX_WIDTH = 1279;\n\nexport enum ScreenSize {\n  Mobile = MOBILE_MAX_WIDTH,\n  Tablet = TABLET_MAX_WIDTH,\n  SmallDesktop = SMALL_DESKTOP_MAX_WIDTH,\n  Desktop = Number.MAX_SAFE_INTEGER, // Represents any width larger than SMALL_DESKTOP_MAX_WIDTH\n}\n\nexport interface EnvironmentOptions {\n  screenSize: ScreenSize;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class EnvironmentService {\n  private settingsSubject: BehaviorSubject<EnvironmentOptions>;\n\n  constructor() {\n    const initialSettings: EnvironmentOptions = {\n      screenSize: this.getNormalizedScreenWidth(),\n    };\n\n    this.settingsSubject = new BehaviorSubject<EnvironmentOptions>(\n      initialSettings\n    );\n    this.startListeningToResize();\n  }\n\n  get settings$(): Observable<EnvironmentOptions> {\n    return this.settingsSubject.asObservable();\n  }\n\n  private startListeningToResize(): void {\n    window.addEventListener('resize', () => {\n      const newSettings = {\n        ...this.settingsSubject.value,\n        screenSize: this.getNormalizedScreenWidth(),\n      };\n      this.settingsSubject.next(newSettings);\n    });\n  }\n\n  private getNormalizedScreenWidth(): ScreenSize {\n    const width = window.innerWidth;\n\n    if (width <= ScreenSize.Mobile) {\n      return ScreenSize.Mobile;\n    } else if (width <= ScreenSize.Tablet) {\n      return ScreenSize.Tablet;\n    } else if (width <= ScreenSize.SmallDesktop) {\n      return ScreenSize.SmallDesktop;\n    } else {\n      return ScreenSize.Desktop;\n    }\n  }\n}\n","import { UISettings } from 'src/app/models/ui-settings';\n\nexport class UpdateUISettingAction<K extends keyof UISettings> {\n  static readonly type = '[UISettings] Toggle Setting';\n\n  constructor(\n    public setting: K,\n    public value: Partial<UISettings[K]>\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n  Action,\n  createSelector,\n  NgxsOnInit,\n  State,\n  StateContext,\n} from '@ngxs/store';\nimport { UISettings } from 'src/app/models/ui-settings';\nimport { DefaultGridLayout } from 'src/app/pages/internal/incidents/components/widgets/layouts';\nimport {\n  EnvironmentService,\n  ScreenSize,\n} from 'src/app/services/environment/environment.service';\nimport { UpdateUISettingAction } from './ui-settings.actions';\n\nexport type UISettingsStateModel = UISettings;\n\n@State<UISettingsStateModel>({\n  name: 'uisettings',\n  defaults: {\n    incidentDashboardSettings: {\n      widgets: DefaultGridLayout,\n      cardVariant: 'glass',\n      editable: false,\n    },\n  },\n})\n@Injectable()\nexport class UISettingsState implements NgxsOnInit {\n  environmentService = inject(EnvironmentService);\n\n  static setting<T extends keyof UISettingsStateModel>(settingName: T) {\n    return createSelector([UISettingsState], (state: UISettingsStateModel) => {\n      return state[settingName] as UISettingsStateModel[T];\n    });\n  }\n\n  @Action(UpdateUISettingAction)\n  updateUISetting(\n    ctx: StateContext<UISettingsStateModel>,\n    { setting, value }: UpdateUISettingAction<keyof UISettingsStateModel>\n  ) {\n    if (value === undefined) return;\n\n    if (\n      typeof value === 'object' &&\n      typeof ctx.getState()[setting] === 'object'\n    ) {\n      ctx.patchState({\n        [setting]: {\n          ...(ctx.getState()[setting] as object),\n          ...(value as object),\n        },\n      });\n    } else {\n      ctx.patchState({\n        [setting]: value,\n      });\n    }\n  }\n\n  ngxsOnInit(ctx: StateContext<UISettingsStateModel>) {\n    this.environmentService.settings$.subscribe(settings => {\n      if (!ctx.getState().isSidemenuPinned) {\n        const isCollapsed = settings.screenSize <= ScreenSize.SmallDesktop;\n\n        ctx.patchState({\n          isSidemenuCollapsed: isCollapsed,\n        });\n      }\n    });\n\n    if (!ctx.getState().incidentDashboardSettings) {\n      ctx.patchState({\n        incidentDashboardSettings: {\n          widgets: DefaultGridLayout,\n          cardVariant: 'glass',\n          editable: false,\n        },\n      });\n    }\n  }\n}\n"],"names":["DefaultGridLayout","id","x","y","w","h","selector","input","widgetConfig","cardVariant","ScreenSize","Number","MAX_SAFE_INTEGER","EnvironmentService","constructor","initialSettings","screenSize","getNormalizedScreenWidth","settingsSubject","BehaviorSubject","startListeningToResize","settings$","asObservable","window","addEventListener","newSettings","__spreadProps","__spreadValues","value","next","width","innerWidth","Mobile","Tablet","SmallDesktop","Desktop","factory","ɵfac","providedIn","UpdateUISettingAction","type","constructor","setting","value","UISettingsState","constructor","environmentService","inject","EnvironmentService","setting","settingName","createSelector","UISettingsState_1","state","updateUISetting","ctx","value","undefined","getState","patchState","__spreadValues","ngxsOnInit","settings$","subscribe","settings","isSidemenuPinned","isCollapsed","screenSize","ScreenSize","SmallDesktop","isSidemenuCollapsed","incidentDashboardSettings","widgets","DefaultGridLayout","cardVariant","editable","factory","ɵfac","__decorate","Action","UpdateUISettingAction","State","name","defaults"],"mappings":"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","debug_id":"ba351557-442d-52a2-91e5-e57ac0d2eca3"}