Skip to content

Commit 8f70504

Browse files
committed
chore: Turn focusSplitPanel into async function (wait for an element before focusing on it)
1 parent 486f3ab commit 8f70504

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

src/app-layout/__tests__/__snapshots__/widget-contract-split-panel.test.tsx.snap

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,13 @@ Map {
177177
"splitPanelControlId": "split-panel33",
178178
"splitPanelFocusControl": {
179179
"refs": {
180+
"focusPromise": {
181+
"_promise": Promise {},
182+
"_reject": [Function],
183+
"_resolve": [Function],
184+
"reject": [Function],
185+
"resolve": [Function],
186+
},
180187
"onMount": [Function],
181188
"preferences": {
182189
"current": null,
@@ -247,6 +254,13 @@ Map {
247254
"onToggle": [Function],
248255
"position": "bottom",
249256
"refs": {
257+
"focusPromise": {
258+
"_promise": Promise {},
259+
"_reject": [Function],
260+
"_resolve": [Function],
261+
"reject": [Function],
262+
"resolve": [Function],
263+
},
250264
"onMount": [Function],
251265
"preferences": {
252266
"current": null,
@@ -477,6 +491,13 @@ Map {
477491
"splitPanelControlId": "split-panel33",
478492
"splitPanelFocusControl": {
479493
"refs": {
494+
"focusPromise": {
495+
"_promise": Promise {},
496+
"_reject": [Function],
497+
"_resolve": [Function],
498+
"reject": [Function],
499+
"resolve": [Function],
500+
},
480501
"onMount": [Function],
481502
"preferences": {
482503
"current": null,
@@ -547,6 +568,13 @@ Map {
547568
"onToggle": [Function],
548569
"position": "bottom",
549570
"refs": {
571+
"focusPromise": {
572+
"_promise": Promise {},
573+
"_reject": [Function],
574+
"_resolve": [Function],
575+
"reject": [Function],
576+
"resolve": [Function],
577+
},
550578
"onMount": [Function],
551579
"preferences": {
552580
"current": null,
@@ -777,6 +805,13 @@ Map {
777805
"splitPanelControlId": "split-panel33",
778806
"splitPanelFocusControl": {
779807
"refs": {
808+
"focusPromise": {
809+
"_promise": Promise {},
810+
"_reject": [Function],
811+
"_resolve": [Function],
812+
"reject": [Function],
813+
"resolve": [Function],
814+
},
780815
"onMount": [Function],
781816
"preferences": {
782817
"current": null,
@@ -847,6 +882,13 @@ Map {
847882
"onToggle": [Function],
848883
"position": "bottom",
849884
"refs": {
885+
"focusPromise": {
886+
"_promise": Promise {},
887+
"_reject": [Function],
888+
"_resolve": [Function],
889+
"reject": [Function],
890+
"resolve": [Function],
891+
},
850892
"onMount": [Function],
851893
"preferences": {
852894
"current": null,
@@ -1077,6 +1119,13 @@ Map {
10771119
"splitPanelControlId": "split-panel33",
10781120
"splitPanelFocusControl": {
10791121
"refs": {
1122+
"focusPromise": {
1123+
"_promise": Promise {},
1124+
"_reject": [Function],
1125+
"_resolve": [Function],
1126+
"reject": [Function],
1127+
"resolve": [Function],
1128+
},
10801129
"onMount": [Function],
10811130
"preferences": {
10821131
"current": null,
@@ -1147,6 +1196,13 @@ Map {
11471196
"onToggle": [Function],
11481197
"position": "bottom",
11491198
"refs": {
1199+
"focusPromise": {
1200+
"_promise": Promise {},
1201+
"_reject": [Function],
1202+
"_resolve": [Function],
1203+
"reject": [Function],
1204+
"resolve": [Function],
1205+
},
11501206
"onMount": [Function],
11511207
"preferences": {
11521208
"current": null,

src/app-layout/utils/use-split-panel-focus-control.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export interface SplitPanelFocusControlRefs {
1111
toggle: RefObject<Focusable>;
1212
slider: RefObject<HTMLDivElement>;
1313
preferences: RefObject<Focusable>;
14+
focusPromise?: Deferred<HTMLElement>;
1415
onMount: () => void;
1516
}
1617
export interface SplitPanelFocusControlState {
@@ -25,6 +26,7 @@ export function useSplitPanelFocusControl(dependencies: DependencyList): SplitPa
2526
toggle: useRef<Focusable>(null),
2627
slider: useRef<HTMLDivElement>(null),
2728
preferences: useRef<Focusable>(null),
29+
focusPromise: focusPromise.current,
2830
onMount: () => {
2931
focusPromise.current.resolve();
3032
},

src/app-layout/visual-refresh-toolbar/use-app-layout.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,11 @@ export const useAppLayout = (props: AppLayoutInternalProps, forwardRef: Forwarde
212212
openTools: () => onToolsToggle(true),
213213
focusToolsClose: () => drawersFocusControl.setFocus(true),
214214
focusActiveDrawer: () => drawersFocusControl.setFocus(true),
215-
focusSplitPanel: () => splitPanelFocusControl.refs.slider.current?.focus(),
215+
focusSplitPanel: () => {
216+
splitPanelFocusControl.refs.focusPromise?.promise.then(() => {
217+
splitPanelFocusControl.refs.slider.current?.focus();
218+
});
219+
},
216220
focusNavigation: () => navigationFocusControl.setFocus(true),
217221
}));
218222

0 commit comments

Comments
 (0)