<template> <Modal left-sidebar left-sidebar-scrollable :content-padding=" settingSelected == null ? true : settingSelected.componentPadding " > <template #sidebar> <div class="modal-sidebar__head"> <div class="modal-sidebar__head-name"> {{ $t('builderSettingsModal.title') }} </div> </div> <ul class="modal-sidebar__nav"> <li v-for="setting in registeredSettings" :key="setting.getType()"> <a class="modal-sidebar__nav-link" :class="{ active: setting === settingSelected }" @click="settingSelected = setting" > <i class="modal-sidebar__nav-icon" :class="setting.icon"></i> {{ setting.name }} </a> </li> </ul> </template> <template v-if="settingSelected" #content> <component :is="settingSelected.component" ref="settingSelected" :builder="builder" :hide-after-create="hideAfterCreate" :force-display-form="displaySelectedSettingForm" @hide-modal="hide()" ></component> </template> </Modal> </template> <script> import modal from '@baserow/modules/core/mixins/modal' import { BuilderApplicationType } from '@baserow/modules/builder/applicationTypes' export default { name: 'BuilderSettingsModal', mixins: [modal], props: { builder: { type: Object, required: true, }, /** * If you want the selected setting form to hide the builder settings modal * after a record is created, set this to `true`. */ hideAfterCreate: { type: Boolean, required: false, default: false, }, }, data() { return { settingSelected: null, displaySelectedSettingForm: false, } }, computed: { registeredSettings() { return this.$registry.getOrderedList('builderSettings') }, }, watch: { // When the selected setting changes, and we've forcibly displayed // the selected setting's form, then reset the display flag so that // the next setting doesn't immediately display its form. settingSelected(newSetting, oldSetting) { if ( oldSetting && newSetting !== oldSetting && this.displaySelectedSettingForm ) { this.displaySelectedSettingForm = false } }, }, methods: { show( selectSettingType = null, displaySelectedSettingForm = false, ...args ) { // If we've been instructed to show a specific setting component, // then ensure it's displayed first. if (selectSettingType) { this.settingSelected = this.$registry.get( 'builderSettings', selectSettingType ) } // If no `selectSettingType` was provided then choose the first setting. if (!this.settingSelected) { this.settingSelected = this.registeredSettings[0] } // If we've been instructed to show the modal, and make the // selected setting component's form display, then do so. this.displaySelectedSettingForm = displaySelectedSettingForm const builderApplicationType = this.$registry.get( 'application', BuilderApplicationType.getType() ) builderApplicationType.loadExtraData(this.builder) return modal.methods.show.call(this, ...args) }, }, } </script>