navigation
@@ -1671,6 +1889,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -1681,6 +1900,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -1724,6 +1944,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -1755,6 +1977,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs":
,
@@ -1793,6 +2031,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -1806,6 +2045,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
navigation
@@ -1830,6 +2070,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -1840,6 +2081,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -1902,6 +2144,8 @@ Map {
},
},
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -1933,6 +2177,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -1969,6 +2229,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -1982,6 +2243,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -2004,6 +2266,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -2014,6 +2277,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -2113,6 +2377,8 @@ Map {
},
},
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -2144,6 +2410,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -2180,6 +2462,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -2193,6 +2476,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -2215,6 +2499,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -2225,6 +2510,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -2282,6 +2568,8 @@ Map {
},
},
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -2313,6 +2601,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -2349,6 +2653,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -2362,6 +2667,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -2384,6 +2690,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -2394,6 +2701,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -2482,6 +2790,8 @@ Map {
},
},
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -2513,6 +2823,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -2549,6 +2875,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -2562,6 +2889,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -2584,6 +2912,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -2594,6 +2923,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -2651,6 +2981,8 @@ Map {
},
},
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -2682,6 +3014,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -2718,6 +3066,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -2731,6 +3080,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -2753,6 +3103,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -2763,6 +3114,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
diff --git a/src/app-layout/__tests__/__snapshots__/widget-contract-split-panel-old.test.tsx.snap b/src/app-layout/__tests__/__snapshots__/widget-contract-split-panel-old.test.tsx.snap
index 7d29d07a3b..d341c506ac 100644
--- a/src/app-layout/__tests__/__snapshots__/widget-contract-split-panel-old.test.tsx.snap
+++ b/src/app-layout/__tests__/__snapshots__/widget-contract-split-panel-old.test.tsx.snap
@@ -9,6 +9,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -40,6 +42,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -74,6 +92,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -87,6 +106,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -109,6 +129,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -119,6 +140,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -202,6 +224,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -233,6 +257,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -267,6 +307,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -280,6 +321,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -302,6 +344,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -312,6 +355,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -355,6 +399,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -386,6 +432,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -420,6 +482,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -433,6 +496,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -455,6 +519,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -465,6 +530,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -546,6 +612,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -577,6 +645,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -611,6 +695,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -624,6 +709,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -646,6 +732,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -656,6 +743,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -699,6 +787,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -730,6 +820,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -764,6 +870,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -777,6 +884,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -799,6 +907,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -809,6 +918,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -857,6 +967,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -888,6 +1000,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -922,6 +1050,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -935,6 +1064,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -957,6 +1087,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -967,6 +1098,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -1050,6 +1182,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -1081,6 +1215,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -1115,6 +1265,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -1128,6 +1279,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -1150,6 +1302,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -1160,6 +1313,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -1203,6 +1357,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -1234,6 +1390,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -1268,6 +1440,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -1281,6 +1454,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -1303,6 +1477,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -1313,6 +1488,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -1393,6 +1569,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -1424,6 +1602,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -1458,6 +1652,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -1471,6 +1666,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -1493,6 +1689,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -1503,6 +1700,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
@@ -1546,6 +1744,8 @@ Map {
"activeAiDrawerSize": 0,
"activeDrawer": undefined,
"activeDrawerSize": 290,
+ "activeGlobalBottomDrawerId": null,
+ "activeGlobalBottomDrawerSize": 290,
"activeGlobalDrawers": [],
"activeGlobalDrawersIds": [],
"activeGlobalDrawersSizes": {},
@@ -1577,6 +1777,22 @@ Map {
"toolsClose": undefined,
"toolsToggle": undefined,
},
+ "bottomDrawerReportedSize": 0,
+ "bottomDrawersFocusControl": {
+ "loseFocus": [Function],
+ "refs": {
+ "close": {
+ "current": null,
+ },
+ "slider": {
+ "current": null,
+ },
+ "toggle": {
+ "current": null,
+ },
+ },
+ "setFocus": [Function],
+ },
"breadcrumbs": undefined,
"discoveredBreadcrumbs": null,
"drawers": [
@@ -1611,6 +1827,7 @@ Map {
},
"drawersOpenQueue": [],
"expandedDrawerId": null,
+ "getMaxGlobalBottomDrawerHeight": [Function],
"globalDrawers": [],
"globalDrawersFocusControl": {
"loseFocus": [Function],
@@ -1624,6 +1841,7 @@ Map {
"maxGlobalDrawersSizes": {},
"minAiDrawerSize": 400,
"minDrawerSize": 290,
+ "minGlobalBottomDrawerSize": 290,
"minGlobalDrawersSizes": {},
"navigation":
,
"navigationFocusControl": {
@@ -1646,6 +1864,7 @@ Map {
"onActiveAiDrawerResize": [Function],
"onActiveDrawerChange": [Function],
"onActiveDrawerResize": [Function],
+ "onActiveGlobalBottomDrawerChange": [Function],
"onActiveGlobalDrawersChange": [Function],
"onNavigationToggle": [Function],
"onSplitPanelToggle": [Function],
@@ -1656,6 +1875,7 @@ Map {
"insetInlineEnd": 0,
"insetInlineStart": 0,
},
+ "reportBottomDrawerSize": [Function],
"setExpandedDrawerId": [Function],
"setNotificationsHeight": [Function],
"setToolbarHeight": [Function],
diff --git a/src/app-layout/__tests__/runtime-drawers-layout.test.tsx b/src/app-layout/__tests__/runtime-drawers-layout.test.tsx
index 34ea2b4523..409e4d61cf 100644
--- a/src/app-layout/__tests__/runtime-drawers-layout.test.tsx
+++ b/src/app-layout/__tests__/runtime-drawers-layout.test.tsx
@@ -133,6 +133,69 @@ describe('toolbar mode only features', () => {
expect(globalDrawersWrapper.findActiveDrawers()[1].getElement()).toHaveTextContent('global drawer content 2');
});
+ test('(with a bottom drawer open) first opened drawer (global drawer) should be closed when active drawers take up all available space on the page and a third drawer is opened', async () => {
+ jest.mocked(computeHorizontalLayout).mockReturnValue({
+ splitPanelPosition: 'bottom',
+ splitPanelForcedPosition: false,
+ sideSplitPanelSize: 0,
+ maxSplitPanelSize: 792,
+ maxDrawerSize: 792,
+ maxGlobalDrawersSizes: {},
+ totalActiveGlobalDrawersSize: 0,
+ resizableSpaceAvailable: 792,
+ maxAiDrawerSize: 0,
+ });
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'local-drawer',
+ mountContent: container => (container.textContent = 'local-drawer content'),
+ });
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-1',
+ type: 'global',
+ defaultActive: true,
+ mountContent: container => (container.textContent = 'global drawer content 1'),
+ });
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-2',
+ type: 'global',
+ defaultActive: true,
+ mountContent: container => (container.textContent = 'global drawer content 2'),
+ });
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-3',
+ mountContent: container => (container.textContent = 'global drawer content 3'),
+ });
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'global-bottom-drawer',
+ type: 'global',
+ position: 'bottom',
+ defaultActive: true,
+ mountContent: container => (container.textContent = 'global bottom drawer'),
+ });
+ const { wrapper, globalDrawersWrapper } = await renderComponent(
);
+
+ await delay();
+
+ expect(globalDrawersWrapper.findActiveDrawers()!.length).toBe(3);
+ expect(globalDrawersWrapper.findActiveDrawers()[0].getElement()).toHaveTextContent('global bottom drawer');
+ expect(globalDrawersWrapper.findActiveDrawers()[1].getElement()).toHaveTextContent('global drawer content 1');
+ expect(globalDrawersWrapper.findActiveDrawers()[2].getElement()).toHaveTextContent('global drawer content 2');
+
+ wrapper.findDrawerTriggerById('local-drawer')!.click();
+
+ await waitFor(() => {
+ expect(globalDrawersWrapper.findActiveDrawers()!.length).toBe(3);
+ });
+ expect(globalDrawersWrapper.findActiveDrawers()[0].getElement()).toHaveTextContent('global bottom drawer');
+ expect(globalDrawersWrapper.findActiveDrawers()[1].getElement()).toHaveTextContent('local-drawer');
+ expect(globalDrawersWrapper.findActiveDrawers()[2].getElement()).toHaveTextContent('global drawer content 2');
+ });
+
test('first opened drawer (local drawer) should be closed when active drawers take up all available space on the page and a third drawer is opened', async () => {
jest.mocked(computeHorizontalLayout).mockReturnValue({
splitPanelPosition: 'bottom',
diff --git a/src/app-layout/__tests__/runtime-drawers.test.tsx b/src/app-layout/__tests__/runtime-drawers.test.tsx
index 0e464510a9..657073f7ea 100644
--- a/src/app-layout/__tests__/runtime-drawers.test.tsx
+++ b/src/app-layout/__tests__/runtime-drawers.test.tsx
@@ -933,284 +933,289 @@ describe('toolbar mode only features', () => {
});
describe.each(['global', 'global-ai'] as const)('drawer type = %s', type => {
- const findDrawerTriggerById = (id: string, renderProps: Awaited
>) => {
- if (type === 'global') {
- return renderProps.wrapper.findDrawerTriggerById(id);
- } else {
- return renderProps.globalDrawersWrapper.findAiDrawerTrigger();
+ describe.each(['side', 'bottom'] as const)('drawer position = %s', position => {
+ // this condition does not exist
+ if (type === 'global-ai' && position === 'bottom') {
+ return;
}
- };
- const registerDrawer = (payload: DrawerConfig | WidgetDrawerPayload) => {
- if (type === 'global') {
- awsuiPlugins.appLayout.registerDrawer({ ...payload, type } as DrawerConfig);
- } else {
- awsuiWidgetPlugins.registerLeftDrawer(payload as WidgetDrawerPayload);
- }
- };
- const findDrawerHeaderActionById = (id: string, renderProps: Awaited>) => {
- return createWrapper(renderProps.container).findButtonGroup()!.findButtonById(id);
- };
-
- test('renders resize handle for a global drawer when config is enabled', async () => {
- registerDrawer({
- ...drawerDefaults,
- id: 'test-resizable',
- resizable: true,
- ariaLabels: {
- triggerButton: 'drawer trigger',
- content: 'drawer content',
- resizeHandle: 'drawer resize',
- closeButton: 'drawer close',
- },
- });
- const renderProps = await renderComponent();
- const { globalDrawersWrapper } = renderProps;
+ const findDrawerTriggerById = (id: string, renderProps: Awaited>) => {
+ if (type === 'global') {
+ return renderProps.wrapper.findDrawerTriggerById(id);
+ } else {
+ return renderProps.globalDrawersWrapper.findAiDrawerTrigger();
+ }
+ };
+ const registerDrawer = (payload: DrawerConfig | WidgetDrawerPayload) => {
+ if (type === 'global') {
+ awsuiPlugins.appLayout.registerDrawer({ ...payload, type, position } as DrawerConfig);
+ } else {
+ awsuiWidgetPlugins.registerLeftDrawer(payload as WidgetDrawerPayload);
+ }
+ };
+ const findDrawerHeaderActionById = (id: string, renderProps: Awaited>) => {
+ return createWrapper(renderProps.container).findButtonGroup()!.findButtonById(id);
+ };
- findDrawerTriggerById('test-resizable', renderProps)!.click();
+ test('renders resize handle for a global drawer when config is enabled', async () => {
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'test-resizable',
+ resizable: true,
+ ariaLabels: {
+ triggerButton: 'drawer trigger',
+ content: 'drawer content',
+ resizeHandle: 'drawer resize',
+ closeButton: 'drawer close',
+ },
+ });
+ const renderProps = await renderComponent();
+ const { globalDrawersWrapper } = renderProps;
- await waitFor(() => {
- expect(globalDrawersWrapper.findResizeHandleByActiveDrawerId('test-resizable')!.getElement()).toHaveFocus();
- expect(globalDrawersWrapper.findResizeHandleByActiveDrawerId('test-resizable')!.getElement()).toHaveAttribute(
- 'aria-label',
- 'drawer resize'
- );
- });
- });
+ findDrawerTriggerById('test-resizable', renderProps)!.click();
- test('close active global drawer by clicking on close button', async () => {
- registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer',
- ariaLabels: {
- triggerButton: 'drawer trigger',
- content: 'drawer content',
- resizeHandle: 'drawer resize',
- closeButton: 'drawer close',
- },
+ await waitFor(() => {
+ expect(globalDrawersWrapper.findResizeHandleByActiveDrawerId('test-resizable')!.getElement()).toHaveFocus();
+ expect(
+ globalDrawersWrapper.findResizeHandleByActiveDrawerId('test-resizable')!.getElement()
+ ).toHaveAttribute('aria-label', 'drawer resize');
+ });
});
- const renderProps = await renderComponent();
- const { globalDrawersWrapper } = renderProps;
+ test('close active global drawer by clicking on close button', async () => {
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer',
+ ariaLabels: {
+ triggerButton: 'drawer trigger',
+ content: 'drawer content',
+ resizeHandle: 'drawer resize',
+ closeButton: 'drawer close',
+ },
+ });
- findDrawerTriggerById('global-drawer', renderProps)!.click();
- expect(globalDrawersWrapper.findDrawerById('global-drawer')!.getElement()).toBeInTheDocument();
- renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer')!.click();
- expect(globalDrawersWrapper.findDrawerById('global-drawer')).toBeNull();
- });
+ const renderProps = await renderComponent();
+ const { globalDrawersWrapper } = renderProps;
- test('opens a drawer when openDrawer is called', async () => {
- awsuiPlugins.appLayout.registerDrawer({
- ...drawerDefaults,
- id: 'local-drawer',
- mountContent: container => (container.textContent = 'local-drawer content'),
- });
- awsuiPlugins.appLayout.registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer-1',
- type: 'global',
- mountContent: container => (container.textContent = 'global drawer content 1'),
- });
- registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer-2',
- mountContent: container => (container.textContent = 'global drawer content 2'),
+ findDrawerTriggerById('global-drawer', renderProps)!.click();
+ expect(globalDrawersWrapper.findDrawerById('global-drawer')!.getElement()).toBeInTheDocument();
+ renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer')!.click();
+ expect(globalDrawersWrapper.findDrawerById('global-drawer')).toBeNull();
});
- const { globalDrawersWrapper } = await renderComponent();
+ test('opens a drawer when openDrawer is called', async () => {
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'local-drawer',
+ mountContent: container => (container.textContent = 'local-drawer content'),
+ });
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-1',
+ type: 'global',
+ mountContent: container => (container.textContent = 'global drawer content 1'),
+ });
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-2',
+ mountContent: container => (container.textContent = 'global drawer content 2'),
+ });
- expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(0);
+ const { globalDrawersWrapper } = await renderComponent();
- awsuiPlugins.appLayout.openDrawer('local-drawer');
+ expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(0);
- await delay();
+ awsuiPlugins.appLayout.openDrawer('local-drawer');
- expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(1);
+ await delay();
- awsuiPlugins.appLayout.openDrawer('global-drawer-1');
+ expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(1);
- await delay();
+ awsuiPlugins.appLayout.openDrawer('global-drawer-1');
- expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(2);
- });
+ await delay();
- test('does not do anything when openDrawer is called with active drawer id', async () => {
- registerDrawer({
- ...drawerDefaults,
- id: 'local-drawer',
- mountContent: container => (container.textContent = 'local-drawer content'),
+ expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(2);
});
- const { globalDrawersWrapper } = await renderComponent();
+ test('does not do anything when openDrawer is called with active drawer id', async () => {
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'local-drawer',
+ mountContent: container => (container.textContent = 'local-drawer content'),
+ });
- expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(0);
+ const { globalDrawersWrapper } = await renderComponent();
- if (type === 'global') {
- awsuiPlugins.appLayout.openDrawer('local-drawer');
- } else {
- awsuiWidgetPlugins.updateDrawer({ type: 'openDrawer', payload: { id: 'local-drawer' } });
- }
+ expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(0);
- await delay();
+ if (type === 'global') {
+ awsuiPlugins.appLayout.openDrawer('local-drawer');
+ } else {
+ awsuiWidgetPlugins.updateDrawer({ type: 'openDrawer', payload: { id: 'local-drawer' } });
+ }
- expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(1);
+ await delay();
- if (type === 'global') {
- awsuiPlugins.appLayout.openDrawer('local-drawer');
- } else {
- awsuiWidgetPlugins.updateDrawer({ type: 'openDrawer', payload: { id: 'local-drawer' } });
- }
+ expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(1);
- await delay();
+ if (type === 'global') {
+ awsuiPlugins.appLayout.openDrawer('local-drawer');
+ } else {
+ awsuiWidgetPlugins.updateDrawer({ type: 'openDrawer', payload: { id: 'local-drawer' } });
+ }
- expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(1);
- });
+ await delay();
- test('should restore focus when a global drawer is closed', async () => {
- registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer-1',
- mountContent: container => (container.textContent = 'global drawer content 1'),
+ expect(globalDrawersWrapper.findActiveDrawers()).toHaveLength(1);
});
- const renderProps = await renderComponent();
- const { globalDrawersWrapper } = renderProps;
+ test('should restore focus when a global drawer is closed', async () => {
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-1',
+ mountContent: container => (container.textContent = 'global drawer content 1'),
+ });
- findDrawerTriggerById('global-drawer-1', renderProps)!.focus();
- findDrawerTriggerById('global-drawer-1', renderProps)!.click();
- expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.getElement()).toBeInTheDocument();
- renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer-1')!.click();
- expect(globalDrawersWrapper.findDrawerById('global-drawer-1')).toBeNull();
- await waitFor(() => {
- expect(findDrawerTriggerById('global-drawer-1', renderProps)!.getElement()).toHaveFocus();
- });
- });
+ const renderProps = await renderComponent();
+ const { globalDrawersWrapper } = renderProps;
- test('when preserveInactiveContent is set to true, initially closed drawer does not exist in dom (but mounted and persists when opened and closed)', async () => {
- registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer-1',
- mountContent: container => (container.textContent = 'global drawer content 1'),
- preserveInactiveContent: true,
+ findDrawerTriggerById('global-drawer-1', renderProps)!.focus();
+ findDrawerTriggerById('global-drawer-1', renderProps)!.click();
+ expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.getElement()).toBeInTheDocument();
+ renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer-1')!.click();
+ expect(globalDrawersWrapper.findDrawerById('global-drawer-1')).toBeNull();
+ await waitFor(() => {
+ expect(findDrawerTriggerById('global-drawer-1', renderProps)!.getElement()).toHaveFocus();
+ });
});
- const renderProps = await renderComponent();
- const { globalDrawersWrapper } = renderProps;
+ test('when preserveInactiveContent is set to true, initially closed drawer does not exist in dom (but mounted and persists when opened and closed)', async () => {
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-1',
+ mountContent: container => (container.textContent = 'global drawer content 1'),
+ preserveInactiveContent: true,
+ });
- expect(globalDrawersWrapper.findDrawerById('global-drawer-1')).toBeNull();
+ const renderProps = await renderComponent();
+ const { globalDrawersWrapper } = renderProps;
- findDrawerTriggerById('global-drawer-1', renderProps)!.click();
+ expect(globalDrawersWrapper.findDrawerById('global-drawer-1')).toBeNull();
- await delay();
+ findDrawerTriggerById('global-drawer-1', renderProps)!.click();
- expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.isActive()).toBe(true);
- renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer-1')!.click();
+ await delay();
- expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.getElement()).toBeInTheDocument();
- expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.isActive()).toBe(false);
- });
+ expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.isActive()).toBe(true);
+ renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer-1')!.click();
- test('should call visibilityChange callback when global drawer with preserveInactiveContent is opened and closed', async () => {
- const onVisibilityChangeMock = jest.fn();
- registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer-1',
- mountContent: (container, mountContext) => {
- if (mountContext?.onVisibilityChange) {
- mountContext.onVisibilityChange(onVisibilityChangeMock);
- }
- container.textContent = 'global drawer content 1';
- },
- preserveInactiveContent: true,
+ expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.getElement()).toBeInTheDocument();
+ expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.isActive()).toBe(false);
});
- const renderProps = await renderComponent();
- const { globalDrawersWrapper } = renderProps;
-
- findDrawerTriggerById('global-drawer-1', renderProps)!.click();
+ test('should call visibilityChange callback when global drawer with preserveInactiveContent is opened and closed', async () => {
+ const onVisibilityChangeMock = jest.fn();
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer-1',
+ mountContent: (container, mountContext) => {
+ if (mountContext?.onVisibilityChange) {
+ mountContext.onVisibilityChange(onVisibilityChangeMock);
+ }
+ container.textContent = 'global drawer content 1';
+ },
+ preserveInactiveContent: true,
+ });
- await delay();
+ const renderProps = await renderComponent();
+ const { globalDrawersWrapper } = renderProps;
- expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.isActive()).toBe(true);
- expect(onVisibilityChangeMock).toHaveBeenCalledWith(true);
+ findDrawerTriggerById('global-drawer-1', renderProps)!.click();
- renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer-1')!.click();
- expect(onVisibilityChangeMock).toHaveBeenCalledWith(false);
- });
+ await delay();
- test(`closes a drawer when closeDrawer is called (${type} drawer)`, async () => {
- registerDrawer({ ...drawerDefaults, resizable: true });
+ expect(globalDrawersWrapper.findDrawerById('global-drawer-1')!.isActive()).toBe(true);
+ expect(onVisibilityChangeMock).toHaveBeenCalledWith(true);
- const { wrapper } = await renderComponent();
+ renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer-1')!.click();
+ expect(onVisibilityChangeMock).toHaveBeenCalledWith(false);
+ });
- if (type === 'global') {
- awsuiPlugins.appLayout.openDrawer('test');
- } else {
- awsuiWidgetPlugins.updateDrawer({ type: 'openDrawer', payload: { id: 'test' } });
- }
+ test(`closes a drawer when closeDrawer is called (${type} drawer)`, async () => {
+ registerDrawer({ ...drawerDefaults, resizable: true });
- await delay();
+ const { wrapper } = await renderComponent();
- expect(wrapper.findActiveDrawer()!.getElement()).toHaveTextContent('runtime drawer content');
+ if (type === 'global') {
+ awsuiPlugins.appLayout.openDrawer('test');
+ } else {
+ awsuiWidgetPlugins.updateDrawer({ type: 'openDrawer', payload: { id: 'test' } });
+ }
- if (type === 'global') {
- awsuiPlugins.appLayout.closeDrawer('test');
- } else {
- awsuiWidgetPlugins.updateDrawer({ type: 'closeDrawer', payload: { id: 'test' } });
- }
+ await delay();
- await delay();
+ expect(wrapper.findActiveDrawer()!.getElement()).toHaveTextContent('runtime drawer content');
- expect(wrapper.findActiveDrawer()).toBeFalsy();
- });
+ if (type === 'global') {
+ awsuiPlugins.appLayout.closeDrawer('test');
+ } else {
+ awsuiWidgetPlugins.updateDrawer({ type: 'closeDrawer', payload: { id: 'test' } });
+ }
- test('should render trigger buttons for global drawers even if local drawers are not present', async () => {
- const renderProps = await renderComponent();
+ await delay();
- registerDrawer({
- ...drawerDefaults,
- id: 'global1',
+ expect(wrapper.findActiveDrawer()).toBeFalsy();
});
- await delay();
+ test('should render trigger buttons for global drawers even if local drawers are not present', async () => {
+ const renderProps = await renderComponent();
- expect(findDrawerTriggerById('global1', renderProps)!.getElement()).toBeInTheDocument();
- });
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global1',
+ });
- test(`calls onToggle handler by clicking on drawers trigger button (${type} runtime drawers)`, async () => {
- const onToggle = jest.fn();
- registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer',
- onToggle: event => onToggle(event.detail),
+ await delay();
+
+ expect(findDrawerTriggerById('global1', renderProps)!.getElement()).toBeInTheDocument();
});
- const renderProps = await renderComponent();
- findDrawerTriggerById('global-drawer', renderProps)!.click();
- expect(onToggle).toHaveBeenCalledWith({ isOpen: true, initiatedByUserAction: true });
- renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer')!.click();
- expect(onToggle).toHaveBeenCalledWith({ isOpen: false, initiatedByUserAction: true });
- });
+ test(`calls onToggle handler by clicking on drawers trigger button (${type} runtime drawers)`, async () => {
+ const onToggle = jest.fn();
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer',
+ onToggle: event => onToggle(event.detail),
+ });
+ const renderProps = await renderComponent();
- test(`calls onHeaderActionClick handler by clicking on drawers header action button in left runtime drawer)`, async () => {
- const onHeaderActionClick = jest.fn();
- registerDrawer({
- ...drawerDefaults,
- id: 'global-drawer',
- headerActions: [
- {
- type: 'icon-button',
- id: 'add',
- iconName: 'add-plus',
- text: 'Add',
- },
- ],
- onHeaderActionClick: event => onHeaderActionClick(event.detail),
+ findDrawerTriggerById('global-drawer', renderProps)!.click();
+ expect(onToggle).toHaveBeenCalledWith({ isOpen: true, initiatedByUserAction: true });
+ renderProps.globalDrawersWrapper.findCloseButtonByActiveDrawerId('global-drawer')!.click();
+ expect(onToggle).toHaveBeenCalledWith({ isOpen: false, initiatedByUserAction: true });
});
- const renderProps = await renderComponent();
- findDrawerTriggerById('global-drawer', renderProps)!.click();
- findDrawerHeaderActionById('add', renderProps)!.click();
- expect(onHeaderActionClick).toHaveBeenCalledWith({ id: 'add' });
+ test(`calls onHeaderActionClick handler by clicking on drawers header action button in left runtime drawer)`, async () => {
+ const onHeaderActionClick = jest.fn();
+ registerDrawer({
+ ...drawerDefaults,
+ id: 'global-drawer',
+ headerActions: [
+ {
+ type: 'icon-button',
+ id: 'add',
+ iconName: 'add-plus',
+ text: 'Add',
+ },
+ ],
+ onHeaderActionClick: event => onHeaderActionClick(event.detail),
+ });
+ const renderProps = await renderComponent();
+ findDrawerTriggerById('global-drawer', renderProps)!.click();
+
+ findDrawerHeaderActionById('add', renderProps)!.click();
+ expect(onHeaderActionClick).toHaveBeenCalledWith({ id: 'add' });
+ });
});
});
@@ -1434,153 +1439,184 @@ describe('toolbar mode only features', () => {
expect(globalDrawersWrapper.findDrawerById('global2')!.isActive()).toBe(true);
expect(globalDrawersWrapper.findDrawerById('global3')).toBeFalsy();
});
+
+ test('should open global bottom drawer by default when defaultActive is set', async () => {
+ const { globalDrawersWrapper } = await renderComponent();
+
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: 'global1',
+ type: 'global',
+ position: 'bottom',
+ defaultActive: true,
+ });
+
+ await delay();
+
+ expect(globalDrawersWrapper.findDrawerById('global1')!.isActive()).toBe(true);
+ });
});
describe('expanded mode for global drawers', () => {
describe.each(['global', 'global-ai'] as const)('drawer type = %s', type => {
- const findDrawerTriggerById = (id: string, renderProps: Awaited>) => {
- if (type === 'global') {
- return renderProps.wrapper.findDrawerTriggerById(id);
- } else {
- return renderProps.globalDrawersWrapper.findAiDrawerTrigger();
- }
- };
- const registerDrawer = (payload: DrawerConfig | WidgetDrawerPayload) => {
- if (type === 'global') {
- awsuiPlugins.appLayout.registerDrawer({ ...payload, type } as DrawerConfig);
- } else {
- awsuiWidgetPlugins.registerLeftDrawer(payload as WidgetDrawerPayload);
+ describe.each(['side', 'bottom'] as const)('drawer position = %s', position => {
+ // this condition does not exist
+ if (type === 'global-ai' && position === 'bottom') {
+ return;
}
- };
- test('should set a drawer to expanded mode by clicking on "expanded mode" button', async () => {
- const drawerId = 'global-drawer';
- registerDrawer({
- ...drawerDefaults,
- ariaLabels: {
- expandedModeButton: 'Expanded mode button',
- },
- id: drawerId,
- isExpandable: true,
- });
- const renderProps = await renderComponent();
- const { globalDrawersWrapper } = renderProps;
-
- findDrawerTriggerById(drawerId, renderProps)!.click();
- expect(
- renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.getElement()
- ).toBeInTheDocument();
- expect(globalDrawersWrapper.findDrawerById(drawerId)!.isDrawerInExpandedMode()).toBe(false);
- renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.click();
- expect(globalDrawersWrapper.findDrawerById(drawerId)!.isDrawerInExpandedMode()).toBe(true);
-
- expect(
- getGeneratedAnalyticsMetadata(
- renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.getElement()
- )
- ).toEqual(
- expect.objectContaining({
- action: 'expand',
- detail: expect.objectContaining({
- label: 'Expanded mode button',
- }),
- })
- );
-
- renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.click();
- expect(globalDrawersWrapper.findDrawerById(drawerId)!.isDrawerInExpandedMode()).toBe(false);
- expect(
- getGeneratedAnalyticsMetadata(
+ const findDrawerTriggerById = (id: string, renderProps: Awaited>) => {
+ if (type === 'global') {
+ return renderProps.wrapper.findDrawerTriggerById(id);
+ } else {
+ return renderProps.globalDrawersWrapper.findAiDrawerTrigger();
+ }
+ };
+ const registerDrawer = (payload: DrawerConfig | WidgetDrawerPayload) => {
+ if (type === 'global') {
+ awsuiPlugins.appLayout.registerDrawer({ ...payload, type, position } as DrawerConfig);
+ } else {
+ awsuiWidgetPlugins.registerLeftDrawer(payload as WidgetDrawerPayload);
+ }
+ };
+
+ test('should set a drawer to expanded mode by clicking on "expanded mode" button', async () => {
+ const drawerId = 'global-drawer';
+ registerDrawer({
+ ...drawerDefaults,
+ ariaLabels: {
+ expandedModeButton: 'Expanded mode button',
+ },
+ id: drawerId,
+ isExpandable: true,
+ });
+ const renderProps = await renderComponent();
+ const { globalDrawersWrapper } = renderProps;
+
+ findDrawerTriggerById(drawerId, renderProps)!.click();
+ expect(
renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.getElement()
- )
- ).toEqual(
- expect.objectContaining({
- action: 'collapse',
- detail: expect.objectContaining({
- label: 'Expanded mode button',
- }),
- })
- );
- });
+ ).toBeInTheDocument();
+ expect(globalDrawersWrapper.findDrawerById(drawerId)!.isDrawerInExpandedMode()).toBe(false);
+ renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.click();
+ expect(globalDrawersWrapper.findDrawerById(drawerId)!.isDrawerInExpandedMode()).toBe(true);
+
+ expect(
+ getGeneratedAnalyticsMetadata(
+ renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.getElement()
+ )
+ ).toEqual(
+ expect.objectContaining({
+ action: 'expand',
+ detail: expect.objectContaining({
+ label: 'Expanded mode button',
+ }),
+ })
+ );
- test('only one drawer could be in expanded mode. all other panels should be closed', async () => {
- const drawerId1 = 'global-drawer1';
- const drawerId2 = 'global-drawer2';
- const drawerId3Local = 'local-drawer';
- awsuiPlugins.appLayout.registerDrawer({
- ...drawerDefaults,
- id: drawerId1,
- type: 'global',
- isExpandable: true,
- });
- registerDrawer({
- ...drawerDefaults,
- id: drawerId2,
- isExpandable: true,
- });
- awsuiPlugins.appLayout.registerDrawer({
- ...drawerDefaults,
- id: drawerId3Local,
+ renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.click();
+ expect(globalDrawersWrapper.findDrawerById(drawerId)!.isDrawerInExpandedMode()).toBe(false);
+ expect(
+ getGeneratedAnalyticsMetadata(
+ renderProps.globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.getElement()
+ )
+ ).toEqual(
+ expect.objectContaining({
+ action: 'collapse',
+ detail: expect.objectContaining({
+ label: 'Expanded mode button',
+ }),
+ })
+ );
});
- const renderProps = await renderComponent(nav} />);
- const { wrapper, globalDrawersWrapper } = renderProps;
-
- await delay();
- wrapper.findDrawerTriggerById(drawerId1)!.click();
- findDrawerTriggerById(drawerId2, renderProps)!.click();
- wrapper.findDrawerTriggerById(drawerId3Local)!.click();
+ test('only one drawer could be in expanded mode. all other panels should be closed', async () => {
+ const drawerId1 = 'global-drawer1';
+ const drawerId2 = 'global-drawer2';
+ const drawerId3Local = 'local-drawer';
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: drawerId1,
+ type: 'global',
+ isExpandable: true,
+ });
+ registerDrawer({
+ ...drawerDefaults,
+ id: drawerId2,
+ isExpandable: true,
+ });
+ awsuiPlugins.appLayout.registerDrawer({
+ ...drawerDefaults,
+ id: drawerId3Local,
+ });
+ const renderProps = await renderComponent(