Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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: 4 additions & 1 deletion src/components/Search/FilterComponents/DateFilterBase.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {getDatePresets} from '@libs/SearchUIUtils';
import type {SearchDateModifier, SearchDateModifierLower} from '@libs/SearchUIUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue';
import type {SearchDatePresetFilterBaseHandle} from './DatePresetFilterBase';
import DatePresetFilterBase from './DatePresetFilterBase';

Expand All @@ -26,7 +27,8 @@ function DateFilterBase({title, dateKey, back, onSubmit}: DateFilterBaseProps) {
const {translate} = useLocalize();

const searchDatePresetFilterBaseRef = useRef<SearchDatePresetFilterBaseHandle>(null);
const [searchAdvancedFiltersForm] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true});
const [searchAdvancedFiltersForm, searchAdvancedFiltersFormMetadata] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true});
const isSearchAdvancedFiltersFormLoading = isLoadingOnyxValue(searchAdvancedFiltersFormMetadata);
const [selectedDateModifier, setSelectedDateModifier] = useState<SearchDateModifier | null>(null);

const dateOnKey = dateKey.startsWith(CONST.SEARCH.REPORT_FIELD.GLOBAL_PREFIX)
Expand Down Expand Up @@ -123,6 +125,7 @@ function DateFilterBase({title, dateKey, back, onSubmit}: DateFilterBaseProps) {
selectedDateModifier={selectedDateModifier}
onSelectDateModifier={setSelectedDateModifier}
presets={presets}
isSearchAdvancedFiltersFormLoading={isSearchAdvancedFiltersFormLoading}
/>
</ScrollView>
<Button
Expand Down
16 changes: 14 additions & 2 deletions src/components/Search/FilterComponents/DatePresetFilterBase.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, {useCallback, useImperativeHandle, useMemo, useState} from 'react';
import React, {useCallback, useEffect, useImperativeHandle, useMemo, useState} from 'react';
import type {Ref} from 'react';
import CalendarPicker from '@components/DatePicker/CalendarPicker';
import MenuItem from '@components/MenuItem';
Expand Down Expand Up @@ -42,6 +42,9 @@ type DatePresetFilterBaseProps = {
/** The date presets */
presets?: SearchDatePreset[];

/** Whether the search advanced filters form Onyx data is loading or not */
isSearchAdvancedFiltersFormLoading?: boolean;

/** The ref handle */
ref: Ref<DatePresetFilterBaseHandle>;
};
Expand All @@ -56,7 +59,7 @@ type DatePresetFilterBaseProps = {
* - On save: if a date modifier is selected (i.e. user clicked save at the calendar picker) you should `setDateValueOfSelectedDateModifier` otherwise `getDateValues`
* - On reset: if a date modifier is selected (i.e. user clicked reset at the calendar picker) you should `clearDateValueOfSelectedDateModifier` otherwise `clearDateValues`
*/
function DatePresetFilterBase({defaultDateValues, selectedDateModifier, onSelectDateModifier, presets, ref}: DatePresetFilterBaseProps) {
function DatePresetFilterBase({defaultDateValues, selectedDateModifier, onSelectDateModifier, presets, isSearchAdvancedFiltersFormLoading, ref}: DatePresetFilterBaseProps) {
const theme = useTheme();
const styles = useThemeStyles();
const StyleUtils = useStyleUtils();
Expand All @@ -65,6 +68,15 @@ function DatePresetFilterBase({defaultDateValues, selectedDateModifier, onSelect
const shouldShowHorizontalRule = !!presets?.length;

const [dateValues, setDateValues] = useState<SearchDateValues>(defaultDateValues);

useEffect(() => {
if (isSearchAdvancedFiltersFormLoading) {
return;
}
setDateValues(defaultDateValues);
// eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps
}, [isSearchAdvancedFiltersFormLoading]);

const setDateValue = useCallback((dateModifier: SearchDateModifier, value: string | undefined) => {
setDateValues((prevDateValues) => {
if (dateModifier === CONST.SEARCH.DATE_MODIFIERS.ON && isSearchDatePreset(value)) {
Expand Down
8 changes: 6 additions & 2 deletions src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {useIsFocused} from '@react-navigation/native';
import {emailSelector} from '@selectors/Session';
import {searchResultsErrorSelector} from '@selectors/Snapshot';
import React, {useCallback, useContext, useEffect, useMemo, useRef} from 'react';
Expand Down Expand Up @@ -81,6 +82,7 @@ function SearchFiltersBar({
confirmPayment,
latestBankItems,
}: SearchFiltersBarProps) {
const isFocused = useIsFocused();
const scrollRef = useRef<RNScrollView>(null);
const currentPolicy = usePolicy(currentSelectedPolicyID);
const [isUserValidated] = useOnyx(ONYXKEYS.ACCOUNT, {selector: (account) => account?.validated, canBeMissing: true});
Expand Down Expand Up @@ -270,10 +272,12 @@ function SearchFiltersBar({
return;
}
if (filterFormValues && Object.keys(filterFormValues).length > 0) {
updateAdvancedFilters(filterFormValues, true);
if (isFocused) {
updateAdvancedFilters(filterFormValues, true);
}
isFormInitializedRef.current = true;
}
}, [queryJSON, filterFormValues]);
}, [queryJSON, filterFormValues, isFocused]);

const typeComponent = useCallback(
({closeOverlay}: PopoverComponentProps) => {
Expand Down
Loading