From ea3ef9064bf549f119f1c8e8a68c5c511fb5947b Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 7 May 2025 10:22:08 +0530 Subject: [PATCH 1/4] feat: handle rails turbo morphing (#11422) Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> --- app/javascript/entrypoints/sdk.js | 18 ++++++++++++------ app/javascript/sdk/DOMHelpers.js | 1 + app/javascript/sdk/IFrameHelper.js | 1 + app/javascript/sdk/bubbleHelpers.js | 1 + 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/javascript/entrypoints/sdk.js b/app/javascript/entrypoints/sdk.js index 0aac9104e..a2cf297f1 100755 --- a/app/javascript/entrypoints/sdk.js +++ b/app/javascript/entrypoints/sdk.js @@ -23,12 +23,18 @@ const runSDK = ({ baseUrl, websiteToken }) => { return; } - if (window.Turbo) { - // if this is a Rails Turbo app - document.addEventListener('turbo:before-render', event => - restoreWidgetInDOM(event.detail.newBody) - ); - } + // if this is a Rails Turbo app + document.addEventListener('turbo:before-render', event => { + // when morphing the page, this typically happens on reload like events + // say you update a "Customer" on a form and it reloads the page + // We have already added data-turbo-permananent to true. This + // will ensure that the widget it preserved + // Read more about morphing here: https://turbo.hotwired.dev/handbook/page_refreshes#morphing + // and peristing elements here: https://turbo.hotwired.dev/handbook/building#persisting-elements-across-page-loads + if (event.detail.renderMethod === 'morph') return; + + restoreWidgetInDOM(event.detail.newBody); + }); if (window.Turbolinks) { document.addEventListener('turbolinks:before-render', event => { diff --git a/app/javascript/sdk/DOMHelpers.js b/app/javascript/sdk/DOMHelpers.js index f8ba55337..ce12836d7 100644 --- a/app/javascript/sdk/DOMHelpers.js +++ b/app/javascript/sdk/DOMHelpers.js @@ -5,6 +5,7 @@ export const loadCSS = () => { const css = document.createElement('style'); css.innerHTML = `${SDK_CSS}`; css.id = 'cw-widget-styles'; + css.dataset.turboPermanent = true; document.body.appendChild(css); }; diff --git a/app/javascript/sdk/IFrameHelper.js b/app/javascript/sdk/IFrameHelper.js index 21b2fb8d4..469fbe8de 100644 --- a/app/javascript/sdk/IFrameHelper.js +++ b/app/javascript/sdk/IFrameHelper.js @@ -82,6 +82,7 @@ export const IFrameHelper = { addClasses(widgetHolder, holderClassName); widgetHolder.id = 'cw-widget-holder'; + widgetHolder.dataset.turboPermanent = true; widgetHolder.appendChild(iframe); body.appendChild(widgetHolder); IFrameHelper.initPostMessageCommunication(); diff --git a/app/javascript/sdk/bubbleHelpers.js b/app/javascript/sdk/bubbleHelpers.js index 05c67f478..c53323e27 100644 --- a/app/javascript/sdk/bubbleHelpers.js +++ b/app/javascript/sdk/bubbleHelpers.js @@ -67,6 +67,7 @@ export const createBubbleHolder = hideMessageBubble => { } addClasses(bubbleHolder, 'woot--bubble-holder'); bubbleHolder.id = 'cw-bubble-holder'; + bubbleHolder.dataset.turboPermanent = true; body.appendChild(bubbleHolder); }; From 968aa39a9ede88966ecc0d5a5a36611eee573b48 Mon Sep 17 00:00:00 2001 From: Vishnu Narayanan Date: Wed, 7 May 2025 13:01:58 +0530 Subject: [PATCH 2/4] chore: move stalecontacts job to different sidekiq queue (#11427) - move stale contacts job to `housekeeping` queue below `low` --- config/schedule.yml | 2 +- config/sidekiq.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/schedule.yml b/config/schedule.yml index afb9d98c7..2747910ad 100644 --- a/config/schedule.yml +++ b/config/schedule.yml @@ -38,4 +38,4 @@ remove_stale_redis_keys_job.rb: process_stale_contacts_job: cron: '30 04 * * *' class: 'Internal::ProcessStaleContactsJob' - queue: scheduled_jobs + queue: housekeeping diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 4d2abed9c..af813d92a 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -23,6 +23,7 @@ - action_mailbox_routing - low - scheduled_jobs + - housekeeping - async_database_migration - active_storage_analysis - active_storage_purge From e08436dde5793db3bc812a7149dc52539e328862 Mon Sep 17 00:00:00 2001 From: Chatwoot Bot <92152627+chatwoot-bot@users.noreply.github.com> Date: Wed, 7 May 2025 00:34:06 -0700 Subject: [PATCH 3/4] chore: Update translations (#11425) --- .../dashboard/i18n/locale/am/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ar/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/az/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/bg/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ca/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/cs/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/da/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/de/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/el/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/es/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/fa/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/fi/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/fr/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/he/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/hi/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/hr/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/hu/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/hy/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/id/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/is/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/it/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ja/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ka/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ko/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/lt/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/lv/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ml/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ms/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ne/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/nl/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/no/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/pl/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/pt/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/pt_BR/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ro/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ru/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/sh/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/sk/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/sl/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/sq/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/sr/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/sv/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ta/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/th/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/tl/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/tr/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/uk/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ur/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/ur_IN/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/vi/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/zh_CN/integrations.json | 9 ++++++--- .../dashboard/i18n/locale/zh_TW/integrations.json | 9 ++++++--- 52 files changed, 312 insertions(+), 156 deletions(-) diff --git a/app/javascript/dashboard/i18n/locale/am/integrations.json b/app/javascript/dashboard/i18n/locale/am/integrations.json index b1ba1d222..f1a1d42c2 100644 --- a/app/javascript/dashboard/i18n/locale/am/integrations.json +++ b/app/javascript/dashboard/i18n/locale/am/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ar/integrations.json b/app/javascript/dashboard/i18n/locale/ar/integrations.json index 5110af135..24e64a972 100644 --- a/app/javascript/dashboard/i18n/locale/ar/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ar/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "الاسم", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "الوصف", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/az/integrations.json b/app/javascript/dashboard/i18n/locale/az/integrations.json index b1ba1d222..f1a1d42c2 100644 --- a/app/javascript/dashboard/i18n/locale/az/integrations.json +++ b/app/javascript/dashboard/i18n/locale/az/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/bg/integrations.json b/app/javascript/dashboard/i18n/locale/bg/integrations.json index 0932a3e3c..3bbc0bf71 100644 --- a/app/javascript/dashboard/i18n/locale/bg/integrations.json +++ b/app/javascript/dashboard/i18n/locale/bg/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Име", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Описание", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ca/integrations.json b/app/javascript/dashboard/i18n/locale/ca/integrations.json index bf5353bbb..76a028c64 100644 --- a/app/javascript/dashboard/i18n/locale/ca/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ca/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nom", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Descripció", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/cs/integrations.json b/app/javascript/dashboard/i18n/locale/cs/integrations.json index 445de9f40..2671155ae 100644 --- a/app/javascript/dashboard/i18n/locale/cs/integrations.json +++ b/app/javascript/dashboard/i18n/locale/cs/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Název", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/da/integrations.json b/app/javascript/dashboard/i18n/locale/da/integrations.json index edc6207f3..1a0de11ae 100644 --- a/app/javascript/dashboard/i18n/locale/da/integrations.json +++ b/app/javascript/dashboard/i18n/locale/da/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Navn", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Beskrivelse", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/de/integrations.json b/app/javascript/dashboard/i18n/locale/de/integrations.json index ed634a57a..d63dd7d5c 100644 --- a/app/javascript/dashboard/i18n/locale/de/integrations.json +++ b/app/javascript/dashboard/i18n/locale/de/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Beschreibung", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/el/integrations.json b/app/javascript/dashboard/i18n/locale/el/integrations.json index d5ba66aba..97094d3b4 100644 --- a/app/javascript/dashboard/i18n/locale/el/integrations.json +++ b/app/javascript/dashboard/i18n/locale/el/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Όνομα", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Περιγραφή", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/es/integrations.json b/app/javascript/dashboard/i18n/locale/es/integrations.json index 496ce36b9..0d205336f 100644 --- a/app/javascript/dashboard/i18n/locale/es/integrations.json +++ b/app/javascript/dashboard/i18n/locale/es/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nombre", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Descripción", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/fa/integrations.json b/app/javascript/dashboard/i18n/locale/fa/integrations.json index d388f17b7..01e113aa6 100644 --- a/app/javascript/dashboard/i18n/locale/fa/integrations.json +++ b/app/javascript/dashboard/i18n/locale/fa/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "نام", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "توضیحات", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/fi/integrations.json b/app/javascript/dashboard/i18n/locale/fi/integrations.json index 61ed78700..6f749c74b 100644 --- a/app/javascript/dashboard/i18n/locale/fi/integrations.json +++ b/app/javascript/dashboard/i18n/locale/fi/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nimi", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Kuvaus", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/fr/integrations.json b/app/javascript/dashboard/i18n/locale/fr/integrations.json index e810fb00d..8a3341fc2 100644 --- a/app/javascript/dashboard/i18n/locale/fr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/fr/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nom", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/he/integrations.json b/app/javascript/dashboard/i18n/locale/he/integrations.json index e1544588b..405e453c6 100644 --- a/app/javascript/dashboard/i18n/locale/he/integrations.json +++ b/app/javascript/dashboard/i18n/locale/he/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "שם", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "תיאור", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/hi/integrations.json b/app/javascript/dashboard/i18n/locale/hi/integrations.json index 5474a2f1a..01dbf5ef2 100644 --- a/app/javascript/dashboard/i18n/locale/hi/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hi/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/hr/integrations.json b/app/javascript/dashboard/i18n/locale/hr/integrations.json index 2af0316aa..71642872c 100644 --- a/app/javascript/dashboard/i18n/locale/hr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hr/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Ime", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/hu/integrations.json b/app/javascript/dashboard/i18n/locale/hu/integrations.json index f71ae12ee..26f2edcd9 100644 --- a/app/javascript/dashboard/i18n/locale/hu/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hu/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Név", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Leírás", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/hy/integrations.json b/app/javascript/dashboard/i18n/locale/hy/integrations.json index daee18937..5300c9239 100644 --- a/app/javascript/dashboard/i18n/locale/hy/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hy/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/id/integrations.json b/app/javascript/dashboard/i18n/locale/id/integrations.json index 5f9ba032f..a7b5acf20 100644 --- a/app/javascript/dashboard/i18n/locale/id/integrations.json +++ b/app/javascript/dashboard/i18n/locale/id/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nama", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Deskripsi", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/is/integrations.json b/app/javascript/dashboard/i18n/locale/is/integrations.json index 9036a7cd6..c8407059c 100644 --- a/app/javascript/dashboard/i18n/locale/is/integrations.json +++ b/app/javascript/dashboard/i18n/locale/is/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nafn", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/it/integrations.json b/app/javascript/dashboard/i18n/locale/it/integrations.json index 4ef930b6b..d7e5fe340 100644 --- a/app/javascript/dashboard/i18n/locale/it/integrations.json +++ b/app/javascript/dashboard/i18n/locale/it/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nome", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Descrizione", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ja/integrations.json b/app/javascript/dashboard/i18n/locale/ja/integrations.json index a9ed39cb7..d346e6354 100644 --- a/app/javascript/dashboard/i18n/locale/ja/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ja/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "名前", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "説明", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "製品名", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "製品名が必要です" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ka/integrations.json b/app/javascript/dashboard/i18n/locale/ka/integrations.json index daee18937..5300c9239 100644 --- a/app/javascript/dashboard/i18n/locale/ka/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ka/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ko/integrations.json b/app/javascript/dashboard/i18n/locale/ko/integrations.json index 8050a6077..57efa4fc8 100644 --- a/app/javascript/dashboard/i18n/locale/ko/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ko/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "이름", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "내용", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/lt/integrations.json b/app/javascript/dashboard/i18n/locale/lt/integrations.json index b091c0218..60bd7755a 100644 --- a/app/javascript/dashboard/i18n/locale/lt/integrations.json +++ b/app/javascript/dashboard/i18n/locale/lt/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Vardas", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Aprašymas", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/lv/integrations.json b/app/javascript/dashboard/i18n/locale/lv/integrations.json index b35d1e91e..a9ae45efe 100644 --- a/app/javascript/dashboard/i18n/locale/lv/integrations.json +++ b/app/javascript/dashboard/i18n/locale/lv/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nosaukums", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Apraksts", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Produkta Nosaukums", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "Nepieciešams produkta nosaukums" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ml/integrations.json b/app/javascript/dashboard/i18n/locale/ml/integrations.json index e23550f8e..239803cd5 100644 --- a/app/javascript/dashboard/i18n/locale/ml/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ml/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "പേര്", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "വിവരണം", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ms/integrations.json b/app/javascript/dashboard/i18n/locale/ms/integrations.json index 288590bbc..6d2b90acf 100644 --- a/app/javascript/dashboard/i18n/locale/ms/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ms/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nama", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ne/integrations.json b/app/javascript/dashboard/i18n/locale/ne/integrations.json index e8c23d314..dd959dc09 100644 --- a/app/javascript/dashboard/i18n/locale/ne/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ne/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/nl/integrations.json b/app/javascript/dashboard/i18n/locale/nl/integrations.json index 4031170e4..b80ce0712 100644 --- a/app/javascript/dashboard/i18n/locale/nl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/nl/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Naam", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Beschrijving", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/no/integrations.json b/app/javascript/dashboard/i18n/locale/no/integrations.json index 12f71da4a..0d0a80e97 100644 --- a/app/javascript/dashboard/i18n/locale/no/integrations.json +++ b/app/javascript/dashboard/i18n/locale/no/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Navn", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Beskrivelse", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/pl/integrations.json b/app/javascript/dashboard/i18n/locale/pl/integrations.json index 8d3bc7ea0..7edd5db6e 100644 --- a/app/javascript/dashboard/i18n/locale/pl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/pl/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Imię", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Opis", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/pt/integrations.json b/app/javascript/dashboard/i18n/locale/pt/integrations.json index c333c89b5..eabf9e01d 100644 --- a/app/javascript/dashboard/i18n/locale/pt/integrations.json +++ b/app/javascript/dashboard/i18n/locale/pt/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nome:", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Descrição", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json b/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json index 3e73109e4..87e835285 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nome", - "PLACEHOLDER": "Digite o nome do assistente" + "PLACEHOLDER": "Digite o nome do assistente", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Descrição", - "PLACEHOLDER": "Digite a descrição do assistente" + "PLACEHOLDER": "Digite a descrição do assistente", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Nome do Produto", - "PLACEHOLDER": "Digite o nome do produto" + "PLACEHOLDER": "Digite o nome do produto", + "ERROR": "O nome do produto é obrigatório" }, "WELCOME_MESSAGE": { "LABEL": "Mensagem de boas-vindas", diff --git a/app/javascript/dashboard/i18n/locale/ro/integrations.json b/app/javascript/dashboard/i18n/locale/ro/integrations.json index 460e3d12c..38340d476 100644 --- a/app/javascript/dashboard/i18n/locale/ro/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ro/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Nume", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Descriere", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ru/integrations.json b/app/javascript/dashboard/i18n/locale/ru/integrations.json index 4e9507f5f..cf4a3286a 100644 --- a/app/javascript/dashboard/i18n/locale/ru/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ru/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Имя", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Описание", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Название продукта", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "Требуется название продукта" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/sh/integrations.json b/app/javascript/dashboard/i18n/locale/sh/integrations.json index daee18937..5300c9239 100644 --- a/app/javascript/dashboard/i18n/locale/sh/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sh/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/sk/integrations.json b/app/javascript/dashboard/i18n/locale/sk/integrations.json index dc3526dd7..d04a971ff 100644 --- a/app/javascript/dashboard/i18n/locale/sk/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sk/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Meno", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/sl/integrations.json b/app/javascript/dashboard/i18n/locale/sl/integrations.json index dab4c00ab..d225f442e 100644 --- a/app/javascript/dashboard/i18n/locale/sl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sl/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/sq/integrations.json b/app/javascript/dashboard/i18n/locale/sq/integrations.json index 0b379ae24..36826d0db 100644 --- a/app/javascript/dashboard/i18n/locale/sq/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sq/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/sr/integrations.json b/app/javascript/dashboard/i18n/locale/sr/integrations.json index 3409e0558..8af9a3b60 100644 --- a/app/javascript/dashboard/i18n/locale/sr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sr/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Ime", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Opis", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/sv/integrations.json b/app/javascript/dashboard/i18n/locale/sv/integrations.json index 8fbf84666..8fd861823 100644 --- a/app/javascript/dashboard/i18n/locale/sv/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sv/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Namn", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Beskrivning", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ta/integrations.json b/app/javascript/dashboard/i18n/locale/ta/integrations.json index 5c58f914e..10643fec2 100644 --- a/app/javascript/dashboard/i18n/locale/ta/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ta/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "பெயர்", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/th/integrations.json b/app/javascript/dashboard/i18n/locale/th/integrations.json index 9a4b8c16a..a1d92a1a4 100644 --- a/app/javascript/dashboard/i18n/locale/th/integrations.json +++ b/app/javascript/dashboard/i18n/locale/th/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "ชื่อ", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "คำอธิบาย", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/tl/integrations.json b/app/javascript/dashboard/i18n/locale/tl/integrations.json index b1ba1d222..f1a1d42c2 100644 --- a/app/javascript/dashboard/i18n/locale/tl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/tl/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/tr/integrations.json b/app/javascript/dashboard/i18n/locale/tr/integrations.json index 922acb8ab..9d18d873d 100644 --- a/app/javascript/dashboard/i18n/locale/tr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/tr/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "İsim", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Açıklama", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/uk/integrations.json b/app/javascript/dashboard/i18n/locale/uk/integrations.json index 78ccb4818..0da64bbaa 100644 --- a/app/javascript/dashboard/i18n/locale/uk/integrations.json +++ b/app/javascript/dashboard/i18n/locale/uk/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Ім'я", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Опис", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ur/integrations.json b/app/javascript/dashboard/i18n/locale/ur/integrations.json index 639a27b25..914adced3 100644 --- a/app/javascript/dashboard/i18n/locale/ur/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ur/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "نام", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json b/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json index daee18937..5300c9239 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Name", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Description", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/vi/integrations.json b/app/javascript/dashboard/i18n/locale/vi/integrations.json index 2226348ba..8cdd6c425 100644 --- a/app/javascript/dashboard/i18n/locale/vi/integrations.json +++ b/app/javascript/dashboard/i18n/locale/vi/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "Tên", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "Mô tả", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json b/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json index 2504327b6..1c13783c8 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "姓名:", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "描述信息", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "产品名称", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "产品名称是必需的" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json b/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json index 7b4829c54..758fbe8ce 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json @@ -406,15 +406,18 @@ }, "NAME": { "LABEL": "姓名", - "PLACEHOLDER": "Enter assistant name" + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" }, "DESCRIPTION": { "LABEL": "描述資訊", - "PLACEHOLDER": "Enter assistant description" + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" }, "PRODUCT_NAME": { "LABEL": "Product Name", - "PLACEHOLDER": "Enter product name" + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" }, "WELCOME_MESSAGE": { "LABEL": "Welcome Message", From b5339808808872863a63789041c649773a38dfd7 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 7 May 2025 13:06:15 +0530 Subject: [PATCH 4/4] feat: Add support for minutes in auto resolve feature (#11269) ### Summary - Converts conversation auto-resolution duration from days to minutes for more granular control - Updates validation to allow values from 10 minutes (minimum) to 999 days (maximum) - Implements smart messaging to show appropriate time units in activity messages ### Changes - Created migration to convert existing durations from days to minutes (x1440) - Updated conversation resolver to use minutes instead of days - Added dynamic translation key selection based on duration value - Updated related specs and documentation - Added support for displaying durations in days, hours, or minutes based on value ### Test plan - Verify account validation accepts new minute-based ranges - Confirm existing account settings are correctly migrated - Test auto-resolution works properly with minute values - Ensure proper time unit display in activity messages --------- Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> --- app/controllers/api/v1/accounts_controller.rb | 9 +- app/controllers/api/v2/accounts_controller.rb | 2 +- .../components-next/input/DurationInput.vue | 66 +++ .../components-next/switch/Switch.vue | 4 +- .../dashboard/composables/useAccount.js | 10 +- .../dashboard/i18n/locale/en/components.json | 6 + .../i18n/locale/en/generalSettings.json | 17 +- .../dashboard/settings/account/Index.vue | 395 +++++------------- .../account/components/AccountDelete.vue | 149 +++++++ .../settings/account/components/AccountId.vue | 22 + .../account/components/AutoResolve.vue | 121 ++++++ .../settings/account/components/BuildInfo.vue | 56 +++ .../account/components/SectionLayout.vue | 40 ++ .../dashboard/store/modules/accounts.js | 3 +- .../modules/specs/account/actions.spec.js | 5 +- .../v3/components/Form/WithLabel.vue | 54 +-- .../conversations_resolution_scheduler_job.rb | 2 +- app/jobs/conversations/resolution_job.rb | 9 +- app/models/account.rb | 20 +- .../concerns/activity_message_handler.rb | 13 +- app/models/concerns/json_schema_validator.rb | 12 + app/models/conversation.rb | 8 +- .../template/auto_resolve.rb | 25 ++ .../api/v1/models/_account.json.jbuilder | 2 +- config/locales/en.yml | 4 +- ...21082927_add_settings_column_to_account.rb | 5 + ...1085134_update_auto_resolve_to_mminutes.rb | 8 + db/schema.rb | 3 +- .../api/v1/accounts_controller_spec.rb | 11 +- ...ersations_resolution_scheduler_job_spec.rb | 2 +- .../jobs/conversations/resolution_job_spec.rb | 9 +- spec/models/account_spec.rb | 85 +++- .../concerns/json_schema_validator_spec.rb | 43 +- spec/models/conversation_spec.rb | 11 +- 34 files changed, 864 insertions(+), 367 deletions(-) create mode 100644 app/javascript/dashboard/components-next/input/DurationInput.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/account/components/AccountDelete.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/account/components/AccountId.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/account/components/BuildInfo.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/account/components/SectionLayout.vue create mode 100644 app/services/message_templates/template/auto_resolve.rb create mode 100644 db/migrate/20250421082927_add_settings_column_to_account.rb create mode 100644 db/migrate/20250421085134_update_auto_resolve_to_mminutes.rb diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index c0dac6d9e..b247b9715 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -44,8 +44,9 @@ class Api::V1::AccountsController < Api::BaseController end def update - @account.assign_attributes(account_params.slice(:name, :locale, :domain, :support_email, :auto_resolve_duration)) + @account.assign_attributes(account_params.slice(:name, :locale, :domain, :support_email)) @account.custom_attributes.merge!(custom_attributes_params) + @account.settings.merge!(settings_params) @account.custom_attributes['onboarding_step'] = 'invite_team' if @account.custom_attributes['onboarding_step'] == 'account_update' @account.save! end @@ -83,13 +84,17 @@ class Api::V1::AccountsController < Api::BaseController end def account_params - params.permit(:account_name, :email, :name, :password, :locale, :domain, :support_email, :auto_resolve_duration, :user_full_name) + params.permit(:account_name, :email, :name, :password, :locale, :domain, :support_email, :user_full_name) end def custom_attributes_params params.permit(:industry, :company_size, :timezone) end + def settings_params + params.permit(:auto_resolve_after, :auto_resolve_message) + end + def check_signup_enabled raise ActionController::RoutingError, 'Not Found' if GlobalConfigService.load('ENABLE_ACCOUNT_SIGNUP', 'false') == 'false' end diff --git a/app/controllers/api/v2/accounts_controller.rb b/app/controllers/api/v2/accounts_controller.rb index 45faca3d0..bed0a212a 100644 --- a/app/controllers/api/v2/accounts_controller.rb +++ b/app/controllers/api/v2/accounts_controller.rb @@ -54,7 +54,7 @@ class Api::V2::AccountsController < Api::BaseController end def account_params - params.permit(:account_name, :email, :name, :password, :locale, :domain, :support_email, :auto_resolve_duration, :user_full_name) + params.permit(:account_name, :email, :name, :password, :locale, :domain, :support_email, :user_full_name) end def check_signup_enabled diff --git a/app/javascript/dashboard/components-next/input/DurationInput.vue b/app/javascript/dashboard/components-next/input/DurationInput.vue new file mode 100644 index 000000000..15c6d102a --- /dev/null +++ b/app/javascript/dashboard/components-next/input/DurationInput.vue @@ -0,0 +1,66 @@ + + + diff --git a/app/javascript/dashboard/components-next/switch/Switch.vue b/app/javascript/dashboard/components-next/switch/Switch.vue index 4428154a0..766442953 100644 --- a/app/javascript/dashboard/components-next/switch/Switch.vue +++ b/app/javascript/dashboard/components-next/switch/Switch.vue @@ -27,10 +27,10 @@ const updateValue = () => { > {{ t('SWITCH.TOGGLE') }} diff --git a/app/javascript/dashboard/composables/useAccount.js b/app/javascript/dashboard/composables/useAccount.js index 8ace2a5e1..9a2ba012b 100644 --- a/app/javascript/dashboard/composables/useAccount.js +++ b/app/javascript/dashboard/composables/useAccount.js @@ -1,6 +1,6 @@ import { computed } from 'vue'; import { useRoute } from 'vue-router'; -import { useMapGetter } from './store'; +import { useMapGetter, useStore } from './store'; /** * Composable for account-related operations. @@ -12,6 +12,7 @@ export function useAccount() { * @type {import('vue').ComputedRef} */ const route = useRoute(); + const store = useStore(); const getAccountFn = useMapGetter('accounts/getAccount'); const isOnChatwootCloud = useMapGetter('globalConfig/isOnChatwootCloud'); const isFeatureEnabledonAccount = useMapGetter( @@ -44,6 +45,12 @@ export function useAccount() { }; }; + const updateAccount = async data => { + await store.dispatch('accounts/update', { + ...data, + }); + }; + return { accountId, route, @@ -52,5 +59,6 @@ export function useAccount() { accountScopedRoute, isCloudFeatureEnabled, isOnChatwootCloud, + updateAccount, }; } diff --git a/app/javascript/dashboard/i18n/locale/en/components.json b/app/javascript/dashboard/i18n/locale/en/components.json index c7230b1fc..e44c6e039 100644 --- a/app/javascript/dashboard/i18n/locale/en/components.json +++ b/app/javascript/dashboard/i18n/locale/en/components.json @@ -43,5 +43,11 @@ "FEATURE_SPOTLIGHT": { "LEARN_MORE": "Learn more", "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" } } diff --git a/app/javascript/dashboard/i18n/locale/en/generalSettings.json b/app/javascript/dashboard/i18n/locale/en/generalSettings.json index cfda6c7da..b09376b71 100644 --- a/app/javascript/dashboard/i18n/locale/en/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/en/generalSettings.json @@ -44,6 +44,10 @@ "TITLE": "Account ID", "NOTE": "This ID is required if you are building an API based integration" }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically end the conversation after a certain period. Set the duration and customize the message to the user below." + }, "NAME": { "LABEL": "Account name", "PLACEHOLDER": "Your account name", @@ -65,9 +69,18 @@ "ERROR": "" }, "AUTO_RESOLVE_DURATION": { - "LABEL": "Number of days after a ticket should auto resolve if there is no activity", + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a ticket should auto resolve if there is no activity", "PLACEHOLDER": "30", - "ERROR": "Please enter a valid auto resolve duration (minimum 1 day and maximum 999 days)" + "ERROR": "Please enter a valid auto resolve duration (minimum 1 day and maximum 999 days)", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Update Auto-resolve", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." }, "FEATURES": { "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", diff --git a/app/javascript/dashboard/routes/dashboard/settings/account/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/account/Index.vue index 7afb3cf00..073ef9a7a 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/account/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/account/Index.vue @@ -1,25 +1,34 @@ diff --git a/app/javascript/dashboard/routes/dashboard/settings/account/components/AccountDelete.vue b/app/javascript/dashboard/routes/dashboard/settings/account/components/AccountDelete.vue new file mode 100644 index 000000000..66c969a0a --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/account/components/AccountDelete.vue @@ -0,0 +1,149 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/account/components/AccountId.vue b/app/javascript/dashboard/routes/dashboard/settings/account/components/AccountId.vue new file mode 100644 index 000000000..f02efcdc2 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/account/components/AccountId.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue b/app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue new file mode 100644 index 000000000..bc76fee83 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue @@ -0,0 +1,121 @@ + + +