Skip to content

Commit e799ed9

Browse files
committed
fix: adapt connector settings
1 parent 9beb2bb commit e799ed9

File tree

7 files changed

+61
-55
lines changed

7 files changed

+61
-55
lines changed

app/components/CollapsibleSection.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ const props = withDefaults(defineProps<Props>(), {
1616
headingLevel: 'h2',
1717
})
1818
19-
const { sidebarPreferences } = usePackageSidebarPreferences()
19+
const { userLocalSettings } = useUserLocalSettings()
2020
2121
const buttonId = `${props.id}-collapsible-button`
2222
const contentId = `${props.id}-collapsible-content`
2323
2424
const isOpen = shallowRef(true)
2525
2626
onPrehydrate(() => {
27-
const sidebar = JSON.parse(localStorage.getItem('npmx-sidebar-preferences') || '{}')
28-
const collapsed: string[] = sidebar?.collapsed || []
27+
const sidebar = JSON.parse(localStorage.getItem('npmx-settings') || '{}')
28+
const collapsed: string[] = sidebar?.sidebar?.collapsed || []
2929
for (const id of collapsed) {
3030
if (!document.documentElement.dataset.collapsed?.split(' ').includes(id)) {
3131
document.documentElement.dataset.collapsed = (
@@ -48,16 +48,16 @@ onMounted(() => {
4848
function toggle() {
4949
isOpen.value = !isOpen.value
5050
51-
const removed = sidebarPreferences.value.collapsed.filter(c => c !== props.id)
51+
const removed = userLocalSettings.value.sidebar.collapsed.filter(c => c !== props.id)
5252
5353
if (isOpen.value) {
54-
sidebarPreferences.value.collapsed = removed
54+
userLocalSettings.value.sidebar.collapsed = removed
5555
} else {
5656
removed.push(props.id)
57-
sidebarPreferences.value.collapsed = removed
57+
userLocalSettings.value.sidebar.collapsed = removed
5858
}
5959
60-
document.documentElement.dataset.collapsed = sidebarPreferences.value.collapsed.join(' ')
60+
document.documentElement.dataset.collapsed = userLocalSettings.value.sidebar.collapsed.join(' ')
6161
}
6262
6363
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')
@@ -68,7 +68,7 @@ const executeNpmxConnectorCommand = computed(() => {
6868
<div class="flex flex-col gap-2">
6969
<SettingsToggle
7070
:label="$t('connector.modal.auto_open_url')"
71-
v-model="settings.connector.autoOpenURL"
71+
v-model="userLocalSettings.connector.autoOpenURL"
7272
/>
7373
</div>
7474

@@ -157,7 +157,7 @@ const executeNpmxConnectorCommand = computed(() => {
157157
<div class="flex flex-col gap-2">
158158
<SettingsToggle
159159
:label="$t('connector.modal.auto_open_url')"
160-
v-model="settings.connector.autoOpenURL"
160+
v-model="userLocalSettings.connector.autoOpenURL"
161161
/>
162162
</div>
163163
</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: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,5 @@ export function initPreferencesOnPrehydrate() {
6161
// Read sidebar preferences from separate localStorage key
6262
const sidebar = JSON.parse(localStorage.getItem('npmx-sidebar-preferences') || '{}')
6363
document.documentElement.dataset.collapsed = sidebar.collapsed?.join(' ') ?? ''
64-
65-
// Keyboard shortcuts (default: true)
66-
if (preferences.keyboardShortcuts === false) {
67-
document.documentElement.dataset.kbdShortcuts = 'false'
68-
}
6964
})
7065
}

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)