From e9275e99d036eeca710ef10dc2f716bafd78ae7c Mon Sep 17 00:00:00 2001 From: Jakub Szymczak Date: Tue, 27 Aug 2024 11:59:59 +0200 Subject: [PATCH 1/4] add is filter page --- src/CONST.ts | 6 ++ src/ROUTES.ts | 1 + src/SCREENS.ts | 1 + src/languages/en.ts | 3 + src/languages/es.ts | 3 + .../ModalStackNavigators/index.tsx | 1 + src/libs/Navigation/linkingConfig/config.ts | 1 + src/libs/PolicyUtils.ts | 2 +- src/libs/SearchUtils.ts | 11 ++++ src/pages/Search/AdvancedSearchFilters.tsx | 15 +++++ .../SearchFiltersExpenseTypePage.tsx | 2 +- .../SearchFiltersIsPage.tsx | 66 +++++++++++++++++++ .../SearchFiltersTaxRatePage.tsx | 2 +- src/types/form/SearchAdvancedFiltersForm.ts | 4 ++ 14 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersIsPage.tsx diff --git a/src/CONST.ts b/src/CONST.ts index 7b5320e7c6ef..4a7465b99d10 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -5206,6 +5206,7 @@ const CONST = { EXPENSE: 'expense', INVOICE: 'invoice', TRIP: 'trip', + CHAT: 'chat', }, ACTION_TYPES: { VIEW: 'view', @@ -5213,6 +5214,10 @@ const CONST = { DONE: 'done', PAID: 'paid', }, + CHAT_STATUS: { + UNREAD: 'unread', + PINNED: 'pinned', + }, BULK_ACTION_TYPES: { EXPORT: 'export', HOLD: 'hold', @@ -5301,6 +5306,7 @@ const CONST = { CARD_ID: 'cardID', REPORT_ID: 'reportID', KEYWORD: 'keyword', + IS: 'is', }, }, diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 47a2ad76209e..38566794f29d 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -53,6 +53,7 @@ const ROUTES = { SEARCH_ADVANCED_FILTERS_TAG: 'search/filters/tag', SEARCH_ADVANCED_FILTERS_FROM: 'search/filters/from', SEARCH_ADVANCED_FILTERS_TO: 'search/filters/to', + SEARCH_ADVANCED_FILTERS_IS: 'search/filters/is', SEARCH_REPORT: { route: 'search/view/:reportID', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 686a752ad360..b197d79d9f8b 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -46,6 +46,7 @@ const SCREENS = { ADVANCED_FILTERS_TAG_RHP: 'Search_Advanced_Filters_Tag_RHP', ADVANCED_FILTERS_FROM_RHP: 'Search_Advanced_Filters_From_RHP', ADVANCED_FILTERS_TO_RHP: 'Search_Advanced_Filters_To_RHP', + ADVANCED_FILTERS_IS_RHP: 'Search_Advanced_Filters_Is_RHP', TRANSACTION_HOLD_REASON_RHP: 'Search_Transaction_Hold_Reason_RHP', BOTTOM_TAB: 'Search_Bottom_Tab', }, diff --git a/src/languages/en.ts b/src/languages/en.ts index 632da6f9c3ae..f2cd34833fd9 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3764,6 +3764,9 @@ export default { keyword: 'Keyword', hasKeywords: 'Has keywords', currency: 'Currency', + is: 'Is', + pinned: 'Pinned', + unread: 'Unread', amount: { lessThan: (amount?: string) => `Less than ${amount ?? ''}`, greaterThan: (amount?: string) => `Greater than ${amount ?? ''}`, diff --git a/src/languages/es.ts b/src/languages/es.ts index 77ba5e5abf45..138910db6009 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3814,6 +3814,9 @@ export default { keyword: 'Palabra clave', hasKeywords: 'Tiene palabras clave', currency: 'Divisa', + is: 'Está', + pinned: 'Fijado', + unread: 'No leído', amount: { lessThan: (amount?: string) => `Menos de ${amount ?? ''}`, greaterThan: (amount?: string) => `Más que ${amount ?? ''}`, diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 7722696245fd..b3db664bb487 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -528,6 +528,7 @@ const SearchAdvancedFiltersModalStackNavigator = createModalStackNavigator require('../../../../pages/Search/SearchAdvancedFiltersPage/SearchFiltersTagPage').default, [SCREENS.SEARCH.ADVANCED_FILTERS_FROM_RHP]: () => require('@pages/Search/SearchAdvancedFiltersPage/SearchFiltersFromPage').default, [SCREENS.SEARCH.ADVANCED_FILTERS_TO_RHP]: () => require('@pages/Search/SearchAdvancedFiltersPage/SearchFiltersToPage').default, + [SCREENS.SEARCH.ADVANCED_FILTERS_IS_RHP]: () => require('@pages/Search/SearchAdvancedFiltersPage/SearchFiltersIsPage').default, }); const RestrictedActionModalStackNavigator = createModalStackNavigator({ diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 4d3f19984b8f..2ac5940f46e4 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -1038,6 +1038,7 @@ const config: LinkingOptions['config'] = { [SCREENS.SEARCH.ADVANCED_FILTERS_TAG_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS_TAG, [SCREENS.SEARCH.ADVANCED_FILTERS_FROM_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS_FROM, [SCREENS.SEARCH.ADVANCED_FILTERS_TO_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS_TO, + [SCREENS.SEARCH.ADVANCED_FILTERS_IS_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS_IS, }, }, [SCREENS.RIGHT_MODAL.RESTRICTED_ACTION]: { diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index 3f3a2a96a1e1..a03b01f512e3 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -300,7 +300,7 @@ function getTagNamesFromTagsLists(policyTagLists: PolicyTagLists): string[] { const uniqueTagNames = new Set(); for (const policyTagList of Object.values(policyTagLists ?? {})) { - for (const tag of Object.values(policyTagList.tags)) { + for (const tag of Object.values(policyTagList.tags ?? {})) { uniqueTagNames.add(getCleanedTagName(tag.name)); } } diff --git a/src/libs/SearchUtils.ts b/src/libs/SearchUtils.ts index ce2429c5653b..8c76866eed87 100644 --- a/src/libs/SearchUtils.ts +++ b/src/libs/SearchUtils.ts @@ -482,6 +482,16 @@ function getExpenseTypeTranslationKey(expenseType: ValueOf): TranslationPaths { + // eslint-disable-next-line default-case + switch (chatStatus) { + case CONST.SEARCH.CHAT_STATUS.PINNED: + return 'search.filters.pinned'; + case CONST.SEARCH.CHAT_STATUS.UNREAD: + return 'search.filters.unread'; + } +} + /** * Given object with chosen search filters builds correct query string from them */ @@ -613,4 +623,5 @@ export { normalizeQuery, shouldShowYear, getExpenseTypeTranslationKey, + getChatStatusTranslationKey, }; diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 4b859e37785e..b2cbf144b42f 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -125,6 +125,16 @@ function getExpenseTypeDisplayTitle(filters: Partial, : undefined; } +function getChatIsDisplayTitle(filters: Partial, translate: LocaleContextProps['translate']) { + const filterValue = filters[CONST.SEARCH.SYNTAX_FILTER_KEYS.IS]; + return filterValue + ? Object.values(CONST.SEARCH.CHAT_STATUS) + .filter((chatStatus) => filterValue.includes(chatStatus)) + .map((chatStatus) => translate(SearchUtils.getChatStatusTranslationKey(chatStatus))) + .join(', ') + : undefined; +} + function AdvancedSearchFilters() { const {translate} = useLocalize(); const styles = useThemeStyles(); @@ -209,6 +219,11 @@ function AdvancedSearchFilters() { description: 'common.to' as const, route: ROUTES.SEARCH_ADVANCED_FILTERS_TO, }, + { + title: getChatIsDisplayTitle(searchAdvancedFilters, translate), + description: 'search.filters.is' as const, + route: ROUTES.SEARCH_ADVANCED_FILTERS_IS, + }, ], [searchAdvancedFilters, translate, cardList, taxRates, personalDetails], ); diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersExpenseTypePage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersExpenseTypePage.tsx index 96984029142b..9cbb7b7743fe 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersExpenseTypePage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersExpenseTypePage.tsx @@ -61,6 +61,6 @@ function SearchFiltersExpenseTypePage() { ); } -SearchFiltersExpenseTypePage.displayName = 'SearchFiltersCategoryPage'; +SearchFiltersExpenseTypePage.displayName = 'SearchFiltersExpenseTypePage'; export default SearchFiltersExpenseTypePage; diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersIsPage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersIsPage.tsx new file mode 100644 index 000000000000..d2431776eb44 --- /dev/null +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersIsPage.tsx @@ -0,0 +1,66 @@ +import React, {useCallback, useMemo} from 'react'; +import {View} from 'react-native'; +import {useOnyx} from 'react-native-onyx'; +import type {ValueOf} from 'type-fest'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import SearchMultipleSelectionPicker from '@components/Search/SearchMultipleSelectionPicker'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import Navigation from '@libs/Navigation/Navigation'; +import {getChatStatusTranslationKey} from '@libs/SearchUtils'; +import * as SearchActions from '@userActions/Search'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; + +function SearchFiltersIsPage() { + const styles = useThemeStyles(); + const {translate} = useLocalize(); + + const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM); + const selectedChatStatuses = searchAdvancedFiltersForm?.is?.map((chatStatus) => { + const chatStatusName = translate(getChatStatusTranslationKey(chatStatus as ValueOf)); + return {name: chatStatusName, value: chatStatus}; + }); + const allChatStatuses = Object.values(CONST.SEARCH.CHAT_STATUS); + + const chatStatusItems = useMemo(() => { + return allChatStatuses.map((chatStatus) => { + const chatStatusName = translate(getChatStatusTranslationKey(chatStatus)); + return {name: chatStatusName, value: chatStatus}; + }); + }, [allChatStatuses, translate]); + + const updateChatIsFilter = useCallback((values: string[]) => SearchActions.updateAdvancedFilters({is: values}), []); + + return ( + + { + Navigation.goBack(ROUTES.SEARCH_ADVANCED_FILTERS); + }} + /> + + + + + ); +} + +SearchFiltersIsPage.displayName = 'SearchFiltersIsPage'; + +export default SearchFiltersIsPage; diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx index 713e9f5110b2..a1ad32db6308 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx @@ -67,6 +67,6 @@ function SearchFiltersTaxRatePage() { ); } -SearchFiltersTaxRatePage.displayName = 'SearchFiltersCategoryPage'; +SearchFiltersTaxRatePage.displayName = 'SearchFiltersTaxRatePage'; export default SearchFiltersTaxRatePage; diff --git a/src/types/form/SearchAdvancedFiltersForm.ts b/src/types/form/SearchAdvancedFiltersForm.ts index 6541072cae81..7cd1cc00ff4d 100644 --- a/src/types/form/SearchAdvancedFiltersForm.ts +++ b/src/types/form/SearchAdvancedFiltersForm.ts @@ -2,6 +2,7 @@ import type {ValueOf} from 'type-fest'; import type Form from './Form'; const FILTER_KEYS = { + TYPE: 'type', DATE_AFTER: 'dateAfter', DATE_BEFORE: 'dateBefore', CURRENCY: 'currency', @@ -19,6 +20,7 @@ const FILTER_KEYS = { KEYWORD: 'keyword', FROM: 'from', TO: 'to', + IS: 'is', } as const; type InputID = ValueOf; @@ -26,6 +28,7 @@ type InputID = ValueOf; type SearchAdvancedFiltersForm = Form< InputID, { + [FILTER_KEYS.TYPE]: string; [FILTER_KEYS.DATE_AFTER]: string; [FILTER_KEYS.DATE_BEFORE]: string; [FILTER_KEYS.CURRENCY]: string[]; @@ -43,6 +46,7 @@ type SearchAdvancedFiltersForm = Form< [FILTER_KEYS.TAG]: string[]; [FILTER_KEYS.FROM]: string[]; [FILTER_KEYS.TO]: string[]; + [FILTER_KEYS.IS]: string[]; } >; From 33b671ab1e2b55798622a5223864fecc1b481f99 Mon Sep 17 00:00:00 2001 From: Jakub Szymczak Date: Tue, 3 Sep 2024 16:01:08 +0200 Subject: [PATCH 2/4] add is phrase to parser --- src/libs/SearchParser/searchParser.js | 66 ++++++++++++++-------- src/libs/SearchParser/searchParser.peggy | 1 + src/libs/SearchUtils.ts | 3 +- src/pages/Search/AdvancedSearchFilters.tsx | 15 ++--- 4 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index a93e3fae8551..4c6c382d6224 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -201,7 +201,8 @@ function peg$parse(input, options) { var peg$c23 = "sortOrder"; var peg$c24 = "policyID"; var peg$c25 = "has"; - var peg$c26 = "\""; + var peg$c26 = "is"; + var peg$c27 = "\""; var peg$r0 = /^[:=]/; var peg$r1 = /^[^"\r\n]/; @@ -235,11 +236,12 @@ function peg$parse(input, options) { var peg$e24 = peg$literalExpectation("sortOrder", false); var peg$e25 = peg$literalExpectation("policyID", false); var peg$e26 = peg$literalExpectation("has", false); - var peg$e27 = peg$literalExpectation("\"", false); - var peg$e28 = peg$classExpectation(["\"", "\r", "\n"], true, false); - var peg$e29 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "_", "@", ".", "/", "#", "&", "+", "-", "\\", "'", ",", ";"], false, false); - var peg$e30 = peg$otherExpectation("whitespace"); - var peg$e31 = peg$classExpectation([" ", "\t", "\r", "\n"], false, false); + var peg$e27 = peg$literalExpectation("is", false); + var peg$e28 = peg$literalExpectation("\"", false); + var peg$e29 = peg$classExpectation(["\"", "\r", "\n"], true, false); + var peg$e30 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "_", "@", ".", "/", "#", "&", "+", "-", "\\", "'", ",", ";"], false, false); + var peg$e31 = peg$otherExpectation("whitespace"); + var peg$e32 = peg$classExpectation([" ", "\t", "\r", "\n"], false, false); var peg$f0 = function(filters) { const withDefaults = applyDefaults(filters); @@ -314,10 +316,11 @@ function peg$parse(input, options) { var peg$f27 = function() { return "sortOrder"; }; var peg$f28 = function() { return "policyID"; }; var peg$f29 = function() { return "has"; }; - var peg$f30 = function(parts) { return parts.join(''); }; - var peg$f31 = function(chars) { return chars.join(''); }; + var peg$f30 = function() { return "is"; }; + var peg$f31 = function(parts) { return parts.join(''); }; var peg$f32 = function(chars) { return chars.join(''); }; - var peg$f33 = function() { return "and"; }; + var peg$f33 = function(chars) { return chars.join(''); }; + var peg$f34 = function() { return "and"; }; var peg$currPos = options.peg$currPos | 0; var peg$savedPos = peg$currPos; var peg$posDetailsCache = [{ line: 1, column: 1 }]; @@ -954,6 +957,21 @@ function peg$parse(input, options) { s1 = peg$f29(); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c26) { + s1 = peg$c26; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e27); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f30(); + } + s0 = s1; + } } } } @@ -1000,7 +1018,7 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f30(s1); + s1 = peg$f31(s1); } s0 = s1; @@ -1012,11 +1030,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 34) { - s1 = peg$c26; + s1 = peg$c27; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } if (s1 !== peg$FAILED) { s2 = []; @@ -1025,7 +1043,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e28); } + if (peg$silentFails === 0) { peg$fail(peg$e29); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -1034,19 +1052,19 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e28); } + if (peg$silentFails === 0) { peg$fail(peg$e29); } } } if (input.charCodeAt(peg$currPos) === 34) { - s3 = peg$c26; + s3 = peg$c27; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f31(s2); + s0 = peg$f32(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1069,7 +1087,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e29); } + if (peg$silentFails === 0) { peg$fail(peg$e30); } } if (s2 !== peg$FAILED) { while (s2 !== peg$FAILED) { @@ -1079,7 +1097,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e29); } + if (peg$silentFails === 0) { peg$fail(peg$e30); } } } } else { @@ -1087,7 +1105,7 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f32(s1); + s1 = peg$f33(s1); } s0 = s1; @@ -1100,7 +1118,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f33(); + s1 = peg$f34(); s0 = s1; return s0; @@ -1116,7 +1134,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -1125,12 +1143,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } return s0; } diff --git a/src/libs/SearchParser/searchParser.peggy b/src/libs/SearchParser/searchParser.peggy index 105a8a62bc39..805ee3e668de 100644 --- a/src/libs/SearchParser/searchParser.peggy +++ b/src/libs/SearchParser/searchParser.peggy @@ -135,6 +135,7 @@ key / "sortOrder" { return "sortOrder"; } / "policyID" { return "policyID"; } / "has" { return "has"; } + / "is" { return "is"; } identifier = parts:(quotedString / alphanumeric)+ { return parts.join(''); } diff --git a/src/libs/SearchUtils.ts b/src/libs/SearchUtils.ts index 1d621a38d22e..4d5393c23fa1 100644 --- a/src/libs/SearchUtils.ts +++ b/src/libs/SearchUtils.ts @@ -475,7 +475,8 @@ function buildQueryStringFromFilters(filterValues: Partial 0 ) { diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 74d4dae562c9..2576e1e483d2 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -109,7 +109,7 @@ const baseFilterConfig = { route: ROUTES.SEARCH_ADVANCED_FILTERS_IN, }, is: { - getTitle: getChatIsDisplayTitle, + getTitle: getFilterIsDisplayTitle, description: 'search.filters.is' as const, route: ROUTES.SEARCH_ADVANCED_FILTERS_IS, }, @@ -119,7 +119,7 @@ const typeFiltersKeys: Record, cards: CardList) { @@ -237,7 +237,7 @@ function getFilterHasDisplayTitle(filters: Partial, t : undefined; } -function getChatIsDisplayTitle(filters: Partial, translate: LocaleContextProps['translate']) { +function getFilterIsDisplayTitle(filters: Partial, translate: LocaleContextProps['translate']) { const filterValue = filters[CONST.SEARCH.SYNTAX_FILTER_KEYS.IS]; return filterValue ? Object.values(CONST.SEARCH.CHAT_STATUS) @@ -337,15 +337,10 @@ function AdvancedSearchFilters() { // description: 'common.in' as const, // route: ROUTES.SEARCH_ADVANCED_FILTERS_IN, // }, - // { - // title: getChatIsDisplayTitle(searchAdvancedFilters, translate), - // description: 'search.filters.is' as const, - // route: ROUTES.SEARCH_ADVANCED_FILTERS_IS, - // }, // ], // [searchAdvancedFilters, translate, cardList, taxRates, personalDetails, reports], // ); - const currentType = searchAdvancedFilters?.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE; + const currentType = 'chat'; const onFormSubmit = () => { const query = SearchUtils.buildQueryStringFromFilters(searchAdvancedFilters); @@ -381,7 +376,7 @@ function AdvancedSearchFilters() { filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, cardList); } else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.TAX_RATE) { filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, taxRates); - } else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPENSE_TYPE || key === CONST.SEARCH.SYNTAX_FILTER_KEYS.HAS) { + } else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPENSE_TYPE || key === CONST.SEARCH.SYNTAX_FILTER_KEYS.HAS || key === CONST.SEARCH.SYNTAX_FILTER_KEYS.IS) { filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, translate); } else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM || key === CONST.SEARCH.SYNTAX_FILTER_KEYS.TO) { filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters[key] ?? [], personalDetails); From a263e109c5ca164b3feb7a0f696ac5ce0861cd23 Mon Sep 17 00:00:00 2001 From: Jakub Szymczak Date: Tue, 3 Sep 2024 16:52:16 +0200 Subject: [PATCH 3/4] revert test code --- src/pages/Search/AdvancedSearchFilters.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 2576e1e483d2..a7b803e4ae52 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -340,7 +340,7 @@ function AdvancedSearchFilters() { // ], // [searchAdvancedFilters, translate, cardList, taxRates, personalDetails, reports], // ); - const currentType = 'chat'; + const currentType = searchAdvancedFilters?.type ?? CONST.SEARCH.DATA_TYPES.EXPENSE; const onFormSubmit = () => { const query = SearchUtils.buildQueryStringFromFilters(searchAdvancedFilters); From a8e9394ec5bd8d76e59d2bb7bf37bb9f18639bde Mon Sep 17 00:00:00 2001 From: Jakub Szymczak Date: Wed, 4 Sep 2024 10:56:10 +0200 Subject: [PATCH 4/4] add 'Draft' option --- src/CONST.ts | 1 + src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/libs/SearchUtils.ts | 2 ++ 4 files changed, 5 insertions(+) diff --git a/src/CONST.ts b/src/CONST.ts index be3e7111a616..806ed964cfdf 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -5247,6 +5247,7 @@ const CONST = { CHAT_STATUS: { UNREAD: 'unread', PINNED: 'pinned', + DRAFT: 'draft', }, BULK_ACTION_TYPES: { EXPORT: 'export', diff --git a/src/languages/en.ts b/src/languages/en.ts index 51a71963a832..3a5963ee0eb2 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3825,6 +3825,7 @@ export default { is: 'Is', pinned: 'Pinned', unread: 'Unread', + draft: 'Draft', amount: { lessThan: (amount?: string) => `Less than ${amount ?? ''}`, greaterThan: (amount?: string) => `Greater than ${amount ?? ''}`, diff --git a/src/languages/es.ts b/src/languages/es.ts index 6c69b4fedd92..fc45a318a146 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3876,6 +3876,7 @@ export default { is: 'Está', pinned: 'Fijado', unread: 'No leído', + draft: 'Borrador', amount: { lessThan: (amount?: string) => `Menos de ${amount ?? ''}`, greaterThan: (amount?: string) => `Más que ${amount ?? ''}`, diff --git a/src/libs/SearchUtils.ts b/src/libs/SearchUtils.ts index 4d5393c23fa1..5f6f4033ea91 100644 --- a/src/libs/SearchUtils.ts +++ b/src/libs/SearchUtils.ts @@ -444,6 +444,8 @@ function getChatStatusTranslationKey(chatStatus: ValueOf