Skip to content

Commit fd5edf6

Browse files
authored
Merge pull request Expensify#88448 from bernhardoj/feat/88044-add-displays-section-in-save-search-page
Add displays section in save search page
2 parents f38c046 + 4ccde7f commit fd5edf6

3 files changed

Lines changed: 56 additions & 2 deletions

File tree

src/components/Search/SearchPageHeader/useSearchFiltersBar.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ const SKIPPED_FILTERS = new Set<SearchAdvancedFiltersKey>([
6060
FILTER_KEYS.VIEW,
6161
FILTER_KEYS.PAYER,
6262
FILTER_KEYS.ACTION,
63+
FILTER_KEYS.COLUMNS,
6364
]);
6465

6566
function getFilterSentryLabel(filterKey: SearchAdvancedFiltersKey | SearchFilterKey | ReportFieldKey) {

src/libs/SearchUIUtils.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4719,7 +4719,6 @@ const FILTER_LABEL_MAP: Partial<Record<SearchAdvancedFiltersKey, TranslationPath
47194719
[FILTER_KEYS.EXPORTED_TO]: 'search.exportedTo',
47204720
[FILTER_KEYS.FEED]: 'search.filters.feed',
47214721
[FILTER_KEYS.FROM]: 'common.from',
4722-
[FILTER_KEYS.GROUP_CURRENCY]: 'common.groupCurrency',
47234722
[FILTER_KEYS.HAS]: 'search.has',
47244723
[FILTER_KEYS.IN]: 'common.in',
47254724
[FILTER_KEYS.IS]: 'search.filters.is',

src/pages/Search/SearchSavePage.tsx

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {View} from 'react-native';
33
import FormProvider from '@components/Form/FormProvider';
44
import InputWrapper from '@components/Form/InputWrapper';
55
import HeaderWithBackButton from '@components/HeaderWithBackButton';
6+
import type {LocalizedTranslate} from '@components/LocaleContextProvider';
67
import ScreenWrapper from '@components/ScreenWrapper';
78
import useFilterCardValue from '@components/Search/hooks/useFilterCardValue';
89
import useFilterFeedValue from '@components/Search/hooks/useFilterFeedValue';
@@ -11,6 +12,7 @@ import useFilterTaxRateValue from '@components/Search/hooks/useFilterTaxRateValu
1112
import useFilterUserValue from '@components/Search/hooks/useFilterUserValue';
1213
import useFilterWorkspaceValue from '@components/Search/hooks/useFilterWorkspaceValue';
1314
import {useSearchStateContext} from '@components/Search/SearchContext';
15+
import type {SearchQueryJSON} from '@components/Search/types';
1416
import Text from '@components/Text';
1517
import TextInput from '@components/TextInput';
1618
import useAutoFocusInput from '@hooks/useAutoFocusInput';
@@ -19,7 +21,7 @@ import useOnyx from '@hooks/useOnyx';
1921
import useThemeStyles from '@hooks/useThemeStyles';
2022
import {saveSearch} from '@libs/actions/Search';
2123
import Navigation from '@libs/Navigation/Navigation';
22-
import {mapFiltersFormToLabelValueList} from '@libs/SearchUIUtils';
24+
import {getSearchColumnTranslationKey, mapFiltersFormToLabelValueList} from '@libs/SearchUIUtils';
2325
import type {SearchFilter} from '@libs/SearchUIUtils';
2426
import CONST from '@src/CONST';
2527
import ONYXKEYS from '@src/ONYXKEYS';
@@ -89,6 +91,39 @@ function FilterValue({filterKey, value}: FilterValueWithKeyProps) {
8991
return value;
9092
}
9193

94+
function getAppliedDisplays(searchAdvancedFiltersForm: Partial<SearchAdvancedFiltersForm>, queryJSON: SearchQueryJSON | undefined, translate: LocalizedTranslate) {
95+
const appliedDisplays = [];
96+
if (searchAdvancedFiltersForm.groupBy) {
97+
appliedDisplays.push({label: translate('search.display.groupBy'), value: translate(`search.filters.groupBy.${searchAdvancedFiltersForm.groupBy}`)});
98+
}
99+
100+
if (searchAdvancedFiltersForm.groupCurrency) {
101+
appliedDisplays.push({label: translate('common.groupCurrency'), value: searchAdvancedFiltersForm.groupCurrency});
102+
}
103+
104+
if (searchAdvancedFiltersForm.limit) {
105+
appliedDisplays.push({label: translate('search.filters.limit'), value: searchAdvancedFiltersForm.limit});
106+
}
107+
108+
if (searchAdvancedFiltersForm.view) {
109+
appliedDisplays.push({label: translate('search.view.label'), value: translate(`search.view.${searchAdvancedFiltersForm.view}`)});
110+
}
111+
112+
if (queryJSON?.sortBy) {
113+
appliedDisplays.push({label: translate('search.display.sortBy'), value: translate(getSearchColumnTranslationKey(queryJSON.sortBy))});
114+
}
115+
116+
if (queryJSON?.sortOrder) {
117+
appliedDisplays.push({label: translate('search.display.sortOrder'), value: translate(`search.filters.sortOrder.${queryJSON.sortOrder}`)});
118+
}
119+
120+
if (searchAdvancedFiltersForm.columns?.length) {
121+
appliedDisplays.push({label: translate('search.columns'), value: searchAdvancedFiltersForm.columns?.map((column) => translate(getSearchColumnTranslationKey(column))).join(', ')});
122+
}
123+
124+
return appliedDisplays;
125+
}
126+
92127
function SearchSavePage() {
93128
const styles = useThemeStyles();
94129
const {translate, localeCompare} = useLocalize();
@@ -109,6 +144,7 @@ function SearchSavePage() {
109144
};
110145

111146
const appliedFilters = mapFiltersFormToLabelValueList(searchAdvancedFiltersForm, undefined, undefined, translate, localeCompare);
147+
const appliedDisplays = getAppliedDisplays(searchAdvancedFiltersForm, currentSearchQueryJSON, translate);
112148

113149
const {inputCallbackRef} = useAutoFocusInput();
114150

@@ -157,6 +193,24 @@ function SearchSavePage() {
157193
) : (
158194
<Text>{translate('common.none')}</Text>
159195
)}
196+
197+
<Text style={[styles.textLabelSupporting, styles.mb2, styles.mt5]}>{translate('search.display.label')}:</Text>
198+
{appliedDisplays.length > 0 ? (
199+
appliedDisplays.map((filter) => (
200+
<View
201+
style={[styles.flexRow]}
202+
key={filter.label}
203+
>
204+
<Text style={[styles.label, styles.ph2]}>{CONST.DOT_SEPARATOR}</Text>
205+
<Text style={[styles.label]}>
206+
<Text style={[styles.labelStrong]}>{filter.label}: </Text>
207+
{filter.value}
208+
</Text>
209+
</View>
210+
))
211+
) : (
212+
<Text>{translate('common.none')}</Text>
213+
)}
160214
</FormProvider>
161215
</ScreenWrapper>
162216
);

0 commit comments

Comments
 (0)