Skip to content

Commit ff03382

Browse files
committed
fix: adapt connector settings
1 parent bc22580 commit ff03382

File tree

7 files changed

+63
-52
lines changed

7 files changed

+63
-52
lines changed

app/components/CollapsibleSection.vue

Lines changed: 7 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?.sidebar?.collapsed || []
2828
for (const id of collapsed) {
2929
if (!document.documentElement.dataset.collapsed?.split(' ').includes(id)) {
3030
document.documentElement.dataset.collapsed = (
@@ -47,16 +47,16 @@ 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.sidebar.collapsed.filter(c => c !== props.id)
5151
5252
if (isOpen.value) {
53-
sidebarPreferences.value.collapsed = removed
53+
userLocalSettings.value.sidebar.collapsed = removed
5454
} else {
5555
removed.push(props.id)
56-
sidebarPreferences.value.collapsed = removed
56+
userLocalSettings.value.sidebar.collapsed = removed
5757
}
5858
59-
document.documentElement.dataset.collapsed = sidebarPreferences.value.collapsed.join(' ')
59+
document.documentElement.dataset.collapsed = userLocalSettings.value.sidebar.collapsed.join(' ')
6060
}
6161
6262
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: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
interface UserLocalSettings {
2+
sidebar: {
3+
collapsed: string[]
4+
}
5+
connector: {
6+
autoOpenURL: boolean
7+
}
8+
}
9+
10+
const STORAGE_KEY = 'npmx-settings'
11+
const DEFAULT_USER_LOCAL_SETTINGS: UserLocalSettings = {
12+
sidebar: {
13+
collapsed: [],
14+
},
15+
connector: {
16+
autoOpenURL: false,
17+
},
18+
}
19+
20+
let userLocalSettingsRef: Ref<UserLocalSettings> | null = null
21+
22+
/**
23+
* Composable for managing local user settings.
24+
* Uses its own LS key.
25+
*
26+
* This is for settings that are purely local and don't need to be synced
27+
*/
28+
export function useUserLocalSettings() {
29+
if (!userLocalSettingsRef) {
30+
userLocalSettingsRef = useLocalStorage<UserLocalSettings>(
31+
STORAGE_KEY,
32+
DEFAULT_USER_LOCAL_SETTINGS,
33+
{
34+
mergeDefaults: true,
35+
},
36+
)
37+
}
38+
39+
return {
40+
userLocalSettings: userLocalSettingsRef,
41+
}
42+
}

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.sidebar?.collapsed?.join(' ') ?? ''
5656
})
5757
}

test/nuxt/components/HeaderConnectorModal.spec.ts

Lines changed: 7 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,21 @@ 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',
123-
connector: {
124-
autoOpenURL: false,
125-
},
115+
const mockUserLocalSettings = ref({
126116
sidebar: {
127117
collapsed: [],
128118
},
119+
connector: {
120+
autoOpenURL: false,
121+
},
129122
})
130123

131124
mockNuxtImport('useConnector', () => {
132125
return createMockUseConnector
133126
})
134127

135-
mockNuxtImport('useSettings', () => {
136-
return () => ({ settings: mockSettings })
128+
mockNuxtImport('useUserLocalSettings', () => {
129+
return () => ({ userLocalSettings: mockUserLocalSettings })
137130
})
138131

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

0 commit comments

Comments
 (0)