feat: final state
This commit is contained in:
parent
625c0c3ed2
commit
012a0043b3
@ -9,31 +9,73 @@
|
|||||||
WELCOME: {
|
WELCOME: {
|
||||||
name: "Welcome",
|
name: "Welcome",
|
||||||
progress: 0,
|
progress: 0,
|
||||||
|
showback: false,
|
||||||
},
|
},
|
||||||
SIGNUP: {
|
SIGNUP: {
|
||||||
name: "Signup",
|
name: "Signup",
|
||||||
progress: 25,
|
progress: 25,
|
||||||
|
showback: true,
|
||||||
},
|
},
|
||||||
SIGNUP_MAIL: {
|
SIGNUP_MAIL: {
|
||||||
name: "Signup with Mail",
|
name: "Signup with Mail",
|
||||||
progress: 50,
|
progress: 50,
|
||||||
|
showback: true,
|
||||||
},
|
},
|
||||||
SIGNIN: {
|
SIGNIN: {
|
||||||
name: "Signin",
|
name: "Signin",
|
||||||
progress: 50,
|
progress: 50,
|
||||||
|
showback: true,
|
||||||
},
|
},
|
||||||
SIGNIN_BARCODE: {
|
SIGNIN_BARCODE: {
|
||||||
name: "Signin with Barcode",
|
name: "Signin with Barcode",
|
||||||
progress: 100,
|
progress: 100,
|
||||||
|
showback: false,
|
||||||
},
|
},
|
||||||
SIGNIN_MAIL: {
|
SIGNIN_MAIL: {
|
||||||
name: "Signin by Mail",
|
name: "Signin by Mail",
|
||||||
progress: 75,
|
progress: 75,
|
||||||
|
showback: true,
|
||||||
|
},
|
||||||
|
SIGNIN_MAIL_SUCCESS: {
|
||||||
|
name: "Signin by Mail Success",
|
||||||
|
progress: 100,
|
||||||
|
showback: false,
|
||||||
},
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
type StepType = (typeof Steps)[keyof typeof Steps];
|
type StepType = (typeof Steps)[keyof typeof Steps];
|
||||||
let currentStep = $state<StepType>(Steps.WELCOME);
|
let currentStep = $state<StepType>(Steps.WELCOME);
|
||||||
|
let email = $state<string>("");
|
||||||
|
let remainingseconds = $state<number>(5);
|
||||||
|
|
||||||
|
// Function to handle automatic return to welcome screen
|
||||||
|
function startCountdown() {
|
||||||
|
if (currentStep.progress === 100) {
|
||||||
|
remainingseconds = 10;
|
||||||
|
const timer = setInterval(() => {
|
||||||
|
remainingseconds -= 1;
|
||||||
|
if (remainingseconds <= 0) {
|
||||||
|
clearInterval(timer);
|
||||||
|
currentStep = Steps.WELCOME;
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
return timer;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
import { onDestroy } from 'svelte';
|
||||||
|
|
||||||
|
// Watch for changes to currentStep
|
||||||
|
$effect(() => {
|
||||||
|
if (currentStep.progress === 100) {
|
||||||
|
const timer = startCountdown();
|
||||||
|
// Cleanup when component is destroyed
|
||||||
|
onDestroy(() => {
|
||||||
|
if (timer) clearInterval(timer);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="pt-48">
|
<div class="pt-48">
|
||||||
@ -123,6 +165,7 @@
|
|||||||
id="email"
|
id="email"
|
||||||
type="email"
|
type="email"
|
||||||
placeholder="m@example.com"
|
placeholder="m@example.com"
|
||||||
|
bind:value={email}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -130,14 +173,17 @@
|
|||||||
<Button
|
<Button
|
||||||
class="w-full"
|
class="w-full"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
currentStep = Steps.SIGNIN_BARCODE;
|
console.log("Email: ", email);
|
||||||
}}>Next!</Button
|
currentStep = Steps.SIGNIN_MAIL_SUCCESS;
|
||||||
|
}}>Continue</Button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
{:else if currentStep.name == Steps.SIGNIN_MAIL_SUCCESS.name}
|
||||||
|
We found your email address, just walk up to the next available person and tell them your name.
|
||||||
{/if}
|
{/if}
|
||||||
</Card.Content>
|
</Card.Content>
|
||||||
<Card.Footer>
|
<Card.Footer class="grid gap-4">
|
||||||
{#if currentStep.name != Steps.WELCOME.name}
|
{#if currentStep.showback}
|
||||||
<Button
|
<Button
|
||||||
variant="destructive"
|
variant="destructive"
|
||||||
class="w-full"
|
class="w-full"
|
||||||
@ -164,6 +210,19 @@
|
|||||||
}}>Go Back</Button
|
}}>Go Back</Button
|
||||||
>
|
>
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if currentStep.progress == 100}
|
||||||
|
<Button
|
||||||
|
variant="default"
|
||||||
|
class="w-full"
|
||||||
|
on:click={() => {
|
||||||
|
currentStep=Steps.WELCOME;
|
||||||
|
}
|
||||||
|
}>Done</Button
|
||||||
|
>
|
||||||
|
<p class="text-center">
|
||||||
|
Returning to the home screen in {remainingseconds} seconds...
|
||||||
|
</p>
|
||||||
|
{/if}
|
||||||
</Card.Footer>
|
</Card.Footer>
|
||||||
</Card.Root>
|
</Card.Root>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user