27 lines
991 B
JavaScript
27 lines
991 B
JavaScript
'use client';
|
|
import { disposeTabster } from 'tabster';
|
|
import * as React from 'react';
|
|
import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
|
|
import { useEventCallback } from '@fluentui/react-utilities';
|
|
import { createTabsterWithConfig } from './useTabster';
|
|
/**
|
|
* Subscribes to the tabster focused element. Calls the callback when the focused element changes.
|
|
* @param callback - Callback to subscribe to the focused element.
|
|
*/ export function useFocusedElementChange(callback) {
|
|
const { targetDocument } = useFluent();
|
|
const listener = useEventCallback(callback);
|
|
React.useEffect(()=>{
|
|
const tabster = createTabsterWithConfig(targetDocument);
|
|
if (tabster) {
|
|
tabster.focusedElement.subscribe(listener);
|
|
return ()=>{
|
|
tabster.focusedElement.unsubscribe(listener);
|
|
disposeTabster(tabster);
|
|
};
|
|
}
|
|
}, [
|
|
listener,
|
|
targetDocument
|
|
]);
|
|
}
|