mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2026-04-03 08:05:37 +00:00
110 lines
2.9 KiB
Vue
110 lines
2.9 KiB
Vue
<template>
|
|
<form @submit.prevent="onSubmit" novalidate>
|
|
<ocelot-input
|
|
v-if="requireOldPassword"
|
|
id="oldPassword"
|
|
model="oldPassword"
|
|
type="password"
|
|
autocomplete="off"
|
|
:label="$t('settings.security.change-password.label-old-password')"
|
|
/>
|
|
<ocelot-input
|
|
id="password"
|
|
model="password"
|
|
type="password"
|
|
autocomplete="off"
|
|
:label="$t('settings.security.change-password.label-new-password')"
|
|
/>
|
|
<ocelot-input
|
|
id="passwordConfirmation"
|
|
model="passwordConfirmation"
|
|
type="password"
|
|
autocomplete="off"
|
|
:label="$t('settings.security.change-password.label-new-password-confirm')"
|
|
/>
|
|
<password-strength :password="formData.password" />
|
|
<div class="ds-mt-base ds-mb-large">
|
|
<os-button
|
|
variant="primary"
|
|
appearance="filled"
|
|
:loading="loading"
|
|
:disabled="!!formErrors"
|
|
type="submit"
|
|
>
|
|
<template #icon>
|
|
<os-icon :icon="icons.lock" />
|
|
</template>
|
|
{{ $t('settings.security.change-password.button') }}
|
|
</os-button>
|
|
</div>
|
|
</form>
|
|
</template>
|
|
|
|
<script>
|
|
import { OsButton, OsIcon } from '@ocelot-social/ui'
|
|
import { iconRegistry } from '~/utils/iconRegistry'
|
|
import PasswordStrength from './Strength'
|
|
import PasswordForm from '~/components/utils/PasswordFormHelper'
|
|
import formValidation from '~/mixins/formValidation'
|
|
import OcelotInput from '~/components/OcelotInput/OcelotInput.vue'
|
|
|
|
export default {
|
|
name: 'PasswordForm',
|
|
mixins: [formValidation],
|
|
components: {
|
|
OsButton,
|
|
OsIcon,
|
|
PasswordStrength,
|
|
OcelotInput,
|
|
},
|
|
props: {
|
|
/** Require old password field (for authenticated password change) */
|
|
requireOldPassword: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
},
|
|
created() {
|
|
this.icons = iconRegistry
|
|
},
|
|
data() {
|
|
const passwordForm = PasswordForm({ translate: this.$t })
|
|
const formData = { ...passwordForm.formData }
|
|
const formSchema = { ...passwordForm.formSchema }
|
|
if (this.requireOldPassword) {
|
|
formData.oldPassword = ''
|
|
formSchema.oldPassword = {
|
|
type: 'string',
|
|
required: true,
|
|
message: this.$t('settings.security.change-password.message-old-password-required'),
|
|
}
|
|
}
|
|
return {
|
|
formData,
|
|
formSchema,
|
|
loading: false,
|
|
}
|
|
},
|
|
methods: {
|
|
onSubmit() {
|
|
this.formSubmit(this.handleSubmit)
|
|
},
|
|
handleSubmit() {
|
|
this.loading = true
|
|
this.$emit('submit', { ...this.formData })
|
|
},
|
|
/** Called by parent after mutation completes */
|
|
done() {
|
|
this.loading = false
|
|
const resetData = { password: '', passwordConfirmation: '' }
|
|
if (this.requireOldPassword) resetData.oldPassword = ''
|
|
this.formData = resetData
|
|
},
|
|
/** Called by parent on mutation error */
|
|
fail() {
|
|
this.loading = false
|
|
},
|
|
},
|
|
}
|
|
</script>
|