优化
This commit is contained in:
@@ -21,6 +21,39 @@ describe('UI layout preferences', () => {
|
||||
.toEqual({ version: 1, order: ['actions', 'name'], hidden: ['name'] })
|
||||
})
|
||||
|
||||
it('hides newly introduced default-hidden fields without overriding existing visibility choices', () => {
|
||||
writeLayoutPreference('table', 'user-1', 'roles', {
|
||||
version: 1,
|
||||
order: ['actions', 'role', 'status'],
|
||||
hidden: ['status'],
|
||||
})
|
||||
|
||||
expect(readLayoutPreference(
|
||||
'table',
|
||||
'user-1',
|
||||
'roles',
|
||||
['actions', 'role', 'roleCode', 'status'],
|
||||
['roleCode', 'status'],
|
||||
)).toEqual({
|
||||
version: 1,
|
||||
order: ['actions', 'role', 'status', 'roleCode'],
|
||||
hidden: ['status', 'roleCode'],
|
||||
})
|
||||
|
||||
writeLayoutPreference('table', 'user-1', 'roles', {
|
||||
version: 1,
|
||||
order: ['actions', 'role', 'roleCode', 'status'],
|
||||
hidden: [],
|
||||
})
|
||||
expect(readLayoutPreference(
|
||||
'table',
|
||||
'user-1',
|
||||
'roles',
|
||||
['actions', 'role', 'roleCode', 'status'],
|
||||
['roleCode'],
|
||||
).hidden).toEqual([])
|
||||
})
|
||||
|
||||
it('keeps preferences isolated by user and removes them on reset', () => {
|
||||
writeLayoutPreference('query', 'user-1', 'orders', { version: 1, order: ['status', 'keyword'], hidden: [] })
|
||||
expect(readLayoutPreference('query', 'user-1', 'orders', ['keyword', 'status']).order).toEqual(['status', 'keyword'])
|
||||
@@ -30,4 +63,3 @@ describe('UI layout preferences', () => {
|
||||
expect(readLayoutPreference('query', 'user-1', 'orders', ['keyword', 'status']).order).toEqual(['keyword', 'status'])
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -47,10 +47,12 @@ export function readLayoutPreference(
|
||||
try {
|
||||
const parsed = JSON.parse(localStorage.getItem(preferenceStorageKey(kind, scope, preferenceKey)) || 'null') as Partial<LayoutPreferenceSnapshot> | null
|
||||
if (!parsed || parsed.version !== 1 || !Array.isArray(parsed.order) || !Array.isArray(parsed.hidden)) return fallback
|
||||
const storedKeys = new Set(uniqueKeys(parsed.order))
|
||||
const newlyDefaultHidden = uniqueKeys(defaultHidden).filter((key) => availableKeys.includes(key) && !storedKeys.has(key))
|
||||
return {
|
||||
version: 1,
|
||||
order: reconcileOrder(availableKeys, parsed.order),
|
||||
hidden: uniqueKeys(parsed.hidden).filter((key) => availableKeys.includes(key)),
|
||||
hidden: uniqueKeys([...parsed.hidden, ...newlyDefaultHidden]).filter((key) => availableKeys.includes(key)),
|
||||
}
|
||||
} catch {
|
||||
return fallback
|
||||
@@ -79,4 +81,3 @@ export function removeLayoutPreference(kind: LayoutPreferenceKind, scope: string
|
||||
// Ignore unavailable browser storage and keep the in-memory default layout.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user