Files
pendaftaran/composables/auth/userAuth.ts
2024-12-27 16:46:43 +07:00

59 lines
1.5 KiB
TypeScript

// composables/auth/useLogin.ts
import {z, ZodError} from "zod";
import {computed} from "vue";
export default function useLogin() {
const data = reactive({
email: {
value: '',
error: ""
},
password: {
value: '',
error: ""
}
});
const status = ref<'idle' | 'loading' | 'success' | 'error'>('idle');
const error = ref<string | null>(null);
const validateEmail = () => {
const schema = z.string().email("Invalid email address");
try {
schema.parse(data.email.value);
data.email.error = "";
} catch (e: unknown) {
data.email.error = (e as ZodError).issues[0].message;
}
};
const validatePassword = () => {
const schema = z.string({message: "Password is required"})
.min(6, "Password must be at least 6 characters");
try {
schema.parse(data.password.value);
data.password.error = "";
} catch (e: unknown) {
data.password.error = (e as ZodError).issues[0].message;
}
};
const login = async () => {
console.log("Will Login");
}
const isFormValid = computed(() => {
return (
data.email.value !== "" &&
data.password.value !== "" &&
data.email.error === "" &&
data.password.error === ""
);
});
return {
data, login, status, error, validateEmail, validatePassword, isFormValid
}
}