interface OrderColumnPreferences { visibleColumnKeys: string[] orderedColumnKeys: string[] } function storageKey(ownerId: string) { return `cc:client:first-leg:order-columns:${ownerId}` } export function readOrderColumnPreferences(ownerId: string, selectableKeys: string[], defaultVisibleKeys: string[]): OrderColumnPreferences { const defaults = { visibleColumnKeys: [...defaultVisibleKeys], orderedColumnKeys: [...selectableKeys] } if (!ownerId) return defaults try { const saved: unknown = JSON.parse(localStorage.getItem(storageKey(ownerId)) ?? 'null') if (!saved || typeof saved !== 'object') return defaults const preferences = saved as Partial if (!Array.isArray(preferences.visibleColumnKeys) || !Array.isArray(preferences.orderedColumnKeys)) return defaults const validKeys = (keys: unknown[]) => [...new Set(keys.filter((key): key is string => typeof key === 'string' && selectableKeys.includes(key)))] return { visibleColumnKeys: validKeys(preferences.visibleColumnKeys), orderedColumnKeys: [...new Set([...validKeys(preferences.orderedColumnKeys), ...selectableKeys])], } } catch { return defaults } } export function saveOrderColumnPreferences(ownerId: string, preferences: OrderColumnPreferences) { if (!ownerId) return try { localStorage.setItem(storageKey(ownerId), JSON.stringify(preferences)) } catch { // Column selection remains usable when browser storage is unavailable. } }