Skip to content

Commit bc22580

Browse files
committed
fix: add search provider to user-preferences
1 parent b6638be commit bc22580

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

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`)

app/pages/settings.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ const setLocale: typeof setNuxti18nLocale = locale => {
203203
{ label: $t('settings.data_source.npm'), value: 'npm' },
204204
{ label: $t('settings.data_source.algolia'), value: 'algolia' },
205205
]"
206-
v-model="settings.searchProvider"
206+
v-model="preferences.searchProvider"
207207
block
208208
size="sm"
209209
class="max-w-48"
@@ -223,15 +223,15 @@ const setLocale: typeof setNuxti18nLocale = locale => {
223223
<!-- Provider description -->
224224
<p class="text-xs text-fg-subtle mt-2">
225225
{{
226-
settings.searchProvider === 'algolia'
226+
preferences.searchProvider === 'algolia'
227227
? $t('settings.data_source.algolia_description')
228228
: $t('settings.data_source.npm_description')
229229
}}
230230
</p>
231231

232232
<!-- Algolia attribution -->
233233
<a
234-
v-if="settings.searchProvider === 'algolia'"
234+
v-if="preferences.searchProvider === 'algolia'"
235235
href="https://www.algolia.com/developers"
236236
target="_blank"
237237
rel="noopener noreferrer"

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)