Skip to content

Commit 572862e

Browse files
committed
fix: adapt connector settings
1 parent 61e257a commit 572862e

7 files changed

Lines changed: 58 additions & 52 deletions

File tree

app/components/CollapsibleSection.vue

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ const props = withDefaults(defineProps<Props>(), {
1515
headingLevel: 'h2',
1616
})
1717
18-
const { sidebarPreferences } = usePackageSidebarPreferences()
18+
const { userLocalSettings } = useUserLocalSettings()
1919
2020
const buttonId = `${props.id}-collapsible-button`
2121
const contentId = `${props.id}-collapsible-content`
2222
2323
const isOpen = shallowRef(true)
2424
2525
onPrehydrate(() => {
26-
const sidebar = JSON.parse(localStorage.getItem('npmx-sidebar-preferences') || '{}')
27-
const collapsed: string[] = sidebar?.collapsed || []
26+
const sidebar = JSON.parse(localStorage.getItem('npmx-settings') || '{}')
27+
const collapsed: string[] = sidebar?.sidebarCollapsedSections || []
2828
for (const id of collapsed) {
2929
if (!document.documentElement.dataset.collapsed?.split(' ').includes(id)) {
3030
document.documentElement.dataset.collapsed = (
@@ -47,16 +47,17 @@ onMounted(() => {
4747
function toggle() {
4848
isOpen.value = !isOpen.value
4949
50-
const removed = sidebarPreferences.value.collapsed.filter(c => c !== props.id)
50+
const removed = userLocalSettings.value.sidebarCollapsedSections.filter(c => c !== props.id)
5151
5252
if (isOpen.value) {
53-
sidebarPreferences.value.collapsed = removed
53+
userLocalSettings.value.sidebarCollapsedSections = removed
5454
} else {
5555
removed.push(props.id)
56-
sidebarPreferences.value.collapsed = removed
56+
userLocalSettings.value.sidebarCollapsedSections = removed
5757
}
5858
59-
document.documentElement.dataset.collapsed = sidebarPreferences.value.collapsed.join(' ')
59+
document.documentElement.dataset.collapsed =
60+
userLocalSettings.value.sidebarCollapsedSections.join(' ')
6061
}
6162
6263
const ariaLabel = computed(() => {

app/components/Header/ConnectorModal.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
const { isConnected, isConnecting, npmUser, error, hasOperations, connect, disconnect } =
33
useConnector()
44
5-
const { settings } = useSettings()
5+
const { userLocalSettings } = useUserLocalSettings()
66
77
const tokenInput = shallowRef('')
88
const portInput = shallowRef('31415')
@@ -67,7 +67,7 @@ function handleDisconnect() {
6767
<div class="flex flex-col gap-2">
6868
<SettingsToggle
6969
:label="$t('connector.modal.auto_open_url')"
70-
v-model="settings.connector.autoOpenURL"
70+
v-model="userLocalSettings.connector.autoOpenURL"
7171
/>
7272
</div>
7373

@@ -201,7 +201,7 @@ function handleDisconnect() {
201201
<div class="flex flex-col gap-2">
202202
<SettingsToggle
203203
:label="$t('connector.modal.auto_open_url')"
204-
v-model="settings.connector.autoOpenURL"
204+
v-model="userLocalSettings.connector.autoOpenURL"
205205
/>
206206
</div>
207207
</div>

app/composables/useConnector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const STORAGE_KEY = 'npmx-connector'
5757
const DEFAULT_PORT = 31415
5858

5959
export const useConnector = createSharedComposable(function useConnector() {
60-
const { settings } = useSettings()
60+
const { userLocalSettings } = useUserLocalSettings()
6161

6262
// Persisted connection config
6363
const config = useState<{ token: string; port: number } | null>('connector-config', () => null)
@@ -308,7 +308,7 @@ export const useConnector = createSharedComposable(function useConnector() {
308308
body: {
309309
otp,
310310
interactive: !otp,
311-
openUrls: settings.value.connector.autoOpenURL,
311+
openUrls: userLocalSettings.value.connector.autoOpenURL,
312312
},
313313
})
314314
if (response?.success) {

app/composables/usePackageSidebarPreferences.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
interface UserLocalSettings {
2+
sidebarCollapsedSections: string[]
3+
connector: {
4+
autoOpenURL: boolean
5+
}
6+
}
7+
8+
const STORAGE_KEY = 'npmx-settings'
9+
const DEFAULT_USER_LOCAL_SETTINGS: UserLocalSettings = {
10+
sidebarCollapsedSections: [],
11+
connector: {
12+
autoOpenURL: false,
13+
},
14+
}
15+
16+
let userLocalSettingsRef: Ref<UserLocalSettings> | null = null
17+
18+
/**
19+
* Composable for managing local user settings.
20+
* Uses its own LS key.
21+
*
22+
* This is for settings that are purely local and don't need to be synced
23+
*/
24+
export function useUserLocalSettings() {
25+
if (!userLocalSettingsRef) {
26+
userLocalSettingsRef = useLocalStorage<UserLocalSettings>(
27+
STORAGE_KEY,
28+
DEFAULT_USER_LOCAL_SETTINGS,
29+
{
30+
mergeDefaults: true,
31+
},
32+
)
33+
}
34+
35+
return {
36+
userLocalSettings: userLocalSettingsRef,
37+
}
38+
}

app/utils/prehydrate.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export function initPreferencesOnPrehydrate() {
5151
document.documentElement.dataset.pm = pm
5252

5353
// Read sidebar preferences from separate localStorage key
54-
const sidebar = JSON.parse(localStorage.getItem('npmx-sidebar-preferences') || '{}')
55-
document.documentElement.dataset.collapsed = sidebar.collapsed?.join(' ') ?? ''
54+
const sidebar = JSON.parse(localStorage.getItem('npmx-settings') || '{}')
55+
document.documentElement.dataset.collapsed = sidebar.sidebarCollapsedSections?.join(' ') ?? ''
5656
})
5757
}

test/nuxt/components/HeaderConnectorModal.spec.ts

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ function resetMockState() {
101101
error: null,
102102
lastExecutionTime: null,
103103
}
104-
mockSettings.value.connector = {
104+
mockUserLocalSettings.value.connector = {
105105
autoOpenURL: false,
106106
}
107107
}
@@ -112,28 +112,19 @@ function simulateConnect() {
112112
mockState.value.avatar = 'https://example.com/avatar.png'
113113
}
114114

115-
const mockSettings = ref({
116-
relativeDates: false,
117-
includeTypesInInstall: true,
118-
accentColorId: null,
119-
hidePlatformPackages: true,
120-
selectedLocale: null,
121-
preferredBackgroundTheme: null,
122-
searchProvider: 'npm',
115+
const mockUserLocalSettings = ref({
116+
sidebarCollapsedSections: [],
123117
connector: {
124118
autoOpenURL: false,
125119
},
126-
sidebar: {
127-
collapsed: [],
128-
},
129120
})
130121

131122
mockNuxtImport('useConnector', () => {
132123
return createMockUseConnector
133124
})
134125

135-
mockNuxtImport('useSettings', () => {
136-
return () => ({ settings: mockSettings })
126+
mockNuxtImport('useUserLocalSettings', () => {
127+
return () => ({ userLocalSettings: mockUserLocalSettings })
137128
})
138129

139130
mockNuxtImport('useSelectedPackageManager', () => {

0 commit comments

Comments
 (0)