From cbbe9396620ae27eda4d11d027063ea05692f7e1 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Tue, 26 Sep 2023 09:38:14 +0530 Subject: [PATCH 01/69] fix: Set avatar for users(agent/contact) in slack channels (#7960) --- app/controllers/slack_uploads_controller.rb | 27 ++++++++++++ config/routes.rb | 1 + .../slack/send_on_slack_service.rb | 8 +++- .../slack_uploads_controller_spec.rb | 44 +++++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 app/controllers/slack_uploads_controller.rb create mode 100644 spec/controllers/slack_uploads_controller_spec.rb diff --git a/app/controllers/slack_uploads_controller.rb b/app/controllers/slack_uploads_controller.rb new file mode 100644 index 000000000..127e77649 --- /dev/null +++ b/app/controllers/slack_uploads_controller.rb @@ -0,0 +1,27 @@ +class SlackUploadsController < ApplicationController + include Rails.application.routes.url_helpers + before_action :set_blob, only: [:show] + + def show + if @blob + redirect_to blob_url + else + redirect_to avatar_url + end + end + + private + + def set_blob + @blob = ActiveStorage::Blob.find_by(key: params[:blob_key]) + end + + def blob_url + url_for(@blob.representation(resize_to_fill: [250, nil])) + end + + def avatar_url + base_url = ENV.fetch('FRONTEND_URL', nil) + "#{base_url}/integrations/slack/#{params[:sender_type]}.png" + end +end diff --git a/config/routes.rb b/config/routes.rb index 424bfa630..75a300957 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -25,6 +25,7 @@ Rails.application.routes.draw do namespace :survey do resources :responses, only: [:show] end + resource :slack_uploads, only: [:show] end get '/api', to: 'api#index' diff --git a/lib/integrations/slack/send_on_slack_service.rb b/lib/integrations/slack/send_on_slack_service.rb index c0202c9a3..d4889bc4c 100644 --- a/lib/integrations/slack/send_on_slack_service.rb +++ b/lib/integrations/slack/send_on_slack_service.rb @@ -74,7 +74,13 @@ class Integrations::Slack::SendOnSlackService < Base::SendOnChannelService def avatar_url(sender) sender_type = sender.instance_of?(Contact) ? 'contact' : 'user' - "#{ENV.fetch('FRONTEND_URL', nil)}/integrations/slack/#{sender_type}.png" + blob_key = sender&.avatar&.attached? ? sender.avatar.blob.key : nil + generate_url(sender_type, blob_key) + end + + def generate_url(sender_type, blob_key) + base_url = ENV.fetch('FRONTEND_URL', nil) + "#{base_url}/slack_uploads?blob_key=#{blob_key}&sender_type=#{sender_type}" end def send_message diff --git a/spec/controllers/slack_uploads_controller_spec.rb b/spec/controllers/slack_uploads_controller_spec.rb new file mode 100644 index 000000000..eef00ad1c --- /dev/null +++ b/spec/controllers/slack_uploads_controller_spec.rb @@ -0,0 +1,44 @@ +require 'rails_helper' + +RSpec.describe SlackUploadsController do + describe 'GET #show' do + context 'when a valid blob key is provided' do + file = Rack::Test::UploadedFile.new('spec/assets/avatar.png', 'image/png') + blob = ActiveStorage::Blob.create_and_upload! io: file, filename: 'avatar.png' + + it 'redirects to the blob service URL' do + get :show, params: { blob_key: blob.key } + redirect_path = response.location + expect(redirect_path).to match(%r{rails/active_storage/representations/redirect/.*/avatar.png}) + end + end + + context 'when an invalid blob key is provided' do + it 'returns contact default avatar url if the user is contact' do + get :show, params: { key: 'invalid_key', sender_type: 'contact' } + redirect_path = response.location + expect(redirect_path).to match(%r{integrations/slack/contact.png}) + end + + it 'returns agent default avatar url if the user is agent' do + get :show, params: { key: 'invalid_key', sender_type: 'user' } + redirect_path = response.location + expect(redirect_path).to match(%r{integrations/slack/user.png}) + end + end + + context 'when no blob key is provided' do + it 'returns contact default avatar url if the user is contact' do + get :show, params: { sender_type: 'contact' } + redirect_path = response.location + expect(redirect_path).to match(%r{integrations/slack/contact.png}) + end + + it 'returns agent default avatar url if the user is agent' do + get :show, params: { sender_type: 'user' } + redirect_path = response.location + expect(redirect_path).to match(%r{integrations/slack/user.png}) + end + end + end +end From 647161121e85098357922cb58c68f50ebd7e281d Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Tue, 26 Sep 2023 21:05:21 -0700 Subject: [PATCH 02/69] chore: pass to agent if there is error parsing json (#7990) - GPT bot should pass the conversation to the agent if AI returns invalid json or any other error --- .github/workflows/run_response_bot_spec.yml | 7 ++- .../message_templates/response_bot_service.rb | 17 +++--- .../response_bot_service_spec.rb | 59 +++++++++++++++++++ 3 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 spec/enterprise/services/enterprise/message_templates/response_bot_service_spec.rb diff --git a/.github/workflows/run_response_bot_spec.yml b/.github/workflows/run_response_bot_spec.yml index ded5c903e..6fd6a7b22 100644 --- a/.github/workflows/run_response_bot_spec.yml +++ b/.github/workflows/run_response_bot_spec.yml @@ -69,7 +69,12 @@ jobs: # Run Response Bot specs - name: Run backend tests run: | - bundle exec rspec spec/enterprise/controllers/api/v1/accounts/response_sources_controller_spec.rb spec/enterprise/controllers/enterprise/api/v1/accounts/inboxes_controller_spec.rb:47 --profile=10 --format documentation + bundle exec rspec \ + spec/enterprise/controllers/api/v1/accounts/response_sources_controller_spec.rb \ + spec/enterprise/services/enterprise/message_templates/response_bot_service_spec.rb \ + spec/enterprise/controllers/enterprise/api/v1/accounts/inboxes_controller_spec.rb:47 \ + --profile=10 \ + --format documentation - name: Upload rails log folder uses: actions/upload-artifact@v3 diff --git a/enterprise/app/services/enterprise/message_templates/response_bot_service.rb b/enterprise/app/services/enterprise/message_templates/response_bot_service.rb index 03fe34a44..ddb986975 100644 --- a/enterprise/app/services/enterprise/message_templates/response_bot_service.rb +++ b/enterprise/app/services/enterprise/message_templates/response_bot_service.rb @@ -4,9 +4,10 @@ class Enterprise::MessageTemplates::ResponseBotService def perform ActiveRecord::Base.transaction do response = get_response(conversation.messages.last.content) - process_response(conversation.messages.last, response['response']) + process_response(response['response']) end rescue StandardError => e + process_action('handoff') # something went wrong, pass to agent ChatwootExceptionTracker.new(e, account: conversation.account).capture_exception true end @@ -43,15 +44,15 @@ class Enterprise::MessageTemplates::ResponseBotService message.message_type == 'incoming' ? 'user' : 'system' end - def process_response(message, response) + def process_response(response) if response == 'conversation_handoff' - process_action(message, 'handoff') + process_action('handoff') else - create_messages(response, conversation) + create_messages(response) end end - def process_action(_message, action) + def process_action(action) case action when 'handoff' conversation.messages.create!('message_type': :outgoing, 'account_id': conversation.account_id, 'inbox_id': conversation.inbox_id, @@ -60,9 +61,9 @@ class Enterprise::MessageTemplates::ResponseBotService end end - def create_messages(response, conversation) + def create_messages(response) response = process_response_content(response).first - create_outgoing_message(response, conversation) + create_outgoing_message(response) end def process_response_content(response) @@ -79,7 +80,7 @@ class Enterprise::MessageTemplates::ResponseBotService [response, article_ids] end - def create_outgoing_message(response, conversation) + def create_outgoing_message(response) conversation.messages.create!( { message_type: :outgoing, diff --git a/spec/enterprise/services/enterprise/message_templates/response_bot_service_spec.rb b/spec/enterprise/services/enterprise/message_templates/response_bot_service_spec.rb new file mode 100644 index 000000000..5b3d89f17 --- /dev/null +++ b/spec/enterprise/services/enterprise/message_templates/response_bot_service_spec.rb @@ -0,0 +1,59 @@ +require 'rails_helper' + +RSpec.describe Enterprise::MessageTemplates::ResponseBotService, type: :service do + let!(:conversation) { create(:conversation, status: :pending) } + let(:service) { described_class.new(conversation: conversation) } + let(:chat_gpt_double) { instance_double(ChatGpt) } + let(:response_object) { instance_double(Response, id: 1, question: 'Q1', answer: 'A1') } + + before do + # Uncomment if you want to run the spec in your local machine + # Features::ResponseBotService.new.enable_in_installation + skip('Skipping since vector is not enabled in this environment') unless Features::ResponseBotService.new.vector_extension_enabled? + + create(:message, message_type: :incoming, conversation: conversation, content: 'Hi') + allow(ChatGpt).to receive(:new).and_return(chat_gpt_double) + allow(chat_gpt_double).to receive(:generate_response).and_return({ 'response' => 'some_response', :context_ids => [1, 2] }) + allow(conversation.inbox).to receive(:get_responses).and_return([response_object]) + end + + describe '#perform' do + context 'when successful' do + it 'creates an outgoing message' do + expect do + service.perform + end.to change { conversation.messages.where(message_type: :outgoing).count }.by(1) + + expect(conversation.messages.last.content).to eq('some_response') + end + end + + context 'when JSON::ParserError is raised' do + it 'creates a handoff message' do + allow(chat_gpt_double).to receive(:generate_response).and_raise(JSON::ParserError) + + expect do + service.perform + end.to change { conversation.messages.where(message_type: :outgoing).count }.by(1) + + expect(conversation.messages.last.content).to eq('passing to an agent') + expect(conversation.status).to eq('open') + end + end + + context 'when StandardError is raised' do + it 'captures the exception' do + allow(chat_gpt_double).to receive(:generate_response).and_raise(StandardError) + + expect(ChatwootExceptionTracker).to receive(:new).and_call_original + + expect do + service.perform + end.to change { conversation.messages.where(message_type: :outgoing).count }.by(1) + + expect(conversation.messages.last.content).to eq('passing to an agent') + expect(conversation.status).to eq('open') + end + end + end +end From b18cac77fbae394f407de1c85a952abfc3432c1b Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Wed, 27 Sep 2023 11:05:19 +0530 Subject: [PATCH 03/69] chore: Moved file upload methods to mixin (#7987) Co-authored-by: Muhsin Keloth --- .../widgets/conversation/ReplyBox.vue | 71 +----------------- .../dashboard/mixins/fileUploadMixin.js | 72 ++++++++++++++++++ .../mixins/specs/fileUploadMixin.spec.js | 75 +++++++++++++++++++ 3 files changed, 150 insertions(+), 68 deletions(-) create mode 100644 app/javascript/dashboard/mixins/fileUploadMixin.js create mode 100644 app/javascript/dashboard/mixins/specs/fileUploadMixin.spec.js diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue index 6a3212e5b..373df5b76 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue @@ -159,12 +159,7 @@ import { REPLY_EDITOR_MODES } from 'dashboard/components/widgets/WootWriter/cons import WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue'; import WootAudioRecorder from 'dashboard/components/widgets/WootWriter/AudioRecorder.vue'; import messageFormatterMixin from 'shared/mixins/messageFormatterMixin'; -import { checkFileSizeLimit } from 'shared/helpers/FileHelper'; -import { - MAXIMUM_FILE_UPLOAD_SIZE, - MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL, - AUDIO_FORMATS, -} from 'shared/constants/messages'; +import { AUDIO_FORMATS } from 'shared/constants/messages'; import { BUS_EVENTS } from 'shared/constants/busEvents'; import { getMessageVariables, @@ -176,13 +171,13 @@ import { buildHotKeys } from 'shared/helpers/KeyboardHelpers'; import { MESSAGE_MAX_LENGTH } from 'shared/helpers/MessageTypeHelper'; import inboxMixin from 'shared/mixins/inboxMixin'; import uiSettingsMixin from 'dashboard/mixins/uiSettings'; -import { DirectUpload } from 'activestorage'; import { frontendURL } from '../../../helper/URLHelper'; import { trimContent, debounce } from '@chatwoot/utils'; import wootConstants from 'dashboard/constants/globals'; import { isEditorHotKeyEnabled } from 'dashboard/mixins/uiSettings'; import { CONVERSATION_EVENTS } from '../../../helper/AnalyticsHelper/events'; import rtlMixin from 'shared/mixins/rtlMixin'; +import fileUploadMixin from 'dashboard/mixins/fileUploadMixin'; import { appendSignature, removeSignature, @@ -213,6 +208,7 @@ export default { alertMixin, messageFormatterMixin, rtlMixin, + fileUploadMixin, ], props: { selectedTweet: { @@ -944,67 +940,6 @@ export default { isPrivate, }); }, - onFileUpload(file) { - if (this.globalConfig.directUploadsEnabled) { - this.onDirectFileUpload(file); - } else { - this.onIndirectFileUpload(file); - } - }, - onDirectFileUpload(file) { - const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel - ? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL - : MAXIMUM_FILE_UPLOAD_SIZE; - - if (!file) { - return; - } - if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) { - const upload = new DirectUpload( - file.file, - `/api/v1/accounts/${this.accountId}/conversations/${this.currentChat.id}/direct_uploads`, - { - directUploadWillCreateBlobWithXHR: xhr => { - xhr.setRequestHeader( - 'api_access_token', - this.currentUser.access_token - ); - }, - } - ); - - upload.create((error, blob) => { - if (error) { - this.showAlert(error); - } else { - this.attachFile({ file, blob }); - } - }); - } else { - this.showAlert( - this.$t('CONVERSATION.FILE_SIZE_LIMIT', { - MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE, - }) - ); - } - }, - onIndirectFileUpload(file) { - const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel - ? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL - : MAXIMUM_FILE_UPLOAD_SIZE; - if (!file) { - return; - } - if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) { - this.attachFile({ file }); - } else { - this.showAlert( - this.$t('CONVERSATION.FILE_SIZE_LIMIT', { - MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE, - }) - ); - } - }, attachFile({ blob, file }) { const reader = new FileReader(); reader.readAsDataURL(file.file); diff --git a/app/javascript/dashboard/mixins/fileUploadMixin.js b/app/javascript/dashboard/mixins/fileUploadMixin.js new file mode 100644 index 000000000..0f221c209 --- /dev/null +++ b/app/javascript/dashboard/mixins/fileUploadMixin.js @@ -0,0 +1,72 @@ +import { + MAXIMUM_FILE_UPLOAD_SIZE, + MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL, +} from 'shared/constants/messages'; +import { checkFileSizeLimit } from 'shared/helpers/FileHelper'; +import { DirectUpload } from 'activestorage'; + +export default { + methods: { + onFileUpload(file) { + if (this.globalConfig.directUploadsEnabled) { + this.onDirectFileUpload(file); + } else { + this.onIndirectFileUpload(file); + } + }, + onDirectFileUpload(file) { + const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel + ? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL + : MAXIMUM_FILE_UPLOAD_SIZE; + + if (!file) { + return; + } + if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) { + const upload = new DirectUpload( + file.file, + `/api/v1/accounts/${this.accountId}/conversations/${this.currentChat.id}/direct_uploads`, + { + directUploadWillCreateBlobWithXHR: xhr => { + xhr.setRequestHeader( + 'api_access_token', + this.currentUser.access_token + ); + }, + } + ); + + upload.create((error, blob) => { + if (error) { + this.showAlert(error); + } else { + this.attachFile({ file, blob }); + } + }); + } else { + this.showAlert( + this.$t('CONVERSATION.FILE_SIZE_LIMIT', { + MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE, + }) + ); + } + }, + onIndirectFileUpload(file) { + const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel + ? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL + : MAXIMUM_FILE_UPLOAD_SIZE; + if (!file) { + return; + } + if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) { + this.attachFile({ file }); + } else { + this.showAlert( + this.$t('CONVERSATION.FILE_SIZE_LIMIT', { + MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE, + }) + ); + } + }, + }, +}; diff --git a/app/javascript/dashboard/mixins/specs/fileUploadMixin.spec.js b/app/javascript/dashboard/mixins/specs/fileUploadMixin.spec.js new file mode 100644 index 000000000..5f2234fd2 --- /dev/null +++ b/app/javascript/dashboard/mixins/specs/fileUploadMixin.spec.js @@ -0,0 +1,75 @@ +import fileUploadMixin from 'dashboard/mixins/fileUploadMixin'; +import Vue from 'vue'; + +jest.mock('shared/helpers/FileHelper', () => ({ + checkFileSizeLimit: jest.fn(), +})); + +jest.mock('activestorage', () => ({ + DirectUpload: jest.fn().mockImplementation(() => ({ + create: jest.fn(), + })), +})); + +describe('FileUploadMixin', () => { + let vm; + + beforeEach(() => { + vm = new Vue(fileUploadMixin); + vm.isATwilioSMSChannel = false; + vm.globalConfig = { + directUploadsEnabled: true, + }; + vm.accountId = 123; + vm.currentChat = { + id: 456, + }; + vm.currentUser = { + access_token: 'token', + }; + vm.$t = jest.fn(message => message); + vm.showAlert = jest.fn(); + vm.attachFile = jest.fn(); + }); + + it('should call onDirectFileUpload when direct uploads are enabled', () => { + vm.onDirectFileUpload = jest.fn(); + vm.onFileUpload({}); + expect(vm.onDirectFileUpload).toHaveBeenCalledWith({}); + }); + + it('should call onIndirectFileUpload when direct uploads are disabled', () => { + vm.globalConfig.directUploadsEnabled = false; + vm.onIndirectFileUpload = jest.fn(); + vm.onFileUpload({}); + expect(vm.onIndirectFileUpload).toHaveBeenCalledWith({}); + }); + + describe('onDirectFileUpload', () => { + it('returns early if no file is provided', () => { + const returnValue = vm.onDirectFileUpload(null); + expect(returnValue).toBeUndefined(); + }); + + it('shows an alert if the file size exceeds the maximum limit', () => { + const fakeFile = { size: 999999999 }; + vm.showAlert = jest.fn(); + vm.onDirectFileUpload(fakeFile); + expect(vm.showAlert).toHaveBeenCalledWith(expect.any(String)); + }); + }); + + describe('onIndirectFileUpload', () => { + it('returns early if no file is provided', () => { + const returnValue = vm.onIndirectFileUpload(null); + expect(returnValue).toBeUndefined(); + }); + + it('shows an alert if the file size exceeds the maximum limit', () => { + const fakeFile = { size: 999999999 }; + vm.showAlert = jest.fn(); + vm.onIndirectFileUpload(fakeFile); + expect(vm.showAlert).toHaveBeenCalledWith(expect.any(String)); + }); + }); +}); From e8b7e791a50ca0918c6b5fbfff3e78e38d7ba94b Mon Sep 17 00:00:00 2001 From: Chatwoot Bot <92152627+chatwoot-bot@users.noreply.github.com> Date: Wed, 27 Sep 2023 12:47:03 +0530 Subject: [PATCH 04/69] chore: Update translations (#7969) --- .../dashboard/i18n/locale/am/inboxMgmt.json | 2 + .../dashboard/i18n/locale/am/settings.json | 2 +- .../dashboard/i18n/locale/ar/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ar/settings.json | 2 +- .../dashboard/i18n/locale/bg/inboxMgmt.json | 2 + .../dashboard/i18n/locale/bg/settings.json | 2 +- .../dashboard/i18n/locale/ca/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ca/settings.json | 2 +- .../dashboard/i18n/locale/cs/inboxMgmt.json | 2 + .../dashboard/i18n/locale/cs/settings.json | 2 +- .../dashboard/i18n/locale/da/inboxMgmt.json | 2 + .../dashboard/i18n/locale/da/settings.json | 2 +- .../dashboard/i18n/locale/de/inboxMgmt.json | 2 + .../dashboard/i18n/locale/de/settings.json | 2 +- .../dashboard/i18n/locale/el/inboxMgmt.json | 2 + .../dashboard/i18n/locale/el/settings.json | 2 +- .../dashboard/i18n/locale/es/inboxMgmt.json | 2 + .../dashboard/i18n/locale/es/settings.json | 2 +- .../dashboard/i18n/locale/fa/inboxMgmt.json | 2 + .../dashboard/i18n/locale/fa/settings.json | 2 +- .../dashboard/i18n/locale/fi/inboxMgmt.json | 2 + .../dashboard/i18n/locale/fi/settings.json | 2 +- .../dashboard/i18n/locale/fr/inboxMgmt.json | 2 + .../dashboard/i18n/locale/fr/settings.json | 2 +- .../dashboard/i18n/locale/he/inboxMgmt.json | 2 + .../dashboard/i18n/locale/he/settings.json | 2 +- .../dashboard/i18n/locale/hi/inboxMgmt.json | 2 + .../dashboard/i18n/locale/hi/settings.json | 2 +- .../dashboard/i18n/locale/hr/inboxMgmt.json | 2 + .../dashboard/i18n/locale/hr/settings.json | 2 +- .../dashboard/i18n/locale/hu/inboxMgmt.json | 2 + .../dashboard/i18n/locale/hu/settings.json | 2 +- .../dashboard/i18n/locale/hy/inboxMgmt.json | 2 + .../dashboard/i18n/locale/hy/settings.json | 2 +- .../dashboard/i18n/locale/id/inboxMgmt.json | 2 + .../dashboard/i18n/locale/id/settings.json | 2 +- .../dashboard/i18n/locale/is/inboxMgmt.json | 2 + .../dashboard/i18n/locale/is/settings.json | 2 +- .../dashboard/i18n/locale/it/inboxMgmt.json | 2 + .../dashboard/i18n/locale/it/settings.json | 2 +- .../dashboard/i18n/locale/ja/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ja/settings.json | 2 +- .../dashboard/i18n/locale/ka/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ka/settings.json | 2 +- .../dashboard/i18n/locale/ko/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ko/settings.json | 2 +- .../dashboard/i18n/locale/lt/auditLogs.json | 4 +- .../dashboard/i18n/locale/lt/inboxMgmt.json | 6 +- .../dashboard/i18n/locale/lt/settings.json | 2 +- .../dashboard/i18n/locale/lv/inboxMgmt.json | 2 + .../dashboard/i18n/locale/lv/settings.json | 2 +- .../dashboard/i18n/locale/ml/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ml/settings.json | 2 +- .../dashboard/i18n/locale/ms/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ms/settings.json | 2 +- .../dashboard/i18n/locale/ne/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ne/settings.json | 2 +- .../dashboard/i18n/locale/nl/inboxMgmt.json | 2 + .../dashboard/i18n/locale/nl/settings.json | 2 +- .../dashboard/i18n/locale/no/inboxMgmt.json | 2 + .../dashboard/i18n/locale/no/settings.json | 2 +- .../dashboard/i18n/locale/pl/inboxMgmt.json | 2 + .../dashboard/i18n/locale/pl/settings.json | 2 +- .../dashboard/i18n/locale/pt/inboxMgmt.json | 2 + .../dashboard/i18n/locale/pt/settings.json | 2 +- .../i18n/locale/pt_BR/inboxMgmt.json | 2 + .../dashboard/i18n/locale/pt_BR/settings.json | 2 +- .../dashboard/i18n/locale/ro/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ro/settings.json | 2 +- .../dashboard/i18n/locale/ru/auditLogs.json | 20 +++--- .../dashboard/i18n/locale/ru/chatlist.json | 2 +- .../dashboard/i18n/locale/ru/contact.json | 2 +- .../i18n/locale/ru/conversation.json | 8 +-- .../i18n/locale/ru/generalSettings.json | 22 +++---- .../dashboard/i18n/locale/ru/inboxMgmt.json | 30 +++++---- .../i18n/locale/ru/integrations.json | 66 +++++++++---------- .../dashboard/i18n/locale/ru/labelsMgmt.json | 16 ++--- .../dashboard/i18n/locale/ru/report.json | 4 +- .../i18n/locale/ru/resetPassword.json | 4 +- .../dashboard/i18n/locale/ru/settings.json | 8 +-- .../dashboard/i18n/locale/sh/inboxMgmt.json | 2 + .../dashboard/i18n/locale/sh/settings.json | 2 +- .../dashboard/i18n/locale/sk/inboxMgmt.json | 2 + .../dashboard/i18n/locale/sk/settings.json | 2 +- .../dashboard/i18n/locale/sl/inboxMgmt.json | 2 + .../dashboard/i18n/locale/sl/settings.json | 2 +- .../dashboard/i18n/locale/sr/agentMgmt.json | 6 +- .../dashboard/i18n/locale/sr/inboxMgmt.json | 2 + .../dashboard/i18n/locale/sr/settings.json | 2 +- .../dashboard/i18n/locale/sv/inboxMgmt.json | 2 + .../dashboard/i18n/locale/sv/settings.json | 2 +- .../dashboard/i18n/locale/ta/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ta/settings.json | 2 +- .../dashboard/i18n/locale/th/inboxMgmt.json | 2 + .../dashboard/i18n/locale/th/settings.json | 2 +- .../dashboard/i18n/locale/tr/inboxMgmt.json | 2 + .../dashboard/i18n/locale/tr/settings.json | 2 +- .../dashboard/i18n/locale/uk/inboxMgmt.json | 2 + .../dashboard/i18n/locale/uk/settings.json | 2 +- .../dashboard/i18n/locale/ur/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ur/settings.json | 2 +- .../i18n/locale/ur_IN/inboxMgmt.json | 2 + .../dashboard/i18n/locale/ur_IN/settings.json | 2 +- .../dashboard/i18n/locale/vi/inboxMgmt.json | 2 + .../dashboard/i18n/locale/vi/settings.json | 2 +- .../i18n/locale/zh_CN/inboxMgmt.json | 2 + .../dashboard/i18n/locale/zh_CN/settings.json | 2 +- .../i18n/locale/zh_TW/inboxMgmt.json | 2 + .../dashboard/i18n/locale/zh_TW/settings.json | 2 +- app/javascript/widget/i18n/locale/es.json | 6 +- app/javascript/widget/i18n/locale/lt.json | 4 +- app/javascript/widget/i18n/locale/ru.json | 8 +-- config/locales/ru.yml | 2 +- 113 files changed, 253 insertions(+), 155 deletions(-) diff --git a/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json index 99ac944a8..74eff2033 100644 --- a/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/am/settings.json b/app/javascript/dashboard/i18n/locale/am/settings.json index 22154ba4e..556314985 100644 --- a/app/javascript/dashboard/i18n/locale/am/settings.json +++ b/app/javascript/dashboard/i18n/locale/am/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", diff --git a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json index 40b7b80cd..692ae08ec 100644 --- a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "جار المصادقة والربط مع الفيسبوك...", "ERROR_FB_AUTH": "حدث خطأ ما، الرجاء تحديث الصفحة...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "جار إنشاء قناة التواصل...", "TITLE": "تهيئة إعدادات قناة التواصل", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ar/settings.json b/app/javascript/dashboard/i18n/locale/ar/settings.json index 18a77c37b..7e6102eaf 100644 --- a/app/javascript/dashboard/i18n/locale/ar/settings.json +++ b/app/javascript/dashboard/i18n/locale/ar/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "توقيع الرسالة الشخصية", - "NOTE": "إنشاء توقيع رسالة شخصية يتم إضافتها إلى جميع الرسائل التي ترسلها من المنصة. استخدم محرر المحتوى الغني لإنشاء توقيع شديد التخصيص.", + "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": "حفظ توقيع الرسالة", "API_ERROR": "تعذر إرسال الرسالة! حاول مرة أخرى", "API_SUCCESS": "تم حفظ التوقيع بنجاح", diff --git a/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json index 109c4f42f..f4fecc0c8 100644 --- a/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/bg/settings.json b/app/javascript/dashboard/i18n/locale/bg/settings.json index 7b0e858ad..8c5cdf646 100644 --- a/app/javascript/dashboard/i18n/locale/bg/settings.json +++ b/app/javascript/dashboard/i18n/locale/bg/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", diff --git a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json index 0aca0fbe0..1fecc2d85 100644 --- a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "S'està autenticant amb Facebook...", "ERROR_FB_AUTH": "Alguna cosa ha anat malament, actualitza la pàgina...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "S'està creant la safata d'entrada...", "TITLE": "Configura els detalls de la safata d'entrada", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ca/settings.json b/app/javascript/dashboard/i18n/locale/ca/settings.json index bbac7f1e6..7e193af94 100644 --- a/app/javascript/dashboard/i18n/locale/ca/settings.json +++ b/app/javascript/dashboard/i18n/locale/ca/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", diff --git a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json index 0009e17f6..0c33b9d21 100644 --- a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Ověřování pomocí Facebooku...", "ERROR_FB_AUTH": "Něco se pokazilo, prosím obnovte stránku...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Vytvářím vaši doručenou poštu...", "TITLE": "Konfigurace detailů doručené pošty", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/cs/settings.json b/app/javascript/dashboard/i18n/locale/cs/settings.json index ec32e30bc..198e6d8fb 100644 --- a/app/javascript/dashboard/i18n/locale/cs/settings.json +++ b/app/javascript/dashboard/i18n/locale/cs/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", diff --git a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json index 40b0cfd03..ed1c78f3f 100644 --- a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autentificerer dig med Facebook...", "ERROR_FB_AUTH": "Noget gik galt, Opdatér siden...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Opretter din indbakke...", "TITLE": "Indstil Indbakkedetaljer", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/da/settings.json b/app/javascript/dashboard/i18n/locale/da/settings.json index 4eb934844..12cabc144 100644 --- a/app/javascript/dashboard/i18n/locale/da/settings.json +++ b/app/javascript/dashboard/i18n/locale/da/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Personlig beskedsignatur", - "NOTE": "Opret en personlig besked signatur, der vil blive føjet til alle de meddelelser, du sender fra din e-mail indbakke. Brug den rige content editor til at oprette en meget personlig signatur.", + "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": "Gem beskedsignatur", "API_ERROR": "Kunne ikke gemme signatur! Prøv igen", "API_SUCCESS": "Signatur gemt", diff --git a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json index f10d8105a..4b3d49b84 100644 --- a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authentifizierung mit Facebook ...", "ERROR_FB_AUTH": "Es ist ein Fehler aufgetreten. Bitte Seite aktualisieren ...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Erstellen Sie Ihren Posteingang ...", "TITLE": "Posteingangsdetails konfigurieren", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/de/settings.json b/app/javascript/dashboard/i18n/locale/de/settings.json index 363e8beaf..25b9c8bf2 100644 --- a/app/javascript/dashboard/i18n/locale/de/settings.json +++ b/app/javascript/dashboard/i18n/locale/de/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Persönliche Nachrichtensignatur", - "NOTE": "Erstellen Sie eine persönliche Nachrichtensignatur, die allen Nachrichten hinzugefügt wird, die Sie aus Ihrem E-Mail-Posteingang senden. Verwenden Sie den Rich-Content-Editor, um eine stark personalisierte Signatur zu erstellen.", + "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": "Nachrichten-Signatur speichern", "API_ERROR": "Signatur konnte nicht gespeichert werden! Versuch es noch einmal", "API_SUCCESS": "Signatur erfolgreich gespeichert", diff --git a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json index f7b8b7c67..5956d81e5 100644 --- a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Πιστοποίηση ταυτότητας στο Facebook...", "ERROR_FB_AUTH": "Κάτι πήγε στραβά, Παρακαλώ ανανεώστε την σελίδα...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Δημιουργία κιβωτίου εισερχομένων...", "TITLE": "Διαμόρφωση λεπτομερειών κιβωτίου", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/el/settings.json b/app/javascript/dashboard/i18n/locale/el/settings.json index d1ef828c1..759227acb 100644 --- a/app/javascript/dashboard/i18n/locale/el/settings.json +++ b/app/javascript/dashboard/i18n/locale/el/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Προσωπική υπογραφή μηνύματος", - "NOTE": "Δημιουργήστε μια προσωπική υπογραφή, η οποία θα προστεθεί σε όλα τα μηνύματα που στέλνετε από τα εισερχόμενα email σας. Χρησιμοποιήστε τον επεξεργαστή πλούσιου περιεχομένου για να δημιουργήσετε μια εξατομικευμένη υπογραφή.", + "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": "Αποθήκευση υπογραφής μηνύματος", "API_ERROR": "Δεν ήταν δυνατή η αποθήκευση της υπογραφής! Δοκιμάστε ξανά", "API_SUCCESS": "Η υπογραφή αποθηκεύτηκε με επιτυχία", diff --git a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json index d42327cf2..8744fcce5 100644 --- a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autenticándote con Facebook...", "ERROR_FB_AUTH": "Algo salió mal, Por favor actualiza la página...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creando tu bandeja de entrada...", "TITLE": "Configurar detalles de la Bandeja de Entrada", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/es/settings.json b/app/javascript/dashboard/i18n/locale/es/settings.json index 24660b452..6e0ae25aa 100644 --- a/app/javascript/dashboard/i18n/locale/es/settings.json +++ b/app/javascript/dashboard/i18n/locale/es/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Firma de mensaje personal", - "NOTE": "Cree una firma de mensaje personal que se añadirá a todos los mensajes que envíe desde su buzón de correo electrónico. Utilice el rico editor de contenidos para crear una firma altamente personalizada.", + "NOTE": "Crea una firma de mensaje única para que aparezca al final de cada mensaje que envíes desde cualquier bandeja de entrada. También puede incluir una imagen en línea, que es soportada en las bandejas de entrada de live-chat, correo electrónico y API.", "BTN_TEXT": "Guardar firma de mensaje", "API_ERROR": "¡No se pudo guardar la firma! Inténtalo de nuevo", "API_SUCCESS": "Firma guardada correctamente", diff --git a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json index f910fdf04..838808ec5 100644 --- a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "در حال احراز هویت با فیس بوک...", "ERROR_FB_AUTH": "اشکالی پیش آمد.. لطفا دوباره سعی کنید...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "در حال ساخت صندوق ورودی...", "TITLE": "تنظیمات صفحه ورودی", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/fa/settings.json b/app/javascript/dashboard/i18n/locale/fa/settings.json index 4e033f51b..074cb3a21 100644 --- a/app/javascript/dashboard/i18n/locale/fa/settings.json +++ b/app/javascript/dashboard/i18n/locale/fa/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "امضای پیام شخصی", - "NOTE": "یک امضای پیام شخصی ایجاد کنید که به همه پیام‌هایی که از صندوق ورودی ایمیل ارسال می‌کنید اضافه شود. از ویرایشگر محتوای غنی برای ایجاد یک امضای بسیار شخصی استفاده کنید.", + "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": "ذخیره امضای پیام", "API_ERROR": "امضا ذخیره نشد! دوباره امتحان کنید", "API_SUCCESS": "امضا با موفقیت ذخیره شد", diff --git a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json index 75167a1c6..96420e8a7 100644 --- a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Varmennetaan sinua Facebookissa...", "ERROR_FB_AUTH": "Jokin meni pieleen, päivitä sivu...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Luodaan postilaatikkoasi...", "TITLE": "Määritä postilaatikon tiedot", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/fi/settings.json b/app/javascript/dashboard/i18n/locale/fi/settings.json index 985604f6a..32c89cf30 100644 --- a/app/javascript/dashboard/i18n/locale/fi/settings.json +++ b/app/javascript/dashboard/i18n/locale/fi/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", diff --git a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json index 666bda53b..0ccb09073 100644 --- a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authentification avec Facebook ...", "ERROR_FB_AUTH": "Une erreur s'est produite, veuillez rafraîchir la page ...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Création de votre boîte de réception ...", "TITLE": "Configurer les détails de la boîte de réception", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/fr/settings.json b/app/javascript/dashboard/i18n/locale/fr/settings.json index aa2c241c3..1f14a2fe9 100644 --- a/app/javascript/dashboard/i18n/locale/fr/settings.json +++ b/app/javascript/dashboard/i18n/locale/fr/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Signature du message personnel", - "NOTE": "Créez une signature de message personnelle qui sera ajoutée à tous les messages que vous envoyez depuis votre boîte aux lettres électronique. Utilisez l'éditeur de contenu riche pour créer une signature personnalisée.", + "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": "Enregistrer la signature du message", "API_ERROR": "Impossible d'enregistrer la signature ! Réessayez", "API_SUCCESS": "Signature enregistrée avec succès", diff --git a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json index 557ad7af3..1247c731a 100644 --- a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "מאמת אותך עם פייסבוק...", "ERROR_FB_AUTH": "משהו השתבש, אנא רענן את הדף...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "יוצר את תיבת הדואר הנכנס שלך...", "TITLE": "הגדר את פרטי תיבת הדואר הנכנס", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/he/settings.json b/app/javascript/dashboard/i18n/locale/he/settings.json index 5e0adb784..c8fb8f2f7 100644 --- a/app/javascript/dashboard/i18n/locale/he/settings.json +++ b/app/javascript/dashboard/i18n/locale/he/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "חתימת הודעה אישית", - "NOTE": "ניתן לרשום חתימה לכל ההודעות שתרשום ללקוחות שלך.", + "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": "שמירה", "API_ERROR": "לא ניתן לשמור את החתימה! אנא נסה שנית", "API_SUCCESS": "החתימה נשמרה בהצלחה", diff --git a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json index f2f889da0..08f2ef2a2 100644 --- a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/hi/settings.json b/app/javascript/dashboard/i18n/locale/hi/settings.json index f749b5a73..273c20b39 100644 --- a/app/javascript/dashboard/i18n/locale/hi/settings.json +++ b/app/javascript/dashboard/i18n/locale/hi/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", diff --git a/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json index c07a6e137..c1411ce8d 100644 --- a/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/hr/settings.json b/app/javascript/dashboard/i18n/locale/hr/settings.json index fa0be9bad..f31e26b55 100644 --- a/app/javascript/dashboard/i18n/locale/hr/settings.json +++ b/app/javascript/dashboard/i18n/locale/hr/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", diff --git a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json index ed97514dc..f97a3ce0a 100644 --- a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Facebookkal azonosítunk...", "ERROR_FB_AUTH": "Valami elromlott, kérjük töltsd újra az oldalt...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Inbox létrehozása...", "TITLE": "Inbox részletek beállítása", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/hu/settings.json b/app/javascript/dashboard/i18n/locale/hu/settings.json index 5eb5a3c64..7dff4b693 100644 --- a/app/javascript/dashboard/i18n/locale/hu/settings.json +++ b/app/javascript/dashboard/i18n/locale/hu/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Személyes üzenet aláírás", - "NOTE": "Hozz létre egy személyes üzenetaláírást, amelyet az e-mail postafiókodból küldött összes üzenethez hozzáadhatsz. A sokszínű tartalomszerkesztő segítségével személyre szabott aláírást hozhatsz létre.", + "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": "Üzenet aláírás mentése", "API_ERROR": "Nem sikerült menteni az aláírást! Próbáld újra", "API_SUCCESS": "Aláírás sikeresen mentve", diff --git a/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json index d830d75a8..26d1ad7fc 100644 --- a/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/hy/settings.json b/app/javascript/dashboard/i18n/locale/hy/settings.json index 22154ba4e..556314985 100644 --- a/app/javascript/dashboard/i18n/locale/hy/settings.json +++ b/app/javascript/dashboard/i18n/locale/hy/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", diff --git a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json index e670b7607..97075b804 100644 --- a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Mengautentikasi Anda dengan Facebook...", "ERROR_FB_AUTH": "Ada yang tidak beres, Harap refresh halaman...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Membuat kotak masuk Anda...", "TITLE": "Konfigurasi Detail Kotak Masuk", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/id/settings.json b/app/javascript/dashboard/i18n/locale/id/settings.json index 1c0f34fda..068c37111 100644 --- a/app/javascript/dashboard/i18n/locale/id/settings.json +++ b/app/javascript/dashboard/i18n/locale/id/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Tanda tangan pesan pribadi", - "NOTE": "Buat tanda tangan pesan pribadi yang akan ditambahkan ke semua pesan yang Anda kirim dari kotak masuk email Anda. Gunakan editor konten kaya untuk membuat tanda tangan yang sangat personal.", + "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": "Simpan tanda tangan pesan", "API_ERROR": "Tidak dapat menyimpan tanda tangan! Coba lagi", "API_SUCCESS": "Tanda tangan berhasil disimpan", diff --git a/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json index 58216b208..0ffdfe631 100644 --- a/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Auðkenni við Facebook...", "ERROR_FB_AUTH": "Eitthvað fór úrskeiðis, vinsamlegast endurnýjaðu síðuna...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Skrái innhólfið...", "TITLE": "Stilla Upplýsingar Innhólfs", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/is/settings.json b/app/javascript/dashboard/i18n/locale/is/settings.json index 088411c1f..085e2c63f 100644 --- a/app/javascript/dashboard/i18n/locale/is/settings.json +++ b/app/javascript/dashboard/i18n/locale/is/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Persónuleg undirskrift á skilaboðum", - "NOTE": "Búðu til persónulega skilaboðaundirskrift sem verður bætt við öll skilaboðin sem þú sendir úr pósthólfinu þínu. Notaðu innihaldsríka ritilinn til að búa til mjög persónulega undirskrift.", + "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": "Vista undirskrift á skilaboðum", "API_ERROR": "Gat ekki vistað undirskrift! Reyndu aftur", "API_SUCCESS": "Undirskrift var vistuð", diff --git a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json index 4381aed90..abf586140 100644 --- a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autenticazione con Facebook...", "ERROR_FB_AUTH": "Qualcosa è andato storto, per favore aggiorna la pagina...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creazione della casella...", "TITLE": "Configura dettagli casella", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/it/settings.json b/app/javascript/dashboard/i18n/locale/it/settings.json index 7b7453055..86da89514 100644 --- a/app/javascript/dashboard/i18n/locale/it/settings.json +++ b/app/javascript/dashboard/i18n/locale/it/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Firma del messaggio personale", - "NOTE": "Crea una firma personale del messaggio che sarà aggiunta a tutti i messaggi inviati dalla tua casella di posta elettronica. Usa l'editor di contenuti per creare una firma altamente personalizzata.", + "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": "Salva firma del messaggio", "API_ERROR": "Impossibile salvare la firma! Riprova", "API_SUCCESS": "Firma salvata con successo", diff --git a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json index d91b57f45..f0cd2d366 100644 --- a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Facebook を認証中...", "ERROR_FB_AUTH": "問題が発生しました。ページを更新してください...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "受信トレイを作成しています...", "TITLE": "受信トレイの詳細の設定", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ja/settings.json b/app/javascript/dashboard/i18n/locale/ja/settings.json index 477c7525e..f365cb458 100644 --- a/app/javascript/dashboard/i18n/locale/ja/settings.json +++ b/app/javascript/dashboard/i18n/locale/ja/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", diff --git a/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json index f2f889da0..08f2ef2a2 100644 --- a/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ka/settings.json b/app/javascript/dashboard/i18n/locale/ka/settings.json index f749b5a73..273c20b39 100644 --- a/app/javascript/dashboard/i18n/locale/ka/settings.json +++ b/app/javascript/dashboard/i18n/locale/ka/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", diff --git a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json index d282ccaad..eff4e0a57 100644 --- a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "페이스북 인증하는 중...", "ERROR_FB_AUTH": "문제가 발생했습니다 페이지를 새로 고치십시오...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "받은 메시지함을 만드는 중...", "TITLE": "받은 메시지함 세부 구성", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ko/settings.json b/app/javascript/dashboard/i18n/locale/ko/settings.json index 0e338ebb5..860da9470 100644 --- a/app/javascript/dashboard/i18n/locale/ko/settings.json +++ b/app/javascript/dashboard/i18n/locale/ko/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", diff --git a/app/javascript/dashboard/i18n/locale/lt/auditLogs.json b/app/javascript/dashboard/i18n/locale/lt/auditLogs.json index 7338cecb3..49ffc88ff 100644 --- a/app/javascript/dashboard/i18n/locale/lt/auditLogs.json +++ b/app/javascript/dashboard/i18n/locale/lt/auditLogs.json @@ -57,8 +57,8 @@ "DELETE": "%{agentName} ištrynė makrokomandą (#%{id})" }, "INBOX_MEMBER": { - "ADD": "%{agentName} added %{user} to the inbox(#%{inbox_id})", - "REMOVE": "%{agentName} removed %{user} from the inbox(#%{inbox_id})" + "ADD": "%{agentName} pridėjo %{user} prie gautų laiškų aplanko(#%{inbox_id})", + "REMOVE": "%{agentName} ipašalino %{user} iš gautų laiškų aplanko(#%{inbox_id})" }, "TEAM_MEMBER": { "ADD": "%{agentName} added %{user} to the team(#%{team_id})", diff --git a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json index eab72dc32..581b4678a 100644 --- a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autentifikuojamas jus naudojant Facebook...", "ERROR_FB_AUTH": "Kažkas nepavyko, atnaujinkite puslapį...", + "ERROR_FB_UNAUTHORIZED": "Jūs nesate įgalioti atlikti šį veiksmą. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Įsitikinkite, kad turite prieigą prie „Facebook“ puslapio su visapusiška kontrole. Daugiau apie „Facebook“ vaidmenis galite perskaityti čia.", "CREATING_CHANNEL": "Kuriamas gautų laiškų aplankas...", "TITLE": "Konfigūruoti gautų laiškų aplanko informaciją", "DESC": "" @@ -409,7 +411,7 @@ "FRIENDLY": { "TITLE": "Draugiškas", "FROM": "nuo", - "SUBTITLE": "Add the name of the agent who sent the reply in the sender name to make it friendly." + "SUBTITLE": "Prie siuntėjo vardo pridėkite atsakymą išsiuntusio agento vardą, kad atsakymas būtų draugiškas." }, "PROFESSIONAL": { "TITLE": "Profesionalas", @@ -484,7 +486,7 @@ "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Naujame pokalbyje leiskite arba drauskite el. pašto surinkimo dėžutę", "AUTO_ASSIGNMENT": "Įjunkti automatinį priskyrimą", "ENABLE_CSAT": "Leisti CSAT", - "SENDER_NAME_SECTION": "Enable Agent Name in Email", + "SENDER_NAME_SECTION": "Leisti agento vardą el. pašte", "ENABLE_CSAT_SUB_TEXT": "Leisti/neleisti CSAT (klientų pasitenkinimo) apklausą, kai baigsite pokalbį", "SENDER_NAME_SECTION_TEXT": "Įjungti/išjungti agento vardo rodymą el. pašte, jei išjungta, bus rodomas įmonės pavadinimas", "ENABLE_CONTINUITY_VIA_EMAIL": "Leisti pokalbio tęstinumą el. paštu", diff --git a/app/javascript/dashboard/i18n/locale/lt/settings.json b/app/javascript/dashboard/i18n/locale/lt/settings.json index 3cb8c81c9..12c2d1bcc 100644 --- a/app/javascript/dashboard/i18n/locale/lt/settings.json +++ b/app/javascript/dashboard/i18n/locale/lt/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Asmeninis pranešimo parašas", - "NOTE": "Sukurkite asmeninį pranešimo parašą, kuris būtų pridėtas prie visų pranešimų, kuriuos siunčiate iš el. pašto dėžutės. Naudokite turtingo turinio redagavimo priemonę, kad sukurtumėte labai suasmenintą parašą.", + "NOTE": "Sukurkite unikalų pranešimo parašą, kuris bus rodomas kiekvieno pranešimo pabaigoje, siunčiamo iš bet kurio gautųjų laiškų aplanko. Taip pat galite įdėti paveikslėlį, kuris rodomas tiesioginio pokalbio, el. pašto ir API.", "BTN_TEXT": "Išsaugoti pranešimo parašą", "API_ERROR": "Nepavyko išsaugoti parašo! Bandykite dar kartą", "API_SUCCESS": "Parašas išsaugotas sėkmingai", diff --git a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json index d0fe5ed89..6a2325203 100644 --- a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Notiek Jūsu autentificēšana, izmantojot Facebook...", "ERROR_FB_AUTH": "Radās kļūda. Lūdzu, atsvaidziniet lapu...", + "ERROR_FB_UNAUTHORIZED": "Jums nav tiesību veikt šo darbību. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Lūdzu, pārliecinieties, ka Jums ir pilna piekļuve Facebook lapai. Vairāk par Facebook lomām varat lasīt šeit.", "CREATING_CHANNEL": "Notiek Iesūtnes izveide...", "TITLE": "Nokonfigurēt Iesūtnes Informāciju", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/lv/settings.json b/app/javascript/dashboard/i18n/locale/lv/settings.json index 8ba2569a7..865e91c1f 100644 --- a/app/javascript/dashboard/i18n/locale/lv/settings.json +++ b/app/javascript/dashboard/i18n/locale/lv/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Personīgais ziņojuma paraksts", - "NOTE": "Izveidojiet personīgu ziņojumu parakstu, kas tiks pievienots visiem ziņojumiem, kurus nosūtat no jūsu e -pasta iesūtnes. Izmantojiet bagātīgā satura redaktoru, lai izveidotu īpaši personalizētu parakstu.", + "NOTE": "Izveidot unikālu ziņojuma parakstu, kas parādās katra ziņojuma beigās, kuru sūtāt no jebkuras iesūtnes. Varat arī iekļaut attēlu, kas tiek atbalstīts tiešraidē, e-pastā un API iesūtnēs.", "BTN_TEXT": "Saglabāt ziņojuma parakstu", "API_ERROR": "Nevarēja saglabāt parakstu! Lūdzu, mēģiniet vēlreiz", "API_SUCCESS": "Paraksts ir veiksmīgi saglabāts", diff --git a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json index fbf6790c2..9e4878ec5 100644 --- a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "ഫേസ്ബുക് ഉപയോഗിച്ച് നിങ്ങളെ പ്രാമാണീകരിക്കുന്നു...", "ERROR_FB_AUTH": "എന്തോ കുഴപ്പം സംഭവിച്ചു, ദയവായി പേജ് പുതുക്കുക...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "നിങ്ങളുടെ ഇൻ‌ബോക്സ് സൃഷ്ടിച്ചു കൊണ്ട് ഇരിക്കുകയാണ്...", "TITLE": "ഇൻ‌ബോക്സ് വിശദാംശങ്ങൾ‌ കോൺഫിഗർ ചെയ്യുക", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ml/settings.json b/app/javascript/dashboard/i18n/locale/ml/settings.json index f3e49186f..e81e6c3aa 100644 --- a/app/javascript/dashboard/i18n/locale/ml/settings.json +++ b/app/javascript/dashboard/i18n/locale/ml/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", diff --git a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json index 0f0e9174c..1e2ac1b25 100644 --- a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ms/settings.json b/app/javascript/dashboard/i18n/locale/ms/settings.json index 784f165d8..c27c01eda 100644 --- a/app/javascript/dashboard/i18n/locale/ms/settings.json +++ b/app/javascript/dashboard/i18n/locale/ms/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", diff --git a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json index 7e79a514c..4676a871e 100644 --- a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ne/settings.json b/app/javascript/dashboard/i18n/locale/ne/settings.json index b3a5f1970..9833a110a 100644 --- a/app/javascript/dashboard/i18n/locale/ne/settings.json +++ b/app/javascript/dashboard/i18n/locale/ne/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", diff --git a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json index 79e23e7a0..59c9b6b13 100644 --- a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Verifiëren met Facebook...", "ERROR_FB_AUTH": "Er ging iets mis, gelieve pagina te vernieuwen...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Uw postvak wordt gemaakt...", "TITLE": "Configureer Postvak in details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/nl/settings.json b/app/javascript/dashboard/i18n/locale/nl/settings.json index 9c5ae2a18..079efec21 100644 --- a/app/javascript/dashboard/i18n/locale/nl/settings.json +++ b/app/javascript/dashboard/i18n/locale/nl/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Handtekening persoonlijke berichten", - "NOTE": "Maak een persoonlijke ondertekening die wordt toegevoegd aan alle berichten die u vanuit uw e-mail inbox verstuurt. Gebruik de rich content editor om een zeer gepersonaliseerde handtekening te maken.", + "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": "Ondertekening van bericht opslaan", "API_ERROR": "Kon ondertekening niet opslaan! Probeer het opnieuw", "API_SUCCESS": "Ondertekening succesvol opgeslagen", diff --git a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json index 69a611552..39acb7a9e 100644 --- a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autentiserer deg med Facebook...", "ERROR_FB_AUTH": "Noe gikk galt, oppdater siden...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Oppretter innboksen din...", "TITLE": "Konfigurer innboksdetaljer", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/no/settings.json b/app/javascript/dashboard/i18n/locale/no/settings.json index 267fbb855..65f9a972f 100644 --- a/app/javascript/dashboard/i18n/locale/no/settings.json +++ b/app/javascript/dashboard/i18n/locale/no/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", diff --git a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json index e17fa0c15..5875dcc67 100644 --- a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Uwierzytelnianie za pomocą Facebooka...", "ERROR_FB_AUTH": "Coś poszło nie tak. Proszę odświeżyć stronę...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Tworzenie skrzynki odbiorczej...", "TITLE": "Skonfiguruj szczegóły skrzynki odbiorczej", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/pl/settings.json b/app/javascript/dashboard/i18n/locale/pl/settings.json index d9554ccb9..57cf4fedd 100644 --- a/app/javascript/dashboard/i18n/locale/pl/settings.json +++ b/app/javascript/dashboard/i18n/locale/pl/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Osobisty podpis wiadomości", - "NOTE": "Utwórz osobisty podpis wiadomości, który zostanie dodany do wszystkich wiadomości wysyłanych z Twojej skrzynki pocztowej. Użyj edytora bogatego w treści, aby stworzyć wysoko spersonalizowany podpis.", + "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": "Zapisz podpis wiadomości", "API_ERROR": "Nie można zapisać podpisu! Spróbuj ponownie", "API_SUCCESS": "Podpis został pomyślnie zapisany", diff --git a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json index ccbdec793..0469a43f5 100644 --- a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autenticando você com o Facebook...", "ERROR_FB_AUTH": "Algo deu errado, por favor, atualize a página...", + "ERROR_FB_UNAUTHORIZED": "Não está autorizado a executar esta ação. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Por favor, certifique-se que tem acesso, com controlo total, à página do Facebook. Pode ler mais sobre as permissões do Facebook aqui.", "CREATING_CHANNEL": "Criando sua caixa de entrada...", "TITLE": "Configurar Detalhes da Caixa de Entrada", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/pt/settings.json b/app/javascript/dashboard/i18n/locale/pt/settings.json index 6637e5ac3..4ffab52cd 100644 --- a/app/javascript/dashboard/i18n/locale/pt/settings.json +++ b/app/javascript/dashboard/i18n/locale/pt/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Assinatura de mensagem pessoal", - "NOTE": "Crie uma assinatura de email personalizada que será adicionada a todas as mensagens de email enviadas. Use o editor de conteúdo para criar uma assinatura mais personalizada.", + "NOTE": "Crie uma assinatura de mensagem única para aparecer no final de todas as mensagens que enviar de qualquer caixa de entrada. Pode incluir uma imagem embutida, que será suportada nos canais de live-chat, e-mail e caixas de entrada API.", "BTN_TEXT": "Salvar assinatura da mensagem", "API_ERROR": "Não foi possível salvar a assinatura! Tente novamente", "API_SUCCESS": "Assinatura salva com sucesso", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json index 16b765ea3..029226416 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autenticando você com o Facebook...", "ERROR_FB_AUTH": "Algo deu errado, por favor, atualize a página...", + "ERROR_FB_UNAUTHORIZED": "Você não está autorizado a realizar esta ação. ", + "ERROR_FB_UNAUTHORIZED_HELP": "A tradução é:\n\nPor favor, certifique-se de que você tem acesso à página do Facebook com controle total. Você pode ler mais sobre as funções do Facebook aqui.", "CREATING_CHANNEL": "Criando sua caixa de entrada...", "TITLE": "Configurar detalhes da Caixa de Entrada", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json index b1c983030..0dd3868fb 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Assinatura de mensagens pessoais", - "NOTE": "Crie uma assinatura de mensagem pessoal que será adicionada a todas as mensagens enviadas a partir da sua caixa de entrada. Use o editor de conteúdo para criar uma assinatura altamente personalizada.", + "NOTE": "Crie uma assinatura de mensagem única para aparecer no final de cada mensagem que você enviar de qualquer caixa de entrada. Você também pode incluir uma imagem anexada, suportada em live-chat, e-mail e caixas de entrada de API.", "BTN_TEXT": "Salvar assinatura da mensagem", "API_ERROR": "Não foi possível salvar a assinatura! Tente novamente", "API_SUCCESS": "Assinatura salva com sucesso", diff --git a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json index f73faca89..ad4856cd3 100644 --- a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autentificare prin Facebook...", "ERROR_FB_AUTH": "Ceva nu a mers bine, reîmprospătați pagina...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Se creează inbox...", "TITLE": "Configurare detalii inbox", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ro/settings.json b/app/javascript/dashboard/i18n/locale/ro/settings.json index 9a3520c40..a0807f03f 100644 --- a/app/javascript/dashboard/i18n/locale/ro/settings.json +++ b/app/javascript/dashboard/i18n/locale/ro/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Semnătura mesajului personal", - "NOTE": "Creați o semnătură de mesaj personal care ar fi adăugată la toate mesajele pe care le trimiteți din inboxul de e-mail. Utilizați editorul de conținut îmbogățit pentru a crea o semnătură extrem de personalizată.", + "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": "Salvarea semnăturii mesajului", "API_ERROR": "Nu s-a putut trimite! Încearcă din nou", "API_SUCCESS": "Semnătura salvată cu succes", diff --git a/app/javascript/dashboard/i18n/locale/ru/auditLogs.json b/app/javascript/dashboard/i18n/locale/ru/auditLogs.json index d641ae56d..ac9784829 100644 --- a/app/javascript/dashboard/i18n/locale/ru/auditLogs.json +++ b/app/javascript/dashboard/i18n/locale/ru/auditLogs.json @@ -48,24 +48,24 @@ }, "TEAM": { "ADD": "%{agentName} создал новую команду (#%{id})", - "EDIT": "%{agentName} updated a team (#%{id})", - "DELETE": "%{agentName} deleted a team (#%{id})" + "EDIT": "%{agentName} обновил команду (#%{id})", + "DELETE": "%{agentName} удалил команду (#%{id})" }, "MACRO": { - "ADD": "%{agentName} created a new macro (#%{id})", - "EDIT": "%{agentName} updated a macro (#%{id})", - "DELETE": "%{agentName} deleted a macro (#%{id})" + "ADD": "%{agentName} создал новый макрос (#%{id})", + "EDIT": "%{agentName} обновил макрос (#%{id})", + "DELETE": "%{agentName} удалил макрос (#%{id})" }, "INBOX_MEMBER": { - "ADD": "%{agentName} added %{user} to the inbox(#%{inbox_id})", - "REMOVE": "%{agentName} removed %{user} from the inbox(#%{inbox_id})" + "ADD": "%{agentName} добавил %{user} в почтовый ящик (#%{inbox_id})", + "REMOVE": "%{agentName} удалил %{user} из папки входящих(#%{inbox_id})" }, "TEAM_MEMBER": { - "ADD": "%{agentName} added %{user} to the team(#%{team_id})", - "REMOVE": "%{agentName} removed %{user} from the team(#%{team_id})" + "ADD": "%{agentName} добавил %{user} в почтовый ящик (#%{team_id})", + "REMOVE": "%{agentName} удалил %{user} из команды (#%{team_id})" }, "ACCOUNT": { - "EDIT": "%{agentName} updated the account configuration (#%{id})" + "EDIT": "%{agentName} обновил настройки учетной записи (#%{id})" } } } diff --git a/app/javascript/dashboard/i18n/locale/ru/chatlist.json b/app/javascript/dashboard/i18n/locale/ru/chatlist.json index e571a3a23..afa3f859d 100644 --- a/app/javascript/dashboard/i18n/locale/ru/chatlist.json +++ b/app/javascript/dashboard/i18n/locale/ru/chatlist.json @@ -52,7 +52,7 @@ "TEXT": "Приоритет" }, "sort_on_waiting_since": { - "TEXT": "Pending Response" + "TEXT": "Ожидается ответ" } }, "ATTACHMENTS": { diff --git a/app/javascript/dashboard/i18n/locale/ru/contact.json b/app/javascript/dashboard/i18n/locale/ru/contact.json index 1f1e94eb6..ea582348a 100644 --- a/app/javascript/dashboard/i18n/locale/ru/contact.json +++ b/app/javascript/dashboard/i18n/locale/ru/contact.json @@ -71,7 +71,7 @@ "SUBMIT": "Импортировать", "CANCEL": "Отменить" }, - "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "SUCCESS_MESSAGE": "Вы будете уведомлены по электронной почте, когда импорт будет завершен.", "ERROR_MESSAGE": "Произошла ошибка, попробуйте еще раз" }, "EXPORT_CONTACTS": { diff --git a/app/javascript/dashboard/i18n/locale/ru/conversation.json b/app/javascript/dashboard/i18n/locale/ru/conversation.json index 64abaab11..ab08d790f 100644 --- a/app/javascript/dashboard/i18n/locale/ru/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ru/conversation.json @@ -13,8 +13,8 @@ "NO_INBOX_AGENT": "Ой! Похоже, вы не добавлены ни к одному источнику сообщений. Обратитесь к администратору", "SEARCH_MESSAGES": "Поиск по сообщениям в диалогах", "EMPTY_STATE": { - "CMD_BAR": "to open command menu", - "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + "CMD_BAR": "открыть меню команд", + "KEYBOARD_SHORTCUTS": "для просмотра быстрых клавиш" }, "SEARCH": { "TITLE": "Поиск сообщений", @@ -58,7 +58,7 @@ "OPEN": "Открыть", "CLOSE": "Закрыть", "DETAILS": "подробности", - "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL": "Отложить до", "SNOOZED_UNTIL_TOMORROW": "Отложено до завтра", "SNOOZED_UNTIL_NEXT_WEEK": "Отложено до следующей недели", "SNOOZED_UNTIL_NEXT_REPLY": "Отложить до следующего ответа" @@ -151,7 +151,7 @@ "STOP_AUDIO_RECORDING": "Остановить запись аудио", "": "", "EMAIL_HEAD": { - "TO": "TO", + "TO": "ДО", "ADD_BCC": "Добавить bcc", "CC": { "LABEL": "CC", diff --git a/app/javascript/dashboard/i18n/locale/ru/generalSettings.json b/app/javascript/dashboard/i18n/locale/ru/generalSettings.json index a42f70967..a8bd9906c 100644 --- a/app/javascript/dashboard/i18n/locale/ru/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/ru/generalSettings.json @@ -3,7 +3,7 @@ "TITLE": "Настройки аккаунта", "SUBMIT": "Изменить настройки", "BACK": "Назад", - "DISMISS": "Dismiss", + "DISMISS": "Отклонить", "UPDATE": { "ERROR": "Не удалось обновить настройки, попробуйте снова!", "SUCCESS": "Настройки аккаунта обновлены" @@ -111,8 +111,8 @@ "ADD_LABEL": "Добавить метку в разговор", "REMOVE_LABEL": "Удалить метку из разговора", "SETTINGS": "Настройки", - "AI_ASSIST": "AI Assist", - "APPEARANCE": "Appearance" + "AI_ASSIST": "Помощь ИИ", + "APPEARANCE": "Образец" }, "COMMANDS": { "GO_TO_CONVERSATION_DASHBOARD": "Перейти к панели разговоров", @@ -134,7 +134,7 @@ "GO_TO_NOTIFICATIONS": "Перейти к уведомлениям", "ADD_LABELS_TO_CONVERSATION": "Добавить метку в разговор", "ASSIGN_AN_AGENT": "Назначить сотрудника", - "AI_ASSIST": "AI Assist", + "AI_ASSIST": "Помощь ИИ", "ASSIGN_PRIORITY": "Назначить приоритет", "ASSIGN_A_TEAM": "Назначить команду", "MUTE_CONVERSATION": "Заглушить диалог", @@ -147,12 +147,12 @@ "UNTIL_NEXT_REPLY": "До следующего ответа", "UNTIL_NEXT_WEEK": "До следующей недели", "UNTIL_TOMORROW": "До завтра", - "UNTIL_NEXT_MONTH": "Until next month", - "AN_HOUR_FROM_NOW": "Until an hour from now", - "CUSTOM": "Custom...", - "CHANGE_APPEARANCE": "Change Appearance", - "LIGHT_MODE": "Light", - "DARK_MODE": "Dark", + "UNTIL_NEXT_MONTH": "До следующего месяца", + "AN_HOUR_FROM_NOW": "Еще через час", + "CUSTOM": "Пользовательский...", + "CHANGE_APPEARANCE": "Изменить внешний вид", + "LIGHT_MODE": "Светлая", + "DARK_MODE": "Тёмная", "SYSTEM_MODE": "Система" } }, @@ -160,7 +160,7 @@ "LOADING_MESSAGE": "Загрузка приложения панели управления..." }, "COMMON": { - "OR": "Or", + "OR": "Или", "CLICK_HERE": "нажмите здесь" } } diff --git a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json index 9b046df27..4c181fd1a 100644 --- a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json @@ -112,14 +112,14 @@ "ERROR": "Это поле обязательно" }, "API_KEY": { - "USE_API_KEY": "Use API Key Authentication", - "LABEL": "API Key SID", - "PLACEHOLDER": "Please enter your API Key SID", + "USE_API_KEY": "Использовать API ключ аутентификации", + "LABEL": "API Ключ SID", + "PLACEHOLDER": "Пожалуйста, введите ваш ключ API SID", "ERROR": "Это поле обязательно" }, "API_KEY_SECRET": { - "LABEL": "API Key Secret", - "PLACEHOLDER": "Please enter your API Key Secret", + "LABEL": "Секретный ключ API", + "PLACEHOLDER": "Пожалуйста, введите секретный ключ API", "ERROR": "Это поле обязательно" }, "MESSAGING_SERVICE_SID": { @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Авторизуемся через Facebook...", "ERROR_FB_AUTH": "Что-то пошло не так, обновите страницу...", + "ERROR_FB_UNAUTHORIZED": "Вы не авторизованы для выполнения этого действия. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Пожалуйста, убедитесь, что у вас есть доступ к странице Facebook с полными правами. Подробнее о ролях в Facebook можно прочитать здесь.", "CREATING_CHANNEL": "Создание источника...", "TITLE": "Настройка параметров источника", "DESC": "" @@ -403,21 +405,21 @@ "DISABLED": "Выключено" }, "SENDER_NAME_SECTION": { - "TITLE": "Sender name", - "SUB_TEXT": "Select the name shown to the your customer when they receive emails from your agents.", - "FOR_EG": "For eg:", + "TITLE": "Имя отправителя", + "SUB_TEXT": "Выберите имя, отображаемое клиенту, когда он получает письма от ваших агентов.", + "FOR_EG": "Например:", "FRIENDLY": { "TITLE": "Дружелюбный", "FROM": "от", - "SUBTITLE": "Add the name of the agent who sent the reply in the sender name to make it friendly." + "SUBTITLE": "Добавьте имя агента, который отправил ответ в имени отправителя, чтобы сделать его дружелюбным." }, "PROFESSIONAL": { "TITLE": "Профессиональный", - "SUBTITLE": "Use only the configured business name as the sender name in the email header." + "SUBTITLE": "Используйте только сконфигурированное бизнес-имя отправителя в заголовке электронной почты." }, "BUSINESS_NAME": { - "BUTTON_TEXT": "+ Configure your business name", - "PLACEHOLDER": "Enter your business name", + "BUTTON_TEXT": "+ Настройте название вашей компании", + "PLACEHOLDER": "Введите название вашей компании", "SAVE_BUTTON_TEXT": "Сохранить" } }, @@ -484,9 +486,9 @@ "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Включение или отключение ящик для сбора почты в новой беседе", "AUTO_ASSIGNMENT": "Включить автоназначение", "ENABLE_CSAT": "Включить CSAT", - "SENDER_NAME_SECTION": "Enable Agent Name in Email", + "SENDER_NAME_SECTION": "Включить имя агента в электронной почте", "ENABLE_CSAT_SUB_TEXT": "Включить/выключить опрос CSAT(степень удовлетворенности пользователя) после завершения беседы", - "SENDER_NAME_SECTION_TEXT": "Enable/Disable showing Agent's name in email, if disabled it will show business name", + "SENDER_NAME_SECTION_TEXT": "Включить/выключить отображение имени Сотрудника в электронной почте, если отключено, он будет показывать бизнес-имя", "ENABLE_CONTINUITY_VIA_EMAIL": "Включить непрерывность разговоров по электронной почте", "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Разговоры будут продолжаться по электронной почте, если доступен контактный адрес электронной почты.", "LOCK_TO_SINGLE_CONVERSATION": "Заблокировать один диалог", diff --git a/app/javascript/dashboard/i18n/locale/ru/integrations.json b/app/javascript/dashboard/i18n/locale/ru/integrations.json index b2c9e2204..48bc702e2 100644 --- a/app/javascript/dashboard/i18n/locale/ru/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ru/integrations.json @@ -75,25 +75,25 @@ "SLACK": { "DELETE": "Удалить", "DELETE_CONFIRMATION": { - "TITLE": "Delete the integration", - "MESSAGE": "Are you sure you want to delete the integration? Doing so will result in the loss of access to conversations on your Slack workspace." + "TITLE": "Удалить интеграцию", + "MESSAGE": "Вы уверены, что хотите удалить интеграцию? Это приведет к потере доступа к разговорам на вашем рабочем пространстве." }, "HELP_TEXT": { "TITLE": "Использование интеграции Slack", "BODY": "

Chatwoot теперь будет синхронизировать все входящие разговоры с каналом разговоров с клиентами внутри вашего рабочего места.

Ответ на цепочку разговоров в канале slack для разговоров с клиентом создаст ответ клиенту через chatwoot.

Начните ответы с примечания: для создания приватных сообщений. примечания вместо ответов.

Если отвечающий в Slack имеет профиль агента в chatwoot под тем же адресом электронной почты, ответы будут связаны соответственно.

Если отвечающий не имеет связанного профиля агента, ответы будут отправляться из профиля бота.

", - "SELECTED": "selected" + "SELECTED": "выбрано" }, "SELECT_CHANNEL": { - "OPTION_LABEL": "Select a channel", + "OPTION_LABEL": "Выбрать канал", "UPDATE": "Обновить", - "BUTTON_TEXT": "Connect channel", - "DESCRIPTION": "Your Slack workspace is now linked with Chatwoot. However, the integration is currently inactive. To activate the integration and connect a channel to Chatwoot, please click the button below.\n\n**Note:** If you are attempting to connect a private channel, add the Chatwoot app to the Slack channel before proceeding with this step.", - "ATTENTION_REQUIRED": "Attention required", - "EXPIRED": "Your Slack integration has expired. To continue receiving messages on Slack, please delete the integration and connect your workspace again." + "BUTTON_TEXT": "Подключить канал", + "DESCRIPTION": "Рабочая область Slack теперь связана с Chatwoot. Однако интеграция в настоящее время неактивна. Чтобы активировать интеграцию и подключить канал к чату, нажмите на кнопку ниже.\n\n**Примечание:** Если вы пытаетесь подключить частный канал, добавьте приложение Чатвут в канал Slack перед тем как приступить к этому шагу.", + "ATTENTION_REQUIRED": "Требуется внимание", + "EXPIRED": "Ваша интеграция в Slack истекла. Чтобы продолжить получение сообщений в Slack, удалите интеграцию и подключите рабочую область снова." }, - "UPDATE_ERROR": "There was an error updating the integration, please try again", - "UPDATE_SUCCESS": "The channel is connected successfully", - "FAILED_TO_FETCH_CHANNELS": "There was an error fetching the channels from Slack, please try again" + "UPDATE_ERROR": "Произошла ошибка при обновлении интеграции, пожалуйста, попробуйте еще раз", + "UPDATE_SUCCESS": "Канал успешно подключен", + "FAILED_TO_FETCH_CHANNELS": "Произошла ошибка при получении каналов из Slack, попробуйте еще раз" }, "DYTE": { "CLICK_HERE_TO_JOIN": "Нажмите, чтобы присоединиться", @@ -103,39 +103,39 @@ "CREATE_ERROR": "Произошла ошибка при создании ссылки на встречу, попробуйте еще раз" }, "OPEN_AI": { - "AI_ASSIST": "AI Assist", - "WITH_AI": " %{option} with AI ", + "AI_ASSIST": "Помощь ИИ", + "WITH_AI": " %{option} с ИИ ", "OPTIONS": { - "REPLY_SUGGESTION": "Reply Suggestion", - "SUMMARIZE": "Summarize", - "REPHRASE": "Improve Writing", - "FIX_SPELLING_GRAMMAR": "Fix Spelling and Grammar", - "SHORTEN": "Shorten", - "EXPAND": "Expand", - "MAKE_FRIENDLY": "Change message tone to friendly", - "MAKE_FORMAL": "Use formal tone", - "SIMPLIFY": "Simplify" + "REPLY_SUGGESTION": "Предложить ответ", + "SUMMARIZE": "Подведем итог", + "REPHRASE": "Улучшить написание", + "FIX_SPELLING_GRAMMAR": "Исправить правописание и грамматику", + "SHORTEN": "Сократить", + "EXPAND": "Развернуть", + "MAKE_FRIENDLY": "Изменить тон сообщения на дружеский", + "MAKE_FORMAL": "Использовать официальный тон", + "SIMPLIFY": "Упростить" }, "ASSISTANCE_MODAL": { - "DRAFT_TITLE": "Draft content", - "GENERATED_TITLE": "Generated content", - "AI_WRITING": "AI is writing", + "DRAFT_TITLE": "Содержание черновика", + "GENERATED_TITLE": "Генерированное содержимое", + "AI_WRITING": "ИИ пишет", "BUTTONS": { - "APPLY": "Use this suggestion", + "APPLY": "Использовать этот вариант перевода", "CANCEL": "Отменить" } }, "CTA_MODAL": { - "TITLE": "Integrate with OpenAI", - "DESC": "Bring advanced AI features to your dashboard with OpenAI's GPT models. To begin, enter the API key from your OpenAI account.", - "KEY_PLACEHOLDER": "Enter your OpenAI API key", + "TITLE": "Интеграция с OpenAI", + "DESC": "Принесите дополнительные функции AI на вашу панель управления с помощью моделей GPT OpenAI. Чтобы начать, введите API ключ из вашей учетной записи OpenAI.", + "KEY_PLACEHOLDER": "Введите ваш OpenAI API ключ", "BUTTONS": { "NEED_HELP": "Нужна помощь?", - "DISMISS": "Dismiss", - "FINISH": "Finish Setup" + "DISMISS": "Отклонить", + "FINISH": "Завершить установку" }, - "DISMISS_MESSAGE": "You can setup OpenAI integration later Whenever you want.", - "SUCCESS_MESSAGE": "OpenAI integration setup successfully" + "DISMISS_MESSAGE": "Вы можете настроить интеграцию OpenAI позже, когда хотите.", + "SUCCESS_MESSAGE": "Интеграция OpenAI успешно настроена" }, "TITLE": "Улучшить с ИИ", "SUMMARY_TITLE": "Сводка с ИИ", diff --git a/app/javascript/dashboard/i18n/locale/ru/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ru/labelsMgmt.json index bcc6a898b..4753ef6bc 100644 --- a/app/javascript/dashboard/i18n/locale/ru/labelsMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ru/labelsMgmt.json @@ -40,16 +40,16 @@ }, "SUGGESTIONS": { "TOOLTIP": { - "SINGLE_SUGGESTION": "Add label to conversation", - "MULTIPLE_SUGGESTION": "Select this label", - "DESELECT": "Deselect label", - "DISMISS": "Dismiss suggestion" + "SINGLE_SUGGESTION": "Добавить метку в разговор", + "MULTIPLE_SUGGESTION": "Выбрать метку", + "DESELECT": "Отменить выбор метки", + "DISMISS": "Отменить предложение" }, "POWERED_BY": "Chatwoot AI", - "DISMISS": "Dismiss", - "ADD_SELECTED_LABELS": "Add selected labels", - "ADD_SELECTED_LABEL": "Add selected label", - "ADD_ALL_LABELS": "Add all labels" + "DISMISS": "Отклонить", + "ADD_SELECTED_LABELS": "Добавить выбранные метки", + "ADD_SELECTED_LABEL": "Добавить метку", + "ADD_ALL_LABELS": "Добавить все метки" }, "ADD": { "TITLE": "Добавить категорию", diff --git a/app/javascript/dashboard/i18n/locale/ru/report.json b/app/javascript/dashboard/i18n/locale/ru/report.json index 8542b1ec2..844177c0b 100644 --- a/app/javascript/dashboard/i18n/locale/ru/report.json +++ b/app/javascript/dashboard/i18n/locale/ru/report.json @@ -36,8 +36,8 @@ "DESC": "( Всего )" }, "REPLY_TIME": { - "NAME": "Customer waiting time", - "TOOLTIP_TEXT": "Waiting time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Время ожидания клиента", + "TOOLTIP_TEXT": "Время ожидания %{metricValue} (на основе %{conversationCount} сообщений)" } }, "DATE_RANGE_OPTIONS": { diff --git a/app/javascript/dashboard/i18n/locale/ru/resetPassword.json b/app/javascript/dashboard/i18n/locale/ru/resetPassword.json index 1b4ebd78b..0948456cb 100644 --- a/app/javascript/dashboard/i18n/locale/ru/resetPassword.json +++ b/app/javascript/dashboard/i18n/locale/ru/resetPassword.json @@ -1,8 +1,8 @@ { "RESET_PASSWORD": { "TITLE": "Сбросить пароль", - "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", - "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "DESCRIPTION": "Введите адрес электронной почты, который вы используете для входа в Чатвут, чтобы получить инструкции по сбросу пароля.", + "GO_BACK_TO_LOGIN": "Если вы хотите вернуться на страницу входа", "EMAIL": { "LABEL": "Email", "PLACEHOLDER": "Пожалуйста, введите ваш email.", diff --git a/app/javascript/dashboard/i18n/locale/ru/settings.json b/app/javascript/dashboard/i18n/locale/ru/settings.json index 5f70f412e..7f438967d 100644 --- a/app/javascript/dashboard/i18n/locale/ru/settings.json +++ b/app/javascript/dashboard/i18n/locale/ru/settings.json @@ -36,12 +36,12 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Подпись личных сообщений", - "NOTE": "Создать подпись для личных сообщений, которая будет добавлена ко всем сообщениям, которые вы отправляете из вашего почтового ящика. Используйте редактор текста для создания персональной подписи.", + "NOTE": "Создайте уникальную подпись сообщения, которая появится в конце каждого отправленного вами сообщения из любого почтового ящика. Вы также можете включить встроенное изображение, которое поддерживается в live-чате, электронной почты и API почтовых ящиков.", "BTN_TEXT": "Сохранить подпись", "API_ERROR": "Не удалось сохранить подпись! Повторите попытку", "API_SUCCESS": "Подпись успешно сохранена", - "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": "Не удалось загрузить изображение! Попробуйте еще раз", + "IMAGE_UPLOAD_SUCCESS": "Изображение успешно добавлено. Нажмите на кнопку \"Сохранить\", чтобы сохранить подпись", "IMAGE_UPLOAD_SIZE_ERROR": "Размер изображения должен быть меньше, чем {size}MB" }, "MESSAGE_SIGNATURE": { @@ -152,7 +152,7 @@ "SELECTOR_SUBTITLE": "Выберите аккаунт из списка", "PROFILE_SETTINGS": "Настройки профиля", "KEYBOARD_SHORTCUTS": "Клавиши быстрого доступа", - "APPEARANCE": "Change Appearance", + "APPEARANCE": "Изменить внешний вид", "SUPER_ADMIN_CONSOLE": "Консоль супер администратора", "LOGOUT": "Выйти" }, diff --git a/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json index 7e7d58166..70799b835 100644 --- a/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/sh/settings.json b/app/javascript/dashboard/i18n/locale/sh/settings.json index 22154ba4e..556314985 100644 --- a/app/javascript/dashboard/i18n/locale/sh/settings.json +++ b/app/javascript/dashboard/i18n/locale/sh/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", diff --git a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json index 744359804..ff2203b0d 100644 --- a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Spájame vás s Facebookom...", "ERROR_FB_AUTH": "Niečo sa pokazilo, prosím, obnovte stránku...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Konfigurovať detaily schránky", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/sk/settings.json b/app/javascript/dashboard/i18n/locale/sk/settings.json index 1f2d9c2d5..f91f3dc81 100644 --- a/app/javascript/dashboard/i18n/locale/sk/settings.json +++ b/app/javascript/dashboard/i18n/locale/sk/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", diff --git a/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json index 99ac944a8..74eff2033 100644 --- a/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/sl/settings.json b/app/javascript/dashboard/i18n/locale/sl/settings.json index 22154ba4e..556314985 100644 --- a/app/javascript/dashboard/i18n/locale/sl/settings.json +++ b/app/javascript/dashboard/i18n/locale/sl/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", diff --git a/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json b/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json index f0df14c23..2b473b717 100644 --- a/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json @@ -76,8 +76,8 @@ }, "AGENT_AVAILABILITY": { "LABEL": "Dostupnost", - "PLACEHOLDER": "Please select an availability status", - "ERROR": "Availability is required" + "PLACEHOLDER": "Подведем итог", + "ERROR": "" }, "SUBMIT": "Uredi agenta" }, @@ -111,7 +111,7 @@ "PLACEHOLDER": { "AGENT": "Traži agente", "TEAM": "Traži tim", - "INPUT": "Search for agents" + "INPUT": "Поиск для агентов" } } } diff --git a/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json index acd4b3827..49c6a3207 100644 --- a/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autentifikacija sa Fejsbukom...", "ERROR_FB_AUTH": "Nešto je pošlo po zlu, Molim vas osvežite stranicu...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Pravljenje vašeg prijemnog sandučeta...", "TITLE": "Podesite detalje prijemnog sandučeta", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/sr/settings.json b/app/javascript/dashboard/i18n/locale/sr/settings.json index 3b896f0a9..aaf0d23a4 100644 --- a/app/javascript/dashboard/i18n/locale/sr/settings.json +++ b/app/javascript/dashboard/i18n/locale/sr/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Potpis privatne poruke", - "NOTE": "Napravite potpis privatne poruke koji će se dodavati svakoj poruci koju pošaljete u prijemno sanduče e-pošte. Koristite bogati uređivač sadržaja da bi ste napravili personalizovan potpis.", + "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": "Sačuvaj potpis poruke", "API_ERROR": "Nije bilo moguće sačuvati potpis! Pokušajte ponovo", "API_SUCCESS": "Potpis je uspešno sačuvan", diff --git a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json index 792a79323..2d6c1913d 100644 --- a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Autentiserar dig med Facebook...", "ERROR_FB_AUTH": "Något gick fel, vänligen ladda om sidan...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Skapar din inkorg...", "TITLE": "Konfigurera Inkorgsdetaljer", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/sv/settings.json b/app/javascript/dashboard/i18n/locale/sv/settings.json index 47c9f02dc..1f840c7f2 100644 --- a/app/javascript/dashboard/i18n/locale/sv/settings.json +++ b/app/javascript/dashboard/i18n/locale/sv/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", diff --git a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json index f026db248..b02e2252c 100644 --- a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "பேஸ்புக் மூலம் உங்களை அங்கீகரிக்கிறது...", "ERROR_FB_AUTH": "ஏதோ தவறு ஏற்பட்டது, தயவுசெய்து பக்கத்தைப் புதுப்பிக்கவும்...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "உங்கள் இன்பாக்ஸை உருவாக்குகிறது...", "TITLE": "இன்பாக்ஸ் விவரங்களை உள்ளமைக்கவும்", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ta/settings.json b/app/javascript/dashboard/i18n/locale/ta/settings.json index 5765826f0..b603ff51f 100644 --- a/app/javascript/dashboard/i18n/locale/ta/settings.json +++ b/app/javascript/dashboard/i18n/locale/ta/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", diff --git a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json index 963eb9a73..aae9b171d 100644 --- a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "กำลังตรวจสอบสิทธิ์ของคุณกับ Facebook...", "ERROR_FB_AUTH": "มีข้อผิดพลาดเกิดขึ้น โปรดโหลดหน้านี้ใหม่อีกครั้ง", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "กำลังสร้างกล่องข้อความ...", "TITLE": "ตั้งค่ารายละเอียดกล่องข้อความ", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/th/settings.json b/app/javascript/dashboard/i18n/locale/th/settings.json index e9f7869b7..53e7fb15e 100644 --- a/app/javascript/dashboard/i18n/locale/th/settings.json +++ b/app/javascript/dashboard/i18n/locale/th/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "ลายเซ็นส่วนตัว", - "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": "บันทึกลายเซ็น", "API_ERROR": "ไม่สามารถบันทึกลายเซ็นได้ โปรดลองใหม่อีกครั้ง", "API_SUCCESS": "บันทึกลายเซ็นสำเร็จแล้ว", diff --git a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json index e30fe63fe..261293746 100644 --- a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Facebook ile kimliğinizi doğruluyoruz ...", "ERROR_FB_AUTH": "Bir şeyler ters gitti, lütfen sayfayı yenileyin ...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Gelen Kutunuz oluşturuluyor ...", "TITLE": "Gelen Kutusu Ayrıntılarını Yapılandırın", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/tr/settings.json b/app/javascript/dashboard/i18n/locale/tr/settings.json index 1c7c22d1f..d2c50281b 100644 --- a/app/javascript/dashboard/i18n/locale/tr/settings.json +++ b/app/javascript/dashboard/i18n/locale/tr/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "İmzanız", - "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": "İmzanızı kaydedin", "API_ERROR": "İmza kaydedilemedi! Tekrar deneyin", "API_SUCCESS": "İmza başarıyla kaydedildi", diff --git a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json index a64b9d438..96410efa4 100644 --- a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Автентифікація через Facebook...", "ERROR_FB_AUTH": "Щось пішло не так. Будь ласка, оновіть сторінку...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Створення скриньки Вхідні...", "TITLE": "Налаштувати подробиці Джерела", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/uk/settings.json b/app/javascript/dashboard/i18n/locale/uk/settings.json index 9c0c67db9..9c875cfbb 100644 --- a/app/javascript/dashboard/i18n/locale/uk/settings.json +++ b/app/javascript/dashboard/i18n/locale/uk/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Підпис особистого повідомлення", - "NOTE": "Створити особистий підпис повідомлення, який буде додано до всіх повідомлень, надісланих з поштової скриньки. Використовуйте редактор багатокористувацького контенту для створення персоналізованого підпису.", + "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": "Зберегти підпис повідомлення", "API_ERROR": "Не вдалося зберегти підпис! Повторіть спробу", "API_SUCCESS": "Підпис успішно збережено", diff --git a/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json index 833386b8a..15fbb7c14 100644 --- a/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ur/settings.json b/app/javascript/dashboard/i18n/locale/ur/settings.json index 8b6cdf12b..fac9ca2ec 100644 --- a/app/javascript/dashboard/i18n/locale/ur/settings.json +++ b/app/javascript/dashboard/i18n/locale/ur/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", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json index dfd508b6f..e6b8413fe 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Authenticating you with Facebook...", "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Creating your Inbox...", "TITLE": "Configure Inbox Details", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json b/app/javascript/dashboard/i18n/locale/ur_IN/settings.json index f749b5a73..273c20b39 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/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", diff --git a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json index dca0fbcd1..c57718512 100644 --- a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "Xác thực bạn bằng Facebook...", "ERROR_FB_AUTH": "Đã xảy ra sự cố, Vui lòng làm mới trang...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "Tạo Hộp thư đến của bạn...", "TITLE": "Cấu hình chi tiết hộp thư đến", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/vi/settings.json b/app/javascript/dashboard/i18n/locale/vi/settings.json index ce483b6ae..e2ea83263 100644 --- a/app/javascript/dashboard/i18n/locale/vi/settings.json +++ b/app/javascript/dashboard/i18n/locale/vi/settings.json @@ -36,7 +36,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Chữ ký tin nhắn cá nhân", - "NOTE": "Tạo chữ ký thư cá nhân sẽ được thêm vào tất cả các thư bạn gửi từ hộp thư email của mình. Sử dụng trình chỉnh sửa nội dung phong phú để tạo chữ ký được cá nhân hóa cao.", + "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": "Lưu chữ ký tin nhắn", "API_ERROR": "Không thể lưu chữ ký! Thử lại", "API_SUCCESS": "Chữ ký được lưu thành công", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json index 8270b3124..8e655a23a 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "在 Facebook 上认证你... ..", "ERROR_FB_AUTH": "出错了,请刷新页面...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "创建您的收件箱...", "TITLE": "配置收件箱详情", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json b/app/javascript/dashboard/i18n/locale/zh_CN/settings.json index 17d11ad7e..0eedaf4ef 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/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", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json index 599bdd112..df4b08aff 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json @@ -371,6 +371,8 @@ "DETAILS": { "LOADING_FB": "在 Facebook 上認證你... ..", "ERROR_FB_AUTH": "出錯了,請刷新頁面...", + "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ", + "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.", "CREATING_CHANNEL": "建立您的收件匣...", "TITLE": "配置收件匣詳情", "DESC": "" diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json index 7b759957e..21bf38b53 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/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", diff --git a/app/javascript/widget/i18n/locale/es.json b/app/javascript/widget/i18n/locale/es.json index bfd345ca7..1a5f3a885 100644 --- a/app/javascript/widget/i18n/locale/es.json +++ b/app/javascript/widget/i18n/locale/es.json @@ -34,9 +34,9 @@ "START_CONVERSATION": "Iniciar conversación", "END_CONVERSATION": "Finalizar conversación", "CONTINUE_CONVERSATION": "Continuar conversación", - "YOU": "You", + "YOU": "Tú", "START_NEW_CONVERSATION": "Iniciar una nueva conversación", - "VIEW_UNREAD_MESSAGES": "You have unread messages", + "VIEW_UNREAD_MESSAGES": "Tienes mensajes no leídos", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Ver nuevos mensajes", "CLOSE_MESSAGES_BUTTON": "Cerrar", @@ -111,7 +111,7 @@ "PORTAL": { "POPULAR_ARTICLES": "Artículos populares", "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." + "IFRAME_LOAD_ERROR": "Se ha producido un error al cargar el artículo, por favor actualiza la página e inténtalo de nuevo." }, "ATTACHMENTS": { "image": { diff --git a/app/javascript/widget/i18n/locale/lt.json b/app/javascript/widget/i18n/locale/lt.json index 818a852e6..ab7c92d7a 100644 --- a/app/javascript/widget/i18n/locale/lt.json +++ b/app/javascript/widget/i18n/locale/lt.json @@ -34,9 +34,9 @@ "START_CONVERSATION": "Pradėti Pokalbį", "END_CONVERSATION": "Užbaigti Pokalbį", "CONTINUE_CONVERSATION": "Tęsti pokalbį", - "YOU": "You", + "YOU": "Jūs", "START_NEW_CONVERSATION": "Pradėti naują pokalbį", - "VIEW_UNREAD_MESSAGES": "You have unread messages", + "VIEW_UNREAD_MESSAGES": "Turite neperskaitytų pranešimų", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Žiūrėti naujus pranešimus", "CLOSE_MESSAGES_BUTTON": "Uždaryti", diff --git a/app/javascript/widget/i18n/locale/ru.json b/app/javascript/widget/i18n/locale/ru.json index df5923bc6..cacd9e78e 100644 --- a/app/javascript/widget/i18n/locale/ru.json +++ b/app/javascript/widget/i18n/locale/ru.json @@ -34,9 +34,9 @@ "START_CONVERSATION": "Начать диалог", "END_CONVERSATION": "Завершить диалог", "CONTINUE_CONVERSATION": "Продолжить беседу", - "YOU": "You", + "YOU": "Вы", "START_NEW_CONVERSATION": "Начать диалог", - "VIEW_UNREAD_MESSAGES": "You have unread messages", + "VIEW_UNREAD_MESSAGES": "У вас есть непрочитанные сообщения", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Посмотреть новые сообщения", "CLOSE_MESSAGES_BUTTON": "Закрыть", @@ -109,9 +109,9 @@ } }, "PORTAL": { - "POPULAR_ARTICLES": "Popular Articles", + "POPULAR_ARTICLES": "Популярные статьи", "VIEW_ALL_ARTICLES": "Показать все статьи", - "IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again." + "IFRAME_LOAD_ERROR": "Произошла ошибка при загрузке статьи, пожалуйста, обновите страницу и повторите попытку." }, "ATTACHMENTS": { "image": { diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 996f2d4c2..d905cc94a 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -50,7 +50,7 @@ ru: dyte: invalid_message_type: "Недопустимый тип сообщения. Действие запрещено" slack: - invalid_channel_id: "Invalid slack channel. Please try again" + invalid_channel_id: "Неправильный канал slack - попробуйте еще раз" inboxes: imap: socket_error: Пожалуйста, проверьте сетевое подключение, адрес IMAP и повторите попытку. From a88d155dd753ec06ed26468e6c907e4403210600 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 27 Sep 2023 14:02:34 +0530 Subject: [PATCH 05/69] feat: update tool-chain to latest (#7975) Co-authored-by: Pranav Raj S --- .eslintrc.js | 10 +- app/javascript/dashboard/App.vue | 6 +- app/javascript/dashboard/api/ApiClient.js | 5 +- app/javascript/dashboard/api/contacts.js | 1 + .../api/enterprise/specs/account.spec.js | 23 +- app/javascript/dashboard/api/reports.js | 1 + .../dashboard/api/specs/account.spec.js | 21 +- .../api/specs/accountActions.spec.js | 21 +- .../dashboard/api/specs/apiSpecHelper.js | 27 - .../dashboard/api/specs/article.spec.js | 81 +- .../api/specs/assignableAgents.spec.js | 32 +- .../api/specs/channel/fbChannel.spec.js | 23 +- .../dashboard/api/specs/contacts.spec.js | 48 +- .../dashboard/api/specs/conversations.spec.js | 23 +- .../dashboard/api/specs/csatReports.spec.js | 25 +- .../api/specs/inbox/conversation.spec.js | 89 +- .../dashboard/api/specs/inbox/message.spec.js | 26 +- .../dashboard/api/specs/inboxes.spec.js | 28 +- .../dashboard/api/specs/integrations.spec.js | 33 +- .../api/specs/integrations/dyte.spec.js | 41 +- .../dashboard/api/specs/notifications.spec.js | 29 +- .../dashboard/api/specs/reports.spec.js | 110 +- .../dashboard/api/specs/teams.spec.js | 25 +- .../dashboard/components/ChatList.vue | 13 +- .../components/CustomSnoozeModal.vue | 4 +- .../dashboard/components/MaskedText.vue | 2 +- app/javascript/dashboard/components/Modal.vue | 6 +- .../dashboard/components/SettingsSection.vue | 3 +- .../components/app/PaymentPendingBanner.vue | 6 +- .../components/app/versionCheckHelper.js | 2 +- .../components/buttons/ResolveAction.vue | 10 +- .../sidebarComponents/AddAccountModal.vue | 4 +- .../sidebarComponents/NotificationBell.vue | 3 +- .../SecondaryChildNavItem.vue | 6 +- .../sidebarComponents/SecondaryNavItem.vue | 3 +- .../dashboard/components/widgets/AILoader.vue | 2 +- .../components/widgets/FilterInput/Index.vue | 3 + .../components/widgets/WootWriter/Editor.vue | 2 + .../widgets/WootWriter/FullEditor.vue | 2 + .../conversation/AvailabilityStatusBadge.vue | 4 +- .../conversation/ConversationBasicFilter.vue | 4 +- .../widgets/conversation/ConversationCard.vue | 4 +- .../conversation/EmailTranscriptModal.vue | 1 + .../widgets/conversation/MessagesView.vue | 10 +- .../widgets/conversation/PriorityMark.vue | 6 +- .../widgets/conversation/ReplyBox.vue | 5 +- .../conversation/WhatsappTemplates/Modal.vue | 1 + .../widgets/conversation/bubble/Actions.vue | 5 +- .../conversation/bubble/integrations/Dyte.vue | 5 +- .../conversation/components/GalleryView.vue | 10 +- .../conversation/contextMenu/Index.vue | 16 +- .../widgets/forms/AvatarUploader.vue | 2 +- .../components/widgets/forms/PhoneInput.vue | 3 +- .../widgets/modal/ConfirmDeleteModal.vue | 1 + .../components/widgets/modal/DeleteModal.vue | 1 + .../widgets/modal/WootKeyShortcutModal.vue | 12 +- .../DashboardAudioNotificationHelper.js | 1 + app/javascript/dashboard/helper/URLHelper.js | 3 +- .../dashboard/helper/actionCable.js | 4 + .../dashboard/helper/automationHelper.js | 2 + .../dashboard/helper/customViewsHelper.js | 11 +- .../dashboard/helper/routeHelpers.js | 2 + .../helper/specs/auditlogHelper.spec.js | 18 +- .../helper/specs/editorHelper.spec.js | 10 +- .../mixins/automations/methodsMixin.js | 12 +- .../dashboard/mixins/specs/uiSettings.spec.js | 12 +- .../modules/contact/ContactMergeModal.vue | 1 + .../contact/components/AddCustomAttribute.vue | 1 + .../components/MessageContextMenu.vue | 12 +- .../modules/search/components/ReadMore.vue | 3 +- .../SearchResultConversationItem.vue | 2 +- .../components/WidgetFooter.vue | 4 +- .../dashboard/routes/dashboard/Dashboard.vue | 5 +- .../dashboard/commands/appearanceHotKeys.js | 5 +- .../routes/dashboard/commands/commandbar.vue | 14 +- .../contacts/components/ContactsView.vue | 7 +- .../conversation/ConversationAction.vue | 1 + .../conversation/ConversationInfo.vue | 6 +- .../conversation/ConversationView.vue | 13 +- .../conversation/Macros/MacroItem.vue | 2 +- .../conversation/contact/ContactForm.vue | 4 +- .../conversation/contact/CreateContact.vue | 1 + .../conversation/contact/EditContact.vue | 7 +- .../conversation/contact/NewConversation.vue | 1 + .../customviews/DeleteCustomViews.vue | 1 + .../helpcenter/components/AddLocale.vue | 1 + .../components/ArticleSearchResultItem.vue | 2 +- .../components/HelpCenterLayout.vue | 5 +- .../helpcenter/components/PortalSwitch.vue | 12 +- .../pages/categories/AddCategory.vue | 1 + .../pages/categories/EditCategory.vue | 1 + .../components/NotificationPanelList.vue | 6 +- .../dashboard/settings/account/Index.vue | 2 +- .../dashboard/settings/agents/AddAgent.vue | 9 +- .../dashboard/settings/agents/EditAgent.vue | 4 +- .../dashboard/settings/auditlogs/Index.vue | 12 +- .../dashboard/settings/canned/AddCanned.vue | 4 +- .../dashboard/settings/canned/EditCanned.vue | 4 +- .../dashboard/settings/inbox/FinishSetup.vue | 4 +- .../routes/dashboard/settings/inbox/Index.vue | 4 +- .../dashboard/settings/inbox/Settings.vue | 8 +- .../inbox/components/BotConfiguration.vue | 6 +- .../settings/integrationapps/NewHook.vue | 5 +- .../DashboardApps/DashboardAppsRow.vue | 8 +- .../settings/integrations/Integration.vue | 8 +- .../Slack/SlackIntegrationHelpText.vue | 2 +- .../settings/profile/ChangePassword.vue | 4 +- .../settings/profile/NotificationSettings.vue | 9 +- .../settings/reports/LiveReports.vue | 12 +- .../settings/reports/ReportContainer.vue | 5 +- .../components/ChartElements/ChartStats.vue | 4 +- .../reports/components/Filters/Labels.vue | 6 +- .../settings/reports/components/Heatmap.vue | 16 +- .../reports/components/ReportFilters.vue | 6 +- .../settings/teams/AgentSelector.vue | 4 +- app/javascript/dashboard/store/index.js | 3 +- .../dashboard/store/modules/accounts.js | 25 +- .../store/modules/contactConversations.js | 10 +- .../store/modules/contacts/actions.js | 6 +- .../store/modules/conversationWatchers.js | 5 +- .../dashboard/store/modules/customViews.js | 5 +- .../modules/helpCenterArticles/getters.js | 28 +- .../helpCenterArticles/specs/mutation.spec.js | 2 +- .../modules/helpCenterCategories/getters.js | 30 +- .../modules/helpCenterPortals/getters.js | 12 +- .../dashboard/store/modules/inboxes.js | 6 +- .../modules/specs/agents/mutations.spec.js | 2 +- .../components/ArticleSkeletonLoader.vue | 10 +- app/javascript/shared/components/TextArea.vue | 15 +- .../shared/components/emoji/EmojiInput.vue | 8 +- .../shared/helpers/AudioNotificationHelper.js | 2 + .../helpers/BaseActionCableConnector.js | 2 + app/javascript/shared/helpers/FileHelper.js | 2 +- .../helpers/specs/ReportsDataHelper.spec.js | 24 +- .../shared/mixins/globalConfigMixin.js | 1 + .../mixins/specs/automationMixin.spec.js | 2 + .../specs/whatsappTemplates/fixtures.js | 15 +- .../whatsappTemplates.spec.js | 7 +- app/javascript/v3/App.vue | 13 +- app/javascript/v3/components/Form/Input.vue | 5 +- .../v3/views/auth/password/Edit.vue | 4 +- .../widget/components/AgentMessage.vue | 5 +- .../components/ArticleCardSkeletonLoader.vue | 6 +- .../widget/components/ArticleListItem.vue | 2 +- .../widget/components/ChatHeader.vue | 6 +- .../widget/components/ChatInputWrap.vue | 4 +- .../widget/components/Form/PhoneInput.vue | 2 +- .../widget/components/GroupedAvatars.vue | 8 +- .../widget/components/HeaderActions.vue | 6 +- .../widget/components/TeamAvailability.vue | 2 +- .../components/template/IntegrationCard.vue | 9 +- .../widget/helpers/IframeEventHelper.js | 5 +- app/javascript/widget/helpers/actionCable.js | 7 +- .../widget/helpers/specs/utils.spec.js | 9 +- .../mixins/specs/nextAvailabilityTime.spec.js | 17 +- .../specs/conversation/actions.spec.js | 24 +- .../specs/conversation/mutations.spec.js | 10 +- app/javascript/widget/views/Home.vue | 10 +- babel.config.js | 15 +- jest.config.js | 17 +- package.json | 39 +- yarn.lock | 4775 +++++++++-------- 162 files changed, 3566 insertions(+), 2884 deletions(-) delete mode 100644 app/javascript/dashboard/api/specs/apiSpecHelper.js diff --git a/.eslintrc.js b/.eslintrc.js index 0fae1bc44..a58c77e98 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,7 +6,7 @@ module.exports = { 'plugin:storybook/recommended', ], parserOptions: { - parser: 'babel-eslint', + parser: '@babel/eslint-parser', ecmaVersion: 2020, sourceType: 'module', }, @@ -24,13 +24,16 @@ module.exports = { 'jsx-a11y/label-has-for': 'off', 'jsx-a11y/anchor-is-valid': 'off', 'import/no-unresolved': 'off', + 'vue/html-indent': 'off', + 'vue/multi-word-component-names': 'off', 'vue/max-attributes-per-line': [ 'error', { - singleline: 20, + singleline: { + max: 20, + }, multiline: { max: 1, - allowFirstLine: false, }, }, ], @@ -47,6 +50,7 @@ module.exports = { }, ], 'vue/no-v-html': 'off', + 'vue/component-definition-name-casing': 'off', 'vue/singleline-html-element-content-newline': 'off', 'import/extensions': ['off'], 'no-console': 'error', diff --git a/app/javascript/dashboard/App.vue b/app/javascript/dashboard/App.vue index 649d56d15..919167c2a 100644 --- a/app/javascript/dashboard/App.vue +++ b/app/javascript/dashboard/App.vue @@ -111,10 +111,8 @@ export default { this.$store.dispatch('setActiveAccount', { accountId: this.currentAccountId, }); - const { - locale, - latest_chatwoot_version: latestChatwootVersion, - } = this.getAccount(this.currentAccountId); + const { locale, latest_chatwoot_version: latestChatwootVersion } = + this.getAccount(this.currentAccountId); const { pubsub_token: pubsubToken } = this.currentUser || {}; this.setLocale(locale); this.updateRTLDirectionView(locale); diff --git a/app/javascript/dashboard/api/ApiClient.js b/app/javascript/dashboard/api/ApiClient.js index fed0746ca..6b57d32b6 100644 --- a/app/javascript/dashboard/api/ApiClient.js +++ b/app/javascript/dashboard/api/ApiClient.js @@ -15,9 +15,8 @@ class ApiClient { // eslint-disable-next-line class-methods-use-this get accountIdFromRoute() { - const isInsideAccountScopedURLs = window.location.pathname.includes( - '/app/accounts' - ); + const isInsideAccountScopedURLs = + window.location.pathname.includes('/app/accounts'); if (isInsideAccountScopedURLs) { return window.location.pathname.split('/')[3]; diff --git a/app/javascript/dashboard/api/contacts.js b/app/javascript/dashboard/api/contacts.js index 4def5ee2e..61312dd24 100644 --- a/app/javascript/dashboard/api/contacts.js +++ b/app/javascript/dashboard/api/contacts.js @@ -53,6 +53,7 @@ class ContactAPI extends ApiClient { return axios.get(requestURL); } + // eslint-disable-next-line default-param-last filter(page = 1, sortAttr = 'name', queryPayload) { let requestURL = `${this.url}/filter?${buildContactParams(page, sortAttr)}`; return axios.post(requestURL, queryPayload); diff --git a/app/javascript/dashboard/api/enterprise/specs/account.spec.js b/app/javascript/dashboard/api/enterprise/specs/account.spec.js index 28fd83cd1..6c9dca986 100644 --- a/app/javascript/dashboard/api/enterprise/specs/account.spec.js +++ b/app/javascript/dashboard/api/enterprise/specs/account.spec.js @@ -1,6 +1,5 @@ import accountAPI from '../account'; import ApiClient from '../../ApiClient'; -import describeWithAPIMock from '../../specs/apiSpecHelper'; describe('#enterpriseAccountAPI', () => { it('creates correct instance', () => { @@ -13,17 +12,33 @@ describe('#enterpriseAccountAPI', () => { expect(accountAPI).toHaveProperty('checkout'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#checkout', () => { accountAPI.checkout(); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/enterprise/api/v1/checkout' ); }); it('#subscription', () => { accountAPI.subscription(); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/enterprise/api/v1/subscription' ); }); diff --git a/app/javascript/dashboard/api/reports.js b/app/javascript/dashboard/api/reports.js index 7bc07b565..987b69701 100644 --- a/app/javascript/dashboard/api/reports.js +++ b/app/javascript/dashboard/api/reports.js @@ -31,6 +31,7 @@ class ReportsAPI extends ApiClient { }); } + // eslint-disable-next-line default-param-last getSummary(since, until, type = 'account', id, groupBy, businessHours) { return axios.get(`${this.url}/summary`, { params: { diff --git a/app/javascript/dashboard/api/specs/account.spec.js b/app/javascript/dashboard/api/specs/account.spec.js index 3d37c4206..7e213b2a8 100644 --- a/app/javascript/dashboard/api/specs/account.spec.js +++ b/app/javascript/dashboard/api/specs/account.spec.js @@ -1,6 +1,5 @@ import accountAPI from '../account'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#accountAPI', () => { it('creates correct instance', () => { @@ -13,12 +12,28 @@ describe('#accountAPI', () => { expect(accountAPI).toHaveProperty('createAccount'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#createAccount', () => { accountAPI.createAccount({ name: 'Chatwoot', }); - expect(context.axiosMock.post).toHaveBeenCalledWith('/api/v1/accounts', { + expect(axiosMock.post).toHaveBeenCalledWith('/api/v1/accounts', { name: 'Chatwoot', }); }); diff --git a/app/javascript/dashboard/api/specs/accountActions.spec.js b/app/javascript/dashboard/api/specs/accountActions.spec.js index 45f9663f3..330c117ff 100644 --- a/app/javascript/dashboard/api/specs/accountActions.spec.js +++ b/app/javascript/dashboard/api/specs/accountActions.spec.js @@ -1,6 +1,5 @@ import accountActionsAPI from '../accountActions'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#ContactsAPI', () => { it('creates correct instance', () => { @@ -8,10 +7,26 @@ describe('#ContactsAPI', () => { expect(accountActionsAPI).toHaveProperty('merge'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#merge', () => { accountActionsAPI.merge(1, 2); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/actions/contact_merge', { base_contact_id: 1, diff --git a/app/javascript/dashboard/api/specs/apiSpecHelper.js b/app/javascript/dashboard/api/specs/apiSpecHelper.js deleted file mode 100644 index aab90b045..000000000 --- a/app/javascript/dashboard/api/specs/apiSpecHelper.js +++ /dev/null @@ -1,27 +0,0 @@ -function apiSpecHelper() { - beforeEach(() => { - this.originalAxios = window.axios; - this.axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), - }; - window.axios = this.axiosMock; - }); - - afterEach(() => { - window.axios = this.originalAxios; - }); -} -// https://stackoverflow.com/a/59344023/3901856 -const sharedWrapper = describe('sharedWrapper', () => {}); -export default function describeWithAPIMock(skillName, testFn) { - return describe(skillName, function configureContext() { - function Context() {} - Context.prototype = sharedWrapper.ctx; - this.ctx = new Context(); - apiSpecHelper.call(this); - testFn.call(this, this); - }); -} diff --git a/app/javascript/dashboard/api/specs/article.spec.js b/app/javascript/dashboard/api/specs/article.spec.js index 51e90318f..b8886b4f8 100644 --- a/app/javascript/dashboard/api/specs/article.spec.js +++ b/app/javascript/dashboard/api/specs/article.spec.js @@ -1,6 +1,5 @@ import articlesAPI from '../helpCenter/articles'; import ApiClient from 'dashboard/api/helpCenter/portals'; -import describeWithAPIMock from './apiSpecHelper'; describe('#PortalAPI', () => { it('creates correct instance', () => { @@ -12,7 +11,23 @@ describe('#PortalAPI', () => { expect(articlesAPI).toHaveProperty('delete'); expect(articlesAPI).toHaveProperty('getArticles'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getArticles', () => { articlesAPI.getArticles({ pageNumber: 1, @@ -21,30 +36,62 @@ describe('#PortalAPI', () => { status: 'published', author_id: '1', }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/portals/room-rental/articles?page=1&locale=en-US&status=published&author_id=1' ); }); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getArticle', () => { articlesAPI.getArticle({ id: 1, portalSlug: 'room-rental', }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/portals/room-rental/articles/1' ); }); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#updateArticle', () => { articlesAPI.updateArticle({ articleId: 1, portalSlug: 'room-rental', articleObj: { title: 'Update shipping address' }, }); - expect(context.axiosMock.patch).toHaveBeenCalledWith( + expect(axiosMock.patch).toHaveBeenCalledWith( '/api/v1/portals/room-rental/articles/1', { title: 'Update shipping address', @@ -52,13 +99,29 @@ describe('#PortalAPI', () => { ); }); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#deleteArticle', () => { articlesAPI.deleteArticle({ articleId: 1, portalSlug: 'room-rental', }); - expect(context.axiosMock.delete).toHaveBeenCalledWith( + expect(axiosMock.delete).toHaveBeenCalledWith( '/api/v1/portals/room-rental/articles/1' ); }); diff --git a/app/javascript/dashboard/api/specs/assignableAgents.spec.js b/app/javascript/dashboard/api/specs/assignableAgents.spec.js index 6c9c5ec9a..5280162b3 100644 --- a/app/javascript/dashboard/api/specs/assignableAgents.spec.js +++ b/app/javascript/dashboard/api/specs/assignableAgents.spec.js @@ -1,18 +1,30 @@ import assignableAgentsAPI from '../assignableAgents'; -import describeWithAPIMock from './apiSpecHelper'; describe('#AssignableAgentsAPI', () => { - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getAssignableAgents', () => { assignableAgentsAPI.get([1]); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v1/assignable_agents', - { - params: { - inbox_ids: [1], - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v1/assignable_agents', { + params: { + inbox_ids: [1], + }, + }); }); }); }); diff --git a/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js b/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js index 67697f827..2cdcec56e 100644 --- a/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js +++ b/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js @@ -1,6 +1,5 @@ import fbChannel from '../../channel/fbChannel'; import ApiClient from '../../ApiClient'; -import describeWithAPIMock from '../apiSpecHelper'; describe('#FBChannel', () => { it('creates correct instance', () => { @@ -11,10 +10,26 @@ describe('#FBChannel', () => { expect(fbChannel).toHaveProperty('update'); expect(fbChannel).toHaveProperty('delete'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#create', () => { fbChannel.create({ omniauthToken: 'ASFM131CSF@#@$', appId: 'chatwoot' }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/callbacks/register_facebook_page', { omniauthToken: 'ASFM131CSF@#@$', @@ -27,7 +42,7 @@ describe('#FBChannel', () => { omniauthToken: 'ASFM131CSF@#@$', inboxId: 1, }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/callbacks/reauthorize_page', { omniauth_token: 'ASFM131CSF@#@$', diff --git a/app/javascript/dashboard/api/specs/contacts.spec.js b/app/javascript/dashboard/api/specs/contacts.spec.js index dc034480a..b4eaf7333 100644 --- a/app/javascript/dashboard/api/specs/contacts.spec.js +++ b/app/javascript/dashboard/api/specs/contacts.spec.js @@ -1,6 +1,5 @@ import contactAPI, { buildContactParams } from '../contacts'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#ContactsAPI', () => { it('creates correct instance', () => { @@ -15,56 +14,67 @@ describe('#ContactsAPI', () => { expect(contactAPI).toHaveProperty('destroyAvatar'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#get', () => { contactAPI.get(1, 'name', 'customer-support'); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/contacts?include_contact_inboxes=false&page=1&sort=name&labels[]=customer-support' ); }); it('#getConversations', () => { contactAPI.getConversations(1); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/contacts/1/conversations' ); }); it('#getContactableInboxes', () => { contactAPI.getContactableInboxes(1); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/contacts/1/contactable_inboxes' ); }); it('#getContactLabels', () => { contactAPI.getContactLabels(1); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v1/contacts/1/labels' - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v1/contacts/1/labels'); }); it('#updateContactLabels', () => { const labels = ['support-query']; contactAPI.updateContactLabels(1, labels); - expect(context.axiosMock.post).toHaveBeenCalledWith( - '/api/v1/contacts/1/labels', - { - labels, - } - ); + expect(axiosMock.post).toHaveBeenCalledWith('/api/v1/contacts/1/labels', { + labels, + }); }); it('#search', () => { contactAPI.search('leads', 1, 'date', 'customer-support'); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/contacts/search?include_contact_inboxes=false&page=1&sort=date&q=leads&labels[]=customer-support' ); }); it('#destroyCustomAttributes', () => { contactAPI.destroyCustomAttributes(1, ['cloudCustomer']); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/contacts/1/destroy_custom_attributes', { custom_attributes: ['cloudCustomer'], @@ -75,7 +85,7 @@ describe('#ContactsAPI', () => { it('#importContacts', () => { const file = 'file'; contactAPI.importContacts(file); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/contacts/import', expect.any(FormData), { @@ -96,7 +106,7 @@ describe('#ContactsAPI', () => { ], }; contactAPI.filter(1, 'name', queryPayload); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/contacts/filter?include_contact_inboxes=false&page=1&sort=name', queryPayload ); @@ -104,7 +114,7 @@ describe('#ContactsAPI', () => { it('#destroyAvatar', () => { contactAPI.destroyAvatar(1); - expect(context.axiosMock.delete).toHaveBeenCalledWith( + expect(axiosMock.delete).toHaveBeenCalledWith( '/api/v1/contacts/1/avatar' ); }); diff --git a/app/javascript/dashboard/api/specs/conversations.spec.js b/app/javascript/dashboard/api/specs/conversations.spec.js index 4b1a0a030..6b3db7404 100644 --- a/app/javascript/dashboard/api/specs/conversations.spec.js +++ b/app/javascript/dashboard/api/specs/conversations.spec.js @@ -1,6 +1,5 @@ import conversationsAPI from '../conversations'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#ConversationApi', () => { it('creates correct instance', () => { @@ -14,10 +13,26 @@ describe('#ConversationApi', () => { expect(conversationsAPI).toHaveProperty('updateLabels'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getLabels', () => { conversationsAPI.getLabels(1); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/conversations/1/labels' ); }); @@ -25,7 +40,7 @@ describe('#ConversationApi', () => { it('#updateLabels', () => { const labels = ['support-query']; conversationsAPI.updateLabels(1, labels); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/1/labels', { labels, diff --git a/app/javascript/dashboard/api/specs/csatReports.spec.js b/app/javascript/dashboard/api/specs/csatReports.spec.js index a1d6e50f2..7c1707e1e 100644 --- a/app/javascript/dashboard/api/specs/csatReports.spec.js +++ b/app/javascript/dashboard/api/specs/csatReports.spec.js @@ -1,6 +1,5 @@ import csatReportsAPI from '../csatReports'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#Reports API', () => { it('creates correct instance', () => { @@ -9,10 +8,26 @@ describe('#Reports API', () => { expect(csatReportsAPI).toHaveProperty('get'); expect(csatReportsAPI).toHaveProperty('getMetrics'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#get', () => { csatReportsAPI.get({ page: 1, from: 1622485800, to: 1623695400 }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/csat_survey_responses', { params: { @@ -26,7 +41,7 @@ describe('#Reports API', () => { }); it('#getMetrics', () => { csatReportsAPI.getMetrics({ from: 1622485800, to: 1623695400 }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/csat_survey_responses/metrics', { params: { since: 1622485800, until: 1623695400 }, @@ -39,7 +54,7 @@ describe('#Reports API', () => { to: 1623695400, user_ids: 1, }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/csat_survey_responses/download', { params: { diff --git a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js index 08343b69c..ecc833e16 100644 --- a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js +++ b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js @@ -1,6 +1,5 @@ import conversationAPI from '../../inbox/conversation'; import ApiClient from '../../ApiClient'; -import describeWithAPIMock from '../apiSpecHelper'; describe('#ConversationAPI', () => { it('creates correct instance', () => { @@ -22,7 +21,23 @@ describe('#ConversationAPI', () => { expect(conversationAPI).toHaveProperty('filter'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#get conversations', () => { conversationAPI.get({ inboxId: 1, @@ -32,19 +47,16 @@ describe('#ConversationAPI', () => { labels: [], teamId: 1, }); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v1/conversations', - { - params: { - inbox_id: 1, - team_id: 1, - status: 'open', - assignee_type: 'me', - page: 1, - labels: [], - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v1/conversations', { + params: { + inbox_id: 1, + team_id: 1, + status: 'open', + assignee_type: 'me', + page: 1, + labels: [], + }, + }); }); it('#search', () => { @@ -53,7 +65,7 @@ describe('#ConversationAPI', () => { page: 1, }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/conversations/search', { params: { @@ -66,7 +78,7 @@ describe('#ConversationAPI', () => { it('#toggleStatus', () => { conversationAPI.toggleStatus({ conversationId: 12, status: 'online' }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/toggle_status`, { status: 'online', @@ -77,7 +89,7 @@ describe('#ConversationAPI', () => { it('#assignAgent', () => { conversationAPI.assignAgent({ conversationId: 12, agentId: 34 }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/assignments?assignee_id=34`, {} ); @@ -85,7 +97,7 @@ describe('#ConversationAPI', () => { it('#assignTeam', () => { conversationAPI.assignTeam({ conversationId: 12, teamId: 1 }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/assignments`, { team_id: 1, @@ -95,7 +107,7 @@ describe('#ConversationAPI', () => { it('#markMessageRead', () => { conversationAPI.markMessageRead({ id: 12 }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/update_last_seen` ); }); @@ -105,7 +117,7 @@ describe('#ConversationAPI', () => { conversationId: 12, status: 'typing_on', }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/toggle_typing_status`, { typing_status: 'typing_on', @@ -115,14 +127,14 @@ describe('#ConversationAPI', () => { it('#mute', () => { conversationAPI.mute(45); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/mute' ); }); it('#unmute', () => { conversationAPI.unmute(45); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/unmute' ); }); @@ -135,18 +147,15 @@ describe('#ConversationAPI', () => { labels: [], teamId: 1, }); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v1/conversations/meta', - { - params: { - inbox_id: 1, - team_id: 1, - status: 'open', - assignee_type: 'me', - labels: [], - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v1/conversations/meta', { + params: { + inbox_id: 1, + team_id: 1, + status: 'open', + assignee_type: 'me', + labels: [], + }, + }); }); it('#sendEmailTranscript', () => { @@ -154,7 +163,7 @@ describe('#ConversationAPI', () => { conversationId: 45, email: 'john@acme.inc', }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/transcript', { email: 'john@acme.inc', @@ -167,7 +176,7 @@ describe('#ConversationAPI', () => { conversationId: 45, customAttributes: { order_d: '1001' }, }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/custom_attributes', { custom_attributes: { order_d: '1001' }, @@ -202,9 +211,7 @@ describe('#ConversationAPI', () => { }, }; conversationAPI.filter(payload); - expect( - context.axiosMock.post - ).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/filter', payload.queryData, { params: { page: payload.page } } @@ -213,7 +220,7 @@ describe('#ConversationAPI', () => { it('#getAllAttachments', () => { conversationAPI.getAllAttachments(1); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/conversations/1/attachments' ); }); diff --git a/app/javascript/dashboard/api/specs/inbox/message.spec.js b/app/javascript/dashboard/api/specs/inbox/message.spec.js index 6953621cb..e75bf34b0 100644 --- a/app/javascript/dashboard/api/specs/inbox/message.spec.js +++ b/app/javascript/dashboard/api/specs/inbox/message.spec.js @@ -1,6 +1,5 @@ import messageAPI, { buildCreatePayload } from '../../inbox/message'; import ApiClient from '../../ApiClient'; -import describeWithAPIMock from '../apiSpecHelper'; describe('#ConversationAPI', () => { it('creates correct instance', () => { @@ -13,13 +12,29 @@ describe('#ConversationAPI', () => { expect(messageAPI).toHaveProperty('getPreviousMessages'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getPreviousMessages', () => { messageAPI.getPreviousMessages({ conversationId: 12, before: 4573, }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( `/api/v1/conversations/12/messages`, { params: { @@ -35,7 +50,6 @@ describe('#ConversationAPI', () => { message: 'test content', echoId: 12, isPrivate: true, - files: [new Blob(['test-content'], { type: 'application/pdf' })], }); expect(formPayload).toBeInstanceOf(FormData); @@ -58,8 +72,10 @@ describe('#ConversationAPI', () => { private: false, echo_id: 12, content_attributes: { in_reply_to: 12 }, - bcc_emails: '', cc_emails: '', + bcc_emails: '', + to_emails: '', + template_params: undefined, }); }); }); diff --git a/app/javascript/dashboard/api/specs/inboxes.spec.js b/app/javascript/dashboard/api/specs/inboxes.spec.js index e471dac86..8834ceb07 100644 --- a/app/javascript/dashboard/api/specs/inboxes.spec.js +++ b/app/javascript/dashboard/api/specs/inboxes.spec.js @@ -1,6 +1,5 @@ import inboxesAPI from '../inboxes'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#InboxesAPI', () => { it('creates correct instance', () => { @@ -14,19 +13,32 @@ describe('#InboxesAPI', () => { expect(inboxesAPI).toHaveProperty('getAgentBot'); expect(inboxesAPI).toHaveProperty('setAgentBot'); }); - describeWithAPIMock('API calls', context => { + + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getCampaigns', () => { inboxesAPI.getCampaigns(2); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v1/inboxes/2/campaigns' - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v1/inboxes/2/campaigns'); }); it('#deleteInboxAvatar', () => { inboxesAPI.deleteInboxAvatar(2); - expect(context.axiosMock.delete).toHaveBeenCalledWith( - '/api/v1/inboxes/2/avatar' - ); + expect(axiosMock.delete).toHaveBeenCalledWith('/api/v1/inboxes/2/avatar'); }); }); }); diff --git a/app/javascript/dashboard/api/specs/integrations.spec.js b/app/javascript/dashboard/api/specs/integrations.spec.js index 890cc7c84..5ccbda436 100644 --- a/app/javascript/dashboard/api/specs/integrations.spec.js +++ b/app/javascript/dashboard/api/specs/integrations.spec.js @@ -1,6 +1,5 @@ import integrationAPI from '../integrations'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#integrationAPI', () => { it('creates correct instance', () => { @@ -16,11 +15,27 @@ describe('#integrationAPI', () => { expect(integrationAPI).toHaveProperty('listAllSlackChannels'); expect(integrationAPI).toHaveProperty('deleteHook'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#connectSlack', () => { const code = 'SDNFJNSDFNDSJN'; integrationAPI.connectSlack(code); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/integrations/slack', { code, @@ -31,7 +46,7 @@ describe('#integrationAPI', () => { it('#updateSlack', () => { const updateObj = { referenceId: 'SDFSDGSVE' }; integrationAPI.updateSlack(updateObj); - expect(context.axiosMock.patch).toHaveBeenCalledWith( + expect(axiosMock.patch).toHaveBeenCalledWith( '/api/v1/integrations/slack', { reference_id: updateObj.referenceId, @@ -41,16 +56,14 @@ describe('#integrationAPI', () => { it('#listAllSlackChannels', () => { integrationAPI.listAllSlackChannels(); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/integrations/slack/list_all_channels' ); }); it('#delete', () => { integrationAPI.delete(2); - expect(context.axiosMock.delete).toHaveBeenCalledWith( - '/api/v1/integrations/2' - ); + expect(axiosMock.delete).toHaveBeenCalledWith('/api/v1/integrations/2'); }); it('#createHook', () => { @@ -59,7 +72,7 @@ describe('#integrationAPI', () => { settings: { api_key: 'SDFSDGSVE' }, }; integrationAPI.createHook(hookData); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/integrations/hooks', hookData ); @@ -67,7 +80,7 @@ describe('#integrationAPI', () => { it('#deleteHook', () => { integrationAPI.deleteHook(2); - expect(context.axiosMock.delete).toHaveBeenCalledWith( + expect(axiosMock.delete).toHaveBeenCalledWith( '/api/v1/integrations/hooks/2' ); }); diff --git a/app/javascript/dashboard/api/specs/integrations/dyte.spec.js b/app/javascript/dashboard/api/specs/integrations/dyte.spec.js index c89c2106e..4bbe0484a 100644 --- a/app/javascript/dashboard/api/specs/integrations/dyte.spec.js +++ b/app/javascript/dashboard/api/specs/integrations/dyte.spec.js @@ -1,6 +1,5 @@ import DyteAPIClient from '../../integrations/dyte'; import ApiClient from '../../ApiClient'; -import describeWithAPIMock from '../apiSpecHelper'; describe('#accountAPI', () => { it('creates correct instance', () => { @@ -9,10 +8,26 @@ describe('#accountAPI', () => { expect(DyteAPIClient).toHaveProperty('addParticipantToMeeting'); }); - describeWithAPIMock('createAMeeting', context => { + describe('createAMeeting', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('creates a valid request', () => { DyteAPIClient.createAMeeting(1); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/integrations/dyte/create_a_meeting', { conversation_id: 1, @@ -21,10 +36,26 @@ describe('#accountAPI', () => { }); }); - describeWithAPIMock('addParticipantToMeeting', context => { + describe('addParticipantToMeeting', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('creates a valid request', () => { DyteAPIClient.addParticipantToMeeting(1); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/integrations/dyte/add_participant_to_meeting', { message_id: 1, diff --git a/app/javascript/dashboard/api/specs/notifications.spec.js b/app/javascript/dashboard/api/specs/notifications.spec.js index d20c0d526..5bdf88d7f 100644 --- a/app/javascript/dashboard/api/specs/notifications.spec.js +++ b/app/javascript/dashboard/api/specs/notifications.spec.js @@ -1,6 +1,5 @@ import notificationsAPI from '../notifications'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#NotificationAPI', () => { it('creates correct instance', () => { @@ -11,31 +10,47 @@ describe('#NotificationAPI', () => { expect(notificationsAPI).toHaveProperty('read'); expect(notificationsAPI).toHaveProperty('readAll'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#get', () => { notificationsAPI.get(1); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/notifications?page=1' ); }); it('#getNotifications', () => { notificationsAPI.getNotifications(1); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/notifications/1/notifications' ); }); it('#getUnreadCount', () => { notificationsAPI.getUnreadCount(); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/notifications/unread_count' ); }); it('#read', () => { notificationsAPI.read(48670, 'Conversation'); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/notifications/read_all', { primary_actor_id: 'Conversation', @@ -46,7 +61,7 @@ describe('#NotificationAPI', () => { it('#readAll', () => { notificationsAPI.readAll(); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/notifications/read_all' ); }); diff --git a/app/javascript/dashboard/api/specs/reports.spec.js b/app/javascript/dashboard/api/specs/reports.spec.js index 368997859..7822dad8f 100644 --- a/app/javascript/dashboard/api/specs/reports.spec.js +++ b/app/javascript/dashboard/api/specs/reports.spec.js @@ -1,6 +1,5 @@ import reportsAPI from '../reports'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#Reports API', () => { it('creates correct instance', () => { @@ -18,14 +17,30 @@ describe('#Reports API', () => { expect(reportsAPI).toHaveProperty('getInboxReports'); expect(reportsAPI).toHaveProperty('getTeamReports'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getAccountReports', () => { reportsAPI.getReports({ metric: 'conversations_count', from: 1621103400, to: 1621621800, }); - expect(context.axiosMock.get).toHaveBeenCalledWith('/api/v2/reports', { + expect(axiosMock.get).toHaveBeenCalledWith('/api/v2/reports', { params: { metric: 'conversations_count', since: 1621103400, @@ -38,20 +53,17 @@ describe('#Reports API', () => { it('#getAccountSummary', () => { reportsAPI.getSummary(1621103400, 1621621800); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v2/reports/summary', - { - params: { - business_hours: undefined, - group_by: undefined, - id: undefined, - since: 1621103400, - timezone_offset: -0, - type: 'account', - until: 1621621800, - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v2/reports/summary', { + params: { + business_hours: undefined, + group_by: undefined, + id: undefined, + since: 1621103400, + timezone_offset: -0, + type: 'account', + until: 1621621800, + }, + }); }); it('#getAgentReports', () => { @@ -60,60 +72,48 @@ describe('#Reports API', () => { to: 1621621800, businessHours: true, }); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v2/reports/agents', - { - params: { - since: 1621103400, - until: 1621621800, - business_hours: true, - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v2/reports/agents', { + params: { + since: 1621103400, + until: 1621621800, + business_hours: true, + }, + }); }); it('#getLabelReports', () => { reportsAPI.getLabelReports({ from: 1621103400, to: 1621621800 }); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v2/reports/labels', - { - params: { - since: 1621103400, - until: 1621621800, - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v2/reports/labels', { + params: { + since: 1621103400, + until: 1621621800, + }, + }); }); it('#getInboxReports', () => { reportsAPI.getInboxReports({ from: 1621103400, to: 1621621800 }); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v2/reports/inboxes', - { - params: { - since: 1621103400, - until: 1621621800, - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v2/reports/inboxes', { + params: { + since: 1621103400, + until: 1621621800, + }, + }); }); it('#getTeamReports', () => { reportsAPI.getTeamReports({ from: 1621103400, to: 1621621800 }); - expect(context.axiosMock.get).toHaveBeenCalledWith( - '/api/v2/reports/teams', - { - params: { - since: 1621103400, - until: 1621621800, - }, - } - ); + expect(axiosMock.get).toHaveBeenCalledWith('/api/v2/reports/teams', { + params: { + since: 1621103400, + until: 1621621800, + }, + }); }); it('#getConversationMetric', () => { reportsAPI.getConversationMetric('account'); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v2/reports/conversations', { params: { diff --git a/app/javascript/dashboard/api/specs/teams.spec.js b/app/javascript/dashboard/api/specs/teams.spec.js index 4f29af554..3a59f2c51 100644 --- a/app/javascript/dashboard/api/specs/teams.spec.js +++ b/app/javascript/dashboard/api/specs/teams.spec.js @@ -1,6 +1,5 @@ import teamsAPI from '../teams'; import ApiClient from '../ApiClient'; -import describeWithAPIMock from './apiSpecHelper'; describe('#TeamsAPI', () => { it('creates correct instance', () => { @@ -14,17 +13,33 @@ describe('#TeamsAPI', () => { expect(teamsAPI).toHaveProperty('addAgents'); expect(teamsAPI).toHaveProperty('updateAgents'); }); - describeWithAPIMock('API calls', context => { + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + post: jest.fn(() => Promise.resolve()), + get: jest.fn(() => Promise.resolve()), + patch: jest.fn(() => Promise.resolve()), + delete: jest.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + it('#getAgents', () => { teamsAPI.getAgents({ teamId: 1 }); - expect(context.axiosMock.get).toHaveBeenCalledWith( + expect(axiosMock.get).toHaveBeenCalledWith( '/api/v1/teams/1/team_members' ); }); it('#addAgents', () => { teamsAPI.addAgents({ teamId: 1, agentsList: { user_ids: [1, 10, 21] } }); - expect(context.axiosMock.post).toHaveBeenCalledWith( + expect(axiosMock.post).toHaveBeenCalledWith( '/api/v1/teams/1/team_members', { user_ids: { user_ids: [1, 10, 21] }, @@ -38,7 +53,7 @@ describe('#TeamsAPI', () => { teamId: 1, agentsList, }); - expect(context.axiosMock.patch).toHaveBeenCalledWith( + expect(axiosMock.patch).toHaveBeenCalledWith( '/api/v1/teams/1/team_members', { user_ids: agentsList, diff --git a/app/javascript/dashboard/components/ChatList.vue b/app/javascript/dashboard/components/ChatList.vue index e0b722ab3..b90ee30f6 100644 --- a/app/javascript/dashboard/components/ChatList.vue +++ b/app/javascript/dashboard/components/ChatList.vue @@ -10,7 +10,8 @@
@@ -24,9 +25,7 @@ v-if="!hasAppliedFiltersOrActiveFolders" class="p-1 my-0.5 mx-1 rounded-md capitalize bg-slate-50 dark:bg-slate-800 text-xxs text-slate-600 dark:text-slate-300" > - {{ - this.$t(`CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${activeStatus}.TEXT`) - }} + {{ $t(`CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${activeStatus}.TEXT`) }}
@@ -642,10 +641,8 @@ export default { }, handleKeyEvents(e) { if (hasPressedAltAndJKey(e)) { - const { - allConversations, - activeConversationIndex, - } = this.getKeyboardListenerParams(); + const { allConversations, activeConversationIndex } = + this.getKeyboardListenerParams(); if (activeConversationIndex === -1) { allConversations[0].click(); } diff --git a/app/javascript/dashboard/components/CustomSnoozeModal.vue b/app/javascript/dashboard/components/CustomSnoozeModal.vue index f204bac9f..65f943d41 100644 --- a/app/javascript/dashboard/components/CustomSnoozeModal.vue +++ b/app/javascript/dashboard/components/CustomSnoozeModal.vue @@ -13,10 +13,10 @@ />
- {{ this.$t('CONVERSATION.CUSTOM_SNOOZE.CANCEL') }} + {{ $t('CONVERSATION.CUSTOM_SNOOZE.CANCEL') }} - {{ this.$t('CONVERSATION.CUSTOM_SNOOZE.APPLY') }} + {{ $t('CONVERSATION.CUSTOM_SNOOZE.APPLY') }}
diff --git a/app/javascript/dashboard/components/MaskedText.vue b/app/javascript/dashboard/components/MaskedText.vue index a3355ddfa..87531a07e 100644 --- a/app/javascript/dashboard/components/MaskedText.vue +++ b/app/javascript/dashboard/components/MaskedText.vue @@ -1,6 +1,6 @@