Skip to content

Commit 54ea46d

Browse files
authored
Merge pull request #54359 from gijoe0295/gijoe/53638
fix: Desktop - The search filter shifts to the window border on scroll
2 parents 5f65aec + 7c4a22e commit 54ea46d

File tree

6 files changed

+29
-8
lines changed

6 files changed

+29
-8
lines changed

src/pages/Search/SearchPageBottomTab.tsx

+9-6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import SearchStatusBar from '@components/Search/SearchStatusBar';
99
import useActiveCentralPaneRoute from '@hooks/useActiveCentralPaneRoute';
1010
import useLocalize from '@hooks/useLocalize';
1111
import useResponsiveLayout from '@hooks/useResponsiveLayout';
12+
import useStyleUtils from '@hooks/useStyleUtils';
1213
import useThemeStyles from '@hooks/useThemeStyles';
1314
import useWindowDimensions from '@hooks/useWindowDimensions';
1415
import Navigation from '@libs/Navigation/Navigation';
@@ -32,10 +33,11 @@ function SearchPageBottomTab() {
3233
const {windowHeight} = useWindowDimensions();
3334
const activeCentralPaneRoute = useActiveCentralPaneRoute();
3435
const styles = useThemeStyles();
36+
const StyleUtils = useStyleUtils();
3537
const [selectionMode] = useOnyx(ONYXKEYS.MOBILE_SELECTION_MODE);
3638

3739
const scrollOffset = useSharedValue(0);
38-
const topBarOffset = useSharedValue<number>(variables.searchHeaderHeight);
40+
const topBarOffset = useSharedValue<number>(StyleUtils.searchHeaderHeight);
3941
const topBarAnimatedStyle = useAnimatedStyle(() => ({
4042
top: topBarOffset.get(),
4143
}));
@@ -50,9 +52,9 @@ function SearchPageBottomTab() {
5052
const isScrollingDown = currentOffset > scrollOffset.get();
5153
const distanceScrolled = currentOffset - scrollOffset.get();
5254
if (isScrollingDown && contentOffset.y > TOO_CLOSE_TO_TOP_DISTANCE) {
53-
topBarOffset.set(clamp(topBarOffset.get() - distanceScrolled, variables.minimalTopBarOffset, variables.searchHeaderHeight));
55+
topBarOffset.set(clamp(topBarOffset.get() - distanceScrolled, variables.minimalTopBarOffset, StyleUtils.searchHeaderHeight));
5456
} else if (!isScrollingDown && distanceScrolled < 0 && contentOffset.y + layoutMeasurement.height < contentSize.height - TOO_CLOSE_TO_BOTTOM_DISTANCE) {
55-
topBarOffset.set(withTiming(variables.searchHeaderHeight, {duration: ANIMATION_DURATION_IN_MS}));
57+
topBarOffset.set(withTiming(StyleUtils.searchHeaderHeight, {duration: ANIMATION_DURATION_IN_MS}));
5658
}
5759
scrollOffset.set(currentOffset);
5860
},
@@ -63,9 +65,9 @@ function SearchPageBottomTab() {
6365
if (windowHeight <= h) {
6466
return;
6567
}
66-
topBarOffset.set(withTiming(variables.searchHeaderHeight, {duration: ANIMATION_DURATION_IN_MS}));
68+
topBarOffset.set(withTiming(StyleUtils.searchHeaderHeight, {duration: ANIMATION_DURATION_IN_MS}));
6769
},
68-
[windowHeight, topBarOffset],
70+
[windowHeight, topBarOffset, StyleUtils.searchHeaderHeight],
6971
);
7072

7173
const searchParams = activeCentralPaneRoute?.params as AuthScreensParamList[typeof SCREENS.SEARCH.CENTRAL_PANE];
@@ -102,6 +104,7 @@ function SearchPageBottomTab() {
102104
testID={SearchPageBottomTab.displayName}
103105
style={styles.pv0}
104106
offlineIndicatorStyle={styles.mtAuto}
107+
headerGapStyles={styles.searchHeaderGap}
105108
>
106109
{!selectionMode?.isEnabled ? (
107110
<>
@@ -122,7 +125,7 @@ function SearchPageBottomTab() {
122125
<SearchStatusBar
123126
queryJSON={queryJSON}
124127
onStatusChange={() => {
125-
topBarOffset.set(withTiming(variables.searchHeaderHeight, {duration: ANIMATION_DURATION_IN_MS}));
128+
topBarOffset.set(withTiming(StyleUtils.searchHeaderHeight, {duration: ANIMATION_DURATION_IN_MS}));
126129
}}
127130
/>
128131
</Animated.View>

src/styles/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,11 @@ const styles = (theme: ThemeColors) =>
10761076
height: CONST.DESKTOP_HEADER_PADDING,
10771077
},
10781078

1079+
searchHeaderGap: {
1080+
zIndex: variables.searchTopBarZIndex + 1,
1081+
backgroundColor: theme.appBG,
1082+
},
1083+
10791084
reportOptions: {
10801085
marginLeft: 8,
10811086
},
@@ -3710,7 +3715,7 @@ const styles = (theme: ThemeColors) =>
37103715
left: 0,
37113716
right: 0,
37123717
position: 'absolute',
3713-
zIndex: 9,
3718+
zIndex: variables.searchTopBarZIndex,
37143719
backgroundColor: theme.appBG,
37153720
},
37163721

src/styles/utils/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import getSafeAreaInsets from './getSafeAreaInsets';
2929
import getSignInBgStyles from './getSignInBgStyles';
3030
import {compactContentContainerStyles} from './optionRowStyles';
3131
import positioning from './positioning';
32+
import searchHeaderHeight from './searchHeaderHeight';
3233
import type {
3334
AllStyles,
3435
AvatarSize,
@@ -290,7 +291,10 @@ function getBackgroundColorAndFill(backgroundColor: string, fill: string): SVGAv
290291
*/
291292
function getEReceiptColorCode(transaction: OnyxEntry<Transaction>): EReceiptColorName {
292293
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
293-
const transactionID = transaction?.parentTransactionID || transaction?.transactionID || '';
294+
const transactionID = transaction?.parentTransactionID || transaction?.transactionID;
295+
if (!transactionID) {
296+
return CONST.ERECEIPT_COLORS.YELLOW;
297+
}
294298

295299
const colorHash = UserUtils.hashText(transactionID.trim(), eReceiptColors.length);
296300

@@ -1166,6 +1170,7 @@ function getItemBackgroundColorStyle(isSelected: boolean, isFocused: boolean, is
11661170

11671171
const staticStyleUtils = {
11681172
positioning,
1173+
searchHeaderHeight,
11691174
combineStyles,
11701175
displayIfTrue,
11711176
getAmountFontSizeAndLineHeight,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import variables from '@styles/variables';
2+
import CONST from '@src/CONST';
3+
4+
export default variables.searchHeaderHeight + CONST.DESKTOP_HEADER_PADDING;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import variables from '@styles/variables';
2+
3+
export default variables.searchHeaderHeight;

src/styles/variables.ts

+1
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ export default {
265265
minimalTopBarOffset: -26,
266266
searchHeaderHeight: 80,
267267
searchListContentMarginTop: 116,
268+
searchTopBarZIndex: 9,
268269

269270
h20: 20,
270271
h28: 28,

0 commit comments

Comments
 (0)