<template> <div> <h2 class="box__title">{{ $t('integrationSettings.title') }}</h2> <div v-if="state === 'pending'" class="loading integration-settings__loading" /> <template v-if="state === 'loaded'"> <template v-if="integrations.length > 0"> <p class="margin-top-3"> {{ $t('integrationSettings.integrationMessage') }} </p> <div v-for="integration in integrations" :key="integration.id" class="integration_settings__integration" > <Presentation :image="getIntegrationType(integration).image" :title="integration.name" :subtitle="getIntegrationType(integration).getSummary(integration)" avatar-color="ghost" style="flex: 1" /> <div class="integration_settings__integration-actions"> <Button icon="edit" type="light" @click=" $refs[`IntegrationCreateEditModal_${integration.id}`][0].show() " /> <Button icon="trash-alt" type="light" @click="deleteIntegration(integration)" /> </div> <IntegrationCreateEditModal :ref="`IntegrationCreateEditModal_${integration.id}`" :data-integration-id="integration.id" :application="builder" :integration="integration" /> </div> </template> <p v-else class="margin-top-3"> {{ $t('integrationSettings.noIntegrationMessage') }} </p> </template> </div> </template> <script> import IntegrationCreateEditModal from '@baserow/modules/core/components/integrations/IntegrationCreateEditModal' import { mapActions, mapGetters } from 'vuex' import { notifyIf } from '@baserow/modules/core/utils/error' export default { name: 'IntegrationSettings', components: { IntegrationCreateEditModal }, props: { builder: { type: Object, required: true, }, }, data() { return { state: null } }, computed: { integrationTypes() { return this.$registry.getOrderedList('integration') }, ...mapGetters({ integrations: 'integration/getIntegrations' }), }, async mounted() { this.state = 'pending' try { await this.actionFetchIntegrations({ applicationId: this.builder.id }) } catch (error) { notifyIf(error) } this.state = 'loaded' }, methods: { ...mapActions({ actionFetchIntegrations: 'integration/fetch', actionDeleteIntegration: 'integration/delete', }), getIntegrationType(integration) { return this.$registry.get('integration', integration.type) }, async deleteIntegration(integration) { try { await this.actionDeleteIntegration({ integrationId: integration.id }) } catch (error) { notifyIf(error) } }, }, } </script>