mirror of
https://gitlab.com/bramw/baserow.git
synced 2024-11-25 00:46:46 +00:00
119 lines
2.9 KiB
Vue
119 lines
2.9 KiB
Vue
<template>
|
|
<Modal :small="true">
|
|
<h2 class="box__title">{{ $t(titleText) }}</h2>
|
|
<Error :error="error"></Error>
|
|
<form @submit.prevent="setPassword">
|
|
<p class="box__description">{{ $t(descriptionText) }}</p>
|
|
<FormGroup :error="fieldHasErrors('password')">
|
|
<PasswordInput
|
|
v-model="values.password"
|
|
:validation-state="$v.values.password"
|
|
:show-password-icon="true"
|
|
:disabled="loading"
|
|
/>
|
|
</FormGroup>
|
|
<div class="actions">
|
|
<ul class="action__links">
|
|
<li>
|
|
<a :disabled="loading" @click.prevent="hide()">{{
|
|
$t('action.cancel')
|
|
}}</a>
|
|
</li>
|
|
</ul>
|
|
<Button
|
|
type="primary"
|
|
:loading="loading"
|
|
:disabled="loading || $v.$invalid"
|
|
>
|
|
{{ $t(saveText) }}
|
|
</Button>
|
|
</div>
|
|
</form>
|
|
</Modal>
|
|
</template>
|
|
|
|
<script>
|
|
import form from '@baserow/modules/core/mixins/form'
|
|
import modal from '@baserow/modules/core/mixins/modal'
|
|
import error from '@baserow/modules/core/mixins/error'
|
|
import { passwordValidation } from '@baserow/modules/core/validators'
|
|
import PasswordInput from '@baserow/modules/core/components/helpers/PasswordInput'
|
|
|
|
export default {
|
|
name: 'ShareViewPasswordModal',
|
|
components: { PasswordInput },
|
|
mixins: [form, modal, error],
|
|
props: {
|
|
view: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
loading: false,
|
|
allowedValues: ['password'],
|
|
values: {
|
|
password: '',
|
|
},
|
|
}
|
|
},
|
|
computed: {
|
|
change() {
|
|
return this.view.public_view_has_password
|
|
},
|
|
titleText() {
|
|
return this.change
|
|
? 'shareViewEnablePasswordModal.changePasswordTitle'
|
|
: 'shareViewEnablePasswordModal.newPasswordTitle'
|
|
},
|
|
descriptionText() {
|
|
return this.change
|
|
? 'shareViewEnablePasswordModal.changePasswordDescription'
|
|
: 'shareViewEnablePasswordModal.newPasswordDescription'
|
|
},
|
|
saveText() {
|
|
return this.change
|
|
? 'shareViewEnablePasswordModal.changePasswordSave'
|
|
: 'shareViewEnablePasswordModal.newPasswordSave'
|
|
},
|
|
},
|
|
methods: {
|
|
clearInput() {
|
|
this.values.password = ''
|
|
this.$v.$reset()
|
|
},
|
|
show() {
|
|
this.clearInput()
|
|
modal.methods.show.bind(this)()
|
|
this.$nextTick(() => {
|
|
this.$el.querySelector('input')?.focus()
|
|
})
|
|
},
|
|
async setPassword() {
|
|
this.hideError()
|
|
this.loading = true
|
|
|
|
const view = this.view
|
|
try {
|
|
await this.$store.dispatch('view/update', {
|
|
view,
|
|
values: { public_view_password: this.values.password },
|
|
})
|
|
|
|
this.hide()
|
|
} catch (error) {
|
|
this.handleError(error, 'table')
|
|
}
|
|
|
|
this.loading = false
|
|
},
|
|
},
|
|
validations: {
|
|
values: {
|
|
password: passwordValidation,
|
|
},
|
|
},
|
|
}
|
|
</script>
|