Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0997e2f
fix: align device and in-app back navigation behavior in Paid filter
marufsharifi Feb 22, 2026
0f2a3ec
Merge branch 'main' of github.com:marufsharifi/App into fix/paid-filt…
marufsharifi Mar 3, 2026
088e730
fixed typecheck
marufsharifi Mar 4, 2026
9d0c334
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 4, 2026
ed0f2d4
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 5, 2026
7e6797b
fixed typecheck
marufsharifi Mar 5, 2026
48c47aa
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 6, 2026
b6db19f
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 7, 2026
5b17f96
fixed type failure
marufsharifi Mar 7, 2026
931dd34
fixed prettier
marufsharifi Mar 7, 2026
e16db9e
merged main into fix/paid-filter-back-nav-alignment
marufsharifi Mar 10, 2026
4ee7141
reverted unwanted changes
marufsharifi Mar 10, 2026
30d090d
reverted unwanted file changes
marufsharifi Mar 11, 2026
bbaadb0
Fix exported-to filter route
marufsharifi Mar 11, 2026
f809263
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 12, 2026
13e159c
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 12, 2026
90d8288
fixed prettier
marufsharifi Mar 12, 2026
47d706a
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 14, 2026
e1859e9
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 16, 2026
8480a43
Use lowercase date filter subpage paths
marufsharifi Mar 16, 2026
f7b21d9
Fix date preset filter lint/type issue
marufsharifi Mar 16, 2026
10fad4d
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 18, 2026
d5db688
refactor: simplify search date filter subpage navigation
marufsharifi Mar 18, 2026
3a99439
Merge branch 'main' into fix/paid-filter-back-nav-alignment
marufsharifi Mar 18, 2026
02e5952
Revert unrelated domain change and remove subPage encoding
marufsharifi Mar 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7822,6 +7822,11 @@ const CONST = {
AFTER: 'After',
BEFORE: 'Before',
},
DATE_FILTER_SUB_PAGE: {
ON: 'on',
AFTER: 'after',
BEFORE: 'before',
},
AMOUNT_MODIFIERS: {
LESS_THAN: 'LessThan',
GREATER_THAN: 'GreaterThan',
Expand Down
10 changes: 7 additions & 3 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,13 @@ const ROUTES = {
},
SEARCH_COLUMNS: 'search/columns',
SEARCH_ADVANCED_FILTERS: {
route: 'search/filters/:filterKey?',
getRoute: (filterKey?: SearchFilterKey | UserFriendlyKey) => {
return `search/filters/${filterKey ?? ''}` as const;
route: 'search/filters/:filterKey?/:subPage?',
getRoute: (filterKey?: SearchFilterKey | UserFriendlyKey, subPage?: string) => {
const baseRoute = `search/filters/${filterKey ?? ''}` as const;
if (!subPage || !filterKey) {
return baseRoute;
}
return `${baseRoute}/${subPage}` as const;
},
},
SEARCH_REPORT: {
Expand Down
20 changes: 19 additions & 1 deletion src/components/Search/FilterComponents/DateFilterBase.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ type DateFilterBaseProps = {
onSubmit: (values: SearchDateValues) => void;
/** Callback when a date value changes (e.g. preset click or calendar save) */
onDateValuesChange?: (values: SearchDateValues) => void;
/** Controlled selected date modifier */
selectedDateModifier?: SearchDateModifier | null;
/** Callback for controlled selected date modifier */
onSelectDateModifier?: (dateModifier: SearchDateModifier | null) => void;
/** Callback when the date modifier screen is opened or closed (on/after/before) */
onDateModifierChange?: (isOpen: boolean) => void;
/** If true, the Reset/Save buttons are only shown when a date modifier (On/After/Before) is selected. Defaults to false (always show buttons). */
Expand All @@ -56,12 +60,26 @@ function DateFilterBase({
shouldShowButtonsOnlyWithDateModifier = false,
shouldShowHeader = true,
ref,
selectedDateModifier: selectedDateModifierProp,
onSelectDateModifier,
}: DateFilterBaseProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();

const searchDatePresetFilterBaseRef = useRef<SearchDatePresetFilterBaseHandle>(null);
const [selectedDateModifier, setSelectedDateModifier] = useState<SearchDateModifier | null>(null);
const [selectedDateModifierState, setSelectedDateModifierState] = useState<SearchDateModifier | null>(null);

const isDateModifierControlled = selectedDateModifierProp !== undefined;
const selectedDateModifier = isDateModifierControlled ? selectedDateModifierProp : selectedDateModifierState;

const setSelectedDateModifier = (dateModifier: SearchDateModifier | null) => {
if (isDateModifierControlled) {
onSelectDateModifier?.(dateModifier);
return;
}

setSelectedDateModifierState(dateModifier);
};

const handleSelectDateModifier = (dateModifier: SearchDateModifier | null) => {
setSelectedDateModifier(dateModifier);
Expand Down
49 changes: 44 additions & 5 deletions src/components/Search/SearchDatePresetFilterBasePage.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
import React from 'react';
import {useRoute} from '@react-navigation/native';
import React, {useCallback} from 'react';
import ScreenWrapper from '@components/ScreenWrapper';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useThemeStyles from '@hooks/useThemeStyles';
import {updateAdvancedFilters} from '@libs/actions/Search';
import Navigation from '@libs/Navigation/Navigation';
import {getDatePresets} from '@libs/SearchUIUtils';
import type {SearchDateModifier} 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 isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue';
import DateFilterBase from './FilterComponents/DateFilterBase';
import type {ReportFieldDateKey, SearchDateFilterKeys} from './types';
import type {ReportFieldDateKey, SearchDateFilterKeys, SearchFilterKey} from './types';

type SearchDatePresetFilterBasePageProps = {
/** Key used for the date filter */
dateKey: SearchDateFilterKeys;
dateKey: Extract<SearchDateFilterKeys, SearchFilterKey>;

/** The translation key for the page title */
titleKey: TranslationPaths;
Expand All @@ -25,6 +27,8 @@ type SearchDatePresetFilterBasePageProps = {
function SearchDatePresetFilterBasePage({dateKey, titleKey}: SearchDatePresetFilterBasePageProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const route = useRoute();
const params = route.params as {subPage?: string} | undefined;

const [searchAdvancedFiltersForm, searchAdvancedFiltersFormMetadata] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM);
const isSearchAdvancedFiltersFormLoading = isLoadingOnyxValue(searchAdvancedFiltersFormMetadata);
Expand Down Expand Up @@ -58,9 +62,42 @@ function SearchDatePresetFilterBasePage({dateKey, titleKey}: SearchDatePresetFil
return getDatePresets(dateKey, hasFeed);
}

const goBack = () => {
const goBack = useCallback(() => {
Navigation.goBack(ROUTES.SEARCH_ADVANCED_FILTERS.getRoute());
};
}, []);

const buildSubPageRoute = useCallback((subPage?: string) => ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(dateKey, subPage), [dateKey]);

let selectedDateModifier: SearchDateModifier | null = null;
if (params?.subPage === CONST.SEARCH.DATE_FILTER_SUB_PAGE.ON) {
selectedDateModifier = CONST.SEARCH.DATE_MODIFIERS.ON;
} else if (params?.subPage === CONST.SEARCH.DATE_FILTER_SUB_PAGE.AFTER) {
selectedDateModifier = CONST.SEARCH.DATE_MODIFIERS.AFTER;
} else if (params?.subPage === CONST.SEARCH.DATE_FILTER_SUB_PAGE.BEFORE) {
selectedDateModifier = CONST.SEARCH.DATE_MODIFIERS.BEFORE;
}

const selectDateModifier = useCallback(
(dateModifier: SearchDateModifier | null) => {
if (!dateModifier) {
Navigation.goBack(buildSubPageRoute());
return;
}

if (dateModifier === CONST.SEARCH.DATE_MODIFIERS.ON) {
Navigation.navigate(buildSubPageRoute(CONST.SEARCH.DATE_FILTER_SUB_PAGE.ON));
return;
}

if (dateModifier === CONST.SEARCH.DATE_MODIFIERS.AFTER) {
Navigation.navigate(buildSubPageRoute(CONST.SEARCH.DATE_FILTER_SUB_PAGE.AFTER));
return;
}

Navigation.navigate(buildSubPageRoute(CONST.SEARCH.DATE_FILTER_SUB_PAGE.BEFORE));
},
[buildSubPageRoute],
);

const defaultDateValues = getDefaultDateValues();
const presets = getPresets();
Expand All @@ -79,6 +116,8 @@ function SearchDatePresetFilterBasePage({dateKey, titleKey}: SearchDatePresetFil
presets={presets}
isSearchAdvancedFiltersFormLoading={isSearchAdvancedFiltersFormLoading}
onBackButtonPress={goBack}
selectedDateModifier={selectedDateModifier}
onSelectDateModifier={selectDateModifier}
onSubmit={(values) => {
updateAdvancedFilters({
[dateOnKey]: values[CONST.SEARCH.DATE_MODIFIERS.ON] ?? null,
Expand Down
14 changes: 7 additions & 7 deletions src/libs/Navigation/linkingConfig/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1904,14 +1904,14 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
[SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_BY_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.GROUP_BY),
[SCREENS.SEARCH.ADVANCED_FILTERS_VIEW_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.VIEW),
[SCREENS.SEARCH.ADVANCED_FILTERS_STATUS_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.STATUS),
[SCREENS.SEARCH.ADVANCED_FILTERS_DATE_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE),
[SCREENS.SEARCH.ADVANCED_FILTERS_SUBMITTED_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED),
[SCREENS.SEARCH.ADVANCED_FILTERS_APPROVED_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED),
[SCREENS.SEARCH.ADVANCED_FILTERS_PAID_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID),
[SCREENS.SEARCH.ADVANCED_FILTERS_EXPORTED_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED),
[SCREENS.SEARCH.ADVANCED_FILTERS_DATE_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE)}/:subPage?`,
[SCREENS.SEARCH.ADVANCED_FILTERS_SUBMITTED_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED)}/:subPage?`,
[SCREENS.SEARCH.ADVANCED_FILTERS_APPROVED_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED)}/:subPage?`,
[SCREENS.SEARCH.ADVANCED_FILTERS_PAID_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID)}/:subPage?`,
[SCREENS.SEARCH.ADVANCED_FILTERS_EXPORTED_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED)}/:subPage?`,
[SCREENS.SEARCH.ADVANCED_FILTERS_POSTED_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED)}/:subPage?`,
[SCREENS.SEARCH.ADVANCED_FILTERS_WITHDRAWN_RHP]: `${ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN)}/:subPage?`,
[SCREENS.SEARCH.ADVANCED_FILTERS_EXPORTED_TO_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.EXPORTED_TO),
[SCREENS.SEARCH.ADVANCED_FILTERS_POSTED_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED),
[SCREENS.SEARCH.ADVANCED_FILTERS_WITHDRAWN_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN),
[SCREENS.SEARCH.ADVANCED_FILTERS_CURRENCY_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.CURRENCY),
[SCREENS.SEARCH.ADVANCED_FILTERS_GROUP_CURRENCY_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.GROUP_CURRENCY),
[SCREENS.SEARCH.ADVANCED_FILTERS_MERCHANT_RHP]: ROUTES.SEARCH_ADVANCED_FILTERS.getRoute(CONST.SEARCH.SYNTAX_FILTER_KEYS.MERCHANT),
Expand Down
Loading