From 6e207acb5aee4971b320737b12bea5ee7914b046 Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Mon, 30 Jun 2025 20:54:19 +0530
Subject: [PATCH] fix: CSAT table header and date range translation issue on
reload (#11836)
# Pull Request Template
## Description
This PR fixes the translation issue in the CSAT reports table header and
date range filter, where labels reverted to English after a page reload.
Fixes
https://linear.app/chatwoot/issue/CW-4557/language-switching-on-page-reload
## Type of change
- [x] Bug fix (non-breaking change which fixes an issue)
## How Has This Been Tested?
https://github.com/user-attachments/assets/c68da978-1f17-44b5-bb21-5ea2668563fb
## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules
---
.../settings/reports/components/CsatTable.vue | 8 ++--
.../reports/components/Filters/DateRange.vue | 45 ++++++++++---------
.../specs/Filters/FiltersDateRange.spec.js | 23 +++++-----
3 files changed, 40 insertions(+), 36 deletions(-)
diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/CsatTable.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/CsatTable.vue
index 8beeafd70..76a3e3079 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/CsatTable.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/CsatTable.vue
@@ -61,7 +61,7 @@ const defaultSpanRender = cellProps => {
const columnHelper = createColumnHelper();
-const columns = [
+const columns = computed(() => [
columnHelper.accessor('contact', {
header: t('CSAT_REPORTS.TABLE.HEADER.CONTACT_NAME'),
width: 200,
@@ -121,7 +121,7 @@ const columns = [
width: 100,
cell: cellProps => h(ConversationCell, cellProps),
}),
-];
+]);
const paginationParams = computed(() => {
return {
@@ -134,7 +134,9 @@ const table = useVueTable({
get data() {
return tableData.value;
},
- columns,
+ get columns() {
+ return columns.value;
+ },
manualPagination: true,
enableSorting: false,
getCoreRowModel: getCoreRowModel(),
diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue
index 4d1cc340f..9caab26dd 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue
@@ -1,28 +1,33 @@
-
@@ -31,7 +36,7 @@ export default {
{
- it('emits "on-range-change" event when updateRange is called', () => {
+ it('emits "onRangeChange" event when updateRange is called', () => {
const wrapper = shallowMount(ReportFiltersDateRange, mountParams);
const selectedRange = DATE_RANGE_OPTIONS.LAST_7_DAYS;
wrapper.vm.updateRange(selectedRange);
- expect(wrapper.emitted('on-range-change')).toBeTruthy();
- expect(wrapper.emitted('on-range-change')[0]).toEqual([selectedRange]);
+ expect(wrapper.emitted('onRangeChange')).toBeTruthy();
+ expect(wrapper.emitted('onRangeChange')[0]).toEqual([selectedRange]);
});
it('initializes options correctly', () => {
const wrapper = shallowMount(ReportFiltersDateRange, mountParams);
- const expectedOptions = Object.values(DATE_RANGE_OPTIONS).map(option => ({
- ...option,
- name: option.translationKey,
- }));
+ const expectedIds = Object.values(DATE_RANGE_OPTIONS).map(
+ option => option.id
+ );
+ const receivedIds = wrapper.vm.options.map(option => option.id);
- expect(wrapper.vm.options).toEqual(expectedOptions);
+ expect(receivedIds).toEqual(expectedIds);
});
it('initializes selectedOption correctly', () => {
const wrapper = shallowMount(ReportFiltersDateRange, mountParams);
- const expectedSelectedOption = Object.values(DATE_RANGE_OPTIONS)[0];
- expect(wrapper.vm.selectedOption).toEqual({
- ...expectedSelectedOption,
- name: expectedSelectedOption.translationKey,
- });
+ const expectedId = Object.values(DATE_RANGE_OPTIONS)[0].id;
+ expect(wrapper.vm.selectedOption.id).toBe(expectedId);
});
});