From 8b1d98af52b2016bc081178ccdc8cbc2226a7c48 Mon Sep 17 00:00:00 2001 From: Pranav Date: Wed, 24 Jul 2024 16:35:40 -0700 Subject: [PATCH] feat: Update the design for integration page (#9825) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Combine integrations and applications page into one page. Screenshot 2024-07-23 at 3 30 51 PM Major changes: - The app enabled?, active? checks are all moved to backend. - The dashboard_apps integration is also now part of the apps.yml file. - Updated the header design for the new settings pages. - Merged the folders integrationapps and integrations. - Updated the copy to match the size of the card and provide clear instruction. - Only the list page is updated in this PR, rest of the pages are yet to be migrated. | Integration | Verified | | -- | -- | | Dashboard Apps | ✅ | | Dyte | ✅ | | Slack | ✅ | | Webhooks | ✅ | | Dialogflow | ✅ | | Google Translate | ✅ | | OpenAI | ✅ | | Linear | ✅ | --------- Co-authored-by: Muhsin Keloth --- .../dashboard/assets/scss/_woot.scss | 5 + .../components/CustomBrandPolicyWrapper.vue | 25 +++++ .../layout/config/sidebarItems/settings.js | 11 --- .../i18n/locale/am/integrationApps.json | 2 - .../i18n/locale/am/integrations.json | 1 + .../i18n/locale/en/integrations.json | 13 ++- .../dashboard/i18n/locale/en/sla.json | 4 +- .../dashboard/settings/SettingsWrapper.vue | 4 +- .../components/BaseSettingsHeader.vue | 82 ++++++++-------- .../components/BaseSettingsListItem.vue | 7 +- .../settings/integrationapps/Index.vue | 62 ------------ .../integrationapps/IntegrationItem.vue | 95 ------------------ .../integrationapps/integrations.routes.js | 47 --------- .../dashboard/settings/integrations/Index.vue | 98 +++++++++---------- .../integrations/IntegrationHelpText.vue | 1 - .../IntegrationHooks.vue | 0 .../settings/integrations/IntegrationItem.vue | 86 ++++++++++++++++ .../MultipleIntegrationHooks.vue | 0 .../NewHook.vue | 0 .../SingleIntegrationHooks.vue | 0 .../hookMixin.js | 0 .../integrations/integrations.routes.js | 45 +++++---- .../specs/hookMixin.spec.js | 0 .../dashboard/settings/settings.routes.js | 2 - .../settings/sla/components/SLAHeader.vue | 9 +- .../dashboard/store/modules/integrations.js | 14 +-- .../specs/integrations/getters.spec.js | 51 ---------- .../shared/mixins/globalConfigMixin.js | 12 ++- app/models/integrations/app.rb | 2 + config/features.yml | 2 + config/integration/apps.yml | 6 ++ config/locales/en.yml | 20 ++-- package.json | 2 +- tailwind.config.js | 1 + yarn.lock | 47 ++++++--- 35 files changed, 318 insertions(+), 438 deletions(-) create mode 100644 app/javascript/dashboard/components/CustomBrandPolicyWrapper.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrationapps/Index.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrationapps/IntegrationItem.vue delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrationapps/integrations.routes.js delete mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationHelpText.vue rename app/javascript/dashboard/routes/dashboard/settings/{integrationapps => integrations}/IntegrationHooks.vue (100%) create mode 100644 app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationItem.vue rename app/javascript/dashboard/routes/dashboard/settings/{integrationapps => integrations}/MultipleIntegrationHooks.vue (100%) rename app/javascript/dashboard/routes/dashboard/settings/{integrationapps => integrations}/NewHook.vue (100%) rename app/javascript/dashboard/routes/dashboard/settings/{integrationapps => integrations}/SingleIntegrationHooks.vue (100%) rename app/javascript/dashboard/routes/dashboard/settings/{integrationapps => integrations}/hookMixin.js (100%) rename app/javascript/dashboard/routes/dashboard/settings/{integrationapps => integrations}/specs/hookMixin.spec.js (100%) diff --git a/app/javascript/dashboard/assets/scss/_woot.scss b/app/javascript/dashboard/assets/scss/_woot.scss index 4b33d5b10..1db97a306 100644 --- a/app/javascript/dashboard/assets/scss/_woot.scss +++ b/app/javascript/dashboard/assets/scss/_woot.scss @@ -3,6 +3,9 @@ @import 'tailwindcss/utilities'; @import 'shared/assets/fonts/plus-jakarta'; +@import 'shared/assets/fonts/InterDisplay/inter-display'; +@import 'shared/assets/fonts/inter'; + @import 'shared/assets/stylesheets/animations'; @import 'shared/assets/stylesheets/colors'; @import 'shared/assets/stylesheets/spacing'; @@ -42,6 +45,7 @@ } @layer base { + // scss-lint:disable PropertySortOrder :root { --color-amber-25: 254 253 251; @@ -213,6 +217,7 @@ --color-orange-800: 204 78 0; --color-orange-900: 88 45 29; } + // scss-lint:disable QualifyingElement body.dark { --color-amber-25: 31 19 0; diff --git a/app/javascript/dashboard/components/CustomBrandPolicyWrapper.vue b/app/javascript/dashboard/components/CustomBrandPolicyWrapper.vue new file mode 100644 index 000000000..b07b24657 --- /dev/null +++ b/app/javascript/dashboard/components/CustomBrandPolicyWrapper.vue @@ -0,0 +1,25 @@ + + + diff --git a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js index f7d63f6a1..390e8effa 100644 --- a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js +++ b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js @@ -163,17 +163,6 @@ const settings = accountId => ({ permissions: ['administrator'], }, toState: frontendURL(`accounts/${accountId}/settings/integrations`), - toStateName: 'settings_integrations', - featureFlag: FEATURE_FLAGS.INTEGRATIONS, - }, - { - icon: 'star-emphasis', - label: 'APPLICATIONS', - hasSubMenu: false, - meta: { - permissions: ['administrator'], - }, - toState: frontendURL(`accounts/${accountId}/settings/applications`), toStateName: 'settings_applications', featureFlag: FEATURE_FLAGS.INTEGRATIONS, }, diff --git a/app/javascript/dashboard/i18n/locale/am/integrationApps.json b/app/javascript/dashboard/i18n/locale/am/integrationApps.json index a80ecb837..9e20c835b 100644 --- a/app/javascript/dashboard/i18n/locale/am/integrationApps.json +++ b/app/javascript/dashboard/i18n/locale/am/integrationApps.json @@ -1,8 +1,6 @@ { "INTEGRATION_APPS": { - "FETCHING": "Fetching Integrations", "NO_HOOK_CONFIGURED": "There are no %{integrationId} integrations configured in this account.", - "HEADER": "Applications", "STATUS": { "ENABLED": "Enabled", "DISABLED": "Disabled" diff --git a/app/javascript/dashboard/i18n/locale/am/integrations.json b/app/javascript/dashboard/i18n/locale/am/integrations.json index 5397fcb63..3772c0546 100644 --- a/app/javascript/dashboard/i18n/locale/am/integrations.json +++ b/app/javascript/dashboard/i18n/locale/am/integrations.json @@ -1,6 +1,7 @@ { "INTEGRATION_SETTINGS": { "HEADER": "Integrations", + "LOADING": "Fetching integrations", "WEBHOOK": { "SUBSCRIBED_EVENTS": "Subscribed Events", "FORM": { diff --git a/app/javascript/dashboard/i18n/locale/en/integrations.json b/app/javascript/dashboard/i18n/locale/en/integrations.json index 6e052949c..3ad79379f 100644 --- a/app/javascript/dashboard/i18n/locale/en/integrations.json +++ b/app/javascript/dashboard/i18n/locale/en/integrations.json @@ -1,6 +1,9 @@ { "INTEGRATION_SETTINGS": { "HEADER": "Integrations", + "DESCRIPTION": "Chatwoot integrates with multiple tools and services to improve your team's efficiency. Explore the list below to configure your favorite apps.", + "LEARN_MORE": "Learn more about integrations", + "LOADING": "Fetching integrations", "WEBHOOK": { "SUBSCRIBED_EVENTS": "Subscribed Events", "FORM": { @@ -37,7 +40,10 @@ "LIST": { "404": "There are no webhooks configured for this account.", "TITLE": "Manage webhooks", - "TABLE_HEADER": ["Webhook endpoint", "Actions"] + "TABLE_HEADER": [ + "Webhook endpoint", + "Actions" + ] }, "EDIT": { "BUTTON_TEXT": "Edit", @@ -169,7 +175,10 @@ "LIST": { "404": "There are no dashboard apps configured on this account yet", "LOADING": "Fetching dashboard apps...", - "TABLE_HEADER": ["Name", "Endpoint"], + "TABLE_HEADER": [ + "Name", + "Endpoint" + ], "EDIT_TOOLTIP": "Edit app", "DELETE_TOOLTIP": "Delete app" }, diff --git a/app/javascript/dashboard/i18n/locale/en/sla.json b/app/javascript/dashboard/i18n/locale/en/sla.json index f32f24b61..0da7873be 100644 --- a/app/javascript/dashboard/i18n/locale/en/sla.json +++ b/app/javascript/dashboard/i18n/locale/en/sla.json @@ -1,6 +1,6 @@ { "SLA": { - "HEADER": "SLA", + "HEADER": "Service Level Agreements", "ADD_ACTION": "Add SLA", "ADD_ACTION_LONG": "Create a new SLA Policy", "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", @@ -105,4 +105,4 @@ "HIDE": "Hide {count} rows" } } -} \ No newline at end of file +} diff --git a/app/javascript/dashboard/routes/dashboard/settings/SettingsWrapper.vue b/app/javascript/dashboard/routes/dashboard/settings/SettingsWrapper.vue index 3f5bf16f9..e2f838351 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/SettingsWrapper.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/SettingsWrapper.vue @@ -9,9 +9,9 @@ defineProps({