<template> <Modal> <h2 class="box__title"> {{ $t('createViewModal.createNew', { view: viewType.getName().toLowerCase(), }) }} </h2> <Error :error="error"></Error> <component :is="viewType.getViewFormComponent()" ref="viewForm" :default-name="getDefaultName()" :database="database" :table="table" @submitted="submitted" > <div class="actions"> <div class="align-right"> <Button type="primary" size="large" :loading="loading" :disabled="loading" > {{ $t('createViewModal.add', { view: viewType.getName().toLowerCase(), }) }} </Button> </div> </div> </component> </Modal> </template> <script> import modal from '@baserow/modules/core/mixins/modal' import error from '@baserow/modules/core/mixins/error' import { getNextAvailableNameInSequence } from '@baserow/modules/core/utils/string' export default { name: 'CreateViewModal', mixins: [modal, error], props: { table: { type: Object, required: true, }, database: { type: Object, required: true, }, viewType: { type: Object, required: true, }, }, data() { return { loading: false, } }, methods: { getDefaultName() { const excludeNames = this.$store.getters['view/getAll'].map( (view) => view.name ) const baseName = this.viewType.getName() return getNextAvailableNameInSequence(baseName, excludeNames) }, async submitted(values) { this.loading = true this.hideError() try { const { view } = await this.$store.dispatch('view/create', { type: this.viewType.type, table: this.table, values, }) this.loading = false this.$emit('created', view) this.hide() } catch (error) { this.loading = false this.handleError(error, 'view') } }, }, } </script>