useFocusControl.tsx 876 B

123456789101112131415161718192021
  1. import {useCallback, useState} from 'react';
  2. import type {BreadcrumbControlOptions} from 'sentry/components/events/breadcrumbs/breadcrumbsDrawer';
  3. import type {FlagControlOptions} from 'sentry/components/events/featureFlags/utils';
  4. type FocusControlOption = BreadcrumbControlOptions | FlagControlOptions;
  5. export default function useFocusControl(initialFocusControl?: FocusControlOption) {
  6. const [focusControl, setFocusControl] = useState(initialFocusControl);
  7. // If the focused control element is blurred, unset the state to remove styles
  8. // This will allow us to simulate :focus-visible on the button elements.
  9. const getFocusProps = useCallback(
  10. (option: FocusControlOption) => {
  11. return option === focusControl
  12. ? {autoFocus: true, onBlur: () => setFocusControl(undefined)}
  13. : {};
  14. },
  15. [focusControl]
  16. );
  17. return {getFocusProps};
  18. }