From e67d603570d72386f29efeb1856afae0f4e061fb Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Mon, 1 Jun 2026 10:30:41 +0200 Subject: [PATCH] fix(spotlight): remove all non-null assertions to pass oxlint - Refactor groupDispatchers to accept userId as a parameter instead of closing over nullable userId - Replace mutationGroup! with a guard clause - Use optional chaining for preferenceChildrenOptionsByKey lookup with fallback --- .../src/modes/preferences/groups.tsx | 3 ++- .../src/preferences/use-user-preference.ts | 21 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/spotlight/src/modes/preferences/groups.tsx b/packages/spotlight/src/modes/preferences/groups.tsx index 33b229ef3..213b8784a 100644 --- a/packages/spotlight/src/modes/preferences/groups.tsx +++ b/packages/spotlight/src/modes/preferences/groups.tsx @@ -65,7 +65,8 @@ export const preferencesGroup = createGroup({ useInteraction: (option) => ({ type: "children", ...(option.preferenceKey - ? preferenceChildrenOptionsByKey[option.preferenceKey as keyof typeof preferenceChildrenOptionsByKey]!({}) + ? (preferenceChildrenOptionsByKey[option.preferenceKey as keyof typeof preferenceChildrenOptionsByKey]?.({}) ?? + settingsChildrenOptions({})) : settingsChildrenOptions({})), }), }); diff --git a/packages/spotlight/src/preferences/use-user-preference.ts b/packages/spotlight/src/preferences/use-user-preference.ts index 0bbd67a57..81545a5ab 100644 --- a/packages/spotlight/src/preferences/use-user-preference.ts +++ b/packages/spotlight/src/preferences/use-user-preference.ts @@ -100,22 +100,22 @@ export const useUserPreferences = () => { const pick = (field: UserPreferenceKey, changedKey: UserPreferenceKey, value: unknown) => field === changedKey ? value : getEffective(field); - const groupDispatchers: Record Promise> = { - searchPreferences: (key, value) => + const groupDispatchers: Record Promise> = { + searchPreferences: (uid, key, value) => searchMutation.mutateAsync({ - userId: userId!, + userId: uid, defaultSearchEngineId: pick("defaultSearchEngineId", key, value) as string | null, openInNewTab: pick("openSearchInNewTab", key, value) as boolean, ddgBangsEnabled: pick("ddgBangs", key, value) as boolean, }), - homeBoards: (key, value) => + homeBoards: (uid, key, value) => homeBoardsMutation.mutateAsync({ - userId: userId!, + userId: uid, homeBoardId: pick("homeBoardId", key, value) as string | null, mobileHomeBoardId: pick("mobileHomeBoardId", key, value) as string | null, }), - firstDayOfWeek: (_key, value) => firstDayMutation.mutateAsync({ id: userId!, firstDayOfWeek: value as DayOfWeek }), - pingIconsEnabled: (_key, value) => pingMutation.mutateAsync({ id: userId!, pingIconsEnabled: value as boolean }), + firstDayOfWeek: (uid, _key, value) => firstDayMutation.mutateAsync({ id: uid, firstDayOfWeek: value as DayOfWeek }), + pingIconsEnabled: (uid, _key, value) => pingMutation.mutateAsync({ id: uid, pingIconsEnabled: value as boolean }), }; const groupPending: Record = { @@ -170,15 +170,16 @@ export const useUserPreferences = () => { return; } - const group = userPreferenceDefinitionByKey[key].mutationGroup!; + const group = userPreferenceDefinitionByKey[key].mutationGroup; + if (!group) return; const dispatcher = groupDispatchers[group]; - if (!dispatcher) return; + if (!dispatcher || !userId) return; setOptimistic(key, value); pendingRef.current[group] = true; try { - await dispatcher(key, value); + await dispatcher(userId, key, value); } catch { clearOptimistic(getGroupKeys(key)); showErrorNotification({