Skip to content

Commit 7998e1b

Browse files
committed
fix: add search provider to user-preferences
1 parent 5d158e2 commit 7998e1b

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

app/composables/useUserPreferences.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
type AccentColorId,
55
type BackgroundThemeId,
66
type ColorModePreference,
7+
type SearchProvider,
78
} from '#shared/schemas/userPreferences'
89

910
/**
@@ -87,6 +88,32 @@ export function useBackgroundTheme() {
8788
}
8889
}
8990

91+
/**
92+
* Composable for managing the search provider preference.
93+
*/
94+
export function useSearchProvider() {
95+
const { preferences } = useUserPreferences()
96+
97+
const searchProvider = computed({
98+
get: () => preferences.value.searchProvider ?? 'algolia',
99+
set: (value: SearchProvider) => {
100+
preferences.value.searchProvider = value
101+
},
102+
})
103+
104+
const isAlgolia = computed(() => searchProvider.value === 'algolia')
105+
106+
function toggle() {
107+
searchProvider.value = searchProvider.value === 'npm' ? 'algolia' : 'npm'
108+
}
109+
110+
return {
111+
searchProvider,
112+
isAlgolia,
113+
toggle,
114+
}
115+
}
116+
90117
/**
91118
* Composable for syncing color mode preference.
92119
* Keeps the user preference in sync with @nuxtjs/color-mode's own LS key (`npmx-color-mode`)

shared/schemas/userPreferences.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ const BackgroundThemeIdSchema = picklist(Object.keys(BACKGROUND_THEMES) as [stri
77

88
const ColorModePreferenceSchema = picklist(['light', 'dark', 'system'])
99

10+
const SearchProviderSchema = picklist(['npm', 'algolia'])
11+
1012
export const UserPreferencesSchema = object({
1113
/** Display dates as relative (e.g., "3 days ago") instead of absolute */
1214
relativeDates: optional(boolean()),
@@ -22,6 +24,8 @@ export const UserPreferencesSchema = object({
2224
selectedLocale: optional(nullable(string())),
2325
/** Color mode preference: 'light', 'dark', or 'system' */
2426
colorModePreference: optional(nullable(ColorModePreferenceSchema)),
27+
/** Search provider for package search: 'npm' or 'algolia' */
28+
searchProvider: optional(SearchProviderSchema),
2529
/** Timestamp of last update (ISO 8601) - managed by server */
2630
updatedAt: optional(string()),
2731
})
@@ -31,6 +35,7 @@ export type UserPreferences = InferOutput<typeof UserPreferencesSchema>
3135
export type AccentColorId = keyof typeof ACCENT_COLORS.light
3236
export type BackgroundThemeId = keyof typeof BACKGROUND_THEMES
3337
export type ColorModePreference = 'light' | 'dark' | 'system'
38+
export type SearchProvider = 'npm' | 'algolia'
3439

3540
/**
3641
* Default user preferences.
@@ -44,6 +49,7 @@ export const DEFAULT_USER_PREFERENCES: Required<Omit<UserPreferences, 'updatedAt
4449
hidePlatformPackages: true,
4550
selectedLocale: null,
4651
colorModePreference: null,
52+
searchProvider: 'algolia',
4753
}
4854

4955
export const USER_PREFERENCES_STORAGE_BASE = 'npmx-kv-user-preferences'

0 commit comments

Comments
 (0)