Fix more TS errors in strict mode

This commit is contained in:
Ryan Gossiaux
2021-12-15 14:49:19 -08:00
parent 5b36ce9404
commit da6d2c3be6
9 changed files with 94 additions and 66 deletions

View File

@@ -7,7 +7,7 @@
onMount(() => { onMount(() => {
$api.setTitleId(id); $api.setTitleId(id);
return () => $api.setTitleId(null); return () => $api.setTitleId(undefined);
}); });
$: propsWeControl = { $: propsWeControl = {
id, id,

View File

@@ -36,8 +36,8 @@
export function useMenuContext( export function useMenuContext(
componentName: string componentName: string
): Writable<StateDefinition | undefined> { ): Writable<StateDefinition> {
let context: Writable<StateDefinition | undefined> | undefined = let context: Writable<StateDefinition> | undefined =
getContext(MENU_CONTEXT_NAME); getContext(MENU_CONTEXT_NAME);
if (context === undefined) { if (context === undefined) {
@@ -58,10 +58,7 @@
let searchQuery: StateDefinition["searchQuery"] = ""; let searchQuery: StateDefinition["searchQuery"] = "";
let activeItemIndex: StateDefinition["activeItemIndex"] = null; let activeItemIndex: StateDefinition["activeItemIndex"] = null;
let api: Writable<StateDefinition | undefined> = writable(); let api: Writable<StateDefinition> = writable({
setContext(MENU_CONTEXT_NAME, api);
$: api.set({
menuState, menuState,
buttonStore, buttonStore,
itemsStore: itemsStore, itemsStore: itemsStore,
@@ -125,6 +122,19 @@
})(); })();
}, },
}); });
setContext(MENU_CONTEXT_NAME, api);
$: api.update((obj) => {
return {
...obj,
menuState,
buttonStore,
itemsStore: itemsStore,
items,
searchQuery,
activeItemIndex,
};
});
function handleWindowMousedown(event: MouseEvent): void { function handleWindowMousedown(event: MouseEvent): void {
let target = event.target as HTMLElement; let target = event.target as HTMLElement;

View File

@@ -28,9 +28,9 @@
const POPOVER_CONTEXT_NAME = "PopoverContext"; const POPOVER_CONTEXT_NAME = "PopoverContext";
export function usePopoverContext( export function usePopoverContext(
component: string component: string
): Writable<StateDefinition | undefined> { ): Writable<StateDefinition> {
let context = getContext(POPOVER_CONTEXT_NAME) as let context = getContext(POPOVER_CONTEXT_NAME) as
| Writable<StateDefinition | undefined> | Writable<StateDefinition>
| undefined; | undefined;
if (context === undefined) { if (context === undefined) {
throw new Error( throw new Error(
@@ -57,31 +57,18 @@
let popoverState: PopoverStates = PopoverStates.Closed; let popoverState: PopoverStates = PopoverStates.Closed;
let api: Writable<StateDefinition | undefined> = writable(); let panel: Writable<StateDefinition["panel"]> = writable(null);
setContext(POPOVER_CONTEXT_NAME, api); setContext("PopoverPanelRef", panel);
let openClosedState: Writable<State> | undefined = writable(); let button: Writable<StateDefinition["button"]> = writable(null);
setContext("OpenClosed", openClosedState); setContext("PopoverButtonRef", button);
$: $openClosedState = match(popoverState, { let api: Writable<StateDefinition> = writable({
[PopoverStates.Open]: State.Open,
[PopoverStates.Closed]: State.Closed,
});
let panelStore = writable(null);
setContext("PopoverPanelRef", panelStore);
$: panel = $panelStore;
let buttonStore = writable(null);
setContext("PopoverButtonRef", buttonStore);
$: button = $buttonStore;
$: api.set({
popoverState, popoverState,
buttonId, buttonId,
panelId, panelId,
panel, panel: $panel,
button, button: $button,
togglePopover() { togglePopover() {
popoverState = match(popoverState, { popoverState = match(popoverState, {
[PopoverStates.Open]: PopoverStates.Closed, [PopoverStates.Open]: PopoverStates.Closed,
@@ -105,6 +92,26 @@
restoreElement?.focus(); restoreElement?.focus();
}, },
}); });
setContext(POPOVER_CONTEXT_NAME, api);
let openClosedState: Writable<State> | undefined = writable();
setContext("OpenClosed", openClosedState);
$: $openClosedState = match(popoverState, {
[PopoverStates.Open]: State.Open,
[PopoverStates.Closed]: State.Closed,
});
$: api.update((obj) => {
return {
...obj,
popoverState,
buttonId,
panelId,
panel: $panel,
button: $button,
};
});
const registerBag = { const registerBag = {
buttonId, buttonId,
@@ -121,8 +128,8 @@
function isFocusWithinPopoverGroup() { function isFocusWithinPopoverGroup() {
return ( return (
groupContext?.isFocusWithinPopoverGroup() ?? groupContext?.isFocusWithinPopoverGroup() ??
(button?.contains(document.activeElement) || ($button?.contains(document.activeElement) ||
panel?.contains(document.activeElement)) $panel?.contains(document.activeElement))
); );
} }
@@ -144,14 +151,14 @@
if (popoverState !== PopoverStates.Open) return; if (popoverState !== PopoverStates.Open) return;
if (button?.contains(target)) return; if ($button?.contains(target)) return;
if (panel?.contains(target)) return; if ($panel?.contains(target)) return;
$api.closePopover(); $api.closePopover();
if (!isFocusableElement(target, FocusableMode.Loose)) { if (!isFocusableElement(target, FocusableMode.Loose)) {
event.preventDefault(); event.preventDefault();
button?.focus(); $button?.focus();
} }
} }
</script> </script>

View File

@@ -29,9 +29,9 @@
const RADIO_GROUP_CONTEXT_NAME = "RadioGroupContext"; const RADIO_GROUP_CONTEXT_NAME = "RadioGroupContext";
export function useRadioGroupContext( export function useRadioGroupContext(
component: string component: string
): Writable<StateDefinition | undefined> { ): Writable<StateDefinition> {
const context = getContext(RADIO_GROUP_CONTEXT_NAME) as const context = getContext(RADIO_GROUP_CONTEXT_NAME) as
| Writable<StateDefinition | undefined> | Writable<StateDefinition>
| undefined; | undefined;
if (context === undefined) { if (context === undefined) {
@@ -55,10 +55,7 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
let api: Writable<StateDefinition | undefined> = writable(); let api: Writable<StateDefinition> = writable({
setContext(RADIO_GROUP_CONTEXT_NAME, api);
$: api.set({
options, options,
value, value,
disabled, disabled,
@@ -83,6 +80,20 @@
options = options.filter((radio) => radio.id !== id); options = options.filter((radio) => radio.id !== id);
}, },
}); });
setContext(RADIO_GROUP_CONTEXT_NAME, api);
$: api.update((obj) => {
return {
...obj,
options,
value,
disabled,
firstOption: options.find((option) => !option.propsRef.disabled),
containsCheckedOption: options.some(
(option) => option.propsRef.value === value
),
};
});
$: treeWalker({ $: treeWalker({
container: radioGroupRef, container: radioGroupRef,

View File

@@ -1,10 +1,7 @@
<script lang="ts"> <script lang="ts">
import { useSwitchContext } from "./SwitchGroup.svelte"; import { useSwitchContext } from "./SwitchGroup.svelte";
import type { LabelContext } from "$lib/components/label/LabelProvider.svelte"; import type { LabelContext } from "$lib/components/label/LabelProvider.svelte";
import { import { useDescriptionContext } from "$lib/components/description/DescriptionProvider.svelte";
DescriptionContext,
useDescriptionContext,
} from "$lib/components/description/DescriptionProvider.svelte";
import { useId } from "$lib/hooks/use-id"; import { useId } from "$lib/hooks/use-id";
import { Keys } from "$lib/utils/keyboard"; import { Keys } from "$lib/utils/keyboard";
import { getContext, createEventDispatcher } from "svelte"; import { getContext, createEventDispatcher } from "svelte";

View File

@@ -4,9 +4,7 @@
} }
const SWITCH_CONTEXT_NAME = "SwitchContext"; const SWITCH_CONTEXT_NAME = "SwitchContext";
export function useSwitchContext(): export function useSwitchContext(): Writable<StateDefinition> | undefined {
| Writable<StateDefinition | undefined>
| undefined {
return getContext(SWITCH_CONTEXT_NAME); return getContext(SWITCH_CONTEXT_NAME);
} }
</script> </script>
@@ -19,18 +17,16 @@
let switchStore: Writable<HTMLButtonElement | null> = writable(null); let switchStore: Writable<HTMLButtonElement | null> = writable(null);
let api: Writable<StateDefinition | undefined> = writable(); let api: Writable<StateDefinition | undefined> = writable({
setContext("SwitchApi", api); switchStore,
});
setContext(SWITCH_CONTEXT_NAME, api);
function onClick() { function onClick() {
if (!$switchStore) return; if (!$switchStore) return;
$switchStore.click(); $switchStore.click();
$switchStore.focus({ preventScroll: true }); $switchStore.focus({ preventScroll: true });
} }
$: api.set({
switchStore,
});
</script> </script>
<div {...$$restProps}> <div {...$$restProps}>

View File

@@ -27,10 +27,8 @@
const TABS_CONTEXT_NAME = "TabsContext"; const TABS_CONTEXT_NAME = "TabsContext";
export function useTabsContext( export function useTabsContext(component: string): Writable<StateDefinition> {
component: string let context: Writable<StateDefinition> | undefined =
): Writable<StateDefinition | undefined> {
let context: Writable<StateDefinition | undefined> | undefined =
getContext(TABS_CONTEXT_NAME); getContext(TABS_CONTEXT_NAME);
if (context === undefined) { if (context === undefined) {
@@ -54,10 +52,7 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
let api: Writable<StateDefinition | undefined> = writable(); let api: Writable<StateDefinition> = writable({
setContext(TABS_CONTEXT_NAME, api);
$: api.set({
selectedIndex, selectedIndex,
orientation: vertical ? "vertical" : "horizontal", orientation: vertical ? "vertical" : "horizontal",
activation: manual ? "manual" : "auto", activation: manual ? "manual" : "auto",
@@ -81,6 +76,18 @@
panels = panels.filter((p) => p !== panel); panels = panels.filter((p) => p !== panel);
}, },
}); });
setContext(TABS_CONTEXT_NAME, api);
$: api.update((obj) => {
return {
...obj,
selectedIndex,
orientation: vertical ? "vertical" : "horizontal",
activation: manual ? "manual" : "auto",
tabs,
panels,
};
});
onMount(() => { onMount(() => {
if ($api.tabs.length <= 0) return; if ($api.tabs.length <= 0) return;

View File

@@ -154,7 +154,7 @@
} }
setContext(NESTING_CONTEXT_NAME, nesting); setContext(NESTING_CONTEXT_NAME, nesting);
let openClosedState: Writable<State> | undefined = writable(State.Closed); let openClosedState: Writable<State> = writable(State.Closed);
setContext("OpenClosed", openClosedState); setContext("OpenClosed", openClosedState);
$: openClosedState.set( $: openClosedState.set(

View File

@@ -114,16 +114,16 @@
import TransitionChild from "./TransitionChild.svelte"; import TransitionChild from "./TransitionChild.svelte";
import type { useId } from "$lib/hooks/use-id"; import type { useId } from "$lib/hooks/use-id";
export let show: boolean = null; export let show: boolean | undefined = undefined;
export let unmount = true; export let unmount = true;
export let appear = false; export let appear = false;
let openClosedState: Writable<State> | undefined = getContext("OpenClosed"); let openClosedState: Writable<State> | undefined = getContext("OpenClosed");
function computeShow( function computeShow(
show: boolean, show: boolean | undefined,
openClosedState: State | undefined openClosedState: State | undefined
): boolean { ): boolean | undefined {
if (show === null && openClosedState !== undefined) { if (show === null && openClosedState !== undefined) {
return match(openClosedState, { return match(openClosedState, {
[State.Open]: true, [State.Open]: true,
@@ -161,7 +161,7 @@
let initial = true; let initial = true;
let transitionBag: Writable<TransitionContextValues> = writable(); let transitionBag: Writable<TransitionContextValues> = writable();
$: transitionBag.set({ $: transitionBag.set({
show: shouldShow, show: !!shouldShow,
appear: appear || !initial, appear: appear || !initial,
}); });