From f087461abcfe0ac529f0d203157394d07529d77a Mon Sep 17 00:00:00 2001 From: Pranav Date: Thu, 29 Aug 2024 20:29:27 +0530 Subject: [PATCH 1/2] feat: Update the design for the webhook management page (#10050) --- .../dashboard/components/widgets/ShowMore.vue | 68 ++++------ .../dashboard/helper/featureHelper.js | 1 + .../i18n/locale/en/integrations.json | 1 + .../settings/attributes/CustomAttribute.vue | 2 +- .../settings/integrations/Webhooks/Index.vue | 126 +++++++++--------- .../integrations/Webhooks/WebhookForm.vue | 14 +- .../integrations/Webhooks/WebhookRow.vue | 81 ++++++----- .../Webhooks/specs/webhookHelper.spec.js | 9 ++ .../Webhooks/specs/webhookMixin.spec.js | 26 ---- .../integrations/Webhooks/webhookHelper.js | 4 + .../integrations/Webhooks/webhookMixin.js | 10 -- .../integrations/integrations.routes.js | 16 +-- 12 files changed, 157 insertions(+), 201 deletions(-) create mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookHelper.spec.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookMixin.spec.js create mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookHelper.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookMixin.js diff --git a/app/javascript/dashboard/components/widgets/ShowMore.vue b/app/javascript/dashboard/components/widgets/ShowMore.vue index c17c32e2a..37e2f9a68 100644 --- a/app/javascript/dashboard/components/widgets/ShowMore.vue +++ b/app/javascript/dashboard/components/widgets/ShowMore.vue @@ -1,38 +1,34 @@ - @@ -41,16 +37,10 @@ export default { {{ textToBeDisplayed }} - - diff --git a/app/javascript/dashboard/helper/featureHelper.js b/app/javascript/dashboard/helper/featureHelper.js index b4d131ce4..529c0a44e 100644 --- a/app/javascript/dashboard/helper/featureHelper.js +++ b/app/javascript/dashboard/helper/featureHelper.js @@ -17,6 +17,7 @@ const FEATURE_HELP_URLS = { reports: 'https://chwt.app/hc/reports', sla: 'https://chwt.app/hc/sla', team_management: 'https://chwt.app/hc/teams', + webhook: 'https://chwt.app/hc/webhooks', }; export function getHelpUrlForFeature(featureName) { diff --git a/app/javascript/dashboard/i18n/locale/en/integrations.json b/app/javascript/dashboard/i18n/locale/en/integrations.json index 47349d1b1..f478b71b4 100644 --- a/app/javascript/dashboard/i18n/locale/en/integrations.json +++ b/app/javascript/dashboard/i18n/locale/en/integrations.json @@ -12,6 +12,7 @@ }, "WEBHOOK": { "SUBSCRIBED_EVENTS": "Subscribed Events", + "LEARN_MORE": "Learn more about webhooks", "FORM": { "CANCEL": "Cancel", "DESC": "Webhook events provide you the realtime information about what's happening in your Chatwoot account. Please enter a valid URL to configure a callback.", diff --git a/app/javascript/dashboard/routes/dashboard/settings/attributes/CustomAttribute.vue b/app/javascript/dashboard/routes/dashboard/settings/attributes/CustomAttribute.vue index e5e85cdd1..9e55c619d 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/attributes/CustomAttribute.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/attributes/CustomAttribute.vue @@ -2,7 +2,7 @@ import { useAlert } from 'dashboard/composables'; import EditAttribute from './EditAttribute.vue'; import { useStoreGetters, useStore } from 'dashboard/composables/store'; -import { computed, onMounted, ref } from 'vue'; +import { computed, ref } from 'vue'; import { useI18n } from 'dashboard/composables/useI18n'; const props = defineProps({ attributeModel: { diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/Index.vue index e9ec855dc..23d0baa9c 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/Index.vue @@ -3,16 +3,18 @@ import { mapGetters } from 'vuex'; import { useAlert } from 'dashboard/composables'; import NewWebhook from './NewWebHook.vue'; import EditWebhook from './EditWebHook.vue'; -import globalConfigMixin from 'shared/mixins/globalConfigMixin'; import WebhookRow from './WebhookRow.vue'; +import BaseSettingsHeader from '../../components/BaseSettingsHeader.vue'; +import SettingsLayout from '../../SettingsLayout.vue'; export default { components: { + SettingsLayout, + BaseSettingsHeader, NewWebhook, EditWebhook, WebhookRow, }, - mixins: [globalConfigMixin], data() { return { loading: {}, @@ -26,8 +28,10 @@ export default { ...mapGetters({ records: 'webhooks/getWebhooks', uiFlags: 'webhooks/getUIFlags', - globalConfig: 'globalConfig/get', }), + integration() { + return this.$store.getters['integrations/getIntegration']('webhook'); + }, }, mounted() { this.$store.dispatch('webhooks/get'); @@ -75,69 +79,59 @@ export default { diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookForm.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookForm.vue index d399adbdd..f5fbc6a3d 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookForm.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookForm.vue @@ -1,8 +1,8 @@ @@ -105,10 +105,10 @@ export default { type="checkbox" :value="event" name="subscriptions" - class="checkbox" + class="mr-2" /> @@ -129,9 +129,3 @@ export default { - - diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookRow.vue b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookRow.vue index 20e6d6c1a..447913ecb 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookRow.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookRow.vue @@ -1,59 +1,58 @@ - diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookHelper.spec.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookHelper.spec.js new file mode 100644 index 000000000..9bde34063 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookHelper.spec.js @@ -0,0 +1,9 @@ +import { getEventNamei18n } from '../webhookHelper'; + +describe('#getEventNamei18n', () => { + it('returns correct i18n translation text', () => { + expect(getEventNamei18n('message_created')).toEqual( + `INTEGRATION_SETTINGS.WEBHOOK.FORM.SUBSCRIPTIONS.EVENTS.MESSAGE_CREATED` + ); + }); +}); diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookMixin.spec.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookMixin.spec.js deleted file mode 100644 index c617b64b0..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/specs/webhookMixin.spec.js +++ /dev/null @@ -1,26 +0,0 @@ -import { createWrapper } from '@vue/test-utils'; -import webhookMixin from '../webhookMixin'; -import Vue from 'vue'; - -describe('webhookMixin', () => { - describe('#getEventLabel', () => { - it('returns correct i18n translation:', () => { - const Component = { - render() {}, - title: 'WebhookComponent', - mixins: [webhookMixin], - methods: { - $t(text) { - return text; - }, - }, - }; - const Constructor = Vue.extend(Component); - const vm = new Constructor().$mount(); - const wrapper = createWrapper(vm); - expect(wrapper.vm.getEventLabel('message_created')).toEqual( - `INTEGRATION_SETTINGS.WEBHOOK.FORM.SUBSCRIPTIONS.EVENTS.MESSAGE_CREATED` - ); - }); - }); -}); diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookHelper.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookHelper.js new file mode 100644 index 000000000..699dafdc8 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookHelper.js @@ -0,0 +1,4 @@ +export const getEventNamei18n = event => { + const eventName = event.toUpperCase(); + return `INTEGRATION_SETTINGS.WEBHOOK.FORM.SUBSCRIPTIONS.EVENTS.${eventName}`; +}; diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookMixin.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookMixin.js deleted file mode 100644 index 38283fe90..000000000 --- a/app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/webhookMixin.js +++ /dev/null @@ -1,10 +0,0 @@ -export default { - methods: { - getEventLabel(event) { - const eventName = event.toUpperCase(); - return this.$t( - `INTEGRATION_SETTINGS.WEBHOOK.FORM.SUBSCRIPTIONS.EVENTS.${eventName}` - ); - }, - }, -}; diff --git a/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js b/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js index c4d319173..8a4937dd4 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js @@ -30,6 +30,14 @@ export default { permissions: ['administrator'], }, }, + { + path: 'webhook', + component: Webhook, + name: 'settings_integrations_webhook', + meta: { + permissions: ['administrator'], + }, + }, ], }, { @@ -49,14 +57,6 @@ export default { }; }, children: [ - { - path: 'webhook', - component: Webhook, - name: 'settings_integrations_webhook', - meta: { - permissions: ['administrator'], - }, - }, { path: 'slack', name: 'settings_integrations_slack', From 3a0e68030ae3eacee41c225fe79ef290db4d6a36 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Thu, 29 Aug 2024 18:10:13 -0700 Subject: [PATCH 2/2] chore: [Snyk] Fix for 1 vulnerabilities (#10038) fix for vulnerabilties ------ Co-authored-by: snyk-bot --- Gemfile | 4 ++-- Gemfile.lock | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Gemfile b/Gemfile index a0624fee4..4044c9b66 100644 --- a/Gemfile +++ b/Gemfile @@ -96,12 +96,12 @@ gem 'koala' # slack client gem 'slack-ruby-client', '~> 2.2.0' # for dialogflow integrations -gem 'google-cloud-dialogflow-v2' +gem 'google-cloud-dialogflow-v2', '>= 0.24.0' gem 'grpc' # Translate integrations # 'google-cloud-translate' gem depends on faraday 2.0 version # this dependency breaks the slack-ruby-client gem -gem 'google-cloud-translate-v3' +gem 'google-cloud-translate-v3', '>= 0.7.0' ##-- apm and error monitoring ---# # loaded only when environment variables are set. diff --git a/Gemfile.lock b/Gemfile.lock index 06f479659..46a766b4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -257,7 +257,7 @@ GEM faraday-net_http_persistent (2.1.0) faraday (~> 2.5) net-http-persistent (~> 4.0) - faraday-retry (2.1.0) + faraday-retry (2.2.1) faraday (~> 2.0) fcm (1.0.8) faraday (>= 1.0.0, < 3.0) @@ -271,7 +271,7 @@ GEM fugit (1.11.1) et-orbi (~> 1, >= 1.2.11) raabro (~> 1.4) - gapic-common (0.18.0) + gapic-common (0.20.0) faraday (>= 1.9, < 3.a) faraday-retry (>= 1.0, < 3.a) google-protobuf (~> 3.14) @@ -301,15 +301,15 @@ GEM google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) - google-cloud-dialogflow-v2 (0.23.0) - gapic-common (>= 0.18.0, < 2.a) + google-cloud-dialogflow-v2 (0.31.0) + gapic-common (>= 0.20.0, < 2.a) google-cloud-errors (~> 1.0) google-cloud-location (>= 0.4, < 2.a) google-cloud-env (1.6.0) faraday (>= 0.17.3, < 3.0) google-cloud-errors (1.3.1) - google-cloud-location (0.4.0) - gapic-common (>= 0.17.1, < 2.a) + google-cloud-location (0.6.0) + gapic-common (>= 0.20.0, < 2.a) google-cloud-errors (~> 1.0) google-cloud-storage (1.44.0) addressable (~> 2.8) @@ -319,17 +319,17 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - google-cloud-translate-v3 (0.6.0) - gapic-common (>= 0.17.1, < 2.a) + google-cloud-translate-v3 (0.10.0) + gapic-common (>= 0.20.0, < 2.a) google-cloud-errors (~> 1.0) google-protobuf (3.25.3) google-protobuf (3.25.3-arm64-darwin) google-protobuf (3.25.3-x86_64-darwin) google-protobuf (3.25.3-x86_64-linux) - googleapis-common-protos (1.4.0) - google-protobuf (~> 3.14) - googleapis-common-protos-types (~> 1.2) - grpc (~> 1.27) + googleapis-common-protos (1.6.0) + google-protobuf (>= 3.18, < 5.a) + googleapis-common-protos-types (~> 1.7) + grpc (~> 1.41) googleapis-common-protos-types (1.14.0) google-protobuf (~> 3.18) googleauth (1.5.2) @@ -881,9 +881,9 @@ DEPENDENCIES foreman geocoder gmail_xoauth - google-cloud-dialogflow-v2 + google-cloud-dialogflow-v2 (>= 0.24.0) google-cloud-storage - google-cloud-translate-v3 + google-cloud-translate-v3 (>= 0.7.0) groupdate grpc haikunator