This commit applies `strictNullChecks` to the entire codebase to improve maintainability and type safety. Key changes include: - Remove some explicit null-checks where unnecessary. - Add necessary null-checks. - Refactor static factory functions for a more functional approach. - Improve some test names and contexts for better debugging. - Add unit tests for any additional logic introduced. - Refactor `createPositionFromRegexFullMatch` to its own function as the logic is reused. - Prefer `find` prefix on functions that may return `undefined` and `get` prefix for those that always return a value.
24 lines
803 B
TypeScript
24 lines
803 B
TypeScript
import { Ref, watchEffect } from 'vue';
|
|
|
|
/**
|
|
* Manages focus transitions, ensuring good usability and accessibility.
|
|
*/
|
|
export function useCurrentFocusToggle(shouldDisableFocus: Ref<boolean>) {
|
|
let previouslyFocusedElement: HTMLElement | null;
|
|
|
|
watchEffect(() => {
|
|
if (shouldDisableFocus.value) {
|
|
previouslyFocusedElement = document.activeElement as HTMLElement | null;
|
|
previouslyFocusedElement?.blur();
|
|
} else {
|
|
if (!previouslyFocusedElement || previouslyFocusedElement.tagName === 'BODY') {
|
|
// It doesn't make sense to return focus to the body after the modal is
|
|
// closed because the body itself doesn't offer meaningful interactivity
|
|
return;
|
|
}
|
|
previouslyFocusedElement.focus();
|
|
previouslyFocusedElement = null;
|
|
}
|
|
});
|
|
}
|