@itwin/appui-react 3.4.5 → 3.4.6
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.
- package/CHANGELOG.md +8 -1
- package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
- package/lib/cjs/appui-react/widget-panels/Frontstage.js +25 -19
- package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
- package/lib/esm/appui-react/widget-panels/Frontstage.js +25 -19
- package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
- package/package.json +32 -32
|
@@ -709,9 +709,9 @@ export function packNineZoneState(state) {
|
|
|
709
709
|
});
|
|
710
710
|
return packed;
|
|
711
711
|
}
|
|
712
|
-
// TODO: clean-up of saved widgets.
|
|
713
712
|
// istanbul ignore next
|
|
714
|
-
function packSavedWidgets(
|
|
713
|
+
function packSavedWidgets(frontstageDef) {
|
|
714
|
+
let savedWidgets = [];
|
|
715
715
|
for (const widgetDef of frontstageDef.widgetDefs) {
|
|
716
716
|
const id = widgetDef.id;
|
|
717
717
|
const initialWidget = {
|
|
@@ -727,17 +727,25 @@ function packSavedWidgets(savedWidgets, frontstageDef) {
|
|
|
727
727
|
});
|
|
728
728
|
if (widget === initialWidget)
|
|
729
729
|
continue;
|
|
730
|
-
savedWidgets
|
|
731
|
-
|
|
732
|
-
|
|
730
|
+
savedWidgets.push(widget);
|
|
731
|
+
}
|
|
732
|
+
// Add previously saved widgets.
|
|
733
|
+
const prevSavedWidgets = frontstageDef.savedWidgetDefs || [];
|
|
734
|
+
for (const prevWidget of prevSavedWidgets) {
|
|
735
|
+
if (savedWidgets.find((w) => w.id === prevWidget.id))
|
|
736
|
+
continue;
|
|
737
|
+
savedWidgets.push(prevWidget);
|
|
733
738
|
}
|
|
739
|
+
// Limit number of saved widgets.
|
|
740
|
+
const maxWidgets = 100;
|
|
741
|
+
if (savedWidgets.length > maxWidgets)
|
|
742
|
+
savedWidgets = savedWidgets.slice(0, maxWidgets);
|
|
734
743
|
return savedWidgets;
|
|
735
744
|
}
|
|
736
745
|
// istanbul ignore next
|
|
737
|
-
function restoreSavedWidgets(
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
const savedWidget = savedWidgets[i];
|
|
746
|
+
function restoreSavedWidgets(frontstage) {
|
|
747
|
+
const savedWidgets = frontstage.savedWidgetDefs || [];
|
|
748
|
+
for (const savedWidget of savedWidgets) {
|
|
741
749
|
const widgetId = savedWidget.id;
|
|
742
750
|
const widgetDef = frontstage.findWidgetDef(widgetId);
|
|
743
751
|
if (!widgetDef)
|
|
@@ -748,11 +756,7 @@ function restoreSavedWidgets(savedWidgets, frontstage) {
|
|
|
748
756
|
if (savedWidget.popoutBounds) {
|
|
749
757
|
widgetDef.popoutBounds = Rectangle.create(savedWidget.popoutBounds);
|
|
750
758
|
}
|
|
751
|
-
savedWidgets = produce(savedWidgets, (draft) => {
|
|
752
|
-
draft.splice(i, 1);
|
|
753
|
-
});
|
|
754
759
|
}
|
|
755
|
-
return savedWidgets;
|
|
756
760
|
}
|
|
757
761
|
/** @internal */
|
|
758
762
|
export function isPanelCollapsed(zoneStates, panelStates) {
|
|
@@ -963,12 +967,12 @@ export function useSavedFrontstageState(frontstageDef) {
|
|
|
963
967
|
const setting = settingResult.setting;
|
|
964
968
|
if (setting.version >= version && setting.stateVersion >= stateVersion) {
|
|
965
969
|
const restored = restoreNineZoneState(frontstageDef, setting.nineZone);
|
|
966
|
-
|
|
970
|
+
frontstageDef.savedWidgetDefs = setting.widgets;
|
|
971
|
+
restoreSavedWidgets(frontstageDef);
|
|
967
972
|
let state = addMissingWidgets(frontstageDef, restored);
|
|
968
973
|
state = hideWidgets(state, frontstageDef);
|
|
969
974
|
state = processPopoutWidgets(state, frontstageDef);
|
|
970
975
|
frontstageDef.nineZoneState = state;
|
|
971
|
-
frontstageDef.savedWidgetDefs = savedWidgets;
|
|
972
976
|
return;
|
|
973
977
|
}
|
|
974
978
|
}
|
|
@@ -982,14 +986,16 @@ export function useSaveFrontstageSettings(frontstageDef) {
|
|
|
982
986
|
const nineZone = useNineZoneState(frontstageDef);
|
|
983
987
|
const uiSettingsStorage = useUiStateStorageHandler();
|
|
984
988
|
const saveSetting = React.useMemo(() => {
|
|
985
|
-
return debounce(async (frontstage, state
|
|
989
|
+
return debounce(async (frontstage, state) => {
|
|
986
990
|
const id = frontstage.id;
|
|
991
|
+
const widgets = packSavedWidgets(frontstage);
|
|
992
|
+
frontstage.savedWidgetDefs = widgets;
|
|
987
993
|
const setting = {
|
|
988
994
|
id,
|
|
989
995
|
version: frontstage.version,
|
|
990
996
|
stateVersion,
|
|
991
997
|
nineZone: packNineZoneState(state),
|
|
992
|
-
widgets
|
|
998
|
+
widgets,
|
|
993
999
|
};
|
|
994
1000
|
await uiSettingsStorage.saveSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(id), setting);
|
|
995
1001
|
}, 1000);
|
|
@@ -1002,8 +1008,7 @@ export function useSaveFrontstageSettings(frontstageDef) {
|
|
|
1002
1008
|
React.useEffect(() => {
|
|
1003
1009
|
if (!nineZone || nineZone.draggedTab)
|
|
1004
1010
|
return;
|
|
1005
|
-
|
|
1006
|
-
saveSetting(frontstageDef, nineZone, savedWidgets);
|
|
1011
|
+
saveSetting(frontstageDef, nineZone);
|
|
1007
1012
|
}, [frontstageDef, nineZone, saveSetting]);
|
|
1008
1013
|
}
|
|
1009
1014
|
/** @internal */
|
|
@@ -1132,6 +1137,7 @@ export function useItemsManager(frontstageDef) {
|
|
|
1132
1137
|
const refreshNineZoneState = (def) => {
|
|
1133
1138
|
// Fired for both registered/unregistered. Update definitions and remove/add missing widgets.
|
|
1134
1139
|
def.updateWidgetDefs();
|
|
1140
|
+
restoreSavedWidgets(def);
|
|
1135
1141
|
let state = def.nineZoneState;
|
|
1136
1142
|
if (!state)
|
|
1137
1143
|
return;
|
|
@@ -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 const panel = state.panels[side];\r\n if (panel.widgets.length < panel.maxWidgetCount) {\r\n state = addPanelWidget(state, side, widgetPanelSectionId, [widgetDef.id]);\r\n } else {\r\n const widgetIndex = Math.min(preferredWidgetIndex, panel.widgets.length - 1);\r\n const widgetId = panel.widgets[widgetIndex];\r\n state = addTabToWidget(state, widgetDef.id, widgetId);\r\n }\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"]}
|
|
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 const panel = state.panels[side];\r\n if (panel.widgets.length < panel.maxWidgetCount) {\r\n state = addPanelWidget(state, side, widgetPanelSectionId, [widgetDef.id]);\r\n } else {\r\n const widgetIndex = Math.min(preferredWidgetIndex, panel.widgets.length - 1);\r\n const widgetId = panel.widgets[widgetIndex];\r\n state = addTabToWidget(state, widgetDef.id, widgetId);\r\n }\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// istanbul ignore next\r\nfunction packSavedWidgets(frontstageDef: FrontstageDef): SavedWidgets {\r\n let savedWidgets: Array<SavedWidget> = [];\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.push(widget);\r\n }\r\n\r\n // Add previously saved widgets.\r\n const prevSavedWidgets = frontstageDef.savedWidgetDefs || [];\r\n for (const prevWidget of prevSavedWidgets) {\r\n if (savedWidgets.find((w) => w.id === prevWidget.id))\r\n continue;\r\n\r\n savedWidgets.push(prevWidget);\r\n }\r\n\r\n // Limit number of saved widgets.\r\n const maxWidgets = 100;\r\n if (savedWidgets.length > maxWidgets)\r\n savedWidgets = savedWidgets.slice(0, maxWidgets);\r\n\r\n return savedWidgets;\r\n}\r\n\r\n// istanbul ignore next\r\nfunction restoreSavedWidgets(frontstage: FrontstageDef) {\r\n const savedWidgets = frontstage.savedWidgetDefs || [];\r\n for (const savedWidget of savedWidgets) {\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}\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\r\n frontstageDef.savedWidgetDefs = setting.widgets;\r\n restoreSavedWidgets(frontstageDef);\r\n\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 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) => {\r\n const id = frontstage.id;\r\n const widgets = packSavedWidgets(frontstage);\r\n frontstage.savedWidgetDefs = widgets;\r\n const setting: WidgetPanelsFrontstageState = {\r\n id,\r\n version: frontstage.version,\r\n stateVersion,\r\n nineZone: packNineZoneState(state),\r\n widgets,\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 saveSetting(frontstageDef, nineZone);\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 restoreSavedWidgets(def);\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"]}
|