Mega recruitment pipeline overhaul
This commit is contained in:
@@ -1,24 +1,134 @@
|
||||
<template>
|
||||
<div class="min-h-screen flex items-center justify-center ">
|
||||
<div class="w-full max-w-2xl mx-auto p-8 text-center">
|
||||
<h1 class="text-4xl sm:text-5xl font-extrabold mb-4">
|
||||
welcome to the 17th
|
||||
</h1>
|
||||
<p class=" mb-8">
|
||||
Welcome — click below to get started.
|
||||
</p>
|
||||
<script setup lang="ts">
|
||||
import ApplicationForm from '@/components/application/ApplicationForm.vue';
|
||||
import Button from '@/components/ui/button/Button.vue';
|
||||
import {
|
||||
Stepper,
|
||||
StepperDescription,
|
||||
StepperIndicator,
|
||||
StepperItem,
|
||||
StepperSeparator,
|
||||
StepperTitle,
|
||||
StepperTrigger,
|
||||
} from '@/components/ui/stepper'
|
||||
import { useUserStore } from '@/stores/user';
|
||||
import { Check, Circle, Dot } from 'lucide-vue-next'
|
||||
import { computed } from 'vue';
|
||||
import Application from './Application.vue';
|
||||
|
||||
<Button class="w-44" @click="goToLogin">Get started</Button>
|
||||
function goToLogin() {
|
||||
const redirectUrl = encodeURIComponent(window.location.origin + '/join')
|
||||
window.location.href = `https://aj17thdevapi.nexuszone.net/login?redirect=${redirectUrl}`;
|
||||
}
|
||||
const steps = [
|
||||
{
|
||||
step: 1,
|
||||
title: 'Create account',
|
||||
description: 'Begin by setting up your account',
|
||||
},
|
||||
{
|
||||
step: 2,
|
||||
title: 'Submit application',
|
||||
description: 'Provide a few details about yourself',
|
||||
},
|
||||
{
|
||||
step: 3,
|
||||
title: 'Application review',
|
||||
description: 'Our team will review your submission',
|
||||
},
|
||||
{
|
||||
step: 4,
|
||||
title: 'Acceptance',
|
||||
description: 'Join the 17th and get started',
|
||||
},
|
||||
]
|
||||
|
||||
let userStore = useUserStore();
|
||||
const currentStep = computed<number>(() => {
|
||||
if (!userStore.isLoggedIn)
|
||||
return 1;
|
||||
switch (userStore.state) {
|
||||
case "guest":
|
||||
return 2;
|
||||
break;
|
||||
case "applicant":
|
||||
return 3;
|
||||
break;
|
||||
case "member":
|
||||
return 4;
|
||||
break;
|
||||
case "denied":
|
||||
return 4;
|
||||
break;
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex flex-col items-center mt-10 w-full">
|
||||
|
||||
<!-- Stepper Container -->
|
||||
<div class="w-full flex justify-center">
|
||||
<div class="w-full max-w-7xl">
|
||||
<Stepper class="flex w-full items-start gap-2" v-model="currentStep">
|
||||
<StepperItem v-for="step in steps" :key="step.step" v-slot="{ state }"
|
||||
class="relative flex w-full flex-col items-center" :step="step.step">
|
||||
<StepperSeparator v-if="step.step !== steps[steps.length - 1]?.step"
|
||||
class="absolute left-[calc(50%+20px)] right-[calc(-50%+10px)] top-5 block h-0.5 rounded-full bg-muted group-data-[state=completed]:bg-primary" />
|
||||
|
||||
<StepperTrigger as-child>
|
||||
<Button :variant="state === 'completed' || state === 'active' ? 'default' : 'outline'"
|
||||
size="icon" class="z-10 rounded-full shrink-0"
|
||||
:class="[state === 'active' && 'ring-2 ring-ring ring-offset-2 ring-offset-background']">
|
||||
<Check v-if="state === 'completed'" class="size-5" />
|
||||
<Circle v-if="state === 'active'" />
|
||||
<Dot v-if="state === 'inactive'" />
|
||||
</Button>
|
||||
</StepperTrigger>
|
||||
|
||||
<div class="mt-2 flex flex-col items-center text-center">
|
||||
<StepperTitle class="text-sm font-semibold transition lg:text-base"
|
||||
:class="[state === 'active' && 'text-primary']">
|
||||
{{ step.title }}
|
||||
</StepperTitle>
|
||||
|
||||
<StepperDescription
|
||||
class="sr-only text-xs text-muted-foreground transition md:not-sr-only lg:text-sm"
|
||||
:class="[state === 'active' && 'text-primary']">
|
||||
{{ step.description }}
|
||||
</StepperDescription>
|
||||
</div>
|
||||
</StepperItem>
|
||||
</Stepper>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="mt-12 mb-20 flex w-full justify-center">
|
||||
<div v-if="currentStep === 1" class="w-full max-w-2xl p-8">
|
||||
<h1 class="text-3xl sm:text-4xl font-bold mb-4 text-left">
|
||||
Create your account
|
||||
</h1>
|
||||
|
||||
<p class="text-left text-muted-foreground mb-6">
|
||||
You'll be redirected to our secure sign-in system to set up your account
|
||||
and begin your application.
|
||||
</p>
|
||||
|
||||
<Button class="px-6 py-3" @click="goToLogin">
|
||||
Continue to account creation
|
||||
</Button>
|
||||
</div>
|
||||
<Application v-else-if="currentStep === 2" @submit="userStore.loadUser()" :mode="'create'"></Application>
|
||||
<Application v-else-if="currentStep === 3" :mode="'view-self'"></Application>
|
||||
<div v-if="currentStep === 4" class="w-full max-w-2xl p-8">
|
||||
<h1 class="text-3xl sm:text-4xl font-bold mb-4 text-left">
|
||||
Welcome to the 17th Ranger Battalion
|
||||
</h1>
|
||||
|
||||
<p class="text-left text-muted-foreground mb-6">
|
||||
Yadda yadda here are your resources and stuff or something.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Button from '@/components/ui/button/Button.vue';
|
||||
|
||||
|
||||
function goToLogin() {
|
||||
window.location.href = 'https://aj17thdevapi.nexuszone.net/login';
|
||||
}
|
||||
|
||||
</script>
|
||||
Reference in New Issue
Block a user