@authduo/authduo
Version:
Free User-sovereign Authentication for the World
122 lines • 4.13 kB
JavaScript
import { shadowComponent, loading } from "@benev/slate";
import { manager } from "../../context.js";
import { Passport } from "../../../auth/passport.js";
import { EgressPage } from "../pages/egress/view.js";
import { IngressPage } from "../pages/ingress/view.js";
import { OnboardPage } from "../pages/onboard/view.js";
import { ListPage } from "../../views/pages/list/view.js";
import { EditPage } from "../../views/pages/edit/view.js";
import { CreatePage } from "../../views/pages/create/view.js";
import { DeletePage } from "../../views/pages/delete/view.js";
import stylesCss from "./styles.css.js";
import themeCss from "../../../common/theme.css.js";
export const AuthManager = shadowComponent(use => {
use.styles([themeCss, stylesCss]);
const { passportStore, storagePersistence, situationOp } = manager;
use.once(() => storagePersistence.check());
function gotoHome() {
if (passportStore.list().length === 0)
gotoOnboard();
else
gotoList();
}
function gotoList() {
situationOp.load(async () => ({
kind: "list",
passportStore,
onEdit: gotoEdit,
onCreate: gotoCreate,
onEgress: passports => gotoEgress(passports, gotoHome),
onIngress: () => gotoIngress(undefined, gotoHome),
}));
}
async function gotoOnboard() {
const passport = await Passport.generate();
situationOp.load(async () => ({
kind: "onboard",
passport,
onDone: gotoHome,
onIngress: () => gotoIngress(undefined, gotoHome),
onSaveNewPassport: passport => {
passportStore.add(passport);
storagePersistence.request();
},
}));
}
async function gotoCreate() {
const passport = await Passport.generate();
situationOp.load(async () => ({
kind: "create",
passport,
onCancel: gotoHome,
onComplete: passport => {
passportStore.add(passport);
storagePersistence.request();
gotoHome();
},
}));
}
function gotoEdit(passport) {
situationOp.load(async () => ({
kind: "edit",
passport,
onCancel: gotoHome,
onDelete: gotoDelete,
onComplete: passport => {
passportStore.add(passport);
storagePersistence.request();
gotoHome();
},
}));
}
function gotoDelete(passport) {
situationOp.load(async () => ({
kind: "delete",
passport,
onCancel: gotoHome,
onComplete: passport => {
passportStore.delete(passport);
storagePersistence.request();
gotoHome();
},
}));
}
function gotoEgress(passports, onBack) {
situationOp.load(async () => ({
kind: "egress",
passports,
onBack,
}));
}
function gotoIngress(passports, onBack) {
situationOp.load(async () => ({
kind: "ingress",
passports,
onBack,
onAddPassports: passports => passportStore.add(...passports),
}));
}
use.once(gotoHome);
const page = loading.braille(situationOp, situation => {
switch (situation.kind) {
case "list":
return ListPage([situation]);
case "onboard":
return OnboardPage([situation]);
case "create":
return CreatePage([situation]);
case "edit":
return EditPage([situation]);
case "delete":
return DeletePage([situation]);
case "egress":
return EgressPage([situation]);
case "ingress":
return IngressPage([situation]);
default:
throw new Error("unknown situation");
}
});
return page;
});
//# sourceMappingURL=element.js.map