From 51619e17db040404d33e70ecc72efcc421e15ec7 Mon Sep 17 00:00:00 2001 From: I Nyoman Jyotisa Date: Tue, 6 May 2025 10:40:01 +0800 Subject: [PATCH 1/6] Add grouping to RHP Filters --- src/languages/en.ts | 11 +++--- src/languages/es.ts | 11 +++--- src/pages/Search/AdvancedSearchFilters.tsx | 43 +++++++++++++++++++--- 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 0357ceda5cee..ef81cfb353f7 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -554,6 +554,7 @@ const translations = { comments: 'Comments', sharedIn: 'Shared in', unreported: 'Unreported', + general: 'General', }, supportalNoAccess: { title: 'Not so fast', @@ -5253,11 +5254,11 @@ const translations = { }, current: 'Current', past: 'Past', - submitted: 'Submitted', - approved: 'Approved', - paid: 'Paid', - exported: 'Exported', - posted: 'Posted', + submitted: 'Submitted date', + approved: 'Approved date', + paid: 'Paid date', + exported: 'Exported date', + posted: 'Posted date', billable: 'Billable', reimbursable: 'Reimbursable', }, diff --git a/src/languages/es.ts b/src/languages/es.ts index e4a7717cad36..29fdcb750d2c 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -545,6 +545,7 @@ const translations = { comments: 'Comentarios', sharedIn: 'Compartido en', unreported: 'No reportado', + general: 'General', }, supportalNoAccess: { title: 'No tan rápido', @@ -5310,11 +5311,11 @@ const translations = { }, current: 'Actual', past: 'Anterior', - submitted: 'Enviado', - approved: 'Aprobado', - paid: 'Pagado', - exported: 'Exportado', - posted: 'Contabilizado', + submitted: 'Fecha de envío', + approved: 'Fecha de aprobación', + paid: 'Fecha de pago', + exported: 'Fecha de exportación', + posted: 'Fecha de contabilización', billable: 'Facturable', reimbursable: 'Reembolsable', }, diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 04f67cf2b764..4cac77bf40c8 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -11,6 +11,7 @@ import {usePersonalDetails} from '@components/OnyxProvider'; import ScrollView from '@components/ScrollView'; import type {SearchDateFilterKeys, SearchFilterKey} from '@components/Search/types'; import SpacerView from '@components/SpacerView'; +import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useSingleExecution from '@hooks/useSingleExecution'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -29,6 +30,7 @@ import {getReportName} from '@libs/ReportUtils'; import {buildCannedSearchQuery, buildQueryStringFromFilterFormValues, buildSearchQueryJSON, isCannedSearchQuery} from '@libs/SearchQueryUtils'; import {getExpenseTypeTranslationKey} from '@libs/SearchUIUtils'; import CONST from '@src/CONST'; +import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type {SearchAdvancedFiltersForm} from '@src/types/form'; @@ -37,6 +39,16 @@ import type {CardList, PersonalDetailsList, Policy, PolicyTagLists, Report, Work import type {PolicyFeatureName} from '@src/types/onyx/Policy'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; +type SectionType = { + titleTranslationKey: TranslationPaths; + items: Array<{ + key: SearchFilterKey; + title: string | undefined; + description: string; + onPress: () => void; + }>; +}; + const baseFilterConfig = { date: { getTitle: getFilterDisplayTitle, @@ -176,7 +188,7 @@ const baseFilterConfig = { */ const typeFiltersKeys: Record>>> = { [CONST.SEARCH.DATA_TYPES.EXPENSE]: [ - [CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD, CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM, CONST.SEARCH.SYNTAX_FILTER_KEYS.TO, CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID], + [CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM, CONST.SEARCH.SYNTAX_FILTER_KEYS.TO, CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD, CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID], [ CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPENSE_TYPE, CONST.SEARCH.SYNTAX_FILTER_KEYS.MERCHANT, @@ -186,11 +198,12 @@ const typeFiltersKeys: Record !!section.length); const displaySearchButton = queryJSON && !isCannedSearchQuery(queryJSON); + const sections: SectionType[] = [ + { + titleTranslationKey: 'common.general', + items: filters[0] || [], + }, + { + titleTranslationKey: 'common.expenses', + items: filters[1] || [], + }, + { + titleTranslationKey: 'common.reports', + items: filters[2] || [], + }, + ]; + return ( <> - {filters.map((section, index) => { + {sections.map((section, index) => { + if (section.items.length === 0) { + return; + } + return ( // eslint-disable-next-line react/no-array-index-key - + {index !== 0 && ( )} - {section.map((item) => { + {translate(section.titleTranslationKey)} + {section.items.map((item) => { return ( Date: Tue, 6 May 2025 11:40:01 +0800 Subject: [PATCH 2/6] ESLint fix --- src/pages/Search/AdvancedSearchFilters.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 4cac77bf40c8..1c651c6e3c8e 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -642,15 +642,15 @@ function AdvancedSearchFilters() { const sections: SectionType[] = [ { titleTranslationKey: 'common.general', - items: filters[0] || [], + items: filters.at(0) || [], }, { titleTranslationKey: 'common.expenses', - items: filters[1] || [], + items: filters.at(1) || [], }, { titleTranslationKey: 'common.reports', - items: filters[2] || [], + items: filters.at(2) || [], }, ]; From 52c07c8e8cf7af139ad4d2e97ba72154a0589207 Mon Sep 17 00:00:00 2001 From: I Nyoman Jyotisa Date: Tue, 6 May 2025 12:01:32 +0800 Subject: [PATCH 3/6] ESLint fix --- src/pages/Search/AdvancedSearchFilters.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 1c651c6e3c8e..5857e5b4bf9e 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -642,15 +642,15 @@ function AdvancedSearchFilters() { const sections: SectionType[] = [ { titleTranslationKey: 'common.general', - items: filters.at(0) || [], + items: filters.at(0) ?? [], }, { titleTranslationKey: 'common.expenses', - items: filters.at(1) || [], + items: filters.at(1) ?? [], }, { titleTranslationKey: 'common.reports', - items: filters.at(2) || [], + items: filters.at(2) ?? [], }, ]; From bb49d6dda1069192c42653f91fa33124a8953449 Mon Sep 17 00:00:00 2001 From: I Nyoman Jyotisa Date: Tue, 6 May 2025 16:20:05 +0800 Subject: [PATCH 4/6] Add grouping to RHP Filters --- src/pages/Search/AdvancedSearchFilters.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 5857e5b4bf9e..deacb9b24ebf 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -213,7 +213,7 @@ const typeFiltersKeys: Record Date: Fri, 9 May 2025 10:41:19 +0800 Subject: [PATCH 5/6] minor fix --- src/pages/Search/AdvancedSearchFilters.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index deacb9b24ebf..d76788f9fea0 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -263,8 +263,8 @@ const typeFiltersKeys: Record Date: Tue, 13 May 2025 08:22:05 +0800 Subject: [PATCH 6/6] sort filter items alphabetically --- src/pages/Search/AdvancedSearchFilters.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index d76788f9fea0..64a9c769fbe9 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -656,6 +656,10 @@ function AdvancedSearchFilters() { }, ]; + sections.forEach((section) => { + section.items.sort((a, b) => localeCompare(a.description, b.description)); + }); + return ( <>