merge newui branch
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
import PocketBase, { getTokenPayload } from "pocketbase";
|
||||
|
||||
export function pageConfirmVerification(route) {
|
||||
const token = route.params?.token || "";
|
||||
const tokenPayload = getTokenPayload(token);
|
||||
|
||||
if (!tokenPayload.email || !tokenPayload.collectionId) {
|
||||
app.toasts.error("Invalid or expired verification token.");
|
||||
window.location.hash = "#/";
|
||||
return;
|
||||
}
|
||||
|
||||
app.store.title = "Confirm verification";
|
||||
|
||||
const data = store({
|
||||
isConfirming: false,
|
||||
isConfirmSuccess: false,
|
||||
// ---
|
||||
isResending: false,
|
||||
isResendSuccess: false,
|
||||
});
|
||||
|
||||
confirm();
|
||||
|
||||
async function confirm() {
|
||||
if (data.isConfirming) {
|
||||
return;
|
||||
}
|
||||
|
||||
data.isConfirming = true;
|
||||
|
||||
// init a custom client to avoid interfering with the superuser state
|
||||
const client = new PocketBase(app.pb.baseURL);
|
||||
|
||||
try {
|
||||
await client.collection(tokenPayload.collectionId).confirmVerification(token);
|
||||
data.isConfirmSuccess = true;
|
||||
} catch (err) {
|
||||
data.isConfirmSuccess = false;
|
||||
}
|
||||
|
||||
data.isConfirming = false;
|
||||
}
|
||||
|
||||
async function resend() {
|
||||
if (data.isResending) {
|
||||
return;
|
||||
}
|
||||
|
||||
data.isResending = true;
|
||||
|
||||
// init a custom client to avoid interfering with the superuser state
|
||||
const client = new PocketBase(import.meta.env.PB_BACKEND_URL);
|
||||
|
||||
try {
|
||||
await client.collection(tokenPayload.collectionId).requestVerification(tokenPayload.email);
|
||||
data.isResendSuccess = true;
|
||||
} catch (err) {
|
||||
app.checkApiError(err);
|
||||
data.isResendSuccess = false;
|
||||
}
|
||||
|
||||
data.isResending = false;
|
||||
}
|
||||
|
||||
return t.div(
|
||||
{
|
||||
pbEvent: "pageConfirmVerification",
|
||||
className: "wrapper sm m-auto p-b-base",
|
||||
},
|
||||
t.header(
|
||||
{ className: "txt-center m-b-base" },
|
||||
t.img({ className: "main-logo", src: () => app.store.mainLogo, ariaHidden: true, alt: "App logo" }),
|
||||
t.h5({ className: "m-t-10" }, () => app.store.title),
|
||||
),
|
||||
() => {
|
||||
if (data.isConfirming) {
|
||||
return t.div({ className: "block txt-center" }, t.span({ className: "loader" }, "Please wait..."));
|
||||
}
|
||||
|
||||
if (data.isConfirmSuccess) {
|
||||
return t.div(
|
||||
{ pbEvent: "confirmVerificationSuccessAlert", className: "alert success txt-center" },
|
||||
t.p(null, "Successfully verified ", t.strong(null, tokenPayload.email), "."),
|
||||
);
|
||||
}
|
||||
|
||||
if (data.isResendSuccess) {
|
||||
return t.div(
|
||||
{ pbEvent: "confirmVerificationResendAlert", className: "alert success txt-center" },
|
||||
t.p(null, "Please check your email for the new verification link."),
|
||||
);
|
||||
}
|
||||
|
||||
return [
|
||||
t.div(
|
||||
{ pbEvent: "confirmVerificationErrorAlert", className: "alert danger txt-center m-b-base" },
|
||||
t.p(null, "Invalid or expired verification token."),
|
||||
),
|
||||
t.button(
|
||||
{
|
||||
type: "button",
|
||||
className: () => `btn transparent lg block ${data.isResending ? "loading" : ""}`,
|
||||
disabled: () => data.isResending,
|
||||
onclick: () => resend(),
|
||||
},
|
||||
t.span({ className: "txt" }, "Resend"),
|
||||
),
|
||||
];
|
||||
},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user