mirror of
https://github.com/hay-kot/mealie.git
synced 2025-07-12 16:14:02 -07:00
Some checks are pending
CodeQL / Analyze (push) Waiting to run
Docker Nightly Production / Backend Server Tests (push) Waiting to run
Docker Nightly Production / Frontend Tests (push) Waiting to run
Docker Nightly Production / Build Package (push) Waiting to run
Docker Nightly Production / Build Tagged Release (push) Blocked by required conditions
Docker Nightly Production / Notify Discord (push) Blocked by required conditions
Release Drafter / ✏️ Draft release (push) Waiting to run
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com> Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
87 lines
2.5 KiB
TypeScript
87 lines
2.5 KiB
TypeScript
import { useAsyncValidator } from "~/composables/use-validators";
|
|
import type { VForm } from "~/types/vuetify";
|
|
import { usePublicApi } from "~/composables/api/api-client";
|
|
|
|
const domAccountForm = ref<VForm | null>(null);
|
|
const username = ref("");
|
|
const fullName = ref("");
|
|
const email = ref("");
|
|
const password1 = ref("");
|
|
const password2 = ref("");
|
|
const advancedOptions = ref(false);
|
|
|
|
export const useUserRegistrationForm = () => {
|
|
const i18n = useI18n();
|
|
|
|
function safeValidate(form: Ref<VForm | null>) {
|
|
if (form.value && form.value.validate) {
|
|
return form.value.validate();
|
|
}
|
|
return false;
|
|
}
|
|
// ================================================================
|
|
// Provide Group Details
|
|
const publicApi = usePublicApi();
|
|
// ================================================================
|
|
// Provide Account Details
|
|
|
|
const usernameErrorMessages = ref<string[]>([]);
|
|
const { validate: validateUsername, valid: validUsername } = useAsyncValidator(
|
|
username,
|
|
(v: string) => publicApi.validators.username(v),
|
|
i18n.t("validation.username-is-taken"),
|
|
usernameErrorMessages,
|
|
);
|
|
const emailErrorMessages = ref<string[]>([]);
|
|
const { validate: validateEmail, valid: validEmail } = useAsyncValidator(
|
|
email,
|
|
(v: string) => publicApi.validators.email(v),
|
|
i18n.t("validation.email-is-taken"),
|
|
emailErrorMessages,
|
|
);
|
|
const accountDetails = {
|
|
username,
|
|
fullName,
|
|
email,
|
|
advancedOptions,
|
|
validate: async () => {
|
|
if (!(validUsername.value && validEmail.value)) {
|
|
await Promise.all([validateUsername(), validateEmail()]);
|
|
}
|
|
|
|
return (safeValidate(domAccountForm as Ref<VForm>) && validUsername.value && validEmail.value);
|
|
},
|
|
reset: () => {
|
|
accountDetails.username.value = "";
|
|
accountDetails.fullName.value = "";
|
|
accountDetails.email.value = "";
|
|
accountDetails.advancedOptions.value = false;
|
|
},
|
|
};
|
|
// ================================================================
|
|
// Provide Credentials
|
|
const passwordMatch = () => password1.value === password2.value || i18n.t("user.password-must-match");
|
|
const credentials = {
|
|
password1,
|
|
password2,
|
|
passwordMatch,
|
|
reset: () => {
|
|
credentials.password1.value = "";
|
|
credentials.password2.value = "";
|
|
},
|
|
};
|
|
|
|
return {
|
|
accountDetails,
|
|
credentials,
|
|
emailErrorMessages,
|
|
usernameErrorMessages,
|
|
// Fields
|
|
advancedOptions,
|
|
// Validators
|
|
validateUsername,
|
|
validateEmail,
|
|
// Dom Refs
|
|
domAccountForm,
|
|
};
|
|
};
|