Compare commits
3 Commits
625c0c3ed2
...
2aa8c4178a
Author | SHA1 | Date | |
---|---|---|---|
2aa8c4178a | |||
52b8db4a5a | |||
012a0043b3 |
@ -13,17 +13,12 @@
|
|||||||
<Card.Header>
|
<Card.Header>
|
||||||
<Card.Title class="text-2xl">Login</Card.Title>
|
<Card.Title class="text-2xl">Login</Card.Title>
|
||||||
<Card.Description
|
<Card.Description
|
||||||
>Please enter credentials for an account that is allowed to create
|
>Please enter kiosk credentials.</Card.Description
|
||||||
runners and their selfservice links.</Card.Description
|
|
||||||
>
|
>
|
||||||
</Card.Header>
|
</Card.Header>
|
||||||
<Card.Content class="grid gap-4">
|
<Card.Content class="grid gap-4">
|
||||||
<div class="grid gap-2">
|
<div class="grid gap-2">
|
||||||
<Label for="email">Email</Label>
|
<Label for="password">Token</Label>
|
||||||
<Input id="email" type="email" placeholder="m@example.com" required />
|
|
||||||
</div>
|
|
||||||
<div class="grid gap-2">
|
|
||||||
<Label for="password">Password</Label>
|
|
||||||
<Input id="password" type="password" required />
|
<Input id="password" type="password" required />
|
||||||
</div>
|
</div>
|
||||||
</Card.Content>
|
</Card.Content>
|
||||||
|
@ -9,31 +9,83 @@
|
|||||||
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,
|
||||||
|
},
|
||||||
|
SIGNUP_MAIL_ACCEPT: {
|
||||||
|
name: "Accept terms",
|
||||||
|
progress: 75,
|
||||||
|
showback: true,
|
||||||
|
},
|
||||||
|
SIGNUP_SUCCESS: {
|
||||||
|
name: "Done",
|
||||||
|
progress: 100,
|
||||||
|
showback: false,
|
||||||
},
|
},
|
||||||
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">
|
||||||
@ -94,6 +146,27 @@
|
|||||||
>
|
>
|
||||||
<Input id="email" type="email" placeholder="m@example.com" />
|
<Input id="email" type="email" placeholder="m@example.com" />
|
||||||
</div>
|
</div>
|
||||||
|
<Button
|
||||||
|
variant="default"
|
||||||
|
class="w-full"
|
||||||
|
on:click={() => {
|
||||||
|
currentStep = Steps.SIGNUP_MAIL_ACCEPT;
|
||||||
|
}}>Continue</Button
|
||||||
|
>
|
||||||
|
{:else if currentStep.name == Steps.SIGNUP_MAIL_ACCEPT.name}
|
||||||
|
<Button
|
||||||
|
variant="default"
|
||||||
|
class="w-full"
|
||||||
|
on:click={() => {
|
||||||
|
currentStep = Steps.SIGNUP_SUCCESS;
|
||||||
|
}}>Continue</Button
|
||||||
|
>
|
||||||
|
{:else if currentStep.name == Steps.SIGNUP_SUCCESS.name}
|
||||||
|
<p class="text-center">
|
||||||
|
Alright that's it, just walk up to the next available person and tell them your name.<br>
|
||||||
|
You can scan this qr code to login to our selfservice.
|
||||||
|
</p>
|
||||||
|
TODO:
|
||||||
{:else if currentStep.name == Steps.SIGNIN.name}
|
{:else if currentStep.name == Steps.SIGNIN.name}
|
||||||
<div class="grid gap-2">
|
<div class="grid gap-2">
|
||||||
<Button
|
<Button
|
||||||
@ -123,6 +196,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 +204,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 +241,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