Compare commits
19 commits
develop
...
feat-searc
Author | SHA1 | Date | |
---|---|---|---|
|
228167823c | ||
|
c618064b13 | ||
|
d23b4a45ad | ||
|
4af9d00d6f | ||
|
e8bd066f93 | ||
|
4dc691e29c | ||
|
6c07ab8bb6 | ||
|
a98bffbe2b | ||
|
4b674a167a | ||
|
bd4b051460 | ||
|
963980d13b | ||
|
c498668345 | ||
|
cb388d93e6 | ||
|
7ba0666cb1 | ||
|
75b7f8f0c4 | ||
|
9b8f0e0152 | ||
|
92ea452680 | ||
|
65de030244 | ||
|
54eab87806 |
404 changed files with 1512 additions and 2773 deletions
8
Gemfile
8
Gemfile
|
@ -4,7 +4,7 @@ ruby '3.0.4'
|
|||
|
||||
##-- base gems for rails --##
|
||||
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
|
||||
gem 'bootsnap', require: false
|
||||
|
||||
|
@ -56,7 +56,7 @@ gem 'activerecord-import'
|
|||
gem 'dotenv-rails'
|
||||
gem 'foreman'
|
||||
gem 'puma'
|
||||
gem 'webpacker', '~> 5.4', '>= 5.4.3'
|
||||
gem 'webpacker', '~> 5.x'
|
||||
# metrics on heroku
|
||||
gem 'barnes'
|
||||
|
||||
|
@ -94,7 +94,7 @@ gem 'ddtrace'
|
|||
gem 'elastic-apm'
|
||||
gem 'newrelic_rpm'
|
||||
gem 'scout_apm'
|
||||
gem 'sentry-rails', '~> 5.3', '>= 5.3.1'
|
||||
gem 'sentry-rails', '~> 5.3'
|
||||
gem 'sentry-ruby', '~> 5.3'
|
||||
gem 'sentry-sidekiq', '~> 5.3'
|
||||
|
||||
|
@ -175,7 +175,7 @@ group :development, :test do
|
|||
gem 'mock_redis'
|
||||
gem 'pry-rails'
|
||||
gem 'rspec_junit_formatter'
|
||||
gem 'rspec-rails', '~> 5.0.3'
|
||||
gem 'rspec-rails', '~> 5.0.0'
|
||||
gem 'rubocop', require: false
|
||||
gem 'rubocop-performance', require: false
|
||||
gem 'rubocop-rails', require: false
|
||||
|
|
14
Gemfile.lock
14
Gemfile.lock
|
@ -398,7 +398,7 @@ GEM
|
|||
llhttp-ffi (0.4.0)
|
||||
ffi-compiler (~> 1.0)
|
||||
rake (~> 13.0)
|
||||
loofah (2.19.1)
|
||||
loofah (2.18.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.1)
|
||||
|
@ -488,8 +488,8 @@ GEM
|
|||
rails-dom-testing (2.0.3)
|
||||
activesupport (>= 4.2.0)
|
||||
nokogiri (>= 1.6)
|
||||
rails-html-sanitizer (1.4.4)
|
||||
loofah (~> 2.19, >= 2.19.1)
|
||||
rails-html-sanitizer (1.4.3)
|
||||
loofah (~> 2.3)
|
||||
railties (6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
|
@ -765,12 +765,12 @@ DEPENDENCIES
|
|||
rack-attack
|
||||
rack-cors
|
||||
rack-timeout
|
||||
rails (~> 6.1, >= 6.1.6.1)
|
||||
rails (~> 6.1)
|
||||
redis
|
||||
redis-namespace
|
||||
responders
|
||||
rest-client
|
||||
rspec-rails (~> 5.0.3)
|
||||
rspec-rails (~> 5.0.0)
|
||||
rspec_junit_formatter
|
||||
rubocop
|
||||
rubocop-performance
|
||||
|
@ -778,7 +778,7 @@ DEPENDENCIES
|
|||
rubocop-rspec
|
||||
scout_apm
|
||||
seed_dump
|
||||
sentry-rails (~> 5.3, >= 5.3.1)
|
||||
sentry-rails (~> 5.3)
|
||||
sentry-ruby (~> 5.3)
|
||||
sentry-sidekiq (~> 5.3)
|
||||
shoulda-matchers
|
||||
|
@ -799,7 +799,7 @@ DEPENDENCIES
|
|||
valid_email2
|
||||
web-console
|
||||
webmock
|
||||
webpacker (~> 5.4, >= 5.4.3)
|
||||
webpacker (~> 5.x)
|
||||
webpush
|
||||
wisper (= 2.0.0)
|
||||
working_hours
|
||||
|
|
|
@ -2,8 +2,8 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
include Events::Types
|
||||
include DateRangeHelper
|
||||
|
||||
before_action :conversation, except: [:index, :meta, :search, :create, :filter]
|
||||
before_action :inbox, :contact, :contact_inbox, only: [:create]
|
||||
before_action :conversation, except: [:index, :meta, :search, :create, :filter, :text_search]
|
||||
before_action :inbox, :contact, :contact_inbox, :text_search, only: [:create]
|
||||
|
||||
def index
|
||||
result = conversation_finder.perform
|
||||
|
@ -11,6 +11,10 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
@conversations_count = result[:count]
|
||||
end
|
||||
|
||||
def text_search
|
||||
@result = TextSearch.new(Current.user, params).perform
|
||||
end
|
||||
|
||||
def meta
|
||||
result = conversation_finder.perform
|
||||
@conversations_count = result[:count]
|
||||
|
|
|
@ -18,10 +18,6 @@ class Api::V1::ProfilesController < Api::BaseController
|
|||
head :ok
|
||||
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
|
||||
@user.account_users.find_by!(account_id: availability_params[:account_id]).update!(availability: availability_params[:availability])
|
||||
end
|
||||
|
@ -41,10 +37,6 @@ class Api::V1::ProfilesController < Api::BaseController
|
|||
params.require(:profile).permit(:account_id, :availability)
|
||||
end
|
||||
|
||||
def auto_offline_params
|
||||
params.require(:profile).permit(:account_id, :auto_offline)
|
||||
end
|
||||
|
||||
def profile_params
|
||||
params.require(:profile).permit(
|
||||
:email,
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
class Platform::Api::V1::AccountsController < PlatformController
|
||||
def create
|
||||
@resource = Account.create!(account_params)
|
||||
@resource = Account.new(account_params)
|
||||
update_resource_features
|
||||
@resource.save!
|
||||
@platform_app.platform_app_permissibles.find_or_create_by(permissible: @resource)
|
||||
end
|
||||
|
||||
|
|
36
app/finders/text_search.rb
Normal file
36
app/finders/text_search.rb
Normal file
|
@ -0,0 +1,36 @@
|
|||
class TextSearch
|
||||
attr_reader :current_user, :current_account, :params
|
||||
|
||||
DEFAULT_STATUS = 'open'.freeze
|
||||
|
||||
def initialize(current_user, params)
|
||||
@current_account = current_user.account || Current.account
|
||||
@params = params
|
||||
end
|
||||
|
||||
def perform
|
||||
{
|
||||
messages: filter_messages,
|
||||
conversations: filter_conversations,
|
||||
contacts: filter_contacts
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def filter_conversations
|
||||
conversation_ids = PgSearch.multisearch("#{@params[:q]}%").where(account_id: @current_account,
|
||||
searchable_type: 'Conversation').pluck(:searchable_id)
|
||||
@conversations = Conversation.where(id: conversation_ids)
|
||||
end
|
||||
|
||||
def filter_messages
|
||||
message_ids = PgSearch.multisearch("#{@params[:q]}%").where(account_id: @current_account, searchable_type: 'Message').pluck(:searchable_id)
|
||||
@messages = Message.where(id: message_ids)
|
||||
end
|
||||
|
||||
def filter_contacts
|
||||
contact_ids = PgSearch.multisearch("#{@params[:q]}%").where(account_id: @current_account, searchable_type: 'Contact').pluck(:searchable_id)
|
||||
@contacts = Contact.where(id: contact_ids)
|
||||
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() {
|
||||
return axios.delete(endPoints('deleteAvatar').url);
|
||||
},
|
||||
|
|
|
@ -16,9 +16,6 @@ const endPoints = {
|
|||
availabilityUpdate: {
|
||||
url: '/api/v1/profile/availability',
|
||||
},
|
||||
autoOffline: {
|
||||
url: '/api/v1/profile/auto_offline',
|
||||
},
|
||||
logout: {
|
||||
url: 'auth/sign_out',
|
||||
},
|
||||
|
|
|
@ -45,6 +45,12 @@ class ConversationApi extends ApiClient {
|
|||
});
|
||||
}
|
||||
|
||||
textSearch(query) {
|
||||
return axios.post(`${this.url}/text_search`, null, {
|
||||
params: { query },
|
||||
});
|
||||
}
|
||||
|
||||
toggleStatus({ conversationId, status, snoozedUntil = null }) {
|
||||
return axios.post(`${this.url}/${conversationId}/toggle_status`, {
|
||||
status,
|
||||
|
|
|
@ -74,8 +74,8 @@ Tahoma,
|
|||
Arial,
|
||||
sans-serif;
|
||||
$body-antialiased: true;
|
||||
$global-margin: $space-small;
|
||||
$global-padding: $space-micro;
|
||||
$global-margin: $space-one;
|
||||
$global-padding: $space-one;
|
||||
$global-weight-normal: normal;
|
||||
$global-weight-bold: bold;
|
||||
$global-radius: 0;
|
||||
|
|
|
@ -20,24 +20,6 @@
|
|||
|
||||
@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 'layout';
|
||||
@import 'animations';
|
||||
|
|
|
@ -155,20 +155,12 @@ $default-button-height: 4.0rem;
|
|||
// Sizes
|
||||
&.tiny {
|
||||
height: var(--space-medium);
|
||||
|
||||
.icon+.button__content {
|
||||
padding-left: var(--space-micro);
|
||||
}
|
||||
}
|
||||
|
||||
&.small {
|
||||
height: var(--space-large);
|
||||
padding-bottom: var(--space-smaller);
|
||||
padding-top: var(--space-smaller);
|
||||
|
||||
.icon+.button__content {
|
||||
padding-left: var(--space-smaller);
|
||||
}
|
||||
}
|
||||
|
||||
&.large {
|
||||
|
@ -198,10 +190,6 @@ $default-button-height: 4.0rem;
|
|||
height: auto;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -59,8 +59,12 @@
|
|||
|
||||
.hamburger--menu {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
display: none;
|
||||
margin-right: $space-normal;
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.header--icon {
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
<template>
|
||||
<woot-button
|
||||
size="small"
|
||||
variant="clear"
|
||||
color-scheme="secondary"
|
||||
icon="list"
|
||||
class="toggle-sidebar"
|
||||
@click="onMenuItemClick"
|
||||
/>
|
||||
<button @click="onMenuItemClick">
|
||||
<fluent-icon class="hamburger--menu" icon="list" />
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -21,8 +16,13 @@ export default {
|
|||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.toggle-sidebar {
|
||||
margin-right: var(--space-small);
|
||||
margin-left: var(--space-minus-small);
|
||||
.hamburger--menu {
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
margin-right: var(--space-normal);
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -18,35 +18,12 @@
|
|||
</woot-button>
|
||||
</woot-dropdown-item>
|
||||
<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>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import { mixin as clickaway } from 'vue-clickaway';
|
||||
import alertMixin from 'shared/mixins/alertMixin';
|
||||
import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem';
|
||||
import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu';
|
||||
import WootDropdownHeader from 'shared/components/ui/dropdown/DropdownHeader';
|
||||
|
@ -64,7 +41,7 @@ export default {
|
|||
AvailabilityStatusBadge,
|
||||
},
|
||||
|
||||
mixins: [clickaway, alertMixin],
|
||||
mixins: [clickaway],
|
||||
|
||||
data() {
|
||||
return {
|
||||
|
@ -77,7 +54,6 @@ export default {
|
|||
...mapGetters({
|
||||
getCurrentUserAvailability: 'getCurrentUserAvailability',
|
||||
currentAccountId: 'getCurrentAccountId',
|
||||
currentUserAutoOffline: 'getCurrentUserAutoOffline',
|
||||
}),
|
||||
availabilityDisplayLabel() {
|
||||
const availabilityIndex = AVAILABILITY_STATUS_KEYS.findIndex(
|
||||
|
@ -109,30 +85,21 @@ export default {
|
|||
closeStatusMenu() {
|
||||
this.isStatusMenuOpened = false;
|
||||
},
|
||||
updateAutoOffline(autoOffline) {
|
||||
this.$store.dispatch('updateAutoOffline', {
|
||||
accountId: this.currentAccountId,
|
||||
autoOffline,
|
||||
});
|
||||
},
|
||||
changeAvailabilityStatus(availability) {
|
||||
const accountId = this.currentAccountId;
|
||||
if (this.isUpdating) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.isUpdating = true;
|
||||
try {
|
||||
this.$store.dispatch('updateAvailability', {
|
||||
availability,
|
||||
account_id: this.currentAccountId,
|
||||
});
|
||||
} catch (error) {
|
||||
this.showAlert(
|
||||
this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.SET_AVAILABILITY_ERROR')
|
||||
);
|
||||
} finally {
|
||||
this.$store
|
||||
.dispatch('updateAvailability', {
|
||||
availability: availability,
|
||||
account_id: accountId,
|
||||
})
|
||||
.finally(() => {
|
||||
this.isUpdating = false;
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
|
@ -176,32 +143,4 @@ export default {
|
|||
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>
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import { FEATURE_FLAGS } from '../../../../featureFlags';
|
||||
import { frontendURL } from '../../../../helper/URLHelper';
|
||||
|
||||
const primaryMenuItems = accountId => [
|
||||
|
@ -14,7 +13,6 @@ const primaryMenuItems = accountId => [
|
|||
icon: 'book-contacts',
|
||||
key: 'contacts',
|
||||
label: 'CONTACTS',
|
||||
featureFlag: FEATURE_FLAGS.CRM,
|
||||
toState: frontendURL(`accounts/${accountId}/contacts`),
|
||||
toStateName: 'contacts_dashboard',
|
||||
roles: ['administrator', 'agent'],
|
||||
|
@ -23,7 +21,6 @@ const primaryMenuItems = accountId => [
|
|||
icon: 'arrow-trending-lines',
|
||||
key: 'reports',
|
||||
label: 'REPORTS',
|
||||
featureFlag: FEATURE_FLAGS.REPORTS,
|
||||
toState: frontendURL(`accounts/${accountId}/reports`),
|
||||
toStateName: 'settings_account_reports',
|
||||
roles: ['administrator'],
|
||||
|
@ -32,7 +29,6 @@ const primaryMenuItems = accountId => [
|
|||
icon: 'megaphone',
|
||||
key: 'campaigns',
|
||||
label: 'CAMPAIGNS',
|
||||
featureFlag: FEATURE_FLAGS.CAMPAIGNS,
|
||||
toState: frontendURL(`accounts/${accountId}/campaigns`),
|
||||
toStateName: 'settings_account_campaigns',
|
||||
roles: ['administrator'],
|
||||
|
@ -41,7 +37,7 @@ const primaryMenuItems = accountId => [
|
|||
icon: 'library',
|
||||
key: 'helpcenter',
|
||||
label: 'HELP_CENTER.TITLE',
|
||||
featureFlag: FEATURE_FLAGS.HELP_CENTER,
|
||||
featureFlag: 'help_center',
|
||||
toState: frontendURL(`accounts/${accountId}/portals`),
|
||||
toStateName: 'default_portal_articles',
|
||||
roles: ['administrator'],
|
||||
|
|
|
@ -102,7 +102,6 @@ const settings = accountId => ({
|
|||
label: 'AGENT_BOTS',
|
||||
beta: true,
|
||||
hasSubMenu: false,
|
||||
globalConfigFlag: 'csmlEditorHost',
|
||||
toState: frontendURL(`accounts/${accountId}/settings/agent-bots`),
|
||||
toStateName: 'agent_bots',
|
||||
featureFlag: FEATURE_FLAGS.AGENT_BOTS,
|
||||
|
|
|
@ -61,24 +61,6 @@
|
|||
</a>
|
||||
</router-link>
|
||||
</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-button
|
||||
variant="clear"
|
||||
|
@ -153,7 +135,7 @@ export default {
|
|||
.dropdown-pane {
|
||||
left: var(--space-slab);
|
||||
bottom: var(--space-larger);
|
||||
min-width: 22rem;
|
||||
z-index: var(--z-index-low);
|
||||
min-width: 16.8rem;
|
||||
z-index: var(--z-index-much-higher);
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -261,7 +261,14 @@ export default {
|
|||
width: 20rem;
|
||||
flex-shrink: 0;
|
||||
overflow-y: hidden;
|
||||
|
||||
@include breakpoint(xlarge down) {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
@include breakpoint(xlarge up) {
|
||||
position: unset;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
overflow-y: hidden;
|
||||
|
|
|
@ -106,22 +106,18 @@ export default {
|
|||
activeInbox: 'getSelectedInbox',
|
||||
accountId: 'getCurrentAccountId',
|
||||
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
||||
globalConfig: 'globalConfig/get',
|
||||
}),
|
||||
hasSubMenu() {
|
||||
return !!this.menuItem.children;
|
||||
},
|
||||
isMenuItemVisible() {
|
||||
if (this.menuItem.globalConfigFlag) {
|
||||
return !!this.globalConfig[this.menuItem.globalConfigFlag];
|
||||
if (!this.menuItem.featureFlag) {
|
||||
return true;
|
||||
}
|
||||
if (this.menuItem.featureFlag) {
|
||||
return this.isFeatureEnabledonAccount(
|
||||
this.accountId,
|
||||
this.menuItem.featureFlag
|
||||
);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
isAllConversations() {
|
||||
return (
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`SidemenuIcon matches snapshot 1`] = `
|
||||
<woot-button
|
||||
class="toggle-sidebar"
|
||||
color-scheme="secondary"
|
||||
<button>
|
||||
<fluent-icon
|
||||
class="hamburger--menu"
|
||||
icon="list"
|
||||
size="small"
|
||||
variant="clear"
|
||||
/>
|
||||
</button>
|
||||
`;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<fluent-icon :icon="icon" size="12" class="label--icon" />
|
||||
</span>
|
||||
<span
|
||||
v-if="variant === 'smooth' && title && !icon"
|
||||
v-if="variant === 'smooth'"
|
||||
:style="{ background: color }"
|
||||
class="label-color-dot"
|
||||
/>
|
||||
|
@ -117,16 +117,14 @@ export default {
|
|||
height: var(--space-medium);
|
||||
|
||||
&.small {
|
||||
font-size: var(--font-size-mini);
|
||||
font-size: var(--font-size-micro);
|
||||
padding: var(--space-micro) var(--space-smaller);
|
||||
line-height: 1.2;
|
||||
height: var(--space-two);
|
||||
letter-spacing: 0.15px;
|
||||
}
|
||||
|
||||
.label--icon {
|
||||
cursor: pointer;
|
||||
}
|
||||
.label-color-dot {
|
||||
margin-right: var(--space-smaller);
|
||||
}
|
||||
|
||||
|
@ -201,8 +199,8 @@ export default {
|
|||
|
||||
&.smooth {
|
||||
background: transparent;
|
||||
border: 1px solid var(--s-100);
|
||||
color: var(--s-700);
|
||||
border: 1px solid var(--s-75);
|
||||
color: var(--s-800);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -223,22 +221,14 @@ export default {
|
|||
}
|
||||
|
||||
.label-action--button {
|
||||
display: flex;
|
||||
margin-right: var(--space-smaller);
|
||||
margin-bottom: var(--space-minus-micro);
|
||||
}
|
||||
|
||||
.label-color-dot {
|
||||
display: inline-block;
|
||||
width: var(--space-slab);
|
||||
height: var(--space-slab);
|
||||
width: var(--space-one);
|
||||
height: var(--space-one);
|
||||
border-radius: var(--border-radius-small);
|
||||
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>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<button
|
||||
type="button"
|
||||
class="toggle-button"
|
||||
:class="{ active: value, small: size === 'small' }"
|
||||
:class="{ active: value }"
|
||||
role="switch"
|
||||
:aria-checked="value.toString()"
|
||||
@click="onClick"
|
||||
|
@ -15,7 +15,6 @@
|
|||
export default {
|
||||
props: {
|
||||
value: { type: Boolean, default: false },
|
||||
size: { type: String, default: '' },
|
||||
},
|
||||
methods: {
|
||||
onClick() {
|
||||
|
@ -46,20 +45,6 @@ export default {
|
|||
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 {
|
||||
--space-one-point-five: 1.5rem;
|
||||
background-color: var(--white);
|
||||
|
|
|
@ -67,9 +67,6 @@ export default {
|
|||
if (Object.keys(this.enabledFeatures).length === 0) {
|
||||
return false;
|
||||
}
|
||||
if (key === 'website') {
|
||||
return this.enabledFeatures.channel_website;
|
||||
}
|
||||
if (key === 'facebook') {
|
||||
return this.enabledFeatures.channel_facebook;
|
||||
}
|
||||
|
|
|
@ -61,7 +61,6 @@ export default {
|
|||
}
|
||||
|
||||
.colorpicker--selected {
|
||||
border: 1px solid var(--color-border-light);
|
||||
border-radius: $space-smaller;
|
||||
cursor: pointer;
|
||||
height: $space-large;
|
||||
|
|
|
@ -10,11 +10,11 @@ import 'videojs-record/dist/css/videojs.record.css';
|
|||
|
||||
import videojs from 'video.js';
|
||||
|
||||
import inboxMixin from '../../../../shared/mixins/inboxMixin';
|
||||
import alertMixin from '../../../../shared/mixins/alertMixin';
|
||||
|
||||
import Recorder from 'opus-recorder';
|
||||
import encoderWorker from 'opus-recorder/dist/encoderWorker.min';
|
||||
import waveWorker from 'opus-recorder/dist/waveWorker.min';
|
||||
|
||||
import WaveSurfer from 'wavesurfer.js';
|
||||
import MicrophonePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.microphone.js';
|
||||
|
@ -29,19 +29,14 @@ WaveSurfer.microphone = MicrophonePlugin;
|
|||
|
||||
export default {
|
||||
name: 'WootAudioRecorder',
|
||||
mixins: [alertMixin],
|
||||
props: {
|
||||
audioRecordFormat: {
|
||||
type: String,
|
||||
default: AUDIO_FORMATS.WEBM,
|
||||
},
|
||||
},
|
||||
mixins: [inboxMixin, alertMixin],
|
||||
data() {
|
||||
return {
|
||||
player: false,
|
||||
recordingDateStarted: new Date(0),
|
||||
initialTimeDuration: '00:00',
|
||||
recorderOptions: {
|
||||
debug: true,
|
||||
controls: true,
|
||||
bigPlayButton: false,
|
||||
fluid: false,
|
||||
|
@ -76,9 +71,6 @@ export default {
|
|||
record: {
|
||||
audio: true,
|
||||
video: false,
|
||||
maxLength: 900,
|
||||
timeSlice: 1000,
|
||||
maxFileSize: 15 * 1024 * 1024,
|
||||
...(this.audioRecordFormat === AUDIO_FORMATS.WEBM && {
|
||||
monitorGain: 0,
|
||||
recordingGain: 1,
|
||||
|
@ -88,10 +80,11 @@ export default {
|
|||
streamPages: true,
|
||||
maxFramesPerPage: 1,
|
||||
encoderFrameSize: 1,
|
||||
encoderPath: waveWorker,
|
||||
encoderPath: 'opus-recorder/dist/waveWorker.min.js',
|
||||
}),
|
||||
...(this.audioRecordFormat === AUDIO_FORMATS.OGG && {
|
||||
displayMilliseconds: false,
|
||||
maxLength: 300,
|
||||
audioEngine: 'opus-recorder',
|
||||
audioWorkerURL: encoderWorker,
|
||||
audioChannels: 1,
|
||||
|
@ -107,6 +100,12 @@ export default {
|
|||
isRecording() {
|
||||
return this.player && this.player.record().isRecording();
|
||||
},
|
||||
audioRecordFormat() {
|
||||
if (this.isAWebWidgetInbox) {
|
||||
return AUDIO_FORMATS.WEBM;
|
||||
}
|
||||
return AUDIO_FORMATS.OGG;
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
window.Recorder = Recorder;
|
||||
|
|
|
@ -91,7 +91,6 @@
|
|||
</span>
|
||||
<span class="unread">{{ unreadCount > 9 ? '9+' : unreadCount }}</span>
|
||||
</div>
|
||||
<card-labels :conversation-id="chat.id" />
|
||||
</div>
|
||||
<woot-context-menu
|
||||
v-if="showContextMenu"
|
||||
|
@ -126,8 +125,8 @@ import InboxName from '../InboxName';
|
|||
import inboxMixin from 'shared/mixins/inboxMixin';
|
||||
import ConversationContextMenu from './contextMenu/Index.vue';
|
||||
import alertMixin from 'shared/mixins/alertMixin';
|
||||
import TimeAgo from 'dashboard/components/ui/TimeAgo';
|
||||
import CardLabels from './conversationCardComponents/CardLabels.vue';
|
||||
import timeAgo from 'dashboard/components/ui/TimeAgo';
|
||||
|
||||
const ATTACHMENT_ICONS = {
|
||||
image: 'image',
|
||||
audio: 'headphones-sound-wave',
|
||||
|
@ -139,11 +138,10 @@ const ATTACHMENT_ICONS = {
|
|||
|
||||
export default {
|
||||
components: {
|
||||
CardLabels,
|
||||
InboxName,
|
||||
Thumbnail,
|
||||
ConversationContextMenu,
|
||||
TimeAgo,
|
||||
timeAgo,
|
||||
},
|
||||
|
||||
mixins: [
|
||||
|
@ -372,15 +370,11 @@ export default {
|
|||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.conversation {
|
||||
align-items: flex-start;
|
||||
align-items: center;
|
||||
|
||||
&:hover {
|
||||
background: var(--color-background-light);
|
||||
}
|
||||
|
||||
&::v-deep .user-thumbnail-box {
|
||||
margin-top: var(--space-normal);
|
||||
}
|
||||
}
|
||||
|
||||
.conversation-selected {
|
||||
|
@ -389,10 +383,8 @@ export default {
|
|||
|
||||
.has-inbox-name {
|
||||
&::v-deep .user-thumbnail-box {
|
||||
margin-top: var(--space-large);
|
||||
}
|
||||
.checkbox-wrapper {
|
||||
margin-top: var(--space-large);
|
||||
margin-top: var(--space-normal);
|
||||
align-items: flex-start;
|
||||
}
|
||||
.conversation--meta {
|
||||
margin-top: var(--space-normal);
|
||||
|
@ -437,7 +429,6 @@ export default {
|
|||
margin-top: var(--space-minus-micro);
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.checkbox-wrapper {
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
|
@ -447,7 +438,6 @@ export default {
|
|||
border-radius: 100%;
|
||||
margin-top: var(--space-normal);
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--w-100);
|
||||
}
|
||||
|
|
|
@ -21,11 +21,7 @@
|
|||
/>
|
||||
</h3>
|
||||
<div class="conversation--header--actions">
|
||||
<inbox-name
|
||||
v-if="hasMultipleInboxes"
|
||||
:inbox="inbox"
|
||||
class="margin-right-small"
|
||||
/>
|
||||
<inbox-name :inbox="inbox" class="margin-right-small" />
|
||||
<span
|
||||
v-if="isSnoozed"
|
||||
class="snoozed--display-text margin-right-small"
|
||||
|
@ -149,9 +145,6 @@ export default {
|
|||
const { inbox_id: inboxId } = this.chat;
|
||||
return this.$store.getters['inboxes/getInbox'](inboxId);
|
||||
},
|
||||
hasMultipleInboxes() {
|
||||
return this.$store.getters['inboxes/getInboxes'].length > 1;
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
v-if="data.content"
|
||||
:message="message"
|
||||
:is-email="isEmailContentType"
|
||||
:readable-time="readableTime"
|
||||
:display-quoted-button="displayQuotedButton"
|
||||
/>
|
||||
<span
|
||||
|
@ -28,6 +29,7 @@
|
|||
<bubble-image
|
||||
v-if="attachment.file_type === 'image' && !hasImageError"
|
||||
:url="attachment.data_url"
|
||||
:readable-time="readableTime"
|
||||
@error="onImageLoadError"
|
||||
/>
|
||||
<audio v-else-if="attachment.file_type === 'audio'" controls>
|
||||
|
@ -36,6 +38,7 @@
|
|||
<bubble-video
|
||||
v-else-if="attachment.file_type === 'video'"
|
||||
:url="attachment.data_url"
|
||||
:readable-time="readableTime"
|
||||
/>
|
||||
<bubble-location
|
||||
v-else-if="attachment.file_type === 'location'"
|
||||
|
@ -43,7 +46,11 @@
|
|||
:longitude="attachment.coordinates_long"
|
||||
: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>
|
||||
<bubble-actions
|
||||
|
@ -58,9 +65,10 @@
|
|||
:is-private="data.private"
|
||||
:message-type="data.message_type"
|
||||
:message-status="status"
|
||||
:readable-time="readableTime"
|
||||
:source-id="data.source_id"
|
||||
:inbox-id="data.inbox_id"
|
||||
:created-at="createdAt"
|
||||
:message-read="showReadTicks"
|
||||
/>
|
||||
</div>
|
||||
<spinner v-if="isPending" size="tiny" />
|
||||
|
@ -111,6 +119,8 @@
|
|||
</template>
|
||||
<script>
|
||||
import messageFormatterMixin from 'shared/mixins/messageFormatterMixin';
|
||||
import timeMixin from '../../../mixins/time';
|
||||
|
||||
import BubbleMailHead from './bubble/MailHead';
|
||||
import BubbleText from './bubble/Text';
|
||||
import BubbleImage from './bubble/Image';
|
||||
|
@ -139,7 +149,7 @@ export default {
|
|||
ContextMenu,
|
||||
Spinner,
|
||||
},
|
||||
mixins: [alertMixin, messageFormatterMixin, contentTypeMixin],
|
||||
mixins: [alertMixin, timeMixin, messageFormatterMixin, contentTypeMixin],
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
|
@ -157,6 +167,10 @@ export default {
|
|||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
hasUserReadMessage: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
isWebWidgetInbox: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
|
@ -259,8 +273,11 @@ export default {
|
|||
'has-tweet-menu': this.isATweet,
|
||||
};
|
||||
},
|
||||
createdAt() {
|
||||
return this.contentAttributes.external_created_at || this.data.created_at;
|
||||
readableTime() {
|
||||
return this.messageStamp(
|
||||
this.contentAttributes.external_created_at || this.data.created_at,
|
||||
'LLL d, h:mm a'
|
||||
);
|
||||
},
|
||||
isBubble() {
|
||||
return [0, 1, 3].includes(this.data.message_type);
|
||||
|
@ -271,6 +288,14 @@ export default {
|
|||
isOutgoing() {
|
||||
return this.data.message_type === MESSAGE_TYPE.OUTGOING;
|
||||
},
|
||||
showReadTicks() {
|
||||
return (
|
||||
(this.isOutgoing || this.isTemplate) &&
|
||||
this.hasUserReadMessage &&
|
||||
this.isWebWidgetInbox &&
|
||||
!this.data.private
|
||||
);
|
||||
},
|
||||
isTemplate() {
|
||||
return this.data.message_type === MESSAGE_TYPE.TEMPLATE;
|
||||
},
|
||||
|
|
|
@ -40,6 +40,9 @@
|
|||
:is-a-tweet="isATweet"
|
||||
:is-a-whatsapp-channel="isAWhatsAppChannel"
|
||||
:has-instagram-story="hasInstagramStory"
|
||||
:has-user-read-message="
|
||||
hasUserReadMessage(message.created_at, getLastSeenAt)
|
||||
"
|
||||
:is-web-widget-inbox="isAWebWidgetInbox"
|
||||
/>
|
||||
<li v-show="unreadMessageCount != 0" class="unread--toast">
|
||||
|
@ -60,6 +63,9 @@
|
|||
:is-a-tweet="isATweet"
|
||||
:is-a-whatsapp-channel="isAWhatsAppChannel"
|
||||
:has-instagram-story="hasInstagramStory"
|
||||
:has-user-read-message="
|
||||
hasUserReadMessage(message.created_at, getLastSeenAt)
|
||||
"
|
||||
:is-web-widget-inbox="isAWebWidgetInbox"
|
||||
/>
|
||||
</ul>
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
<woot-audio-recorder
|
||||
v-if="showAudioRecorderEditor"
|
||||
ref="audioRecorderInput"
|
||||
:audio-record-format="audioRecordFormat"
|
||||
@state-recorder-progress-changed="onStateProgressRecorderChanged"
|
||||
@state-recorder-changed="onStateRecorderChanged"
|
||||
@finish-record="onFinishRecorder"
|
||||
|
@ -148,7 +147,6 @@ import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
|
|||
import {
|
||||
MAXIMUM_FILE_UPLOAD_SIZE,
|
||||
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
|
||||
AUDIO_FORMATS,
|
||||
} from 'shared/constants/messages';
|
||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||
|
||||
|
@ -464,12 +462,6 @@ export default {
|
|||
editorStateId() {
|
||||
return `draft-${this.conversationIdByRoute}-${this.replyType}`;
|
||||
},
|
||||
audioRecordFormat() {
|
||||
if (this.isAWebWidgetInbox) {
|
||||
return AUDIO_FORMATS.WEBM;
|
||||
}
|
||||
return AUDIO_FORMATS.OGG;
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
currentChat(conversation) {
|
||||
|
|
|
@ -1,14 +1,8 @@
|
|||
<template>
|
||||
<div class="message-text--metadata">
|
||||
<span
|
||||
class="time"
|
||||
:class="{
|
||||
'has-status-icon':
|
||||
showSentIndicator || showDeliveredIndicator || showReadIndicator,
|
||||
}"
|
||||
>
|
||||
{{ readableTime }}
|
||||
</span>
|
||||
<span class="time" :class="{ delivered: messageRead }">{{
|
||||
readableTime
|
||||
}}</span>
|
||||
<span v-if="showReadIndicator" class="read-indicator-wrap">
|
||||
<fluent-icon
|
||||
v-tooltip.top-start="$t('CHAT_LIST.MESSAGE_READ')"
|
||||
|
@ -17,7 +11,7 @@
|
|||
size="14"
|
||||
/>
|
||||
</span>
|
||||
<span v-else-if="showDeliveredIndicator" class="read-indicator-wrap">
|
||||
<span v-if="showDeliveredIndicator" class="read-indicator-wrap">
|
||||
<fluent-icon
|
||||
v-tooltip.top-start="$t('CHAT_LIST.DELIVERED')"
|
||||
icon="checkmark-double"
|
||||
|
@ -25,7 +19,7 @@
|
|||
size="14"
|
||||
/>
|
||||
</span>
|
||||
<span v-else-if="showSentIndicator" class="read-indicator-wrap">
|
||||
<span v-if="showSentIndicator" class="read-indicator-wrap">
|
||||
<fluent-icon
|
||||
v-tooltip.top-start="$t('CHAT_LIST.SENT')"
|
||||
icon="checkmark"
|
||||
|
@ -80,19 +74,17 @@
|
|||
import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
|
||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||
import inboxMixin from 'shared/mixins/inboxMixin';
|
||||
import { mapGetters } from 'vuex';
|
||||
import timeMixin from '../../../../mixins/time';
|
||||
|
||||
export default {
|
||||
mixins: [inboxMixin, timeMixin],
|
||||
mixins: [inboxMixin],
|
||||
props: {
|
||||
sender: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
createdAt: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
readableTime: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
storySender: {
|
||||
type: String,
|
||||
|
@ -138,9 +130,12 @@ export default {
|
|||
type: [String, Number],
|
||||
default: 0,
|
||||
},
|
||||
messageRead: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapGetters({ currentChat: 'getSelectedChat' }),
|
||||
inbox() {
|
||||
return this.$store.getters['inboxes/getInbox'](this.inboxId);
|
||||
},
|
||||
|
@ -150,9 +145,6 @@ export default {
|
|||
isOutgoing() {
|
||||
return MESSAGE_TYPE.OUTGOING === this.messageType;
|
||||
},
|
||||
isTemplate() {
|
||||
return MESSAGE_TYPE.TEMPLATE === this.messageType;
|
||||
},
|
||||
isDelivered() {
|
||||
return MESSAGE_STATUS.DELIVERED === this.messageStatus;
|
||||
},
|
||||
|
@ -162,9 +154,6 @@ export default {
|
|||
isSent() {
|
||||
return MESSAGE_STATUS.SENT === this.messageStatus;
|
||||
},
|
||||
readableTime() {
|
||||
return this.messageStamp(this.createdAt, 'LLL d, h:mm a');
|
||||
},
|
||||
screenName() {
|
||||
const { additional_attributes: additionalAttributes = {} } =
|
||||
this.sender || {};
|
||||
|
@ -185,52 +174,28 @@ export default {
|
|||
const { storySender, storyId } = this;
|
||||
return `https://www.instagram.com/stories/${storySender}/${storyId}`;
|
||||
},
|
||||
showStatusIndicators() {
|
||||
if ((this.isOutgoing || this.isTemplate) && !this.private) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
showSentIndicator() {
|
||||
if (!this.showStatusIndicators) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.isAnEmailChannel) {
|
||||
return !!this.sourceId;
|
||||
}
|
||||
|
||||
if (this.isAWhatsAppChannel) {
|
||||
return this.sourceId && this.isSent;
|
||||
}
|
||||
return false;
|
||||
return (
|
||||
this.isOutgoing &&
|
||||
this.sourceId &&
|
||||
(this.isAnEmailChannel || (this.isAWhatsAppChannel && this.isSent))
|
||||
);
|
||||
},
|
||||
showDeliveredIndicator() {
|
||||
if (!this.showStatusIndicators) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.isAWhatsAppChannel) {
|
||||
return this.sourceId && this.isDelivered;
|
||||
}
|
||||
|
||||
return false;
|
||||
return (
|
||||
this.isOutgoing &&
|
||||
this.sourceId &&
|
||||
this.isAWhatsAppChannel &&
|
||||
this.isDelivered
|
||||
);
|
||||
},
|
||||
showReadIndicator() {
|
||||
if (!this.showStatusIndicators) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.isAWebWidgetInbox) {
|
||||
const { contact_last_seen_at: contactLastSeenAt } = this.currentChat;
|
||||
return contactLastSeenAt >= this.createdAt;
|
||||
}
|
||||
|
||||
if (this.isAWhatsAppChannel) {
|
||||
return this.sourceId && this.isRead;
|
||||
}
|
||||
|
||||
return false;
|
||||
return (
|
||||
this.isOutgoing &&
|
||||
this.sourceId &&
|
||||
this.isAWhatsAppChannel &&
|
||||
this.isRead
|
||||
);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
@ -253,13 +218,12 @@ export default {
|
|||
|
||||
.action--icon {
|
||||
color: var(--white);
|
||||
|
||||
&.read-tick {
|
||||
color: var(--v-100);
|
||||
}
|
||||
|
||||
&.read-indicator {
|
||||
color: var(--g-200);
|
||||
color: var(--g-300);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -324,9 +288,8 @@ export default {
|
|||
position: absolute;
|
||||
right: var(--space-small);
|
||||
white-space: nowrap;
|
||||
|
||||
&.has-status-icon {
|
||||
right: var(--space-large);
|
||||
&.delivered {
|
||||
right: var(--space-medium);
|
||||
line-height: 2;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,10 @@ export default {
|
|||
type: String,
|
||||
default: '',
|
||||
},
|
||||
readableTime: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
isEmail: {
|
||||
type: Boolean,
|
||||
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>
|
|
@ -1,18 +1,13 @@
|
|||
export const FEATURE_FLAGS = {
|
||||
AGENT_BOTS: 'agent_bots',
|
||||
AGENT_MANAGEMENT: 'agent_management',
|
||||
AUTO_RESOLVE_CONVERSATIONS: 'auto_resolve_conversations',
|
||||
AUTOMATIONS: 'automations',
|
||||
CAMPAIGNS: 'campaigns',
|
||||
CANNED_RESPONSES: 'canned_responses',
|
||||
CRM: 'crm',
|
||||
CUSTOM_ATTRIBUTES: 'custom_attributes',
|
||||
INBOX_MANAGEMENT: 'inbox_management',
|
||||
INTEGRATIONS: 'integrations',
|
||||
LABELS: 'labels',
|
||||
MACROS: 'macros',
|
||||
HELP_CENTER: 'help_center',
|
||||
REPORTS: 'reports',
|
||||
TEAM_MANAGEMENT: 'team_management',
|
||||
VOICE_RECORDER: 'voice_recorder',
|
||||
};
|
||||
|
|
|
@ -60,11 +60,15 @@ export const getFormattedPreChatFields = ({ preChatFields }) => {
|
|||
return {
|
||||
...item,
|
||||
label: getLabel({
|
||||
key: item.name,
|
||||
key: standardFieldKeys[item.name]
|
||||
? standardFieldKeys[item.name].key
|
||||
: item.name,
|
||||
label: item.label ? item.label : item.name,
|
||||
}),
|
||||
placeholder: getPlaceHolder({
|
||||
key: item.name,
|
||||
key: standardFieldKeys[item.name]
|
||||
? standardFieldKeys[item.name].key
|
||||
: item.name,
|
||||
placeholder: item.placeholder ? item.placeholder : item.name,
|
||||
}),
|
||||
};
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "لا توجد استجابة",
|
||||
"RATING_TITLE": "التقييم",
|
||||
"FEEDBACK_TITLE": "الملاحظات",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "إغلاق المحادثة",
|
||||
"REOPEN_ACTION": "إعادة فتح",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "رقم الهاتف",
|
||||
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
|
||||
},
|
||||
"API_CALLBACK": {
|
||||
"TITLE": "عنوان Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "رقم الهاتف",
|
||||
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
|
||||
},
|
||||
"SUBMIT_BUTTON": "إنشاء قناة عرض التردد",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "رقم الهاتف",
|
||||
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
|
||||
},
|
||||
"PHONE_NUMBER_ID": {
|
||||
"LABEL": "رقم الهاتف",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"متصل",
|
||||
"مشغول",
|
||||
"غير متصل"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "عنوان البريد الإلكتروني الخاص بك",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "اختر حساباً من القائمة التالية",
|
||||
"PROFILE_SETTINGS": "إعدادات الملف الشخصي",
|
||||
"KEYBOARD_SHORTCUTS": "اختصارات لوحة المفاتيح",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "تسجيل الخروج"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "الفئة",
|
||||
"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": "قراءة المستندات"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "اسم الشركة",
|
||||
"LABEL": "اسم الحساب",
|
||||
"PLACEHOLDER": "مؤسسة Wayne"
|
||||
},
|
||||
"SUBMIT": "إرسال"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "تسجيل حساب",
|
||||
"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>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "اسم الحساب",
|
||||
"PLACEHOLDER": "أدخل اسم الحساب. مثال: Wayne Enterprises",
|
||||
"ERROR": "اسم الحساب قصير جداً"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "الاسم الكامل",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "البريد الإلكتروني للعمل",
|
||||
"PLACEHOLDER": "أدخل عنوان بريدك الإلكتروني للعمل. مثال: bruce@wayne.enterprises",
|
||||
"ERROR": "Please enter a valid work email address"
|
||||
"ERROR": "عنوان البريد الإلكتروني غير صالح"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "كلمة المرور",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "No response",
|
||||
"RATING_TITLE": "Rating",
|
||||
"FEEDBACK_TITLE": "Feedback",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Resolve",
|
||||
"REOPEN_ACTION": "Reopen",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Phone number",
|
||||
"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": {
|
||||
"TITLE": "Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Телефон",
|
||||
"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",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Phone number",
|
||||
"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": {
|
||||
"LABEL": "Phone number ID",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"Online",
|
||||
"Busy",
|
||||
"Offline"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Your email address",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Category",
|
||||
"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"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Име на фирма",
|
||||
"LABEL": "Account Name",
|
||||
"PLACEHOLDER": "Wayne Enterprises"
|
||||
},
|
||||
"SUBMIT": "Изпращане"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Register an account",
|
||||
"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>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Account name",
|
||||
"PLACEHOLDER": "Enter an account name. eg: Wayne Enterprises",
|
||||
"ERROR": "Account name is too short"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Full name",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "Work email",
|
||||
"PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises",
|
||||
"ERROR": "Please enter a valid work email address"
|
||||
"ERROR": "Email address is invalid"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "Password",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "Sense resposta",
|
||||
"RATING_TITLE": "Rating",
|
||||
"FEEDBACK_TITLE": "Feedback",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Resoldre",
|
||||
"REOPEN_ACTION": "Tornar a obrir",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Número de telèfon",
|
||||
"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": {
|
||||
"TITLE": "Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Número de telèfon",
|
||||
"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",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Número de telèfon",
|
||||
"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": {
|
||||
"LABEL": "Phone number ID",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"En línia",
|
||||
"Ocupat",
|
||||
"Fora de línia"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "La teva adreça de correu electrònic",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Selecciona un compte de la llista següent",
|
||||
"PROFILE_SETTINGS": "Configuració del Perfil",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Sortir"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Category",
|
||||
"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"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Nom de la companyia",
|
||||
"LABEL": "Nom del compte",
|
||||
"PLACEHOLDER": "Wayne Enterprises"
|
||||
},
|
||||
"SUBMIT": "Envia"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Registra un compte",
|
||||
"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>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Nom del compte",
|
||||
"PLACEHOLDER": "Introdueix el nom del compte. ex: Wayne Enterprises",
|
||||
"ERROR": "El nom del compte és massa curt"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Nom complet",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "Email de treball",
|
||||
"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": {
|
||||
"LABEL": "Contrasenya",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "Bez odpovědi",
|
||||
"RATING_TITLE": "Hodnocení",
|
||||
"FEEDBACK_TITLE": "Zpětná vazba",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Vyřešit",
|
||||
"REOPEN_ACTION": "Znovu otevřít",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonní číslo",
|
||||
"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": {
|
||||
"TITLE": "Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonní číslo",
|
||||
"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",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonní číslo",
|
||||
"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": {
|
||||
"LABEL": "Phone number ID",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"Online",
|
||||
"Zaneprázdněn",
|
||||
"Offline"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Vaše e-mailová adresa",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Vyberte účet z následujícího seznamu",
|
||||
"PROFILE_SETTINGS": "Nastavení profilu",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Odhlásit se"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Category",
|
||||
"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"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Název společnosti",
|
||||
"LABEL": "Název účtu",
|
||||
"PLACEHOLDER": "Wayne podniky"
|
||||
},
|
||||
"SUBMIT": "Odeslat"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Registrovat účet",
|
||||
"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>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Název účtu",
|
||||
"PLACEHOLDER": "Zadejte název účtu. např.: Novákova společnost",
|
||||
"ERROR": "Název účtu je příliš krátký"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Celé jméno",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "Pracovní e-mail",
|
||||
"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": {
|
||||
"LABEL": "Heslo",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "Intet svar",
|
||||
"RATING_TITLE": "Bedømmelse",
|
||||
"FEEDBACK_TITLE": "Tilbagemelding",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Løs",
|
||||
"REOPEN_ACTION": "Genåben",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonnummer",
|
||||
"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": {
|
||||
"TITLE": "Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonnummer",
|
||||
"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",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonnummer",
|
||||
"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": {
|
||||
"LABEL": "Telefonnummer ID",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"Online",
|
||||
"Optaget",
|
||||
"Offline"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Din e-mail adresse",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Vælg en konto fra følgende liste",
|
||||
"PROFILE_SETTINGS": "Profilindstillinger",
|
||||
"KEYBOARD_SHORTCUTS": "Tastaturgenveje",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Log Ud"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Kategori",
|
||||
"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"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Virksomhedens Navn",
|
||||
"LABEL": "Kontonavn",
|
||||
"PLACEHOLDER": "Wayne Enterprises"
|
||||
},
|
||||
"SUBMIT": "Send"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Registrer en konto",
|
||||
"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>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Kontonavn",
|
||||
"PLACEHOLDER": "Indtast et kontonavn, fx: Wayne Enterprises",
|
||||
"ERROR": "Kontonavn er for kort"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Fulde navn",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "Arbejde e-mail",
|
||||
"PLACEHOLDER": "Indtast din arbejdsmailadresse fx: bruce@wayne.enterprises",
|
||||
"ERROR": "Please enter a valid work email address"
|
||||
"ERROR": "E-mail adresse er ugyldig"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "Adgangskode",
|
||||
|
|
|
@ -1,39 +1,39 @@
|
|||
{
|
||||
"AGENT_BOTS": {
|
||||
"HEADER": "Bots",
|
||||
"LOADING_EDITOR": "Editor wird geladen...",
|
||||
"HEADER_BTN_TXT": "Bot-Konfiguration hinzufügen",
|
||||
"SIDEBAR_TXT": "<p><b>Agenten Bots</b> <p>Agenten Bots erlauben es Ihnen, die Unterhaltungen zu automatisieren</p>",
|
||||
"LOADING_EDITOR": "Loading Editor...",
|
||||
"HEADER_BTN_TXT": "Add Bot Configuration",
|
||||
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
|
||||
"CSML_BOT_EDITOR": {
|
||||
"NAME": {
|
||||
"LABEL": "Bot Name",
|
||||
"PLACEHOLDER": "Geben Sie Ihrem Bot einen Namen",
|
||||
"ERROR": "Bot Name ist erforderlich"
|
||||
"PLACEHOLDER": "Give your bot a name",
|
||||
"ERROR": "Bot name is required"
|
||||
},
|
||||
"DESCRIPTION": {
|
||||
"LABEL": "Bot Beschreibung",
|
||||
"PLACEHOLDER": "Was macht dieser Bot?"
|
||||
"LABEL": "Bot Description",
|
||||
"PLACEHOLDER": "What does this bot do?"
|
||||
},
|
||||
"BOT_CONFIG": {
|
||||
"ERROR": "Bitte geben Sie Ihre CSML Bot-Konfiguration oben ein",
|
||||
"API_ERROR": "Ihre CSML-Konfiguration ist ungültig, bitte korrigieren Sie sie und versuchen es erneut."
|
||||
"ERROR": "Please enter your CSML bot configuration above",
|
||||
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
|
||||
},
|
||||
"SUBMIT": "Validieren und speichern"
|
||||
"SUBMIT": "Validate and save"
|
||||
},
|
||||
"BOT_CONFIGURATION": {
|
||||
"TITLE": "Agenten-Bot auswählen",
|
||||
"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.",
|
||||
"TITLE": "Select an agent bot",
|
||||
"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",
|
||||
"SUCCESS_MESSAGE": "Agenten-Bot erfolgreich aktualisiert",
|
||||
"ERROR_MESSAGE": "Konnte den Agenten-Bot nicht aktualisieren, bitte versuchen Sie es später erneut",
|
||||
"SELECT_PLACEHOLDER": "Bot auswählen"
|
||||
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
|
||||
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
|
||||
"SELECT_PLACEHOLDER": "Select Bot"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Neuen Bot konfigurieren",
|
||||
"TITLE": "Configure new bot",
|
||||
"CANCEL_BUTTON_TEXT": "Stornieren",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Bot erfolgreich hinzugefügt",
|
||||
"ERROR_MESSAGE": "Bot konnte nicht hinzugefügt werden, bitte versuchen Sie es später erneut"
|
||||
"SUCCESS_MESSAGE": "Bot added successfully",
|
||||
"ERROR_MESSAGE": "Could not add bot, Please try again later"
|
||||
}
|
||||
},
|
||||
"LIST": {
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "Keine Antwort",
|
||||
"RATING_TITLE": "Bewertung",
|
||||
"FEEDBACK_TITLE": "Feedback",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Fall schließen",
|
||||
"REOPEN_ACTION": "Wieder öffnen",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -362,7 +362,7 @@
|
|||
},
|
||||
"BUTTONS": {
|
||||
"CREATE": "Kategorie erstellen",
|
||||
"CANCEL": "Abbrechen"
|
||||
"CANCEL": "Stornieren"
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Kategorie erfolgreich erstellt",
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonnummer",
|
||||
"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": {
|
||||
"TITLE": "Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonnummer",
|
||||
"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",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Telefonnummer",
|
||||
"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": {
|
||||
"LABEL": "Telefonnummer-ID",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"Online",
|
||||
"Beschäftigt",
|
||||
"Offline"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Deine Emailadresse",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Wählen Sie ein Benutzerkonto aus der folgenden Liste",
|
||||
"PROFILE_SETTINGS": "Profileinstellungen",
|
||||
"KEYBOARD_SHORTCUTS": "Tastenkombinationen",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Ausloggen"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Kategorie",
|
||||
"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"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Firmenname",
|
||||
"LABEL": "Kontobezeichnung",
|
||||
"PLACEHOLDER": "Wayne Enterprises"
|
||||
},
|
||||
"SUBMIT": "Abschicken"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Einen Account 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>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Kontobezeichnung",
|
||||
"PLACEHOLDER": "Geben Sie einen Kontonamen ein, z. B.: Wayne Enterprises",
|
||||
"ERROR": "Kontoname ist zu kurz"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Vollständiger Name",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "Geschäftliche E-Mail-Adresse",
|
||||
"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": {
|
||||
"LABEL": "Passwort",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "Καμία ανταπόκριση",
|
||||
"RATING_TITLE": "Αξιολόγηση",
|
||||
"FEEDBACK_TITLE": "Ανατροφοδότηση",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Προβολή ετικετών",
|
||||
"HIDE_LABELS": "Απόκρυψη ετικετών"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Επίλυση",
|
||||
"REOPEN_ACTION": "Επαναφορά",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Αναζήτηση emojis",
|
||||
"NOT_FOUND": "Κανένα emoji δεν ταιριάζει με την αναζήτησή σας"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Αριθμός τηλεφώνου",
|
||||
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
||||
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
|
||||
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
|
||||
},
|
||||
"API_CALLBACK": {
|
||||
"TITLE": "URL επανάκλησης",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Αριθμός τηλεφώνου",
|
||||
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
||||
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
|
||||
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
|
||||
},
|
||||
"SUBMIT_BUTTON": "Δημιουργήστε Bandwidth",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Αριθμός τηλεφώνου",
|
||||
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
|
||||
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
|
||||
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
|
||||
},
|
||||
"PHONE_NUMBER_ID": {
|
||||
"LABEL": "Αριθμός Τηλεφώνου",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"Στην Γραμμή",
|
||||
"Απασχολημένος",
|
||||
"Εκτός"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Η διαθεσιμότητα ορίστηκε με επιτυχία",
|
||||
"SET_AVAILABILITY_ERROR": "Αδυναμία ορισμού διαθεσιμότητας, παρακαλώ προσπαθήστε ξανά"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Η διεύθυνση email",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Επιλέξτε ένα λογαριασμό από την Λίστα",
|
||||
"PROFILE_SETTINGS": "Ρυθμίσεις Προφίλ",
|
||||
"KEYBOARD_SHORTCUTS": "Συντομεύσεις Πληκτρολογίου",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Κονσόλα",
|
||||
"LOGOUT": "Έξοδος (Logout)"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Κατηγορία",
|
||||
"CATEGORY_EMPTY_MESSAGE": "Δεν βρέθηκαν κατηγορίες"
|
||||
},
|
||||
"SET_AUTO_OFFLINE": {
|
||||
"TEXT": "Αυτόματη σήμανση εκτός σύνδεσης",
|
||||
"INFO_TEXT": "Αφήστε το σύστημα να σας σηματοδοτήσει αυτόματα εκτός σύνδεσης, όταν δεν χρησιμοποιείτε την εφαρμογή ή τον πίνακα ελέγχου."
|
||||
},
|
||||
"DOCS": "Ανάγνωση εγγράφων"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Όνομα Εταιρείας",
|
||||
"LABEL": "Ονομασία Λογαριασμού",
|
||||
"PLACEHOLDER": "Wayne Α. Ε"
|
||||
},
|
||||
"SUBMIT": "Καταχώρηση"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Καταχωρήστε ένα λογαριασμό",
|
||||
"TITLE": "Καταχώρηση",
|
||||
"TESTIMONIAL_HEADER": "Το μόνο που χρειάζεται είναι ένα βήμα για να προχωρήσουμε",
|
||||
"TESTIMONIAL_CONTENT": "Είστε ένα βήμα μακριά από την εμπλοκή των πελατών σας, και την εύρεση νέων.",
|
||||
"TERMS_ACCEPT": "Με την καταχώρηση, έχετε συμφωνήσει με τους όρους μας <a href=\"https://www.chatwoot.com/terms\">T & C</a> και <a href=\"https://www.chatwoot.com/privacy-policy\">την πολιτική ιδιωτικών δεδομένων</a>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Επωνυμία εταιρείας",
|
||||
"PLACEHOLDER": "Εισάγετε το όνομα της εταιρείας σας. π. χ.: Wayne Enterprises",
|
||||
"ERROR": "Το όνομα της εταιρείας είναι πολύ σύντομο"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Ονομασία Λογαριασμού",
|
||||
"PLACEHOLDER": "Συμπληρώστε όνομα λογαριασμού π. χ. Wayne Α. Ε",
|
||||
"ERROR": "Το όνομα του λογαριασμού είναι πολύ σύντομο"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Πλήρες όνομα",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "email εργασίας",
|
||||
"PLACEHOLDER": "συμπληρώστε το email εργασίας πχ: papadopoulos@wyane.com",
|
||||
"ERROR": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email"
|
||||
"ERROR": "Η διεύθυνση email είναι εσφαλμένη"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "Κωδικός",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "No response",
|
||||
"RATING_TITLE": "Rating",
|
||||
"FEEDBACK_TITLE": "Feedback",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Resolve",
|
||||
"REOPEN_ACTION": "Reopen",
|
||||
|
|
|
@ -97,6 +97,7 @@
|
|||
"SEARCH_PLACEHOLDER": "Search or jump to",
|
||||
"SECTIONS": {
|
||||
"GENERAL": "General",
|
||||
"CHATWOOT": "Search Chatwoot",
|
||||
"REPORTS": "Reports",
|
||||
"CONVERSATION": "Conversation",
|
||||
"CHANGE_ASSIGNEE": "Change Assignee",
|
||||
|
@ -107,6 +108,7 @@
|
|||
},
|
||||
"COMMANDS": {
|
||||
"GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard",
|
||||
"SEARCH_EVEYTHING": "Search everything",
|
||||
"GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard",
|
||||
"GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview",
|
||||
"GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports",
|
||||
|
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Phone number",
|
||||
"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": {
|
||||
"TITLE": "Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Phone number",
|
||||
"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",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Phone number",
|
||||
"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": {
|
||||
"LABEL": "Phone number ID",
|
||||
|
|
|
@ -99,9 +99,7 @@
|
|||
},
|
||||
"AVAILABILITY": {
|
||||
"LABEL": "Availability",
|
||||
"STATUSES_LIST": ["Online", "Busy", "Offline"],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
"STATUSES_LIST": ["Online", "Busy", "Offline"]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Your email address",
|
||||
|
@ -132,7 +130,6 @@
|
|||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||||
"PROFILE_SETTINGS": "Profile Settings",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Logout"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -225,10 +222,6 @@
|
|||
"CATEGORY": "Category",
|
||||
"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"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "No hay respuesta",
|
||||
"RATING_TITLE": "Calificación",
|
||||
"FEEDBACK_TITLE": "Comentarios",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Resolver",
|
||||
"REOPEN_ACTION": "Reabrir",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Número de teléfono",
|
||||
"PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`."
|
||||
},
|
||||
"API_CALLBACK": {
|
||||
"TITLE": "URL de devolución de llamada",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Número de teléfono",
|
||||
"PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`."
|
||||
},
|
||||
"SUBMIT_BUTTON": "Crear Canal de Bandwidth",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Número de teléfono",
|
||||
"PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`."
|
||||
},
|
||||
"PHONE_NUMBER_ID": {
|
||||
"LABEL": "ID de número de teléfono",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"En línea",
|
||||
"Ocupado",
|
||||
"Fuera de línea"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Tu dirección de correo",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Seleccione una cuenta de la siguiente lista",
|
||||
"PROFILE_SETTINGS": "Ajustes del perfil",
|
||||
"KEYBOARD_SHORTCUTS": "Atajos de teclado",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Cerrar sesión"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Categoría",
|
||||
"CATEGORY_EMPTY_MESSAGE": "No se encontraron categorías"
|
||||
},
|
||||
"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": "Leer documentos"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Empresa",
|
||||
"LABEL": "Nombre de cuenta",
|
||||
"PLACEHOLDER": "Empresas de Wayne"
|
||||
},
|
||||
"SUBMIT": "Enviar"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Registrar una cuenta",
|
||||
"TITLE": "Registrarse",
|
||||
"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": "Al registrarte, aceptas nuestra <a href=\"https://www.chatwoot.com/terms\">T & C</a> y nuestra <a href=\"https://www.chatwoot.com/privacy-policy\">política de privacidad</a>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Nombre de cuenta",
|
||||
"PLACEHOLDER": "Empresas de Wayne",
|
||||
"ERROR": "El nombre de la cuenta es demasiado corto"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Nombre completo",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "E-mail",
|
||||
"PLACEHOLDER": "bruce@wayne.empresas",
|
||||
"ERROR": "Please enter a valid work email address"
|
||||
"ERROR": "El correo no es válido"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "Contraseña",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "بدون پاسخ",
|
||||
"RATING_TITLE": "رتبه",
|
||||
"FEEDBACK_TITLE": "بازخورد",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "مشاهده کردن برچسبها",
|
||||
"HIDE_LABELS": "پنهان کردن برچسبها"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "حل شد",
|
||||
"REOPEN_ACTION": "دوباره باز کنید",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "جستجوی ایموجی",
|
||||
"NOT_FOUND": "هیچ ایموجی با جستجوی شما مطابقت ندارد"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "شماره تلفن",
|
||||
"PLACEHOLDER": "لطفا شمارهای که پیام میبایست به آن ارسال شود را وارد کنید",
|
||||
"ERROR": "لطفا یک شماره تلفن معتبر ارائه دهید که با علامت «+» شروع شود و بدون فاصله بین اعداد باشد."
|
||||
"ERROR": "لطفا شماره تلفن را به شکل صحیح وارد کنید. شماره میبایست با کاراکتر `+` شروع شود"
|
||||
},
|
||||
"API_CALLBACK": {
|
||||
"TITLE": "آدرس URL مربوط به API",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "شماره تلفن",
|
||||
"PLACEHOLDER": "لطفا شمارهای که پیام میبایست به آن ارسال شود را وارد کنید",
|
||||
"ERROR": "لطفا یک شماره تلفن معتبر ارائه دهید که با علامت «+» شروع شود و بدون فاصله بین اعداد باشد."
|
||||
"ERROR": "لطفا شماره تلفن را به شکل صحیح وارد کنید. شماره میبایست با کاراکتر `+` شروع شود"
|
||||
},
|
||||
"SUBMIT_BUTTON": "ایجاد کانال Bandwidth",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "شماره تلفن",
|
||||
"PLACEHOLDER": "لطفا شمارهای که پیام میبایست به آن ارسال شود را وارد کنید",
|
||||
"ERROR": "لطفا یک شماره تلفن معتبر ارائه دهید که با علامت «+» شروع شود و بدون فاصله بین اعداد باشد."
|
||||
"ERROR": "لطفا شماره تلفن را به شکل صحیح وارد کنید. شماره میبایست با کاراکتر `+` شروع شود"
|
||||
},
|
||||
"PHONE_NUMBER_ID": {
|
||||
"LABEL": "شناسه شماره تلفن",
|
||||
|
@ -445,8 +445,8 @@
|
|||
"ENABLE_CSAT_SUB_TEXT": "پس از پایان گفتگو ، نظرسنجی CSAT (رضایت مشتری) را فعال/غیرفعال کنید",
|
||||
"ENABLE_CONTINUITY_VIA_EMAIL": "ادامه مکالمه را از طریق ایمیل فعال کنید",
|
||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "اگر آدرس ایمیل تماس در دسترس باشد، مکالمات از طریق ایمیل ادامه خواهد یافت.",
|
||||
"LOCK_TO_SINGLE_CONVERSATION": "قفل کردن مکالمه تکی",
|
||||
"LOCK_TO_SINGLE_CONVERSATION_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_SUB_TEXT": "تغییر پارامترهای صندوق ورودی",
|
||||
"AUTO_ASSIGNMENT_SUB_TEXT": "فعال کردن یا غیرفعال کردن واگذاری خودکار گفتگوها به ایجنت های عضو این صندوق ورودی.",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"آنلاین",
|
||||
"مشغول",
|
||||
"آفلاین"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "در دسترس بودن با موفقیت تنظیم شد",
|
||||
"SET_AVAILABILITY_ERROR": "در دسترس بودن تنظیم نشد، لطفا دوباره امتحان کنید"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "ایمیل شما",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "از لیست یکی از حسابها را انتخاب کنید",
|
||||
"PROFILE_SETTINGS": "تنظیمات پروفایل",
|
||||
"KEYBOARD_SHORTCUTS": "میانبرهای صفحهکلید",
|
||||
"SUPER_ADMIN_CONSOLE": "کنسول سوپر مدیر",
|
||||
"LOGOUT": "خروج از حسابکاربری"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "دستهبندی",
|
||||
"CATEGORY_EMPTY_MESSAGE": "هیچ دستهبندیای یافت نشد"
|
||||
},
|
||||
"SET_AUTO_OFFLINE": {
|
||||
"TEXT": "علامت گذاری خودکار به صورت آفلاین",
|
||||
"INFO_TEXT": "هنگامی که از برنامه یا پیشخوان استفاده نمیکنید، به سیستم اجازه دهید به طور خودکار شما را به صورت آفلاین علامت گذاری کند."
|
||||
},
|
||||
"DOCS": "اسناد را بخوانید"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "نام شرکت",
|
||||
"LABEL": "عنوان حساب",
|
||||
"PLACEHOLDER": "شرکت ایران ناسیونال"
|
||||
},
|
||||
"SUBMIT": "ثبت"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "ثبتنام حسابکاربری",
|
||||
"TITLE": "ثبت نام",
|
||||
"TESTIMONIAL_HEADER": "تنها چیزی که لازم است یک قدم برای حرکت به جلو است",
|
||||
"TESTIMONIAL_CONTENT": "شما یک قدم تا جذب مشتریان خود، حفظ آنها و یافتن مشتریان جدید فاصله دارید.",
|
||||
"TERMS_ACCEPT": "با ثبت نام، اعلام میدارید که <a href=\"https://www.chatwoot.com/terms\">قوانین</a> و <a href=\"https://www.chatwoot.com/privacy-policy\">شرایط استفاده</a> از این نرم افزار را تایید کرده و میپذیرید",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "نام شرکت",
|
||||
"PLACEHOLDER": "نام شرکت خود را وارد کنید. به عنوان مثال: شرکت وین",
|
||||
"ERROR": "نام شرکت خیلی کوتاه است"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "نام حسابکاربری",
|
||||
"PLACEHOLDER": "نام حسابکاربری را وارد کنید. به عنوان مثال: شرکت وین",
|
||||
"ERROR": "نام حسابکاربری خیلی کوتاه است"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "نام کامل",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "ایمیل کاری",
|
||||
"PLACEHOLDER": "ایمیل کاری خود را وارد کنید به عنوان مثال: jafari@wayne.enterprises",
|
||||
"ERROR": "لطفا یک آدرس ایمیل کاری معتبر وارد کنید"
|
||||
"ERROR": "آدرس ایمیل معتبر نیست"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "رمز عبور",
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "No response",
|
||||
"RATING_TITLE": "Arvio",
|
||||
"FEEDBACK_TITLE": "Palaute",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Ratkaise",
|
||||
"REOPEN_ACTION": "Uudelleenavaa",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Search emojis",
|
||||
"NOT_FOUND": "No emoji match your search"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Puhelinnumero",
|
||||
"PLACEHOLDER": "Ole hyvä ja syötä puhelinnumero, josta viesti lähetetään.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Anna kelvollinen arvo. Puhelinnumeron pitäisi alkaa `+` merkillä."
|
||||
},
|
||||
"API_CALLBACK": {
|
||||
"TITLE": "Callback URL",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Puhelinnumero",
|
||||
"PLACEHOLDER": "Ole hyvä ja syötä puhelinnumero, josta viesti lähetetään.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Anna kelvollinen arvo. Puhelinnumeron pitäisi alkaa `+` merkillä."
|
||||
},
|
||||
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Puhelinnumero",
|
||||
"PLACEHOLDER": "Ole hyvä ja syötä puhelinnumero, josta viesti lähetetään.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Anna kelvollinen arvo. Puhelinnumeron pitäisi alkaa `+` merkillä."
|
||||
},
|
||||
"PHONE_NUMBER_ID": {
|
||||
"LABEL": "Phone number ID",
|
||||
|
|
|
@ -103,9 +103,7 @@
|
|||
"Paikalla",
|
||||
"Kiireinen",
|
||||
"Poissa"
|
||||
],
|
||||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
|
||||
]
|
||||
},
|
||||
"EMAIL": {
|
||||
"LABEL": "Sinun sähköpostiosoitteesi",
|
||||
|
@ -136,7 +134,6 @@
|
|||
"SELECTOR_SUBTITLE": "Valitse tili tästä luettelosta",
|
||||
"PROFILE_SETTINGS": "Profiilin asetukset",
|
||||
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
|
||||
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
|
||||
"LOGOUT": "Kirjaudu ulos"
|
||||
},
|
||||
"APP_GLOBAL": {
|
||||
|
@ -229,10 +226,6 @@
|
|||
"CATEGORY": "Category",
|
||||
"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"
|
||||
},
|
||||
"BILLING_SETTINGS": {
|
||||
|
@ -264,7 +257,7 @@
|
|||
},
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Yrityksen nimi",
|
||||
"LABEL": "Tilin nimi",
|
||||
"PLACEHOLDER": "Wayne Enterprises"
|
||||
},
|
||||
"SUBMIT": "Lähetä"
|
||||
|
|
|
@ -2,13 +2,11 @@
|
|||
"REGISTER": {
|
||||
"TRY_WOOT": "Luo tili",
|
||||
"TITLE": "Rekisteröidy",
|
||||
"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": "Rekisteröitymällä hyväksyt <a href=\"https://www.chatwoot.com/terms\">käyttöehdot & säännöt</a> sekä <a href=\"https://www.chatwoot.com/privacy-policy\">yksityisyydensuojan</a>",
|
||||
"COMPANY_NAME": {
|
||||
"LABEL": "Company name",
|
||||
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
|
||||
"ERROR": "Company name is too short"
|
||||
"ACCOUNT_NAME": {
|
||||
"LABEL": "Tilin nimi",
|
||||
"PLACEHOLDER": "Anna käyttäjän nimi, esim: Wayne Enterprises",
|
||||
"ERROR": "Tilin nimi on liian lyhyt"
|
||||
},
|
||||
"FULL_NAME": {
|
||||
"LABEL": "Koko nimi",
|
||||
|
@ -18,7 +16,7 @@
|
|||
"EMAIL": {
|
||||
"LABEL": "Työsähköposti",
|
||||
"PLACEHOLDER": "Anna työsi sähköpostiosoite, esim: bruce@wayne.enterprises",
|
||||
"ERROR": "Please enter a valid work email address"
|
||||
"ERROR": "Sähköpostiosoite ei ole kelvollinen"
|
||||
},
|
||||
"PASSWORD": {
|
||||
"LABEL": "Salasana",
|
||||
|
|
|
@ -1,50 +1,50 @@
|
|||
{
|
||||
"FILTER": {
|
||||
"TITLE": "Filtrer les conversations",
|
||||
"SUBTITLE": "Ajoutez des filtres ci-dessous et appuyez sur 'Appliquer des filtres' pour filtrer les conversations.",
|
||||
"ADD_NEW_FILTER": "Ajouter un filtre",
|
||||
"FILTER_DELETE_ERROR": "Vous devriez avoir au moins un filtre afin d'enregistrer",
|
||||
"SUBMIT_BUTTON_LABEL": "Appliquer les filtres",
|
||||
"TITLE": "Filter Conversations",
|
||||
"SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.",
|
||||
"ADD_NEW_FILTER": "Add Filter",
|
||||
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
|
||||
"SUBMIT_BUTTON_LABEL": "Apply filters",
|
||||
"CANCEL_BUTTON_LABEL": "Annuler",
|
||||
"CLEAR_BUTTON_LABEL": "Effacer les filtres",
|
||||
"CLEAR_BUTTON_LABEL": "Clear Filters",
|
||||
"EMPTY_VALUE_ERROR": "Value is required",
|
||||
"TOOLTIP_LABEL": "Filtrer les conversations",
|
||||
"TOOLTIP_LABEL": "Filter conversations",
|
||||
"QUERY_DROPDOWN_LABELS": {
|
||||
"AND": "ET",
|
||||
"OR": "OU"
|
||||
"AND": "AND",
|
||||
"OR": "OR"
|
||||
},
|
||||
"OPERATOR_LABELS": {
|
||||
"equal_to": "Égal à",
|
||||
"not_equal_to": "Pas égal à",
|
||||
"contains": "Contient",
|
||||
"does_not_contain": "Ne contient pas",
|
||||
"is_present": "Est présent",
|
||||
"is_not_present": "N'est pas présent",
|
||||
"is_greater_than": "Est plus grand que",
|
||||
"is_less_than": "Est inférieur à",
|
||||
"days_before": "Est x jours avant"
|
||||
"equal_to": "Equal to",
|
||||
"not_equal_to": "Not equal to",
|
||||
"contains": "Contains",
|
||||
"does_not_contain": "Does not contain",
|
||||
"is_present": "Is present",
|
||||
"is_not_present": "Is not present",
|
||||
"is_greater_than": "Is greater than",
|
||||
"is_less_than": "Is lesser than",
|
||||
"days_before": "Is x days before"
|
||||
},
|
||||
"ATTRIBUTE_LABELS": {
|
||||
"TRUE": "Vrai",
|
||||
"FALSE": "Faux"
|
||||
"TRUE": "True",
|
||||
"FALSE": "False"
|
||||
},
|
||||
"ATTRIBUTES": {
|
||||
"STATUS": "État",
|
||||
"ASSIGNEE_NAME": "Assignee Name",
|
||||
"INBOX_NAME": "Nom de la boîte de réception",
|
||||
"TEAM_NAME": "Nom de l'équipe",
|
||||
"TEAM_NAME": "Team Name",
|
||||
"CONVERSATION_IDENTIFIER": "Conversation Identifier",
|
||||
"CAMPAIGN_NAME": "Campaign Name",
|
||||
"LABELS": "Étiquettes",
|
||||
"BROWSER_LANGUAGE": "Langue du navigateur",
|
||||
"COUNTRY_NAME": "Nom du pays",
|
||||
"BROWSER_LANGUAGE": "Browser Language",
|
||||
"COUNTRY_NAME": "Country Name",
|
||||
"REFERER_LINK": "Referer link",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "Liste",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Texte",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Nombre",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Lien",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Case à cocher",
|
||||
"CREATED_AT": "Créé le",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "List",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
||||
"CREATED_AT": "Created At",
|
||||
"LAST_ACTIVITY": "Dernière activité"
|
||||
},
|
||||
"GROUPS": {
|
||||
|
@ -54,7 +54,7 @@
|
|||
},
|
||||
"CUSTOM_VIEWS": {
|
||||
"ADD": {
|
||||
"TITLE": "Voulez-vous enregistrer ce filtre ?",
|
||||
"TITLE": "Do you want to save this filter?",
|
||||
"LABEL": "Name this filter",
|
||||
"PLACEHOLDER": "Enter a name for this filter",
|
||||
"ERROR_MESSAGE": "Le nom est requis",
|
||||
|
@ -70,7 +70,7 @@
|
|||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"DELETE_BUTTON": "Supprimer le filtre",
|
||||
"DELETE_BUTTON": "Delete filter",
|
||||
"MODAL": {
|
||||
"CONFIRM": {
|
||||
"TITLE": "Confirmer la suppression",
|
||||
|
|
|
@ -87,13 +87,13 @@
|
|||
},
|
||||
"CONDITION": {
|
||||
"DELETE_MESSAGE": "Vous devez avoir au moins une condition pour enregistrer",
|
||||
"CONTACT_CUSTOM_ATTR_LABEL": "Attributs personnalisés des contacts",
|
||||
"CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes",
|
||||
"CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes"
|
||||
},
|
||||
"ACTION": {
|
||||
"DELETE_MESSAGE": "Vous devez avoir au moins une action pour enregistrer",
|
||||
"TEAM_MESSAGE_INPUT_PLACEHOLDER": "Saisissez votre message ici",
|
||||
"TEAM_DROPDOWN_PLACEHOLDER": "Sélectionner une équipe"
|
||||
"TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here",
|
||||
"TEAM_DROPDOWN_PLACEHOLDER": "Select teams"
|
||||
},
|
||||
"TOGGLE": {
|
||||
"ACTIVATION_TITLE": "Activer la règle d'automatisation",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
},
|
||||
"TAB_HEADING": "Conversations",
|
||||
"MENTION_HEADING": "Mentions",
|
||||
"UNATTENDED_HEADING": "Sans suivi",
|
||||
"UNATTENDED_HEADING": "Unattended",
|
||||
"SEARCH": {
|
||||
"INPUT": "Rechercher des personnes, des conversations, des réponses standardisées ..."
|
||||
},
|
||||
|
@ -57,12 +57,12 @@
|
|||
"REPLY_TO_TWEET": "Répondre à ce tweet",
|
||||
"LINK_TO_STORY": "Aller à l'histoire instagram",
|
||||
"SENT": "Envoyé avec succès",
|
||||
"READ": "Lu",
|
||||
"DELIVERED": "Reçu",
|
||||
"READ": "Read successfully",
|
||||
"DELIVERED": "Delivered successfully",
|
||||
"NO_MESSAGES": "Pas de messages",
|
||||
"NO_CONTENT": "Aucun contenu disponible",
|
||||
"HIDE_QUOTED_TEXT": "Masquer le texte cité",
|
||||
"SHOW_QUOTED_TEXT": "Afficher le texte cité",
|
||||
"MESSAGE_READ": "Lu"
|
||||
"MESSAGE_READ": "Read"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"COPY_SUCCESSFUL": "Copié dans le presse-papiers avec succès",
|
||||
"COMPANY": "Société",
|
||||
"LOCATION": "Localisation",
|
||||
"BROWSER_LANGUAGE": "Langue du navigateur",
|
||||
"BROWSER_LANGUAGE": "Browser Language",
|
||||
"CONVERSATION_TITLE": "Détails de la conversation",
|
||||
"VIEW_PROFILE": "Voir le profil",
|
||||
"BROWSER": "Navigateur",
|
||||
|
|
|
@ -2,28 +2,28 @@
|
|||
"CONTACTS_FILTER": {
|
||||
"TITLE": "Filter Contacts",
|
||||
"SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.",
|
||||
"ADD_NEW_FILTER": "Ajouter un filtre",
|
||||
"ADD_NEW_FILTER": "Add Filter",
|
||||
"CLEAR_ALL_FILTERS": "Clear All Filters",
|
||||
"FILTER_DELETE_ERROR": "Vous devriez avoir au moins un filtre afin d'enregistrer",
|
||||
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
|
||||
"SUBMIT_BUTTON_LABEL": "Envoyer",
|
||||
"CANCEL_BUTTON_LABEL": "Annuler",
|
||||
"CLEAR_BUTTON_LABEL": "Effacer les filtres",
|
||||
"CLEAR_BUTTON_LABEL": "Clear Filters",
|
||||
"EMPTY_VALUE_ERROR": "Value is required",
|
||||
"TOOLTIP_LABEL": "Filter contacts",
|
||||
"QUERY_DROPDOWN_LABELS": {
|
||||
"AND": "ET",
|
||||
"OR": "OU"
|
||||
"AND": "AND",
|
||||
"OR": "OR"
|
||||
},
|
||||
"OPERATOR_LABELS": {
|
||||
"equal_to": "Égal à",
|
||||
"not_equal_to": "Pas égal à",
|
||||
"contains": "Contient",
|
||||
"does_not_contain": "Ne contient pas",
|
||||
"is_present": "Est présent",
|
||||
"is_not_present": "N'est pas présent",
|
||||
"is_greater_than": "Est plus grand que",
|
||||
"equal_to": "Equal to",
|
||||
"not_equal_to": "Not equal to",
|
||||
"contains": "Contains",
|
||||
"does_not_contain": "Does not contain",
|
||||
"is_present": "Is present",
|
||||
"is_not_present": "Is not present",
|
||||
"is_greater_than": "Is greater than",
|
||||
"is_lesser_than": "Is lesser than",
|
||||
"days_before": "Est x jours avant"
|
||||
"days_before": "Is x days before"
|
||||
},
|
||||
"ATTRIBUTES": {
|
||||
"NAME": "Nom",
|
||||
|
@ -32,12 +32,12 @@
|
|||
"IDENTIFIER": "Identifier",
|
||||
"CITY": "Ville",
|
||||
"COUNTRY": "Pays",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "Liste",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Texte",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Nombre",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Lien",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Case à cocher",
|
||||
"CREATED_AT": "Créé le",
|
||||
"CUSTOM_ATTRIBUTE_LIST": "List",
|
||||
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
||||
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
|
||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
||||
"CREATED_AT": "Created At",
|
||||
"LAST_ACTIVITY": "Dernière activité",
|
||||
"REFERER_LINK": "Referrer link"
|
||||
},
|
||||
|
|
|
@ -41,10 +41,6 @@
|
|||
"NO_RESPONSE": "Pas de réponse",
|
||||
"RATING_TITLE": "Note",
|
||||
"FEEDBACK_TITLE": "Commentaires",
|
||||
"CARD": {
|
||||
"SHOW_LABELS": "Show labels",
|
||||
"HIDE_LABELS": "Hide labels"
|
||||
},
|
||||
"HEADER": {
|
||||
"RESOLVE_ACTION": "Résoudre",
|
||||
"REOPEN_ACTION": "Ré-ouvrir",
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"EMOJI": {
|
||||
"PLACEHOLDER": "Rechercher des émojis",
|
||||
"NOT_FOUND": "Aucun émoji ne correspond à votre recherche"
|
||||
}
|
||||
}
|
|
@ -134,7 +134,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Numéro de téléphone",
|
||||
"PLACEHOLDER": "Veuillez entrer le numéro de téléphone à partir duquel le message sera envoyé.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Veuillez entrer une valeur valide. Le numéro de téléphone doit commencer par le signe `+`."
|
||||
},
|
||||
"API_CALLBACK": {
|
||||
"TITLE": "URL de rappel (callback)",
|
||||
|
@ -185,7 +185,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Numéro de téléphone",
|
||||
"PLACEHOLDER": "Veuillez entrer le numéro de téléphone à partir duquel le message sera envoyé.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Veuillez entrer une valeur valide. Le numéro de téléphone doit commencer par le signe `+`."
|
||||
},
|
||||
"SUBMIT_BUTTON": "Créer un canal de bande passante",
|
||||
"API": {
|
||||
|
@ -214,7 +214,7 @@
|
|||
"PHONE_NUMBER": {
|
||||
"LABEL": "Numéro de téléphone",
|
||||
"PLACEHOLDER": "Veuillez entrer le numéro de téléphone à partir duquel le message sera envoyé.",
|
||||
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
|
||||
"ERROR": "Veuillez entrer une valeur valide. Le numéro de téléphone doit commencer par le signe `+`."
|
||||
},
|
||||
"PHONE_NUMBER_ID": {
|
||||
"LABEL": "Phone number ID",
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue