diff --git a/changelog.md b/changelog.md index 65594512b..deee53e83 100644 --- a/changelog.md +++ b/changelog.md @@ -24,6 +24,7 @@ instead. * Fixed error when the select row modal is closed immediately after opening. * Add footer aggregations to grid view +* Hide "Export view" button if there is no valid exporter available ## Released (2022-01-13 1.8.2) diff --git a/web-frontend/modules/database/components/export/ExportTableForm.vue b/web-frontend/modules/database/components/export/ExportTableForm.vue index 4bc46ed48..4af744caf 100644 --- a/web-frontend/modules/database/components/export/ExportTableForm.vue +++ b/web-frontend/modules/database/components/export/ExportTableForm.vue @@ -38,6 +38,7 @@ import { required } from 'vuelidate/lib/validators' import form from '@baserow/modules/core/mixins/form' +import viewTypeHasExporterTypes from '@baserow/modules/database/utils/viewTypeHasExporterTypes' import ExportTableDropdown from '@baserow/modules/database/components/export/ExportTableDropdown' import ExporterTypeChoices from '@baserow/modules/database/components/export/ExporterTypeChoices' @@ -79,7 +80,7 @@ export default { computed: { viewsWithExporterTypes() { return this.views.filter((view) => - this.viewTypeHasExporterTypes(view.type) + viewTypeHasExporterTypes(view.type, this.$registry) ) }, selectedView() { @@ -128,16 +129,5 @@ export default { exporter_type: { required }, }, }, - methods: { - viewTypeHasExporterTypes(viewType) { - const exporters = Object.values(this.$registry.getAll('exporter')) - for (let i = 0; i < exporters.length; i++) { - if (exporters[i].getSupportedViews().includes(viewType)) { - return true - } - } - return false - }, - }, } </script> diff --git a/web-frontend/modules/database/components/view/ViewContext.vue b/web-frontend/modules/database/components/view/ViewContext.vue index 02e525879..23f3d7d40 100644 --- a/web-frontend/modules/database/components/view/ViewContext.vue +++ b/web-frontend/modules/database/components/view/ViewContext.vue @@ -1,7 +1,7 @@ <template> <Context ref="context"> <ul class="context__menu"> - <li> + <li v-if="hasValidExporter"> <a @click="exportView()"> <i class="context__menu-icon fas fa-fw fa-file-export"></i> {{ $t('viewContext.exportView') }} @@ -34,6 +34,8 @@ <script> import context from '@baserow/modules/core/mixins/context' +import viewTypeHasExporterTypes from '@baserow/modules/database/utils/viewTypeHasExporterTypes' + import ExportTableModal from '@baserow/modules/database/components/export/ExportTableModal' import DeleteViewModal from './DeleteViewModal' import WebhookModal from '@baserow/modules/database/components/webhook/WebhookModal.vue' @@ -52,6 +54,11 @@ export default { required: true, }, }, + computed: { + hasValidExporter() { + return viewTypeHasExporterTypes(this.view.type, this.$registry) + }, + }, methods: { setLoading(view, value) { this.$store.dispatch('view/setItemLoading', { view, value }) diff --git a/web-frontend/modules/database/utils/viewTypeHasExporterTypes.js b/web-frontend/modules/database/utils/viewTypeHasExporterTypes.js new file mode 100644 index 000000000..580000a60 --- /dev/null +++ b/web-frontend/modules/database/utils/viewTypeHasExporterTypes.js @@ -0,0 +1,12 @@ +/** + * Check if the view of type viewType has at least a valid exporter. + */ +export default function (viewType, registry) { + const exporters = Object.values(registry.getAll('exporter')) + for (let i = 0; i < exporters.length; i++) { + if (exporters[i].getSupportedViews().includes(viewType)) { + return true + } + } + return false +}