- useOnboarding.ts: prefer the backend over localStorage when checking onboarding completion. The old order (localStorage first) meant any browser that had ever onboarded a node would treat every new fresh node as already-onboarded and skip the wizard, dumping the user straight at the inline set-password form. Backend is now authoritative; localStorage stays as the offline fallback. - OnboardingWrapper.vue: skip the intro video on `/login` once `neode_onboarding_complete` is set. Returning logged-out users now get the static lock-screen background + glitch overlay instead of replaying the full intro on every logout. - RootRedirect.vue: when the health check fails, only show the full BootScreen if the node was never onboarded. For already-onboarded nodes (i.e. an OTA-update blip), keep the spinner and poll the health endpoint every 2s for up to 60s before falling back to the boot screen. Fixes the "fake boot loader" / "server starting up" screens flashing on every successful update. - loginTransition store: new `justCompletedOnboarding` flag distinct from `justLoggedIn`. Set true only by the inline setup-password flow (handleSetup). Dashboard.vue branches on it: full glitch+zoom reveal for the post-onboarding entry, quick zoom + welcome typing on every other login (no triple glitch flashes, ~1.2s vs 8s). - vite.config.ts: bump assets cache from `assets-cache-v2` to `assets-cache-v3` so service workers running the previous bundle invalidate their cache and pick up the new UI cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref } from 'vue'
|
|
|
|
/** Signals that we just logged in - Dashboard uses this for zoom + oomph */
|
|
export const useLoginTransitionStore = defineStore('loginTransition', () => {
|
|
const justLoggedIn = ref(false)
|
|
/**
|
|
* True only when the user just finished the onboarding wizard
|
|
* (first password setup), as distinct from a regular re-login.
|
|
* Dashboard uses this to decide whether to play the full glitchy
|
|
* reveal vs just a quick interface-draw.
|
|
*/
|
|
const justCompletedOnboarding = ref(false)
|
|
/** Show empty welcome block until typing starts (hide static text) */
|
|
const pendingWelcomeTyping = ref(false)
|
|
/** Trigger welcome typing on Home - set true after dashboard animation finishes */
|
|
const startWelcomeTyping = ref(false)
|
|
|
|
function setJustLoggedIn(value: boolean) {
|
|
justLoggedIn.value = value
|
|
}
|
|
|
|
function setJustCompletedOnboarding(value: boolean) {
|
|
justCompletedOnboarding.value = value
|
|
}
|
|
|
|
function setPendingWelcomeTyping(value: boolean) {
|
|
pendingWelcomeTyping.value = value
|
|
}
|
|
|
|
function setStartWelcomeTyping(value: boolean) {
|
|
startWelcomeTyping.value = value
|
|
}
|
|
|
|
return {
|
|
justLoggedIn,
|
|
setJustLoggedIn,
|
|
justCompletedOnboarding,
|
|
setJustCompletedOnboarding,
|
|
pendingWelcomeTyping,
|
|
setPendingWelcomeTyping,
|
|
startWelcomeTyping,
|
|
setStartWelcomeTyping,
|
|
}
|
|
})
|