Skip to content

Commit 5a1af41

Browse files
committed
refactor(app): move focus utils to global
1 parent 3e99534 commit 5a1af41

File tree

3 files changed

+15
-19
lines changed

3 files changed

+15
-19
lines changed

core/src/components/app/app.tsx

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,17 @@
11
import type { ComponentInterface } from '@stencil/core';
2-
import { Build, Component, Element, Host, Method, h } from '@stencil/core';
3-
import type { FocusVisibleUtility } from '@utils/focus-visible';
2+
import { Component, Element, Host, Method, h } from '@stencil/core';
3+
import { initFocusVisibleUtility } from '@utils/focus-visible';
44

55
import { config } from '../../global/config';
6-
import { getIonMode, rIC } from '../../global/ionic-global';
6+
import { getIonMode } from '../../global/ionic-global';
77

88
@Component({
99
tag: 'ion-app',
1010
styleUrl: 'app.scss',
1111
})
1212
export class App implements ComponentInterface {
13-
private focusVisible?: FocusVisibleUtility;
14-
1513
@Element() el!: HTMLElement;
1614

17-
componentDidLoad() {
18-
// TODO can we move focus visible to global
19-
if (Build.isBrowser) {
20-
rIC(async () => {
21-
import('../../utils/focus-visible').then((module) => (this.focusVisible = module.startFocusVisible()));
22-
});
23-
}
24-
}
25-
2615
/**
2716
* @internal
2817
* Used to set focus on an element that uses `ion-focusable`.
@@ -35,9 +24,8 @@ export class App implements ComponentInterface {
3524
*/
3625
@Method()
3726
async setFocus(elements: HTMLElement[]) {
38-
if (this.focusVisible) {
39-
this.focusVisible.setFocus(elements);
40-
}
27+
const focusVisible = initFocusVisibleUtility();
28+
focusVisible.setFocus(elements);
4129
}
4230

4331
render() {

core/src/global/ionic-global.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,7 @@ export const initialize = (userConfig: IonicConfig = {}) => {
159159
if (typeof (window as any) !== 'undefined') {
160160
import('../utils/keyboard/keyboard').then((module) => module.startKeyboardAssist(window));
161161
}
162-
// TODO
163-
// import('../../utils/focus-visible').then((module) => (this.focusVisible = module.startFocusVisible()));
162+
import('../utils/focus-visible').then((module) => (module.initFocusVisibleUtility()));
164163
});
165164
}
166165
};

core/src/utils/focus-visible.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ export interface FocusVisibleUtility {
2020
setFocus: (elements: Element[]) => void;
2121
}
2222

23+
let focusVisibleUtility: FocusVisibleUtility | null = null;
24+
25+
export const initFocusVisibleUtility = () => {
26+
if (!focusVisibleUtility) {
27+
focusVisibleUtility = startFocusVisible();
28+
}
29+
return focusVisibleUtility;
30+
};
31+
2332
export const startFocusVisible = (rootEl?: HTMLElement): FocusVisibleUtility => {
2433
let currentFocus: Element[] = [];
2534
let keyboardMode = true;

0 commit comments

Comments
 (0)