feat: unify app ordering and simplify app settings access

This commit is contained in:
mesalogo
2026-09-18 15:29:00 +08:00
parent bbae893c45
commit ca3c919a34
26 changed files with 543 additions and 332 deletions
+16
View File
@@ -4,6 +4,8 @@ import { z } from 'zod'
import {
applicationSettingsSchema,
applicationSettingsUpdateSchema,
applicationNavigationSchema,
builtInApplicationIds,
defaultApplicationNavigation,
type ApplicationSettings
} from '../shared/application-settings-contracts'
@@ -144,6 +146,20 @@ const versionTenStoredApplicationSettingsSchema =
const storedApplicationSettingsSchema = applicationSettingsSchema
.extend({
// Stored partial orders are upgraded here; public settings writes remain strict.
applicationNavigation: applicationNavigationSchema.extend({
order: z.array(z.enum(builtInApplicationIds))
.refine(ids => new Set(ids).size === ids.length, 'Duplicate application')
.default([])
.transform(ids => [
...(['knowledge', 'heartbeat'] as const).filter(id => !ids.includes(id)),
...ids,
...defaultApplicationNavigation.order.filter(id => id !== 'knowledge' && id !== 'heartbeat' && !ids.includes(id))
]),
pinned: applicationNavigationSchema.shape.pinned.partial()
.default({})
.transform(pinned => ({ ...defaultApplicationNavigation.pinned, ...pinned }))
}).default(defaultApplicationNavigation),
version: z.literal(CURRENT_SETTINGS_VERSION),
lastSeenReleaseNotesVersion: releaseVersionSchema.nullable()
})