From 2429daa45cbd80209c05356e91f157c804688b5b Mon Sep 17 00:00:00 2001 From: Vishnu Narayanan Date: Mon, 18 Sep 2023 23:49:29 +0530 Subject: [PATCH 01/23] feat: cwctl upgrade node for existing installations (#7772) Co-authored-by: Sojan Jose --- VERSION_CW | 2 +- VERSION_CWCTL | 2 +- deployment/setup_20.04.sh | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/VERSION_CW b/VERSION_CW index d76bd2ba3..fd2a01863 100644 --- a/VERSION_CW +++ b/VERSION_CW @@ -1 +1 @@ -2.17.0 +3.1.0 diff --git a/VERSION_CWCTL b/VERSION_CWCTL index 276cbf9e2..197c4d5c2 100644 --- a/VERSION_CWCTL +++ b/VERSION_CWCTL @@ -1 +1 @@ -2.3.0 +2.4.0 diff --git a/deployment/setup_20.04.sh b/deployment/setup_20.04.sh index 9003d7926..d1eb6e8f6 100644 --- a/deployment/setup_20.04.sh +++ b/deployment/setup_20.04.sh @@ -2,7 +2,7 @@ # Description: Install and manage a Chatwoot installation. # OS: Ubuntu 20.04 LTS -# Script Version: 2.3.0 +# Script Version: 2.4.0 # Run this script as root set -eu -o errexit -o pipefail -o noclobber -o nounset @@ -19,7 +19,7 @@ fi # option --output/-o requires 1 argument LONGOPTS=console,debug,help,install,Install:,logs:,restart,ssl,upgrade,webserver,version OPTIONS=cdhiI:l:rsuwv -CWCTL_VERSION="2.3.0" +CWCTL_VERSION="2.4.0" pg_pass=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 15 ; echo '') # if user does not specify an option @@ -722,7 +722,30 @@ EOF # None ############################################################################## function upgrade_redis() { + + echo "Checking Redis availability..." + + # Check if Redis is installed + if ! command -v redis-server &> /dev/null; then + echo "Redis is not installed. Skipping Redis upgrade." + return + fi + + echo "Checking Redis version..." + + # Get current Redis version + current_version=$(redis-server --version | awk -F 'v=' '{print $2}' | awk '{print $1}') + + # Parse major version number + major_version=$(echo "$current_version" | cut -d. -f1) + + if [ "$major_version" -ge 7 ]; then + echo "Redis is already version $current_version (>= 7). Skipping Redis upgrade." + return + fi + echo "Upgrading Redis to v7+ for Rails 7 support(Chatwoot v2.17+)" + curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list apt update -y @@ -730,6 +753,11 @@ function upgrade_redis() { apt install libvips -y } +function upgrade_node() { + echo "Upgrading nodejs version to v20.x" + curl -sL https://deb.nodesource.com/setup_20.x | sudo bash - + apt install -y nodejs +} ############################################################################## # Upgrade an existing installation to latest stable version(-u/--upgrade) @@ -746,6 +774,7 @@ function upgrade() { sleep 3 upgrade_prereq upgrade_redis + upgrade_node sudo -i -u chatwoot << "EOF" # Navigate to the Chatwoot directory @@ -765,7 +794,7 @@ function upgrade() { yarn # Recompile the assets - rake assets:precompile RAILS_ENV=production + rake assets:precompile RAILS_ENV=production NODE_OPTIONS=--openssl-legacy-provider # Migrate the database schema RAILS_ENV=production POSTGRES_STATEMENT_TIMEOUT=600s bundle exec rake db:migrate @@ -829,7 +858,7 @@ function webserver() { # None ############################################################################## function version() { - echo "cwctl v$CWCTL_VERSION alpha build" + echo "cwctl v$CWCTL_VERSION beta build" } ############################################################################## From 53d530b815fbee7b172ed6bba3073d7abd2908f6 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 19 Sep 2023 09:51:54 +0530 Subject: [PATCH 02/23] feat: Add upload under account scope (#7914) --- .../api/v1/{ => accounts}/upload_controller.rb | 2 +- .../dashboard/helper/specs/uploadHelper.spec.js | 4 ++-- app/javascript/dashboard/helper/uploadHelper.js | 16 ++++++++++++---- config/initializers/rack_attack.rb | 5 +++-- config/routes.rb | 4 ++-- .../accounts/automation_rules_controller_spec.rb | 6 +++--- .../api/v1/accounts/macros_controller_spec.rb | 2 +- .../controllers/api/v1/upload_controller_spec.rb | 8 ++++---- 8 files changed, 28 insertions(+), 19 deletions(-) rename app/controllers/api/v1/{ => accounts}/upload_controller.rb (82%) diff --git a/app/controllers/api/v1/upload_controller.rb b/app/controllers/api/v1/accounts/upload_controller.rb similarity index 82% rename from app/controllers/api/v1/upload_controller.rb rename to app/controllers/api/v1/accounts/upload_controller.rb index ad6b0b96c..4c54938b7 100644 --- a/app/controllers/api/v1/upload_controller.rb +++ b/app/controllers/api/v1/accounts/upload_controller.rb @@ -1,4 +1,4 @@ -class Api::V1::UploadController < Api::BaseController +class Api::V1::Accounts::UploadController < Api::V1::Accounts::BaseController def create file_blob = ActiveStorage::Blob.create_and_upload!( key: nil, diff --git a/app/javascript/dashboard/helper/specs/uploadHelper.spec.js b/app/javascript/dashboard/helper/specs/uploadHelper.spec.js index 11bb535f0..a31ff16bb 100644 --- a/app/javascript/dashboard/helper/specs/uploadHelper.spec.js +++ b/app/javascript/dashboard/helper/specs/uploadHelper.spec.js @@ -25,10 +25,10 @@ describe('#Upload Helpers', () => { axios.post.mockResolvedValueOnce(mockResponse); - const result = await uploadFile(mockFile); + const result = await uploadFile(mockFile, '1602'); expect(axios.post).toHaveBeenCalledWith( - '/api/v1/upload', + '/api/v1/accounts/1602/upload', expect.any(FormData), { headers: { 'Content-Type': 'multipart/form-data' } } ); diff --git a/app/javascript/dashboard/helper/uploadHelper.js b/app/javascript/dashboard/helper/uploadHelper.js index d2baa9e08..2a1b9d9cd 100644 --- a/app/javascript/dashboard/helper/uploadHelper.js +++ b/app/javascript/dashboard/helper/uploadHelper.js @@ -21,17 +21,25 @@ const HEADERS = { * @param {File} file - The file to be uploaded. It should be a File object (typically coming from a file input element). * @returns {Promise} A promise that resolves with the server's response when the upload is successful, or rejects if there's an error. */ -export async function uploadFile(file) { +export async function uploadFile(file, accountId) { // Create a new FormData instance. let formData = new FormData(); + if (!accountId) { + accountId = window.location.pathname.split('/')[3]; + } + // Append the file to the FormData instance under the key 'attachment'. formData.append('attachment', file); // Use axios to send a POST request to the upload endpoint. - const { data } = await axios.post(`/api/${API_VERSION}/upload`, formData, { - headers: HEADERS, - }); + const { data } = await axios.post( + `/api/${API_VERSION}/accounts/${accountId}/upload`, + formData, + { + headers: HEADERS, + } + ); return { fileUrl: data.file_url, diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb index 4993f304b..d67c7facd 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -138,8 +138,9 @@ class Rack::Attack end ## Prevent Abuse of attachment upload APIs ## - throttle('/api/v1/upload', limit: 60, period: 1.hour) do |req| - req.ip if req.path_without_extentions == '/api/v1/upload' && req.post? + throttle('/api/v1/accounts/:account_id/upload', limit: 60, period: 1.hour) do |req| + match_data = %r{/api/v1/accounts/(?\d+)/upload}.match(req.path) + match_data[:account_id] if match_data.present? end ## ----------------------------------------------- ## diff --git a/config/routes.rb b/config/routes.rb index 4748d18ca..424bfa630 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -217,13 +217,13 @@ Rails.application.routes.draw do post :reorder, on: :collection end end + + resources :upload, only: [:create] end end # end of account scoped api routes # ---------------------------------- - resources :upload, only: [:create] - namespace :integrations do resources :webhooks, only: [:create] end diff --git a/spec/controllers/api/v1/accounts/automation_rules_controller_spec.rb b/spec/controllers/api/v1/accounts/automation_rules_controller_spec.rb index 0cf41c6a2..e9858844a 100644 --- a/spec/controllers/api/v1/accounts/automation_rules_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/automation_rules_controller_spec.rb @@ -128,7 +128,7 @@ RSpec.describe 'Api::V1::Accounts::AutomationRulesController', type: :request do expect(account.automation_rules.count).to eq(0) - post '/api/v1/upload', + post "/api/v1/accounts/#{account.id}/upload/", headers: administrator.create_new_auth_token, params: { attachment: file } @@ -163,13 +163,13 @@ RSpec.describe 'Api::V1::Accounts::AutomationRulesController', type: :request do file_1 = fixture_file_upload(Rails.root.join('spec/assets/avatar.png'), 'image/png') file_2 = fixture_file_upload(Rails.root.join('spec/assets/sample.png'), 'image/png') - post '/api/v1/upload', + post "/api/v1/accounts/#{account.id}/upload/", headers: administrator.create_new_auth_token, params: { attachment: file_1 } blob_1 = response.parsed_body - post '/api/v1/upload', + post "/api/v1/accounts/#{account.id}/upload/", headers: administrator.create_new_auth_token, params: { attachment: file_2 } diff --git a/spec/controllers/api/v1/accounts/macros_controller_spec.rb b/spec/controllers/api/v1/accounts/macros_controller_spec.rb index 20667b3e7..5fb8fb2b4 100644 --- a/spec/controllers/api/v1/accounts/macros_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/macros_controller_spec.rb @@ -129,7 +129,7 @@ RSpec.describe 'Api::V1::Accounts::MacrosController', type: :request do it 'Saves file in the macros actions to send an attachments' do file = fixture_file_upload(Rails.root.join('spec/assets/avatar.png'), 'image/png') - post '/api/v1/upload', + post "/api/v1/accounts/#{account.id}/upload/", headers: administrator.create_new_auth_token, params: { attachment: file } diff --git a/spec/controllers/api/v1/upload_controller_spec.rb b/spec/controllers/api/v1/upload_controller_spec.rb index 279257dc3..0a5e758a3 100644 --- a/spec/controllers/api/v1/upload_controller_spec.rb +++ b/spec/controllers/api/v1/upload_controller_spec.rb @@ -1,14 +1,14 @@ require 'rails_helper' -RSpec.describe 'Api::V1::UploadController', type: :request do - describe 'POST /api/v1/upload/' do +RSpec.describe 'Api::V1::Accounts::UploadController', type: :request do + describe 'POST /api/v1/account/1/upload/' do let(:account) { create(:account) } let(:user) { create(:user, account: account) } it 'uploads the image when authorized' do file = fixture_file_upload(Rails.root.join('spec/assets/avatar.png'), 'image/png') - post '/api/v1/upload/', + post "/api/v1/accounts/#{account.id}/upload/", headers: user.create_new_auth_token, params: { attachment: file } @@ -25,7 +25,7 @@ RSpec.describe 'Api::V1::UploadController', type: :request do it 'does not upload when un-authorized' do file = fixture_file_upload(Rails.root.join('spec/assets/avatar.png'), 'image/png') - post '/api/v1/upload/', + post "/api/v1/accounts/#{account.id}/upload/", headers: {}, params: { attachment: file } From 0968aead6ccbff8e506041cf8781200a1953778c Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Mon, 18 Sep 2023 22:01:41 -0700 Subject: [PATCH 03/23] chore: Migration status in super admin (#7938) --- app/controllers/super_admin/instance_statuses_controller.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/controllers/super_admin/instance_statuses_controller.rb b/app/controllers/super_admin/instance_statuses_controller.rb index 7f43e63ca..a1dc458ae 100644 --- a/app/controllers/super_admin/instance_statuses_controller.rb +++ b/app/controllers/super_admin/instance_statuses_controller.rb @@ -6,6 +6,7 @@ class SuperAdmin::InstanceStatusesController < SuperAdmin::ApplicationController postgres_status redis_metrics chatwoot_edition + instance_meta end def chatwoot_edition @@ -18,6 +19,10 @@ class SuperAdmin::InstanceStatusesController < SuperAdmin::ApplicationController end end + def instance_meta + @metrics['Database Migrations'] = ActiveRecord::Base.connection.migration_context.needs_migration? ? 'pending' : 'completed' + end + def chatwoot_version @metrics['Chatwoot version'] = Chatwoot.config[:version] end From 0dd5104acb4f369d2fa02a17114175bb30647cba Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Tue, 19 Sep 2023 11:09:23 +0530 Subject: [PATCH 04/23] chore: Move slack message concern to the helper (#7912) --- lib/integrations/slack/incoming_message_builder.rb | 2 +- .../integrations/slack/slack_message_helper.rb | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) rename app/models/concerns/slack_message_creation.rb => lib/integrations/slack/slack_message_helper.rb (96%) diff --git a/lib/integrations/slack/incoming_message_builder.rb b/lib/integrations/slack/incoming_message_builder.rb index f20bb8d44..68bfa6e0b 100644 --- a/lib/integrations/slack/incoming_message_builder.rb +++ b/lib/integrations/slack/incoming_message_builder.rb @@ -1,5 +1,5 @@ class Integrations::Slack::IncomingMessageBuilder - include SlackMessageCreation + include Integrations::Slack::SlackMessageHelper attr_reader :params SUPPORTED_EVENT_TYPES = %w[event_callback url_verification].freeze diff --git a/app/models/concerns/slack_message_creation.rb b/lib/integrations/slack/slack_message_helper.rb similarity index 96% rename from app/models/concerns/slack_message_creation.rb rename to lib/integrations/slack/slack_message_helper.rb index a6a59ccf7..c4e16cbaf 100644 --- a/app/models/concerns/slack_message_creation.rb +++ b/lib/integrations/slack/slack_message_helper.rb @@ -1,8 +1,4 @@ -module SlackMessageCreation - extend ActiveSupport::Concern - - private - +module Integrations::Slack::SlackMessageHelper def create_message return unless conversation From 9ba5adfd60ce1399cd14a2453669554940a4d96c Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Tue, 19 Sep 2023 00:34:58 -0700 Subject: [PATCH 05/23] chore: Support multiple values for automation message content (#7871) Co-authored-by: Pranav Raj S Co-authored-by: Muhsin Keloth --- .../dashboard/helper/filterQueryGenerator.js | 31 ++++++++---- .../mixins/automations/methodsMixin.js | 6 +++ .../automation/EditAutomationRule.vue | 4 +- .../settings/automation/constants.js | 2 +- app/services/filter_service.rb | 21 +++++++-- .../conversations/filter_service_spec.rb | 47 +++++++++++++++++-- 6 files changed, 90 insertions(+), 21 deletions(-) diff --git a/app/javascript/dashboard/helper/filterQueryGenerator.js b/app/javascript/dashboard/helper/filterQueryGenerator.js index d70a30a6b..b2eff3d84 100644 --- a/app/javascript/dashboard/helper/filterQueryGenerator.js +++ b/app/javascript/dashboard/helper/filterQueryGenerator.js @@ -1,21 +1,34 @@ const setArrayValues = item => { return item.values[0]?.id ? item.values.map(val => val.id) : item.values; }; + +const generateValues = item => { + if (item.attribute_key === 'content') { + const values = item.values || ''; + return values.split(','); + } + if (Array.isArray(item.values)) { + return setArrayValues(item); + } + if (typeof item.values === 'object') { + return [item.values.id]; + } + if (!item.values) { + return []; + } + return [item.values]; +}; + const generatePayload = data => { // Make a copy of data to avoid vue data reactivity issues const filters = JSON.parse(JSON.stringify(data)); let payload = filters.map(item => { - if (Array.isArray(item.values)) { - item.values = setArrayValues(item); - } else if (typeof item.values === 'object') { - item.values = [item.values.id]; - } else if (!item.values) { - item.values = []; - } else { - item.values = [item.values]; - } + // If item key is content, we will split it using comma and return as array + // FIX ME: Make this generic option instead of using the key directly here + item.values = generateValues(item); return item; }); + // For every query added, the query_operator is set default to and so the // last query will have an extra query_operator, this would break the api. // Setting this to null for all query payload diff --git a/app/javascript/dashboard/mixins/automations/methodsMixin.js b/app/javascript/dashboard/mixins/automations/methodsMixin.js index 611d5ad38..723cef22c 100644 --- a/app/javascript/dashboard/mixins/automations/methodsMixin.js +++ b/app/javascript/dashboard/mixins/automations/methodsMixin.js @@ -199,6 +199,12 @@ export default { values: condition.values[0], }; } + if (inputType === 'comma_separated_plain_text') { + return { + ...condition, + values: condition.values.join(','), + }; + } return { ...condition, query_operator: condition.query_operator || 'and', diff --git a/app/javascript/dashboard/routes/dashboard/settings/automation/EditAutomationRule.vue b/app/javascript/dashboard/routes/dashboard/settings/automation/EditAutomationRule.vue index 74dac7cf9..3ac454868 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/automation/EditAutomationRule.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/automation/EditAutomationRule.vue @@ -52,7 +52,7 @@ {{ $t('AUTOMATION.ADD.FORM.CONDITIONS.LABEL') }}
> 'browser_language' IN (?) AND status IN (?)", ['en'], [1, 2]) - expect(result.length).to be conversations.count + expect(result[:count][:all_count]).to be conversations.count end it 'filter conversations by additional_attributes and status with pagination' do @@ -83,7 +82,45 @@ describe Conversations::FilterService do params[:page] = 2 result = filter_service.new(params, user_1).perform conversations = Conversation.where("additional_attributes ->> 'browser_language' IN (?) AND status IN (?)", ['en'], [1, 2]) - expect(result.length).to be conversations.count + expect(result[:count][:all_count]).to be conversations.count + end + + it 'filters items with contains filter_operator with values being an array' do + params[:payload] = [{ + attribute_key: 'browser_language', + filter_operator: 'contains', + values: %w[tr fr], + query_operator: '', + custom_attribute_type: '' + }.with_indifferent_access] + + create(:conversation, account: account, inbox: inbox, assignee: user_1, campaign_id: campaign_1.id, + status: 'pending', additional_attributes: { 'browser_language': 'fr' }) + create(:conversation, account: account, inbox: inbox, assignee: user_1, campaign_id: campaign_1.id, + status: 'pending', additional_attributes: { 'browser_language': 'tr' }) + + result = filter_service.new(params, user_1).perform + expect(result[:count][:all_count]).to be 2 + end + + it 'filters items with does not contain filter operator with values being an array' do + params[:payload] = [{ + attribute_key: 'browser_language', + filter_operator: 'does_not_contain', + values: %w[tr en], + query_operator: '', + custom_attribute_type: '' + }.with_indifferent_access] + + create(:conversation, account: account, inbox: inbox, assignee: user_1, campaign_id: campaign_1.id, + status: 'pending', additional_attributes: { 'browser_language': 'fr' }) + create(:conversation, account: account, inbox: inbox, assignee: user_1, campaign_id: campaign_1.id, + status: 'pending', additional_attributes: { 'browser_language': 'tr' }) + + result = filter_service.new(params, user_1).perform + + expect(result[:count][:all_count]).to be 1 + expect(result[:conversations].first.additional_attributes['browser_language']).to eq 'fr' end it 'filter conversations by additional_attributes with NOT_IN filter' do @@ -98,7 +135,7 @@ describe Conversations::FilterService do end it 'filter conversations by tags' do - unassigned_conversation.update_labels('support') + user_2_assigned_conversation.update_labels('support') params[:payload] = [ { attribute_key: 'assignee_id', @@ -119,7 +156,7 @@ describe Conversations::FilterService do }.with_indifferent_access ] result = filter_service.new(params, user_1).perform - expect(result.length).to be 2 + expect(result[:count][:all_count]).to be 1 end it 'filter conversations by is_present filter_operator' do From f8cb806548387fcaaa0eb9635a12a2b6361299b3 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 19 Sep 2023 13:29:44 +0530 Subject: [PATCH 06/23] fix: remove trailing spaces before pushing signature (#7935) Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> --- app/javascript/dashboard/helper/editorHelper.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/javascript/dashboard/helper/editorHelper.js b/app/javascript/dashboard/helper/editorHelper.js index 31d070732..52f87c214 100644 --- a/app/javascript/dashboard/helper/editorHelper.js +++ b/app/javascript/dashboard/helper/editorHelper.js @@ -4,13 +4,26 @@ */ export const SIGNATURE_DELIMITER = '--'; +/** + * Remove trailing spaces from each line in a markdown text + * @param {string} markdownText + * @returns + */ +function removeTrailingSpaces(markdownText) { + return markdownText + .split('\n') + .map(line => line.replace(/\s+$/, '')) + .join('\n'); +} + /** * Trim the signature and remove all " \r" from the signature * 1. Trim any extra lines or spaces at the start or end of the string * 2. Converts all \r or \r\n to \f */ export function cleanSignature(signature) { - return signature.trim().replace(/\r\n?/g, '\n'); + const cleaned = signature.trim().replace(/\r\n?/g, '\n'); + return removeTrailingSpaces(cleaned); } /** From 0ad2f941515afbe35ec4a05c68b7e249ca497c4f Mon Sep 17 00:00:00 2001 From: Smit Bosamiya <72661516+smtbos@users.noreply.github.com> Date: Wed, 20 Sep 2023 09:46:11 +0530 Subject: [PATCH 07/23] fix: Error when attempting to Delete User-Associated Accounts via Super Admin Console (#7810) This pull request addresses the issue where an error is encountered while attempting to delete user-associated accounts through the Super Admin Console. The problem arises from an error that occurs when the "destroy" action is triggered on an associated account. Fixes: #7809 --- app/views/super_admin/users/_collection.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/super_admin/users/_collection.html.erb b/app/views/super_admin/users/_collection.html.erb index 512624daa..9297d6d98 100644 --- a/app/views/super_admin/users/_collection.html.erb +++ b/app/views/super_admin/users/_collection.html.erb @@ -83,7 +83,7 @@ to display a collection of resources in an HTML table. <% if existing_action? collection_presenter.resource_name, :destroy %> <%= link_to( t("administrate.actions.destroy"), - [namespace, resource.becomes(User)], + [namespace, collection_presenter.resource_name == 'account_user' ? resource : resource.becomes(User)], class: "text-color-red", method: :delete, data: { confirm: t("administrate.actions.confirm") } From 73c119cd3df110202c4ebd6e8cd53fb59cec75c8 Mon Sep 17 00:00:00 2001 From: Chatwoot Bot <92152627+chatwoot-bot@users.noreply.github.com> Date: Wed, 20 Sep 2023 09:49:46 +0530 Subject: [PATCH 08/23] chore: Update translations (#7937) --- .../i18n/locale/pt/generalSettings.json | 2 +- .../dashboard/i18n/locale/pt/settings.json | 4 +-- app/javascript/widget/i18n/locale/am.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ar.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/bg.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ca.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/cs.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/da.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/de.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/el.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/es.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/fa.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/fi.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/fr.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/he.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/hi.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/hr.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/hu.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/hy.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/id.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/is.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/it.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ja.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ka.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ko.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/lt.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/lv.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ml.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ms.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ne.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/nl.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/no.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/pl.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/pt.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/pt_BR.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ro.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ru.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/sh.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/sk.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/sl.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/sr.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/sv.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ta.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/th.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/tr.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/uk.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ur.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/ur_IN.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/vi.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/zh_CN.json | 25 ++++++++++++++++++- app/javascript/widget/i18n/locale/zh_TW.json | 25 ++++++++++++++++++- config/locales/tr.yml | 22 ++++++++-------- config/locales/zh_TW.yml | 6 ++--- 53 files changed, 1193 insertions(+), 66 deletions(-) diff --git a/app/javascript/dashboard/i18n/locale/pt/generalSettings.json b/app/javascript/dashboard/i18n/locale/pt/generalSettings.json index 85ad409fa..004ad171c 100644 --- a/app/javascript/dashboard/i18n/locale/pt/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/pt/generalSettings.json @@ -110,7 +110,7 @@ "SNOOZE_CONVERSATION": "Adiar Conversa", "ADD_LABEL": "Adicionar etiqueta à conversa", "REMOVE_LABEL": "Remover etiqueta da conversa", - "SETTINGS": "Confirgurações", + "SETTINGS": "Configurações", "AI_ASSIST": "Assistente IA", "APPEARANCE": "Aspeto" }, diff --git a/app/javascript/dashboard/i18n/locale/pt/settings.json b/app/javascript/dashboard/i18n/locale/pt/settings.json index f36f68d85..6637e5ac3 100644 --- a/app/javascript/dashboard/i18n/locale/pt/settings.json +++ b/app/javascript/dashboard/i18n/locale/pt/settings.json @@ -40,8 +40,8 @@ "BTN_TEXT": "Salvar assinatura da mensagem", "API_ERROR": "Não foi possível salvar a assinatura! Tente novamente", "API_SUCCESS": "Assinatura salva com sucesso", - "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", - "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_ERROR": "Não foi possível carregar a imagem! Tente novamente", + "IMAGE_UPLOAD_SUCCESS": "Imagem adicionada. Clique em salvar para salvar a assinatura", "IMAGE_UPLOAD_SIZE_ERROR": "O tamanho da imagem deve ser inferior a {size}MB" }, "MESSAGE_SIGNATURE": { diff --git a/app/javascript/widget/i18n/locale/am.json b/app/javascript/widget/i18n/locale/am.json index e5fb85643..3a1f51ccf 100644 --- a/app/javascript/widget/i18n/locale/am.json +++ b/app/javascript/widget/i18n/locale/am.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/ar.json b/app/javascript/widget/i18n/locale/ar.json index b034da5a4..de9c575f0 100644 --- a/app/javascript/widget/i18n/locale/ar.json +++ b/app/javascript/widget/i18n/locale/ar.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "ابدأ المحادثة", "END_CONVERSATION": "إنهاء المحادثة", "CONTINUE_CONVERSATION": "متابعة المحادثة", + "YOU": "You", "START_NEW_CONVERSATION": "ابدأ محادثة جديدة", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "عرض الرسائل الجديدة", "CLOSE_MESSAGES_BUTTON": "أغلق", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "رسالة صورة" + }, + "audio": { + "CONTENT": "رسالة صوتية" + }, + "video": { + "CONTENT": "رسالة فيديو" + }, + "file": { + "CONTENT": "مرفقات" + }, + "location": { + "CONTENT": "الموقع الجغرافي" + }, + "fallback": { + "CONTENT": "قام بمشاركة رابط" + } } } diff --git a/app/javascript/widget/i18n/locale/bg.json b/app/javascript/widget/i18n/locale/bg.json index dd84f558d..0543f20c5 100644 --- a/app/javascript/widget/i18n/locale/bg.json +++ b/app/javascript/widget/i18n/locale/bg.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Започнете разговор", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Започнете нов разговор", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Вижте новите съобщения", "CLOSE_MESSAGES_BUTTON": "Затвори", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Съобщение със снимка" + }, + "audio": { + "CONTENT": "Аудио съобщение" + }, + "video": { + "CONTENT": "Видео съобщение" + }, + "file": { + "CONTENT": "Прикачен файл" + }, + "location": { + "CONTENT": "Локация" + }, + "fallback": { + "CONTENT": "сподели линк" + } } } diff --git a/app/javascript/widget/i18n/locale/ca.json b/app/javascript/widget/i18n/locale/ca.json index 48d17ea16..492737e85 100644 --- a/app/javascript/widget/i18n/locale/ca.json +++ b/app/javascript/widget/i18n/locale/ca.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Inicia la conversa", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Veure missatges nous", "CLOSE_MESSAGES_BUTTON": "Tanca", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Missatge d'imatge" + }, + "audio": { + "CONTENT": "Missatge d'àudio" + }, + "video": { + "CONTENT": "Missatge de vídeo" + }, + "file": { + "CONTENT": "Fitxer adjunt" + }, + "location": { + "CONTENT": "Ubicació" + }, + "fallback": { + "CONTENT": "ha compartit una URL" + } } } diff --git a/app/javascript/widget/i18n/locale/cs.json b/app/javascript/widget/i18n/locale/cs.json index 4327daac9..00bad18d4 100644 --- a/app/javascript/widget/i18n/locale/cs.json +++ b/app/javascript/widget/i18n/locale/cs.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Zahájit konverzaci", "END_CONVERSATION": "Ukončit konverzaci", "CONTINUE_CONVERSATION": "Pokračovat v konverzaci", + "YOU": "You", "START_NEW_CONVERSATION": "Zahájit novou konverzaci", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Zobrazit nové zprávy", "CLOSE_MESSAGES_BUTTON": "Zavřít", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Zpráva obrázku" + }, + "audio": { + "CONTENT": "Zvuková zpráva" + }, + "video": { + "CONTENT": "Video zpráva" + }, + "file": { + "CONTENT": "Přílohu souboru" + }, + "location": { + "CONTENT": "Poloha" + }, + "fallback": { + "CONTENT": "sdílel URL" + } } } diff --git a/app/javascript/widget/i18n/locale/da.json b/app/javascript/widget/i18n/locale/da.json index 522b5afc2..9a173825d 100644 --- a/app/javascript/widget/i18n/locale/da.json +++ b/app/javascript/widget/i18n/locale/da.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Samtale", "END_CONVERSATION": "Afslut Samtale", "CONTINUE_CONVERSATION": "Fortsæt samtale", + "YOU": "You", "START_NEW_CONVERSATION": "Start en ny samtale", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Se nye beskeder", "CLOSE_MESSAGES_BUTTON": "Luk", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Billedbesked" + }, + "audio": { + "CONTENT": "Lydbesked" + }, + "video": { + "CONTENT": "Video besked" + }, + "file": { + "CONTENT": "Fil Vedhæftning" + }, + "location": { + "CONTENT": "Lokation" + }, + "fallback": { + "CONTENT": "har delt en URL" + } } } diff --git a/app/javascript/widget/i18n/locale/de.json b/app/javascript/widget/i18n/locale/de.json index 07b6c878c..cca79454d 100644 --- a/app/javascript/widget/i18n/locale/de.json +++ b/app/javascript/widget/i18n/locale/de.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Unterhaltung beginnen", "END_CONVERSATION": "Konversation beenden", "CONTINUE_CONVERSATION": "Konversation fortsetzen", + "YOU": "You", "START_NEW_CONVERSATION": "Neue Unterhaltung starten", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Neue Nachrichten anzeigen", "CLOSE_MESSAGES_BUTTON": "Schließen", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Alle Artikel anzeigen" + "VIEW_ALL_ARTICLES": "Alle Artikel anzeigen", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Bildnachricht" + }, + "audio": { + "CONTENT": "Audio-Nachricht" + }, + "video": { + "CONTENT": "Videonachricht" + }, + "file": { + "CONTENT": "Dateianhang" + }, + "location": { + "CONTENT": "Ort" + }, + "fallback": { + "CONTENT": "hat eine URL geteilt" + } } } diff --git a/app/javascript/widget/i18n/locale/el.json b/app/javascript/widget/i18n/locale/el.json index df83e7299..1e07d9aa6 100644 --- a/app/javascript/widget/i18n/locale/el.json +++ b/app/javascript/widget/i18n/locale/el.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Έναρξη Συνομιλίας", "END_CONVERSATION": "Τέλος Συνομιλίας", "CONTINUE_CONVERSATION": "Συνέχιση συνομιλίας", + "YOU": "You", "START_NEW_CONVERSATION": "Έναρξη νέας συνομιλίας", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Δείτε τα νέα μηνύματα", "CLOSE_MESSAGES_BUTTON": "Κλείσιμο", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Μήνυμα εικόνας" + }, + "audio": { + "CONTENT": "Μήνυμα ήχου" + }, + "video": { + "CONTENT": "Μήνυμα βίντεο" + }, + "file": { + "CONTENT": "Επισυναπτόμενο αρχείο" + }, + "location": { + "CONTENT": "Θέση" + }, + "fallback": { + "CONTENT": "έχει μοιράσει ένα σύνδεσμο" + } } } diff --git a/app/javascript/widget/i18n/locale/es.json b/app/javascript/widget/i18n/locale/es.json index 9a4dbf984..bfd345ca7 100644 --- a/app/javascript/widget/i18n/locale/es.json +++ b/app/javascript/widget/i18n/locale/es.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Iniciar conversación", "END_CONVERSATION": "Finalizar conversación", "CONTINUE_CONVERSATION": "Continuar conversación", + "YOU": "You", "START_NEW_CONVERSATION": "Iniciar una nueva conversación", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Ver nuevos mensajes", "CLOSE_MESSAGES_BUTTON": "Cerrar", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Artículos populares", - "VIEW_ALL_ARTICLES": "Ver todos los artículos" + "VIEW_ALL_ARTICLES": "Ver todos los artículos", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Mensaje de imagen" + }, + "audio": { + "CONTENT": "Mensaje de audio" + }, + "video": { + "CONTENT": "Mensaje de vídeo" + }, + "file": { + "CONTENT": "Archivo adjunto" + }, + "location": { + "CONTENT": "Ubicación" + }, + "fallback": { + "CONTENT": "ha compartido una url" + } } } diff --git a/app/javascript/widget/i18n/locale/fa.json b/app/javascript/widget/i18n/locale/fa.json index 538e1efb8..00189a16d 100644 --- a/app/javascript/widget/i18n/locale/fa.json +++ b/app/javascript/widget/i18n/locale/fa.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "شروع گفتگو", "END_CONVERSATION": "پایان گفتگو", "CONTINUE_CONVERSATION": "ادامه گفتگو", + "YOU": "شما", "START_NEW_CONVERSATION": "یک مکالمه جدید را شروع کنید", + "VIEW_UNREAD_MESSAGES": "شما پیام خوانده نشده دارید", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "مشاهده پیام‌های جدید", "CLOSE_MESSAGES_BUTTON": "بستن", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "مشاهده همه مقالات" + "VIEW_ALL_ARTICLES": "مشاهده همه مقالات", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "پیام تصویری" + }, + "audio": { + "CONTENT": "پیام صوتی" + }, + "video": { + "CONTENT": "پیام ویدیویی" + }, + "file": { + "CONTENT": "فایل الصاقی" + }, + "location": { + "CONTENT": "مکان" + }, + "fallback": { + "CONTENT": "یک آدرس URL به اشتراک گذاشته شده" + } } } diff --git a/app/javascript/widget/i18n/locale/fi.json b/app/javascript/widget/i18n/locale/fi.json index 66f7886e3..8e522cda6 100644 --- a/app/javascript/widget/i18n/locale/fi.json +++ b/app/javascript/widget/i18n/locale/fi.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Aloita keskustelu", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Näytä uudet viestit", "CLOSE_MESSAGES_BUTTON": "Sulje", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Kuvaviesti" + }, + "audio": { + "CONTENT": "Ääniviesti" + }, + "video": { + "CONTENT": "Videoviesti" + }, + "file": { + "CONTENT": "Liite" + }, + "location": { + "CONTENT": "Sijainti" + }, + "fallback": { + "CONTENT": "on jakanut URL-osoitteen" + } } } diff --git a/app/javascript/widget/i18n/locale/fr.json b/app/javascript/widget/i18n/locale/fr.json index 1666751b5..88c9067f5 100644 --- a/app/javascript/widget/i18n/locale/fr.json +++ b/app/javascript/widget/i18n/locale/fr.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Démarrer la conversation", "END_CONVERSATION": "Clôturer la conversation", "CONTINUE_CONVERSATION": "Continuer la conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Démarrer une nouvelle conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Voir les nouveaux messages", "CLOSE_MESSAGES_BUTTON": "Fermer", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Voir tous les articles" + "VIEW_ALL_ARTICLES": "Voir tous les articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Message image" + }, + "audio": { + "CONTENT": "Message audio" + }, + "video": { + "CONTENT": "Message vidéo" + }, + "file": { + "CONTENT": "Pièce jointe" + }, + "location": { + "CONTENT": "Localisation" + }, + "fallback": { + "CONTENT": "a partagé une URL" + } } } diff --git a/app/javascript/widget/i18n/locale/he.json b/app/javascript/widget/i18n/locale/he.json index c863b3bea..d746e2c08 100644 --- a/app/javascript/widget/i18n/locale/he.json +++ b/app/javascript/widget/i18n/locale/he.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "התחל שיחה", "END_CONVERSATION": "סיים שיחה", "CONTINUE_CONVERSATION": "המשך שיחה", + "YOU": "You", "START_NEW_CONVERSATION": "התחל שיחה חדשה", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "ראה הודעות חדשות", "CLOSE_MESSAGES_BUTTON": "סגור", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "הודעת תמונה" + }, + "audio": { + "CONTENT": "הודעות קוליות" + }, + "video": { + "CONTENT": "הודעות וידאו" + }, + "file": { + "CONTENT": "קובץ מצורף" + }, + "location": { + "CONTENT": "מיקום" + }, + "fallback": { + "CONTENT": "שיתף קישור" + } } } diff --git a/app/javascript/widget/i18n/locale/hi.json b/app/javascript/widget/i18n/locale/hi.json index e5fb85643..3a1f51ccf 100644 --- a/app/javascript/widget/i18n/locale/hi.json +++ b/app/javascript/widget/i18n/locale/hi.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/hr.json b/app/javascript/widget/i18n/locale/hr.json index 5d41dc2eb..da2a64a6e 100644 --- a/app/javascript/widget/i18n/locale/hr.json +++ b/app/javascript/widget/i18n/locale/hr.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/hu.json b/app/javascript/widget/i18n/locale/hu.json index fe986fe80..a974ba860 100644 --- a/app/javascript/widget/i18n/locale/hu.json +++ b/app/javascript/widget/i18n/locale/hu.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Beszélgetés megkezdése", "END_CONVERSATION": "Beszélgetés befejezése", "CONTINUE_CONVERSATION": "Beszélgetés folytatása", + "YOU": "You", "START_NEW_CONVERSATION": "Új beszélgetés megkezdése", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Új üzenetek", "CLOSE_MESSAGES_BUTTON": "Bezárás", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Mutasd az összes bejegyzést" + "VIEW_ALL_ARTICLES": "Mutasd az összes bejegyzést", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Képüzenet" + }, + "audio": { + "CONTENT": "Hangüzenet" + }, + "video": { + "CONTENT": "Videoüzenet" + }, + "file": { + "CONTENT": "Csatolt file" + }, + "location": { + "CONTENT": "Hely" + }, + "fallback": { + "CONTENT": "megosztott URL-t tartalmaz" + } } } diff --git a/app/javascript/widget/i18n/locale/hy.json b/app/javascript/widget/i18n/locale/hy.json index e5fb85643..3a1f51ccf 100644 --- a/app/javascript/widget/i18n/locale/hy.json +++ b/app/javascript/widget/i18n/locale/hy.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/id.json b/app/javascript/widget/i18n/locale/id.json index 92b3fa718..b0ff95387 100644 --- a/app/javascript/widget/i18n/locale/id.json +++ b/app/javascript/widget/i18n/locale/id.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Mulai Percakapan", "END_CONVERSATION": "Akhiri Percakapan", "CONTINUE_CONVERSATION": "Lanjutkan Percakapan", + "YOU": "You", "START_NEW_CONVERSATION": "Mulai Percakapan", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Lihat pesan baru", "CLOSE_MESSAGES_BUTTON": "Tutup", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Lihat semua artikel" + "VIEW_ALL_ARTICLES": "Lihat semua artikel", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Pesan gambar" + }, + "audio": { + "CONTENT": "Pesan audio" + }, + "video": { + "CONTENT": "Pesan video" + }, + "file": { + "CONTENT": "Lampiran File" + }, + "location": { + "CONTENT": "Lokasi" + }, + "fallback": { + "CONTENT": "telah membagikan url" + } } } diff --git a/app/javascript/widget/i18n/locale/is.json b/app/javascript/widget/i18n/locale/is.json index e1a877118..94fc39330 100644 --- a/app/javascript/widget/i18n/locale/is.json +++ b/app/javascript/widget/i18n/locale/is.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Hefja samtal", "END_CONVERSATION": "Ljúka samtali", "CONTINUE_CONVERSATION": "Halda samtali áfram", + "YOU": "You", "START_NEW_CONVERSATION": "Hefja nýtt samtal", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Sjá nýjustu skilaboð", "CLOSE_MESSAGES_BUTTON": "Loka", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Myndaskilaboð" + }, + "audio": { + "CONTENT": "Hljóðskilaboð" + }, + "video": { + "CONTENT": "Myndbandsskilaboð" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Staðsetning" + }, + "fallback": { + "CONTENT": "hefur deilt vefslóð" + } } } diff --git a/app/javascript/widget/i18n/locale/it.json b/app/javascript/widget/i18n/locale/it.json index ff636db96..0c5fc02c0 100644 --- a/app/javascript/widget/i18n/locale/it.json +++ b/app/javascript/widget/i18n/locale/it.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Avvia conversazione", "END_CONVERSATION": "Termina conversazione", "CONTINUE_CONVERSATION": "Continua conversazione", + "YOU": "You", "START_NEW_CONVERSATION": "Avvia una nuova conversazione", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Vedi i nuovi messaggi", "CLOSE_MESSAGES_BUTTON": "Chiudi", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Messaggio immagine" + }, + "audio": { + "CONTENT": "Messaggio audio" + }, + "video": { + "CONTENT": "Messaggio video" + }, + "file": { + "CONTENT": "File allegato" + }, + "location": { + "CONTENT": "Posizione" + }, + "fallback": { + "CONTENT": "ha condiviso un url" + } } } diff --git a/app/javascript/widget/i18n/locale/ja.json b/app/javascript/widget/i18n/locale/ja.json index 3e97506d4..f293ceaf5 100644 --- a/app/javascript/widget/i18n/locale/ja.json +++ b/app/javascript/widget/i18n/locale/ja.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "チャットを開始する", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "新しいメッセージを見る", "CLOSE_MESSAGES_BUTTON": "閉じる", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "画像メッセージ" + }, + "audio": { + "CONTENT": "音声メッセージ" + }, + "video": { + "CONTENT": "ビデオ メッセージ" + }, + "file": { + "CONTENT": "添付ファイル" + }, + "location": { + "CONTENT": "場所" + }, + "fallback": { + "CONTENT": "URLを共有しています" + } } } diff --git a/app/javascript/widget/i18n/locale/ka.json b/app/javascript/widget/i18n/locale/ka.json index e5fb85643..3a1f51ccf 100644 --- a/app/javascript/widget/i18n/locale/ka.json +++ b/app/javascript/widget/i18n/locale/ka.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/ko.json b/app/javascript/widget/i18n/locale/ko.json index 644a897a5..c8040f8ef 100644 --- a/app/javascript/widget/i18n/locale/ko.json +++ b/app/javascript/widget/i18n/locale/ko.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "대화 시작", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "새 메시지 보기", "CLOSE_MESSAGES_BUTTON": "닫기", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "사진 메시지" + }, + "audio": { + "CONTENT": "음성 메시지" + }, + "video": { + "CONTENT": "영상 메시지" + }, + "file": { + "CONTENT": "파일 첨부" + }, + "location": { + "CONTENT": "장소" + }, + "fallback": { + "CONTENT": "URL을 공유함" + } } } diff --git a/app/javascript/widget/i18n/locale/lt.json b/app/javascript/widget/i18n/locale/lt.json index 2c7eb089d..818a852e6 100644 --- a/app/javascript/widget/i18n/locale/lt.json +++ b/app/javascript/widget/i18n/locale/lt.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Pradėti Pokalbį", "END_CONVERSATION": "Užbaigti Pokalbį", "CONTINUE_CONVERSATION": "Tęsti pokalbį", + "YOU": "You", "START_NEW_CONVERSATION": "Pradėti naują pokalbį", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Žiūrėti naujus pranešimus", "CLOSE_MESSAGES_BUTTON": "Uždaryti", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Žiūrėti visus straipsnius" + "VIEW_ALL_ARTICLES": "Žiūrėti visus straipsnius", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Vaizdinė žinutė" + }, + "audio": { + "CONTENT": "Garso žinutė" + }, + "video": { + "CONTENT": "Video žinutė" + }, + "file": { + "CONTENT": "Failas pridėtas" + }, + "location": { + "CONTENT": "Vieta" + }, + "fallback": { + "CONTENT": "pasidalino URL" + } } } diff --git a/app/javascript/widget/i18n/locale/lv.json b/app/javascript/widget/i18n/locale/lv.json index 404bc3813..1107ed7f6 100644 --- a/app/javascript/widget/i18n/locale/lv.json +++ b/app/javascript/widget/i18n/locale/lv.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Sākt Sarunu", "END_CONVERSATION": "Beigt Sarunu", "CONTINUE_CONVERSATION": "Turpināt Sarunu", + "YOU": "Jūs", "START_NEW_CONVERSATION": "Sākt jaunu sarunu", + "VIEW_UNREAD_MESSAGES": "Jums ir nelasītas ziņas", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Skatīt jaunus ziņojumus", "CLOSE_MESSAGES_BUTTON": "Aizvērt", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Populāri Raksti", - "VIEW_ALL_ARTICLES": "Skatīt visus rakstus" + "VIEW_ALL_ARTICLES": "Skatīt visus rakstus", + "IFRAME_LOAD_ERROR": "Ielādējot rakstu radās kļūda. Lūdzu, atsvaidziniet lapu un mēģiniet vēlreiz." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Attēla ziņojums" + }, + "audio": { + "CONTENT": "Audio ziņojums" + }, + "video": { + "CONTENT": "Video ziņojums" + }, + "file": { + "CONTENT": "Faila pielikums" + }, + "location": { + "CONTENT": "Atrašanās vieta" + }, + "fallback": { + "CONTENT": "ir kopīgojis URL" + } } } diff --git a/app/javascript/widget/i18n/locale/ml.json b/app/javascript/widget/i18n/locale/ml.json index 35292159c..16d5adabb 100644 --- a/app/javascript/widget/i18n/locale/ml.json +++ b/app/javascript/widget/i18n/locale/ml.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "സംഭാഷണം ആരംഭിക്കുക", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "ഒരു പുതിയ സംഭാഷണം ആരംഭിക്കുക", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "പുതിയ സന്ദേശങ്ങൾ കാണുക", "CLOSE_MESSAGES_BUTTON": "അടയ്ക്കുക", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "ചിത്ര സന്ദേശം" + }, + "audio": { + "CONTENT": "ഓഡിയോ സന്ദേശം" + }, + "video": { + "CONTENT": "വീഡിയോ സന്ദേശം" + }, + "file": { + "CONTENT": "ഫയൽ അറ്റാച്ചുമെന്റ്" + }, + "location": { + "CONTENT": "സ്ഥാനം" + }, + "fallback": { + "CONTENT": "ഒരു യു. ആർ. എൽ പങ്കിട്ടു" + } } } diff --git a/app/javascript/widget/i18n/locale/ms.json b/app/javascript/widget/i18n/locale/ms.json index 11c79d513..847d373b3 100644 --- a/app/javascript/widget/i18n/locale/ms.json +++ b/app/javascript/widget/i18n/locale/ms.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/ne.json b/app/javascript/widget/i18n/locale/ne.json index bfd211dfd..c3effd10a 100644 --- a/app/javascript/widget/i18n/locale/ne.json +++ b/app/javascript/widget/i18n/locale/ne.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "कुराकानी सुरु गर्नुहोस्", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "नयाँ सन्देशहरू हेर्नुहोस्", "CLOSE_MESSAGES_BUTTON": "बन्दा गार्नुहोस्", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/nl.json b/app/javascript/widget/i18n/locale/nl.json index 1d69938e9..a4e4b1145 100644 --- a/app/javascript/widget/i18n/locale/nl.json +++ b/app/javascript/widget/i18n/locale/nl.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Chat", "END_CONVERSATION": "Gesprek beëindigen", "CONTINUE_CONVERSATION": "Verdergaan met gesprek", + "YOU": "You", "START_NEW_CONVERSATION": "Een nieuw gesprek starten", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Bekijk nieuwe berichten", "CLOSE_MESSAGES_BUTTON": "Sluiten", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Populaire artikelen", - "VIEW_ALL_ARTICLES": "Bekijk alle artikelen" + "VIEW_ALL_ARTICLES": "Bekijk alle artikelen", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Bericht met foto" + }, + "audio": { + "CONTENT": "Audiobericht" + }, + "video": { + "CONTENT": "Videobericht" + }, + "file": { + "CONTENT": "Bestandsbijlage" + }, + "location": { + "CONTENT": "Locatie" + }, + "fallback": { + "CONTENT": "heeft een url gedeeld" + } } } diff --git a/app/javascript/widget/i18n/locale/no.json b/app/javascript/widget/i18n/locale/no.json index dac42fa8e..547400fa2 100644 --- a/app/javascript/widget/i18n/locale/no.json +++ b/app/javascript/widget/i18n/locale/no.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start samtale", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start en ny samtale", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Se nye meldinger", "CLOSE_MESSAGES_BUTTON": "Lukk", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Bildemelding" + }, + "audio": { + "CONTENT": "Lydmelding" + }, + "video": { + "CONTENT": "Video beskjed" + }, + "file": { + "CONTENT": "Vedlegg" + }, + "location": { + "CONTENT": "Plassering" + }, + "fallback": { + "CONTENT": "har delt en URL" + } } } diff --git a/app/javascript/widget/i18n/locale/pl.json b/app/javascript/widget/i18n/locale/pl.json index 30b8f9823..60c7307d1 100644 --- a/app/javascript/widget/i18n/locale/pl.json +++ b/app/javascript/widget/i18n/locale/pl.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Rozpocznij rozmowę", "END_CONVERSATION": "Zakończ rozmowę", "CONTINUE_CONVERSATION": "Kontynuuj rozmowę", + "YOU": "You", "START_NEW_CONVERSATION": "Rozpocznij nową rozmowę", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Pokaż nowe wiadomości", "CLOSE_MESSAGES_BUTTON": "Zamknij", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Zobacz wszystkie artykuły" + "VIEW_ALL_ARTICLES": "Zobacz wszystkie artykuły", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Wiadomość z obrazkiem" + }, + "audio": { + "CONTENT": "Wiadomość dźwiękowa" + }, + "video": { + "CONTENT": "Wiadomość wideo" + }, + "file": { + "CONTENT": "Załącznik pliku" + }, + "location": { + "CONTENT": "Lokalizacja" + }, + "fallback": { + "CONTENT": "udostępnił adres URL" + } } } diff --git a/app/javascript/widget/i18n/locale/pt.json b/app/javascript/widget/i18n/locale/pt.json index 1c5f7b223..d737b924c 100644 --- a/app/javascript/widget/i18n/locale/pt.json +++ b/app/javascript/widget/i18n/locale/pt.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Iniciar Conversa", "END_CONVERSATION": "Terminar Conversa", "CONTINUE_CONVERSATION": "Continuar conversa", + "YOU": "Você", "START_NEW_CONVERSATION": "Iniciar uma nova conversa", + "VIEW_UNREAD_MESSAGES": "Tem mensagens por ler", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Ver novas mensagens", "CLOSE_MESSAGES_BUTTON": "FECHAR", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Artigos Mais Populares", - "VIEW_ALL_ARTICLES": "Ver todos os artigos" + "VIEW_ALL_ARTICLES": "Ver todos os artigos", + "IFRAME_LOAD_ERROR": "Ocorreu um erro ao carregar o artigo. Por favor, atualize a página e tente novamente." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Mensagem de imagem" + }, + "audio": { + "CONTENT": "Mensagem de áudio" + }, + "video": { + "CONTENT": "Mensagem de vídeo" + }, + "file": { + "CONTENT": "Arquivo anexo" + }, + "location": { + "CONTENT": "Local:" + }, + "fallback": { + "CONTENT": "compartilhou uma url" + } } } diff --git a/app/javascript/widget/i18n/locale/pt_BR.json b/app/javascript/widget/i18n/locale/pt_BR.json index 9d63ab675..7fa4fcb3a 100644 --- a/app/javascript/widget/i18n/locale/pt_BR.json +++ b/app/javascript/widget/i18n/locale/pt_BR.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Iniciar Conversa", "END_CONVERSATION": "Finalizar Conversa", "CONTINUE_CONVERSATION": "Continuar conversa", + "YOU": "Você", "START_NEW_CONVERSATION": "Iniciar uma nova conversa", + "VIEW_UNREAD_MESSAGES": "Você tem mensagens não lidas", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Ver novas mensagens", "CLOSE_MESSAGES_BUTTON": "Fechar", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Artigos Populares", - "VIEW_ALL_ARTICLES": "Ver todos os artigos" + "VIEW_ALL_ARTICLES": "Ver todos os artigos", + "IFRAME_LOAD_ERROR": "Ocorreu um erro ao carregar o artigo. Por favor, atualize a página e tente novamente." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Mensagem de imagem" + }, + "audio": { + "CONTENT": "Mensagem de áudio" + }, + "video": { + "CONTENT": "Mensagem de vídeo" + }, + "file": { + "CONTENT": "Arquivo anexo" + }, + "location": { + "CONTENT": "Localização" + }, + "fallback": { + "CONTENT": "compartilhou uma URL" + } } } diff --git a/app/javascript/widget/i18n/locale/ro.json b/app/javascript/widget/i18n/locale/ro.json index 09886f390..12e7d378a 100644 --- a/app/javascript/widget/i18n/locale/ro.json +++ b/app/javascript/widget/i18n/locale/ro.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Începe conversația", "END_CONVERSATION": "Terminați conversația", "CONTINUE_CONVERSATION": "Continuați conversația", + "YOU": "You", "START_NEW_CONVERSATION": "Începeți o conversație nouă", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Vezi mesajele noi", "CLOSE_MESSAGES_BUTTON": "Închide", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Vezi toate articolele" + "VIEW_ALL_ARTICLES": "Vezi toate articolele", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Mesaj imagine" + }, + "audio": { + "CONTENT": "Mesaj audio" + }, + "video": { + "CONTENT": "Mesaj video" + }, + "file": { + "CONTENT": "Fişier ataşat" + }, + "location": { + "CONTENT": "Locaţie" + }, + "fallback": { + "CONTENT": "a partajat un URL" + } } } diff --git a/app/javascript/widget/i18n/locale/ru.json b/app/javascript/widget/i18n/locale/ru.json index 28ce1539e..df5923bc6 100644 --- a/app/javascript/widget/i18n/locale/ru.json +++ b/app/javascript/widget/i18n/locale/ru.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Начать диалог", "END_CONVERSATION": "Завершить диалог", "CONTINUE_CONVERSATION": "Продолжить беседу", + "YOU": "You", "START_NEW_CONVERSATION": "Начать диалог", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Посмотреть новые сообщения", "CLOSE_MESSAGES_BUTTON": "Закрыть", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Показать все статьи" + "VIEW_ALL_ARTICLES": "Показать все статьи", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Изображение" + }, + "audio": { + "CONTENT": "Аудиосообщение" + }, + "video": { + "CONTENT": "Видео" + }, + "file": { + "CONTENT": "Прикрепленный файл" + }, + "location": { + "CONTENT": "Местоположение" + }, + "fallback": { + "CONTENT": "поделился ссылкой" + } } } diff --git a/app/javascript/widget/i18n/locale/sh.json b/app/javascript/widget/i18n/locale/sh.json index e5fb85643..3a1f51ccf 100644 --- a/app/javascript/widget/i18n/locale/sh.json +++ b/app/javascript/widget/i18n/locale/sh.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/sk.json b/app/javascript/widget/i18n/locale/sk.json index 77d741b08..7dec7e968 100644 --- a/app/javascript/widget/i18n/locale/sk.json +++ b/app/javascript/widget/i18n/locale/sk.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Začať konverzáciu", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Začať novú konverzáciu", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Zobraziť nové správy", "CLOSE_MESSAGES_BUTTON": "Zatvoriť", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Obrázková správa" + }, + "audio": { + "CONTENT": "Hlasová správa" + }, + "video": { + "CONTENT": "Video správa" + }, + "file": { + "CONTENT": "Súbor v prílohe" + }, + "location": { + "CONTENT": "Lokácia" + }, + "fallback": { + "CONTENT": "zdieľal/a url" + } } } diff --git a/app/javascript/widget/i18n/locale/sl.json b/app/javascript/widget/i18n/locale/sl.json index e5fb85643..3a1f51ccf 100644 --- a/app/javascript/widget/i18n/locale/sl.json +++ b/app/javascript/widget/i18n/locale/sl.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/sr.json b/app/javascript/widget/i18n/locale/sr.json index ead288c4c..961baab4e 100644 --- a/app/javascript/widget/i18n/locale/sr.json +++ b/app/javascript/widget/i18n/locale/sr.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Započnite razgovor", "END_CONVERSATION": "Završi razgovor", "CONTINUE_CONVERSATION": "Nastavi razgovor", + "YOU": "You", "START_NEW_CONVERSATION": "Započnite novi razgovor", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Pogledajte nove poruke", "CLOSE_MESSAGES_BUTTON": "Zatvori", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Slikovita poruka" + }, + "audio": { + "CONTENT": "Govorna poruka" + }, + "video": { + "CONTENT": "Video poruka" + }, + "file": { + "CONTENT": "Prilog" + }, + "location": { + "CONTENT": "Lokacija" + }, + "fallback": { + "CONTENT": "je podelio link" + } } } diff --git a/app/javascript/widget/i18n/locale/sv.json b/app/javascript/widget/i18n/locale/sv.json index f5dbcf7e2..204156af7 100644 --- a/app/javascript/widget/i18n/locale/sv.json +++ b/app/javascript/widget/i18n/locale/sv.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Starta konversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Fortsätt konversation", + "YOU": "You", "START_NEW_CONVERSATION": "Starta konversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Se nya meddelanden", "CLOSE_MESSAGES_BUTTON": "Stäng", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Bildmeddelande" + }, + "audio": { + "CONTENT": "Ljudmeddelande" + }, + "video": { + "CONTENT": "Videomeddelande" + }, + "file": { + "CONTENT": "Bifogad fil" + }, + "location": { + "CONTENT": "Plats" + }, + "fallback": { + "CONTENT": "har delat en webbadress" + } } } diff --git a/app/javascript/widget/i18n/locale/ta.json b/app/javascript/widget/i18n/locale/ta.json index 2a4c273e3..1ec0d9fb0 100644 --- a/app/javascript/widget/i18n/locale/ta.json +++ b/app/javascript/widget/i18n/locale/ta.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "மூடு", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "பட செய்தி" + }, + "audio": { + "CONTENT": "ஆடியோ செய்தி" + }, + "video": { + "CONTENT": "வீடியோ செய்தி" + }, + "file": { + "CONTENT": "பைல் இணைப்புகள்" + }, + "location": { + "CONTENT": "இருப்பிடம்" + }, + "fallback": { + "CONTENT": "ஒரு URL ஐப் பகிர்ந்துள்ளார்" + } } } diff --git a/app/javascript/widget/i18n/locale/th.json b/app/javascript/widget/i18n/locale/th.json index dac634245..03453633f 100644 --- a/app/javascript/widget/i18n/locale/th.json +++ b/app/javascript/widget/i18n/locale/th.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "เริ่มการสนทนา", "END_CONVERSATION": "จบการสนทนา", "CONTINUE_CONVERSATION": "สนทนาต่อ", + "YOU": "You", "START_NEW_CONVERSATION": "เริ่มการสนทนาใหม่", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "ดูข้อความใหม่", "CLOSE_MESSAGES_BUTTON": "ปิด", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "ข้อความภาพ" + }, + "audio": { + "CONTENT": "ข้อความเสียง" + }, + "video": { + "CONTENT": "ข้อความวิดิโอ" + }, + "file": { + "CONTENT": "เเนบไฟล์" + }, + "location": { + "CONTENT": "สถานที่" + }, + "fallback": { + "CONTENT": "ได้เเชร์ลิ้ง" + } } } diff --git a/app/javascript/widget/i18n/locale/tr.json b/app/javascript/widget/i18n/locale/tr.json index 67504b5df..61f749fbc 100644 --- a/app/javascript/widget/i18n/locale/tr.json +++ b/app/javascript/widget/i18n/locale/tr.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Görüşmeyi Başlatın", "END_CONVERSATION": "Görüşmeyi Sonlandır", "CONTINUE_CONVERSATION": "Görüşmeye devam et", + "YOU": "You", "START_NEW_CONVERSATION": "Yeni Görüşme Başlatın", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Yeni mesajları gör", "CLOSE_MESSAGES_BUTTON": "Kapat", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Görsel mesaj" + }, + "audio": { + "CONTENT": "Sesli mesaj" + }, + "video": { + "CONTENT": "Video mesajı" + }, + "file": { + "CONTENT": "Dosya eklentisi" + }, + "location": { + "CONTENT": "Yer" + }, + "fallback": { + "CONTENT": "bir url paylaştı" + } } } diff --git a/app/javascript/widget/i18n/locale/uk.json b/app/javascript/widget/i18n/locale/uk.json index d221f3eb3..e345ff790 100644 --- a/app/javascript/widget/i18n/locale/uk.json +++ b/app/javascript/widget/i18n/locale/uk.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Розпочати розмову", "END_CONVERSATION": "Закінчити спілкування", "CONTINUE_CONVERSATION": "Продовжити спілкування", + "YOU": "You", "START_NEW_CONVERSATION": "Розпочати нову розмову", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Переглянути нові повідомлення", "CLOSE_MESSAGES_BUTTON": "Закрити", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Переглянути всі статті" + "VIEW_ALL_ARTICLES": "Переглянути всі статті", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Повідомлення з картинкою" + }, + "audio": { + "CONTENT": "Аудіо-повідомлення" + }, + "video": { + "CONTENT": "Відеоповідомлення" + }, + "file": { + "CONTENT": "Повідомлення з файлом" + }, + "location": { + "CONTENT": "Місцезнаходження" + }, + "fallback": { + "CONTENT": "поділився посиланням" + } } } diff --git a/app/javascript/widget/i18n/locale/ur.json b/app/javascript/widget/i18n/locale/ur.json index d272b22ab..6c0f5f111 100644 --- a/app/javascript/widget/i18n/locale/ur.json +++ b/app/javascript/widget/i18n/locale/ur.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "تصویری پیغام" + }, + "audio": { + "CONTENT": "آڈیو پیغام" + }, + "video": { + "CONTENT": "ویڈیو پیغام" + }, + "file": { + "CONTENT": "فائل منسلک کرنا" + }, + "location": { + "CONTENT": "مقام" + }, + "fallback": { + "CONTENT": "نے ایک یو آر ایل بھیجا" + } } } diff --git a/app/javascript/widget/i18n/locale/ur_IN.json b/app/javascript/widget/i18n/locale/ur_IN.json index e5fb85643..3a1f51ccf 100644 --- a/app/javascript/widget/i18n/locale/ur_IN.json +++ b/app/javascript/widget/i18n/locale/ur_IN.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Start Conversation", "END_CONVERSATION": "End Conversation", "CONTINUE_CONVERSATION": "Continue conversation", + "YOU": "You", "START_NEW_CONVERSATION": "Start a new conversation", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "See new messages", "CLOSE_MESSAGES_BUTTON": "Close", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } } } diff --git a/app/javascript/widget/i18n/locale/vi.json b/app/javascript/widget/i18n/locale/vi.json index 197e3ece5..12e4bdac1 100644 --- a/app/javascript/widget/i18n/locale/vi.json +++ b/app/javascript/widget/i18n/locale/vi.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "Bắt đầu một cuộc trò chuyện", "END_CONVERSATION": "Kết thúc hội thoại", "CONTINUE_CONVERSATION": "Tiếp tục hội thoại", + "YOU": "You", "START_NEW_CONVERSATION": "Bắt đầu hội thoại mới", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Xem tin nhắn mới", "CLOSE_MESSAGES_BUTTON": "Đóng", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "Xem tất cả bài viết" + "VIEW_ALL_ARTICLES": "Xem tất cả bài viết", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Tin nhắn hình ảnh" + }, + "audio": { + "CONTENT": "Tin nhắn thoại" + }, + "video": { + "CONTENT": "Tin nhắn video" + }, + "file": { + "CONTENT": "Tập tin đính kèm" + }, + "location": { + "CONTENT": "Địa điểm" + }, + "fallback": { + "CONTENT": "có một đường dẫn chia sẻ" + } } } diff --git a/app/javascript/widget/i18n/locale/zh_CN.json b/app/javascript/widget/i18n/locale/zh_CN.json index 654d83360..14ed4018d 100644 --- a/app/javascript/widget/i18n/locale/zh_CN.json +++ b/app/javascript/widget/i18n/locale/zh_CN.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "开始会话", "END_CONVERSATION": "结束对话", "CONTINUE_CONVERSATION": "继续对话", + "YOU": "You", "START_NEW_CONVERSATION": "开始新的对话", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "查看新消息", "CLOSE_MESSAGES_BUTTON": "关闭", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "图片消息" + }, + "audio": { + "CONTENT": "音频消息" + }, + "video": { + "CONTENT": "视频消息" + }, + "file": { + "CONTENT": "附件" + }, + "location": { + "CONTENT": "位置" + }, + "fallback": { + "CONTENT": "分享了一个网址" + } } } diff --git a/app/javascript/widget/i18n/locale/zh_TW.json b/app/javascript/widget/i18n/locale/zh_TW.json index 4575e7c5a..64e0bd879 100644 --- a/app/javascript/widget/i18n/locale/zh_TW.json +++ b/app/javascript/widget/i18n/locale/zh_TW.json @@ -34,7 +34,9 @@ "START_CONVERSATION": "開始對話", "END_CONVERSATION": "結束對話", "CONTINUE_CONVERSATION": "繼續對話", + "YOU": "You", "START_NEW_CONVERSATION": "開始一個新對話", + "VIEW_UNREAD_MESSAGES": "You have unread messages", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "查看新訊息", "CLOSE_MESSAGES_BUTTON": "關閉", @@ -108,6 +110,27 @@ }, "PORTAL": { "POPULAR_ARTICLES": "Popular Articles", - "VIEW_ALL_ARTICLES": "View all articles" + "VIEW_ALL_ARTICLES": "View all articles", + "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "圖片訊息" + }, + "audio": { + "CONTENT": "聲音訊息" + }, + "video": { + "CONTENT": "影片訊息" + }, + "file": { + "CONTENT": "附件" + }, + "location": { + "CONTENT": "位置" + }, + "fallback": { + "CONTENT": "分享了一個網址" + } } } diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 80aa4fce2..ca991bb31 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -184,21 +184,21 @@ tr: description: "Integrate powerful AI features into Chatwoot by leveraging the GPT models from OpenAI." public_portal: search: - search_placeholder: Başlığa veya içeriğe göre arama yapın... + search_placeholder: Search for article by title or body... empty_placeholder: Sonuç bulunamadı. - loading_placeholder: Aranıyor... - results_title: Arama sonuçları - toc_header: 'Bu sayfadakiler' + loading_placeholder: Searching... + results_title: Search results + toc_header: 'On this page' hero: - sub_title: Makalelerde arayın veya aşağıdaki kategorilere göz atın. + sub_title: Search for the articles here or browse the categories below. common: home: Anasayfa - last_updated_on: "Son güncelleme: %{last_updated_on}" - view_all_articles: Tüm makaleleri görüntüle - article: makale - articles: makale - no_articles: Burada hiç makale yok. + last_updated_on: Last updated on %{last_updated_on} + view_all_articles: View all articles + article: article + articles: articles + no_articles: There are no articles here footer: made_with: Made with header: - go_to_homepage: Ana siteye git + go_to_homepage: Go to the main site diff --git a/config/locales/zh_TW.yml b/config/locales/zh_TW.yml index 045675b4a..dfb52c57c 100644 --- a/config/locales/zh_TW.yml +++ b/config/locales/zh_TW.yml @@ -21,7 +21,7 @@ zh_TW: messages: reset_password_success: 密碼重設成功,請確認您的信箱有收到重設信件。 reset_password_failure: 我們找不到用戶指定的電子郵件。 - inbox_deletetion_response: Your inbox deletion request will be processed in some time. + inbox_deletetion_response: 您的收件匣刪除請求將在一段時間後處理。 errors: validations: presence: must not be blank @@ -71,8 +71,8 @@ zh_TW: avg_first_response_time: 平均第一次回覆時間(分鐘) avg_resolution_time: 平均解決時間(分鐘) inbox_csv: - inbox_name: Inbox name - inbox_type: Inbox type + inbox_name: 收件匣名稱 + inbox_type: 收件匣類型 conversations_count: No. of conversations avg_first_response_time: 平均第一次回覆時間(分鐘) avg_resolution_time: 平均解決時間(分鐘) From f1b556d4a3e39eb26624b8f4e3c69fe237ceefd5 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Wed, 20 Sep 2023 00:44:00 -0700 Subject: [PATCH 09/23] fix: Downcase content filter values to fix the query (#7942) --- app/services/filter_service.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/services/filter_service.rb b/app/services/filter_service.rb index c53dbf8a2..a6cdd409d 100644 --- a/app/services/filter_service.rb +++ b/app/services/filter_service.rb @@ -47,11 +47,17 @@ class FilterService query_hash['values'].map { |x| Conversation.statuses[x.to_sym] } when 'message_type' query_hash['values'].map { |x| Message.message_types[x.to_sym] } + when 'content' + downcase_array_values(query_hash['values']) else case_insensitive_values(query_hash) end end + def downcase_array_values(values) + values.map(&:downcase) + end + def case_insensitive_values(query_hash) if @custom_attribute_type.present? && query_hash['values'][0].is_a?(String) string_filter_values(query_hash) From 2c93d563c1bdc6150cde0d6effc86e4e84685300 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Wed, 20 Sep 2023 17:29:27 +0530 Subject: [PATCH 10/23] fix: Update colors to fix dark mode in the editor add-link modal header (#7947) --- .../dashboard/components/widgets/WootWriter/Editor.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue index 8a64d9c1f..92c83e528 100644 --- a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue +++ b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue @@ -670,6 +670,10 @@ export default { .ProseMirror-prompt { @apply z-50 bg-slate-25 dark:bg-slate-700 rounded-md border border-solid border-slate-75 dark:border-slate-800; + + h5 { + @apply dark:text-slate-25 text-slate-800; + } } .is-private { From 71d1e98765e6f56c116e121d7b20d869c9967776 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Wed, 20 Sep 2023 05:48:55 -0700 Subject: [PATCH 11/23] chore: Remove spinkit from dependencies (#7948) --- .../administrate/utilities/_variables.scss | 5 ---- .../dashboard/assets/scss/_variables.scss | 5 ---- .../dashboard/assets/scss/storybook.scss | 1 - .../widget/assets/scss/_variables.scss | 23 ++++++++----------- app/javascript/widget/assets/scss/woot.scss | 1 - package.json | 2 -- yarn.lock | 23 ------------------- 7 files changed, 9 insertions(+), 51 deletions(-) diff --git a/app/assets/stylesheets/administrate/utilities/_variables.scss b/app/assets/stylesheets/administrate/utilities/_variables.scss index db8d1a302..818f96e4c 100644 --- a/app/assets/stylesheets/administrate/utilities/_variables.scss +++ b/app/assets/stylesheets/administrate/utilities/_variables.scss @@ -78,11 +78,6 @@ $conv-header-height: 4rem; $inbox-thumb-size: 4.8rem; -// Spinner -$spinkit-spinner-color: $color-white !default; -$spinkit-spinner-margin: 0 0 0 1.6rem !default; -$spinkit-size: 1.6rem !default; - // Snackbar default $woot-snackbar-bg: #323232; $woot-snackbar-button: #ffeb3b; diff --git a/app/javascript/dashboard/assets/scss/_variables.scss b/app/javascript/dashboard/assets/scss/_variables.scss index 930fe5f0e..b50643bd4 100644 --- a/app/javascript/dashboard/assets/scss/_variables.scss +++ b/app/javascript/dashboard/assets/scss/_variables.scss @@ -81,11 +81,6 @@ $conv-header-height: 2.5rem; $inbox-thumb-size: 3rem; -// Spinner -$spinkit-spinner-color: $color-white !default; -$spinkit-spinner-margin: 0 0 0 1rem !default; -$spinkit-size: 1rem !default; - // Snackbar default $woot-snackbar-bg: #323232; $woot-snackbar-button: #ffeb3b; diff --git a/app/javascript/dashboard/assets/scss/storybook.scss b/app/javascript/dashboard/assets/scss/storybook.scss index e735ed3d7..457560aa9 100644 --- a/app/javascript/dashboard/assets/scss/storybook.scss +++ b/app/javascript/dashboard/assets/scss/storybook.scss @@ -9,7 +9,6 @@ @import 'shared/assets/stylesheets/border-radius'; @import 'variables'; -@import '~spinkit/scss/spinners/7-three-bounce'; @import 'vue-multiselect/dist/vue-multiselect.min.css'; @import '~shared/assets/stylesheets/ionicons'; diff --git a/app/javascript/widget/assets/scss/_variables.scss b/app/javascript/widget/assets/scss/_variables.scss index 73c4fce1b..a0033266d 100755 --- a/app/javascript/widget/assets/scss/_variables.scss +++ b/app/javascript/widget/assets/scss/_variables.scss @@ -59,11 +59,6 @@ $color-success: #44ce4b; $color-primary-light: #c7e3ff; $color-primary-dark: darken($color-woot, 20%); -// Spinner -$spinkit-spinner-color: $color-white !default; -$spinkit-spinner-margin: 0 0 0 1.6rem !default; -$spinkit-size: 1.6rem !default; - // Snackbar default $woot-snackbar-bg: #323232; $woot-snackbar-button: #ffeb3b; @@ -78,15 +73,15 @@ $footer-height: 11.2rem; $header-expanded-height: $space-medium * 10; $font-family: 'Inter', --apple-system, -system-ui, -BlinkMacSystemFont, -'Segoe UI', -Roboto, -'Helvetica Neue', -Tahoma, -Arial, -sans-serif; + -apple-system, + system-ui, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + 'Helvetica Neue', + Tahoma, + Arial, + sans-serif; // Break points $break-point-medium: 667px; diff --git a/app/javascript/widget/assets/scss/woot.scss b/app/javascript/widget/assets/scss/woot.scss index a4957c3da..6c5cdc2e3 100755 --- a/app/javascript/widget/assets/scss/woot.scss +++ b/app/javascript/widget/assets/scss/woot.scss @@ -11,7 +11,6 @@ @import 'forms'; @import 'utilities'; @import 'shared/assets/fonts/widget_fonts'; -@import '~spinkit/scss/spinners/7-three-bounce'; @import 'views/conversation'; html, diff --git a/package.json b/package.json index b4a6ca3cf..2dbe79291 100644 --- a/package.json +++ b/package.json @@ -67,11 +67,9 @@ "md5": "^2.3.0", "ninja-keys": "^1.1.9", "opus-recorder": "^8.0.5", - "pinia": "^2.1.4", "postcss": "^8.4.24", "postcss-loader": "^4.2.0", "semver": "7.5.2", - "spinkit": "~1.2.5", "tailwindcss": "^3.3.2", "turbolinks": "^5.2.0", "url-loader": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index 710019a84..272c61f2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6472,11 +6472,6 @@ optionalDependencies: prettier "^1.18.2" -"@vue/devtools-api@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" - integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== - "@vue/reactivity-transform@3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" @@ -15633,14 +15628,6 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pinia@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.1.4.tgz#a642adfe6208e10c36d3dc16184a91064788142a" - integrity sha512-vYlnDu+Y/FXxv1ABo1vhjC+IbqvzUdiUC3sfDRrRyY2CQSrqqaa+iiHmqtARFxJVqWQMCJfXx1PBvFs9aJVLXQ== - dependencies: - "@vue/devtools-api" "^6.5.0" - vue-demi ">=0.14.5" - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -18654,11 +18641,6 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -spinkit@~1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/spinkit/-/spinkit-1.2.5.tgz#90f9f466a20e8e39ef24da959c1e611c2a30dd54" - integrity sha1-kPn0ZqIOjjnvJNqVnB5hHCow3VQ= - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -20236,11 +20218,6 @@ vue-color@2.8.1: material-colors "^1.0.0" tinycolor2 "^1.1.2" -vue-demi@>=0.14.5: - version "0.14.5" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.5.tgz#676d0463d1a1266d5ab5cba932e043d8f5f2fbd9" - integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA== - vue-docgen-api@^4.44.15: version "4.73.0" resolved "https://registry.yarnpkg.com/vue-docgen-api/-/vue-docgen-api-4.73.0.tgz#13ef47c349374f5fd375093199085bd83e6b096c" From f999777a2db3f7f1a3d7ced74247df2f5b761020 Mon Sep 17 00:00:00 2001 From: Hricha Shandily <103104754+Hricha-Shandily@users.noreply.github.com> Date: Thu, 21 Sep 2023 09:39:25 +0530 Subject: [PATCH 12/23] chore: Update message signature description (#7943) Co-authored-by: Shivam Mishra Co-authored-by: Pranav Raj S --- app/javascript/dashboard/helper/specs/editorHelper.spec.js | 2 +- app/javascript/dashboard/i18n/locale/en/settings.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/dashboard/helper/specs/editorHelper.spec.js b/app/javascript/dashboard/helper/specs/editorHelper.spec.js index 1c79d6e21..cb34f8957 100644 --- a/app/javascript/dashboard/helper/specs/editorHelper.spec.js +++ b/app/javascript/dashboard/helper/specs/editorHelper.spec.js @@ -20,7 +20,7 @@ const DOES_NOT_HAVE_SIGNATURE = { signature_has_images: { body: 'This is a test', signature: - 'Testing \n![](http://localhost:3000/rails/active_storage/blobs/redirect/some-hash/image.png)', + 'Testing\n![](http://localhost:3000/rails/active_storage/blobs/redirect/some-hash/image.png)', }, }; diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index 7969f807f..39e5a9a14 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Personal message signature", - "NOTE": "Create a personal message signature that would be added to all the messages you send from your email inbox. Use the rich content editor to create a highly personalised signature.", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", "BTN_TEXT": "Save message signature", "API_ERROR": "Couldn't save signature! Try again", "API_SUCCESS": "Signature saved successfully", From 27fc24375d6ecde6e7186e4c8f2920808b09bbf2 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 21 Sep 2023 11:28:29 +0530 Subject: [PATCH 13/23] fix: Handling markdown before replacing or appending signature [CW-2532] (#7944) Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> --- .../dashboard/helper/editorHelper.js | 27 +++++++------------ .../helper/specs/editorHelper.spec.js | 22 ++++++++++++--- .../shared/components/ResizableTextArea.vue | 10 ++++--- package.json | 2 +- yarn.lock | 7 ++--- 5 files changed, 39 insertions(+), 29 deletions(-) diff --git a/app/javascript/dashboard/helper/editorHelper.js b/app/javascript/dashboard/helper/editorHelper.js index 52f87c214..795c3af1b 100644 --- a/app/javascript/dashboard/helper/editorHelper.js +++ b/app/javascript/dashboard/helper/editorHelper.js @@ -1,3 +1,9 @@ +import { + messageSchema, + MessageMarkdownTransformer, + MessageMarkdownSerializer, +} from '@chatwoot/prosemirror-schema'; + /** * The delimiter used to separate the signature from the rest of the body. * @type {string} @@ -5,25 +11,12 @@ export const SIGNATURE_DELIMITER = '--'; /** - * Remove trailing spaces from each line in a markdown text - * @param {string} markdownText - * @returns - */ -function removeTrailingSpaces(markdownText) { - return markdownText - .split('\n') - .map(line => line.replace(/\s+$/, '')) - .join('\n'); -} - -/** - * Trim the signature and remove all " \r" from the signature - * 1. Trim any extra lines or spaces at the start or end of the string - * 2. Converts all \r or \r\n to \f + * Parse and Serialize the markdown text to remove any extra spaces or new lines */ export function cleanSignature(signature) { - const cleaned = signature.trim().replace(/\r\n?/g, '\n'); - return removeTrailingSpaces(cleaned); + // convert from markdown to common mark format + const nodes = new MessageMarkdownTransformer(messageSchema).parse(signature); + return MessageMarkdownSerializer.serialize(nodes); } /** diff --git a/app/javascript/dashboard/helper/specs/editorHelper.spec.js b/app/javascript/dashboard/helper/specs/editorHelper.spec.js index cb34f8957..159437e58 100644 --- a/app/javascript/dashboard/helper/specs/editorHelper.spec.js +++ b/app/javascript/dashboard/helper/specs/editorHelper.spec.js @@ -3,6 +3,7 @@ import { appendSignature, removeSignature, replaceSignature, + cleanSignature, extractTextFromMarkdown, } from '../editorHelper'; @@ -17,11 +18,19 @@ const DOES_NOT_HAVE_SIGNATURE = { body: 'This is a test\n\n--\n\nThis is a signature\n\nThis is more text', signature: 'This is a signature', }, - signature_has_images: { + 'signature has images': { body: 'This is a test', signature: 'Testing\n![](http://localhost:3000/rails/active_storage/blobs/redirect/some-hash/image.png)', }, + 'signature has non commonmark syntax': { + body: 'This is a test', + signature: '- Signature', + }, + 'signature has trailing spaces': { + body: 'This is a test', + signature: '**hello** \n**world**', + }, }; const HAS_SIGNATURE = { @@ -37,6 +46,10 @@ const HAS_SIGNATURE = { body: '\n\n--\n\nThis is a signature', signature: 'This is a signature', }, + 'signature has non-commonmark syntax': { + body: '\n\n--\n\n* Signature', + signature: '- Signature', + }, }; describe('findSignatureInBody', () => { @@ -58,9 +71,10 @@ describe('appendSignature', () => { it('appends the signature if it is not present', () => { Object.keys(DOES_NOT_HAVE_SIGNATURE).forEach(key => { const { body, signature } = DOES_NOT_HAVE_SIGNATURE[key]; - expect(appendSignature(body, signature)).toBe( - `${body}\n\n--\n\n${signature}` - ); + const cleanedSignature = cleanSignature(signature); + expect( + appendSignature(body, signature).includes(cleanedSignature) + ).toBeTruthy(); }); }); it('does not append signature if already present', () => { diff --git a/app/javascript/shared/components/ResizableTextArea.vue b/app/javascript/shared/components/ResizableTextArea.vue index bc7c89dc0..c86e4069e 100644 --- a/app/javascript/shared/components/ResizableTextArea.vue +++ b/app/javascript/shared/components/ResizableTextArea.vue @@ -113,7 +113,6 @@ export default { }); }, setCursor() { - const textarea = this.$refs.textarea; const bodyWithoutSignature = removeSignature( this.value, this.cleanedSignature @@ -121,9 +120,12 @@ export default { // only trim at end, so if there are spaces at the start, those are not removed const bodyEndsAt = bodyWithoutSignature.trimEnd().length; + const textarea = this.$refs.textarea; - textarea.focus(); - textarea.setSelectionRange(bodyEndsAt, bodyEndsAt); + if (textarea) { + textarea.focus(); + textarea.setSelectionRange(bodyEndsAt, bodyEndsAt); + } }, onInput(event) { this.$emit('input', event.target.value); @@ -157,7 +159,7 @@ export default { this.$emit('focus'); }, focus() { - this.$refs.textarea.focus(); + if (this.$refs.textarea) this.$refs.textarea.focus(); }, }, }; diff --git a/package.json b/package.json index 2dbe79291..1905fbaa6 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ ], "dependencies": { "@braid/vue-formulate": "^2.5.2", - "@chatwoot/prosemirror-schema": "https://github.com/chatwoot/prosemirror-schema.git#825755b53f1ef4ae14fac2393b53a02e14ce21e0", + "@chatwoot/prosemirror-schema": "^1.0.1", "@chatwoot/utils": "^0.0.16", "@hcaptcha/vue-hcaptcha": "^0.3.2", "@june-so/analytics-next": "^1.36.5", diff --git a/yarn.lock b/yarn.lock index 272c61f2c..3de256ffa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2994,9 +2994,10 @@ is-url "^1.2.4" nanoid "^2.1.11" -"@chatwoot/prosemirror-schema@https://github.com/chatwoot/prosemirror-schema.git#825755b53f1ef4ae14fac2393b53a02e14ce21e0": - version "1.0.0" - resolved "https://github.com/chatwoot/prosemirror-schema.git#825755b53f1ef4ae14fac2393b53a02e14ce21e0" +"@chatwoot/prosemirror-schema@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@chatwoot/prosemirror-schema/-/prosemirror-schema-1.0.1.tgz#7beb7a9303fbf5281d3a7e6c470ac78cce21be04" + integrity sha512-fnT2zSzAmiAh1ElEWqBhISavGZF73DLUzQyml0iiXDy6IU7HS3TtQPI/AGoCK3CkCxvoqBtzhRLGZrHsftoQ9w== dependencies: markdown-it-sup "^1.0.0" prosemirror-commands "^1.1.4" From 53dc38e65019a7c4b94031d0e97f7e410e3ea862 Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Thu, 21 Sep 2023 12:46:03 +0530 Subject: [PATCH 14/23] fix: Renders youtube and vimeo links within blank lines as embeds (#7422) Within the article we are now rendering every link for youtube and vimeo as embeds. This isn't a good solution, as users might need to have plain links as well. This fix will render only links within two blank lines as embeds. Co-authored-by: Sojan Jose --- lib/custom_markdown_renderer.rb | 21 ++++++++++++++++++++- spec/lib/custom_markdown_renderer_spec.rb | 14 ++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/custom_markdown_renderer.rb b/lib/custom_markdown_renderer.rb index b683c9281..3b262b69f 100644 --- a/lib/custom_markdown_renderer.rb +++ b/lib/custom_markdown_renderer.rb @@ -15,11 +15,30 @@ class CustomMarkdownRenderer < CommonMarker::HtmlRenderer end def link(node) - render_embedded_content(node) || super + return if surrounded_by_empty_lines?(node) && render_embedded_content(node) + + # If it's not YouTube or Vimeo link, render normally + super end private + def surrounded_by_empty_lines?(node) + prev_node_empty?(node.previous) && next_node_empty?(node.next) + end + + def prev_node_empty?(prev_node) + prev_node.nil? || node_empty?(prev_node) + end + + def next_node_empty?(next_node) + next_node.nil? || node_empty?(next_node) + end + + def node_empty?(node) + (node.type == :text && node.string_content.strip.empty?) || (node.type != :text) + end + def render_embedded_content(node) link_url = node.url diff --git a/spec/lib/custom_markdown_renderer_spec.rb b/spec/lib/custom_markdown_renderer_spec.rb index 623f12de8..a4b0cae48 100644 --- a/spec/lib/custom_markdown_renderer_spec.rb +++ b/spec/lib/custom_markdown_renderer_spec.rb @@ -104,8 +104,8 @@ describe CustomMarkdownRenderer do end context 'when multiple links are present' do - it 'renders all links' do - markdown = '[youtube](https://www.youtube.com/watch?v=VIDEO_ID) [vimeo](https://vimeo.com/1234567) ^ hello ^ [normal](https://example.com)' + it 'renders all links when present between empty lines' do + markdown = "\n[youtube](https://www.youtube.com/watch?v=VIDEO_ID)\n\n[vimeo](https://vimeo.com/1234567)\n^ hello ^ [normal](https://example.com)" output = render_markdown(markdown) expect(output).to include('src="https://www.youtube.com/embed/VIDEO_ID"') expect(output).to include('src="https://player.vimeo.com/video/1234567"') @@ -113,5 +113,15 @@ describe CustomMarkdownRenderer do expect(output).to include(' hello ') end end + + context 'when links within text are present' do + it 'renders only text within blank lines as embeds' do + markdown = "\n[youtube](https://www.youtube.com/watch?v=VIDEO_ID)\nthis is such an amazing [vimeo](https://vimeo.com/1234567)\n[vimeo](https://vimeo.com/1234567)" + output = render_markdown(markdown) + expect(output).to include('src="https://www.youtube.com/embed/VIDEO_ID"') + expect(output).to include('href="https://vimeo.com/1234567"') + expect(output).to include('src="https://player.vimeo.com/video/1234567"') + end + end end end From bdeb2f98122483f3c401677a475260d00d8001e5 Mon Sep 17 00:00:00 2001 From: Liam <43280985+LiamAshdown@users.noreply.github.com> Date: Thu, 21 Sep 2023 08:53:12 +0100 Subject: [PATCH 15/23] feat: Searching contacts by company name (#7867) Implement the functionality of being able to search the contacts page by company name. Fixes: #7818 Co-authored-by: Sojan Jose --- .../api/v1/accounts/contacts_controller.rb | 3 ++- .../api/v1/accounts/contacts_controller_spec.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index d75dc71b5..bec00be96 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -25,7 +25,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController render json: { error: 'Specify search string with parameter q' }, status: :unprocessable_entity if params[:q].blank? && return contacts = resolved_contacts.where( - 'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search', + 'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search + OR contacts.additional_attributes->>\'company_name\' ILIKE :search', search: "%#{params[:q].strip}%" ) @contacts_count = contacts.count diff --git a/spec/controllers/api/v1/accounts/contacts_controller_spec.rb b/spec/controllers/api/v1/accounts/contacts_controller_spec.rb index fe5c6c170..7352b842f 100644 --- a/spec/controllers/api/v1/accounts/contacts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/contacts_controller_spec.rb @@ -295,6 +295,18 @@ RSpec.describe 'Contacts API', type: :request do expect(response.body).not_to include(contact1.email) end + it 'searches contacts using company name' do + contact2.update(additional_attributes: { company_name: 'acme.inc' }) + get "/api/v1/accounts/#{account.id}/contacts/search", + params: { q: 'acme.inc' }, + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.body).to include(contact2.email) + expect(response.body).not_to include(contact1.email) + end + it 'matches the resolved contact respecting the identifier character casing' do contact_normal = create(:contact, name: 'testcontact', account: account, identifier: 'testidentifer') contact_special = create(:contact, name: 'testcontact', account: account, identifier: 'TestIdentifier') From fabb3c8da4352f9f58f2eae367066ec1160ffb0f Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Thu, 21 Sep 2023 17:06:15 +0530 Subject: [PATCH 16/23] fix: Help Center articles are not available on the widget [CW-2534] (#7954) --- app/javascript/widget/App.vue | 3 +++ .../widget/store/modules/appConfig.js | 10 +++++++++ .../modules/specs/appConfig/actions.spec.js | 7 +++++++ .../modules/specs/appConfig/mutations.spec.js | 8 +++++++ app/javascript/widget/store/types.js | 1 + app/javascript/widget/views/Home.vue | 21 +++++++++++++++++-- 6 files changed, 48 insertions(+), 2 deletions(-) diff --git a/app/javascript/widget/App.vue b/app/javascript/widget/App.vue index 3c218266a..3d154dd03 100755 --- a/app/javascript/widget/App.vue +++ b/app/javascript/widget/App.vue @@ -111,6 +111,7 @@ export default { 'setWidgetColor', 'setBubbleVisibility', 'setColorScheme', + 'setLocale', ]), ...mapActions('conversation', ['fetchOldConversations', 'setUserLastSeen']), ...mapActions('campaign', [ @@ -152,8 +153,10 @@ export default { if (hasLocaleWithVariation) { this.$root.$i18n.locale = localeWithVariation; + this.$store.dispatch('appConfig/setLocale', localeWithVariation); } else if (hasLocaleWithoutVariation) { this.$root.$i18n.locale = localeWithoutVariation; + this.$store.dispatch('appConfig/setLocale', localeWithoutVariation); } }, registerUnreadEvents() { diff --git a/app/javascript/widget/store/modules/appConfig.js b/app/javascript/widget/store/modules/appConfig.js index a87276672..a51bd1ad3 100644 --- a/app/javascript/widget/store/modules/appConfig.js +++ b/app/javascript/widget/store/modules/appConfig.js @@ -5,6 +5,7 @@ import { SET_WIDGET_APP_CONFIG, SET_WIDGET_COLOR, TOGGLE_WIDGET_OPEN, + SET_WIDGET_LOCALE, } from '../types'; const state = { @@ -18,6 +19,7 @@ const state = { widgetColor: '', widgetStyle: 'standard', darkMode: 'light', + locale: 'en', }; export const getters = { @@ -29,6 +31,7 @@ export const getters = { getReferrerHost: $state => $state.referrerHost, isWidgetStyleFlat: $state => $state.widgetStyle === 'flat', darkMode: $state => $state.darkMode, + widgetLocale: $state => $state.locale, }; export const actions = { @@ -65,6 +68,9 @@ export const actions = { setBubbleVisibility({ commit }, hideMessageBubble) { commit(SET_BUBBLE_VISIBILITY, hideMessageBubble); }, + setLocale({ commit }, locale) { + commit(SET_WIDGET_LOCALE, locale); + }, }; export const mutations = { @@ -74,6 +80,7 @@ export const mutations = { $state.hideMessageBubble = data.hideMessageBubble; $state.widgetStyle = data.widgetStyle; $state.darkMode = data.darkMode; + $state.locale = data.locale || $state.locale; }, [TOGGLE_WIDGET_OPEN]($state, isWidgetOpen) { $state.isWidgetOpen = isWidgetOpen; @@ -90,6 +97,9 @@ export const mutations = { [SET_COLOR_SCHEME]($state, darkMode) { $state.darkMode = darkMode; }, + [SET_WIDGET_LOCALE]($state, locale) { + $state.locale = locale || $state.locale; + }, }; export default { diff --git a/app/javascript/widget/store/modules/specs/appConfig/actions.spec.js b/app/javascript/widget/store/modules/specs/appConfig/actions.spec.js index 89aea11a0..80dcc24b2 100644 --- a/app/javascript/widget/store/modules/specs/appConfig/actions.spec.js +++ b/app/javascript/widget/store/modules/specs/appConfig/actions.spec.js @@ -31,4 +31,11 @@ describe('#actions', () => { expect(commit.mock.calls).toEqual([['SET_COLOR_SCHEME', 'dark']]); }); }); + + describe('#setLocale', () => { + it('creates actions for setting the locale properly', () => { + actions.setLocale({ commit }, 'es_ES'); + expect(commit.mock.calls).toEqual([['SET_WIDGET_LOCALE', 'es_ES']]); + }); + }); }); diff --git a/app/javascript/widget/store/modules/specs/appConfig/mutations.spec.js b/app/javascript/widget/store/modules/specs/appConfig/mutations.spec.js index e79235e28..caad5ce80 100644 --- a/app/javascript/widget/store/modules/specs/appConfig/mutations.spec.js +++ b/app/javascript/widget/store/modules/specs/appConfig/mutations.spec.js @@ -32,4 +32,12 @@ describe('#mutations', () => { expect(state.darkMode).toEqual('dark'); }); }); + + describe('#SET_WIDGET_LOCALE', () => { + it('sets widget locale properly', () => { + const state = { locale: 'en' }; + mutations.SET_WIDGET_LOCALE(state, 'es_ES'); + expect(state.locale).toEqual('es_ES'); + }); + }); }); diff --git a/app/javascript/widget/store/types.js b/app/javascript/widget/store/types.js index 17398b682..edbb25ce1 100644 --- a/app/javascript/widget/store/types.js +++ b/app/javascript/widget/store/types.js @@ -7,3 +7,4 @@ export const UPDATE_CONVERSATION_ATTRIBUTES = 'UPDATE_CONVERSATION_ATTRIBUTES'; export const TOGGLE_WIDGET_OPEN = 'TOGGLE_WIDGET_OPEN'; export const SET_REFERRER_HOST = 'SET_REFERRER_HOST'; export const SET_BUBBLE_VISIBILITY = 'SET_BUBBLE_VISIBILITY'; +export const SET_WIDGET_LOCALE = 'SET_WIDGET_LOCALE'; diff --git a/app/javascript/widget/views/Home.vue b/app/javascript/widget/views/Home.vue index f159fa182..8d5afc287 100755 --- a/app/javascript/widget/views/Home.vue +++ b/app/javascript/widget/views/Home.vue @@ -68,6 +68,7 @@ export default { unreadMessageCount: 'conversation/getUnreadMessageCount', popularArticles: 'article/popularArticles', articleUiFlags: 'article/uiFlags', + widgetLocale: 'appConfig/widgetLocale', }), portal() { return window.chatwootWebChannel.portal; @@ -79,12 +80,28 @@ export default { this.popularArticles.length ); }, + defaultLocale() { + const widgetLocale = this.widgetLocale; + const { + allowed_locales: allowedLocales, + default_locale: defaultLocale, + } = this.portal.config; + + // IMPORTANT: Variation strict locale matching, Follow iso_639_1_code + // If the exact match of a locale is available in the list of portal locales, return it + // Else return the default locale. Eg: `es` will not work if `es_ES` is available in the list + if (allowedLocales.includes(widgetLocale)) { + return widgetLocale; + } + return defaultLocale; + }, }, mounted() { if (this.portal && this.popularArticles.length === 0) { + const locale = this.defaultLocale; this.$store.dispatch('article/fetch', { slug: this.portal.slug, - locale: 'en', + locale, }); } }, @@ -102,9 +119,9 @@ export default { }); }, viewAllArticles() { + const locale = this.defaultLocale; const { portal: { slug }, - locale = 'en', } = window.chatwootWebChannel; this.openArticleInArticleViewer(`/hc/${slug}/${locale}`); }, From 48bf8d08e54f9f1110c8760ba23fa4049673531e Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Thu, 21 Sep 2023 17:55:54 +0530 Subject: [PATCH 17/23] feat: Update dependencies and fix import syntax for Vite migration (#7959) Co-authored-by: Pranav Raj S --- app/javascript/dashboard/App.vue | 6 +- .../components/Accordion/AccordionItem.vue | 2 +- .../dashboard/components/ChatList.vue | 10 +- .../components/SnackbarContainer.vue | 2 +- .../components/buttons/FormSubmitButton.vue | 2 +- .../components/buttons/ResolveAction.vue | 2 +- .../components/layout/AvailabilityStatus.vue | 10 +- .../dashboard/components/layout/Sidebar.vue | 4 +- .../layout/sidebarComponents/AgentDetails.vue | 2 +- .../layout/sidebarComponents/OptionsMenu.vue | 6 +- .../layout/sidebarComponents/Primary.vue | 10 +- .../sidebarComponents/SecondaryNavItem.vue | 2 +- .../dashboard/components/ui/WootButton.vue | 4 +- .../widgets/AutomationActionInput.vue | 2 +- .../widgets/AutomationFileInput.vue | 2 +- .../components/widgets/ChannelItem.vue | 2 +- .../components/widgets/DashboardApp/Frame.vue | 2 +- .../components/widgets/LabelSelector.vue | 4 +- .../components/widgets/Thumbnail.vue | 2 +- .../components/widgets/ThumbnailGroup.vue | 2 +- .../components/widgets/WootWriter/Editor.vue | 6 +- .../widgets/WootWriter/ReplyBottomPanel.vue | 2 +- .../conversation/ConversationBasicFilter.vue | 2 +- .../widgets/conversation/ConversationBox.vue | 8 +- .../widgets/conversation/ConversationCard.vue | 6 +- .../conversation/ConversationHeader.vue | 8 +- .../conversation/EmptyState/EmptyState.vue | 4 +- .../EmptyState/FeaturePlaceholder.vue | 2 +- .../widgets/conversation/Message.vue | 22 +- .../widgets/conversation/MessagesView.vue | 6 +- .../widgets/conversation/MoreActions.vue | 4 +- .../widgets/conversation/ReplyBox.vue | 16 +- .../conversation/bubble/ImageAudioVideo.vue | 2 +- .../conversation/components/GalleryView.vue | 2 +- .../contextMenu/agentLoadingPlaceholder.vue | 2 +- .../conversationBulkActions/AgentSelector.vue | 2 +- .../widgets/modal/ConfirmDeleteModal.vue | 2 +- .../widgets/modal/ConfirmationModal.vue | 2 +- .../components/widgets/modal/DeleteModal.vue | 2 +- .../widgets/modal/WootKeyShortcutModal.vue | 2 +- .../modules/contact/ContactMergeModal.vue | 2 +- .../contact/components/AddCustomAttribute.vue | 2 +- .../contact/components/ContactAttribute.vue | 2 +- .../components/ContactDropdownItem.vue | 2 +- .../contact/components/ContactFields.vue | 2 +- .../contact/components/ContactIntro.vue | 4 +- .../contact/components/ContactPanel.vue | 10 +- .../contact/components/MergeContact.vue | 4 +- .../components/MessageContextMenu.vue | 4 +- .../modules/notes/NotesOnContactPage.vue | 2 +- .../modules/notes/components/AddNote.vue | 2 +- .../modules/notes/components/ContactNote.vue | 2 +- .../modules/notes/components/NoteList.vue | 6 +- .../components/SearchResultMessagesList.vue | 2 +- .../widget-preview/components/Widget.vue | 8 +- .../widget-preview/components/WidgetBody.vue | 2 +- .../components/WidgetFooter.vue | 4 +- .../dashboard/routes/dashboard/Dashboard.vue | 12 +- .../contacts/components/ContactInfoPanel.vue | 6 +- .../contacts/components/ContactsTable.vue | 2 +- .../contacts/components/ContactsView.vue | 14 +- .../contacts/components/ImportContacts.vue | 2 +- .../contacts/pages/ContactManageView.vue | 6 +- .../conversation/ContactConversations.vue | 4 +- .../dashboard/conversation/ContactPanel.vue | 8 +- .../conversation/ConversationParticipant.vue | 6 +- .../conversation/ConversationView.vue | 6 +- .../dashboard/conversation/Macros/List.vue | 2 +- .../conversation/Macros/MacroItem.vue | 2 +- .../conversation/contact/ContactInfo.vue | 10 +- .../conversation/contact/ContactInfoRow.vue | 2 +- .../conversation/contact/ConversationForm.vue | 10 +- .../conversation/contact/CreateContact.vue | 2 +- .../conversation/contact/EditContact.vue | 2 +- .../conversation/contact/NewConversation.vue | 2 +- .../conversation/labels/LabelBox.vue | 6 +- .../helpcenter/components/AddLocale.vue | 2 +- .../helpcenter/components/ArticleEditor.vue | 2 +- .../helpcenter/components/ArticleTable.vue | 2 +- .../components/Header/ArticleHeader.vue | 2 +- .../components/HelpCenterLayout.vue | 10 +- .../helpcenter/components/PortalListItem.vue | 4 +- .../components/PortalSettingsBasicForm.vue | 2 +- .../helpcenter/components/PortalSwitch.vue | 2 +- .../helpcenter/components/Sidebar/Sidebar.vue | 4 +- .../components/Sidebar/SidebarHeader.vue | 2 +- .../pages/articles/ArticleSettings.vue | 2 +- .../helpcenter/pages/articles/EditArticle.vue | 8 +- .../pages/articles/ListAllArticles.vue | 6 +- .../helpcenter/pages/articles/NewArticle.vue | 2 +- .../pages/categories/ListAllCategories.vue | 6 +- .../helpcenter/pages/portals/EditPortal.vue | 4 +- .../pages/portals/EditPortalBasic.vue | 2 +- .../pages/portals/EditPortalCustomization.vue | 2 +- .../pages/portals/EditPortalLocales.vue | 2 +- .../pages/portals/ListAllPortals.vue | 6 +- .../helpcenter/pages/portals/NewPortal.vue | 2 +- .../pages/portals/PortalCustomization.vue | 2 +- .../pages/portals/PortalDetails.vue | 2 +- .../pages/portals/PortalSettingsFinish.vue | 2 +- .../components/NotificationPanel.vue | 2 +- .../components/NotificationsView.vue | 4 +- .../dashboard/settings/SettingsHeader.vue | 2 +- .../routes/dashboard/settings/Wrapper.vue | 2 +- .../agentBots/components/AgentBotRow.vue | 2 +- .../agentBots/components/CSMLMonacoEditor.vue | 2 +- .../settings/agentBots/csml/Edit.vue | 2 +- .../dashboard/settings/agents/EditAgent.vue | 4 +- .../dashboard/settings/agents/Index.vue | 6 +- .../settings/attributes/CustomAttribute.vue | 2 +- .../dashboard/settings/attributes/Index.vue | 4 +- .../dashboard/settings/auditlogs/Index.vue | 2 +- .../settings/campaigns/AddCampaign.vue | 2 +- .../dashboard/settings/campaigns/Campaign.vue | 4 +- .../settings/campaigns/CampaignCard.vue | 4 +- .../settings/campaigns/EditCampaign.vue | 2 +- .../dashboard/settings/campaigns/Index.vue | 2 +- .../dashboard/settings/canned/AddCanned.vue | 6 +- .../dashboard/settings/canned/EditCanned.vue | 6 +- .../dashboard/settings/canned/Index.vue | 4 +- .../dashboard/settings/inbox/AddAgents.vue | 2 +- .../dashboard/settings/inbox/ChannelList.vue | 4 +- .../dashboard/settings/inbox/FinishSetup.vue | 2 +- .../dashboard/settings/inbox/ImapSettings.vue | 2 +- .../routes/dashboard/settings/inbox/Index.vue | 2 +- .../settings/inbox/PreChatForm/Settings.vue | 2 +- .../dashboard/settings/inbox/Settings.vue | 22 +- .../dashboard/settings/inbox/SmtpSettings.vue | 6 +- .../settings/inbox/WidgetBuilder.vue | 4 +- .../dashboard/settings/inbox/channels/Api.vue | 2 +- .../settings/inbox/channels/Email.vue | 6 +- .../settings/inbox/channels/Facebook.vue | 4 +- .../settings/inbox/channels/Line.vue | 2 +- .../dashboard/settings/inbox/channels/Sms.vue | 4 +- .../settings/inbox/channels/Telegram.vue | 2 +- .../settings/inbox/channels/Website.vue | 4 +- .../settings/inbox/channels/Whatsapp.vue | 8 +- .../emailChannels/ForwardToOption.vue | 2 +- .../inbox/channels/microsoft/Reauthorize.vue | 2 +- .../inbox/components/BotConfiguration.vue | 4 +- .../components/SenderNameExamplePreview.vue | 4 +- .../inbox/components/WeeklyAvailability.vue | 6 +- .../settings/inbox/facebook/Reauthorize.vue | 2 +- .../inbox/settingsPage/CollaboratorsPage.vue | 2 +- .../inbox/settingsPage/ConfigurationPage.vue | 8 +- .../settings/integrationapps/Index.vue | 2 +- .../integrationapps/IntegrationHooks.vue | 6 +- .../integrationapps/IntegrationItem.vue | 2 +- .../dashboard/settings/integrations/Index.vue | 2 +- .../settings/integrations/ShowIntegration.vue | 4 +- .../dashboard/settings/integrations/Slack.vue | 2 +- .../settings/integrations/Webhooks/Index.vue | 6 +- .../integrations/Webhooks/WebhookRow.vue | 2 +- .../dashboard/settings/labels/Index.vue | 4 +- .../dashboard/settings/macros/Index.vue | 2 +- .../dashboard/settings/macros/MacroEditor.vue | 2 +- .../dashboard/settings/macros/MacroForm.vue | 4 +- .../dashboard/settings/macros/MacroNode.vue | 2 +- .../settings/macros/MacrosTableRow.vue | 2 +- .../dashboard/settings/profile/Index.vue | 6 +- .../settings/profile/MessageSignature.vue | 2 +- .../settings/reports/AgentReports.vue | 2 +- .../settings/reports/CsatResponses.vue | 6 +- .../settings/reports/InboxReports.vue | 2 +- .../dashboard/settings/reports/Index.vue | 2 +- .../settings/reports/LabelReports.vue | 2 +- .../settings/reports/LiveReports.vue | 6 +- .../settings/reports/TeamReports.vue | 2 +- .../reports/components/CsatMetrics.vue | 2 +- .../settings/reports/components/CsatTable.vue | 2 +- .../reports/components/WootReports.vue | 2 +- .../settings/teams/Create/AddAgents.vue | 4 +- .../settings/teams/Create/CreateTeam.vue | 4 +- .../settings/teams/Edit/EditAgents.vue | 6 +- .../settings/teams/Edit/EditTeam.vue | 6 +- .../dashboard/settings/teams/FinishSetup.vue | 2 +- .../dashboard/settings/teams/TeamForm.vue | 2 +- .../routes/dashboard/suspended/Index.vue | 2 +- .../portal/components/PublicArticleSearch.vue | 4 +- app/javascript/shared/components/ChatCard.vue | 2 +- .../shared/components/ChatOptions.vue | 2 +- .../components/CustomerSatisfaction.vue | 2 +- .../components/FluentIcon/DashboardIcon.vue | 2 +- .../shared/components/FluentIcon/Index.vue | 2 +- .../shared/components/GreetingsEditor.vue | 4 +- .../shared/components/IframeLoader.vue | 2 +- .../components/ui/MultiselectDropdown.vue | 2 +- .../ui/dropdown/DropdownSubMenu.vue | 2 +- .../components/ui/label/LabelDropdown.vue | 6 +- app/javascript/survey/components/Feedback.vue | 4 +- app/javascript/survey/views/Response.vue | 10 +- .../v3/components/Button/SubmitButton.vue | 2 +- .../v3/components/SnackBar/Container.vue | 2 +- .../v3/views/auth/confirmation/Index.vue | 2 +- app/javascript/v3/views/login/Index.vue | 4 +- .../widget/components/AgentMessage.vue | 10 +- .../widget/components/AgentMessageBubble.vue | 14 +- .../widget/components/ArticleList.vue | 2 +- .../widget/components/ChatFooter.vue | 2 +- .../widget/components/ChatHeader.vue | 2 +- .../widget/components/ChatHeaderExpanded.vue | 2 +- .../widget/components/ChatInputWrap.vue | 2 +- .../widget/components/PreChat/Form.vue | 4 +- .../widget/components/UnreadMessage.vue | 2 +- .../widget/components/UserMessage.vue | 8 +- .../widget/components/template/EmailInput.vue | 2 +- app/javascript/widget/views/ArticleViewer.vue | 2 +- app/javascript/widget/views/Home.vue | 6 +- app/javascript/widget/views/PreChatForm.vue | 2 +- package.json | 6 +- yarn.lock | 634 +++++++++--------- 211 files changed, 744 insertions(+), 710 deletions(-) diff --git a/app/javascript/dashboard/App.vue b/app/javascript/dashboard/App.vue index b115f17b5..649d56d15 100644 --- a/app/javascript/dashboard/App.vue +++ b/app/javascript/dashboard/App.vue @@ -26,14 +26,14 @@