Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions packages/app/src/context/settings.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { describe, expect, test } from "bun:test"
import {
hasExistingWebState,
isAppUpgrade,
layoutTransitionState,
maximumSunsetTimeout,
Expand All @@ -23,6 +24,12 @@ describe("layout transition", () => {
expect(layoutTransitionState(true, true, false, false)).toEqual({ available: true, notice: false })
})

test("classifies web profiles from existing settings or a recorded version", () => {
expect(hasExistingWebState("{}", undefined)).toBe(true)
expect(hasExistingWebState(null, "1.17.19")).toBe(true)
expect(hasExistingWebState(null, undefined)).toBe(false)
})

test("preserves explicit and default layout preferences", () => {
expect(resolveNewLayoutDesigns(false, false, true)).toBe(false)
expect(resolveNewLayoutDesigns(false, undefined, false)).toBe(false)
Expand Down
19 changes: 18 additions & 1 deletion packages/app/src/context/settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ export function shouldDisplayTabsToast(
return isAppUpgrade(previous, current) || (!previous && existingInstall)
}

export function hasExistingWebState(
settings: Promise<string> | string | null,
previousVersion: string | undefined,
) {
return settings !== null || previousVersion !== undefined
}

export function shouldEnableNewLayout(previous: string | undefined, current: string | undefined) {
if (!current) return false
const currentComparison = compareVersions(current, newLayoutDesignsUpgradeCutoff)
Expand Down Expand Up @@ -220,7 +227,7 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
gate: false,
init: () => {
const platform = usePlatform()
const [store, setStore, _, ready] = persisted("settings.v3", createStore<Settings>(defaultSettings))
const [store, setStore, settingsInit, ready] = persisted("settings.v3", createStore<Settings>(defaultSettings))
const [launch, setLaunch, , launchReady] = persisted(
"app-version.v1",
createStore<{ version?: string }>({ version: undefined }),
Expand Down Expand Up @@ -293,6 +300,16 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
setLaunch("version", platform.version)
})

createEffect(() => {
if (!ready() || !launchState.classified || platform.platform !== "web") return
if (layoutTransitionClassified()) return
setStore(
"general",
"layoutTransitionEligible",
hasExistingWebState(settingsInit, launchState.previous),
)
})

createEffect(() => {
if (!ready() || !launchState.classified || launchState.migrationApplied) return
if (layoutUpgrade() && store.general?.newLayoutDesigns !== true) {
Expand Down
Loading