@@ -153,14 +155,21 @@ export default {
diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue
index 956827c18..2282ebd37 100644
--- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue
+++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue
@@ -236,8 +236,10 @@ export default {
});
},
articleCount() {
- const { all_articles_count: count } = this.portal.meta;
- return count;
+ const { allowed_locales: allowedLocales } = this.portal.config;
+ return allowedLocales.reduce((acc, locale) => {
+ return acc + locale.articles_count;
+ }, 0);
},
},
methods: {
diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSwitch.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSwitch.vue
index 4442150c5..30f3fb4ff 100644
--- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSwitch.vue
+++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalSwitch.vue
@@ -105,7 +105,10 @@ export default {
return this.portal?.config?.allowed_locales;
},
articlesCount() {
- return this.portal?.meta?.all_articles_count;
+ const { allowed_locales: allowedLocales } = this.portal.config;
+ return allowedLocales.reduce((acc, locale) => {
+ return acc + locale.articles_count;
+ }, 0);
},
},
mounted() {
diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/EditArticle.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/EditArticle.vue
index 1dba3a1d4..ff737913f 100644
--- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/EditArticle.vue
+++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/EditArticle.vue
@@ -151,6 +151,7 @@ export default {
params: {
portalSlug: this.selectedPortalSlug,
locale: this.locale,
+ recentlyDeleted: true,
},
});
} catch (error) {
diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/NewArticle.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/NewArticle.vue
index 865c87c3a..a7c8d9c21 100644
--- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/NewArticle.vue
+++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/NewArticle.vue
@@ -87,6 +87,7 @@ export default {
articleSlug: articleId,
portalSlug: this.selectedPortalSlug,
locale: this.locale,
+ recentlyCreated: true,
},
});
} catch (error) {
diff --git a/app/javascript/shared/components/ResizableTextArea.vue b/app/javascript/shared/components/ResizableTextArea.vue
index 6c7f8a78a..ce2a42488 100644
--- a/app/javascript/shared/components/ResizableTextArea.vue
+++ b/app/javascript/shared/components/ResizableTextArea.vue
@@ -37,6 +37,13 @@ export default {
this.resizeTextarea();
},
},
+ mounted() {
+ this.$nextTick(() => {
+ if (this.value) {
+ this.resizeTextarea();
+ }
+ });
+ },
methods: {
resizeTextarea() {
if (!this.value) {
diff --git a/config/initializers/devise_token_auth.rb b/config/initializers/devise_token_auth.rb
index f222bd7ba..e8500019b 100644
--- a/config/initializers/devise_token_auth.rb
+++ b/config/initializers/devise_token_auth.rb
@@ -15,7 +15,7 @@ DeviseTokenAuth.setup do |config|
# Sets the max number of concurrent devices per user, which is 10 by default.
# After this limit is reached, the oldest tokens will be removed.
- # config.max_number_of_devices = 10
+ config.max_number_of_devices = 25
# Sometimes it's necessary to make several requests to the API at the same
# time. In this case, each request in the batch will need to share the same
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index fa365fa5c..4f6357232 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -48,11 +48,11 @@ fr:
imap:
socket_error: Veuillez vérifier la connexion, l'adresse IMAP et réessayez.
no_response_error: Veuillez vérifier les identifiants IMAP et réessayez.
- host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again.
- connection_timed_out_error: Connection timed out for %{address}:%{port}
- connection_closed_error: Connection closed.
+ host_unreachable_error: Hôte injoignable, veuillez vérifier l'adresse IMAP, le port IMAP et réessayer.
+ connection_timed_out_error: La connexion a expiré pour %{address}:%{port}
+ connection_closed_error: Connexion fermée.
validations:
- name: should not start or end with symbols, and it should not have < > / \ @ characters.
+ name: 'ne doit pas commencer ou se terminer par des symboles, et ne doit pas comporter les caractères suivants : "< > / \ @".'
reports:
period: Période de rapport %{since} à %{until}
agent_csv:
@@ -61,14 +61,14 @@ fr:
avg_first_response_time: Temps de réponse moyen (Minutes)
avg_resolution_time: Temps moyen de résolution (Minutes)
inbox_csv:
- inbox_name: Inbox name
- inbox_type: Inbox type
- conversations_count: No. of conversations
+ inbox_name: Nom de la boîte de réception
+ inbox_type: Type de boîte de réception
+ conversations_count: Nbre de conversations
avg_first_response_time: Temps de réponse moyen (Minutes)
avg_resolution_time: Temps moyen de résolution (Minutes)
label_csv:
- label_title: Label
- conversations_count: No. of conversations
+ label_title: Libellé
+ conversations_count: Nbre de conversations
avg_first_response_time: Temps de réponse moyen (Minutes)
avg_resolution_time: Temps moyen de résolution (Minutes)
team_csv:
@@ -79,13 +79,13 @@ fr:
default_group_by: jour
csat:
headers:
- contact_name: Contact Name
- contact_email_address: Contact Email Address
- contact_phone_number: Contact Phone Number
- link_to_the_conversation: Link to the conversation
+ contact_name: Nom du contact
+ contact_email_address: Adresse e-mail du contact
+ contact_phone_number: Numéro de téléphone du contact
+ link_to_the_conversation: Lier à la conversation
agent_name: Nom de l'agent
rating: Note
- feedback: Feedback Comment
+ feedback: Commentaire
recorded_at: Recorded date
notifications:
notification_title:
@@ -96,7 +96,7 @@ fr:
conversations:
messages:
instagram_story_content: "%{story_sender} vous a mentionné dans l'histoire: "
- instagram_deleted_story_content: This story is no longer available.
+ instagram_deleted_story_content: Cette Story n'est plus disponible.
deleted: Ce message a été supprimé
activity:
status:
@@ -151,9 +151,9 @@ fr:
description: "L'intégration FullContact permet d'enrichir les profils de visiteurs. Identifiez les utilisateurs dès qu'ils partagent leur adresse de courriel et offrez-leur un service client sur mesure. Connectez FullContact à votre compte en partageant la clé API FullContact."
public_portal:
search:
- search_placeholder: Search for article by title or body...
+ search_placeholder: Rechercher un article par titre ou contenu...
empty_placeholder: Aucun résultat trouvé.
- loading_placeholder: Searching...
- results_title: Search results
+ loading_placeholder: Recherche en cours...
+ results_title: Résultats de recherche
hero:
- sub_title: Search for the articles here or browse the categories below.
+ sub_title: Recherchez les articles ici ou parcourez les catégories ci-dessous.
diff --git a/config/webpack/environment.js b/config/webpack/environment.js
index ee3f385f8..1301fc36e 100644
--- a/config/webpack/environment.js
+++ b/config/webpack/environment.js
@@ -6,7 +6,7 @@ const vue = require('./loaders/vue');
environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin());
environment.loaders.prepend('vue', vue);
-environment.loaders.append('opus', {
+environment.loaders.append('opus-ogg', {
test: /encoderWorker\.min\.js$/,
loader: 'file-loader',
options: {
@@ -14,6 +14,14 @@ environment.loaders.append('opus', {
},
});
+environment.loaders.append('opus-wav', {
+ test: /waveWorker\.min\.js$/,
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]',
+ },
+});
+
environment.loaders.append('audio', {
test: /\.(mp3)(\?.*)?$/,
loader: 'url-loader',