Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: different behavior when using app and device back button in selection mode #46937

Merged
merged 29 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
c1afaca
fix back button in the selection mode
nkdengineer Aug 1, 2024
f617f88
Merge branch 'main' into fix/45896
nkdengineer Aug 7, 2024
53ea108
remove useless code
nkdengineer Aug 7, 2024
4555031
Merge branch 'main' into fix/45896
nkdengineer Aug 15, 2024
cb4ccdb
Merge branch 'main' into fix/45896
nkdengineer Aug 16, 2024
097112c
Merge branch 'main' into fix/45896
nkdengineer Aug 19, 2024
76efce7
merge main
nkdengineer Aug 28, 2024
0a69dd9
resolve conflict
nkdengineer Sep 9, 2024
4a6cac6
merge main
nkdengineer Sep 25, 2024
e7bc518
merge main
nkdengineer Oct 2, 2024
3b91615
implement for mWeb
nkdengineer Oct 2, 2024
efb3993
Merge branch 'main' into fix/45896
nkdengineer Oct 2, 2024
2c5187b
merge main
nkdengineer Oct 10, 2024
093b579
merge main
nkdengineer Oct 11, 2024
39dee67
fix conflict
nkdengineer Nov 11, 2024
ce2eb7d
Merge branch 'main' into fix/45896
nkdengineer Nov 12, 2024
9201fd5
remove change on web
nkdengineer Nov 12, 2024
952539c
merge main
nkdengineer Dec 10, 2024
9d63337
Merge branch 'main' into fix/45896
nkdengineer Dec 19, 2024
3e2e006
Merge branch 'main' into fix/45896
nkdengineer Dec 23, 2024
76c3a61
fix lint
nkdengineer Dec 23, 2024
7e11167
Merge branch 'main' into fix/45896
nkdengineer Jan 3, 2025
0793384
Merge branch 'main' into fix/45896
nkdengineer Jan 15, 2025
ecdc785
Merge branch 'main' into fix/45896
nkdengineer Jan 24, 2025
18cbbe9
fix lint
nkdengineer Jan 24, 2025
3dfac09
update type
nkdengineer Jan 24, 2025
9135bd0
fix typecheck
nkdengineer Jan 24, 2025
a6d2a1a
Merge branch 'main' into fix/45896
nkdengineer Feb 3, 2025
4a708bf
Merge branch 'main' into fix/45896
nkdengineer Feb 4, 2025
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
8 changes: 6 additions & 2 deletions src/components/Search/SearchContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type {SearchContext, SelectedTransactions} from './types';

const defaultSearchContext = {
currentSearchHash: -1,
shouldTurnOffSelectionMode: false,
selectedTransactions: {},
setCurrentSearchHash: () => {},
setSelectedTransactions: () => {},
Expand All @@ -13,9 +14,10 @@ const defaultSearchContext = {
const Context = React.createContext<SearchContext>(defaultSearchContext);

function SearchContextProvider({children}: ChildrenProps) {
const [searchContextData, setSearchContextData] = useState<Pick<SearchContext, 'currentSearchHash' | 'selectedTransactions'>>({
const [searchContextData, setSearchContextData] = useState<Pick<SearchContext, 'currentSearchHash' | 'selectedTransactions' | 'shouldTurnOffSelectionMode'>>({
currentSearchHash: defaultSearchContext.currentSearchHash,
selectedTransactions: defaultSearchContext.selectedTransactions,
shouldTurnOffSelectionMode: false,
});

const setCurrentSearchHash = useCallback((searchHash: number) => {
Expand All @@ -29,16 +31,18 @@ function SearchContextProvider({children}: ChildrenProps) {
setSearchContextData((prevState) => ({
...prevState,
selectedTransactions,
shouldTurnOffSelectionMode: false,
}));
}, []);

const clearSelectedTransactions = useCallback(
(searchHash?: number) => {
(searchHash?: number, shouldTurnOffSelectionMode = false) => {
if (searchHash === searchContextData.currentSearchHash) {
return;
}
setSearchContextData((prevState) => ({
...prevState,
shouldTurnOffSelectionMode,
selectedTransactions: {},
}));
},
Expand Down
9 changes: 8 additions & 1 deletion src/components/Search/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ function Search({queryJSON, policyIDs, isCustomQuery}: SearchProps) {
const {isLargeScreenWidth, isSmallScreenWidth} = useWindowDimensions();
const navigation = useNavigation<StackNavigationProp<AuthScreensParamList>>();
const lastSearchResultsRef = useRef<OnyxEntry<SearchResults>>();
const {setCurrentSearchHash, setSelectedTransactions, selectedTransactions, clearSelectedTransactions} = useSearchContext();
const {setCurrentSearchHash, setSelectedTransactions, selectedTransactions, clearSelectedTransactions, shouldTurnOffSelectionMode} = useSearchContext();
const [selectionMode] = useOnyx(ONYXKEYS.MOBILE_SELECTION_MODE);
const [offset, setOffset] = useState(0);
const [offlineModalVisible, setOfflineModalVisible] = useState(false);
Expand All @@ -96,6 +96,13 @@ function Search({queryJSON, policyIDs, isCustomQuery}: SearchProps) {
setCurrentSearchHash(hash);
}, [hash, clearSelectedTransactions, setCurrentSearchHash]);

useEffect(() => {
const selectedKeys = Object.keys(selectedTransactions).filter((key) => selectedTransactions[key]);
if (selectedKeys.length === 0 && selectionMode?.isEnabled && shouldTurnOffSelectionMode) {
turnOffMobileSelectionMode();
}
}, [selectedTransactions, selectionMode?.isEnabled, shouldTurnOffSelectionMode]);

useEffect(() => {
const selectedKeys = Object.keys(selectedTransactions).filter((key) => selectedTransactions[key]);
if (!isSmallScreenWidth) {
Expand Down
3 changes: 2 additions & 1 deletion src/components/Search/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ type SearchContext = {
selectedTransactions: SelectedTransactions;
setCurrentSearchHash: (hash: number) => void;
setSelectedTransactions: (selectedTransactions: SelectedTransactions) => void;
clearSelectedTransactions: (hash?: number) => void;
clearSelectedTransactions: (hash?: number, shouldTurnOffSelectionMode?: boolean) => void;
shouldTurnOffSelectionMode: boolean;
};

type ASTNode = {
Expand Down
25 changes: 19 additions & 6 deletions src/pages/Search/SearchPageBottomTab.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React, {useMemo} from 'react';
import React, {useCallback, useEffect, useMemo} from 'react';
import {BackHandler} from 'react-native';
import {useOnyx} from 'react-native-onyx';
import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView';
import HeaderWithBackButton from '@components/HeaderWithBackButton';
Expand All @@ -9,7 +10,6 @@ import useActiveCentralPaneRoute from '@hooks/useActiveCentralPaneRoute';
import useLocalize from '@hooks/useLocalize';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useThemeStyles from '@hooks/useThemeStyles';
import {turnOffMobileSelectionMode} from '@libs/actions/MobileSelectionMode';
import Navigation from '@libs/Navigation/Navigation';
import type {AuthScreensParamList} from '@libs/Navigation/types';
import {buildSearchQueryJSON} from '@libs/SearchUtils';
Expand All @@ -28,6 +28,22 @@ function SearchPageBottomTab() {
const {clearSelectedTransactions} = useSearchContext();
const [selectionMode] = useOnyx(ONYXKEYS.MOBILE_SELECTION_MODE);

const handleBackButtonPress = useCallback(() => {
if (!selectionMode?.isEnabled) {
return false;
}
if (selectionMode?.isEnabled) {
clearSelectedTransactions(undefined, true);
return true;
}
}, [selectionMode, clearSelectedTransactions]);

useEffect(() => {
const backHandler = BackHandler.addEventListener('hardwareBackPress', handleBackButtonPress);

return () => backHandler.remove();
}, [handleBackButtonPress]);

const {queryJSON, policyIDs, isCustomQuery} = useMemo(() => {
if (!activeCentralPaneRoute || activeCentralPaneRoute.name !== SCREENS.SEARCH.CENTRAL_PANE) {
return {queryJSON: undefined, policyIDs: undefined};
Expand Down Expand Up @@ -71,10 +87,7 @@ function SearchPageBottomTab() {
) : (
<HeaderWithBackButton
title={translate('common.selectMultiple')}
onBackButtonPress={() => {
clearSelectedTransactions();
turnOffMobileSelectionMode();
}}
onBackButtonPress={handleBackButtonPress}
/>
)}
{shouldUseNarrowLayout && queryJSON && (
Expand Down
Loading