@itwin/appui-react 3.4.0-dev.37 → 3.4.0-dev.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -755,23 +755,18 @@ export function isPanelCollapsed(zoneStates, panelStates) {
755
755
  function addHiddenWidget(state, widgetDef) {
756
756
  const tabLocation = widgetDef.tabLocation || widgetDef.defaultTabLocation;
757
757
  const tabId = widgetDef.id;
758
- const widgetId = tabLocation.widgetId;
758
+ const { widgetId, tabIndex } = tabLocation;
759
759
  if (widgetId in state.widgets) {
760
760
  // Add to an existing widget (by widget id).
761
- return insertTabToWidget(state, tabId, widgetId, tabLocation.tabIndex);
761
+ return insertTabToWidget(state, tabId, widgetId, tabIndex);
762
762
  }
763
763
  else if (tabLocation.floatingWidget) {
764
764
  const floatingWidget = tabLocation.floatingWidget;
765
- const floatingWidgetId = floatingWidget.id;
766
- // Add to an existing floating widget.
767
- // istanbul ignore next
768
- if (floatingWidgetId in state.widgets) {
769
- return insertTabToWidget(state, tabId, floatingWidgetId, tabLocation.tabIndex);
770
- }
765
+ assert(widgetId === floatingWidget.id);
771
766
  // Add to a new floating widget.
772
767
  const nzBounds = Rectangle.createFromSize(state.size);
773
768
  const bounds = Rectangle.create(floatingWidget.bounds).containIn(nzBounds);
774
- return addFloatingWidget(state, floatingWidgetId, [tabId], {
769
+ return addFloatingWidget(state, floatingWidget.id, [tabId], {
775
770
  ...floatingWidget,
776
771
  bounds: bounds.toProps(),
777
772
  });
@@ -790,6 +785,7 @@ function addHiddenWidget(state, widgetDef) {
790
785
  }
791
786
  /** @internal */
792
787
  export function setWidgetState(state, widgetDef, widgetState) {
788
+ var _a, _b;
793
789
  if (widgetState === WidgetState.Hidden) {
794
790
  return hideWidget(state, widgetDef);
795
791
  }
@@ -839,6 +835,21 @@ export function setWidgetState(state, widgetDef, widgetState) {
839
835
  }
840
836
  });
841
837
  }
838
+ else if (widgetState === WidgetState.Floating) {
839
+ const id = widgetDef.id;
840
+ let location = getTabLocation(state, id);
841
+ if (!location) {
842
+ state = addHiddenWidget(state, widgetDef);
843
+ location = getTabLocation(state, id);
844
+ }
845
+ assert(!!location);
846
+ if (isFloatingTabLocation(location))
847
+ return state;
848
+ // Widget is not floating.
849
+ state = removeTabFromWidget(state, id);
850
+ const bounds = (_b = (_a = widgetDef.tabLocation) === null || _a === void 0 ? void 0 : _a.floatingWidget) === null || _b === void 0 ? void 0 : _b.bounds;
851
+ state = addFloatingWidget(state, getUniqueId(), [id], { bounds });
852
+ }
842
853
  return state;
843
854
  }
844
855
  /** Stores widget location and hides it in the UI. */
@@ -853,7 +864,7 @@ function hideWidget(state, widgetDef) {
853
864
  widgetDef.tabLocation = {
854
865
  side: floatingWidget.home.side,
855
866
  tabIndex: floatingWidget.home.widgetIndex,
856
- widgetId: widgetDef.id,
867
+ widgetId: floatingWidget.id,
857
868
  widgetIndex: floatingWidget.home.widgetIndex,
858
869
  floatingWidget,
859
870
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Frontstage.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Frontstage.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n\r\n/** @packageDocumentation\r\n * @module Frontstage\r\n */\r\n\r\n// cSpell:ignore popout\r\n\r\nimport \"./Frontstage.scss\";\r\nimport produce from \"immer\";\r\nimport * as React from \"react\";\r\nimport { assert, Logger, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport { StagePanelLocation, UiItemsManager, WidgetState } from \"@itwin/appui-abstract\";\r\nimport { Rectangle, RectangleProps, Size, SizeProps, UiStateStorageResult, UiStateStorageStatus } from \"@itwin/core-react\";\r\nimport { ToolbarPopupAutoHideContext } from \"@itwin/components-react\";\r\nimport {\r\n addFloatingWidget, addPanelWidget, addTab, addTabToWidget, convertAllPopupWidgetContainersToFloating, createNineZoneState, floatingWidgetBringToFront,\r\n FloatingWidgetHomeState,\r\n FloatingWidgets, getTabLocation, getUniqueId, getWidgetPanelSectionId, insertPanelWidget, insertTabToWidget, isFloatingTabLocation,\r\n isHorizontalPanelSide, isPanelTabLocation, isPopoutTabLocation, NineZone, NineZoneAction, NineZoneDispatch, NineZoneLabels, NineZoneState, NineZoneStateReducer, PanelSide,\r\n panelSides, removeTab, removeTabFromWidget, TabState, toolSettingsTabId, WidgetPanels,\r\n} from \"@itwin/appui-layout-react\";\r\nimport { useActiveFrontstageDef } from \"../frontstage/Frontstage\";\r\nimport { FrontstageDef, FrontstageEventArgs, FrontstageNineZoneStateChangedEventArgs } from \"../frontstage/FrontstageDef\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { StagePanelMaxSizeSpec } from \"../stagepanels/StagePanel\";\r\nimport { StagePanelState, StagePanelZoneDefKeys } from \"../stagepanels/StagePanelDef\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { useUiStateStorageHandler } from \"../uistate/useUiStateStorage\";\r\nimport { TabLocation, WidgetDef, WidgetEventArgs, WidgetStateChangedEventArgs } from \"../widgets/WidgetDef\";\r\nimport { ZoneState } from \"../zones/ZoneDef\";\r\nimport { WidgetContent } from \"./Content\";\r\nimport { WidgetPanelsFrontstageContent } from \"./FrontstageContent\";\r\nimport { ModalFrontstageComposer, useActiveModalFrontstageInfo } from \"./ModalFrontstageComposer\";\r\nimport { WidgetPanelsStatusBar } from \"./StatusBar\";\r\nimport { WidgetPanelsTab } from \"./Tab\";\r\nimport { WidgetPanelsToolbars } from \"./Toolbars\";\r\nimport { ToolSettingsContent, WidgetPanelsToolSettings } from \"./ToolSettings\";\r\nimport { useEscapeSetFocusToHome } from \"../hooks/useEscapeSetFocusToHome\";\r\nimport { FrameworkRootState } from \"../redux/StateManager\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\n\r\nconst panelZoneKeys: StagePanelZoneDefKeys[] = [\"start\", \"end\"];\r\n\r\nconst WidgetInternals = React.memo(function WidgetInternals() { // eslint-disable-line @typescript-eslint/naming-convention, no-shadow\r\n const activeModalFrontstageInfo = useActiveModalFrontstageInfo();\r\n const uiIsVisible = useUiVisibility();\r\n\r\n return (\r\n <>\r\n <ToolbarPopupAutoHideContext.Provider value={!uiIsVisible}>\r\n <ModalFrontstageComposer stageInfo={activeModalFrontstageInfo} />\r\n <WidgetPanels\r\n className=\"uifw-widgetPanels\"\r\n centerContent={<WidgetPanelsToolbars />}\r\n >\r\n <WidgetPanelsFrontstageContent />\r\n </WidgetPanels>\r\n <WidgetPanelsStatusBar />\r\n <FloatingWidgets />\r\n </ToolbarPopupAutoHideContext.Provider>\r\n </>\r\n );\r\n});\r\n\r\n// istanbul ignore next\r\nconst WidgetPanelsFrontstageComponent = React.memo(function WidgetPanelsFrontstageComponent() { // eslint-disable-line @typescript-eslint/naming-convention, no-shadow\r\n\r\n return (\r\n <>\r\n <WidgetPanelsToolSettings />\r\n <WidgetInternals />\r\n </>\r\n );\r\n});\r\n\r\nconst widgetContent = <WidgetContent />;\r\nconst toolSettingsContent = <ToolSettingsContent />;\r\nconst widgetPanelsFrontstage = <WidgetPanelsFrontstageComponent />;\r\n\r\n/** @internal */\r\nexport function useNineZoneState(frontstageDef: FrontstageDef) {\r\n const lastFrontstageDef = React.useRef(frontstageDef);\r\n const [nineZone, setNineZone] = React.useState(frontstageDef.nineZoneState);\r\n React.useEffect(() => {\r\n setNineZone(frontstageDef.nineZoneState);\r\n lastFrontstageDef.current = frontstageDef;\r\n }, [frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = (args: FrontstageNineZoneStateChangedEventArgs) => {\r\n if (args.frontstageDef !== frontstageDef || frontstageDef.isStageClosing || frontstageDef.isApplicationClosing)\r\n return;\r\n setNineZone(args.state);\r\n };\r\n return FrontstageManager.onFrontstageNineZoneStateChangedEvent.addListener(listener);\r\n }, [frontstageDef]);\r\n return lastFrontstageDef.current === frontstageDef ? nineZone : frontstageDef.nineZoneState;\r\n}\r\n\r\n/** @returns Defined NineZoneState with fallback to last defined and default NineZoneState.\r\n * @internal\r\n */\r\nfunction useCachedNineZoneState(nineZone: NineZoneState | undefined): NineZoneState {\r\n const cached = React.useRef<NineZoneState>(nineZone || defaultNineZone);\r\n React.useEffect(() => {\r\n if (nineZone)\r\n cached.current = nineZone;\r\n }, [nineZone]);\r\n return nineZone || cached.current;\r\n}\r\n\r\n/** Update in-memory NineZoneState of newly activated frontstage with up to date size.\r\n * @internal\r\n */\r\nexport function useUpdateNineZoneSize(frontstageDef: FrontstageDef) {\r\n React.useEffect(() => {\r\n const size = FrontstageManager.nineZoneSize;\r\n let state = frontstageDef.nineZoneState;\r\n if (!size || !state)\r\n return;\r\n state = FrameworkStateReducer(state, {\r\n type: \"RESIZE\",\r\n size: {\r\n height: size.height,\r\n width: size.width,\r\n },\r\n }, frontstageDef);\r\n frontstageDef.nineZoneState = state;\r\n }, [frontstageDef]);\r\n}\r\n\r\nfunction FrameworkStateReducer(state: NineZoneState, action: NineZoneAction, frontstageDef: FrontstageDef) {\r\n state = NineZoneStateReducer(state, action);\r\n if (action.type === \"RESIZE\") {\r\n state = produce(state, (draft) => {\r\n for (const panelSide of panelSides) {\r\n const panel = draft.panels[panelSide];\r\n const location = toStagePanelLocation(panelSide);\r\n const panelDef = frontstageDef.getStagePanelDef(location);\r\n if (panelDef?.maxSizeSpec) {\r\n panel.maxSize = getPanelMaxSize(panelDef.maxSizeSpec, panelSide, action.size);\r\n if (panel.size) {\r\n panel.size = Math.min(Math.max(panel.size, panel.minSize), panel.maxSize);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n return state;\r\n}\r\n\r\n/** @internal */\r\nexport function useNineZoneDispatch(frontstageDef: FrontstageDef) {\r\n const dispatch = React.useCallback<NineZoneDispatch>((action) => {\r\n if (action.type === \"RESIZE\") {\r\n FrontstageManager.nineZoneSize = Size.create(action.size);\r\n }\r\n // istanbul ignore if\r\n if (action.type === \"TOOL_SETTINGS_DRAG_START\") {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n UiFramework.postTelemetry(\"Tool Settings Undocking\", \"28B04E07-AE73-4533-A0BA-8E2A8DC99ADF\");\r\n }\r\n // istanbul ignore if\r\n if (action.type === \"TOOL_SETTINGS_DOCK\") {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n UiFramework.postTelemetry(\"Tool Settings Docking to Settings Bar\", \"BEDE684B-B3DB-4637-B3AF-DC3CBA223F94\");\r\n }\r\n if (action.type === \"WIDGET_TAB_POPOUT\") {\r\n const tabId = action.id;\r\n frontstageDef.popoutWidget(tabId);\r\n return;\r\n }\r\n if (action.type === \"FLOATING_WIDGET_SET_BOUNDS\") {\r\n frontstageDef.setFloatingWidgetBoundsInternal(action.id, action.bounds, true);\r\n return;\r\n }\r\n const nineZoneState = frontstageDef.nineZoneState;\r\n if (!nineZoneState)\r\n return;\r\n frontstageDef.nineZoneState = FrameworkStateReducer(nineZoneState, action, frontstageDef);\r\n }, [frontstageDef]);\r\n return dispatch;\r\n}\r\n\r\n/** @internal */\r\nexport const WidgetPanelsFrontstage = React.memo(function WidgetPanelsFrontstage() { // eslint-disable-line @typescript-eslint/naming-convention, no-shadow\r\n const frontstageDef = useActiveFrontstageDef();\r\n\r\n React.useEffect(() => {\r\n const triggerWidowCloseProcessing = () => {\r\n frontstageDef && frontstageDef.setIsApplicationClosing(true);\r\n };\r\n\r\n frontstageDef && frontstageDef.setIsApplicationClosing(false);\r\n\r\n window.addEventListener(\"unload\", triggerWidowCloseProcessing);\r\n return () => {\r\n window.removeEventListener(\"unload\", triggerWidowCloseProcessing);\r\n };\r\n }, [frontstageDef]);\r\n\r\n if (!frontstageDef)\r\n return null;\r\n return (\r\n <ActiveFrontstageDefProvider frontstageDef={frontstageDef} />\r\n );\r\n});\r\n\r\nconst defaultNineZone = createNineZoneState();\r\nconst tabElement = <WidgetPanelsTab />;\r\n\r\n/** @internal */\r\nexport function ActiveFrontstageDefProvider({ frontstageDef }: { frontstageDef: FrontstageDef }) {\r\n let nineZone = useNineZoneState(frontstageDef);\r\n nineZone = useCachedNineZoneState(nineZone);\r\n const dispatch = useNineZoneDispatch(frontstageDef);\r\n useUpdateNineZoneSize(frontstageDef);\r\n useSavedFrontstageState(frontstageDef);\r\n useSaveFrontstageSettings(frontstageDef);\r\n useItemsManager(frontstageDef);\r\n const labels = useLabels();\r\n const uiIsVisible = useUiVisibility();\r\n const showWidgetIcon = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.showWidgetIcon;\r\n });\r\n const autoCollapseUnpinnedPanels = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.autoCollapseUnpinnedPanels;\r\n });\r\n const animateToolSettings = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.animateToolSettings;\r\n });\r\n const useToolAsToolSettingsLabel = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.useToolAsToolSettingsLabel;\r\n });\r\n useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel);\r\n\r\n const handleKeyDown = useEscapeSetFocusToHome();\r\n return (\r\n <div\r\n className=\"uifw-widgetPanels-frontstage\"\r\n onKeyDown={handleKeyDown}\r\n role=\"presentation\"\r\n >\r\n <NineZone\r\n dispatch={dispatch}\r\n labels={labels}\r\n state={nineZone}\r\n tab={tabElement}\r\n showWidgetIcon={showWidgetIcon}\r\n autoCollapseUnpinnedPanels={autoCollapseUnpinnedPanels}\r\n toolSettingsContent={toolSettingsContent}\r\n widgetContent={widgetContent}\r\n animateDockedToolSettings={animateToolSettings}\r\n uiIsVisible={uiIsVisible}\r\n >\r\n {widgetPanelsFrontstage}\r\n </NineZone>\r\n </div>\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport function useLabels() {\r\n return React.useMemo<NineZoneLabels>(() => ({\r\n dockToolSettingsTitle: UiFramework.translate(\"widget.tooltips.dockToolSettings\"),\r\n moreWidgetsTitle: UiFramework.translate(\"widget.tooltips.moreWidgets\"),\r\n moreToolSettingsTitle: UiFramework.translate(\"widget.tooltips.moreToolSettings\"),\r\n pinPanelTitle: UiFramework.translate(\"widget.tooltips.pinPanel\"),\r\n resizeGripTitle: UiFramework.translate(\"widget.tooltips.resizeGrip\"),\r\n sendWidgetHomeTitle: UiFramework.translate(\"widget.tooltips.sendHome\"),\r\n toolSettingsHandleTitle: UiFramework.translate(\"widget.tooltips.toolSettingsHandle\"),\r\n unpinPanelTitle: UiFramework.translate(\"widget.tooltips.unpinPanel\"),\r\n popoutActiveTab: UiFramework.translate(\"widget.tooltips.popoutActiveTab\"),\r\n }), []);\r\n}\r\n\r\n/** @internal */\r\nexport function addWidgets(state: NineZoneState, widgets: ReadonlyArray<WidgetDef>, side: PanelSide, widgetId: WidgetIdTypes): NineZoneState {\r\n const visibleWidgets = widgets.filter((w) => w.isVisible && (w.defaultState !== WidgetState.Floating));\r\n if (visibleWidgets.length === 0)\r\n return state;\r\n\r\n const tabs = new Array<string>();\r\n for (const widget of visibleWidgets) {\r\n const label = getWidgetLabel(widget.label);\r\n state = addTab(state, widget.id, {\r\n label,\r\n iconSpec: widget.iconSpec,\r\n preferredPanelWidgetSize: widget.preferredPanelSize,\r\n preferredFloatingWidgetSize: widget.defaultFloatingSize,\r\n canPopout: widget.canPopout,\r\n isFloatingStateWindowResizable: widget.isFloatingStateWindowResizable,\r\n hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,\r\n });\r\n tabs.push(widget.id);\r\n }\r\n\r\n const activeWidget = visibleWidgets.find((widget) => widget.isActive);\r\n const minimized = false;\r\n // istanbul ignore else\r\n if (activeWidget?.defaultState !== WidgetState.Floating) {\r\n state = addPanelWidget(state, side, widgetId, tabs, {\r\n activeTabId: activeWidget ? activeWidget.id : tabs[0],\r\n minimized,\r\n });\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/** @internal */\r\n// istanbul ignore next\r\nexport function appendWidgets(state: NineZoneState, widgetDefs: ReadonlyArray<WidgetDef>, side: PanelSide, preferredWidgetIndex: number): NineZoneState {\r\n if (widgetDefs.length === 0)\r\n return state;\r\n\r\n // Add missing widget tabs.\r\n for (const widgetDef of widgetDefs) {\r\n const label = getWidgetLabel(widgetDef.label);\r\n const saveTab = state.tabs[widgetDef.id];\r\n const preferredPanelWidgetSize = saveTab ? saveTab.preferredPanelWidgetSize : widgetDef.preferredPanelSize;\r\n const preferredFloatingWidgetSize = saveTab ? saveTab.preferredFloatingWidgetSize : widgetDef.defaultFloatingSize;\r\n // if a defaultFloatingSize is specified then this mean the widget can't determine its intrinsic size and must be explicitly sized\r\n const userSized = saveTab ? (saveTab.userSized || !!widgetDef.defaultFloatingSize && !!saveTab.preferredFloatingWidgetSize)\r\n : !!widgetDef.defaultFloatingSize;\r\n state = addTab(state, widgetDef.id, {\r\n label,\r\n iconSpec: widgetDef.iconSpec,\r\n canPopout: widgetDef.canPopout,\r\n preferredPanelWidgetSize,\r\n preferredFloatingWidgetSize,\r\n userSized,\r\n isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,\r\n hideWithUiWhenFloating: !!widgetDef.hideWithUiWhenFloating,\r\n });\r\n\r\n if (widgetDef.isFloatingStateSupported && widgetDef.defaultState === WidgetState.Floating) {\r\n const floatingContainerId = widgetDef.floatingContainerId ?? getUniqueId();\r\n const widgetContainerId = getWidgetId(side, panelZoneKeys[preferredWidgetIndex]);\r\n const home: FloatingWidgetHomeState = { side, widgetId: widgetContainerId, widgetIndex: 0 };\r\n const preferredPosition = widgetDef.defaultFloatingPosition;\r\n\r\n if (floatingContainerId in state.widgets) {\r\n state = addTabToWidget(state, widgetDef.id, floatingContainerId);\r\n } else {\r\n const tab = state.tabs[widgetDef.id];\r\n\r\n const size = { height: 200, width: 300, ...tab.preferredFloatingWidgetSize };\r\n const preferredPoint = preferredPosition ?? { x: (state.size.width - size.width) / 2, y: (state.size.height - size.height) / 2 };\r\n const nzBounds = Rectangle.createFromSize(state.size);\r\n const bounds = Rectangle.createFromSize(size).offset(preferredPoint);\r\n const containedBounds = bounds.containIn(nzBounds);\r\n\r\n state = addFloatingWidget(state, floatingContainerId, [widgetDef.id], {\r\n bounds: containedBounds.toProps(),\r\n home,\r\n userSized,\r\n }, {\r\n isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,\r\n });\r\n }\r\n } else {\r\n const widgetPanelSectionId = getWidgetPanelSectionId(side, preferredWidgetIndex);\r\n if (widgetPanelSectionId in state.widgets) {\r\n state = addTabToWidget(state, widgetDef.id, widgetPanelSectionId);\r\n } else {\r\n state = addPanelWidget(state, side, widgetPanelSectionId, [widgetDef.id]);\r\n }\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\nfunction processPopoutWidgets(initialState: NineZoneState, frontstageDef: FrontstageDef): NineZoneState {\r\n // istanbul ignore next\r\n if (!initialState.popoutWidgets)\r\n return initialState;\r\n\r\n // istanbul ignore next - not unit testing electron case that reopens popout windows\r\n if (initialState.popoutWidgets && ProcessDetector.isElectronAppFrontend) {\r\n if (initialState.popoutWidgets.allIds.length && ProcessDetector.isElectronAppFrontend) {\r\n for (const widgetContainerId of initialState.popoutWidgets.allIds) {\r\n frontstageDef.openPopoutWidgetContainer(initialState, widgetContainerId);\r\n }\r\n }\r\n return initialState;\r\n }\r\n\r\n return convertAllPopupWidgetContainersToFloating(initialState);\r\n}\r\n\r\n/** Adds frontstageDef widgets that are missing in NineZoneState.\r\n * @internal\r\n */\r\nexport function addMissingWidgets(frontstageDef: FrontstageDef, initialState: NineZoneState): NineZoneState {\r\n let state = initialState;\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.centerLeft?.widgetDefs, state), \"left\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.panelZones.start.widgetDefs, state), \"left\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomLeft?.widgetDefs, state), \"left\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.panelWidgetDefs, state), \"left\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.panelZones.end.widgetDefs, state), \"left\", 1);\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.centerRight?.widgetDefs, state), \"right\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.panelZones.start.widgetDefs, state), \"right\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomRight?.widgetDefs, state), \"right\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.panelWidgetDefs, state), \"right\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.panelZones.end.widgetDefs, state), \"right\", 1);\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.panelWidgetDefs, state), \"top\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.panelZones.start.widgetDefs, state), \"top\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topMostPanel?.panelWidgetDefs, state), \"top\", 1); // eslint-disable-line deprecation/deprecation\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.panelZones.end.widgetDefs, state), \"top\", 1);\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.panelWidgetDefs, state), \"bottom\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.panelZones.start.widgetDefs, state), \"bottom\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomMostPanel?.panelWidgetDefs, state), \"bottom\", 1); // eslint-disable-line deprecation/deprecation\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.panelZones.end.widgetDefs, state), \"bottom\", 1);\r\n\r\n return state;\r\n}\r\n\r\n/** Hide widgets with Hidden defaultState. */\r\nfunction hideWidgets(state: NineZoneState, frontstageDef: FrontstageDef): NineZoneState {\r\n const tabs = Object.values(state.tabs);\r\n for (const tab of tabs) {\r\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\r\n if (!widgetDef)\r\n continue;\r\n\r\n if (widgetDef.defaultState === WidgetState.Hidden) {\r\n state = hideWidget(state, widgetDef);\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/** Removes NineZoneState widgets that are missing in frontstageDef.\r\n * @internal\r\n */\r\nexport function removeMissingWidgets(frontstageDef: FrontstageDef, initialState: NineZoneState): NineZoneState {\r\n let state = initialState;\r\n for (const [, tab] of Object.entries(state.tabs)) {\r\n if (tab.id === toolSettingsTabId)\r\n continue;\r\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\r\n if (widgetDef)\r\n continue;\r\n state = removeTab(state, tab.id);\r\n }\r\n return state;\r\n}\r\n\r\nfunction getWidgetLabel(label: string) {\r\n return label === \"\" ? \"Widget\" : label;\r\n}\r\n\r\ntype WidgetIdTypes =\r\n \"leftStart\" |\r\n \"leftEnd\" |\r\n \"rightStart\" |\r\n \"rightEnd\" |\r\n \"topStart\" |\r\n \"topEnd\" |\r\n \"bottomStart\" |\r\n \"bottomEnd\";\r\n\r\nfunction toStagePanelLocation(side: PanelSide): StagePanelLocation {\r\n switch (side) {\r\n case \"bottom\":\r\n return StagePanelLocation.Bottom;\r\n case \"left\":\r\n return StagePanelLocation.Left;\r\n case \"right\":\r\n return StagePanelLocation.Right;\r\n case \"top\":\r\n return StagePanelLocation.Top;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getWidgetId(side: PanelSide, key: StagePanelZoneDefKeys): WidgetIdTypes {\r\n switch (side) {\r\n case \"left\": {\r\n if (key === \"start\") {\r\n return \"leftStart\";\r\n }\r\n return \"leftEnd\";\r\n }\r\n case \"right\": {\r\n if (key === \"start\") {\r\n return \"rightStart\";\r\n }\r\n return \"rightEnd\";\r\n }\r\n case \"top\": {\r\n if (key === \"start\") {\r\n return \"topStart\";\r\n }\r\n return \"topEnd\";\r\n }\r\n case \"bottom\": {\r\n if (key === \"start\")\r\n return \"bottomStart\";\r\n return \"bottomEnd\";\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getPanelZoneWidgets(frontstageDef: FrontstageDef, panelZone: WidgetIdTypes): WidgetDef[] {\r\n switch (panelZone) {\r\n case \"leftStart\": {\r\n const outArray = [...frontstageDef.centerLeft?.widgetDefs || []];\r\n frontstageDef.leftPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"leftEnd\": {\r\n const outArray = [...frontstageDef.bottomLeft?.widgetDefs || []];\r\n frontstageDef.leftPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n frontstageDef.leftPanel?.panelWidgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"rightStart\": {\r\n const outArray = [...frontstageDef.centerRight?.widgetDefs || []];\r\n frontstageDef.rightPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"rightEnd\": {\r\n const outArray = [...frontstageDef.bottomRight?.widgetDefs || []];\r\n frontstageDef.rightPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n frontstageDef.rightPanel?.panelWidgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"topStart\": {\r\n const outArray = [...frontstageDef.topPanel?.panelWidgetDefs || []];\r\n frontstageDef.topPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"topEnd\": {\r\n const outArray = [...frontstageDef.topMostPanel?.panelWidgetDefs || []]; // eslint-disable-line deprecation/deprecation\r\n frontstageDef.topPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"bottomStart\": {\r\n const outArray = [...frontstageDef.bottomPanel?.panelWidgetDefs || []];\r\n frontstageDef.bottomPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"bottomEnd\": {\r\n const outArray = [...frontstageDef.bottomMostPanel?.panelWidgetDefs || []]; // eslint-disable-line deprecation/deprecation\r\n frontstageDef.bottomPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addPanelWidgets(\r\n state: NineZoneState,\r\n frontstageDef: FrontstageDef,\r\n side: PanelSide,\r\n): NineZoneState {\r\n const start = getWidgetId(side, \"start\");\r\n const startWidgets = getPanelZoneWidgets(frontstageDef, start);\r\n state = addWidgets(state, determineNewWidgets(startWidgets, state), side, start);\r\n\r\n const end = getWidgetId(side, \"end\");\r\n const endWidgets = getPanelZoneWidgets(frontstageDef, end);\r\n state = addWidgets(state, determineNewWidgets(endWidgets, state), side, end);\r\n return state;\r\n}\r\n\r\n/** @internal */\r\nexport function isFrontstageStateSettingResult(settingsResult: UiStateStorageResult): settingsResult is { // eslint-disable-line deprecation/deprecation\r\n status: UiStateStorageStatus.Success;\r\n setting: WidgetPanelsFrontstageState;\r\n} {\r\n if (settingsResult.status === UiStateStorageStatus.Success)\r\n return true;\r\n return false;\r\n}\r\n\r\n/** @internal */\r\nexport function initializePanel(state: NineZoneState, frontstageDef: FrontstageDef, panelSide: PanelSide) {\r\n state = addPanelWidgets(state, frontstageDef, panelSide);\r\n const location = toStagePanelLocation(panelSide);\r\n const panelDef = frontstageDef.getStagePanelDef(location);\r\n state = produce(state, (draft) => {\r\n const panel = draft.panels[panelSide];\r\n panel.minSize = panelDef?.minSize ?? panel.minSize;\r\n panel.pinned = panelDef?.pinned ?? panel.pinned;\r\n panel.resizable = panelDef?.resizable ?? panel.resizable;\r\n if (panelDef?.maxSizeSpec) {\r\n panel.maxSize = getPanelMaxSize(panelDef.maxSizeSpec, panelSide, state.size);\r\n }\r\n\r\n const size = panelDef?.size;\r\n panel.size = size === undefined ? size : Math.min(Math.max(size, panel.minSize), panel.maxSize);\r\n });\r\n return state;\r\n}\r\n\r\nfunction getPanelMaxSize(maxSizeSpec: StagePanelMaxSizeSpec, panel: PanelSide, nineZoneSize: SizeProps) {\r\n if (typeof maxSizeSpec === \"number\") {\r\n return maxSizeSpec;\r\n }\r\n const size = isHorizontalPanelSide(panel) ? nineZoneSize.height : nineZoneSize.width;\r\n return maxSizeSpec.percentage / 100 * size;\r\n}\r\n\r\nconst stateVersion = 13; // this needs to be bumped when NineZoneState is changed (to recreate the layout).\r\n\r\n/** @internal */\r\nexport function initializeNineZoneState(frontstageDef: FrontstageDef): NineZoneState {\r\n let nineZone = defaultNineZone;\r\n nineZone = produce(nineZone, (stateDraft) => {\r\n // istanbul ignore next\r\n if (!FrontstageManager.nineZoneSize)\r\n return;\r\n stateDraft.size = {\r\n height: FrontstageManager.nineZoneSize.height,\r\n width: FrontstageManager.nineZoneSize.width,\r\n };\r\n });\r\n\r\n nineZone = initializePanel(nineZone, frontstageDef, \"left\");\r\n nineZone = initializePanel(nineZone, frontstageDef, \"right\");\r\n nineZone = initializePanel(nineZone, frontstageDef, \"top\");\r\n nineZone = initializePanel(nineZone, frontstageDef, \"bottom\");\r\n nineZone = produce(nineZone, (stateDraft) => {\r\n for (const [, panel] of Object.entries(stateDraft.panels)) {\r\n const expanded = panel.widgets.find((widgetId) => stateDraft.widgets[widgetId].minimized === false);\r\n const firstWidget = panel.widgets.length > 0 ? stateDraft.widgets[panel.widgets[0]] : undefined;\r\n // istanbul ignore next\r\n if (!expanded && firstWidget) {\r\n firstWidget.minimized = false;\r\n }\r\n }\r\n stateDraft.panels.left.collapsed = isPanelCollapsed([\r\n frontstageDef.centerLeft?.zoneState,\r\n frontstageDef.bottomLeft?.zoneState,\r\n ], [frontstageDef.leftPanel?.panelState]);\r\n stateDraft.panels.right.collapsed = isPanelCollapsed([\r\n frontstageDef.centerRight?.zoneState,\r\n frontstageDef.bottomRight?.zoneState,\r\n ], [frontstageDef.rightPanel?.panelState]);\r\n stateDraft.panels.top.collapsed = isPanelCollapsed([], [\r\n // istanbul ignore next - ignore topMostPanel if topPanel is defined\r\n frontstageDef.topPanel ? frontstageDef.topPanel?.panelState : frontstageDef.topMostPanel?.panelState,// eslint-disable-line deprecation/deprecation\r\n ]);\r\n stateDraft.panels.bottom.collapsed = isPanelCollapsed([], [\r\n // istanbul ignore next - ignore bottomMostPanel if bottomPanel is defined\r\n frontstageDef.bottomPanel ? frontstageDef.bottomPanel?.panelState : frontstageDef.bottomMostPanel?.panelState, // eslint-disable-line deprecation/deprecation\r\n ]);\r\n\r\n const topCenterDef = frontstageDef.topCenter;\r\n const toolSettingsWidgetDef = topCenterDef?.getSingleWidgetDef();\r\n if (toolSettingsWidgetDef) {\r\n const toolSettingsTab = stateDraft.tabs[toolSettingsTabId];\r\n toolSettingsTab.preferredPanelWidgetSize = toolSettingsWidgetDef.preferredPanelSize;\r\n }\r\n });\r\n nineZone = addMissingWidgets(frontstageDef, nineZone);\r\n nineZone = hideWidgets(nineZone, frontstageDef);\r\n nineZone = processPopoutWidgets(nineZone, frontstageDef);\r\n\r\n return nineZone;\r\n}\r\n\r\n/** Converts from saved NineZoneState to NineZoneState.\r\n * @note Restores toolSettings tab.\r\n * @note Restores tab labels.\r\n * @internal\r\n */\r\nexport function restoreNineZoneState(frontstageDef: FrontstageDef, saved: SavedNineZoneState): NineZoneState {\r\n let restored: NineZoneState = {\r\n ...saved,\r\n tabs: defaultNineZone.tabs,\r\n };\r\n\r\n for (const [, tab] of Object.entries(saved.tabs)) {\r\n // Re-add the placeholder tab in order to correctly remove it from the state if WidgetDef is not found.\r\n restored = addTab(restored, tab.id);\r\n\r\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\r\n if (!widgetDef) {\r\n Logger.logInfo(UiFramework.loggerCategory(restoreNineZoneState), \"WidgetDef is not found for saved tab.\", () => ({\r\n frontstageId: frontstageDef.id,\r\n tabId: tab.id,\r\n }));\r\n restored = removeTab(restored, tab.id);\r\n continue;\r\n }\r\n restored = produce(restored, (draft) => {\r\n draft.tabs[tab.id] = {\r\n ...tab,\r\n label: getWidgetLabel(widgetDef.label),\r\n hideWithUiWhenFloating: widgetDef.hideWithUiWhenFloating,\r\n iconSpec: widgetDef.iconSpec,\r\n canPopout: widgetDef.canPopout,\r\n isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,\r\n };\r\n });\r\n }\r\n restored = produce(restored, (draft) => {\r\n // remove center panel section if one is found in left or right panels\r\n const oldLeftMiddleIndex = saved.panels.left.widgets.findIndex((value) => value === \"leftMiddle\");\r\n // istanbul ignore next\r\n if (-1 !== oldLeftMiddleIndex) {\r\n draft.panels.left.widgets = saved.panels.left.widgets.filter((value) => value !== \"leftMiddle\");\r\n if (\"leftEnd\" in draft.widgets) {\r\n draft.widgets.leftMiddle.tabs.forEach((tab) => draft.widgets.leftEnd.tabs.push(tab));\r\n } else {\r\n draft.widgets.leftEnd = { ...draft.widgets.leftMiddle };\r\n delete draft.widgets.leftMiddle;\r\n }\r\n }\r\n\r\n const oldRightMiddleIndex = saved.panels.right.widgets.findIndex((value) => value === \"rightMiddle\");\r\n // istanbul ignore next\r\n if (-1 !== oldRightMiddleIndex) {\r\n draft.panels.right.widgets = saved.panels.right.widgets.filter((value) => value !== \"rightMiddle\");\r\n if (\"rightEnd\" in draft.widgets) {\r\n draft.widgets.rightMiddle.tabs.forEach((tab) => draft.widgets.rightEnd.tabs.push(tab));\r\n } else {\r\n draft.widgets.rightEnd = { ...draft.widgets.rightMiddle };\r\n delete draft.widgets.rightMiddle;\r\n }\r\n }\r\n\r\n return;\r\n });\r\n\r\n if (FrontstageManager.nineZoneSize && (0 !== FrontstageManager.nineZoneSize.height || 0 !== FrontstageManager.nineZoneSize.width)) {\r\n restored = FrameworkStateReducer(restored, {\r\n type: \"RESIZE\",\r\n size: {\r\n height: FrontstageManager.nineZoneSize.height,\r\n width: FrontstageManager.nineZoneSize.width,\r\n },\r\n }, frontstageDef);\r\n }\r\n return restored;\r\n}\r\n\r\n/** Prepares NineZoneState to be saved.\r\n * @note Removes toolSettings tab.\r\n * @note Removes tab labels and iconSpec.\r\n * @internal\r\n */\r\nexport function packNineZoneState(state: NineZoneState): SavedNineZoneState {\r\n let packed: SavedNineZoneState = {\r\n ...state,\r\n tabs: {},\r\n };\r\n packed = produce(packed, (draft) => {\r\n for (const [, tab] of Object.entries(state.tabs)) {\r\n if (tab.id === toolSettingsTabId)\r\n continue;\r\n\r\n draft.tabs[tab.id] = {\r\n id: tab.id,\r\n preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,\r\n allowedPanelTargets: tab.allowedPanelTargets,\r\n userSized: tab.userSized,\r\n };\r\n }\r\n });\r\n return packed;\r\n}\r\n\r\n// TODO: clean-up of saved widgets.\r\n// istanbul ignore next\r\nfunction packSavedWidgets(savedWidgets: SavedWidgets, frontstageDef: FrontstageDef): SavedWidgets {\r\n for (const widgetDef of frontstageDef.widgetDefs) {\r\n const id = widgetDef.id;\r\n const initialWidget: SavedWidget = {\r\n id,\r\n };\r\n const widget = produce(initialWidget, (draft) => {\r\n if (widgetDef.tabLocation) {\r\n draft.tabLocation = { ...widgetDef.tabLocation };\r\n }\r\n if (widgetDef.popoutBounds) {\r\n draft.popoutBounds = widgetDef.popoutBounds.toProps();\r\n }\r\n });\r\n if (widget === initialWidget)\r\n continue;\r\n\r\n savedWidgets = produce(savedWidgets, (draft) => {\r\n draft.push(widget);\r\n });\r\n }\r\n\r\n return savedWidgets;\r\n}\r\n\r\n// istanbul ignore next\r\nfunction restoreSavedWidgets(savedWidgets: SavedWidgets, frontstage: FrontstageDef) {\r\n let i = savedWidgets.length;\r\n while (i--) {\r\n const savedWidget = savedWidgets[i];\r\n const widgetId = savedWidget.id;\r\n const widgetDef = frontstage.findWidgetDef(widgetId);\r\n if (!widgetDef)\r\n continue;\r\n\r\n if (savedWidget.tabLocation) {\r\n widgetDef.tabLocation = { ...savedWidget.tabLocation };\r\n }\r\n if (savedWidget.popoutBounds) {\r\n widgetDef.popoutBounds = Rectangle.create(savedWidget.popoutBounds);\r\n }\r\n\r\n savedWidgets = produce(savedWidgets, (draft) => {\r\n draft.splice(i, 1);\r\n });\r\n }\r\n\r\n return savedWidgets;\r\n}\r\n\r\n/** @internal */\r\nexport function isPanelCollapsed(zoneStates: ReadonlyArray<ZoneState | undefined>, panelStates: ReadonlyArray<StagePanelState | undefined>) {\r\n const openZone = zoneStates.find((zoneState) => zoneState === ZoneState.Open);\r\n const openPanel = panelStates.find((panelState) => panelState === StagePanelState.Open);\r\n return !openZone && !openPanel;\r\n}\r\n\r\n/** FrontstageState is saved in UiStateStorage.\r\n * @internal\r\n */\r\nexport interface WidgetPanelsFrontstageState {\r\n nineZone: SavedNineZoneState;\r\n widgets: SavedWidgets;\r\n id: FrontstageDef[\"id\"];\r\n /** Frontstage version used to create the frontstage state. Allows to invalidate the layout from the frontstage. */\r\n version: number;\r\n /** Platform provided frontstage version. Allows to invalidate the layout from the platform. */\r\n stateVersion: number;\r\n}\r\n\r\n/** Saved data specific to `WidgetDef`. I.e. used to restore hidden widgets.\r\n * @internal\r\n */\r\nexport interface SavedWidget {\r\n readonly id: WidgetDef[\"id\"];\r\n readonly tabLocation?: TabLocation;\r\n readonly popoutBounds?: RectangleProps;\r\n}\r\n\r\n/** @internal */\r\nexport type SavedWidgets = ReadonlyArray<SavedWidget>;\r\n\r\n// We don't save tab labels or if widget is allowed to \"pop-out\".\r\ntype SavedTabState = Omit<TabState, \"label\" | \"canPopout\" | \"isFloatingStateWindowResizable\" | \"iconSpec\">;\r\n\r\ninterface SavedTabsState {\r\n readonly [id: string]: SavedTabState;\r\n}\r\n\r\n// // We don't save if widget is allowed to \"pop-out\" or if floating widget can be resized.\r\n// type SavedWidgetState = Omit<WidgetState, | \"canPopout\" | \"isFloatingStateWindowResizable\">;\r\n//\r\n// interface SavedWidgetsState {\r\n// readonly [id: string]: SavedWidgetState;\r\n// }\r\n\r\ninterface SavedNineZoneState extends Omit<NineZoneState, \"tabs\"> {\r\n readonly tabs: SavedTabsState;\r\n // readonly widgets: SavedWidgetsState;\r\n}\r\n\r\nfunction addHiddenWidget(state: NineZoneState, widgetDef: WidgetDef): NineZoneState {\r\n const tabLocation = widgetDef.tabLocation || widgetDef.defaultTabLocation;\r\n const tabId = widgetDef.id;\r\n const widgetId = tabLocation.widgetId;\r\n\r\n if (widgetId in state.widgets) {\r\n // Add to an existing widget (by widget id).\r\n return insertTabToWidget(state, tabId, widgetId, tabLocation.tabIndex);\r\n } else if (tabLocation.floatingWidget) {\r\n const floatingWidget = tabLocation.floatingWidget;\r\n const floatingWidgetId = floatingWidget.id;\r\n\r\n // Add to an existing floating widget.\r\n // istanbul ignore next\r\n if (floatingWidgetId in state.widgets) {\r\n return insertTabToWidget(state, tabId, floatingWidgetId, tabLocation.tabIndex);\r\n }\r\n\r\n // Add to a new floating widget.\r\n const nzBounds = Rectangle.createFromSize(state.size);\r\n const bounds = Rectangle.create(floatingWidget.bounds).containIn(nzBounds);\r\n return addFloatingWidget(state, floatingWidgetId, [tabId], {\r\n ...floatingWidget,\r\n bounds: bounds.toProps(),\r\n });\r\n }\r\n\r\n // Add to a panel section.\r\n const panel = state.panels[tabLocation.side];\r\n\r\n // Add to existing panel section.\r\n if (panel.widgets.length >= panel.maxWidgetCount) {\r\n const sectionIndex = Math.min(panel.maxWidgetCount - 1, tabLocation.widgetIndex);\r\n const sectionId = panel.widgets[sectionIndex];\r\n return insertTabToWidget(state, tabId, sectionId, tabLocation.tabIndex);\r\n }\r\n\r\n // Create a new panel section.\r\n const newSectionId = getUniqueId();\r\n return insertPanelWidget(state, panel.side, newSectionId, [tabId], tabLocation.widgetIndex);\r\n}\r\n\r\n/** @internal */\r\nexport function setWidgetState(\r\n state: NineZoneState,\r\n widgetDef: WidgetDef,\r\n widgetState: WidgetState,\r\n) {\r\n if (widgetState === WidgetState.Hidden) {\r\n return hideWidget(state, widgetDef);\r\n } else if (widgetState === WidgetState.Open) {\r\n const id = widgetDef.id;\r\n let location = getTabLocation(state, id);\r\n if (!location) {\r\n state = addHiddenWidget(state, widgetDef);\r\n location = getTabLocation(state, id);\r\n }\r\n\r\n return produce(state, (draft) => {\r\n assert(!!location);\r\n const widget = draft.widgets[location.widgetId];\r\n widget.minimized = false;\r\n widget.activeTabId = id;\r\n\r\n if (isFloatingTabLocation(location)) {\r\n const floatingWidget = draft.floatingWidgets.byId[location.floatingWidgetId];\r\n floatingWidget.hidden = false;\r\n // istanbul ignore else\r\n } else if (isPanelTabLocation(location)) {\r\n const panel = draft.panels[location.side];\r\n panel.collapsed = false;\r\n if (undefined === panel.size || 0 === panel.size) {\r\n // istanbul ignore next\r\n panel.size = panel.minSize ?? 200;\r\n }\r\n }\r\n });\r\n } else if (widgetState === WidgetState.Closed) {\r\n const id = widgetDef.id;\r\n let location = getTabLocation(state, id);\r\n if (!location) {\r\n state = addHiddenWidget(state, widgetDef);\r\n location = getTabLocation(state, id);\r\n }\r\n\r\n // TODO: should change activeTabId of a widget with multiple tabs.\r\n return produce(state, (draft) => {\r\n assert(!!location);\r\n const widget = draft.widgets[location.widgetId];\r\n\r\n if (isFloatingTabLocation(location)) {\r\n if (id === widget.activeTabId) {\r\n widget.minimized = true;\r\n }\r\n }\r\n });\r\n }\r\n return state;\r\n}\r\n\r\n/** Stores widget location and hides it in the UI. */\r\nfunction hideWidget(state: NineZoneState, widgetDef: WidgetDef) {\r\n const location = getTabLocation(state, widgetDef.id);\r\n if (!location)\r\n return state;\r\n // istanbul ignore else\r\n if (isFloatingTabLocation(location)) {\r\n const floatingWidget = state.floatingWidgets.byId[location.widgetId];\r\n widgetDef.setFloatingContainerId(location.floatingWidgetId);\r\n widgetDef.tabLocation = {\r\n side: floatingWidget.home.side,\r\n tabIndex: floatingWidget.home.widgetIndex,\r\n widgetId: widgetDef.id,\r\n widgetIndex: floatingWidget.home.widgetIndex,\r\n floatingWidget,\r\n };\r\n } else if (!isPopoutTabLocation(location)) {\r\n const widgetId = location.widgetId;\r\n const side = isPanelTabLocation(location) ? location.side : \"left\";\r\n const widgetIndex = isPanelTabLocation(location) ? state.panels[side].widgets.indexOf(widgetId) : 0;\r\n const tabIndex = state.widgets[location.widgetId].tabs.indexOf(widgetDef.id);\r\n widgetDef.tabLocation = {\r\n side,\r\n tabIndex,\r\n widgetId,\r\n widgetIndex,\r\n };\r\n }\r\n return removeTabFromWidget(state, widgetDef.id);\r\n}\r\n\r\n/** @internal */\r\nexport function showWidget(state: NineZoneState, id: TabState[\"id\"]) {\r\n const location = getTabLocation(state, id);\r\n if (!location)\r\n return state;\r\n state = produce(state, (draft) => {\r\n const widget = draft.widgets[location.widgetId];\r\n widget.activeTabId = id;\r\n widget.minimized = false;\r\n if (isPanelTabLocation(location)) {\r\n const panel = draft.panels[location.side];\r\n panel.collapsed = false;\r\n }\r\n });\r\n if (isFloatingTabLocation(location)) {\r\n state = floatingWidgetBringToFront(state, location.floatingWidgetId);\r\n }\r\n return state;\r\n}\r\n\r\n/** @internal */\r\nexport function expandWidget(state: NineZoneState, id: TabState[\"id\"]) {\r\n const location = getTabLocation(state, id);\r\n if (!location)\r\n return state;\r\n\r\n return produce(state, (draft) => {\r\n const widget = draft.widgets[location.widgetId];\r\n if (isPanelTabLocation(location)) {\r\n const panel = draft.panels[location.side];\r\n panel.widgets.forEach((wId) => {\r\n const w = draft.widgets[wId];\r\n w.minimized = true;\r\n });\r\n }\r\n widget.minimized = false;\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function setWidgetLabel(state: NineZoneState, id: TabState[\"id\"], label: string) {\r\n if (!(id in state.tabs))\r\n return state;\r\n\r\n return produce(state, (draft) => {\r\n const tab = draft.tabs[id];\r\n tab.label = label;\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function useSavedFrontstageState(frontstageDef: FrontstageDef) {\r\n const uiStateStorage = useUiStateStorageHandler();\r\n const uiStateStorageRef = React.useRef(uiStateStorage);\r\n const isMountedRef = React.useRef(false);\r\n React.useEffect(() => {\r\n isMountedRef.current = true;\r\n return () => { isMountedRef.current = false; };\r\n }, []);\r\n React.useEffect(() => {\r\n uiStateStorageRef.current = uiStateStorage;\r\n }, [uiStateStorage]);\r\n React.useEffect(() => {\r\n async function fetchFrontstageState() {\r\n if (frontstageDef.nineZoneState) {\r\n frontstageDef.nineZoneState = processPopoutWidgets(frontstageDef.nineZoneState, frontstageDef);\r\n return;\r\n }\r\n const id = frontstageDef.id;\r\n const version = frontstageDef.version;\r\n const settingResult = await uiStateStorageRef.current.getSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(id));\r\n if (!isMountedRef.current)\r\n return;\r\n\r\n if (isFrontstageStateSettingResult(settingResult)) {\r\n const setting = settingResult.setting;\r\n if (setting.version >= version && setting.stateVersion >= stateVersion) {\r\n const restored = restoreNineZoneState(frontstageDef, setting.nineZone);\r\n const savedWidgets = restoreSavedWidgets(setting.widgets, frontstageDef);\r\n let state = addMissingWidgets(frontstageDef, restored);\r\n state = hideWidgets(state, frontstageDef);\r\n state = processPopoutWidgets(state, frontstageDef);\r\n\r\n frontstageDef.nineZoneState = state;\r\n frontstageDef.savedWidgetDefs = savedWidgets;\r\n return;\r\n }\r\n }\r\n frontstageDef.nineZoneState = initializeNineZoneState(frontstageDef);\r\n }\r\n fetchFrontstageState(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }, [frontstageDef]);\r\n}\r\n\r\n/** @internal */\r\nexport function useSaveFrontstageSettings(frontstageDef: FrontstageDef) {\r\n const nineZone = useNineZoneState(frontstageDef);\r\n const uiSettingsStorage = useUiStateStorageHandler();\r\n const saveSetting = React.useMemo(() => {\r\n return debounce(async (frontstage: FrontstageDef, state: NineZoneState, savedWidgets: SavedWidgets) => {\r\n const id = frontstage.id;\r\n const setting: WidgetPanelsFrontstageState = {\r\n id,\r\n version: frontstage.version,\r\n stateVersion,\r\n nineZone: packNineZoneState(state),\r\n widgets: packSavedWidgets(savedWidgets, frontstage),\r\n };\r\n await uiSettingsStorage.saveSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(id), setting);\r\n }, 1000);\r\n }, [uiSettingsStorage]);\r\n React.useEffect(() => {\r\n return () => {\r\n saveSetting.cancel();\r\n };\r\n }, [saveSetting]);\r\n React.useEffect(() => {\r\n if (!nineZone || nineZone.draggedTab)\r\n return;\r\n const savedWidgets = frontstageDef.savedWidgetDefs || [];\r\n saveSetting(frontstageDef, nineZone, savedWidgets);\r\n }, [frontstageDef, nineZone, saveSetting]);\r\n}\r\n\r\n/** @internal */\r\nexport const FRONTSTAGE_SETTINGS_NAMESPACE = \"uifw-frontstageSettings\";\r\n\r\n/** @internal */\r\nexport function getFrontstageStateSettingName(frontstageId: WidgetPanelsFrontstageState[\"id\"]) {\r\n return `frontstageState[${frontstageId}]`;\r\n}\r\n\r\n// istanbul ignore next\r\nfunction debounce<T extends (...args: any[]) => any>(func: T, duration: number) {\r\n let timeout: number | undefined;\r\n const debounced = (...args: Parameters<T>) => {\r\n const handler = () => {\r\n timeout = undefined;\r\n return func(...args);\r\n };\r\n window.clearTimeout(timeout);\r\n timeout = window.setTimeout(handler, duration);\r\n };\r\n debounced.cancel = () => {\r\n window.clearTimeout(timeout);\r\n };\r\n return debounced;\r\n}\r\n\r\nconst createListener = <T extends (...args: any[]) => void>(frontstageDef: FrontstageDef, listener: T) => {\r\n return (...args: Parameters<T>) => {\r\n if (!frontstageDef.nineZoneState)\r\n return;\r\n listener(...args);\r\n };\r\n};\r\n\r\n/** @internal */\r\nexport function useFrontstageManager(frontstageDef: FrontstageDef, useToolAsToolSettingsLabel?: boolean) {\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef, widgetState }: WidgetStateChangedEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n frontstageDef.nineZoneState = setWidgetState(frontstageDef.nineZoneState, widgetDef, widgetState);\r\n });\r\n FrontstageManager.onWidgetStateChangedEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetStateChangedEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef }: WidgetEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n frontstageDef.nineZoneState = showWidget(frontstageDef.nineZoneState, widgetDef.id);\r\n });\r\n FrontstageManager.onWidgetShowEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetShowEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef }: WidgetEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n let nineZoneState = showWidget(frontstageDef.nineZoneState, widgetDef.id);\r\n nineZoneState = expandWidget(nineZoneState, widgetDef.id);\r\n frontstageDef.nineZoneState = nineZoneState;\r\n });\r\n FrontstageManager.onWidgetExpandEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetExpandEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n const uiSettingsStorage = useUiStateStorageHandler();\r\n React.useEffect(() => {\r\n const listener = (args: FrontstageEventArgs) => {\r\n // TODO: track restoring frontstages to support workflows: i.e. prevent loading frontstage OR saving layout when delete is pending\r\n uiSettingsStorage.deleteSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(args.frontstageDef.id)); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n if (frontstageDef.id === args.frontstageDef.id) {\r\n args.frontstageDef.nineZoneState = initializeNineZoneState(frontstageDef);\r\n } else {\r\n args.frontstageDef.nineZoneState = undefined;\r\n }\r\n };\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.removeListener(listener);\r\n };\r\n }, [uiSettingsStorage, frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef }: WidgetEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n const label = widgetDef.label;\r\n frontstageDef.nineZoneState = setWidgetLabel(frontstageDef.nineZoneState, widgetDef.id, label);\r\n });\r\n FrontstageManager.onWidgetLabelChangedEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetLabelChangedEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n\r\n const defaultLabel = React.useMemo(\r\n () => UiFramework.translate(\"widget.labels.toolSettings\"), []\r\n );\r\n React.useEffect(() => {\r\n const updateLabel = createListener(frontstageDef, () => {\r\n const toolId = FrontstageManager.activeToolId;\r\n assert(!!frontstageDef.nineZoneState);\r\n const label = useToolAsToolSettingsLabel ?\r\n IModelApp.tools.find(toolId)?.flyover || defaultLabel : defaultLabel;\r\n frontstageDef.nineZoneState = setWidgetLabel(frontstageDef.nineZoneState, toolSettingsTabId, label);\r\n });\r\n // Whenever the frontstageDef or the useTool... changes, keep the label up to date.\r\n updateLabel();\r\n // If useTool... is true, listen for events to keep up the label up to date.\r\n if (useToolAsToolSettingsLabel) {\r\n FrontstageManager.onFrontstageReadyEvent.addListener(updateLabel);\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.addListener(updateLabel);\r\n FrontstageManager.onToolActivatedEvent.addListener(updateLabel);\r\n FrontstageManager.onToolSettingsReloadEvent.addListener(updateLabel);\r\n }\r\n return () => {\r\n if (useToolAsToolSettingsLabel) {\r\n FrontstageManager.onFrontstageReadyEvent.removeListener(updateLabel);\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.removeListener(updateLabel);\r\n FrontstageManager.onToolActivatedEvent.removeListener(updateLabel);\r\n FrontstageManager.onToolSettingsReloadEvent.removeListener(updateLabel);\r\n }\r\n };\r\n }, [frontstageDef, useToolAsToolSettingsLabel, defaultLabel]);\r\n}\r\n\r\n/** @internal */\r\n// istanbul ignore next\r\nexport function useItemsManager(frontstageDef: FrontstageDef) {\r\n const refreshNineZoneState = (def: FrontstageDef) => {\r\n // Fired for both registered/unregistered. Update definitions and remove/add missing widgets.\r\n def.updateWidgetDefs();\r\n let state = def.nineZoneState;\r\n if (!state)\r\n return;\r\n state = addMissingWidgets(def, state);\r\n state = removeMissingWidgets(def, state);\r\n state = hideWidgets(state, def); // TODO: should only apply to widgets provided by registered provider in onUiProviderRegisteredEvent.\r\n def.nineZoneState = state;\r\n };\r\n\r\n React.useEffect(() => {\r\n const remove = UiItemsManager.onUiProviderRegisteredEvent.addListener(() => {\r\n refreshNineZoneState(frontstageDef);\r\n });\r\n // Need to refresh anytime frontstageDef changes because uiItemsProvider may have added something to\r\n // another stage before it was possibly unloaded in this stage.\r\n refreshNineZoneState(frontstageDef);\r\n return remove;\r\n }, [frontstageDef]);\r\n}\r\n\r\n// istanbul ignore next\r\nfunction determineNewWidgets(defs: readonly WidgetDef[] | undefined, state: NineZoneState) {\r\n return (defs || []).filter((def) => !(def.id in state.tabs));\r\n}\r\n"]}
1
+ {"version":3,"file":"Frontstage.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Frontstage.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n\r\n/** @packageDocumentation\r\n * @module Frontstage\r\n */\r\n\r\n// cSpell:ignore popout\r\n\r\nimport \"./Frontstage.scss\";\r\nimport produce from \"immer\";\r\nimport * as React from \"react\";\r\nimport { assert, Logger, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport { StagePanelLocation, UiItemsManager, WidgetState } from \"@itwin/appui-abstract\";\r\nimport { Rectangle, RectangleProps, Size, SizeProps, UiStateStorageResult, UiStateStorageStatus } from \"@itwin/core-react\";\r\nimport { ToolbarPopupAutoHideContext } from \"@itwin/components-react\";\r\nimport {\r\n addFloatingWidget, addPanelWidget, addTab, addTabToWidget, convertAllPopupWidgetContainersToFloating, createNineZoneState, floatingWidgetBringToFront,\r\n FloatingWidgetHomeState,\r\n FloatingWidgets, getTabLocation, getUniqueId, getWidgetPanelSectionId, insertPanelWidget, insertTabToWidget, isFloatingTabLocation,\r\n isHorizontalPanelSide, isPanelTabLocation, isPopoutTabLocation, NineZone, NineZoneAction, NineZoneDispatch, NineZoneLabels, NineZoneState, NineZoneStateReducer, PanelSide,\r\n panelSides, removeTab, removeTabFromWidget, TabState, toolSettingsTabId, WidgetPanels,\r\n} from \"@itwin/appui-layout-react\";\r\nimport { useActiveFrontstageDef } from \"../frontstage/Frontstage\";\r\nimport { FrontstageDef, FrontstageEventArgs, FrontstageNineZoneStateChangedEventArgs } from \"../frontstage/FrontstageDef\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { StagePanelMaxSizeSpec } from \"../stagepanels/StagePanel\";\r\nimport { StagePanelState, StagePanelZoneDefKeys } from \"../stagepanels/StagePanelDef\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { useUiStateStorageHandler } from \"../uistate/useUiStateStorage\";\r\nimport { TabLocation, WidgetDef, WidgetEventArgs, WidgetStateChangedEventArgs } from \"../widgets/WidgetDef\";\r\nimport { ZoneState } from \"../zones/ZoneDef\";\r\nimport { WidgetContent } from \"./Content\";\r\nimport { WidgetPanelsFrontstageContent } from \"./FrontstageContent\";\r\nimport { ModalFrontstageComposer, useActiveModalFrontstageInfo } from \"./ModalFrontstageComposer\";\r\nimport { WidgetPanelsStatusBar } from \"./StatusBar\";\r\nimport { WidgetPanelsTab } from \"./Tab\";\r\nimport { WidgetPanelsToolbars } from \"./Toolbars\";\r\nimport { ToolSettingsContent, WidgetPanelsToolSettings } from \"./ToolSettings\";\r\nimport { useEscapeSetFocusToHome } from \"../hooks/useEscapeSetFocusToHome\";\r\nimport { FrameworkRootState } from \"../redux/StateManager\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\n\r\nconst panelZoneKeys: StagePanelZoneDefKeys[] = [\"start\", \"end\"];\r\n\r\nconst WidgetInternals = React.memo(function WidgetInternals() { // eslint-disable-line @typescript-eslint/naming-convention, no-shadow\r\n const activeModalFrontstageInfo = useActiveModalFrontstageInfo();\r\n const uiIsVisible = useUiVisibility();\r\n\r\n return (\r\n <>\r\n <ToolbarPopupAutoHideContext.Provider value={!uiIsVisible}>\r\n <ModalFrontstageComposer stageInfo={activeModalFrontstageInfo} />\r\n <WidgetPanels\r\n className=\"uifw-widgetPanels\"\r\n centerContent={<WidgetPanelsToolbars />}\r\n >\r\n <WidgetPanelsFrontstageContent />\r\n </WidgetPanels>\r\n <WidgetPanelsStatusBar />\r\n <FloatingWidgets />\r\n </ToolbarPopupAutoHideContext.Provider>\r\n </>\r\n );\r\n});\r\n\r\n// istanbul ignore next\r\nconst WidgetPanelsFrontstageComponent = React.memo(function WidgetPanelsFrontstageComponent() { // eslint-disable-line @typescript-eslint/naming-convention, no-shadow\r\n\r\n return (\r\n <>\r\n <WidgetPanelsToolSettings />\r\n <WidgetInternals />\r\n </>\r\n );\r\n});\r\n\r\nconst widgetContent = <WidgetContent />;\r\nconst toolSettingsContent = <ToolSettingsContent />;\r\nconst widgetPanelsFrontstage = <WidgetPanelsFrontstageComponent />;\r\n\r\n/** @internal */\r\nexport function useNineZoneState(frontstageDef: FrontstageDef) {\r\n const lastFrontstageDef = React.useRef(frontstageDef);\r\n const [nineZone, setNineZone] = React.useState(frontstageDef.nineZoneState);\r\n React.useEffect(() => {\r\n setNineZone(frontstageDef.nineZoneState);\r\n lastFrontstageDef.current = frontstageDef;\r\n }, [frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = (args: FrontstageNineZoneStateChangedEventArgs) => {\r\n if (args.frontstageDef !== frontstageDef || frontstageDef.isStageClosing || frontstageDef.isApplicationClosing)\r\n return;\r\n setNineZone(args.state);\r\n };\r\n return FrontstageManager.onFrontstageNineZoneStateChangedEvent.addListener(listener);\r\n }, [frontstageDef]);\r\n return lastFrontstageDef.current === frontstageDef ? nineZone : frontstageDef.nineZoneState;\r\n}\r\n\r\n/** @returns Defined NineZoneState with fallback to last defined and default NineZoneState.\r\n * @internal\r\n */\r\nfunction useCachedNineZoneState(nineZone: NineZoneState | undefined): NineZoneState {\r\n const cached = React.useRef<NineZoneState>(nineZone || defaultNineZone);\r\n React.useEffect(() => {\r\n if (nineZone)\r\n cached.current = nineZone;\r\n }, [nineZone]);\r\n return nineZone || cached.current;\r\n}\r\n\r\n/** Update in-memory NineZoneState of newly activated frontstage with up to date size.\r\n * @internal\r\n */\r\nexport function useUpdateNineZoneSize(frontstageDef: FrontstageDef) {\r\n React.useEffect(() => {\r\n const size = FrontstageManager.nineZoneSize;\r\n let state = frontstageDef.nineZoneState;\r\n if (!size || !state)\r\n return;\r\n state = FrameworkStateReducer(state, {\r\n type: \"RESIZE\",\r\n size: {\r\n height: size.height,\r\n width: size.width,\r\n },\r\n }, frontstageDef);\r\n frontstageDef.nineZoneState = state;\r\n }, [frontstageDef]);\r\n}\r\n\r\nfunction FrameworkStateReducer(state: NineZoneState, action: NineZoneAction, frontstageDef: FrontstageDef) {\r\n state = NineZoneStateReducer(state, action);\r\n if (action.type === \"RESIZE\") {\r\n state = produce(state, (draft) => {\r\n for (const panelSide of panelSides) {\r\n const panel = draft.panels[panelSide];\r\n const location = toStagePanelLocation(panelSide);\r\n const panelDef = frontstageDef.getStagePanelDef(location);\r\n if (panelDef?.maxSizeSpec) {\r\n panel.maxSize = getPanelMaxSize(panelDef.maxSizeSpec, panelSide, action.size);\r\n if (panel.size) {\r\n panel.size = Math.min(Math.max(panel.size, panel.minSize), panel.maxSize);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n return state;\r\n}\r\n\r\n/** @internal */\r\nexport function useNineZoneDispatch(frontstageDef: FrontstageDef) {\r\n const dispatch = React.useCallback<NineZoneDispatch>((action) => {\r\n if (action.type === \"RESIZE\") {\r\n FrontstageManager.nineZoneSize = Size.create(action.size);\r\n }\r\n // istanbul ignore if\r\n if (action.type === \"TOOL_SETTINGS_DRAG_START\") {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n UiFramework.postTelemetry(\"Tool Settings Undocking\", \"28B04E07-AE73-4533-A0BA-8E2A8DC99ADF\");\r\n }\r\n // istanbul ignore if\r\n if (action.type === \"TOOL_SETTINGS_DOCK\") {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n UiFramework.postTelemetry(\"Tool Settings Docking to Settings Bar\", \"BEDE684B-B3DB-4637-B3AF-DC3CBA223F94\");\r\n }\r\n if (action.type === \"WIDGET_TAB_POPOUT\") {\r\n const tabId = action.id;\r\n frontstageDef.popoutWidget(tabId);\r\n return;\r\n }\r\n if (action.type === \"FLOATING_WIDGET_SET_BOUNDS\") {\r\n frontstageDef.setFloatingWidgetBoundsInternal(action.id, action.bounds, true);\r\n return;\r\n }\r\n const nineZoneState = frontstageDef.nineZoneState;\r\n if (!nineZoneState)\r\n return;\r\n frontstageDef.nineZoneState = FrameworkStateReducer(nineZoneState, action, frontstageDef);\r\n }, [frontstageDef]);\r\n return dispatch;\r\n}\r\n\r\n/** @internal */\r\nexport const WidgetPanelsFrontstage = React.memo(function WidgetPanelsFrontstage() { // eslint-disable-line @typescript-eslint/naming-convention, no-shadow\r\n const frontstageDef = useActiveFrontstageDef();\r\n\r\n React.useEffect(() => {\r\n const triggerWidowCloseProcessing = () => {\r\n frontstageDef && frontstageDef.setIsApplicationClosing(true);\r\n };\r\n\r\n frontstageDef && frontstageDef.setIsApplicationClosing(false);\r\n\r\n window.addEventListener(\"unload\", triggerWidowCloseProcessing);\r\n return () => {\r\n window.removeEventListener(\"unload\", triggerWidowCloseProcessing);\r\n };\r\n }, [frontstageDef]);\r\n\r\n if (!frontstageDef)\r\n return null;\r\n return (\r\n <ActiveFrontstageDefProvider frontstageDef={frontstageDef} />\r\n );\r\n});\r\n\r\nconst defaultNineZone = createNineZoneState();\r\nconst tabElement = <WidgetPanelsTab />;\r\n\r\n/** @internal */\r\nexport function ActiveFrontstageDefProvider({ frontstageDef }: { frontstageDef: FrontstageDef }) {\r\n let nineZone = useNineZoneState(frontstageDef);\r\n nineZone = useCachedNineZoneState(nineZone);\r\n const dispatch = useNineZoneDispatch(frontstageDef);\r\n useUpdateNineZoneSize(frontstageDef);\r\n useSavedFrontstageState(frontstageDef);\r\n useSaveFrontstageSettings(frontstageDef);\r\n useItemsManager(frontstageDef);\r\n const labels = useLabels();\r\n const uiIsVisible = useUiVisibility();\r\n const showWidgetIcon = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.showWidgetIcon;\r\n });\r\n const autoCollapseUnpinnedPanels = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.autoCollapseUnpinnedPanels;\r\n });\r\n const animateToolSettings = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.animateToolSettings;\r\n });\r\n const useToolAsToolSettingsLabel = useSelector((state: FrameworkRootState) => {\r\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\r\n return !!frameworkState.configurableUiState.useToolAsToolSettingsLabel;\r\n });\r\n useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel);\r\n\r\n const handleKeyDown = useEscapeSetFocusToHome();\r\n return (\r\n <div\r\n className=\"uifw-widgetPanels-frontstage\"\r\n onKeyDown={handleKeyDown}\r\n role=\"presentation\"\r\n >\r\n <NineZone\r\n dispatch={dispatch}\r\n labels={labels}\r\n state={nineZone}\r\n tab={tabElement}\r\n showWidgetIcon={showWidgetIcon}\r\n autoCollapseUnpinnedPanels={autoCollapseUnpinnedPanels}\r\n toolSettingsContent={toolSettingsContent}\r\n widgetContent={widgetContent}\r\n animateDockedToolSettings={animateToolSettings}\r\n uiIsVisible={uiIsVisible}\r\n >\r\n {widgetPanelsFrontstage}\r\n </NineZone>\r\n </div>\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport function useLabels() {\r\n return React.useMemo<NineZoneLabels>(() => ({\r\n dockToolSettingsTitle: UiFramework.translate(\"widget.tooltips.dockToolSettings\"),\r\n moreWidgetsTitle: UiFramework.translate(\"widget.tooltips.moreWidgets\"),\r\n moreToolSettingsTitle: UiFramework.translate(\"widget.tooltips.moreToolSettings\"),\r\n pinPanelTitle: UiFramework.translate(\"widget.tooltips.pinPanel\"),\r\n resizeGripTitle: UiFramework.translate(\"widget.tooltips.resizeGrip\"),\r\n sendWidgetHomeTitle: UiFramework.translate(\"widget.tooltips.sendHome\"),\r\n toolSettingsHandleTitle: UiFramework.translate(\"widget.tooltips.toolSettingsHandle\"),\r\n unpinPanelTitle: UiFramework.translate(\"widget.tooltips.unpinPanel\"),\r\n popoutActiveTab: UiFramework.translate(\"widget.tooltips.popoutActiveTab\"),\r\n }), []);\r\n}\r\n\r\n/** @internal */\r\nexport function addWidgets(state: NineZoneState, widgets: ReadonlyArray<WidgetDef>, side: PanelSide, widgetId: WidgetIdTypes): NineZoneState {\r\n const visibleWidgets = widgets.filter((w) => w.isVisible && (w.defaultState !== WidgetState.Floating));\r\n if (visibleWidgets.length === 0)\r\n return state;\r\n\r\n const tabs = new Array<string>();\r\n for (const widget of visibleWidgets) {\r\n const label = getWidgetLabel(widget.label);\r\n state = addTab(state, widget.id, {\r\n label,\r\n iconSpec: widget.iconSpec,\r\n preferredPanelWidgetSize: widget.preferredPanelSize,\r\n preferredFloatingWidgetSize: widget.defaultFloatingSize,\r\n canPopout: widget.canPopout,\r\n isFloatingStateWindowResizable: widget.isFloatingStateWindowResizable,\r\n hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,\r\n });\r\n tabs.push(widget.id);\r\n }\r\n\r\n const activeWidget = visibleWidgets.find((widget) => widget.isActive);\r\n const minimized = false;\r\n // istanbul ignore else\r\n if (activeWidget?.defaultState !== WidgetState.Floating) {\r\n state = addPanelWidget(state, side, widgetId, tabs, {\r\n activeTabId: activeWidget ? activeWidget.id : tabs[0],\r\n minimized,\r\n });\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/** @internal */\r\n// istanbul ignore next\r\nexport function appendWidgets(state: NineZoneState, widgetDefs: ReadonlyArray<WidgetDef>, side: PanelSide, preferredWidgetIndex: number): NineZoneState {\r\n if (widgetDefs.length === 0)\r\n return state;\r\n\r\n // Add missing widget tabs.\r\n for (const widgetDef of widgetDefs) {\r\n const label = getWidgetLabel(widgetDef.label);\r\n const saveTab = state.tabs[widgetDef.id];\r\n const preferredPanelWidgetSize = saveTab ? saveTab.preferredPanelWidgetSize : widgetDef.preferredPanelSize;\r\n const preferredFloatingWidgetSize = saveTab ? saveTab.preferredFloatingWidgetSize : widgetDef.defaultFloatingSize;\r\n // if a defaultFloatingSize is specified then this mean the widget can't determine its intrinsic size and must be explicitly sized\r\n const userSized = saveTab ? (saveTab.userSized || !!widgetDef.defaultFloatingSize && !!saveTab.preferredFloatingWidgetSize)\r\n : !!widgetDef.defaultFloatingSize;\r\n state = addTab(state, widgetDef.id, {\r\n label,\r\n iconSpec: widgetDef.iconSpec,\r\n canPopout: widgetDef.canPopout,\r\n preferredPanelWidgetSize,\r\n preferredFloatingWidgetSize,\r\n userSized,\r\n isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,\r\n hideWithUiWhenFloating: !!widgetDef.hideWithUiWhenFloating,\r\n });\r\n\r\n if (widgetDef.isFloatingStateSupported && widgetDef.defaultState === WidgetState.Floating) {\r\n const floatingContainerId = widgetDef.floatingContainerId ?? getUniqueId();\r\n const widgetContainerId = getWidgetId(side, panelZoneKeys[preferredWidgetIndex]);\r\n const home: FloatingWidgetHomeState = { side, widgetId: widgetContainerId, widgetIndex: 0 };\r\n const preferredPosition = widgetDef.defaultFloatingPosition;\r\n\r\n if (floatingContainerId in state.widgets) {\r\n state = addTabToWidget(state, widgetDef.id, floatingContainerId);\r\n } else {\r\n const tab = state.tabs[widgetDef.id];\r\n\r\n const size = { height: 200, width: 300, ...tab.preferredFloatingWidgetSize };\r\n const preferredPoint = preferredPosition ?? { x: (state.size.width - size.width) / 2, y: (state.size.height - size.height) / 2 };\r\n const nzBounds = Rectangle.createFromSize(state.size);\r\n const bounds = Rectangle.createFromSize(size).offset(preferredPoint);\r\n const containedBounds = bounds.containIn(nzBounds);\r\n\r\n state = addFloatingWidget(state, floatingContainerId, [widgetDef.id], {\r\n bounds: containedBounds.toProps(),\r\n home,\r\n userSized,\r\n }, {\r\n isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,\r\n });\r\n }\r\n } else {\r\n const widgetPanelSectionId = getWidgetPanelSectionId(side, preferredWidgetIndex);\r\n if (widgetPanelSectionId in state.widgets) {\r\n state = addTabToWidget(state, widgetDef.id, widgetPanelSectionId);\r\n } else {\r\n state = addPanelWidget(state, side, widgetPanelSectionId, [widgetDef.id]);\r\n }\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\nfunction processPopoutWidgets(initialState: NineZoneState, frontstageDef: FrontstageDef): NineZoneState {\r\n // istanbul ignore next\r\n if (!initialState.popoutWidgets)\r\n return initialState;\r\n\r\n // istanbul ignore next - not unit testing electron case that reopens popout windows\r\n if (initialState.popoutWidgets && ProcessDetector.isElectronAppFrontend) {\r\n if (initialState.popoutWidgets.allIds.length && ProcessDetector.isElectronAppFrontend) {\r\n for (const widgetContainerId of initialState.popoutWidgets.allIds) {\r\n frontstageDef.openPopoutWidgetContainer(initialState, widgetContainerId);\r\n }\r\n }\r\n return initialState;\r\n }\r\n\r\n return convertAllPopupWidgetContainersToFloating(initialState);\r\n}\r\n\r\n/** Adds frontstageDef widgets that are missing in NineZoneState.\r\n * @internal\r\n */\r\nexport function addMissingWidgets(frontstageDef: FrontstageDef, initialState: NineZoneState): NineZoneState {\r\n let state = initialState;\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.centerLeft?.widgetDefs, state), \"left\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.panelZones.start.widgetDefs, state), \"left\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomLeft?.widgetDefs, state), \"left\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.panelWidgetDefs, state), \"left\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.panelZones.end.widgetDefs, state), \"left\", 1);\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.centerRight?.widgetDefs, state), \"right\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.panelZones.start.widgetDefs, state), \"right\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomRight?.widgetDefs, state), \"right\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.panelWidgetDefs, state), \"right\", 1);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.panelZones.end.widgetDefs, state), \"right\", 1);\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.panelWidgetDefs, state), \"top\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.panelZones.start.widgetDefs, state), \"top\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topMostPanel?.panelWidgetDefs, state), \"top\", 1); // eslint-disable-line deprecation/deprecation\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.panelZones.end.widgetDefs, state), \"top\", 1);\r\n\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.panelWidgetDefs, state), \"bottom\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.panelZones.start.widgetDefs, state), \"bottom\", 0);\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomMostPanel?.panelWidgetDefs, state), \"bottom\", 1); // eslint-disable-line deprecation/deprecation\r\n state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.panelZones.end.widgetDefs, state), \"bottom\", 1);\r\n\r\n return state;\r\n}\r\n\r\n/** Hide widgets with Hidden defaultState. */\r\nfunction hideWidgets(state: NineZoneState, frontstageDef: FrontstageDef): NineZoneState {\r\n const tabs = Object.values(state.tabs);\r\n for (const tab of tabs) {\r\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\r\n if (!widgetDef)\r\n continue;\r\n\r\n if (widgetDef.defaultState === WidgetState.Hidden) {\r\n state = hideWidget(state, widgetDef);\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/** Removes NineZoneState widgets that are missing in frontstageDef.\r\n * @internal\r\n */\r\nexport function removeMissingWidgets(frontstageDef: FrontstageDef, initialState: NineZoneState): NineZoneState {\r\n let state = initialState;\r\n for (const [, tab] of Object.entries(state.tabs)) {\r\n if (tab.id === toolSettingsTabId)\r\n continue;\r\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\r\n if (widgetDef)\r\n continue;\r\n state = removeTab(state, tab.id);\r\n }\r\n return state;\r\n}\r\n\r\nfunction getWidgetLabel(label: string) {\r\n return label === \"\" ? \"Widget\" : label;\r\n}\r\n\r\ntype WidgetIdTypes =\r\n \"leftStart\" |\r\n \"leftEnd\" |\r\n \"rightStart\" |\r\n \"rightEnd\" |\r\n \"topStart\" |\r\n \"topEnd\" |\r\n \"bottomStart\" |\r\n \"bottomEnd\";\r\n\r\nfunction toStagePanelLocation(side: PanelSide): StagePanelLocation {\r\n switch (side) {\r\n case \"bottom\":\r\n return StagePanelLocation.Bottom;\r\n case \"left\":\r\n return StagePanelLocation.Left;\r\n case \"right\":\r\n return StagePanelLocation.Right;\r\n case \"top\":\r\n return StagePanelLocation.Top;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getWidgetId(side: PanelSide, key: StagePanelZoneDefKeys): WidgetIdTypes {\r\n switch (side) {\r\n case \"left\": {\r\n if (key === \"start\") {\r\n return \"leftStart\";\r\n }\r\n return \"leftEnd\";\r\n }\r\n case \"right\": {\r\n if (key === \"start\") {\r\n return \"rightStart\";\r\n }\r\n return \"rightEnd\";\r\n }\r\n case \"top\": {\r\n if (key === \"start\") {\r\n return \"topStart\";\r\n }\r\n return \"topEnd\";\r\n }\r\n case \"bottom\": {\r\n if (key === \"start\")\r\n return \"bottomStart\";\r\n return \"bottomEnd\";\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getPanelZoneWidgets(frontstageDef: FrontstageDef, panelZone: WidgetIdTypes): WidgetDef[] {\r\n switch (panelZone) {\r\n case \"leftStart\": {\r\n const outArray = [...frontstageDef.centerLeft?.widgetDefs || []];\r\n frontstageDef.leftPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"leftEnd\": {\r\n const outArray = [...frontstageDef.bottomLeft?.widgetDefs || []];\r\n frontstageDef.leftPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n frontstageDef.leftPanel?.panelWidgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"rightStart\": {\r\n const outArray = [...frontstageDef.centerRight?.widgetDefs || []];\r\n frontstageDef.rightPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"rightEnd\": {\r\n const outArray = [...frontstageDef.bottomRight?.widgetDefs || []];\r\n frontstageDef.rightPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n frontstageDef.rightPanel?.panelWidgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"topStart\": {\r\n const outArray = [...frontstageDef.topPanel?.panelWidgetDefs || []];\r\n frontstageDef.topPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"topEnd\": {\r\n const outArray = [...frontstageDef.topMostPanel?.panelWidgetDefs || []]; // eslint-disable-line deprecation/deprecation\r\n frontstageDef.topPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"bottomStart\": {\r\n const outArray = [...frontstageDef.bottomPanel?.panelWidgetDefs || []];\r\n frontstageDef.bottomPanel?.panelZones.start.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n case \"bottomEnd\": {\r\n const outArray = [...frontstageDef.bottomMostPanel?.panelWidgetDefs || []]; // eslint-disable-line deprecation/deprecation\r\n frontstageDef.bottomPanel?.panelZones.end.widgetDefs.forEach((widgetDef) => {\r\n // istanbul ignore else\r\n if (undefined === outArray.find((widget) => widget.id === widgetDef.id))\r\n outArray.push(widgetDef);\r\n });\r\n return outArray;\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addPanelWidgets(\r\n state: NineZoneState,\r\n frontstageDef: FrontstageDef,\r\n side: PanelSide,\r\n): NineZoneState {\r\n const start = getWidgetId(side, \"start\");\r\n const startWidgets = getPanelZoneWidgets(frontstageDef, start);\r\n state = addWidgets(state, determineNewWidgets(startWidgets, state), side, start);\r\n\r\n const end = getWidgetId(side, \"end\");\r\n const endWidgets = getPanelZoneWidgets(frontstageDef, end);\r\n state = addWidgets(state, determineNewWidgets(endWidgets, state), side, end);\r\n return state;\r\n}\r\n\r\n/** @internal */\r\nexport function isFrontstageStateSettingResult(settingsResult: UiStateStorageResult): settingsResult is { // eslint-disable-line deprecation/deprecation\r\n status: UiStateStorageStatus.Success;\r\n setting: WidgetPanelsFrontstageState;\r\n} {\r\n if (settingsResult.status === UiStateStorageStatus.Success)\r\n return true;\r\n return false;\r\n}\r\n\r\n/** @internal */\r\nexport function initializePanel(state: NineZoneState, frontstageDef: FrontstageDef, panelSide: PanelSide) {\r\n state = addPanelWidgets(state, frontstageDef, panelSide);\r\n const location = toStagePanelLocation(panelSide);\r\n const panelDef = frontstageDef.getStagePanelDef(location);\r\n state = produce(state, (draft) => {\r\n const panel = draft.panels[panelSide];\r\n panel.minSize = panelDef?.minSize ?? panel.minSize;\r\n panel.pinned = panelDef?.pinned ?? panel.pinned;\r\n panel.resizable = panelDef?.resizable ?? panel.resizable;\r\n if (panelDef?.maxSizeSpec) {\r\n panel.maxSize = getPanelMaxSize(panelDef.maxSizeSpec, panelSide, state.size);\r\n }\r\n\r\n const size = panelDef?.size;\r\n panel.size = size === undefined ? size : Math.min(Math.max(size, panel.minSize), panel.maxSize);\r\n });\r\n return state;\r\n}\r\n\r\nfunction getPanelMaxSize(maxSizeSpec: StagePanelMaxSizeSpec, panel: PanelSide, nineZoneSize: SizeProps) {\r\n if (typeof maxSizeSpec === \"number\") {\r\n return maxSizeSpec;\r\n }\r\n const size = isHorizontalPanelSide(panel) ? nineZoneSize.height : nineZoneSize.width;\r\n return maxSizeSpec.percentage / 100 * size;\r\n}\r\n\r\nconst stateVersion = 13; // this needs to be bumped when NineZoneState is changed (to recreate the layout).\r\n\r\n/** @internal */\r\nexport function initializeNineZoneState(frontstageDef: FrontstageDef): NineZoneState {\r\n let nineZone = defaultNineZone;\r\n nineZone = produce(nineZone, (stateDraft) => {\r\n // istanbul ignore next\r\n if (!FrontstageManager.nineZoneSize)\r\n return;\r\n stateDraft.size = {\r\n height: FrontstageManager.nineZoneSize.height,\r\n width: FrontstageManager.nineZoneSize.width,\r\n };\r\n });\r\n\r\n nineZone = initializePanel(nineZone, frontstageDef, \"left\");\r\n nineZone = initializePanel(nineZone, frontstageDef, \"right\");\r\n nineZone = initializePanel(nineZone, frontstageDef, \"top\");\r\n nineZone = initializePanel(nineZone, frontstageDef, \"bottom\");\r\n nineZone = produce(nineZone, (stateDraft) => {\r\n for (const [, panel] of Object.entries(stateDraft.panels)) {\r\n const expanded = panel.widgets.find((widgetId) => stateDraft.widgets[widgetId].minimized === false);\r\n const firstWidget = panel.widgets.length > 0 ? stateDraft.widgets[panel.widgets[0]] : undefined;\r\n // istanbul ignore next\r\n if (!expanded && firstWidget) {\r\n firstWidget.minimized = false;\r\n }\r\n }\r\n stateDraft.panels.left.collapsed = isPanelCollapsed([\r\n frontstageDef.centerLeft?.zoneState,\r\n frontstageDef.bottomLeft?.zoneState,\r\n ], [frontstageDef.leftPanel?.panelState]);\r\n stateDraft.panels.right.collapsed = isPanelCollapsed([\r\n frontstageDef.centerRight?.zoneState,\r\n frontstageDef.bottomRight?.zoneState,\r\n ], [frontstageDef.rightPanel?.panelState]);\r\n stateDraft.panels.top.collapsed = isPanelCollapsed([], [\r\n // istanbul ignore next - ignore topMostPanel if topPanel is defined\r\n frontstageDef.topPanel ? frontstageDef.topPanel?.panelState : frontstageDef.topMostPanel?.panelState,// eslint-disable-line deprecation/deprecation\r\n ]);\r\n stateDraft.panels.bottom.collapsed = isPanelCollapsed([], [\r\n // istanbul ignore next - ignore bottomMostPanel if bottomPanel is defined\r\n frontstageDef.bottomPanel ? frontstageDef.bottomPanel?.panelState : frontstageDef.bottomMostPanel?.panelState, // eslint-disable-line deprecation/deprecation\r\n ]);\r\n\r\n const topCenterDef = frontstageDef.topCenter;\r\n const toolSettingsWidgetDef = topCenterDef?.getSingleWidgetDef();\r\n if (toolSettingsWidgetDef) {\r\n const toolSettingsTab = stateDraft.tabs[toolSettingsTabId];\r\n toolSettingsTab.preferredPanelWidgetSize = toolSettingsWidgetDef.preferredPanelSize;\r\n }\r\n });\r\n nineZone = addMissingWidgets(frontstageDef, nineZone);\r\n nineZone = hideWidgets(nineZone, frontstageDef);\r\n nineZone = processPopoutWidgets(nineZone, frontstageDef);\r\n\r\n return nineZone;\r\n}\r\n\r\n/** Converts from saved NineZoneState to NineZoneState.\r\n * @note Restores toolSettings tab.\r\n * @note Restores tab labels.\r\n * @internal\r\n */\r\nexport function restoreNineZoneState(frontstageDef: FrontstageDef, saved: SavedNineZoneState): NineZoneState {\r\n let restored: NineZoneState = {\r\n ...saved,\r\n tabs: defaultNineZone.tabs,\r\n };\r\n\r\n for (const [, tab] of Object.entries(saved.tabs)) {\r\n // Re-add the placeholder tab in order to correctly remove it from the state if WidgetDef is not found.\r\n restored = addTab(restored, tab.id);\r\n\r\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\r\n if (!widgetDef) {\r\n Logger.logInfo(UiFramework.loggerCategory(restoreNineZoneState), \"WidgetDef is not found for saved tab.\", () => ({\r\n frontstageId: frontstageDef.id,\r\n tabId: tab.id,\r\n }));\r\n restored = removeTab(restored, tab.id);\r\n continue;\r\n }\r\n restored = produce(restored, (draft) => {\r\n draft.tabs[tab.id] = {\r\n ...tab,\r\n label: getWidgetLabel(widgetDef.label),\r\n hideWithUiWhenFloating: widgetDef.hideWithUiWhenFloating,\r\n iconSpec: widgetDef.iconSpec,\r\n canPopout: widgetDef.canPopout,\r\n isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,\r\n };\r\n });\r\n }\r\n restored = produce(restored, (draft) => {\r\n // remove center panel section if one is found in left or right panels\r\n const oldLeftMiddleIndex = saved.panels.left.widgets.findIndex((value) => value === \"leftMiddle\");\r\n // istanbul ignore next\r\n if (-1 !== oldLeftMiddleIndex) {\r\n draft.panels.left.widgets = saved.panels.left.widgets.filter((value) => value !== \"leftMiddle\");\r\n if (\"leftEnd\" in draft.widgets) {\r\n draft.widgets.leftMiddle.tabs.forEach((tab) => draft.widgets.leftEnd.tabs.push(tab));\r\n } else {\r\n draft.widgets.leftEnd = { ...draft.widgets.leftMiddle };\r\n delete draft.widgets.leftMiddle;\r\n }\r\n }\r\n\r\n const oldRightMiddleIndex = saved.panels.right.widgets.findIndex((value) => value === \"rightMiddle\");\r\n // istanbul ignore next\r\n if (-1 !== oldRightMiddleIndex) {\r\n draft.panels.right.widgets = saved.panels.right.widgets.filter((value) => value !== \"rightMiddle\");\r\n if (\"rightEnd\" in draft.widgets) {\r\n draft.widgets.rightMiddle.tabs.forEach((tab) => draft.widgets.rightEnd.tabs.push(tab));\r\n } else {\r\n draft.widgets.rightEnd = { ...draft.widgets.rightMiddle };\r\n delete draft.widgets.rightMiddle;\r\n }\r\n }\r\n\r\n return;\r\n });\r\n\r\n if (FrontstageManager.nineZoneSize && (0 !== FrontstageManager.nineZoneSize.height || 0 !== FrontstageManager.nineZoneSize.width)) {\r\n restored = FrameworkStateReducer(restored, {\r\n type: \"RESIZE\",\r\n size: {\r\n height: FrontstageManager.nineZoneSize.height,\r\n width: FrontstageManager.nineZoneSize.width,\r\n },\r\n }, frontstageDef);\r\n }\r\n return restored;\r\n}\r\n\r\n/** Prepares NineZoneState to be saved.\r\n * @note Removes toolSettings tab.\r\n * @note Removes tab labels and iconSpec.\r\n * @internal\r\n */\r\nexport function packNineZoneState(state: NineZoneState): SavedNineZoneState {\r\n let packed: SavedNineZoneState = {\r\n ...state,\r\n tabs: {},\r\n };\r\n packed = produce(packed, (draft) => {\r\n for (const [, tab] of Object.entries(state.tabs)) {\r\n if (tab.id === toolSettingsTabId)\r\n continue;\r\n\r\n draft.tabs[tab.id] = {\r\n id: tab.id,\r\n preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,\r\n allowedPanelTargets: tab.allowedPanelTargets,\r\n userSized: tab.userSized,\r\n };\r\n }\r\n });\r\n return packed;\r\n}\r\n\r\n// TODO: clean-up of saved widgets.\r\n// istanbul ignore next\r\nfunction packSavedWidgets(savedWidgets: SavedWidgets, frontstageDef: FrontstageDef): SavedWidgets {\r\n for (const widgetDef of frontstageDef.widgetDefs) {\r\n const id = widgetDef.id;\r\n const initialWidget: SavedWidget = {\r\n id,\r\n };\r\n const widget = produce(initialWidget, (draft) => {\r\n if (widgetDef.tabLocation) {\r\n draft.tabLocation = { ...widgetDef.tabLocation };\r\n }\r\n if (widgetDef.popoutBounds) {\r\n draft.popoutBounds = widgetDef.popoutBounds.toProps();\r\n }\r\n });\r\n if (widget === initialWidget)\r\n continue;\r\n\r\n savedWidgets = produce(savedWidgets, (draft) => {\r\n draft.push(widget);\r\n });\r\n }\r\n\r\n return savedWidgets;\r\n}\r\n\r\n// istanbul ignore next\r\nfunction restoreSavedWidgets(savedWidgets: SavedWidgets, frontstage: FrontstageDef) {\r\n let i = savedWidgets.length;\r\n while (i--) {\r\n const savedWidget = savedWidgets[i];\r\n const widgetId = savedWidget.id;\r\n const widgetDef = frontstage.findWidgetDef(widgetId);\r\n if (!widgetDef)\r\n continue;\r\n\r\n if (savedWidget.tabLocation) {\r\n widgetDef.tabLocation = { ...savedWidget.tabLocation };\r\n }\r\n if (savedWidget.popoutBounds) {\r\n widgetDef.popoutBounds = Rectangle.create(savedWidget.popoutBounds);\r\n }\r\n\r\n savedWidgets = produce(savedWidgets, (draft) => {\r\n draft.splice(i, 1);\r\n });\r\n }\r\n\r\n return savedWidgets;\r\n}\r\n\r\n/** @internal */\r\nexport function isPanelCollapsed(zoneStates: ReadonlyArray<ZoneState | undefined>, panelStates: ReadonlyArray<StagePanelState | undefined>) {\r\n const openZone = zoneStates.find((zoneState) => zoneState === ZoneState.Open);\r\n const openPanel = panelStates.find((panelState) => panelState === StagePanelState.Open);\r\n return !openZone && !openPanel;\r\n}\r\n\r\n/** FrontstageState is saved in UiStateStorage.\r\n * @internal\r\n */\r\nexport interface WidgetPanelsFrontstageState {\r\n nineZone: SavedNineZoneState;\r\n widgets: SavedWidgets;\r\n id: FrontstageDef[\"id\"];\r\n /** Frontstage version used to create the frontstage state. Allows to invalidate the layout from the frontstage. */\r\n version: number;\r\n /** Platform provided frontstage version. Allows to invalidate the layout from the platform. */\r\n stateVersion: number;\r\n}\r\n\r\n/** Saved data specific to `WidgetDef`. I.e. used to restore hidden widgets.\r\n * @internal\r\n */\r\nexport interface SavedWidget {\r\n readonly id: WidgetDef[\"id\"];\r\n readonly tabLocation?: TabLocation;\r\n readonly popoutBounds?: RectangleProps;\r\n}\r\n\r\n/** @internal */\r\nexport type SavedWidgets = ReadonlyArray<SavedWidget>;\r\n\r\n// We don't save tab labels or if widget is allowed to \"pop-out\".\r\ntype SavedTabState = Omit<TabState, \"label\" | \"canPopout\" | \"isFloatingStateWindowResizable\" | \"iconSpec\">;\r\n\r\ninterface SavedTabsState {\r\n readonly [id: string]: SavedTabState;\r\n}\r\n\r\n// // We don't save if widget is allowed to \"pop-out\" or if floating widget can be resized.\r\n// type SavedWidgetState = Omit<WidgetState, | \"canPopout\" | \"isFloatingStateWindowResizable\">;\r\n//\r\n// interface SavedWidgetsState {\r\n// readonly [id: string]: SavedWidgetState;\r\n// }\r\n\r\ninterface SavedNineZoneState extends Omit<NineZoneState, \"tabs\"> {\r\n readonly tabs: SavedTabsState;\r\n // readonly widgets: SavedWidgetsState;\r\n}\r\n\r\nfunction addHiddenWidget(state: NineZoneState, widgetDef: WidgetDef): NineZoneState {\r\n const tabLocation = widgetDef.tabLocation || widgetDef.defaultTabLocation;\r\n const tabId = widgetDef.id;\r\n const { widgetId, tabIndex } = tabLocation;\r\n\r\n if (widgetId in state.widgets) {\r\n // Add to an existing widget (by widget id).\r\n return insertTabToWidget(state, tabId, widgetId, tabIndex);\r\n } else if (tabLocation.floatingWidget) {\r\n const floatingWidget = tabLocation.floatingWidget;\r\n assert(widgetId === floatingWidget.id);\r\n\r\n // Add to a new floating widget.\r\n const nzBounds = Rectangle.createFromSize(state.size);\r\n const bounds = Rectangle.create(floatingWidget.bounds).containIn(nzBounds);\r\n return addFloatingWidget(state, floatingWidget.id, [tabId], {\r\n ...floatingWidget,\r\n bounds: bounds.toProps(),\r\n });\r\n }\r\n\r\n // Add to a panel section.\r\n const panel = state.panels[tabLocation.side];\r\n\r\n // Add to existing panel section.\r\n if (panel.widgets.length >= panel.maxWidgetCount) {\r\n const sectionIndex = Math.min(panel.maxWidgetCount - 1, tabLocation.widgetIndex);\r\n const sectionId = panel.widgets[sectionIndex];\r\n return insertTabToWidget(state, tabId, sectionId, tabLocation.tabIndex);\r\n }\r\n\r\n // Create a new panel section.\r\n const newSectionId = getUniqueId();\r\n return insertPanelWidget(state, panel.side, newSectionId, [tabId], tabLocation.widgetIndex);\r\n}\r\n\r\n/** @internal */\r\nexport function setWidgetState(\r\n state: NineZoneState,\r\n widgetDef: WidgetDef,\r\n widgetState: WidgetState,\r\n) {\r\n if (widgetState === WidgetState.Hidden) {\r\n return hideWidget(state, widgetDef);\r\n } else if (widgetState === WidgetState.Open) {\r\n const id = widgetDef.id;\r\n let location = getTabLocation(state, id);\r\n if (!location) {\r\n state = addHiddenWidget(state, widgetDef);\r\n location = getTabLocation(state, id);\r\n }\r\n\r\n return produce(state, (draft) => {\r\n assert(!!location);\r\n const widget = draft.widgets[location.widgetId];\r\n widget.minimized = false;\r\n widget.activeTabId = id;\r\n\r\n if (isFloatingTabLocation(location)) {\r\n const floatingWidget = draft.floatingWidgets.byId[location.floatingWidgetId];\r\n floatingWidget.hidden = false;\r\n // istanbul ignore else\r\n } else if (isPanelTabLocation(location)) {\r\n const panel = draft.panels[location.side];\r\n panel.collapsed = false;\r\n if (undefined === panel.size || 0 === panel.size) {\r\n // istanbul ignore next\r\n panel.size = panel.minSize ?? 200;\r\n }\r\n }\r\n });\r\n } else if (widgetState === WidgetState.Closed) {\r\n const id = widgetDef.id;\r\n let location = getTabLocation(state, id);\r\n if (!location) {\r\n state = addHiddenWidget(state, widgetDef);\r\n location = getTabLocation(state, id);\r\n }\r\n\r\n // TODO: should change activeTabId of a widget with multiple tabs.\r\n return produce(state, (draft) => {\r\n assert(!!location);\r\n const widget = draft.widgets[location.widgetId];\r\n\r\n if (isFloatingTabLocation(location)) {\r\n if (id === widget.activeTabId) {\r\n widget.minimized = true;\r\n }\r\n }\r\n });\r\n } else if (widgetState === WidgetState.Floating) {\r\n const id = widgetDef.id;\r\n let location = getTabLocation(state, id);\r\n if (!location) {\r\n state = addHiddenWidget(state, widgetDef);\r\n location = getTabLocation(state, id);\r\n }\r\n\r\n assert(!!location);\r\n if (isFloatingTabLocation(location))\r\n return state;\r\n\r\n // Widget is not floating.\r\n state = removeTabFromWidget(state, id);\r\n const bounds = widgetDef.tabLocation?.floatingWidget?.bounds;\r\n state = addFloatingWidget(state, getUniqueId(), [id], { bounds });\r\n }\r\n return state;\r\n}\r\n\r\n/** Stores widget location and hides it in the UI. */\r\nfunction hideWidget(state: NineZoneState, widgetDef: WidgetDef) {\r\n const location = getTabLocation(state, widgetDef.id);\r\n if (!location)\r\n return state;\r\n // istanbul ignore else\r\n if (isFloatingTabLocation(location)) {\r\n const floatingWidget = state.floatingWidgets.byId[location.widgetId];\r\n widgetDef.setFloatingContainerId(location.floatingWidgetId);\r\n widgetDef.tabLocation = {\r\n side: floatingWidget.home.side,\r\n tabIndex: floatingWidget.home.widgetIndex,\r\n widgetId: floatingWidget.id,\r\n widgetIndex: floatingWidget.home.widgetIndex,\r\n floatingWidget,\r\n };\r\n } else if (!isPopoutTabLocation(location)) {\r\n const widgetId = location.widgetId;\r\n const side = isPanelTabLocation(location) ? location.side : \"left\";\r\n const widgetIndex = isPanelTabLocation(location) ? state.panels[side].widgets.indexOf(widgetId) : 0;\r\n const tabIndex = state.widgets[location.widgetId].tabs.indexOf(widgetDef.id);\r\n widgetDef.tabLocation = {\r\n side,\r\n tabIndex,\r\n widgetId,\r\n widgetIndex,\r\n };\r\n }\r\n return removeTabFromWidget(state, widgetDef.id);\r\n}\r\n\r\n/** @internal */\r\nexport function showWidget(state: NineZoneState, id: TabState[\"id\"]) {\r\n const location = getTabLocation(state, id);\r\n if (!location)\r\n return state;\r\n state = produce(state, (draft) => {\r\n const widget = draft.widgets[location.widgetId];\r\n widget.activeTabId = id;\r\n widget.minimized = false;\r\n if (isPanelTabLocation(location)) {\r\n const panel = draft.panels[location.side];\r\n panel.collapsed = false;\r\n }\r\n });\r\n if (isFloatingTabLocation(location)) {\r\n state = floatingWidgetBringToFront(state, location.floatingWidgetId);\r\n }\r\n return state;\r\n}\r\n\r\n/** @internal */\r\nexport function expandWidget(state: NineZoneState, id: TabState[\"id\"]) {\r\n const location = getTabLocation(state, id);\r\n if (!location)\r\n return state;\r\n\r\n return produce(state, (draft) => {\r\n const widget = draft.widgets[location.widgetId];\r\n if (isPanelTabLocation(location)) {\r\n const panel = draft.panels[location.side];\r\n panel.widgets.forEach((wId) => {\r\n const w = draft.widgets[wId];\r\n w.minimized = true;\r\n });\r\n }\r\n widget.minimized = false;\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function setWidgetLabel(state: NineZoneState, id: TabState[\"id\"], label: string) {\r\n if (!(id in state.tabs))\r\n return state;\r\n\r\n return produce(state, (draft) => {\r\n const tab = draft.tabs[id];\r\n tab.label = label;\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function useSavedFrontstageState(frontstageDef: FrontstageDef) {\r\n const uiStateStorage = useUiStateStorageHandler();\r\n const uiStateStorageRef = React.useRef(uiStateStorage);\r\n const isMountedRef = React.useRef(false);\r\n React.useEffect(() => {\r\n isMountedRef.current = true;\r\n return () => { isMountedRef.current = false; };\r\n }, []);\r\n React.useEffect(() => {\r\n uiStateStorageRef.current = uiStateStorage;\r\n }, [uiStateStorage]);\r\n React.useEffect(() => {\r\n async function fetchFrontstageState() {\r\n if (frontstageDef.nineZoneState) {\r\n frontstageDef.nineZoneState = processPopoutWidgets(frontstageDef.nineZoneState, frontstageDef);\r\n return;\r\n }\r\n const id = frontstageDef.id;\r\n const version = frontstageDef.version;\r\n const settingResult = await uiStateStorageRef.current.getSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(id));\r\n if (!isMountedRef.current)\r\n return;\r\n\r\n if (isFrontstageStateSettingResult(settingResult)) {\r\n const setting = settingResult.setting;\r\n if (setting.version >= version && setting.stateVersion >= stateVersion) {\r\n const restored = restoreNineZoneState(frontstageDef, setting.nineZone);\r\n const savedWidgets = restoreSavedWidgets(setting.widgets, frontstageDef);\r\n let state = addMissingWidgets(frontstageDef, restored);\r\n state = hideWidgets(state, frontstageDef);\r\n state = processPopoutWidgets(state, frontstageDef);\r\n\r\n frontstageDef.nineZoneState = state;\r\n frontstageDef.savedWidgetDefs = savedWidgets;\r\n return;\r\n }\r\n }\r\n frontstageDef.nineZoneState = initializeNineZoneState(frontstageDef);\r\n }\r\n fetchFrontstageState(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }, [frontstageDef]);\r\n}\r\n\r\n/** @internal */\r\nexport function useSaveFrontstageSettings(frontstageDef: FrontstageDef) {\r\n const nineZone = useNineZoneState(frontstageDef);\r\n const uiSettingsStorage = useUiStateStorageHandler();\r\n const saveSetting = React.useMemo(() => {\r\n return debounce(async (frontstage: FrontstageDef, state: NineZoneState, savedWidgets: SavedWidgets) => {\r\n const id = frontstage.id;\r\n const setting: WidgetPanelsFrontstageState = {\r\n id,\r\n version: frontstage.version,\r\n stateVersion,\r\n nineZone: packNineZoneState(state),\r\n widgets: packSavedWidgets(savedWidgets, frontstage),\r\n };\r\n await uiSettingsStorage.saveSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(id), setting);\r\n }, 1000);\r\n }, [uiSettingsStorage]);\r\n React.useEffect(() => {\r\n return () => {\r\n saveSetting.cancel();\r\n };\r\n }, [saveSetting]);\r\n React.useEffect(() => {\r\n if (!nineZone || nineZone.draggedTab)\r\n return;\r\n const savedWidgets = frontstageDef.savedWidgetDefs || [];\r\n saveSetting(frontstageDef, nineZone, savedWidgets);\r\n }, [frontstageDef, nineZone, saveSetting]);\r\n}\r\n\r\n/** @internal */\r\nexport const FRONTSTAGE_SETTINGS_NAMESPACE = \"uifw-frontstageSettings\";\r\n\r\n/** @internal */\r\nexport function getFrontstageStateSettingName(frontstageId: WidgetPanelsFrontstageState[\"id\"]) {\r\n return `frontstageState[${frontstageId}]`;\r\n}\r\n\r\n// istanbul ignore next\r\nfunction debounce<T extends (...args: any[]) => any>(func: T, duration: number) {\r\n let timeout: number | undefined;\r\n const debounced = (...args: Parameters<T>) => {\r\n const handler = () => {\r\n timeout = undefined;\r\n return func(...args);\r\n };\r\n window.clearTimeout(timeout);\r\n timeout = window.setTimeout(handler, duration);\r\n };\r\n debounced.cancel = () => {\r\n window.clearTimeout(timeout);\r\n };\r\n return debounced;\r\n}\r\n\r\nconst createListener = <T extends (...args: any[]) => void>(frontstageDef: FrontstageDef, listener: T) => {\r\n return (...args: Parameters<T>) => {\r\n if (!frontstageDef.nineZoneState)\r\n return;\r\n listener(...args);\r\n };\r\n};\r\n\r\n/** @internal */\r\nexport function useFrontstageManager(frontstageDef: FrontstageDef, useToolAsToolSettingsLabel?: boolean) {\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef, widgetState }: WidgetStateChangedEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n frontstageDef.nineZoneState = setWidgetState(frontstageDef.nineZoneState, widgetDef, widgetState);\r\n });\r\n FrontstageManager.onWidgetStateChangedEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetStateChangedEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef }: WidgetEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n frontstageDef.nineZoneState = showWidget(frontstageDef.nineZoneState, widgetDef.id);\r\n });\r\n FrontstageManager.onWidgetShowEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetShowEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef }: WidgetEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n let nineZoneState = showWidget(frontstageDef.nineZoneState, widgetDef.id);\r\n nineZoneState = expandWidget(nineZoneState, widgetDef.id);\r\n frontstageDef.nineZoneState = nineZoneState;\r\n });\r\n FrontstageManager.onWidgetExpandEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetExpandEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n const uiSettingsStorage = useUiStateStorageHandler();\r\n React.useEffect(() => {\r\n const listener = (args: FrontstageEventArgs) => {\r\n // TODO: track restoring frontstages to support workflows: i.e. prevent loading frontstage OR saving layout when delete is pending\r\n uiSettingsStorage.deleteSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(args.frontstageDef.id)); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n if (frontstageDef.id === args.frontstageDef.id) {\r\n args.frontstageDef.nineZoneState = initializeNineZoneState(frontstageDef);\r\n } else {\r\n args.frontstageDef.nineZoneState = undefined;\r\n }\r\n };\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.removeListener(listener);\r\n };\r\n }, [uiSettingsStorage, frontstageDef]);\r\n React.useEffect(() => {\r\n const listener = createListener(frontstageDef, ({ widgetDef }: WidgetEventArgs) => {\r\n assert(!!frontstageDef.nineZoneState);\r\n const label = widgetDef.label;\r\n frontstageDef.nineZoneState = setWidgetLabel(frontstageDef.nineZoneState, widgetDef.id, label);\r\n });\r\n FrontstageManager.onWidgetLabelChangedEvent.addListener(listener);\r\n return () => {\r\n FrontstageManager.onWidgetLabelChangedEvent.removeListener(listener);\r\n };\r\n }, [frontstageDef]);\r\n\r\n const defaultLabel = React.useMemo(\r\n () => UiFramework.translate(\"widget.labels.toolSettings\"), []\r\n );\r\n React.useEffect(() => {\r\n const updateLabel = createListener(frontstageDef, () => {\r\n const toolId = FrontstageManager.activeToolId;\r\n assert(!!frontstageDef.nineZoneState);\r\n const label = useToolAsToolSettingsLabel ?\r\n IModelApp.tools.find(toolId)?.flyover || defaultLabel : defaultLabel;\r\n frontstageDef.nineZoneState = setWidgetLabel(frontstageDef.nineZoneState, toolSettingsTabId, label);\r\n });\r\n // Whenever the frontstageDef or the useTool... changes, keep the label up to date.\r\n updateLabel();\r\n // If useTool... is true, listen for events to keep up the label up to date.\r\n if (useToolAsToolSettingsLabel) {\r\n FrontstageManager.onFrontstageReadyEvent.addListener(updateLabel);\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.addListener(updateLabel);\r\n FrontstageManager.onToolActivatedEvent.addListener(updateLabel);\r\n FrontstageManager.onToolSettingsReloadEvent.addListener(updateLabel);\r\n }\r\n return () => {\r\n if (useToolAsToolSettingsLabel) {\r\n FrontstageManager.onFrontstageReadyEvent.removeListener(updateLabel);\r\n FrontstageManager.onFrontstageRestoreLayoutEvent.removeListener(updateLabel);\r\n FrontstageManager.onToolActivatedEvent.removeListener(updateLabel);\r\n FrontstageManager.onToolSettingsReloadEvent.removeListener(updateLabel);\r\n }\r\n };\r\n }, [frontstageDef, useToolAsToolSettingsLabel, defaultLabel]);\r\n}\r\n\r\n/** @internal */\r\n// istanbul ignore next\r\nexport function useItemsManager(frontstageDef: FrontstageDef) {\r\n const refreshNineZoneState = (def: FrontstageDef) => {\r\n // Fired for both registered/unregistered. Update definitions and remove/add missing widgets.\r\n def.updateWidgetDefs();\r\n let state = def.nineZoneState;\r\n if (!state)\r\n return;\r\n state = addMissingWidgets(def, state);\r\n state = removeMissingWidgets(def, state);\r\n state = hideWidgets(state, def); // TODO: should only apply to widgets provided by registered provider in onUiProviderRegisteredEvent.\r\n def.nineZoneState = state;\r\n };\r\n\r\n React.useEffect(() => {\r\n const remove = UiItemsManager.onUiProviderRegisteredEvent.addListener(() => {\r\n refreshNineZoneState(frontstageDef);\r\n });\r\n // Need to refresh anytime frontstageDef changes because uiItemsProvider may have added something to\r\n // another stage before it was possibly unloaded in this stage.\r\n refreshNineZoneState(frontstageDef);\r\n return remove;\r\n }, [frontstageDef]);\r\n}\r\n\r\n// istanbul ignore next\r\nfunction determineNewWidgets(defs: readonly WidgetDef[] | undefined, state: NineZoneState) {\r\n return (defs || []).filter((def) => !(def.id in state.tabs));\r\n}\r\n"]}