Files
mealie/frontend/pages/register/states.ts

67 lines
1.1 KiB
TypeScript
Raw Normal View History

import { reactive } from "@nuxtjs/composition-api";
export enum States {
Initial,
ProvideToken,
ProvideGroupDetails,
ProvideCredentials,
ProvideAccountDetails,
SelectGroupOptions,
Confirmation,
}
export enum RegistrationType {
Unknown,
JoinGroup,
CreateGroup,
InitialGroup,
}
interface Context {
state: States;
type: RegistrationType;
}
interface RegistrationContext {
ctx: Context;
setState(state: States): void;
setType(type: RegistrationType): void;
back(): void;
}
export function useRegistration(): RegistrationContext {
const context = reactive({
state: States.Initial,
type: RegistrationType.Unknown,
history: [
{
state: States.Initial,
},
],
});
function saveHistory() {
context.history.push({
state: context.state,
});
}
const back = () => {
const last = context.history.pop();
if (last) {
context.state = last.state;
}
};
const setState = (state: States) => {
saveHistory();
context.state = state;
};
const setType = (t: RegistrationType) => {
context.type = t;
};
return { ctx: context, setType, setState, back };
}