<template> <ul v-if="!tableLoading" class="header__filter header__filter--full-width"> <li class="header__filter-item"> <a ref="customizeContextLink" class="header__filter-link" @click=" $refs.customizeContext.toggle( $refs.customizeContextLink, 'bottom', 'left', 4 ) " > <i class="header__filter-icon iconoir-settings"></i> <span class="header__filter-name">{{ $t('galleryViewHeader.customizeCards') }}</span> </a> <ViewFieldsContext ref="customizeContext" :database="database" :view="view" :fields="fields" :field-options="fieldOptions" :cover-image-field="view.card_cover_image_field" :allow-cover-image-field="true" @update-all-field-options="updateAllFieldOptions" @update-field-options-of-field="updateFieldOptionsOfField" @update-order="orderFieldOptions" @update-cover-image-field="updateCoverImageField" ></ViewFieldsContext> </li> <li class="header__filter-item header__filter-item--right"> <ViewSearch :view="view" :fields="fields" :store-prefix="storePrefix" :always-hide-rows-not-matching-search="true" @refresh="$emit('refresh', $event)" ></ViewSearch> </li> </ul> </template> <script> import { mapGetters, mapState } from 'vuex' import { notifyIf } from '@baserow/modules/core/utils/error' import ViewFieldsContext from '@baserow/modules/database/components/view/ViewFieldsContext' import ViewSearch from '@baserow/modules/database/components/view/ViewSearch' export default { name: 'GalleryViewHeader', components: { ViewFieldsContext, ViewSearch }, props: { database: { type: Object, required: true, }, table: { type: Object, required: true, }, view: { type: Object, required: true, }, fields: { type: Array, required: true, }, readOnly: { type: Boolean, required: true, }, storePrefix: { type: String, required: true, }, }, computed: { ...mapState({ tableLoading: (state) => state.table.loading, }), }, beforeCreate() { this.$options.computed = { ...(this.$options.computed || {}), ...mapGetters({ fieldOptions: this.$options.propsData.storePrefix + 'view/gallery/getAllFieldOptions', }), } }, methods: { async updateAllFieldOptions({ newFieldOptions, oldFieldOptions }) { try { await this.$store.dispatch( this.storePrefix + 'view/gallery/updateAllFieldOptions', { newFieldOptions, oldFieldOptions, readOnly: this.readOnly || !this.$hasPermission( 'database.table.view.update_field_options', this.view, this.database.workspace.id ), } ) } catch (error) { notifyIf(error, 'view') } }, async updateFieldOptionsOfField({ field, values, oldValues }) { try { await this.$store.dispatch( this.storePrefix + 'view/gallery/updateFieldOptionsOfField', { field, values, oldValues, readOnly: this.readOnly || !this.$hasPermission( 'database.table.view.update_field_options', this.view, this.database.workspace.id ), } ) } catch (error) { notifyIf(error, 'view') } }, async orderFieldOptions({ order }) { try { await this.$store.dispatch( this.storePrefix + 'view/gallery/updateFieldOptionsOrder', { order, readOnly: this.readOnly || !this.$hasPermission( 'database.table.view.update_field_options', this.view, this.database.workspace.id ), } ) } catch (error) { notifyIf(error, 'view') } }, async updateCoverImageField(value) { try { await this.$store.dispatch('view/update', { view: this.view, values: { card_cover_image_field: value }, readOnly: this.readOnly, }) } catch (error) { notifyIf(error, 'view') } }, }, } </script>