Compare commits
59 commits
develop
...
feat/new-a
Author | SHA1 | Date | |
---|---|---|---|
|
b155f64fe2 | ||
|
09fd0a39ed | ||
|
8656b6c95d | ||
|
3276a6d840 | ||
|
4e27a9ff3b | ||
|
37265844a4 | ||
|
0f79135f20 | ||
|
e528839c9c | ||
|
eea452cda1 | ||
|
ea1d881b66 | ||
|
1d5796bdab | ||
|
7758d77c75 | ||
|
3803cd2604 | ||
|
252c1238fe | ||
|
fb9c90a90f | ||
|
100f0b07ce | ||
|
2e638b1234 | ||
|
38e60de847 | ||
|
9a23853907 | ||
|
eed716fad7 | ||
|
971c40a5eb | ||
|
b6278037f4 | ||
|
0e856b1b11 | ||
|
89cafaadef | ||
|
fdf77258e5 | ||
|
4032d6f639 | ||
|
73b9741b35 | ||
|
90fd155f59 | ||
|
620eb4e628 | ||
|
c29e395bc8 | ||
|
112593db30 | ||
|
b74aa5df61 | ||
|
8101fa42bd | ||
|
cf719282aa | ||
|
73a8c07f7b | ||
|
416d482de6 | ||
|
2e50ba137b | ||
|
1eccf79cf7 | ||
|
d24a5c98a1 | ||
|
470cd0944d | ||
|
ccb8ced4e5 | ||
|
449b29197a | ||
|
61b7969c30 | ||
|
1107e2c4fb | ||
|
73f54648c6 | ||
|
bba50e7e64 | ||
|
5d1e7b320e | ||
|
7ab6746844 | ||
|
21efdf5c56 | ||
|
32f33da153 | ||
|
7f7fa360ab | ||
|
389b628002 | ||
|
92961a8103 | ||
|
2d1cc47268 | ||
|
e4109e8b16 | ||
|
8138a80bc3 | ||
|
7e874cbef8 | ||
|
350d3b12d8 | ||
|
d862e27716 |
571 changed files with 2501 additions and 15291 deletions
8
Gemfile
8
Gemfile
|
@ -4,7 +4,7 @@ ruby '3.0.4'
|
||||||
|
|
||||||
##-- base gems for rails --##
|
##-- base gems for rails --##
|
||||||
gem 'rack-cors', require: 'rack/cors'
|
gem 'rack-cors', require: 'rack/cors'
|
||||||
gem 'rails', '~> 6.1', '>= 6.1.6.1'
|
gem 'rails', '~>6.1'
|
||||||
# Reduces boot times through caching; required in config/boot.rb
|
# Reduces boot times through caching; required in config/boot.rb
|
||||||
gem 'bootsnap', require: false
|
gem 'bootsnap', require: false
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ gem 'activerecord-import'
|
||||||
gem 'dotenv-rails'
|
gem 'dotenv-rails'
|
||||||
gem 'foreman'
|
gem 'foreman'
|
||||||
gem 'puma'
|
gem 'puma'
|
||||||
gem 'webpacker', '~> 5.4', '>= 5.4.3'
|
gem 'webpacker', '~> 5.x'
|
||||||
# metrics on heroku
|
# metrics on heroku
|
||||||
gem 'barnes'
|
gem 'barnes'
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ gem 'ddtrace'
|
||||||
gem 'elastic-apm'
|
gem 'elastic-apm'
|
||||||
gem 'newrelic_rpm'
|
gem 'newrelic_rpm'
|
||||||
gem 'scout_apm'
|
gem 'scout_apm'
|
||||||
gem 'sentry-rails', '~> 5.3', '>= 5.3.1'
|
gem 'sentry-rails', '~> 5.3'
|
||||||
gem 'sentry-ruby', '~> 5.3'
|
gem 'sentry-ruby', '~> 5.3'
|
||||||
gem 'sentry-sidekiq', '~> 5.3'
|
gem 'sentry-sidekiq', '~> 5.3'
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ group :development, :test do
|
||||||
gem 'mock_redis'
|
gem 'mock_redis'
|
||||||
gem 'pry-rails'
|
gem 'pry-rails'
|
||||||
gem 'rspec_junit_formatter'
|
gem 'rspec_junit_formatter'
|
||||||
gem 'rspec-rails', '~> 5.0.3'
|
gem 'rspec-rails', '~> 5.0.0'
|
||||||
gem 'rubocop', require: false
|
gem 'rubocop', require: false
|
||||||
gem 'rubocop-performance', require: false
|
gem 'rubocop-performance', require: false
|
||||||
gem 'rubocop-rails', require: false
|
gem 'rubocop-rails', require: false
|
||||||
|
|
24
Gemfile.lock
24
Gemfile.lock
|
@ -398,7 +398,7 @@ GEM
|
||||||
llhttp-ffi (0.4.0)
|
llhttp-ffi (0.4.0)
|
||||||
ffi-compiler (~> 1.0)
|
ffi-compiler (~> 1.0)
|
||||||
rake (~> 13.0)
|
rake (~> 13.0)
|
||||||
loofah (2.19.1)
|
loofah (2.18.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.5.9)
|
nokogiri (>= 1.5.9)
|
||||||
mail (2.7.1)
|
mail (2.7.1)
|
||||||
|
@ -427,14 +427,14 @@ GEM
|
||||||
netrc (0.11.0)
|
netrc (0.11.0)
|
||||||
newrelic_rpm (8.9.0)
|
newrelic_rpm (8.9.0)
|
||||||
nio4r (2.5.8)
|
nio4r (2.5.8)
|
||||||
nokogiri (1.13.10)
|
nokogiri (1.13.9)
|
||||||
mini_portile2 (~> 2.8.0)
|
mini_portile2 (~> 2.8.0)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogiri (1.13.10-arm64-darwin)
|
nokogiri (1.13.9-arm64-darwin)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogiri (1.13.10-x86_64-darwin)
|
nokogiri (1.13.9-x86_64-darwin)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogiri (1.13.10-x86_64-linux)
|
nokogiri (1.13.9-x86_64-linux)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
oauth (0.5.10)
|
oauth (0.5.10)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
|
@ -459,7 +459,7 @@ GEM
|
||||||
pundit (2.2.0)
|
pundit (2.2.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
raabro (1.4.0)
|
raabro (1.4.0)
|
||||||
racc (1.6.1)
|
racc (1.6.0)
|
||||||
rack (2.2.4)
|
rack (2.2.4)
|
||||||
rack-attack (6.6.1)
|
rack-attack (6.6.1)
|
||||||
rack (>= 1.0, < 3)
|
rack (>= 1.0, < 3)
|
||||||
|
@ -488,8 +488,8 @@ GEM
|
||||||
rails-dom-testing (2.0.3)
|
rails-dom-testing (2.0.3)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.4.4)
|
rails-html-sanitizer (1.4.3)
|
||||||
loofah (~> 2.19, >= 2.19.1)
|
loofah (~> 2.3)
|
||||||
railties (6.1.6.1)
|
railties (6.1.6.1)
|
||||||
actionpack (= 6.1.6.1)
|
actionpack (= 6.1.6.1)
|
||||||
activesupport (= 6.1.6.1)
|
activesupport (= 6.1.6.1)
|
||||||
|
@ -765,12 +765,12 @@ DEPENDENCIES
|
||||||
rack-attack
|
rack-attack
|
||||||
rack-cors
|
rack-cors
|
||||||
rack-timeout
|
rack-timeout
|
||||||
rails (~> 6.1, >= 6.1.6.1)
|
rails (~> 6.1)
|
||||||
redis
|
redis
|
||||||
redis-namespace
|
redis-namespace
|
||||||
responders
|
responders
|
||||||
rest-client
|
rest-client
|
||||||
rspec-rails (~> 5.0.3)
|
rspec-rails (~> 5.0.0)
|
||||||
rspec_junit_formatter
|
rspec_junit_formatter
|
||||||
rubocop
|
rubocop
|
||||||
rubocop-performance
|
rubocop-performance
|
||||||
|
@ -778,7 +778,7 @@ DEPENDENCIES
|
||||||
rubocop-rspec
|
rubocop-rspec
|
||||||
scout_apm
|
scout_apm
|
||||||
seed_dump
|
seed_dump
|
||||||
sentry-rails (~> 5.3, >= 5.3.1)
|
sentry-rails (~> 5.3)
|
||||||
sentry-ruby (~> 5.3)
|
sentry-ruby (~> 5.3)
|
||||||
sentry-sidekiq (~> 5.3)
|
sentry-sidekiq (~> 5.3)
|
||||||
shoulda-matchers
|
shoulda-matchers
|
||||||
|
@ -799,7 +799,7 @@ DEPENDENCIES
|
||||||
valid_email2
|
valid_email2
|
||||||
web-console
|
web-console
|
||||||
webmock
|
webmock
|
||||||
webpacker (~> 5.4, >= 5.4.3)
|
webpacker (~> 5.x)
|
||||||
webpush
|
webpush
|
||||||
wisper (= 2.0.0)
|
wisper (= 2.0.0)
|
||||||
working_hours
|
working_hours
|
||||||
|
|
14
app.json
14
app.json
|
@ -41,24 +41,16 @@
|
||||||
"formation": {
|
"formation": {
|
||||||
"web": {
|
"web": {
|
||||||
"quantity": 1,
|
"quantity": 1,
|
||||||
"size": "basic"
|
"size": "FREE"
|
||||||
},
|
},
|
||||||
"worker": {
|
"worker": {
|
||||||
"quantity": 1,
|
"quantity": 1,
|
||||||
"size": "basic"
|
"size": "FREE"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"stack": "heroku-20",
|
"stack": "heroku-20",
|
||||||
"image": "heroku/ruby",
|
"image": "heroku/ruby",
|
||||||
"addons": [
|
"addons": [ "heroku-redis", "heroku-postgresql"],
|
||||||
{
|
|
||||||
"plan": "heroku-redis:mini"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"plan": "heroku-postgresql:mini"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"stack": "heroku-20",
|
|
||||||
"buildpacks": [
|
"buildpacks": [
|
||||||
{
|
{
|
||||||
"url": "heroku/ruby"
|
"url": "heroku/ruby"
|
||||||
|
|
|
@ -46,7 +46,6 @@ class Messages::Messenger::MessageBuilder
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_attachment_file_type(attachment)
|
def update_attachment_file_type(attachment)
|
||||||
return if @message.reload.attachments.blank?
|
|
||||||
return unless attachment.file_type == 'share' || attachment.file_type == 'story_mention'
|
return unless attachment.file_type == 'share' || attachment.file_type == 'story_mention'
|
||||||
|
|
||||||
attachment.file_type = file_type(attachment.file&.content_type)
|
attachment.file_type = file_type(attachment.file&.content_type)
|
||||||
|
@ -63,7 +62,6 @@ class Messages::Messenger::MessageBuilder
|
||||||
story_sender = result['from']['username']
|
story_sender = result['from']['username']
|
||||||
message.content_attributes[:story_sender] = story_sender
|
message.content_attributes[:story_sender] = story_sender
|
||||||
message.content_attributes[:story_id] = story_id
|
message.content_attributes[:story_id] = story_id
|
||||||
message.content_attributes[:image_type] = 'story_mention'
|
|
||||||
message.content = I18n.t('conversations.messages.instagram_story_content', story_sender: story_sender)
|
message.content = I18n.t('conversations.messages.instagram_story_content', story_sender: story_sender)
|
||||||
message.save!
|
message.save!
|
||||||
end
|
end
|
||||||
|
@ -76,7 +74,6 @@ class Messages::Messenger::MessageBuilder
|
||||||
raise
|
raise
|
||||||
rescue Koala::Facebook::ClientError => e
|
rescue Koala::Facebook::ClientError => e
|
||||||
# The exception occurs when we are trying fetch the deleted story or blocked story.
|
# The exception occurs when we are trying fetch the deleted story or blocked story.
|
||||||
@message.attachments.destroy_all
|
|
||||||
@message.update(content: I18n.t('conversations.messages.instagram_deleted_story_content'))
|
@message.update(content: I18n.t('conversations.messages.instagram_deleted_story_content'))
|
||||||
Rails.logger.error e
|
Rails.logger.error e
|
||||||
{}
|
{}
|
||||||
|
|
|
@ -21,7 +21,6 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@portal = Current.account.portals.build(portal_params)
|
@portal = Current.account.portals.build(portal_params)
|
||||||
@portal.custom_domain = parsed_custom_domain
|
|
||||||
@portal.save!
|
@portal.save!
|
||||||
process_attached_logo
|
process_attached_logo
|
||||||
end
|
end
|
||||||
|
@ -29,7 +28,6 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
|
||||||
def update
|
def update
|
||||||
ActiveRecord::Base.transaction do
|
ActiveRecord::Base.transaction do
|
||||||
@portal.update!(portal_params) if params[:portal].present?
|
@portal.update!(portal_params) if params[:portal].present?
|
||||||
# @portal.custom_domain = parsed_custom_domain
|
|
||||||
process_attached_logo
|
process_attached_logo
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
Rails.logger.error e
|
Rails.logger.error e
|
||||||
|
@ -75,9 +73,4 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
|
||||||
def set_current_page
|
def set_current_page
|
||||||
@current_page = params[:page] || 1
|
@current_page = params[:page] || 1
|
||||||
end
|
end
|
||||||
|
|
||||||
def parsed_custom_domain
|
|
||||||
domain = URI.parse(@portal.custom_domain)
|
|
||||||
domain.is_a?(URI::HTTP) ? domain.host : @portal.custom_domain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,10 +18,6 @@ class Api::V1::ProfilesController < Api::BaseController
|
||||||
head :ok
|
head :ok
|
||||||
end
|
end
|
||||||
|
|
||||||
def auto_offline
|
|
||||||
@user.account_users.find_by!(account_id: auto_offline_params[:account_id]).update!(auto_offline: auto_offline_params[:auto_offline] || false)
|
|
||||||
end
|
|
||||||
|
|
||||||
def availability
|
def availability
|
||||||
@user.account_users.find_by!(account_id: availability_params[:account_id]).update!(availability: availability_params[:availability])
|
@user.account_users.find_by!(account_id: availability_params[:account_id]).update!(availability: availability_params[:availability])
|
||||||
end
|
end
|
||||||
|
@ -41,10 +37,6 @@ class Api::V1::ProfilesController < Api::BaseController
|
||||||
params.require(:profile).permit(:account_id, :availability)
|
params.require(:profile).permit(:account_id, :availability)
|
||||||
end
|
end
|
||||||
|
|
||||||
def auto_offline_params
|
|
||||||
params.require(:profile).permit(:account_id, :auto_offline)
|
|
||||||
end
|
|
||||||
|
|
||||||
def profile_params
|
def profile_params
|
||||||
params.require(:profile).permit(
|
params.require(:profile).permit(
|
||||||
:email,
|
:email,
|
||||||
|
|
|
@ -24,6 +24,7 @@ class DashboardController < ActionController::Base
|
||||||
'API_CHANNEL_NAME',
|
'API_CHANNEL_NAME',
|
||||||
'API_CHANNEL_THUMBNAIL',
|
'API_CHANNEL_THUMBNAIL',
|
||||||
'ANALYTICS_TOKEN',
|
'ANALYTICS_TOKEN',
|
||||||
|
'ANALYTICS_HOST',
|
||||||
'DIRECT_UPLOADS_ENABLED',
|
'DIRECT_UPLOADS_ENABLED',
|
||||||
'HCAPTCHA_SITE_KEY',
|
'HCAPTCHA_SITE_KEY',
|
||||||
'LOGOUT_REDIRECT_LINK',
|
'LOGOUT_REDIRECT_LINK',
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
class Platform::Api::V1::AccountsController < PlatformController
|
class Platform::Api::V1::AccountsController < PlatformController
|
||||||
def create
|
def create
|
||||||
@resource = Account.create!(account_params)
|
@resource = Account.new(account_params)
|
||||||
update_resource_features
|
update_resource_features
|
||||||
|
@resource.save!
|
||||||
@platform_app.platform_app_permissibles.find_or_create_by(permissible: @resource)
|
@platform_app.platform_app_permissibles.find_or_create_by(permissible: @resource)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -144,12 +144,6 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
updateAutoOffline(accountId, autoOffline = false) {
|
|
||||||
return axios.post(endPoints('autoOffline').url, {
|
|
||||||
profile: { account_id: accountId, auto_offline: autoOffline },
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
deleteAvatar() {
|
deleteAvatar() {
|
||||||
return axios.delete(endPoints('deleteAvatar').url);
|
return axios.delete(endPoints('deleteAvatar').url);
|
||||||
},
|
},
|
||||||
|
|
|
@ -16,9 +16,6 @@ const endPoints = {
|
||||||
availabilityUpdate: {
|
availabilityUpdate: {
|
||||||
url: '/api/v1/profile/availability',
|
url: '/api/v1/profile/availability',
|
||||||
},
|
},
|
||||||
autoOffline: {
|
|
||||||
url: '/api/v1/profile/auto_offline',
|
|
||||||
},
|
|
||||||
logout: {
|
logout: {
|
||||||
url: 'auth/sign_out',
|
url: 'auth/sign_out',
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
/* global axios */
|
|
||||||
import wootConstants from 'dashboard/constants';
|
|
||||||
|
|
||||||
export const getTestimonialContent = () => {
|
|
||||||
return axios.get(wootConstants.TESTIMONIAL_URL);
|
|
||||||
};
|
|
|
@ -74,8 +74,8 @@ Tahoma,
|
||||||
Arial,
|
Arial,
|
||||||
sans-serif;
|
sans-serif;
|
||||||
$body-antialiased: true;
|
$body-antialiased: true;
|
||||||
$global-margin: $space-small;
|
$global-margin: $space-one;
|
||||||
$global-padding: $space-micro;
|
$global-padding: $space-one;
|
||||||
$global-weight-normal: normal;
|
$global-weight-normal: normal;
|
||||||
$global-weight-bold: bold;
|
$global-weight-bold: bold;
|
||||||
$global-radius: 0;
|
$global-radius: 0;
|
||||||
|
|
|
@ -20,24 +20,6 @@
|
||||||
|
|
||||||
@include foundation-everything($flex: true);
|
@include foundation-everything($flex: true);
|
||||||
|
|
||||||
@include foundation-prototype-text-utilities;
|
|
||||||
@include foundation-prototype-text-transformation;
|
|
||||||
@include foundation-prototype-text-decoration;
|
|
||||||
@include foundation-prototype-font-styling;
|
|
||||||
@include foundation-prototype-list-style-type;
|
|
||||||
@include foundation-prototype-rounded;
|
|
||||||
@include foundation-prototype-bordered;
|
|
||||||
@include foundation-prototype-shadow;
|
|
||||||
@include foundation-prototype-separator;
|
|
||||||
@include foundation-prototype-overflow;
|
|
||||||
@include foundation-prototype-display;
|
|
||||||
@include foundation-prototype-position;
|
|
||||||
@include foundation-prototype-border-box;
|
|
||||||
@include foundation-prototype-border-none;
|
|
||||||
@include foundation-prototype-sizing;
|
|
||||||
@include foundation-prototype-spacing;
|
|
||||||
|
|
||||||
|
|
||||||
@import 'typography';
|
@import 'typography';
|
||||||
@import 'layout';
|
@import 'layout';
|
||||||
@import 'animations';
|
@import 'animations';
|
||||||
|
|
|
@ -155,20 +155,12 @@ $default-button-height: 4.0rem;
|
||||||
// Sizes
|
// Sizes
|
||||||
&.tiny {
|
&.tiny {
|
||||||
height: var(--space-medium);
|
height: var(--space-medium);
|
||||||
|
|
||||||
.icon+.button__content {
|
|
||||||
padding-left: var(--space-micro);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.small {
|
&.small {
|
||||||
height: var(--space-large);
|
height: var(--space-large);
|
||||||
padding-bottom: var(--space-smaller);
|
padding-bottom: var(--space-smaller);
|
||||||
padding-top: var(--space-smaller);
|
padding-top: var(--space-smaller);
|
||||||
|
|
||||||
.icon+.button__content {
|
|
||||||
padding-left: var(--space-smaller);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.large {
|
&.large {
|
||||||
|
@ -198,10 +190,6 @@ $default-button-height: 4.0rem;
|
||||||
height: auto;
|
height: auto;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
&:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
.auth-wrap {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Outside login wrapper
|
// Outside login wrapper
|
||||||
|
// Super admin login page
|
||||||
.login {
|
.login {
|
||||||
@include full-height;
|
@include full-height;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
@ -64,3 +61,39 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dashboard view
|
||||||
|
.auth-screen--view {
|
||||||
|
display: flex;
|
||||||
|
height: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-divided-view {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form--wrap {
|
||||||
|
padding: 0 var(--space-mega);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-screen--footer {
|
||||||
|
font-size: var(--font-size-small);
|
||||||
|
font-weight: var(--font-weight-medium);
|
||||||
|
margin: var(--space-two) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
.flex-divided-view {
|
||||||
|
display: flex;
|
||||||
|
flex: 0.9;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form--wrap {
|
||||||
|
padding: 0 var(--space-two);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -59,8 +59,12 @@
|
||||||
|
|
||||||
.hamburger--menu {
|
.hamburger--menu {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: block;
|
display: none;
|
||||||
margin-right: $space-normal;
|
margin-right: $space-normal;
|
||||||
|
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.header--icon {
|
.header--icon {
|
||||||
|
|
|
@ -187,10 +187,6 @@ import {
|
||||||
hasPressedAltAndKKey,
|
hasPressedAltAndKKey,
|
||||||
} from 'shared/helpers/KeyboardHelpers';
|
} from 'shared/helpers/KeyboardHelpers';
|
||||||
import { conversationListPageURL } from '../helper/URLHelper';
|
import { conversationListPageURL } from '../helper/URLHelper';
|
||||||
import {
|
|
||||||
isOnMentionsView,
|
|
||||||
isOnUnattendedView,
|
|
||||||
} from '../store/modules/conversations/helpers/actionHelpers';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
@ -345,9 +341,6 @@ export default {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
pageTitle() {
|
pageTitle() {
|
||||||
if (this.hasAppliedFilters) {
|
|
||||||
return this.$t('CHAT_LIST.TAB_HEADING');
|
|
||||||
}
|
|
||||||
if (this.inbox.name) {
|
if (this.inbox.name) {
|
||||||
return this.inbox.name;
|
return this.inbox.name;
|
||||||
}
|
}
|
||||||
|
@ -442,6 +435,9 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onApplyFilter(payload) {
|
onApplyFilter(payload) {
|
||||||
|
if (this.$route.name !== 'home') {
|
||||||
|
this.$router.push({ name: 'home' });
|
||||||
|
}
|
||||||
this.resetBulkActions();
|
this.resetBulkActions();
|
||||||
this.foldersQuery = filterQueryGenerator(payload);
|
this.foldersQuery = filterQueryGenerator(payload);
|
||||||
this.$store.dispatch('conversationPage/reset');
|
this.$store.dispatch('conversationPage/reset');
|
||||||
|
@ -653,16 +649,10 @@ export default {
|
||||||
params: { accountId, inbox_id: inboxId, label, teamId },
|
params: { accountId, inbox_id: inboxId, label, teamId },
|
||||||
name,
|
name,
|
||||||
} = this.$route;
|
} = this.$route;
|
||||||
let conversationType = '';
|
|
||||||
if (isOnMentionsView({ route: { name } })) {
|
|
||||||
conversationType = 'mention';
|
|
||||||
} else if (isOnUnattendedView({ route: { name } })) {
|
|
||||||
conversationType = 'unattended';
|
|
||||||
}
|
|
||||||
this.$router.push(
|
this.$router.push(
|
||||||
conversationListPageURL({
|
conversationListPageURL({
|
||||||
accountId,
|
accountId,
|
||||||
conversationType: conversationType,
|
conversationType: name === 'conversation_mentions' ? 'mention' : '',
|
||||||
customViewId: this.foldersId,
|
customViewId: this.foldersId,
|
||||||
inboxId,
|
inboxId,
|
||||||
label,
|
label,
|
||||||
|
|
|
@ -1,12 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<woot-button
|
<button @click="onMenuItemClick">
|
||||||
size="small"
|
<fluent-icon class="hamburger--menu" icon="list" />
|
||||||
variant="clear"
|
</button>
|
||||||
color-scheme="secondary"
|
|
||||||
icon="list"
|
|
||||||
class="toggle-sidebar"
|
|
||||||
@click="onMenuItemClick"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -21,8 +16,13 @@ export default {
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.toggle-sidebar {
|
.hamburger--menu {
|
||||||
margin-right: var(--space-small);
|
cursor: pointer;
|
||||||
margin-left: var(--space-minus-small);
|
display: none;
|
||||||
|
margin-right: var(--space-normal);
|
||||||
|
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -18,35 +18,12 @@
|
||||||
</woot-button>
|
</woot-button>
|
||||||
</woot-dropdown-item>
|
</woot-dropdown-item>
|
||||||
<woot-dropdown-divider />
|
<woot-dropdown-divider />
|
||||||
<woot-dropdown-item class="auto-offline--toggle">
|
|
||||||
<div class="info-wrap">
|
|
||||||
<fluent-icon
|
|
||||||
v-tooltip.right-start="$t('SIDEBAR.SET_AUTO_OFFLINE.INFO_TEXT')"
|
|
||||||
icon="info"
|
|
||||||
size="14"
|
|
||||||
class="info-icon"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<span class="auto-offline--text">
|
|
||||||
{{ $t('SIDEBAR.SET_AUTO_OFFLINE.TEXT') }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<woot-switch
|
|
||||||
size="small"
|
|
||||||
class="auto-offline--switch"
|
|
||||||
:value="currentUserAutoOffline"
|
|
||||||
@input="updateAutoOffline"
|
|
||||||
/>
|
|
||||||
</woot-dropdown-item>
|
|
||||||
<woot-dropdown-divider />
|
|
||||||
</woot-dropdown-menu>
|
</woot-dropdown-menu>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import { mixin as clickaway } from 'vue-clickaway';
|
import { mixin as clickaway } from 'vue-clickaway';
|
||||||
import alertMixin from 'shared/mixins/alertMixin';
|
|
||||||
import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem';
|
import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem';
|
||||||
import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu';
|
import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu';
|
||||||
import WootDropdownHeader from 'shared/components/ui/dropdown/DropdownHeader';
|
import WootDropdownHeader from 'shared/components/ui/dropdown/DropdownHeader';
|
||||||
|
@ -64,7 +41,7 @@ export default {
|
||||||
AvailabilityStatusBadge,
|
AvailabilityStatusBadge,
|
||||||
},
|
},
|
||||||
|
|
||||||
mixins: [clickaway, alertMixin],
|
mixins: [clickaway],
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -77,7 +54,6 @@ export default {
|
||||||
...mapGetters({
|
...mapGetters({
|
||||||
getCurrentUserAvailability: 'getCurrentUserAvailability',
|
getCurrentUserAvailability: 'getCurrentUserAvailability',
|
||||||
currentAccountId: 'getCurrentAccountId',
|
currentAccountId: 'getCurrentAccountId',
|
||||||
currentUserAutoOffline: 'getCurrentUserAutoOffline',
|
|
||||||
}),
|
}),
|
||||||
availabilityDisplayLabel() {
|
availabilityDisplayLabel() {
|
||||||
const availabilityIndex = AVAILABILITY_STATUS_KEYS.findIndex(
|
const availabilityIndex = AVAILABILITY_STATUS_KEYS.findIndex(
|
||||||
|
@ -109,30 +85,21 @@ export default {
|
||||||
closeStatusMenu() {
|
closeStatusMenu() {
|
||||||
this.isStatusMenuOpened = false;
|
this.isStatusMenuOpened = false;
|
||||||
},
|
},
|
||||||
updateAutoOffline(autoOffline) {
|
|
||||||
this.$store.dispatch('updateAutoOffline', {
|
|
||||||
accountId: this.currentAccountId,
|
|
||||||
autoOffline,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
changeAvailabilityStatus(availability) {
|
changeAvailabilityStatus(availability) {
|
||||||
|
const accountId = this.currentAccountId;
|
||||||
if (this.isUpdating) {
|
if (this.isUpdating) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isUpdating = true;
|
this.isUpdating = true;
|
||||||
try {
|
this.$store
|
||||||
this.$store.dispatch('updateAvailability', {
|
.dispatch('updateAvailability', {
|
||||||
availability,
|
availability: availability,
|
||||||
account_id: this.currentAccountId,
|
account_id: accountId,
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.isUpdating = false;
|
||||||
});
|
});
|
||||||
} catch (error) {
|
|
||||||
this.showAlert(
|
|
||||||
this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.SET_AVAILABILITY_ERROR')
|
|
||||||
);
|
|
||||||
} finally {
|
|
||||||
this.isUpdating = false;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -176,32 +143,4 @@ export default {
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.auto-offline--toggle {
|
|
||||||
align-items: center;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
padding: var(--space-smaller) 0 var(--space-smaller) var(--space-small);
|
|
||||||
margin: 0;
|
|
||||||
|
|
||||||
.info-wrap {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-icon {
|
|
||||||
margin-top: -1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.auto-offline--switch {
|
|
||||||
margin: -1px var(--space-micro) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.auto-offline--text {
|
|
||||||
margin: 0 var(--space-smaller);
|
|
||||||
font-size: var(--font-size-mini);
|
|
||||||
font-weight: var(--font-weight-medium);
|
|
||||||
color: var(--s-700);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import { FEATURE_FLAGS } from '../../../../featureFlags';
|
|
||||||
import { frontendURL } from '../../../../helper/URLHelper';
|
import { frontendURL } from '../../../../helper/URLHelper';
|
||||||
|
|
||||||
const primaryMenuItems = accountId => [
|
const primaryMenuItems = accountId => [
|
||||||
|
@ -14,7 +13,6 @@ const primaryMenuItems = accountId => [
|
||||||
icon: 'book-contacts',
|
icon: 'book-contacts',
|
||||||
key: 'contacts',
|
key: 'contacts',
|
||||||
label: 'CONTACTS',
|
label: 'CONTACTS',
|
||||||
featureFlag: FEATURE_FLAGS.CRM,
|
|
||||||
toState: frontendURL(`accounts/${accountId}/contacts`),
|
toState: frontendURL(`accounts/${accountId}/contacts`),
|
||||||
toStateName: 'contacts_dashboard',
|
toStateName: 'contacts_dashboard',
|
||||||
roles: ['administrator', 'agent'],
|
roles: ['administrator', 'agent'],
|
||||||
|
@ -23,7 +21,6 @@ const primaryMenuItems = accountId => [
|
||||||
icon: 'arrow-trending-lines',
|
icon: 'arrow-trending-lines',
|
||||||
key: 'reports',
|
key: 'reports',
|
||||||
label: 'REPORTS',
|
label: 'REPORTS',
|
||||||
featureFlag: FEATURE_FLAGS.REPORTS,
|
|
||||||
toState: frontendURL(`accounts/${accountId}/reports`),
|
toState: frontendURL(`accounts/${accountId}/reports`),
|
||||||
toStateName: 'settings_account_reports',
|
toStateName: 'settings_account_reports',
|
||||||
roles: ['administrator'],
|
roles: ['administrator'],
|
||||||
|
@ -32,7 +29,6 @@ const primaryMenuItems = accountId => [
|
||||||
icon: 'megaphone',
|
icon: 'megaphone',
|
||||||
key: 'campaigns',
|
key: 'campaigns',
|
||||||
label: 'CAMPAIGNS',
|
label: 'CAMPAIGNS',
|
||||||
featureFlag: FEATURE_FLAGS.CAMPAIGNS,
|
|
||||||
toState: frontendURL(`accounts/${accountId}/campaigns`),
|
toState: frontendURL(`accounts/${accountId}/campaigns`),
|
||||||
toStateName: 'settings_account_campaigns',
|
toStateName: 'settings_account_campaigns',
|
||||||
roles: ['administrator'],
|
roles: ['administrator'],
|
||||||
|
@ -41,7 +37,7 @@ const primaryMenuItems = accountId => [
|
||||||
icon: 'library',
|
icon: 'library',
|
||||||
key: 'helpcenter',
|
key: 'helpcenter',
|
||||||
label: 'HELP_CENTER.TITLE',
|
label: 'HELP_CENTER.TITLE',
|
||||||
featureFlag: FEATURE_FLAGS.HELP_CENTER,
|
featureFlag: 'help_center',
|
||||||
toState: frontendURL(`accounts/${accountId}/portals`),
|
toState: frontendURL(`accounts/${accountId}/portals`),
|
||||||
toStateName: 'default_portal_articles',
|
toStateName: 'default_portal_articles',
|
||||||
roles: ['administrator'],
|
roles: ['administrator'],
|
||||||
|
|
|
@ -102,7 +102,6 @@ const settings = accountId => ({
|
||||||
label: 'AGENT_BOTS',
|
label: 'AGENT_BOTS',
|
||||||
beta: true,
|
beta: true,
|
||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
globalConfigFlag: 'csmlEditorHost',
|
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/agent-bots`),
|
toState: frontendURL(`accounts/${accountId}/settings/agent-bots`),
|
||||||
toStateName: 'agent_bots',
|
toStateName: 'agent_bots',
|
||||||
featureFlag: FEATURE_FLAGS.AGENT_BOTS,
|
featureFlag: FEATURE_FLAGS.AGENT_BOTS,
|
||||||
|
|
|
@ -61,24 +61,6 @@
|
||||||
</a>
|
</a>
|
||||||
</router-link>
|
</router-link>
|
||||||
</woot-dropdown-item>
|
</woot-dropdown-item>
|
||||||
<woot-dropdown-item v-if="currentUser.type === 'SuperAdmin'">
|
|
||||||
<a
|
|
||||||
href="/super_admin"
|
|
||||||
class="button small clear secondary"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener nofollow noreferrer"
|
|
||||||
@click="$emit('close')"
|
|
||||||
>
|
|
||||||
<fluent-icon
|
|
||||||
icon="content-settings"
|
|
||||||
size="14"
|
|
||||||
class="icon icon--font"
|
|
||||||
/>
|
|
||||||
<span class="button__content">
|
|
||||||
{{ $t('SIDEBAR_ITEMS.SUPER_ADMIN_CONSOLE') }}
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</woot-dropdown-item>
|
|
||||||
<woot-dropdown-item>
|
<woot-dropdown-item>
|
||||||
<woot-button
|
<woot-button
|
||||||
variant="clear"
|
variant="clear"
|
||||||
|
@ -153,7 +135,7 @@ export default {
|
||||||
.dropdown-pane {
|
.dropdown-pane {
|
||||||
left: var(--space-slab);
|
left: var(--space-slab);
|
||||||
bottom: var(--space-larger);
|
bottom: var(--space-larger);
|
||||||
min-width: 22rem;
|
min-width: 16.8rem;
|
||||||
z-index: var(--z-index-low);
|
z-index: var(--z-index-much-higher);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -261,7 +261,14 @@ export default {
|
||||||
width: 20rem;
|
width: 20rem;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
position: unset;
|
|
||||||
|
@include breakpoint(xlarge down) {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include breakpoint(xlarge up) {
|
||||||
|
position: unset;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
|
|
|
@ -112,7 +112,6 @@ $label-badge-size: var(--space-slab);
|
||||||
padding: var(--space-smaller) var(--space-smaller);
|
padding: var(--space-smaller) var(--space-smaller);
|
||||||
margin: var(--space-smaller) 0;
|
margin: var(--space-smaller) 0;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
line-height: 1.2;
|
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--s-25);
|
background: var(--s-25);
|
||||||
|
@ -136,6 +135,8 @@ $label-badge-size: var(--space-slab);
|
||||||
|
|
||||||
.menu-label {
|
.menu-label {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inbox-icon {
|
.inbox-icon {
|
||||||
|
|
|
@ -87,10 +87,6 @@ import {
|
||||||
} from 'dashboard/helper/inbox';
|
} from 'dashboard/helper/inbox';
|
||||||
|
|
||||||
import SecondaryChildNavItem from './SecondaryChildNavItem';
|
import SecondaryChildNavItem from './SecondaryChildNavItem';
|
||||||
import {
|
|
||||||
isOnMentionsView,
|
|
||||||
isOnUnattendedView,
|
|
||||||
} from '../../../store/modules/conversations/helpers/actionHelpers';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { SecondaryChildNavItem },
|
components: { SecondaryChildNavItem },
|
||||||
|
@ -106,48 +102,32 @@ export default {
|
||||||
activeInbox: 'getSelectedInbox',
|
activeInbox: 'getSelectedInbox',
|
||||||
accountId: 'getCurrentAccountId',
|
accountId: 'getCurrentAccountId',
|
||||||
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
||||||
globalConfig: 'globalConfig/get',
|
|
||||||
}),
|
}),
|
||||||
hasSubMenu() {
|
hasSubMenu() {
|
||||||
return !!this.menuItem.children;
|
return !!this.menuItem.children;
|
||||||
},
|
},
|
||||||
isMenuItemVisible() {
|
isMenuItemVisible() {
|
||||||
if (this.menuItem.globalConfigFlag) {
|
if (!this.menuItem.featureFlag) {
|
||||||
return !!this.globalConfig[this.menuItem.globalConfigFlag];
|
return true;
|
||||||
}
|
}
|
||||||
if (this.menuItem.featureFlag) {
|
return this.isFeatureEnabledonAccount(
|
||||||
return this.isFeatureEnabledonAccount(
|
this.accountId,
|
||||||
this.accountId,
|
this.menuItem.featureFlag
|
||||||
this.menuItem.featureFlag
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
},
|
||||||
isAllConversations() {
|
isInboxConversation() {
|
||||||
return (
|
return (
|
||||||
this.$store.state.route.name === 'inbox_conversation' &&
|
this.$store.state.route.name === 'inbox_conversation' &&
|
||||||
this.menuItem.toStateName === 'home'
|
this.menuItem.toStateName === 'home'
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
isMentions() {
|
|
||||||
return (
|
|
||||||
isOnMentionsView({ route: this.$route }) &&
|
|
||||||
this.menuItem.toStateName === 'conversation_mentions'
|
|
||||||
);
|
|
||||||
},
|
|
||||||
isUnattended() {
|
|
||||||
return (
|
|
||||||
isOnUnattendedView({ route: this.$route }) &&
|
|
||||||
this.menuItem.toStateName === 'conversation_unattended'
|
|
||||||
);
|
|
||||||
},
|
|
||||||
isTeamsSettings() {
|
isTeamsSettings() {
|
||||||
return (
|
return (
|
||||||
this.$store.state.route.name === 'settings_teams_edit' &&
|
this.$store.state.route.name === 'settings_teams_edit' &&
|
||||||
this.menuItem.toStateName === 'settings_teams_list'
|
this.menuItem.toStateName === 'settings_teams_list'
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
isInboxSettings() {
|
isInboxsSettings() {
|
||||||
return (
|
return (
|
||||||
this.$store.state.route.name === 'settings_inbox_show' &&
|
this.$store.state.route.name === 'settings_inbox_show' &&
|
||||||
this.menuItem.toStateName === 'settings_inbox_list'
|
this.menuItem.toStateName === 'settings_inbox_list'
|
||||||
|
@ -170,20 +150,14 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
computedClass() {
|
computedClass() {
|
||||||
// If active inbox is present, do not highlight conversations
|
// If active Inbox is present
|
||||||
|
// donot highlight conversations
|
||||||
if (this.activeInbox) return ' ';
|
if (this.activeInbox) return ' ';
|
||||||
if (
|
|
||||||
this.isAllConversations ||
|
|
||||||
this.isMentions ||
|
|
||||||
this.isUnattended ||
|
|
||||||
this.isCurrentRoute
|
|
||||||
) {
|
|
||||||
return 'is-active';
|
|
||||||
}
|
|
||||||
if (this.hasSubMenu) {
|
if (this.hasSubMenu) {
|
||||||
if (
|
if (
|
||||||
|
this.isInboxConversation ||
|
||||||
this.isTeamsSettings ||
|
this.isTeamsSettings ||
|
||||||
this.isInboxSettings ||
|
this.isInboxsSettings ||
|
||||||
this.isIntegrationsSettings ||
|
this.isIntegrationsSettings ||
|
||||||
this.isApplicationsSettings
|
this.isApplicationsSettings
|
||||||
) {
|
) {
|
||||||
|
@ -192,6 +166,10 @@ export default {
|
||||||
return ' ';
|
return ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.isCurrentRoute) {
|
||||||
|
return 'is-active';
|
||||||
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`SidemenuIcon matches snapshot 1`] = `
|
exports[`SidemenuIcon matches snapshot 1`] = `
|
||||||
<woot-button
|
<button>
|
||||||
class="toggle-sidebar"
|
<fluent-icon
|
||||||
color-scheme="secondary"
|
class="hamburger--menu"
|
||||||
icon="list"
|
icon="list"
|
||||||
size="small"
|
/>
|
||||||
variant="clear"
|
</button>
|
||||||
/>
|
|
||||||
`;
|
`;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<fluent-icon :icon="icon" size="12" class="label--icon" />
|
<fluent-icon :icon="icon" size="12" class="label--icon" />
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
v-if="variant === 'smooth' && title && !icon"
|
v-if="variant === 'smooth'"
|
||||||
:style="{ background: color }"
|
:style="{ background: color }"
|
||||||
class="label-color-dot"
|
class="label-color-dot"
|
||||||
/>
|
/>
|
||||||
|
@ -117,16 +117,14 @@ export default {
|
||||||
height: var(--space-medium);
|
height: var(--space-medium);
|
||||||
|
|
||||||
&.small {
|
&.small {
|
||||||
font-size: var(--font-size-mini);
|
font-size: var(--font-size-micro);
|
||||||
padding: var(--space-micro) var(--space-smaller);
|
padding: var(--space-micro) var(--space-smaller);
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
height: var(--space-two);
|
letter-spacing: 0.15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label--icon {
|
.label--icon {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
|
||||||
.label-color-dot {
|
|
||||||
margin-right: var(--space-smaller);
|
margin-right: var(--space-smaller);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,8 +199,8 @@ export default {
|
||||||
|
|
||||||
&.smooth {
|
&.smooth {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
border: 1px solid var(--s-100);
|
border: 1px solid var(--s-75);
|
||||||
color: var(--s-700);
|
color: var(--s-800);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,22 +221,14 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-action--button {
|
.label-action--button {
|
||||||
display: flex;
|
margin-bottom: var(--space-minus-micro);
|
||||||
margin-right: var(--space-smaller);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-color-dot {
|
.label-color-dot {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: var(--space-slab);
|
width: var(--space-one);
|
||||||
height: var(--space-slab);
|
height: var(--space-one);
|
||||||
border-radius: var(--border-radius-small);
|
border-radius: var(--border-radius-small);
|
||||||
margin-right: var(--space-smaller);
|
margin-right: var(--space-smaller);
|
||||||
box-shadow: var(--shadow-small);
|
|
||||||
}
|
|
||||||
.label.small .label-color-dot {
|
|
||||||
width: var(--space-small);
|
|
||||||
height: var(--space-small);
|
|
||||||
border-radius: var(--border-radius-small);
|
|
||||||
box-shadow: var(--shadow-small);
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="toggle-button"
|
class="toggle-button"
|
||||||
:class="{ active: value, small: size === 'small' }"
|
:class="{ active: value }"
|
||||||
role="switch"
|
role="switch"
|
||||||
:aria-checked="value.toString()"
|
:aria-checked="value.toString()"
|
||||||
@click="onClick"
|
@click="onClick"
|
||||||
|
@ -15,7 +15,6 @@
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
value: { type: Boolean, default: false },
|
value: { type: Boolean, default: false },
|
||||||
size: { type: String, default: '' },
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onClick() {
|
onClick() {
|
||||||
|
@ -46,20 +45,6 @@ export default {
|
||||||
background-color: var(--w-500);
|
background-color: var(--w-500);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.small {
|
|
||||||
width: 22px;
|
|
||||||
height: 14px;
|
|
||||||
|
|
||||||
span {
|
|
||||||
height: var(--space-one);
|
|
||||||
width: var(--space-one);
|
|
||||||
|
|
||||||
&.active {
|
|
||||||
transform: translate(var(--space-small), var(--space-zero));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
span {
|
||||||
--space-one-point-five: 1.5rem;
|
--space-one-point-five: 1.5rem;
|
||||||
background-color: var(--white);
|
background-color: var(--white);
|
||||||
|
|
|
@ -67,9 +67,6 @@ export default {
|
||||||
if (Object.keys(this.enabledFeatures).length === 0) {
|
if (Object.keys(this.enabledFeatures).length === 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (key === 'website') {
|
|
||||||
return this.enabledFeatures.channel_website;
|
|
||||||
}
|
|
||||||
if (key === 'facebook') {
|
if (key === 'facebook') {
|
||||||
return this.enabledFeatures.channel_facebook;
|
return this.enabledFeatures.channel_facebook;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,6 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.colorpicker--selected {
|
.colorpicker--selected {
|
||||||
border: 1px solid var(--color-border-light);
|
|
||||||
border-radius: $space-smaller;
|
border-radius: $space-smaller;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
height: $space-large;
|
height: $space-large;
|
||||||
|
|
|
@ -46,16 +46,11 @@ export default {
|
||||||
return {
|
return {
|
||||||
conversation: this.currentChat,
|
conversation: this.currentChat,
|
||||||
contact: this.$store.getters['contacts/getContact'](this.contactId),
|
contact: this.$store.getters['contacts/getContact'](this.contactId),
|
||||||
currentAgent: this.currentAgent,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
contactId() {
|
contactId() {
|
||||||
return this.currentChat?.meta?.sender?.id;
|
return this.currentChat?.meta?.sender?.id;
|
||||||
},
|
},
|
||||||
currentAgent() {
|
|
||||||
const { id, name, email } = this.$store.getters.getCurrentUser;
|
|
||||||
return { id, name, email };
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
@ -10,11 +10,11 @@ import 'videojs-record/dist/css/videojs.record.css';
|
||||||
|
|
||||||
import videojs from 'video.js';
|
import videojs from 'video.js';
|
||||||
|
|
||||||
|
import inboxMixin from '../../../../shared/mixins/inboxMixin';
|
||||||
import alertMixin from '../../../../shared/mixins/alertMixin';
|
import alertMixin from '../../../../shared/mixins/alertMixin';
|
||||||
|
|
||||||
import Recorder from 'opus-recorder';
|
import Recorder from 'opus-recorder';
|
||||||
import encoderWorker from 'opus-recorder/dist/encoderWorker.min';
|
import encoderWorker from 'opus-recorder/dist/encoderWorker.min';
|
||||||
import waveWorker from 'opus-recorder/dist/waveWorker.min';
|
|
||||||
|
|
||||||
import WaveSurfer from 'wavesurfer.js';
|
import WaveSurfer from 'wavesurfer.js';
|
||||||
import MicrophonePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.microphone.js';
|
import MicrophonePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.microphone.js';
|
||||||
|
@ -23,25 +23,19 @@ import 'videojs-wavesurfer/dist/videojs.wavesurfer.js';
|
||||||
import 'videojs-record/dist/videojs.record.js';
|
import 'videojs-record/dist/videojs.record.js';
|
||||||
import 'videojs-record/dist/plugins/videojs.record.opus-recorder.js';
|
import 'videojs-record/dist/plugins/videojs.record.opus-recorder.js';
|
||||||
import { format, addSeconds } from 'date-fns';
|
import { format, addSeconds } from 'date-fns';
|
||||||
import { AUDIO_FORMATS } from 'shared/constants/messages';
|
|
||||||
|
|
||||||
WaveSurfer.microphone = MicrophonePlugin;
|
WaveSurfer.microphone = MicrophonePlugin;
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'WootAudioRecorder',
|
name: 'WootAudioRecorder',
|
||||||
mixins: [alertMixin],
|
mixins: [inboxMixin, alertMixin],
|
||||||
props: {
|
|
||||||
audioRecordFormat: {
|
|
||||||
type: String,
|
|
||||||
default: AUDIO_FORMATS.WEBM,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
player: false,
|
player: false,
|
||||||
recordingDateStarted: new Date(0),
|
recordingDateStarted: new Date(0),
|
||||||
initialTimeDuration: '00:00',
|
initialTimeDuration: '00:00',
|
||||||
recorderOptions: {
|
recorderOptions: {
|
||||||
|
debug: true,
|
||||||
controls: true,
|
controls: true,
|
||||||
bigPlayButton: false,
|
bigPlayButton: false,
|
||||||
fluid: false,
|
fluid: false,
|
||||||
|
@ -76,28 +70,13 @@ export default {
|
||||||
record: {
|
record: {
|
||||||
audio: true,
|
audio: true,
|
||||||
video: false,
|
video: false,
|
||||||
maxLength: 900,
|
displayMilliseconds: false,
|
||||||
timeSlice: 1000,
|
maxLength: 300,
|
||||||
maxFileSize: 15 * 1024 * 1024,
|
audioEngine: 'opus-recorder',
|
||||||
...(this.audioRecordFormat === AUDIO_FORMATS.WEBM && {
|
audioWorkerURL: encoderWorker,
|
||||||
monitorGain: 0,
|
audioChannels: 1,
|
||||||
recordingGain: 1,
|
audioSampleRate: 48000,
|
||||||
numberOfChannels: 1,
|
audioBitRate: 128,
|
||||||
encoderSampleRate: 16000,
|
|
||||||
originalSampleRateOverride: 16000,
|
|
||||||
streamPages: true,
|
|
||||||
maxFramesPerPage: 1,
|
|
||||||
encoderFrameSize: 1,
|
|
||||||
encoderPath: waveWorker,
|
|
||||||
}),
|
|
||||||
...(this.audioRecordFormat === AUDIO_FORMATS.OGG && {
|
|
||||||
displayMilliseconds: false,
|
|
||||||
audioEngine: 'opus-recorder',
|
|
||||||
audioWorkerURL: encoderWorker,
|
|
||||||
audioChannels: 1,
|
|
||||||
audioSampleRate: 48000,
|
|
||||||
audioBitRate: 128,
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -39,17 +39,10 @@ const TYPING_INDICATOR_IDLE_TIME = 4000;
|
||||||
|
|
||||||
import '@chatwoot/prosemirror-schema/src/woot-editor.css';
|
import '@chatwoot/prosemirror-schema/src/woot-editor.css';
|
||||||
import {
|
import {
|
||||||
hasPressedEnterAndNotCmdOrShift,
|
|
||||||
hasPressedCommandAndEnter,
|
|
||||||
hasPressedAltAndPKey,
|
hasPressedAltAndPKey,
|
||||||
hasPressedAltAndLKey,
|
hasPressedAltAndLKey,
|
||||||
} from 'shared/helpers/KeyboardHelpers';
|
} from 'shared/helpers/KeyboardHelpers';
|
||||||
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
|
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
|
||||||
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
|
|
||||||
import { isEditorHotKeyEnabled } from 'dashboard/mixins/uiSettings';
|
|
||||||
import AnalyticsHelper, {
|
|
||||||
ANALYTICS_EVENTS,
|
|
||||||
} from '../../../helper/AnalyticsHelper';
|
|
||||||
|
|
||||||
const createState = (content, placeholder, plugins = []) => {
|
const createState = (content, placeholder, plugins = []) => {
|
||||||
return EditorState.create({
|
return EditorState.create({
|
||||||
|
@ -65,15 +58,13 @@ const createState = (content, placeholder, plugins = []) => {
|
||||||
export default {
|
export default {
|
||||||
name: 'WootMessageEditor',
|
name: 'WootMessageEditor',
|
||||||
components: { TagAgents, CannedResponse },
|
components: { TagAgents, CannedResponse },
|
||||||
mixins: [eventListenerMixins, uiSettingsMixin],
|
mixins: [eventListenerMixins],
|
||||||
props: {
|
props: {
|
||||||
value: { type: String, default: '' },
|
value: { type: String, default: '' },
|
||||||
editorId: { type: String, default: '' },
|
editorId: { type: String, default: '' },
|
||||||
placeholder: { type: String, default: '' },
|
placeholder: { type: String, default: '' },
|
||||||
isPrivate: { type: Boolean, default: false },
|
isPrivate: { type: Boolean, default: false },
|
||||||
enableSuggestions: { type: Boolean, default: true },
|
enableSuggestions: { type: Boolean, default: true },
|
||||||
overrideLineBreaks: { type: Boolean, default: false },
|
|
||||||
updateSelectionWith: { type: String, default: '' },
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -171,25 +162,6 @@ export default {
|
||||||
isPrivate() {
|
isPrivate() {
|
||||||
this.reloadState();
|
this.reloadState();
|
||||||
},
|
},
|
||||||
|
|
||||||
updateSelectionWith(newValue, oldValue) {
|
|
||||||
if (!this.editorView) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (newValue !== oldValue) {
|
|
||||||
if (this.updateSelectionWith !== '') {
|
|
||||||
const node = this.editorView.state.schema.text(
|
|
||||||
this.updateSelectionWith
|
|
||||||
);
|
|
||||||
const tr = this.editorView.state.tr.replaceSelectionWith(node);
|
|
||||||
this.editorView.focus();
|
|
||||||
this.state = this.editorView.state.apply(tr);
|
|
||||||
this.emitOnChange();
|
|
||||||
this.$emit('clear-selection');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.state = createState(this.value, this.placeholder, this.plugins);
|
this.state = createState(this.value, this.placeholder, this.plugins);
|
||||||
|
@ -216,9 +188,6 @@ export default {
|
||||||
keyup: () => {
|
keyup: () => {
|
||||||
this.onKeyup();
|
this.onKeyup();
|
||||||
},
|
},
|
||||||
keydown: (view, event) => {
|
|
||||||
this.onKeydown(event);
|
|
||||||
},
|
|
||||||
focus: () => {
|
focus: () => {
|
||||||
this.onFocus();
|
this.onFocus();
|
||||||
},
|
},
|
||||||
|
@ -234,12 +203,6 @@ export default {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
isEnterToSendEnabled() {
|
|
||||||
return isEditorHotKeyEnabled(this.uiSettings, 'enter');
|
|
||||||
},
|
|
||||||
isCmdPlusEnterToSendEnabled() {
|
|
||||||
return isEditorHotKeyEnabled(this.uiSettings, 'cmd_enter');
|
|
||||||
},
|
|
||||||
handleKeyEvents(e) {
|
handleKeyEvents(e) {
|
||||||
if (hasPressedAltAndPKey(e)) {
|
if (hasPressedAltAndPKey(e)) {
|
||||||
this.focusEditorInputField();
|
this.focusEditorInputField();
|
||||||
|
@ -271,7 +234,6 @@ export default {
|
||||||
);
|
);
|
||||||
this.state = this.editorView.state.apply(tr);
|
this.state = this.editorView.state.apply(tr);
|
||||||
this.emitOnChange();
|
this.emitOnChange();
|
||||||
AnalyticsHelper.track(ANALYTICS_EVENTS.USED_MENTIONS);
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
@ -301,7 +263,6 @@ export default {
|
||||||
this.emitOnChange();
|
this.emitOnChange();
|
||||||
|
|
||||||
tr.scrollIntoView();
|
tr.scrollIntoView();
|
||||||
AnalyticsHelper.track(ANALYTICS_EVENTS.INSERTED_A_CANNED_RESPONSE);
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -323,24 +284,6 @@ export default {
|
||||||
clearTimeout(this.idleTimer);
|
clearTimeout(this.idleTimer);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleLineBreakWhenEnterToSendEnabled(event) {
|
|
||||||
if (
|
|
||||||
hasPressedEnterAndNotCmdOrShift(event) &&
|
|
||||||
this.isEnterToSendEnabled() &&
|
|
||||||
!this.overrideLineBreaks
|
|
||||||
) {
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleLineBreakWhenCmdAndEnterToSendEnabled(event) {
|
|
||||||
if (
|
|
||||||
hasPressedCommandAndEnter(event) &&
|
|
||||||
this.isCmdPlusEnterToSendEnabled() &&
|
|
||||||
!this.overrideLineBreaks
|
|
||||||
) {
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onKeyup() {
|
onKeyup() {
|
||||||
if (!this.idleTimer) {
|
if (!this.idleTimer) {
|
||||||
this.$emit('typing-on');
|
this.$emit('typing-on');
|
||||||
|
@ -351,14 +294,6 @@ export default {
|
||||||
TYPING_INDICATOR_IDLE_TIME
|
TYPING_INDICATOR_IDLE_TIME
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
onKeydown(event) {
|
|
||||||
if (this.isEnterToSendEnabled()) {
|
|
||||||
this.handleLineBreakWhenEnterToSendEnabled(event);
|
|
||||||
}
|
|
||||||
if (this.isCmdPlusEnterToSendEnabled()) {
|
|
||||||
this.handleLineBreakWhenCmdAndEnterToSendEnabled(event);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onBlur() {
|
onBlur() {
|
||||||
this.turnOffIdleTimer();
|
this.turnOffIdleTimer();
|
||||||
this.resetTyping();
|
this.resetTyping();
|
||||||
|
|
|
@ -232,18 +232,11 @@ export default {
|
||||||
return this.showFileUpload || this.isNote;
|
return this.showFileUpload || this.isNote;
|
||||||
},
|
},
|
||||||
showAudioRecorderButton() {
|
showAudioRecorderButton() {
|
||||||
// Disable audio recorder for safari browser as recording is not supported
|
|
||||||
const isSafari = /^((?!chrome|android|crios|fxios).)*safari/i.test(
|
|
||||||
navigator.userAgent
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
this.isFeatureEnabledonAccount(
|
this.isFeatureEnabledonAccount(
|
||||||
this.accountId,
|
this.accountId,
|
||||||
FEATURE_FLAGS.VOICE_RECORDER
|
FEATURE_FLAGS.VOICE_RECORDER
|
||||||
) &&
|
) && this.showAudioRecorder
|
||||||
this.showAudioRecorder &&
|
|
||||||
!isSafari
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
showAudioPlayStopButton() {
|
showAudioPlayStopButton() {
|
||||||
|
|
|
@ -91,7 +91,6 @@
|
||||||
</span>
|
</span>
|
||||||
<span class="unread">{{ unreadCount > 9 ? '9+' : unreadCount }}</span>
|
<span class="unread">{{ unreadCount > 9 ? '9+' : unreadCount }}</span>
|
||||||
</div>
|
</div>
|
||||||
<card-labels :conversation-id="chat.id" />
|
|
||||||
</div>
|
</div>
|
||||||
<woot-context-menu
|
<woot-context-menu
|
||||||
v-if="showContextMenu"
|
v-if="showContextMenu"
|
||||||
|
@ -126,8 +125,8 @@ import InboxName from '../InboxName';
|
||||||
import inboxMixin from 'shared/mixins/inboxMixin';
|
import inboxMixin from 'shared/mixins/inboxMixin';
|
||||||
import ConversationContextMenu from './contextMenu/Index.vue';
|
import ConversationContextMenu from './contextMenu/Index.vue';
|
||||||
import alertMixin from 'shared/mixins/alertMixin';
|
import alertMixin from 'shared/mixins/alertMixin';
|
||||||
import TimeAgo from 'dashboard/components/ui/TimeAgo';
|
import timeAgo from 'dashboard/components/ui/TimeAgo';
|
||||||
import CardLabels from './conversationCardComponents/CardLabels.vue';
|
|
||||||
const ATTACHMENT_ICONS = {
|
const ATTACHMENT_ICONS = {
|
||||||
image: 'image',
|
image: 'image',
|
||||||
audio: 'headphones-sound-wave',
|
audio: 'headphones-sound-wave',
|
||||||
|
@ -139,11 +138,10 @@ const ATTACHMENT_ICONS = {
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
CardLabels,
|
|
||||||
InboxName,
|
InboxName,
|
||||||
Thumbnail,
|
Thumbnail,
|
||||||
ConversationContextMenu,
|
ConversationContextMenu,
|
||||||
TimeAgo,
|
timeAgo,
|
||||||
},
|
},
|
||||||
|
|
||||||
mixins: [
|
mixins: [
|
||||||
|
@ -372,15 +370,11 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.conversation {
|
.conversation {
|
||||||
align-items: flex-start;
|
align-items: center;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--color-background-light);
|
background: var(--color-background-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
&::v-deep .user-thumbnail-box {
|
|
||||||
margin-top: var(--space-normal);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.conversation-selected {
|
.conversation-selected {
|
||||||
|
@ -389,10 +383,8 @@ export default {
|
||||||
|
|
||||||
.has-inbox-name {
|
.has-inbox-name {
|
||||||
&::v-deep .user-thumbnail-box {
|
&::v-deep .user-thumbnail-box {
|
||||||
margin-top: var(--space-large);
|
margin-top: var(--space-normal);
|
||||||
}
|
align-items: flex-start;
|
||||||
.checkbox-wrapper {
|
|
||||||
margin-top: var(--space-large);
|
|
||||||
}
|
}
|
||||||
.conversation--meta {
|
.conversation--meta {
|
||||||
margin-top: var(--space-normal);
|
margin-top: var(--space-normal);
|
||||||
|
@ -437,7 +429,6 @@ export default {
|
||||||
margin-top: var(--space-minus-micro);
|
margin-top: var(--space-minus-micro);
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.checkbox-wrapper {
|
.checkbox-wrapper {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
width: 40px;
|
width: 40px;
|
||||||
|
@ -447,7 +438,6 @@ export default {
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
margin-top: var(--space-normal);
|
margin-top: var(--space-normal);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: var(--w-100);
|
background-color: var(--w-100);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,7 @@
|
||||||
/>
|
/>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="conversation--header--actions">
|
<div class="conversation--header--actions">
|
||||||
<inbox-name
|
<inbox-name :inbox="inbox" class="margin-right-small" />
|
||||||
v-if="hasMultipleInboxes"
|
|
||||||
:inbox="inbox"
|
|
||||||
class="margin-right-small"
|
|
||||||
/>
|
|
||||||
<span
|
<span
|
||||||
v-if="isSnoozed"
|
v-if="isSnoozed"
|
||||||
class="snoozed--display-text margin-right-small"
|
class="snoozed--display-text margin-right-small"
|
||||||
|
@ -149,9 +145,6 @@ export default {
|
||||||
const { inbox_id: inboxId } = this.chat;
|
const { inbox_id: inboxId } = this.chat;
|
||||||
return this.$store.getters['inboxes/getInbox'](inboxId);
|
return this.$store.getters['inboxes/getInbox'](inboxId);
|
||||||
},
|
},
|
||||||
hasMultipleInboxes() {
|
|
||||||
return this.$store.getters['inboxes/getInboxes'].length > 1;
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
v-if="data.content"
|
v-if="data.content"
|
||||||
:message="message"
|
:message="message"
|
||||||
:is-email="isEmailContentType"
|
:is-email="isEmailContentType"
|
||||||
|
:readable-time="readableTime"
|
||||||
:display-quoted-button="displayQuotedButton"
|
:display-quoted-button="displayQuotedButton"
|
||||||
/>
|
/>
|
||||||
<span
|
<span
|
||||||
|
@ -28,6 +29,7 @@
|
||||||
<bubble-image
|
<bubble-image
|
||||||
v-if="attachment.file_type === 'image' && !hasImageError"
|
v-if="attachment.file_type === 'image' && !hasImageError"
|
||||||
:url="attachment.data_url"
|
:url="attachment.data_url"
|
||||||
|
:readable-time="readableTime"
|
||||||
@error="onImageLoadError"
|
@error="onImageLoadError"
|
||||||
/>
|
/>
|
||||||
<audio v-else-if="attachment.file_type === 'audio'" controls>
|
<audio v-else-if="attachment.file_type === 'audio'" controls>
|
||||||
|
@ -36,6 +38,7 @@
|
||||||
<bubble-video
|
<bubble-video
|
||||||
v-else-if="attachment.file_type === 'video'"
|
v-else-if="attachment.file_type === 'video'"
|
||||||
:url="attachment.data_url"
|
:url="attachment.data_url"
|
||||||
|
:readable-time="readableTime"
|
||||||
/>
|
/>
|
||||||
<bubble-location
|
<bubble-location
|
||||||
v-else-if="attachment.file_type === 'location'"
|
v-else-if="attachment.file_type === 'location'"
|
||||||
|
@ -43,7 +46,11 @@
|
||||||
:longitude="attachment.coordinates_long"
|
:longitude="attachment.coordinates_long"
|
||||||
:name="attachment.fallback_title"
|
:name="attachment.fallback_title"
|
||||||
/>
|
/>
|
||||||
<bubble-file v-else :url="attachment.data_url" />
|
<bubble-file
|
||||||
|
v-else
|
||||||
|
:url="attachment.data_url"
|
||||||
|
:readable-time="readableTime"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<bubble-actions
|
<bubble-actions
|
||||||
|
@ -58,9 +65,10 @@
|
||||||
:is-private="data.private"
|
:is-private="data.private"
|
||||||
:message-type="data.message_type"
|
:message-type="data.message_type"
|
||||||
:message-status="status"
|
:message-status="status"
|
||||||
|
:readable-time="readableTime"
|
||||||
:source-id="data.source_id"
|
:source-id="data.source_id"
|
||||||
:inbox-id="data.inbox_id"
|
:inbox-id="data.inbox_id"
|
||||||
:created-at="createdAt"
|
:message-read="showReadTicks"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<spinner v-if="isPending" size="tiny" />
|
<spinner v-if="isPending" size="tiny" />
|
||||||
|
@ -111,6 +119,8 @@
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import messageFormatterMixin from 'shared/mixins/messageFormatterMixin';
|
import messageFormatterMixin from 'shared/mixins/messageFormatterMixin';
|
||||||
|
import timeMixin from '../../../mixins/time';
|
||||||
|
|
||||||
import BubbleMailHead from './bubble/MailHead';
|
import BubbleMailHead from './bubble/MailHead';
|
||||||
import BubbleText from './bubble/Text';
|
import BubbleText from './bubble/Text';
|
||||||
import BubbleImage from './bubble/Image';
|
import BubbleImage from './bubble/Image';
|
||||||
|
@ -139,7 +149,7 @@ export default {
|
||||||
ContextMenu,
|
ContextMenu,
|
||||||
Spinner,
|
Spinner,
|
||||||
},
|
},
|
||||||
mixins: [alertMixin, messageFormatterMixin, contentTypeMixin],
|
mixins: [alertMixin, timeMixin, messageFormatterMixin, contentTypeMixin],
|
||||||
props: {
|
props: {
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
@ -157,6 +167,10 @@ export default {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
hasUserReadMessage: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
isWebWidgetInbox: {
|
isWebWidgetInbox: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
|
@ -259,8 +273,11 @@ export default {
|
||||||
'has-tweet-menu': this.isATweet,
|
'has-tweet-menu': this.isATweet,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
createdAt() {
|
readableTime() {
|
||||||
return this.contentAttributes.external_created_at || this.data.created_at;
|
return this.messageStamp(
|
||||||
|
this.contentAttributes.external_created_at || this.data.created_at,
|
||||||
|
'LLL d, h:mm a'
|
||||||
|
);
|
||||||
},
|
},
|
||||||
isBubble() {
|
isBubble() {
|
||||||
return [0, 1, 3].includes(this.data.message_type);
|
return [0, 1, 3].includes(this.data.message_type);
|
||||||
|
@ -271,6 +288,14 @@ export default {
|
||||||
isOutgoing() {
|
isOutgoing() {
|
||||||
return this.data.message_type === MESSAGE_TYPE.OUTGOING;
|
return this.data.message_type === MESSAGE_TYPE.OUTGOING;
|
||||||
},
|
},
|
||||||
|
showReadTicks() {
|
||||||
|
return (
|
||||||
|
(this.isOutgoing || this.isTemplate) &&
|
||||||
|
this.hasUserReadMessage &&
|
||||||
|
this.isWebWidgetInbox &&
|
||||||
|
!this.data.private
|
||||||
|
);
|
||||||
|
},
|
||||||
isTemplate() {
|
isTemplate() {
|
||||||
return this.data.message_type === MESSAGE_TYPE.TEMPLATE;
|
return this.data.message_type === MESSAGE_TYPE.TEMPLATE;
|
||||||
},
|
},
|
||||||
|
|
|
@ -40,6 +40,9 @@
|
||||||
:is-a-tweet="isATweet"
|
:is-a-tweet="isATweet"
|
||||||
:is-a-whatsapp-channel="isAWhatsAppChannel"
|
:is-a-whatsapp-channel="isAWhatsAppChannel"
|
||||||
:has-instagram-story="hasInstagramStory"
|
:has-instagram-story="hasInstagramStory"
|
||||||
|
:has-user-read-message="
|
||||||
|
hasUserReadMessage(message.created_at, getLastSeenAt)
|
||||||
|
"
|
||||||
:is-web-widget-inbox="isAWebWidgetInbox"
|
:is-web-widget-inbox="isAWebWidgetInbox"
|
||||||
/>
|
/>
|
||||||
<li v-show="unreadMessageCount != 0" class="unread--toast">
|
<li v-show="unreadMessageCount != 0" class="unread--toast">
|
||||||
|
@ -60,6 +63,9 @@
|
||||||
:is-a-tweet="isATweet"
|
:is-a-tweet="isATweet"
|
||||||
:is-a-whatsapp-channel="isAWhatsAppChannel"
|
:is-a-whatsapp-channel="isAWhatsAppChannel"
|
||||||
:has-instagram-story="hasInstagramStory"
|
:has-instagram-story="hasInstagramStory"
|
||||||
|
:has-user-read-message="
|
||||||
|
hasUserReadMessage(message.created_at, getLastSeenAt)
|
||||||
|
"
|
||||||
:is-web-widget-inbox="isAWebWidgetInbox"
|
:is-web-widget-inbox="isAWebWidgetInbox"
|
||||||
/>
|
/>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -427,7 +433,12 @@ export default {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: unset;
|
left: unset;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: var(--space-smaller);
|
|
||||||
|
&::before {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
left: var(--space-smaller);
|
||||||
|
bottom: var(--space-minus-slab);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
<woot-audio-recorder
|
<woot-audio-recorder
|
||||||
v-if="showAudioRecorderEditor"
|
v-if="showAudioRecorderEditor"
|
||||||
ref="audioRecorderInput"
|
ref="audioRecorderInput"
|
||||||
:audio-record-format="audioRecordFormat"
|
|
||||||
@state-recorder-progress-changed="onStateProgressRecorderChanged"
|
@state-recorder-progress-changed="onStateProgressRecorderChanged"
|
||||||
@state-recorder-changed="onStateRecorderChanged"
|
@state-recorder-changed="onStateRecorderChanged"
|
||||||
@finish-record="onFinishRecorder"
|
@finish-record="onFinishRecorder"
|
||||||
|
@ -61,7 +60,6 @@
|
||||||
class="input"
|
class="input"
|
||||||
:is-private="isOnPrivateNote"
|
:is-private="isOnPrivateNote"
|
||||||
:placeholder="messagePlaceHolder"
|
:placeholder="messagePlaceHolder"
|
||||||
:update-selection-with="updateEditorSelectionWith"
|
|
||||||
:min-height="4"
|
:min-height="4"
|
||||||
@typing-off="onTypingOff"
|
@typing-off="onTypingOff"
|
||||||
@typing-on="onTypingOn"
|
@typing-on="onTypingOn"
|
||||||
|
@ -69,7 +67,6 @@
|
||||||
@blur="onBlur"
|
@blur="onBlur"
|
||||||
@toggle-user-mention="toggleUserMention"
|
@toggle-user-mention="toggleUserMention"
|
||||||
@toggle-canned-menu="toggleCannedMenu"
|
@toggle-canned-menu="toggleCannedMenu"
|
||||||
@clear-selection="clearEditorSelection"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="hasAttachments" class="attachment-preview-box" @paste="onPaste">
|
<div v-if="hasAttachments" class="attachment-preview-box" @paste="onPaste">
|
||||||
|
@ -133,6 +130,7 @@ import { mapGetters } from 'vuex';
|
||||||
import { mixin as clickaway } from 'vue-clickaway';
|
import { mixin as clickaway } from 'vue-clickaway';
|
||||||
import alertMixin from 'shared/mixins/alertMixin';
|
import alertMixin from 'shared/mixins/alertMixin';
|
||||||
|
|
||||||
|
import EmojiInput from 'shared/components/emoji/EmojiInput';
|
||||||
import CannedResponse from './CannedResponse';
|
import CannedResponse from './CannedResponse';
|
||||||
import ResizableTextArea from 'shared/components/ResizableTextArea';
|
import ResizableTextArea from 'shared/components/ResizableTextArea';
|
||||||
import AttachmentPreview from 'dashboard/components/widgets/AttachmentsPreview';
|
import AttachmentPreview from 'dashboard/components/widgets/AttachmentsPreview';
|
||||||
|
@ -148,7 +146,6 @@ import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
|
||||||
import {
|
import {
|
||||||
MAXIMUM_FILE_UPLOAD_SIZE,
|
MAXIMUM_FILE_UPLOAD_SIZE,
|
||||||
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
|
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
|
||||||
AUDIO_FORMATS,
|
|
||||||
} from 'shared/constants/messages';
|
} from 'shared/constants/messages';
|
||||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||||
|
|
||||||
|
@ -163,11 +160,6 @@ import { LocalStorage, LOCAL_STORAGE_KEYS } from '../../../helper/localStorage';
|
||||||
import { trimContent, debounce } from '@chatwoot/utils';
|
import { trimContent, debounce } from '@chatwoot/utils';
|
||||||
import wootConstants from 'dashboard/constants';
|
import wootConstants from 'dashboard/constants';
|
||||||
import { isEditorHotKeyEnabled } from 'dashboard/mixins/uiSettings';
|
import { isEditorHotKeyEnabled } from 'dashboard/mixins/uiSettings';
|
||||||
import AnalyticsHelper, {
|
|
||||||
ANALYTICS_EVENTS,
|
|
||||||
} from '../../../helper/AnalyticsHelper';
|
|
||||||
|
|
||||||
const EmojiInput = () => import('shared/components/emoji/EmojiInput');
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
@ -223,7 +215,6 @@ export default {
|
||||||
ccEmails: '',
|
ccEmails: '',
|
||||||
doAutoSaveDraft: () => {},
|
doAutoSaveDraft: () => {},
|
||||||
showWhatsAppTemplatesModal: false,
|
showWhatsAppTemplatesModal: false,
|
||||||
updateEditorSelectionWith: '',
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -407,7 +398,7 @@ export default {
|
||||||
return conversationDisplayType !== CONDENSED;
|
return conversationDisplayType !== CONDENSED;
|
||||||
},
|
},
|
||||||
emojiDialogClassOnExpanedLayout() {
|
emojiDialogClassOnExpanedLayout() {
|
||||||
return this.isOnExpandedLayout || this.popoutReplyBox
|
return this.isOnExpandedLayout && !this.popoutReplyBox
|
||||||
? 'emoji-dialog--expanded'
|
? 'emoji-dialog--expanded'
|
||||||
: '';
|
: '';
|
||||||
},
|
},
|
||||||
|
@ -459,17 +450,12 @@ export default {
|
||||||
return this.currentChat.id;
|
return this.currentChat.id;
|
||||||
},
|
},
|
||||||
conversationIdByRoute() {
|
conversationIdByRoute() {
|
||||||
return this.conversationId;
|
const { conversation_id: conversationId } = this.$route.params;
|
||||||
|
return conversationId;
|
||||||
},
|
},
|
||||||
editorStateId() {
|
editorStateId() {
|
||||||
return `draft-${this.conversationIdByRoute}-${this.replyType}`;
|
return `draft-${this.conversationIdByRoute}-${this.replyType}`;
|
||||||
},
|
},
|
||||||
audioRecordFormat() {
|
|
||||||
if (this.isAWebWidgetInbox) {
|
|
||||||
return AUDIO_FORMATS.WEBM;
|
|
||||||
}
|
|
||||||
return AUDIO_FORMATS.OGG;
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
currentChat(conversation) {
|
currentChat(conversation) {
|
||||||
|
@ -601,7 +587,6 @@ export default {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
} else if (keyCode === 'enter' && this.isAValidEvent('enter')) {
|
} else if (keyCode === 'enter' && this.isAValidEvent('enter')) {
|
||||||
this.onSendReply();
|
this.onSendReply();
|
||||||
e.preventDefault();
|
|
||||||
} else if (
|
} else if (
|
||||||
['meta+enter', 'ctrl+enter'].includes(keyCode) &&
|
['meta+enter', 'ctrl+enter'].includes(keyCode) &&
|
||||||
this.isAValidEvent('cmd_enter')
|
this.isAValidEvent('cmd_enter')
|
||||||
|
@ -709,7 +694,6 @@ export default {
|
||||||
},
|
},
|
||||||
replaceText(message) {
|
replaceText(message) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
AnalyticsHelper.track(ANALYTICS_EVENTS.INSERTED_A_CANNED_RESPONSE);
|
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}, 100);
|
}, 100);
|
||||||
},
|
},
|
||||||
|
@ -724,26 +708,8 @@ export default {
|
||||||
}
|
}
|
||||||
this.$nextTick(() => this.$refs.messageInput.focus());
|
this.$nextTick(() => this.$refs.messageInput.focus());
|
||||||
},
|
},
|
||||||
clearEditorSelection() {
|
|
||||||
this.updateEditorSelectionWith = '';
|
|
||||||
},
|
|
||||||
insertEmoji(emoji, selectionStart, selectionEnd) {
|
|
||||||
const { message } = this;
|
|
||||||
const newMessage =
|
|
||||||
message.slice(0, selectionStart) +
|
|
||||||
emoji +
|
|
||||||
message.slice(selectionEnd, message.length);
|
|
||||||
this.message = newMessage;
|
|
||||||
},
|
|
||||||
emojiOnClick(emoji) {
|
emojiOnClick(emoji) {
|
||||||
if (this.showRichContentEditor) {
|
this.message = `${this.message}${emoji} `;
|
||||||
this.updateEditorSelectionWith = emoji;
|
|
||||||
this.onFocus();
|
|
||||||
}
|
|
||||||
if (!this.showRichContentEditor) {
|
|
||||||
const { selectionStart, selectionEnd } = this.$refs.messageInput.$el;
|
|
||||||
this.insertEmoji(emoji, selectionStart, selectionEnd);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
clearMessage() {
|
clearMessage() {
|
||||||
this.message = '';
|
this.message = '';
|
||||||
|
@ -998,13 +964,13 @@ export default {
|
||||||
|
|
||||||
.emoji-dialog {
|
.emoji-dialog {
|
||||||
top: unset;
|
top: unset;
|
||||||
bottom: var(--space-normal);
|
bottom: 12px;
|
||||||
left: -320px;
|
left: -320px;
|
||||||
right: unset;
|
right: unset;
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
right: var(--space-minus-normal);
|
right: -16px;
|
||||||
bottom: var(--space-small);
|
bottom: 10px;
|
||||||
transform: rotate(270deg);
|
transform: rotate(270deg);
|
||||||
filter: drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.08));
|
filter: drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.08));
|
||||||
}
|
}
|
||||||
|
@ -1018,7 +984,7 @@ export default {
|
||||||
&::before {
|
&::before {
|
||||||
transform: rotate(0deg);
|
transform: rotate(0deg);
|
||||||
left: var(--space-smaller);
|
left: var(--space-smaller);
|
||||||
bottom: var(--space-minus-small);
|
bottom: var(--space-minus-slab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.message-signature {
|
.message-signature {
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="message-text--metadata">
|
<div class="message-text--metadata">
|
||||||
<span
|
<span class="time" :class="{ delivered: messageRead }">{{
|
||||||
class="time"
|
readableTime
|
||||||
:class="{
|
}}</span>
|
||||||
'has-status-icon':
|
|
||||||
showSentIndicator || showDeliveredIndicator || showReadIndicator,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
{{ readableTime }}
|
|
||||||
</span>
|
|
||||||
<span v-if="showReadIndicator" class="read-indicator-wrap">
|
<span v-if="showReadIndicator" class="read-indicator-wrap">
|
||||||
<fluent-icon
|
<fluent-icon
|
||||||
v-tooltip.top-start="$t('CHAT_LIST.MESSAGE_READ')"
|
v-tooltip.top-start="$t('CHAT_LIST.MESSAGE_READ')"
|
||||||
|
@ -17,7 +11,7 @@
|
||||||
size="14"
|
size="14"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="showDeliveredIndicator" class="read-indicator-wrap">
|
<span v-if="showDeliveredIndicator" class="read-indicator-wrap">
|
||||||
<fluent-icon
|
<fluent-icon
|
||||||
v-tooltip.top-start="$t('CHAT_LIST.DELIVERED')"
|
v-tooltip.top-start="$t('CHAT_LIST.DELIVERED')"
|
||||||
icon="checkmark-double"
|
icon="checkmark-double"
|
||||||
|
@ -25,7 +19,7 @@
|
||||||
size="14"
|
size="14"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="showSentIndicator" class="read-indicator-wrap">
|
<span v-if="showSentIndicator" class="read-indicator-wrap">
|
||||||
<fluent-icon
|
<fluent-icon
|
||||||
v-tooltip.top-start="$t('CHAT_LIST.SENT')"
|
v-tooltip.top-start="$t('CHAT_LIST.SENT')"
|
||||||
icon="checkmark"
|
icon="checkmark"
|
||||||
|
@ -60,6 +54,19 @@
|
||||||
size="16"
|
size="16"
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
|
<a
|
||||||
|
v-if="hasInstagramStory && (isIncoming || isOutgoing) && linkToStory"
|
||||||
|
:href="linkToStory"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer nofollow"
|
||||||
|
>
|
||||||
|
<fluent-icon
|
||||||
|
v-tooltip.top-start="$t('CHAT_LIST.LINK_TO_STORY')"
|
||||||
|
icon="open"
|
||||||
|
class="action--icon cursor-pointer"
|
||||||
|
size="16"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
<a
|
<a
|
||||||
v-if="isATweet && (isOutgoing || isIncoming) && linkToTweet"
|
v-if="isATweet && (isOutgoing || isIncoming) && linkToTweet"
|
||||||
:href="linkToTweet"
|
:href="linkToTweet"
|
||||||
|
@ -80,19 +87,17 @@
|
||||||
import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
|
import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
|
||||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||||
import inboxMixin from 'shared/mixins/inboxMixin';
|
import inboxMixin from 'shared/mixins/inboxMixin';
|
||||||
import { mapGetters } from 'vuex';
|
|
||||||
import timeMixin from '../../../../mixins/time';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [inboxMixin, timeMixin],
|
mixins: [inboxMixin],
|
||||||
props: {
|
props: {
|
||||||
sender: {
|
sender: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
},
|
},
|
||||||
createdAt: {
|
readableTime: {
|
||||||
type: Number,
|
type: String,
|
||||||
default: 0,
|
default: '',
|
||||||
},
|
},
|
||||||
storySender: {
|
storySender: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -138,9 +143,12 @@ export default {
|
||||||
type: [String, Number],
|
type: [String, Number],
|
||||||
default: 0,
|
default: 0,
|
||||||
},
|
},
|
||||||
|
messageRead: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters({ currentChat: 'getSelectedChat' }),
|
|
||||||
inbox() {
|
inbox() {
|
||||||
return this.$store.getters['inboxes/getInbox'](this.inboxId);
|
return this.$store.getters['inboxes/getInbox'](this.inboxId);
|
||||||
},
|
},
|
||||||
|
@ -150,9 +158,6 @@ export default {
|
||||||
isOutgoing() {
|
isOutgoing() {
|
||||||
return MESSAGE_TYPE.OUTGOING === this.messageType;
|
return MESSAGE_TYPE.OUTGOING === this.messageType;
|
||||||
},
|
},
|
||||||
isTemplate() {
|
|
||||||
return MESSAGE_TYPE.TEMPLATE === this.messageType;
|
|
||||||
},
|
|
||||||
isDelivered() {
|
isDelivered() {
|
||||||
return MESSAGE_STATUS.DELIVERED === this.messageStatus;
|
return MESSAGE_STATUS.DELIVERED === this.messageStatus;
|
||||||
},
|
},
|
||||||
|
@ -162,9 +167,6 @@ export default {
|
||||||
isSent() {
|
isSent() {
|
||||||
return MESSAGE_STATUS.SENT === this.messageStatus;
|
return MESSAGE_STATUS.SENT === this.messageStatus;
|
||||||
},
|
},
|
||||||
readableTime() {
|
|
||||||
return this.messageStamp(this.createdAt, 'LLL d, h:mm a');
|
|
||||||
},
|
|
||||||
screenName() {
|
screenName() {
|
||||||
const { additional_attributes: additionalAttributes = {} } =
|
const { additional_attributes: additionalAttributes = {} } =
|
||||||
this.sender || {};
|
this.sender || {};
|
||||||
|
@ -185,52 +187,28 @@ export default {
|
||||||
const { storySender, storyId } = this;
|
const { storySender, storyId } = this;
|
||||||
return `https://www.instagram.com/stories/${storySender}/${storyId}`;
|
return `https://www.instagram.com/stories/${storySender}/${storyId}`;
|
||||||
},
|
},
|
||||||
showStatusIndicators() {
|
|
||||||
if ((this.isOutgoing || this.isTemplate) && !this.private) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
showSentIndicator() {
|
showSentIndicator() {
|
||||||
if (!this.showStatusIndicators) {
|
return (
|
||||||
return false;
|
this.isOutgoing &&
|
||||||
}
|
this.sourceId &&
|
||||||
|
(this.isAnEmailChannel || (this.isAWhatsAppChannel && this.isSent))
|
||||||
if (this.isAnEmailChannel) {
|
);
|
||||||
return !!this.sourceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isAWhatsAppChannel) {
|
|
||||||
return this.sourceId && this.isSent;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
showDeliveredIndicator() {
|
showDeliveredIndicator() {
|
||||||
if (!this.showStatusIndicators) {
|
return (
|
||||||
return false;
|
this.isOutgoing &&
|
||||||
}
|
this.sourceId &&
|
||||||
|
this.isAWhatsAppChannel &&
|
||||||
if (this.isAWhatsAppChannel) {
|
this.isDelivered
|
||||||
return this.sourceId && this.isDelivered;
|
);
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
showReadIndicator() {
|
showReadIndicator() {
|
||||||
if (!this.showStatusIndicators) {
|
return (
|
||||||
return false;
|
this.isOutgoing &&
|
||||||
}
|
this.sourceId &&
|
||||||
|
this.isAWhatsAppChannel &&
|
||||||
if (this.isAWebWidgetInbox) {
|
this.isRead
|
||||||
const { contact_last_seen_at: contactLastSeenAt } = this.currentChat;
|
);
|
||||||
return contactLastSeenAt >= this.createdAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isAWhatsAppChannel) {
|
|
||||||
return this.sourceId && this.isRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -253,13 +231,12 @@ export default {
|
||||||
|
|
||||||
.action--icon {
|
.action--icon {
|
||||||
color: var(--white);
|
color: var(--white);
|
||||||
|
|
||||||
&.read-tick {
|
&.read-tick {
|
||||||
color: var(--v-100);
|
color: var(--v-100);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.read-indicator {
|
&.read-indicator {
|
||||||
color: var(--g-200);
|
color: var(--g-300);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,9 +301,8 @@ export default {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: var(--space-small);
|
right: var(--space-small);
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
&.delivered {
|
||||||
&.has-status-icon {
|
right: var(--space-medium);
|
||||||
right: var(--space-large);
|
|
||||||
line-height: 2;
|
line-height: 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,10 @@ export default {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
readableTime: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
isEmail: {
|
isEmail: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
|
|
|
@ -1,136 +0,0 @@
|
||||||
<template>
|
|
||||||
<div
|
|
||||||
v-show="activeLabels.length"
|
|
||||||
ref="labelContainer"
|
|
||||||
class="label-container"
|
|
||||||
>
|
|
||||||
<div class="labels-wrap" :class="{ expand: showAllLabels }">
|
|
||||||
<woot-label
|
|
||||||
v-for="(label, index) in activeLabels"
|
|
||||||
:key="label.id"
|
|
||||||
:title="label.title"
|
|
||||||
:description="label.description"
|
|
||||||
:color="label.color"
|
|
||||||
variant="smooth"
|
|
||||||
small
|
|
||||||
:class="{ hidden: !showAllLabels && index > labelPosition }"
|
|
||||||
/>
|
|
||||||
<woot-button
|
|
||||||
v-if="showExpandLabelButton"
|
|
||||||
:title="
|
|
||||||
showAllLabels
|
|
||||||
? $t('CONVERSATION.CARD.HIDE_LABELS')
|
|
||||||
: $t('CONVERSATION.CARD.SHOW_LABELS')
|
|
||||||
"
|
|
||||||
class="show-more--button"
|
|
||||||
color-scheme="secondary"
|
|
||||||
variant="hollow"
|
|
||||||
:icon="showAllLabels ? 'chevron-left' : 'chevron-right'"
|
|
||||||
size="tiny"
|
|
||||||
@click="onShowLabels"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
import conversationLabelMixin from 'dashboard/mixins/conversation/labelMixin';
|
|
||||||
export default {
|
|
||||||
mixins: [conversationLabelMixin],
|
|
||||||
props: {
|
|
||||||
conversationId: {
|
|
||||||
type: Number,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
showAllLabels: false,
|
|
||||||
showExpandLabelButton: false,
|
|
||||||
labelPosition: -1,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
activeLabels() {
|
|
||||||
this.$nextTick(() => this.computeVisibleLabelPosition());
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.computeVisibleLabelPosition();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
onShowLabels(e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
this.showAllLabels = !this.showAllLabels;
|
|
||||||
},
|
|
||||||
computeVisibleLabelPosition() {
|
|
||||||
const labelContainer = this.$refs.labelContainer;
|
|
||||||
const labels = this.$refs.labelContainer.querySelectorAll('.label');
|
|
||||||
let labelOffset = 0;
|
|
||||||
this.showExpandLabelButton = false;
|
|
||||||
|
|
||||||
Array.from(labels).forEach((label, index) => {
|
|
||||||
labelOffset += label.offsetWidth + 8;
|
|
||||||
|
|
||||||
if (labelOffset < labelContainer.clientWidth - 16) {
|
|
||||||
this.labelPosition = index;
|
|
||||||
} else {
|
|
||||||
this.showExpandLabelButton = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.show-more--button {
|
|
||||||
height: var(--space-two);
|
|
||||||
position: sticky;
|
|
||||||
flex-shrink: 0;
|
|
||||||
right: 0;
|
|
||||||
margin-right: var(--space-medium);
|
|
||||||
|
|
||||||
&.secondary:focus {
|
|
||||||
color: var(--s-700);
|
|
||||||
border-color: var(--s-300);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.label-container {
|
|
||||||
margin-top: var(--space-micro);
|
|
||||||
}
|
|
||||||
|
|
||||||
.labels-wrap {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
min-width: 0;
|
|
||||||
flex-shrink: 1;
|
|
||||||
|
|
||||||
&.expand {
|
|
||||||
height: auto;
|
|
||||||
overflow: visible;
|
|
||||||
flex-flow: row wrap;
|
|
||||||
|
|
||||||
.label {
|
|
||||||
margin-bottom: var(--space-smaller);
|
|
||||||
}
|
|
||||||
|
|
||||||
.show-more--button {
|
|
||||||
margin-bottom: var(--space-smaller);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.secondary {
|
|
||||||
border: 1px solid var(--s-100);
|
|
||||||
}
|
|
||||||
|
|
||||||
.label {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
visibility: hidden;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -22,6 +22,5 @@ export default {
|
||||||
EXPANDED: 'expanded',
|
EXPANDED: 'expanded',
|
||||||
},
|
},
|
||||||
DOCS_URL: '//www.chatwoot.com/docs/product/',
|
DOCS_URL: '//www.chatwoot.com/docs/product/',
|
||||||
TESTIMONIAL_URL: 'https://testimonials.cdn.chatwoot.com/content.json',
|
|
||||||
};
|
};
|
||||||
export const DEFAULT_REDIRECT_URL = '/app/';
|
export const DEFAULT_REDIRECT_URL = '/app/';
|
||||||
|
|
|
@ -1,18 +1,13 @@
|
||||||
export const FEATURE_FLAGS = {
|
export const FEATURE_FLAGS = {
|
||||||
AGENT_BOTS: 'agent_bots',
|
AGENT_BOTS: 'agent_bots',
|
||||||
AGENT_MANAGEMENT: 'agent_management',
|
AGENT_MANAGEMENT: 'agent_management',
|
||||||
AUTO_RESOLVE_CONVERSATIONS: 'auto_resolve_conversations',
|
|
||||||
AUTOMATIONS: 'automations',
|
AUTOMATIONS: 'automations',
|
||||||
CAMPAIGNS: 'campaigns',
|
|
||||||
CANNED_RESPONSES: 'canned_responses',
|
CANNED_RESPONSES: 'canned_responses',
|
||||||
CRM: 'crm',
|
|
||||||
CUSTOM_ATTRIBUTES: 'custom_attributes',
|
CUSTOM_ATTRIBUTES: 'custom_attributes',
|
||||||
INBOX_MANAGEMENT: 'inbox_management',
|
INBOX_MANAGEMENT: 'inbox_management',
|
||||||
INTEGRATIONS: 'integrations',
|
INTEGRATIONS: 'integrations',
|
||||||
LABELS: 'labels',
|
LABELS: 'labels',
|
||||||
MACROS: 'macros',
|
MACROS: 'macros',
|
||||||
HELP_CENTER: 'help_center',
|
|
||||||
REPORTS: 'reports',
|
|
||||||
TEAM_MANAGEMENT: 'team_management',
|
TEAM_MANAGEMENT: 'team_management',
|
||||||
VOICE_RECORDER: 'voice_recorder',
|
VOICE_RECORDER: 'voice_recorder',
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
export const EXECUTED_A_MACRO = 'Executed a macro';
|
|
||||||
export const SENT_MESSAGE = 'Sent a message';
|
|
||||||
export const SENT_PRIVATE_NOTE = 'Sent a private note';
|
|
||||||
export const INSERTED_A_CANNED_RESPONSE = 'Inserted a canned response';
|
|
||||||
export const USED_MENTIONS = 'Used mentions';
|
|
||||||
export const MERGED_CONTACTS = 'Used merge contact option';
|
|
||||||
export const ADDED_TO_CANNED_RESPONSE = 'Used added to canned response option';
|
|
||||||
export const ADDED_A_CUSTOM_ATTRIBUTE = 'Added a custom attribute';
|
|
||||||
export const ADDED_AN_INBOX = 'Added an inbox';
|
|
|
@ -1,67 +0,0 @@
|
||||||
import { AnalyticsBrowser } from '@june-so/analytics-next';
|
|
||||||
|
|
||||||
class AnalyticsHelper {
|
|
||||||
constructor({ token: analyticsToken } = {}) {
|
|
||||||
this.analyticsToken = analyticsToken;
|
|
||||||
this.analytics = null;
|
|
||||||
this.user = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
async init() {
|
|
||||||
if (!this.analyticsToken) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let [analytics] = await AnalyticsBrowser.load({
|
|
||||||
writeKey: this.analyticsToken,
|
|
||||||
});
|
|
||||||
this.analytics = analytics;
|
|
||||||
}
|
|
||||||
|
|
||||||
identify(user) {
|
|
||||||
if (!this.analytics) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.user = user;
|
|
||||||
this.analytics.identify(this.user.email, {
|
|
||||||
userId: this.user.id,
|
|
||||||
email: this.user.email,
|
|
||||||
name: this.user.name,
|
|
||||||
avatar: this.user.avatar_url,
|
|
||||||
});
|
|
||||||
|
|
||||||
const { accounts, account_id: accountId } = this.user;
|
|
||||||
const [currentAccount] = accounts.filter(
|
|
||||||
account => account.id === accountId
|
|
||||||
);
|
|
||||||
if (currentAccount) {
|
|
||||||
this.analytics.group(currentAccount.id, this.user.id, {
|
|
||||||
name: currentAccount.name,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
track(eventName, properties = {}) {
|
|
||||||
if (!this.analytics) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.analytics.track({
|
|
||||||
userId: this.user.id,
|
|
||||||
event: eventName,
|
|
||||||
properties,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
page(params) {
|
|
||||||
if (!this.analytics) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.analytics.page(params);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export * as ANALYTICS_EVENTS from './events';
|
|
||||||
|
|
||||||
export default new AnalyticsHelper(window.analyticsConfig);
|
|
|
@ -75,16 +75,12 @@ export const conversationListPageURL = ({
|
||||||
url = `accounts/${accountId}/label/${label}`;
|
url = `accounts/${accountId}/label/${label}`;
|
||||||
} else if (teamId) {
|
} else if (teamId) {
|
||||||
url = `accounts/${accountId}/team/${teamId}`;
|
url = `accounts/${accountId}/team/${teamId}`;
|
||||||
|
} else if (conversationType === 'mention') {
|
||||||
|
url = `accounts/${accountId}/mentions/conversations`;
|
||||||
} else if (inboxId) {
|
} else if (inboxId) {
|
||||||
url = `accounts/${accountId}/inbox/${inboxId}`;
|
url = `accounts/${accountId}/inbox/${inboxId}`;
|
||||||
} else if (customViewId) {
|
} else if (customViewId) {
|
||||||
url = `accounts/${accountId}/custom_view/${customViewId}`;
|
url = `accounts/${accountId}/custom_view/${customViewId}`;
|
||||||
} else if (conversationType) {
|
|
||||||
const urlMap = {
|
|
||||||
mention: 'mentions/conversations',
|
|
||||||
unattended: 'unattended/conversations',
|
|
||||||
};
|
|
||||||
url = `accounts/${accountId}/${urlMap[conversationType]}`;
|
|
||||||
}
|
}
|
||||||
return frontendURL(url);
|
return frontendURL(url);
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,22 +17,13 @@ const formatArray = params => {
|
||||||
return params;
|
return params;
|
||||||
};
|
};
|
||||||
|
|
||||||
const generatePayloadForObject = item => {
|
|
||||||
if (item.action_params.id) {
|
|
||||||
item.action_params = [item.action_params.id];
|
|
||||||
} else {
|
|
||||||
item.action_params = [item.action_params];
|
|
||||||
}
|
|
||||||
return item.action_params;
|
|
||||||
};
|
|
||||||
|
|
||||||
const generatePayload = data => {
|
const generatePayload = data => {
|
||||||
const actions = JSON.parse(JSON.stringify(data));
|
const actions = JSON.parse(JSON.stringify(data));
|
||||||
let payload = actions.map(item => {
|
let payload = actions.map(item => {
|
||||||
if (Array.isArray(item.action_params)) {
|
if (Array.isArray(item.action_params)) {
|
||||||
item.action_params = formatArray(item.action_params);
|
item.action_params = formatArray(item.action_params);
|
||||||
} else if (typeof item.action_params === 'object') {
|
} else if (typeof item.action_params === 'object') {
|
||||||
item.action_params = generatePayloadForObject(item);
|
item.action_params = [item.action_params.id];
|
||||||
} else if (!item.action_params) {
|
} else if (!item.action_params) {
|
||||||
item.action_params = [];
|
item.action_params = [];
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -60,11 +60,15 @@ export const getFormattedPreChatFields = ({ preChatFields }) => {
|
||||||
return {
|
return {
|
||||||
...item,
|
...item,
|
||||||
label: getLabel({
|
label: getLabel({
|
||||||
key: item.name,
|
key: standardFieldKeys[item.name]
|
||||||
|
? standardFieldKeys[item.name].key
|
||||||
|
: item.name,
|
||||||
label: item.label ? item.label : item.name,
|
label: item.label ? item.label : item.name,
|
||||||
}),
|
}),
|
||||||
placeholder: getPlaceHolder({
|
placeholder: getPlaceHolder({
|
||||||
key: item.name,
|
key: standardFieldKeys[item.name]
|
||||||
|
? standardFieldKeys[item.name].key
|
||||||
|
: item.name,
|
||||||
placeholder: item.placeholder ? item.placeholder : item.name,
|
placeholder: item.placeholder ? item.placeholder : item.name,
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import AnalyticsHelper from './AnalyticsHelper';
|
import posthog from 'posthog-js';
|
||||||
|
|
||||||
export const CHATWOOT_SET_USER = 'CHATWOOT_SET_USER';
|
export const CHATWOOT_SET_USER = 'CHATWOOT_SET_USER';
|
||||||
export const CHATWOOT_RESET = 'CHATWOOT_RESET';
|
export const CHATWOOT_RESET = 'CHATWOOT_RESET';
|
||||||
|
@ -8,9 +8,16 @@ export const ANALYTICS_RESET = 'ANALYTICS_RESET';
|
||||||
|
|
||||||
export const initializeAnalyticsEvents = () => {
|
export const initializeAnalyticsEvents = () => {
|
||||||
window.bus.$on(ANALYTICS_IDENTITY, ({ user }) => {
|
window.bus.$on(ANALYTICS_IDENTITY, ({ user }) => {
|
||||||
AnalyticsHelper.identify(user);
|
if (window.analyticsConfig) {
|
||||||
|
posthog.identify(user.id, { name: user.name, email: user.email });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
window.bus.$on(ANALYTICS_RESET, () => {
|
||||||
|
if (window.analyticsConfig) {
|
||||||
|
posthog.reset();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
window.bus.$on(ANALYTICS_RESET, () => {});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const initializeChatwootEvents = () => {
|
export const initializeChatwootEvents = () => {
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "المحادثات",
|
"TAB_HEADING": "المحادثات",
|
||||||
"MENTION_HEADING": "الإشارات",
|
"MENTION_HEADING": "الإشارات",
|
||||||
"UNATTENDED_HEADING": "بدون حضور",
|
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "البحث عن جهات الاتصال، المحادثات، قوالب الردود الجاهزة .."
|
"INPUT": "البحث عن جهات الاتصال، المحادثات، قوالب الردود الجاهزة .."
|
||||||
},
|
},
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
"REPLY_TO_TWEET": "الرد على هذه التغريدة",
|
"REPLY_TO_TWEET": "الرد على هذه التغريدة",
|
||||||
"LINK_TO_STORY": "الذهاب إلى قصة الإنستقرام",
|
"LINK_TO_STORY": "الذهاب إلى قصة الإنستقرام",
|
||||||
"SENT": "Sent successfully",
|
"SENT": "Sent successfully",
|
||||||
"READ": "Read successfully",
|
|
||||||
"DELIVERED": "Delivered successfully",
|
|
||||||
"NO_MESSAGES": "لا توجد رسائل",
|
"NO_MESSAGES": "لا توجد رسائل",
|
||||||
"NO_CONTENT": "لم يتم العثور على محتوى",
|
"NO_CONTENT": "لم يتم العثور على محتوى",
|
||||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
||||||
|
|
|
@ -41,10 +41,6 @@
|
||||||
"NO_RESPONSE": "لا توجد استجابة",
|
"NO_RESPONSE": "لا توجد استجابة",
|
||||||
"RATING_TITLE": "التقييم",
|
"RATING_TITLE": "التقييم",
|
||||||
"FEEDBACK_TITLE": "الملاحظات",
|
"FEEDBACK_TITLE": "الملاحظات",
|
||||||
"CARD": {
|
|
||||||
"SHOW_LABELS": "Show labels",
|
|
||||||
"HIDE_LABELS": "Hide labels"
|
|
||||||
},
|
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "إغلاق المحادثة",
|
"RESOLVE_ACTION": "إغلاق المحادثة",
|
||||||
"REOPEN_ACTION": "إعادة فتح",
|
"REOPEN_ACTION": "إعادة فتح",
|
||||||
|
@ -68,7 +64,6 @@
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "تحديد كمعلق",
|
"PENDING": "تحديد كمعلق",
|
||||||
"RESOLVED": "تحديد كمحلولة",
|
"RESOLVED": "تحديد كمحلولة",
|
||||||
"MARK_AS_UNREAD": "Mark as unread",
|
|
||||||
"REOPEN": "إعادة فتح المحادثة",
|
"REOPEN": "إعادة فتح المحادثة",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "غفوة",
|
"TITLE": "غفوة",
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"EMOJI": {
|
|
||||||
"PLACEHOLDER": "Search emojis",
|
|
||||||
"NOT_FOUND": "No emoji match your search"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,7 +23,7 @@
|
||||||
"ERROR": "الرجاء إدخال اسم حساب صحيح"
|
"ERROR": "الرجاء إدخال اسم حساب صحيح"
|
||||||
},
|
},
|
||||||
"LANGUAGE": {
|
"LANGUAGE": {
|
||||||
"LABEL": "Site language",
|
"LABEL": "لغة الموقع (تجريبي)",
|
||||||
"PLACEHOLDER": "اسم الحساب الخاص بك",
|
"PLACEHOLDER": "اسم الحساب الخاص بك",
|
||||||
"ERROR": ""
|
"ERROR": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "رقم الهاتف",
|
"LABEL": "رقم الهاتف",
|
||||||
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "عنوان Callback URL",
|
"TITLE": "عنوان Callback URL",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "رقم الهاتف",
|
"LABEL": "رقم الهاتف",
|
||||||
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "إنشاء قناة عرض التردد",
|
"SUBMIT_BUTTON": "إنشاء قناة عرض التردد",
|
||||||
"API": {
|
"API": {
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "رقم الهاتف",
|
"LABEL": "رقم الهاتف",
|
||||||
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "رقم الهاتف",
|
"LABEL": "رقم الهاتف",
|
||||||
|
@ -388,10 +388,6 @@
|
||||||
"ENABLED": "مفعل",
|
"ENABLED": "مفعل",
|
||||||
"DISABLED": "معطّل"
|
"DISABLED": "معطّل"
|
||||||
},
|
},
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": {
|
|
||||||
"ENABLED": "مفعل",
|
|
||||||
"DISABLED": "معطّل"
|
|
||||||
},
|
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "تمكين"
|
"LABEL": "تمكين"
|
||||||
}
|
}
|
||||||
|
@ -445,8 +441,6 @@
|
||||||
"ENABLE_CSAT_SUB_TEXT": "تمكين/تعطيل تقييم خدمة العملاء بعد إنتهاء المحادثة",
|
"ENABLE_CSAT_SUB_TEXT": "تمكين/تعطيل تقييم خدمة العملاء بعد إنتهاء المحادثة",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "تمكين استمرارية المحادثة عبر البريد الإلكتروني",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "تمكين استمرارية المحادثة عبر البريد الإلكتروني",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "المحادثات ستستمر عبر البريد الإلكتروني إذا كان عنوان البريد الإلكتروني لجهة الاتصال متاحاً.",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "المحادثات ستستمر عبر البريد الإلكتروني إذا كان عنوان البريد الإلكتروني لجهة الاتصال متاحاً.",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
|
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
|
|
||||||
"INBOX_UPDATE_TITLE": "إعدادات قناة التواصل",
|
"INBOX_UPDATE_TITLE": "إعدادات قناة التواصل",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "تحديث إعدادات قناة التواصل",
|
"INBOX_UPDATE_SUB_TEXT": "تحديث إعدادات قناة التواصل",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "تمكين أو تعطيل الإسناد التلقائي للمحادثات الجديدة إلى الموظفين المضافين إلى قناة التواصل هذه.",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "تمكين أو تعطيل الإسناد التلقائي للمحادثات الجديدة إلى الموظفين المضافين إلى قناة التواصل هذه.",
|
||||||
|
|
|
@ -103,9 +103,7 @@
|
||||||
"متصل",
|
"متصل",
|
||||||
"مشغول",
|
"مشغول",
|
||||||
"غير متصل"
|
"غير متصل"
|
||||||
],
|
]
|
||||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
|
||||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
|
||||||
},
|
},
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "عنوان البريد الإلكتروني الخاص بك",
|
"LABEL": "عنوان البريد الإلكتروني الخاص بك",
|
||||||
|
@ -136,7 +134,6 @@
|
||||||
"SELECTOR_SUBTITLE": "اختر حساباً من القائمة التالية",
|
"SELECTOR_SUBTITLE": "اختر حساباً من القائمة التالية",
|
||||||
"PROFILE_SETTINGS": "إعدادات الملف الشخصي",
|
"PROFILE_SETTINGS": "إعدادات الملف الشخصي",
|
||||||
"KEYBOARD_SHORTCUTS": "اختصارات لوحة المفاتيح",
|
"KEYBOARD_SHORTCUTS": "اختصارات لوحة المفاتيح",
|
||||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
|
||||||
"LOGOUT": "تسجيل الخروج"
|
"LOGOUT": "تسجيل الخروج"
|
||||||
},
|
},
|
||||||
"APP_GLOBAL": {
|
"APP_GLOBAL": {
|
||||||
|
@ -180,7 +177,6 @@
|
||||||
"CONVERSATIONS": "المحادثات",
|
"CONVERSATIONS": "المحادثات",
|
||||||
"ALL_CONVERSATIONS": "كل المحادثات",
|
"ALL_CONVERSATIONS": "كل المحادثات",
|
||||||
"MENTIONED_CONVERSATIONS": "الإشارات",
|
"MENTIONED_CONVERSATIONS": "الإشارات",
|
||||||
"UNATTENDED_CONVERSATIONS": "بدون حضور",
|
|
||||||
"REPORTS": "التقارير",
|
"REPORTS": "التقارير",
|
||||||
"SETTINGS": "الإعدادات",
|
"SETTINGS": "الإعدادات",
|
||||||
"CONTACTS": "جهات الاتصال",
|
"CONTACTS": "جهات الاتصال",
|
||||||
|
@ -229,10 +225,6 @@
|
||||||
"CATEGORY": "الفئة",
|
"CATEGORY": "الفئة",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "لم يتم العثور على فئات"
|
"CATEGORY_EMPTY_MESSAGE": "لم يتم العثور على فئات"
|
||||||
},
|
},
|
||||||
"SET_AUTO_OFFLINE": {
|
|
||||||
"TEXT": "Mark offline automatically",
|
|
||||||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
|
|
||||||
},
|
|
||||||
"DOCS": "قراءة المستندات"
|
"DOCS": "قراءة المستندات"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
|
@ -264,7 +256,7 @@
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "اسم الشركة",
|
"LABEL": "اسم الحساب",
|
||||||
"PLACEHOLDER": "مؤسسة Wayne"
|
"PLACEHOLDER": "مؤسسة Wayne"
|
||||||
},
|
},
|
||||||
"SUBMIT": "إرسال"
|
"SUBMIT": "إرسال"
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
"REGISTER": {
|
"REGISTER": {
|
||||||
"TRY_WOOT": "تسجيل حساب",
|
"TRY_WOOT": "تسجيل حساب",
|
||||||
"TITLE": "تسجيل",
|
"TITLE": "تسجيل",
|
||||||
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
|
|
||||||
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
|
|
||||||
"TERMS_ACCEPT": "من خلال التسجيل، فإنك توافق على <a href=\"https://www.chatwoot.com/terms\">شروط الخدمة</a> و <a href=\"https://www.chatwoot.com/privacy-policy\">سياسة الخصوصية</a>",
|
"TERMS_ACCEPT": "من خلال التسجيل، فإنك توافق على <a href=\"https://www.chatwoot.com/terms\">شروط الخدمة</a> و <a href=\"https://www.chatwoot.com/privacy-policy\">سياسة الخصوصية</a>",
|
||||||
"COMPANY_NAME": {
|
"ACCOUNT_NAME": {
|
||||||
"LABEL": "Company name",
|
"LABEL": "اسم الحساب",
|
||||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
"PLACEHOLDER": "أدخل اسم الحساب. مثال: Wayne Enterprises",
|
||||||
"ERROR": "Company name is too short"
|
"ERROR": "اسم الحساب قصير جداً"
|
||||||
},
|
},
|
||||||
"FULL_NAME": {
|
"FULL_NAME": {
|
||||||
"LABEL": "الاسم الكامل",
|
"LABEL": "الاسم الكامل",
|
||||||
|
@ -18,7 +16,7 @@
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "البريد الإلكتروني للعمل",
|
"LABEL": "البريد الإلكتروني للعمل",
|
||||||
"PLACEHOLDER": "أدخل عنوان بريدك الإلكتروني للعمل. مثال: bruce@wayne.enterprises",
|
"PLACEHOLDER": "أدخل عنوان بريدك الإلكتروني للعمل. مثال: bruce@wayne.enterprises",
|
||||||
"ERROR": "Please enter a valid work email address"
|
"ERROR": "عنوان البريد الإلكتروني غير صالح"
|
||||||
},
|
},
|
||||||
"PASSWORD": {
|
"PASSWORD": {
|
||||||
"LABEL": "كلمة المرور",
|
"LABEL": "كلمة المرور",
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Разговори",
|
"TAB_HEADING": "Разговори",
|
||||||
"MENTION_HEADING": "Споменавания",
|
"MENTION_HEADING": "Споменавания",
|
||||||
"UNATTENDED_HEADING": "Unattended",
|
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Търсене на хора, чатове, запазени отговори .."
|
"INPUT": "Търсене на хора, чатове, запазени отговори .."
|
||||||
},
|
},
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
"REPLY_TO_TWEET": "Отговори на този туит",
|
"REPLY_TO_TWEET": "Отговори на този туит",
|
||||||
"LINK_TO_STORY": "Go to instagram story",
|
"LINK_TO_STORY": "Go to instagram story",
|
||||||
"SENT": "Успено изпратено",
|
"SENT": "Успено изпратено",
|
||||||
"READ": "Read successfully",
|
|
||||||
"DELIVERED": "Delivered successfully",
|
|
||||||
"NO_MESSAGES": "Няма съобщения",
|
"NO_MESSAGES": "Няма съобщения",
|
||||||
"NO_CONTENT": "Няма налично съдържание",
|
"NO_CONTENT": "Няма налично съдържание",
|
||||||
"HIDE_QUOTED_TEXT": "Скриване на цитирания текст",
|
"HIDE_QUOTED_TEXT": "Скриване на цитирания текст",
|
||||||
|
|
|
@ -41,10 +41,6 @@
|
||||||
"NO_RESPONSE": "No response",
|
"NO_RESPONSE": "No response",
|
||||||
"RATING_TITLE": "Rating",
|
"RATING_TITLE": "Rating",
|
||||||
"FEEDBACK_TITLE": "Feedback",
|
"FEEDBACK_TITLE": "Feedback",
|
||||||
"CARD": {
|
|
||||||
"SHOW_LABELS": "Show labels",
|
|
||||||
"HIDE_LABELS": "Hide labels"
|
|
||||||
},
|
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Resolve",
|
"RESOLVE_ACTION": "Resolve",
|
||||||
"REOPEN_ACTION": "Reopen",
|
"REOPEN_ACTION": "Reopen",
|
||||||
|
@ -68,7 +64,6 @@
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Mark as pending",
|
"PENDING": "Mark as pending",
|
||||||
"RESOLVED": "Mark as resolved",
|
"RESOLVED": "Mark as resolved",
|
||||||
"MARK_AS_UNREAD": "Mark as unread",
|
|
||||||
"REOPEN": "Reopen conversation",
|
"REOPEN": "Reopen conversation",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Snooze",
|
"TITLE": "Snooze",
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"EMOJI": {
|
|
||||||
"PLACEHOLDER": "Search emojis",
|
|
||||||
"NOT_FOUND": "No emoji match your search"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,7 +23,7 @@
|
||||||
"ERROR": "Please enter a valid account name"
|
"ERROR": "Please enter a valid account name"
|
||||||
},
|
},
|
||||||
"LANGUAGE": {
|
"LANGUAGE": {
|
||||||
"LABEL": "Site language",
|
"LABEL": "Site language (Beta)",
|
||||||
"PLACEHOLDER": "Your account name",
|
"PLACEHOLDER": "Your account name",
|
||||||
"ERROR": ""
|
"ERROR": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Phone number",
|
"LABEL": "Phone number",
|
||||||
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
|
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"TITLE": "Callback URL",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Телефон",
|
"LABEL": "Телефон",
|
||||||
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
|
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
||||||
"API": {
|
"API": {
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Phone number",
|
"LABEL": "Phone number",
|
||||||
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
|
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "Phone number ID",
|
"LABEL": "Phone number ID",
|
||||||
|
@ -388,10 +388,6 @@
|
||||||
"ENABLED": "Включен",
|
"ENABLED": "Включен",
|
||||||
"DISABLED": "Изключен"
|
"DISABLED": "Изключен"
|
||||||
},
|
},
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": {
|
|
||||||
"ENABLED": "Включен",
|
|
||||||
"DISABLED": "Изключен"
|
|
||||||
},
|
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "Enable"
|
"LABEL": "Enable"
|
||||||
}
|
}
|
||||||
|
@ -445,8 +441,6 @@
|
||||||
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
|
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
|
|
||||||
"INBOX_UPDATE_TITLE": "Inbox Settings",
|
"INBOX_UPDATE_TITLE": "Inbox Settings",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "Update your inbox settings",
|
"INBOX_UPDATE_SUB_TEXT": "Update your inbox settings",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "Enable or disable the automatic assignment of new conversations to the agents added to this inbox.",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "Enable or disable the automatic assignment of new conversations to the agents added to this inbox.",
|
||||||
|
|
|
@ -103,9 +103,7 @@
|
||||||
"Online",
|
"Online",
|
||||||
"Busy",
|
"Busy",
|
||||||
"Offline"
|
"Offline"
|
||||||
],
|
]
|
||||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
|
||||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
|
||||||
},
|
},
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Your email address",
|
"LABEL": "Your email address",
|
||||||
|
@ -136,7 +134,6 @@
|
||||||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||||
"PROFILE_SETTINGS": "Profile Settings",
|
"PROFILE_SETTINGS": "Profile Settings",
|
||||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
|
||||||
"LOGOUT": "Logout"
|
"LOGOUT": "Logout"
|
||||||
},
|
},
|
||||||
"APP_GLOBAL": {
|
"APP_GLOBAL": {
|
||||||
|
@ -180,7 +177,6 @@
|
||||||
"CONVERSATIONS": "Разговори",
|
"CONVERSATIONS": "Разговори",
|
||||||
"ALL_CONVERSATIONS": "All Conversations",
|
"ALL_CONVERSATIONS": "All Conversations",
|
||||||
"MENTIONED_CONVERSATIONS": "Споменавания",
|
"MENTIONED_CONVERSATIONS": "Споменавания",
|
||||||
"UNATTENDED_CONVERSATIONS": "Unattended",
|
|
||||||
"REPORTS": "Reports",
|
"REPORTS": "Reports",
|
||||||
"SETTINGS": "Settings",
|
"SETTINGS": "Settings",
|
||||||
"CONTACTS": "Контакти",
|
"CONTACTS": "Контакти",
|
||||||
|
@ -229,10 +225,6 @@
|
||||||
"CATEGORY": "Category",
|
"CATEGORY": "Category",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "No categories found"
|
"CATEGORY_EMPTY_MESSAGE": "No categories found"
|
||||||
},
|
},
|
||||||
"SET_AUTO_OFFLINE": {
|
|
||||||
"TEXT": "Mark offline automatically",
|
|
||||||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
|
|
||||||
},
|
|
||||||
"DOCS": "Read docs"
|
"DOCS": "Read docs"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
|
@ -264,7 +256,7 @@
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Име на фирма",
|
"LABEL": "Account Name",
|
||||||
"PLACEHOLDER": "Wayne Enterprises"
|
"PLACEHOLDER": "Wayne Enterprises"
|
||||||
},
|
},
|
||||||
"SUBMIT": "Изпращане"
|
"SUBMIT": "Изпращане"
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
"REGISTER": {
|
"REGISTER": {
|
||||||
"TRY_WOOT": "Register an account",
|
"TRY_WOOT": "Register an account",
|
||||||
"TITLE": "Register",
|
"TITLE": "Register",
|
||||||
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
|
|
||||||
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
|
|
||||||
"TERMS_ACCEPT": "By signing up, you agree to our <a href=\"https://www.chatwoot.com/terms\">T & C</a> and <a href=\"https://www.chatwoot.com/privacy-policy\">Privacy policy</a>",
|
"TERMS_ACCEPT": "By signing up, you agree to our <a href=\"https://www.chatwoot.com/terms\">T & C</a> and <a href=\"https://www.chatwoot.com/privacy-policy\">Privacy policy</a>",
|
||||||
"COMPANY_NAME": {
|
"ACCOUNT_NAME": {
|
||||||
"LABEL": "Company name",
|
"LABEL": "Account name",
|
||||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
"PLACEHOLDER": "Enter an account name. eg: Wayne Enterprises",
|
||||||
"ERROR": "Company name is too short"
|
"ERROR": "Account name is too short"
|
||||||
},
|
},
|
||||||
"FULL_NAME": {
|
"FULL_NAME": {
|
||||||
"LABEL": "Full name",
|
"LABEL": "Full name",
|
||||||
|
@ -18,7 +16,7 @@
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Work email",
|
"LABEL": "Work email",
|
||||||
"PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises",
|
"PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises",
|
||||||
"ERROR": "Please enter a valid work email address"
|
"ERROR": "Email address is invalid"
|
||||||
},
|
},
|
||||||
"PASSWORD": {
|
"PASSWORD": {
|
||||||
"LABEL": "Password",
|
"LABEL": "Password",
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Converses",
|
"TAB_HEADING": "Converses",
|
||||||
"MENTION_HEADING": "Mencions",
|
"MENTION_HEADING": "Mencions",
|
||||||
"UNATTENDED_HEADING": "Unattended",
|
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Cerca persones, xats, respostes desades .."
|
"INPUT": "Cerca persones, xats, respostes desades .."
|
||||||
},
|
},
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
"REPLY_TO_TWEET": "Respon a aquest tuit",
|
"REPLY_TO_TWEET": "Respon a aquest tuit",
|
||||||
"LINK_TO_STORY": "Ves a la història d'instagram",
|
"LINK_TO_STORY": "Ves a la història d'instagram",
|
||||||
"SENT": "Enviat correctament",
|
"SENT": "Enviat correctament",
|
||||||
"READ": "Read successfully",
|
|
||||||
"DELIVERED": "Delivered successfully",
|
|
||||||
"NO_MESSAGES": "Cap Missatge",
|
"NO_MESSAGES": "Cap Missatge",
|
||||||
"NO_CONTENT": "No hi ha contingut disponible",
|
"NO_CONTENT": "No hi ha contingut disponible",
|
||||||
"HIDE_QUOTED_TEXT": "Amaga text entre cometes",
|
"HIDE_QUOTED_TEXT": "Amaga text entre cometes",
|
||||||
|
|
|
@ -41,10 +41,6 @@
|
||||||
"NO_RESPONSE": "Sense resposta",
|
"NO_RESPONSE": "Sense resposta",
|
||||||
"RATING_TITLE": "Rating",
|
"RATING_TITLE": "Rating",
|
||||||
"FEEDBACK_TITLE": "Feedback",
|
"FEEDBACK_TITLE": "Feedback",
|
||||||
"CARD": {
|
|
||||||
"SHOW_LABELS": "Show labels",
|
|
||||||
"HIDE_LABELS": "Hide labels"
|
|
||||||
},
|
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Resoldre",
|
"RESOLVE_ACTION": "Resoldre",
|
||||||
"REOPEN_ACTION": "Tornar a obrir",
|
"REOPEN_ACTION": "Tornar a obrir",
|
||||||
|
@ -68,7 +64,6 @@
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Mark as pending",
|
"PENDING": "Mark as pending",
|
||||||
"RESOLVED": "Mark as resolved",
|
"RESOLVED": "Mark as resolved",
|
||||||
"MARK_AS_UNREAD": "Mark as unread",
|
|
||||||
"REOPEN": "Torna a obrir la conversa",
|
"REOPEN": "Torna a obrir la conversa",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Snooze",
|
"TITLE": "Snooze",
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"EMOJI": {
|
|
||||||
"PLACEHOLDER": "Search emojis",
|
|
||||||
"NOT_FOUND": "No emoji match your search"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,7 +23,7 @@
|
||||||
"ERROR": "Introduïu un nom de compte vàlid"
|
"ERROR": "Introduïu un nom de compte vàlid"
|
||||||
},
|
},
|
||||||
"LANGUAGE": {
|
"LANGUAGE": {
|
||||||
"LABEL": "Site language",
|
"LABEL": "Idioma del lloc (Beta)",
|
||||||
"PLACEHOLDER": "El nom del vostre compte",
|
"PLACEHOLDER": "El nom del vostre compte",
|
||||||
"ERROR": ""
|
"ERROR": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Número de telèfon",
|
"LABEL": "Número de telèfon",
|
||||||
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
|
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Introduïu un valor vàlid. El número de telèfon hauria de començar amb el signe `+`."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"TITLE": "Callback URL",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Número de telèfon",
|
"LABEL": "Número de telèfon",
|
||||||
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
|
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Introduïu un valor vàlid. El número de telèfon hauria de començar amb el signe `+`."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
||||||
"API": {
|
"API": {
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Número de telèfon",
|
"LABEL": "Número de telèfon",
|
||||||
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
|
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Introduïu un valor vàlid. El número de telèfon hauria de començar amb el signe `+`."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "Phone number ID",
|
"LABEL": "Phone number ID",
|
||||||
|
@ -388,10 +388,6 @@
|
||||||
"ENABLED": "Habilita",
|
"ENABLED": "Habilita",
|
||||||
"DISABLED": "Inhabilita"
|
"DISABLED": "Inhabilita"
|
||||||
},
|
},
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": {
|
|
||||||
"ENABLED": "Habilita",
|
|
||||||
"DISABLED": "Inhabilita"
|
|
||||||
},
|
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "Enable"
|
"LABEL": "Enable"
|
||||||
}
|
}
|
||||||
|
@ -445,8 +441,6 @@
|
||||||
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
|
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
|
|
||||||
"INBOX_UPDATE_TITLE": "Configuració de la safata d'entrada",
|
"INBOX_UPDATE_TITLE": "Configuració de la safata d'entrada",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "Actualitza la configuració de la safata d'entrada",
|
"INBOX_UPDATE_SUB_TEXT": "Actualitza la configuració de la safata d'entrada",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "Activa o desactiva l'assignació automàtica d'agents disponibles a les noves converses",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "Activa o desactiva l'assignació automàtica d'agents disponibles a les noves converses",
|
||||||
|
|
|
@ -103,9 +103,7 @@
|
||||||
"En línia",
|
"En línia",
|
||||||
"Ocupat",
|
"Ocupat",
|
||||||
"Fora de línia"
|
"Fora de línia"
|
||||||
],
|
]
|
||||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
|
||||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
|
||||||
},
|
},
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "La teva adreça de correu electrònic",
|
"LABEL": "La teva adreça de correu electrònic",
|
||||||
|
@ -136,7 +134,6 @@
|
||||||
"SELECTOR_SUBTITLE": "Selecciona un compte de la llista següent",
|
"SELECTOR_SUBTITLE": "Selecciona un compte de la llista següent",
|
||||||
"PROFILE_SETTINGS": "Configuració del Perfil",
|
"PROFILE_SETTINGS": "Configuració del Perfil",
|
||||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
|
||||||
"LOGOUT": "Sortir"
|
"LOGOUT": "Sortir"
|
||||||
},
|
},
|
||||||
"APP_GLOBAL": {
|
"APP_GLOBAL": {
|
||||||
|
@ -180,7 +177,6 @@
|
||||||
"CONVERSATIONS": "Converses",
|
"CONVERSATIONS": "Converses",
|
||||||
"ALL_CONVERSATIONS": "All Conversations",
|
"ALL_CONVERSATIONS": "All Conversations",
|
||||||
"MENTIONED_CONVERSATIONS": "Mencions",
|
"MENTIONED_CONVERSATIONS": "Mencions",
|
||||||
"UNATTENDED_CONVERSATIONS": "Unattended",
|
|
||||||
"REPORTS": "Informes",
|
"REPORTS": "Informes",
|
||||||
"SETTINGS": "Configuracions",
|
"SETTINGS": "Configuracions",
|
||||||
"CONTACTS": "Contactes",
|
"CONTACTS": "Contactes",
|
||||||
|
@ -229,10 +225,6 @@
|
||||||
"CATEGORY": "Category",
|
"CATEGORY": "Category",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "No categories found"
|
"CATEGORY_EMPTY_MESSAGE": "No categories found"
|
||||||
},
|
},
|
||||||
"SET_AUTO_OFFLINE": {
|
|
||||||
"TEXT": "Mark offline automatically",
|
|
||||||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
|
|
||||||
},
|
|
||||||
"DOCS": "Read docs"
|
"DOCS": "Read docs"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
|
@ -264,7 +256,7 @@
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Nom de la companyia",
|
"LABEL": "Nom del compte",
|
||||||
"PLACEHOLDER": "Wayne Enterprises"
|
"PLACEHOLDER": "Wayne Enterprises"
|
||||||
},
|
},
|
||||||
"SUBMIT": "Envia"
|
"SUBMIT": "Envia"
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
"REGISTER": {
|
"REGISTER": {
|
||||||
"TRY_WOOT": "Registra un compte",
|
"TRY_WOOT": "Registra un compte",
|
||||||
"TITLE": "Registre",
|
"TITLE": "Registre",
|
||||||
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
|
|
||||||
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
|
|
||||||
"TERMS_ACCEPT": "En registrar-vos, esteu d’acord amb el nostre <a href=\"https://www.chatwoot.com/terms\">T & C</a> i <a href=\"https://www.chatwoot.com/privacy-policy\">Polítiques de Privadesa</a>",
|
"TERMS_ACCEPT": "En registrar-vos, esteu d’acord amb el nostre <a href=\"https://www.chatwoot.com/terms\">T & C</a> i <a href=\"https://www.chatwoot.com/privacy-policy\">Polítiques de Privadesa</a>",
|
||||||
"COMPANY_NAME": {
|
"ACCOUNT_NAME": {
|
||||||
"LABEL": "Company name",
|
"LABEL": "Nom del compte",
|
||||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
"PLACEHOLDER": "Introdueix el nom del compte. ex: Wayne Enterprises",
|
||||||
"ERROR": "Company name is too short"
|
"ERROR": "El nom del compte és massa curt"
|
||||||
},
|
},
|
||||||
"FULL_NAME": {
|
"FULL_NAME": {
|
||||||
"LABEL": "Nom complet",
|
"LABEL": "Nom complet",
|
||||||
|
@ -18,7 +16,7 @@
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Email de treball",
|
"LABEL": "Email de treball",
|
||||||
"PLACEHOLDER": "Introdueix la teva adreça email de treball. ex: bruce@wayne.enterprises",
|
"PLACEHOLDER": "Introdueix la teva adreça email de treball. ex: bruce@wayne.enterprises",
|
||||||
"ERROR": "Please enter a valid work email address"
|
"ERROR": "Adreça email invàlida"
|
||||||
},
|
},
|
||||||
"PASSWORD": {
|
"PASSWORD": {
|
||||||
"LABEL": "Contrasenya",
|
"LABEL": "Contrasenya",
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Konverzace",
|
"TAB_HEADING": "Konverzace",
|
||||||
"MENTION_HEADING": "Zmínky",
|
"MENTION_HEADING": "Zmínky",
|
||||||
"UNATTENDED_HEADING": "Unattended",
|
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Hledat lidi, chaty, Uložené odpovědi .."
|
"INPUT": "Hledat lidi, chaty, Uložené odpovědi .."
|
||||||
},
|
},
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
"REPLY_TO_TWEET": "Odpovědět na tento tweet",
|
"REPLY_TO_TWEET": "Odpovědět na tento tweet",
|
||||||
"LINK_TO_STORY": "Přejít na instagram příběh",
|
"LINK_TO_STORY": "Přejít na instagram příběh",
|
||||||
"SENT": "Úspěšně odesláno",
|
"SENT": "Úspěšně odesláno",
|
||||||
"READ": "Read successfully",
|
|
||||||
"DELIVERED": "Delivered successfully",
|
|
||||||
"NO_MESSAGES": "Žádné zprávy",
|
"NO_MESSAGES": "Žádné zprávy",
|
||||||
"NO_CONTENT": "Žádný obsah k dispozici",
|
"NO_CONTENT": "Žádný obsah k dispozici",
|
||||||
"HIDE_QUOTED_TEXT": "Skrýt citovaný text",
|
"HIDE_QUOTED_TEXT": "Skrýt citovaný text",
|
||||||
|
|
|
@ -41,10 +41,6 @@
|
||||||
"NO_RESPONSE": "Bez odpovědi",
|
"NO_RESPONSE": "Bez odpovědi",
|
||||||
"RATING_TITLE": "Hodnocení",
|
"RATING_TITLE": "Hodnocení",
|
||||||
"FEEDBACK_TITLE": "Zpětná vazba",
|
"FEEDBACK_TITLE": "Zpětná vazba",
|
||||||
"CARD": {
|
|
||||||
"SHOW_LABELS": "Show labels",
|
|
||||||
"HIDE_LABELS": "Hide labels"
|
|
||||||
},
|
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Vyřešit",
|
"RESOLVE_ACTION": "Vyřešit",
|
||||||
"REOPEN_ACTION": "Znovu otevřít",
|
"REOPEN_ACTION": "Znovu otevřít",
|
||||||
|
@ -68,7 +64,6 @@
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Označit jako nevyřízené",
|
"PENDING": "Označit jako nevyřízené",
|
||||||
"RESOLVED": "Označit jako vyřešené",
|
"RESOLVED": "Označit jako vyřešené",
|
||||||
"MARK_AS_UNREAD": "Mark as unread",
|
|
||||||
"REOPEN": "Znovu otevřít konverzaci",
|
"REOPEN": "Znovu otevřít konverzaci",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Odložit",
|
"TITLE": "Odložit",
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"EMOJI": {
|
|
||||||
"PLACEHOLDER": "Search emojis",
|
|
||||||
"NOT_FOUND": "No emoji match your search"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,7 +23,7 @@
|
||||||
"ERROR": "Zadejte prosím platný název účtu"
|
"ERROR": "Zadejte prosím platný název účtu"
|
||||||
},
|
},
|
||||||
"LANGUAGE": {
|
"LANGUAGE": {
|
||||||
"LABEL": "Site language",
|
"LABEL": "Jazyk webu (Beta)",
|
||||||
"PLACEHOLDER": "Název vašeho účtu",
|
"PLACEHOLDER": "Název vašeho účtu",
|
||||||
"ERROR": ""
|
"ERROR": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonní číslo",
|
"LABEL": "Telefonní číslo",
|
||||||
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
|
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Zadejte platnou hodnotu. Telefonní číslo by mělo začínat znakem `+`."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"TITLE": "Callback URL",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonní číslo",
|
"LABEL": "Telefonní číslo",
|
||||||
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
|
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Zadejte platnou hodnotu. Telefonní číslo by mělo začínat znakem `+`."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
||||||
"API": {
|
"API": {
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonní číslo",
|
"LABEL": "Telefonní číslo",
|
||||||
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
|
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Zadejte platnou hodnotu. Telefonní číslo by mělo začínat znakem `+`."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "Phone number ID",
|
"LABEL": "Phone number ID",
|
||||||
|
@ -388,10 +388,6 @@
|
||||||
"ENABLED": "Povoleno",
|
"ENABLED": "Povoleno",
|
||||||
"DISABLED": "Zakázáno"
|
"DISABLED": "Zakázáno"
|
||||||
},
|
},
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": {
|
|
||||||
"ENABLED": "Povoleno",
|
|
||||||
"DISABLED": "Zakázáno"
|
|
||||||
},
|
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "Enable"
|
"LABEL": "Enable"
|
||||||
}
|
}
|
||||||
|
@ -445,8 +441,6 @@
|
||||||
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
|
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
|
|
||||||
"INBOX_UPDATE_TITLE": "Nastavení doručené pošty",
|
"INBOX_UPDATE_TITLE": "Nastavení doručené pošty",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "Aktualizujte nastavení doručené pošty",
|
"INBOX_UPDATE_SUB_TEXT": "Aktualizujte nastavení doručené pošty",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "Povolit nebo zakázat automatické přiřazování nových konverzací agentům přidaným do této schránky.",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "Povolit nebo zakázat automatické přiřazování nových konverzací agentům přidaným do této schránky.",
|
||||||
|
|
|
@ -103,9 +103,7 @@
|
||||||
"Online",
|
"Online",
|
||||||
"Zaneprázdněn",
|
"Zaneprázdněn",
|
||||||
"Offline"
|
"Offline"
|
||||||
],
|
]
|
||||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
|
||||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
|
||||||
},
|
},
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Vaše e-mailová adresa",
|
"LABEL": "Vaše e-mailová adresa",
|
||||||
|
@ -136,7 +134,6 @@
|
||||||
"SELECTOR_SUBTITLE": "Vyberte účet z následujícího seznamu",
|
"SELECTOR_SUBTITLE": "Vyberte účet z následujícího seznamu",
|
||||||
"PROFILE_SETTINGS": "Nastavení profilu",
|
"PROFILE_SETTINGS": "Nastavení profilu",
|
||||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
|
||||||
"LOGOUT": "Odhlásit se"
|
"LOGOUT": "Odhlásit se"
|
||||||
},
|
},
|
||||||
"APP_GLOBAL": {
|
"APP_GLOBAL": {
|
||||||
|
@ -180,7 +177,6 @@
|
||||||
"CONVERSATIONS": "Konverzace",
|
"CONVERSATIONS": "Konverzace",
|
||||||
"ALL_CONVERSATIONS": "All Conversations",
|
"ALL_CONVERSATIONS": "All Conversations",
|
||||||
"MENTIONED_CONVERSATIONS": "Zmínky",
|
"MENTIONED_CONVERSATIONS": "Zmínky",
|
||||||
"UNATTENDED_CONVERSATIONS": "Unattended",
|
|
||||||
"REPORTS": "Zprávy",
|
"REPORTS": "Zprávy",
|
||||||
"SETTINGS": "Nastavení",
|
"SETTINGS": "Nastavení",
|
||||||
"CONTACTS": "Kontakty",
|
"CONTACTS": "Kontakty",
|
||||||
|
@ -229,10 +225,6 @@
|
||||||
"CATEGORY": "Category",
|
"CATEGORY": "Category",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "No categories found"
|
"CATEGORY_EMPTY_MESSAGE": "No categories found"
|
||||||
},
|
},
|
||||||
"SET_AUTO_OFFLINE": {
|
|
||||||
"TEXT": "Mark offline automatically",
|
|
||||||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
|
|
||||||
},
|
|
||||||
"DOCS": "Read docs"
|
"DOCS": "Read docs"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
|
@ -264,7 +256,7 @@
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Název společnosti",
|
"LABEL": "Název účtu",
|
||||||
"PLACEHOLDER": "Wayne podniky"
|
"PLACEHOLDER": "Wayne podniky"
|
||||||
},
|
},
|
||||||
"SUBMIT": "Odeslat"
|
"SUBMIT": "Odeslat"
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
"REGISTER": {
|
"REGISTER": {
|
||||||
"TRY_WOOT": "Registrovat účet",
|
"TRY_WOOT": "Registrovat účet",
|
||||||
"TITLE": "Registrovat se",
|
"TITLE": "Registrovat se",
|
||||||
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
|
|
||||||
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
|
|
||||||
"TERMS_ACCEPT": "Registrací souhlasíte s našimi <a href=\"https://www.chatwoot.com/terms\">T & C</a> a <a href=\"https://www.chatwoot.com/privacy-policy\">Zásadami ochrany osobních údajů</a>",
|
"TERMS_ACCEPT": "Registrací souhlasíte s našimi <a href=\"https://www.chatwoot.com/terms\">T & C</a> a <a href=\"https://www.chatwoot.com/privacy-policy\">Zásadami ochrany osobních údajů</a>",
|
||||||
"COMPANY_NAME": {
|
"ACCOUNT_NAME": {
|
||||||
"LABEL": "Company name",
|
"LABEL": "Název účtu",
|
||||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
"PLACEHOLDER": "Zadejte název účtu. např.: Novákova společnost",
|
||||||
"ERROR": "Company name is too short"
|
"ERROR": "Název účtu je příliš krátký"
|
||||||
},
|
},
|
||||||
"FULL_NAME": {
|
"FULL_NAME": {
|
||||||
"LABEL": "Celé jméno",
|
"LABEL": "Celé jméno",
|
||||||
|
@ -18,7 +16,7 @@
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Pracovní e-mail",
|
"LABEL": "Pracovní e-mail",
|
||||||
"PLACEHOLDER": "Zadejte svou pracovní e-mailovou adresu. např.: jan@novak.spolecnost",
|
"PLACEHOLDER": "Zadejte svou pracovní e-mailovou adresu. např.: jan@novak.spolecnost",
|
||||||
"ERROR": "Please enter a valid work email address"
|
"ERROR": "E-mailová adresa je neplatná"
|
||||||
},
|
},
|
||||||
"PASSWORD": {
|
"PASSWORD": {
|
||||||
"LABEL": "Heslo",
|
"LABEL": "Heslo",
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Samtaler",
|
"TAB_HEADING": "Samtaler",
|
||||||
"MENTION_HEADING": "Omtaler",
|
"MENTION_HEADING": "Omtaler",
|
||||||
"UNATTENDED_HEADING": "Unattet",
|
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Søg efter Mennesker, Chats, Gemte svar .."
|
"INPUT": "Søg efter Mennesker, Chats, Gemte svar .."
|
||||||
},
|
},
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
"REPLY_TO_TWEET": "Svar på dette tweet",
|
"REPLY_TO_TWEET": "Svar på dette tweet",
|
||||||
"LINK_TO_STORY": "Gå til instagram historie",
|
"LINK_TO_STORY": "Gå til instagram historie",
|
||||||
"SENT": "Sendt med succes",
|
"SENT": "Sendt med succes",
|
||||||
"READ": "Read successfully",
|
|
||||||
"DELIVERED": "Delivered successfully",
|
|
||||||
"NO_MESSAGES": "Ingen Beskeder",
|
"NO_MESSAGES": "Ingen Beskeder",
|
||||||
"NO_CONTENT": "Intet tilgængeligt indhold",
|
"NO_CONTENT": "Intet tilgængeligt indhold",
|
||||||
"HIDE_QUOTED_TEXT": "Skjul Citeret Tekst",
|
"HIDE_QUOTED_TEXT": "Skjul Citeret Tekst",
|
||||||
|
|
|
@ -41,10 +41,6 @@
|
||||||
"NO_RESPONSE": "Intet svar",
|
"NO_RESPONSE": "Intet svar",
|
||||||
"RATING_TITLE": "Bedømmelse",
|
"RATING_TITLE": "Bedømmelse",
|
||||||
"FEEDBACK_TITLE": "Tilbagemelding",
|
"FEEDBACK_TITLE": "Tilbagemelding",
|
||||||
"CARD": {
|
|
||||||
"SHOW_LABELS": "Show labels",
|
|
||||||
"HIDE_LABELS": "Hide labels"
|
|
||||||
},
|
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Løs",
|
"RESOLVE_ACTION": "Løs",
|
||||||
"REOPEN_ACTION": "Genåben",
|
"REOPEN_ACTION": "Genåben",
|
||||||
|
@ -68,7 +64,6 @@
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Markér som afventende",
|
"PENDING": "Markér som afventende",
|
||||||
"RESOLVED": "Marker som løst",
|
"RESOLVED": "Marker som løst",
|
||||||
"MARK_AS_UNREAD": "Mark as unread",
|
|
||||||
"REOPEN": "Genåbn samtale",
|
"REOPEN": "Genåbn samtale",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Udsæt",
|
"TITLE": "Udsæt",
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"EMOJI": {
|
|
||||||
"PLACEHOLDER": "Search emojis",
|
|
||||||
"NOT_FOUND": "No emoji match your search"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,7 +23,7 @@
|
||||||
"ERROR": "Angiv et gyldigt kontonavn"
|
"ERROR": "Angiv et gyldigt kontonavn"
|
||||||
},
|
},
|
||||||
"LANGUAGE": {
|
"LANGUAGE": {
|
||||||
"LABEL": "Site language",
|
"LABEL": "Websted sprog (Beta)",
|
||||||
"PLACEHOLDER": "Dit kontonavn",
|
"PLACEHOLDER": "Dit kontonavn",
|
||||||
"ERROR": ""
|
"ERROR": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonnummer",
|
"LABEL": "Telefonnummer",
|
||||||
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"TITLE": "Callback URL",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonnummer",
|
"LABEL": "Telefonnummer",
|
||||||
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Opret Båndbredde Kanal",
|
"SUBMIT_BUTTON": "Opret Båndbredde Kanal",
|
||||||
"API": {
|
"API": {
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonnummer",
|
"LABEL": "Telefonnummer",
|
||||||
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "Telefonnummer ID",
|
"LABEL": "Telefonnummer ID",
|
||||||
|
@ -388,10 +388,6 @@
|
||||||
"ENABLED": "Aktiveret",
|
"ENABLED": "Aktiveret",
|
||||||
"DISABLED": "Deaktiveret"
|
"DISABLED": "Deaktiveret"
|
||||||
},
|
},
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": {
|
|
||||||
"ENABLED": "Aktiveret",
|
|
||||||
"DISABLED": "Deaktiveret"
|
|
||||||
},
|
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "Aktiver"
|
"LABEL": "Aktiver"
|
||||||
}
|
}
|
||||||
|
@ -445,8 +441,6 @@
|
||||||
"ENABLE_CSAT_SUB_TEXT": "Aktiver/deaktivér CSAT(Customer satisfaction) undersøgelse efter at have løst en samtale",
|
"ENABLE_CSAT_SUB_TEXT": "Aktiver/deaktivér CSAT(Customer satisfaction) undersøgelse efter at have løst en samtale",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "Aktivér konversationskontinuitet via e-mail",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "Aktivér konversationskontinuitet via e-mail",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Samtaler vil fortsætte via e-mail, hvis kontaktpersonens e-mailadresse er tilgængelig.",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Samtaler vil fortsætte via e-mail, hvis kontaktpersonens e-mailadresse er tilgængelig.",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
|
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
|
|
||||||
"INBOX_UPDATE_TITLE": "Indbakke Indstillinger",
|
"INBOX_UPDATE_TITLE": "Indbakke Indstillinger",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "Opdater dine indbakkeindstillinger",
|
"INBOX_UPDATE_SUB_TEXT": "Opdater dine indbakkeindstillinger",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "Aktiver eller deaktiver automatisk tildeling af nye samtaler til agenter tilføjet til denne indbakke.",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "Aktiver eller deaktiver automatisk tildeling af nye samtaler til agenter tilføjet til denne indbakke.",
|
||||||
|
|
|
@ -103,9 +103,7 @@
|
||||||
"Online",
|
"Online",
|
||||||
"Optaget",
|
"Optaget",
|
||||||
"Offline"
|
"Offline"
|
||||||
],
|
]
|
||||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
|
||||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
|
||||||
},
|
},
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Din e-mail adresse",
|
"LABEL": "Din e-mail adresse",
|
||||||
|
@ -136,7 +134,6 @@
|
||||||
"SELECTOR_SUBTITLE": "Vælg en konto fra følgende liste",
|
"SELECTOR_SUBTITLE": "Vælg en konto fra følgende liste",
|
||||||
"PROFILE_SETTINGS": "Profilindstillinger",
|
"PROFILE_SETTINGS": "Profilindstillinger",
|
||||||
"KEYBOARD_SHORTCUTS": "Tastaturgenveje",
|
"KEYBOARD_SHORTCUTS": "Tastaturgenveje",
|
||||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
|
||||||
"LOGOUT": "Log Ud"
|
"LOGOUT": "Log Ud"
|
||||||
},
|
},
|
||||||
"APP_GLOBAL": {
|
"APP_GLOBAL": {
|
||||||
|
@ -180,7 +177,6 @@
|
||||||
"CONVERSATIONS": "Samtaler",
|
"CONVERSATIONS": "Samtaler",
|
||||||
"ALL_CONVERSATIONS": "Alle Samtaler",
|
"ALL_CONVERSATIONS": "Alle Samtaler",
|
||||||
"MENTIONED_CONVERSATIONS": "Omtaler",
|
"MENTIONED_CONVERSATIONS": "Omtaler",
|
||||||
"UNATTENDED_CONVERSATIONS": "Unattet",
|
|
||||||
"REPORTS": "Rapporter",
|
"REPORTS": "Rapporter",
|
||||||
"SETTINGS": "Indstillinger",
|
"SETTINGS": "Indstillinger",
|
||||||
"CONTACTS": "Kontakter",
|
"CONTACTS": "Kontakter",
|
||||||
|
@ -229,10 +225,6 @@
|
||||||
"CATEGORY": "Kategori",
|
"CATEGORY": "Kategori",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "Ingen kategorier fundet"
|
"CATEGORY_EMPTY_MESSAGE": "Ingen kategorier fundet"
|
||||||
},
|
},
|
||||||
"SET_AUTO_OFFLINE": {
|
|
||||||
"TEXT": "Mark offline automatically",
|
|
||||||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
|
|
||||||
},
|
|
||||||
"DOCS": "Læs dokumenter"
|
"DOCS": "Læs dokumenter"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
|
@ -264,7 +256,7 @@
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Virksomhedens Navn",
|
"LABEL": "Kontonavn",
|
||||||
"PLACEHOLDER": "Wayne Enterprises"
|
"PLACEHOLDER": "Wayne Enterprises"
|
||||||
},
|
},
|
||||||
"SUBMIT": "Send"
|
"SUBMIT": "Send"
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
"REGISTER": {
|
"REGISTER": {
|
||||||
"TRY_WOOT": "Registrer en konto",
|
"TRY_WOOT": "Registrer en konto",
|
||||||
"TITLE": "Registrer",
|
"TITLE": "Registrer",
|
||||||
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
|
|
||||||
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
|
|
||||||
"TERMS_ACCEPT": "Ved at tilmelde dig, accepterer du vores <a href=\"https://www.chatwoot.com/terms\">T & C</a> og <a href=\"https://www.chatwoot.com/privacy-policy\">Privatlivspolitik</a>",
|
"TERMS_ACCEPT": "Ved at tilmelde dig, accepterer du vores <a href=\"https://www.chatwoot.com/terms\">T & C</a> og <a href=\"https://www.chatwoot.com/privacy-policy\">Privatlivspolitik</a>",
|
||||||
"COMPANY_NAME": {
|
"ACCOUNT_NAME": {
|
||||||
"LABEL": "Company name",
|
"LABEL": "Kontonavn",
|
||||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
"PLACEHOLDER": "Indtast et kontonavn, fx: Wayne Enterprises",
|
||||||
"ERROR": "Company name is too short"
|
"ERROR": "Kontonavn er for kort"
|
||||||
},
|
},
|
||||||
"FULL_NAME": {
|
"FULL_NAME": {
|
||||||
"LABEL": "Fulde navn",
|
"LABEL": "Fulde navn",
|
||||||
|
@ -18,7 +16,7 @@
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Arbejde e-mail",
|
"LABEL": "Arbejde e-mail",
|
||||||
"PLACEHOLDER": "Indtast din arbejdsmailadresse fx: bruce@wayne.enterprises",
|
"PLACEHOLDER": "Indtast din arbejdsmailadresse fx: bruce@wayne.enterprises",
|
||||||
"ERROR": "Please enter a valid work email address"
|
"ERROR": "E-mail adresse er ugyldig"
|
||||||
},
|
},
|
||||||
"PASSWORD": {
|
"PASSWORD": {
|
||||||
"LABEL": "Adgangskode",
|
"LABEL": "Adgangskode",
|
||||||
|
|
|
@ -1,39 +1,39 @@
|
||||||
{
|
{
|
||||||
"AGENT_BOTS": {
|
"AGENT_BOTS": {
|
||||||
"HEADER": "Bots",
|
"HEADER": "Bots",
|
||||||
"LOADING_EDITOR": "Editor wird geladen...",
|
"LOADING_EDITOR": "Loading Editor...",
|
||||||
"HEADER_BTN_TXT": "Bot-Konfiguration hinzufügen",
|
"HEADER_BTN_TXT": "Add Bot Configuration",
|
||||||
"SIDEBAR_TXT": "<p><b>Agenten Bots</b> <p>Agenten Bots erlauben es Ihnen, die Unterhaltungen zu automatisieren</p>",
|
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
|
||||||
"CSML_BOT_EDITOR": {
|
"CSML_BOT_EDITOR": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Bot Name",
|
"LABEL": "Bot Name",
|
||||||
"PLACEHOLDER": "Geben Sie Ihrem Bot einen Namen",
|
"PLACEHOLDER": "Give your bot a name",
|
||||||
"ERROR": "Bot Name ist erforderlich"
|
"ERROR": "Bot name is required"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Bot Beschreibung",
|
"LABEL": "Bot Description",
|
||||||
"PLACEHOLDER": "Was macht dieser Bot?"
|
"PLACEHOLDER": "What does this bot do?"
|
||||||
},
|
},
|
||||||
"BOT_CONFIG": {
|
"BOT_CONFIG": {
|
||||||
"ERROR": "Bitte geben Sie Ihre CSML Bot-Konfiguration oben ein",
|
"ERROR": "Please enter your CSML bot configuration above",
|
||||||
"API_ERROR": "Ihre CSML-Konfiguration ist ungültig, bitte korrigieren Sie sie und versuchen es erneut."
|
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
|
||||||
},
|
},
|
||||||
"SUBMIT": "Validieren und speichern"
|
"SUBMIT": "Validate and save"
|
||||||
},
|
},
|
||||||
"BOT_CONFIGURATION": {
|
"BOT_CONFIGURATION": {
|
||||||
"TITLE": "Agenten-Bot auswählen",
|
"TITLE": "Select an agent bot",
|
||||||
"DESC": "Sie können einen Agenten-Bot aus der Liste in diesen Posteingang setzen. Der Bot kann die Unterhaltung anfangs bearbeiten und bei Bedarf an einen Agenten übertragen.",
|
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
|
||||||
"SUBMIT": "Aktualisieren",
|
"SUBMIT": "Aktualisieren",
|
||||||
"SUCCESS_MESSAGE": "Agenten-Bot erfolgreich aktualisiert",
|
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
|
||||||
"ERROR_MESSAGE": "Konnte den Agenten-Bot nicht aktualisieren, bitte versuchen Sie es später erneut",
|
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
|
||||||
"SELECT_PLACEHOLDER": "Bot auswählen"
|
"SELECT_PLACEHOLDER": "Select Bot"
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Neuen Bot konfigurieren",
|
"TITLE": "Configure new bot",
|
||||||
"CANCEL_BUTTON_TEXT": "Stornieren",
|
"CANCEL_BUTTON_TEXT": "Stornieren",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Bot erfolgreich hinzugefügt",
|
"SUCCESS_MESSAGE": "Bot added successfully",
|
||||||
"ERROR_MESSAGE": "Bot konnte nicht hinzugefügt werden, bitte versuchen Sie es später erneut"
|
"ERROR_MESSAGE": "Could not add bot, Please try again later"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LIST": {
|
"LIST": {
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Gespräche",
|
"TAB_HEADING": "Gespräche",
|
||||||
"MENTION_HEADING": "Erwähnungen",
|
"MENTION_HEADING": "Erwähnungen",
|
||||||
"UNATTENDED_HEADING": "Unbeaufsichtigt",
|
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Suche nach Personen, Chats, gespeicherten Antworten .."
|
"INPUT": "Suche nach Personen, Chats, gespeicherten Antworten .."
|
||||||
},
|
},
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
"REPLY_TO_TWEET": "Auf diesen Tweet antworten",
|
"REPLY_TO_TWEET": "Auf diesen Tweet antworten",
|
||||||
"LINK_TO_STORY": "Zur Instagram-Geschichte",
|
"LINK_TO_STORY": "Zur Instagram-Geschichte",
|
||||||
"SENT": "Erfolgreich gesendet",
|
"SENT": "Erfolgreich gesendet",
|
||||||
"READ": "Read successfully",
|
|
||||||
"DELIVERED": "Delivered successfully",
|
|
||||||
"NO_MESSAGES": "Keine Nachrichten",
|
"NO_MESSAGES": "Keine Nachrichten",
|
||||||
"NO_CONTENT": "Kein Inhalt verfügbar",
|
"NO_CONTENT": "Kein Inhalt verfügbar",
|
||||||
"HIDE_QUOTED_TEXT": "Zitierten Text ausblenden",
|
"HIDE_QUOTED_TEXT": "Zitierten Text ausblenden",
|
||||||
|
|
|
@ -41,10 +41,6 @@
|
||||||
"NO_RESPONSE": "Keine Antwort",
|
"NO_RESPONSE": "Keine Antwort",
|
||||||
"RATING_TITLE": "Bewertung",
|
"RATING_TITLE": "Bewertung",
|
||||||
"FEEDBACK_TITLE": "Feedback",
|
"FEEDBACK_TITLE": "Feedback",
|
||||||
"CARD": {
|
|
||||||
"SHOW_LABELS": "Show labels",
|
|
||||||
"HIDE_LABELS": "Hide labels"
|
|
||||||
},
|
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Fall schließen",
|
"RESOLVE_ACTION": "Fall schließen",
|
||||||
"REOPEN_ACTION": "Wieder öffnen",
|
"REOPEN_ACTION": "Wieder öffnen",
|
||||||
|
@ -68,7 +64,6 @@
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Als ausstehend markieren",
|
"PENDING": "Als ausstehend markieren",
|
||||||
"RESOLVED": "Als gelöst markieren",
|
"RESOLVED": "Als gelöst markieren",
|
||||||
"MARK_AS_UNREAD": "Mark as unread",
|
|
||||||
"REOPEN": "Konversation wieder öffnen",
|
"REOPEN": "Konversation wieder öffnen",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Erinnern",
|
"TITLE": "Erinnern",
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"EMOJI": {
|
|
||||||
"PLACEHOLDER": "Search emojis",
|
|
||||||
"NOT_FOUND": "No emoji match your search"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,7 +23,7 @@
|
||||||
"ERROR": "Bitte geben Sie einen gültigen Kontonamen ein"
|
"ERROR": "Bitte geben Sie einen gültigen Kontonamen ein"
|
||||||
},
|
},
|
||||||
"LANGUAGE": {
|
"LANGUAGE": {
|
||||||
"LABEL": "Site language",
|
"LABEL": "Site-Sprache (Beta)",
|
||||||
"PLACEHOLDER": "Ihr Kontoname",
|
"PLACEHOLDER": "Ihr Kontoname",
|
||||||
"ERROR": ""
|
"ERROR": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -362,7 +362,7 @@
|
||||||
},
|
},
|
||||||
"BUTTONS": {
|
"BUTTONS": {
|
||||||
"CREATE": "Kategorie erstellen",
|
"CREATE": "Kategorie erstellen",
|
||||||
"CANCEL": "Abbrechen"
|
"CANCEL": "Stornieren"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Kategorie erfolgreich erstellt",
|
"SUCCESS_MESSAGE": "Kategorie erfolgreich erstellt",
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonnummer",
|
"LABEL": "Telefonnummer",
|
||||||
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
|
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"TITLE": "Callback URL",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonnummer",
|
"LABEL": "Telefonnummer",
|
||||||
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
|
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Bitte geben Sie Ihre Bandbreitenanwendungs-ID ein",
|
"SUBMIT_BUTTON": "Bitte geben Sie Ihre Bandbreitenanwendungs-ID ein",
|
||||||
"API": {
|
"API": {
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Telefonnummer",
|
"LABEL": "Telefonnummer",
|
||||||
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
|
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
|
||||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "Telefonnummer-ID",
|
"LABEL": "Telefonnummer-ID",
|
||||||
|
@ -388,10 +388,6 @@
|
||||||
"ENABLED": "Aktiviert",
|
"ENABLED": "Aktiviert",
|
||||||
"DISABLED": "Deaktiviert"
|
"DISABLED": "Deaktiviert"
|
||||||
},
|
},
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": {
|
|
||||||
"ENABLED": "Aktiviert",
|
|
||||||
"DISABLED": "Deaktiviert"
|
|
||||||
},
|
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "Aktivieren"
|
"LABEL": "Aktivieren"
|
||||||
}
|
}
|
||||||
|
@ -445,8 +441,6 @@
|
||||||
"ENABLE_CSAT_SUB_TEXT": "CSAT(Kundenzufriedenheit) Umfrage aktivieren/deaktivieren nach Abschluss eines Gesprächs",
|
"ENABLE_CSAT_SUB_TEXT": "CSAT(Kundenzufriedenheit) Umfrage aktivieren/deaktivieren nach Abschluss eines Gesprächs",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "Konversationskontinuität per E-Mail aktivieren",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "Konversationskontinuität per E-Mail aktivieren",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Konversationen werden per E-Mail fortgesetzt, wenn die Kontakt-E-Mail-Adresse verfügbar ist.",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Konversationen werden per E-Mail fortgesetzt, wenn die Kontakt-E-Mail-Adresse verfügbar ist.",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
|
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
|
|
||||||
"INBOX_UPDATE_TITLE": "Posteingangseinstellungen",
|
"INBOX_UPDATE_TITLE": "Posteingangseinstellungen",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "Posteingangseinstellungen aktualisieren",
|
"INBOX_UPDATE_SUB_TEXT": "Posteingangseinstellungen aktualisieren",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "Aktivieren oder deaktivieren Sie die automatische Zuweisung verfügbarer Agenten für neue Konversationen",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "Aktivieren oder deaktivieren Sie die automatische Zuweisung verfügbarer Agenten für neue Konversationen",
|
||||||
|
|
|
@ -103,9 +103,7 @@
|
||||||
"Online",
|
"Online",
|
||||||
"Beschäftigt",
|
"Beschäftigt",
|
||||||
"Offline"
|
"Offline"
|
||||||
],
|
]
|
||||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
|
||||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
|
||||||
},
|
},
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Deine Emailadresse",
|
"LABEL": "Deine Emailadresse",
|
||||||
|
@ -136,7 +134,6 @@
|
||||||
"SELECTOR_SUBTITLE": "Wählen Sie ein Benutzerkonto aus der folgenden Liste",
|
"SELECTOR_SUBTITLE": "Wählen Sie ein Benutzerkonto aus der folgenden Liste",
|
||||||
"PROFILE_SETTINGS": "Profileinstellungen",
|
"PROFILE_SETTINGS": "Profileinstellungen",
|
||||||
"KEYBOARD_SHORTCUTS": "Tastenkombinationen",
|
"KEYBOARD_SHORTCUTS": "Tastenkombinationen",
|
||||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
|
||||||
"LOGOUT": "Ausloggen"
|
"LOGOUT": "Ausloggen"
|
||||||
},
|
},
|
||||||
"APP_GLOBAL": {
|
"APP_GLOBAL": {
|
||||||
|
@ -180,7 +177,6 @@
|
||||||
"CONVERSATIONS": "Gespräche",
|
"CONVERSATIONS": "Gespräche",
|
||||||
"ALL_CONVERSATIONS": "Alle Konversationen",
|
"ALL_CONVERSATIONS": "Alle Konversationen",
|
||||||
"MENTIONED_CONVERSATIONS": "Erwähnungen",
|
"MENTIONED_CONVERSATIONS": "Erwähnungen",
|
||||||
"UNATTENDED_CONVERSATIONS": "Unbeaufsichtigt",
|
|
||||||
"REPORTS": "Berichte",
|
"REPORTS": "Berichte",
|
||||||
"SETTINGS": "Einstellungen",
|
"SETTINGS": "Einstellungen",
|
||||||
"CONTACTS": "Kontakte",
|
"CONTACTS": "Kontakte",
|
||||||
|
@ -229,10 +225,6 @@
|
||||||
"CATEGORY": "Kategorie",
|
"CATEGORY": "Kategorie",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "Keine Kategorien gefunden"
|
"CATEGORY_EMPTY_MESSAGE": "Keine Kategorien gefunden"
|
||||||
},
|
},
|
||||||
"SET_AUTO_OFFLINE": {
|
|
||||||
"TEXT": "Mark offline automatically",
|
|
||||||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
|
|
||||||
},
|
|
||||||
"DOCS": "Dokumente lesen"
|
"DOCS": "Dokumente lesen"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
|
@ -264,7 +256,7 @@
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Firmenname",
|
"LABEL": "Kontobezeichnung",
|
||||||
"PLACEHOLDER": "Wayne Enterprises"
|
"PLACEHOLDER": "Wayne Enterprises"
|
||||||
},
|
},
|
||||||
"SUBMIT": "Abschicken"
|
"SUBMIT": "Abschicken"
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
"REGISTER": {
|
"REGISTER": {
|
||||||
"TRY_WOOT": "Einen Account registrieren",
|
"TRY_WOOT": "Einen Account registrieren",
|
||||||
"TITLE": "Registrieren",
|
"TITLE": "Registrieren",
|
||||||
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
|
|
||||||
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
|
|
||||||
"TERMS_ACCEPT": "Mit Ihrer Anmeldung stimmen Sie unseren <a href=\"https://www.chatwoot.com/terms\"> AGB </a> und <a href=\"https://www.chatwoot.com/privacy-policy\"> Datenschutzrichtlinie </a>",
|
"TERMS_ACCEPT": "Mit Ihrer Anmeldung stimmen Sie unseren <a href=\"https://www.chatwoot.com/terms\"> AGB </a> und <a href=\"https://www.chatwoot.com/privacy-policy\"> Datenschutzrichtlinie </a>",
|
||||||
"COMPANY_NAME": {
|
"ACCOUNT_NAME": {
|
||||||
"LABEL": "Company name",
|
"LABEL": "Kontobezeichnung",
|
||||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
"PLACEHOLDER": "Geben Sie einen Kontonamen ein, z. B.: Wayne Enterprises",
|
||||||
"ERROR": "Company name is too short"
|
"ERROR": "Kontoname ist zu kurz"
|
||||||
},
|
},
|
||||||
"FULL_NAME": {
|
"FULL_NAME": {
|
||||||
"LABEL": "Vollständiger Name",
|
"LABEL": "Vollständiger Name",
|
||||||
|
@ -18,7 +16,7 @@
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Geschäftliche E-Mail-Adresse",
|
"LABEL": "Geschäftliche E-Mail-Adresse",
|
||||||
"PLACEHOLDER": "Geben Sie Ihre geschäftliche E-Mail-Adresse ein, z. B.: bruce@wayne.enterprises",
|
"PLACEHOLDER": "Geben Sie Ihre geschäftliche E-Mail-Adresse ein, z. B.: bruce@wayne.enterprises",
|
||||||
"ERROR": "Please enter a valid work email address"
|
"ERROR": "E-Mail-Adresse ist ungültig"
|
||||||
},
|
},
|
||||||
"PASSWORD": {
|
"PASSWORD": {
|
||||||
"LABEL": "Passwort",
|
"LABEL": "Passwort",
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Συζητήσεις",
|
"TAB_HEADING": "Συζητήσεις",
|
||||||
"MENTION_HEADING": "Αναφορές",
|
"MENTION_HEADING": "Αναφορές",
|
||||||
"UNATTENDED_HEADING": "Χωρίς Παρακολούθηση",
|
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Αναζήτηση Ανθρώπων, συνομιλιών, αποθηκευμένων απαντήσεων .."
|
"INPUT": "Αναζήτηση Ανθρώπων, συνομιλιών, αποθηκευμένων απαντήσεων .."
|
||||||
},
|
},
|
||||||
|
@ -57,8 +56,6 @@
|
||||||
"REPLY_TO_TWEET": "Απάντηση στο tweet",
|
"REPLY_TO_TWEET": "Απάντηση στο tweet",
|
||||||
"LINK_TO_STORY": "Μετάβαση στην ιστορία instagram",
|
"LINK_TO_STORY": "Μετάβαση στην ιστορία instagram",
|
||||||
"SENT": "Επιτυχής αποστολή",
|
"SENT": "Επιτυχής αποστολή",
|
||||||
"READ": "Διαβάστηκε με επιτυχία",
|
|
||||||
"DELIVERED": "Παραδόθηκε με επιτυχία",
|
|
||||||
"NO_MESSAGES": "Κανένα Μήνυμα",
|
"NO_MESSAGES": "Κανένα Μήνυμα",
|
||||||
"NO_CONTENT": "Μη διαθέσιμο περιεχόμενο",
|
"NO_CONTENT": "Μη διαθέσιμο περιεχόμενο",
|
||||||
"HIDE_QUOTED_TEXT": "Απόκρυψη Κειμένου Παράθεσης",
|
"HIDE_QUOTED_TEXT": "Απόκρυψη Κειμένου Παράθεσης",
|
||||||
|
|
|
@ -41,10 +41,6 @@
|
||||||
"NO_RESPONSE": "Καμία ανταπόκριση",
|
"NO_RESPONSE": "Καμία ανταπόκριση",
|
||||||
"RATING_TITLE": "Αξιολόγηση",
|
"RATING_TITLE": "Αξιολόγηση",
|
||||||
"FEEDBACK_TITLE": "Ανατροφοδότηση",
|
"FEEDBACK_TITLE": "Ανατροφοδότηση",
|
||||||
"CARD": {
|
|
||||||
"SHOW_LABELS": "Προβολή ετικετών",
|
|
||||||
"HIDE_LABELS": "Απόκρυψη ετικετών"
|
|
||||||
},
|
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Επίλυση",
|
"RESOLVE_ACTION": "Επίλυση",
|
||||||
"REOPEN_ACTION": "Επαναφορά",
|
"REOPEN_ACTION": "Επαναφορά",
|
||||||
|
@ -68,7 +64,6 @@
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Σήμανση ως εκκρεμής",
|
"PENDING": "Σήμανση ως εκκρεμής",
|
||||||
"RESOLVED": "Σήμανση ως επιλυμένου",
|
"RESOLVED": "Σήμανση ως επιλυμένου",
|
||||||
"MARK_AS_UNREAD": "Σήμανση ως μη αναγνωσμένο",
|
|
||||||
"REOPEN": "Άνοιγμα συνομιλίας",
|
"REOPEN": "Άνοιγμα συνομιλίας",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Αναβολή",
|
"TITLE": "Αναβολή",
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"EMOJI": {
|
|
||||||
"PLACEHOLDER": "Αναζήτηση emojis",
|
|
||||||
"NOT_FOUND": "Κανένα emoji δεν ταιριάζει με την αναζήτησή σας"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,7 +23,7 @@
|
||||||
"ERROR": "Παρακαλώ συμπληρώστε ένα έγκυρο όνομα λογαριασμού"
|
"ERROR": "Παρακαλώ συμπληρώστε ένα έγκυρο όνομα λογαριασμού"
|
||||||
},
|
},
|
||||||
"LANGUAGE": {
|
"LANGUAGE": {
|
||||||
"LABEL": "Γλώσσα ιστοσελίδας",
|
"LABEL": "Γλώσσα Ιστοσελίδας (Beta)",
|
||||||
"PLACEHOLDER": "Το όνομα του Λογαριασμού",
|
"PLACEHOLDER": "Το όνομα του Λογαριασμού",
|
||||||
"ERROR": ""
|
"ERROR": ""
|
||||||
},
|
},
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Αριθμός τηλεφώνου",
|
"LABEL": "Αριθμός τηλεφώνου",
|
||||||
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
||||||
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
|
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "URL επανάκλησης",
|
"TITLE": "URL επανάκλησης",
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Αριθμός τηλεφώνου",
|
"LABEL": "Αριθμός τηλεφώνου",
|
||||||
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
||||||
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
|
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Δημιουργήστε Bandwidth",
|
"SUBMIT_BUTTON": "Δημιουργήστε Bandwidth",
|
||||||
"API": {
|
"API": {
|
||||||
|
@ -214,7 +214,7 @@
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"LABEL": "Αριθμός τηλεφώνου",
|
"LABEL": "Αριθμός τηλεφώνου",
|
||||||
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
||||||
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
|
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "Αριθμός Τηλεφώνου",
|
"LABEL": "Αριθμός Τηλεφώνου",
|
||||||
|
@ -388,10 +388,6 @@
|
||||||
"ENABLED": "Ενεργό",
|
"ENABLED": "Ενεργό",
|
||||||
"DISABLED": "Ανενεργό"
|
"DISABLED": "Ανενεργό"
|
||||||
},
|
},
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": {
|
|
||||||
"ENABLED": "Ενεργό",
|
|
||||||
"DISABLED": "Ανενεργό"
|
|
||||||
},
|
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "Ενεργοποίηση"
|
"LABEL": "Ενεργοποίηση"
|
||||||
}
|
}
|
||||||
|
@ -445,8 +441,6 @@
|
||||||
"ENABLE_CSAT_SUB_TEXT": "Ενεργοποίηση/Απενεργοποίηση της έρευνας CSAT (ικανοποίηση πελατών) μετά την επίλυση μιας συνομιλίας",
|
"ENABLE_CSAT_SUB_TEXT": "Ενεργοποίηση/Απενεργοποίηση της έρευνας CSAT (ικανοποίηση πελατών) μετά την επίλυση μιας συνομιλίας",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "Ενεργοποίηση της συνέχειας συνομιλίας μέσω email",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "Ενεργοποίηση της συνέχειας συνομιλίας μέσω email",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Οι συζητήσεις θα συνεχίσουν μέσω email αν η διεύθυνση ηλεκτρονικού ταχυδρομείου επαφής είναι διαθέσιμη.",
|
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Οι συζητήσεις θα συνεχίσουν μέσω email αν η διεύθυνση ηλεκτρονικού ταχυδρομείου επαφής είναι διαθέσιμη.",
|
||||||
"LOCK_TO_SINGLE_CONVERSATION": "Κλείδωμα σε μία μόνο συζήτηση",
|
|
||||||
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Ενεργοποίηση ή απενεργοποίηση πολλαπλών συνομιλιών για την ίδια επαφή σε αυτά τα εισερχόμενα",
|
|
||||||
"INBOX_UPDATE_TITLE": "Ρυθμίσεις Κιβωτίου",
|
"INBOX_UPDATE_TITLE": "Ρυθμίσεις Κιβωτίου",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "Ενημερώστε τις ρυθμίσεις του κιβωτίου σας",
|
"INBOX_UPDATE_SUB_TEXT": "Ενημερώστε τις ρυθμίσεις του κιβωτίου σας",
|
||||||
"AUTO_ASSIGNMENT_SUB_TEXT": "Ενεργοποιήστε ή απενεργοποιήστε την αυτόματη αντιστοίχιση των νέων συζητήσεων στους πράκτορες αυτού του κιβωτίου.",
|
"AUTO_ASSIGNMENT_SUB_TEXT": "Ενεργοποιήστε ή απενεργοποιήστε την αυτόματη αντιστοίχιση των νέων συζητήσεων στους πράκτορες αυτού του κιβωτίου.",
|
||||||
|
|
|
@ -103,9 +103,7 @@
|
||||||
"Στην Γραμμή",
|
"Στην Γραμμή",
|
||||||
"Απασχολημένος",
|
"Απασχολημένος",
|
||||||
"Εκτός"
|
"Εκτός"
|
||||||
],
|
]
|
||||||
"SET_AVAILABILITY_SUCCESS": "Η διαθεσιμότητα ορίστηκε με επιτυχία",
|
|
||||||
"SET_AVAILABILITY_ERROR": "Αδυναμία ορισμού διαθεσιμότητας, παρακαλώ προσπαθήστε ξανά"
|
|
||||||
},
|
},
|
||||||
"EMAIL": {
|
"EMAIL": {
|
||||||
"LABEL": "Η διεύθυνση email",
|
"LABEL": "Η διεύθυνση email",
|
||||||
|
@ -136,7 +134,6 @@
|
||||||
"SELECTOR_SUBTITLE": "Επιλέξτε ένα λογαριασμό από την Λίστα",
|
"SELECTOR_SUBTITLE": "Επιλέξτε ένα λογαριασμό από την Λίστα",
|
||||||
"PROFILE_SETTINGS": "Ρυθμίσεις Προφίλ",
|
"PROFILE_SETTINGS": "Ρυθμίσεις Προφίλ",
|
||||||
"KEYBOARD_SHORTCUTS": "Συντομεύσεις Πληκτρολογίου",
|
"KEYBOARD_SHORTCUTS": "Συντομεύσεις Πληκτρολογίου",
|
||||||
"SUPER_ADMIN_CONSOLE": "Super Admin Κονσόλα",
|
|
||||||
"LOGOUT": "Έξοδος (Logout)"
|
"LOGOUT": "Έξοδος (Logout)"
|
||||||
},
|
},
|
||||||
"APP_GLOBAL": {
|
"APP_GLOBAL": {
|
||||||
|
@ -180,7 +177,6 @@
|
||||||
"CONVERSATIONS": "Συζητήσεις",
|
"CONVERSATIONS": "Συζητήσεις",
|
||||||
"ALL_CONVERSATIONS": "Όλες Οι Συνομιλίες",
|
"ALL_CONVERSATIONS": "Όλες Οι Συνομιλίες",
|
||||||
"MENTIONED_CONVERSATIONS": "Αναφορές",
|
"MENTIONED_CONVERSATIONS": "Αναφορές",
|
||||||
"UNATTENDED_CONVERSATIONS": "Χωρίς Παρακολούθηση",
|
|
||||||
"REPORTS": "Αναφορές",
|
"REPORTS": "Αναφορές",
|
||||||
"SETTINGS": "Ρυθμίσεις",
|
"SETTINGS": "Ρυθμίσεις",
|
||||||
"CONTACTS": "Επαφές",
|
"CONTACTS": "Επαφές",
|
||||||
|
@ -229,10 +225,6 @@
|
||||||
"CATEGORY": "Κατηγορία",
|
"CATEGORY": "Κατηγορία",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "Δεν βρέθηκαν κατηγορίες"
|
"CATEGORY_EMPTY_MESSAGE": "Δεν βρέθηκαν κατηγορίες"
|
||||||
},
|
},
|
||||||
"SET_AUTO_OFFLINE": {
|
|
||||||
"TEXT": "Αυτόματη σήμανση εκτός σύνδεσης",
|
|
||||||
"INFO_TEXT": "Αφήστε το σύστημα να σας σηματοδοτήσει αυτόματα εκτός σύνδεσης, όταν δεν χρησιμοποιείτε την εφαρμογή ή τον πίνακα ελέγχου."
|
|
||||||
},
|
|
||||||
"DOCS": "Ανάγνωση εγγράφων"
|
"DOCS": "Ανάγνωση εγγράφων"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
|
@ -264,7 +256,7 @@
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Όνομα Εταιρείας",
|
"LABEL": "Ονομασία Λογαριασμού",
|
||||||
"PLACEHOLDER": "Wayne Α. Ε"
|
"PLACEHOLDER": "Wayne Α. Ε"
|
||||||
},
|
},
|
||||||
"SUBMIT": "Καταχώρηση"
|
"SUBMIT": "Καταχώρηση"
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue