schon/storefront/components/forms/new-password.vue

70 lines
No EOL
1.5 KiB
Vue

<template>
<form @submit.prevent="handleReset()" class="form">
<h2 class="form__title">{{ t('forms.newPassword.title') }}</h2>
<ui-input
:type="'password'"
:placeholder="t('fields.newPassword')"
:rules="[isPasswordValid]"
v-model="password"
/>
<ui-input
:type="'password'"
:placeholder="t('fields.confirmNewPassword')"
:rules="[compareStrings]"
v-model="confirmPassword"
/>
<ui-button
class="form__button"
:isDisabled="!isFormValid"
:isLoading="loading"
>
{{ t('buttons.save') }}
</ui-button>
</form>
</template>
<script setup>
import {useValidators} from "~/composables/rules/index.js";
import {useNewPassword} from "@/composables/auth";
const { t } = useI18n()
const { isPasswordValid } = useValidators()
const password = ref('')
const confirmPassword = ref('')
const compareStrings = (v) => {
if (v === password.value) return true
return t('errors.compare')
}
const isFormValid = computed(() => {
return (
isPasswordValid(password.value) === true &&
compareStrings(confirmPassword.value) === true
)
})
const { newPassword, loading } = useNewPassword();
async function handleReset() {
await newPassword(
password.value,
confirmPassword.value,
);
}
</script>
<style lang="scss" scoped>
.form {
display: flex;
flex-direction: column;
gap: 20px;
&__title {
font-size: 36px;
color: $accent;
}
}
</style>