@artsy/palette-mobile 13.0.5 → 13.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # v13.0.6 (Mon Sep 11 2023)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - feat(tabs): adds scroll offsets to the tabs when checking scroll position [#147](https://github.com/artsy/palette-mobile/pull/147) ([@araujobarret](https://github.com/araujobarret))
6
+
7
+ #### Authors: 1
8
+
9
+ - Carlos Alberto de Araujo Barreto ([@araujobarret](https://github.com/araujobarret))
10
+
11
+ ---
12
+
1
13
  # v13.0.5 (Mon Sep 11 2023)
2
14
 
3
15
  #### 🐛 Bug Fix
@@ -9,6 +9,7 @@ export interface HeaderProps {
9
9
  onBack?: () => void;
10
10
  rightElements?: React.ReactNode;
11
11
  scrollY?: number;
12
+ scrollYOffset?: number;
12
13
  title?: string;
13
14
  titleProps?: FlexProps;
14
15
  titleShown?: boolean;
@@ -35,11 +35,11 @@ const Spacer_1 = require("../Spacer");
35
35
  const Text_1 = require("../Text");
36
36
  const Touchable_1 = require("../Touchable");
37
37
  const AnimatedHeader = (props) => {
38
- const { currentScrollY } = (0, ScreenScrollContext_1.useScreenScrollContext)();
39
- return (0, jsx_runtime_1.jsx)(exports.Header, { scrollY: currentScrollY, animated: true, ...props });
38
+ const { currentScrollY, scrollYOffset } = (0, ScreenScrollContext_1.useScreenScrollContext)();
39
+ return ((0, jsx_runtime_1.jsx)(exports.Header, { scrollY: currentScrollY, scrollYOffset: scrollYOffset, animated: true, ...props }));
40
40
  };
41
41
  exports.AnimatedHeader = AnimatedHeader;
42
- const Header = ({ animated = false, hideLeftElements, hideRightElements, hideTitle, leftElements, onBack, rightElements, scrollY = 0, title, titleProps = {}, }) => {
42
+ const Header = ({ animated = false, hideLeftElements, hideRightElements, hideTitle, leftElements, onBack, rightElements, scrollY = 0, scrollYOffset = 0, title, titleProps = {}, }) => {
43
43
  const Left = () => {
44
44
  if (hideLeftElements) {
45
45
  return null;
@@ -56,7 +56,7 @@ const Header = ({ animated = false, hideLeftElements, hideRightElements, hideTit
56
56
  return ((0, jsx_runtime_1.jsx)(Flex_1.Flex, { flex: 1, flexDirection: "row", children: (0, jsx_runtime_1.jsx)(Flex_1.Flex, { alignItems: "center", width: "100%", ...titleProps, children: (0, jsx_runtime_1.jsx)(Text_1.Text, { variant: "sm-display", numberOfLines: 1, children: title }) }) }));
57
57
  }
58
58
  // Show / hide the title to avoid rerenders, which retrigger the animation
59
- const display = scrollY < constants_1.NAVBAR_HEIGHT ? "none" : "flex";
59
+ const display = scrollY < constants_1.NAVBAR_HEIGHT + scrollYOffset ? "none" : "flex";
60
60
  return ((0, jsx_runtime_1.jsx)(Flex_1.Flex, { flex: 1, flexDirection: "row", children: (0, jsx_runtime_1.jsx)(react_native_reanimated_1.default.View, { entering: react_native_reanimated_1.FadeIn.duration(400).easing(react_native_reanimated_1.Easing.out(react_native_reanimated_1.Easing.exp)), exiting: react_native_reanimated_1.FadeOut.duration(400).easing(react_native_reanimated_1.Easing.out(react_native_reanimated_1.Easing.exp)), style: {
61
61
  display,
62
62
  flex: 1,
@@ -2,6 +2,8 @@
2
2
  export interface ScreenScrollContextProps {
3
3
  currentScrollY: number;
4
4
  updateCurrentScrollY: (scrollY: number) => void;
5
+ scrollYOffset?: number;
6
+ updateScrollYOffset: (offset: number) => void;
5
7
  }
6
8
  export declare const ScreenScrollContextProvider: React.FC<React.PropsWithChildren>;
7
9
  export declare const useScreenScrollContext: () => ScreenScrollContextProps;
@@ -6,14 +6,21 @@ const react_1 = require("react");
6
6
  const ScreenScrollContext = (0, react_1.createContext)({
7
7
  currentScrollY: 0,
8
8
  updateCurrentScrollY: () => { },
9
+ scrollYOffset: undefined,
10
+ updateScrollYOffset: () => { },
9
11
  });
10
12
  const ScreenScrollContextProvider = ({ children }) => {
11
13
  const [currentScrollY, setCurrentScrollY] = (0, react_1.useState)(0);
14
+ const [scrollYOffset, setScrollYOffset] = (0, react_1.useState)(undefined);
12
15
  const providerValue = {
13
16
  currentScrollY,
17
+ scrollYOffset,
14
18
  updateCurrentScrollY: (scrollY) => {
15
19
  setCurrentScrollY(scrollY);
16
20
  },
21
+ updateScrollYOffset: (yOffset) => {
22
+ setScrollYOffset(yOffset);
23
+ },
17
24
  };
18
25
  return ((0, jsx_runtime_1.jsx)(ScreenScrollContext.Provider, { value: providerValue, children: children }));
19
26
  };
@@ -1,2 +1,2 @@
1
1
  import { SharedValue } from "react-native-reanimated";
2
- export declare const useAnimatedHeaderScrolling: (scrollY: SharedValue<number>) => number;
2
+ export declare const useAnimatedHeaderScrolling: (scrollY: SharedValue<number>, scrollYOffset?: number) => number;
@@ -4,9 +4,10 @@ exports.useAnimatedHeaderScrolling = void 0;
4
4
  const react_1 = require("react");
5
5
  const react_native_reanimated_1 = require("react-native-reanimated");
6
6
  const constants_1 = require("../constants");
7
- const useAnimatedHeaderScrolling = (scrollY) => {
7
+ const useAnimatedHeaderScrolling = (scrollY, scrollYOffset = 0) => {
8
8
  const listenForScroll = (0, react_native_reanimated_1.useSharedValue)(true);
9
9
  const [currScrollY, setCurrScrollY] = (0, react_1.useState)(scrollY.value);
10
+ const HEADER_HEIGHT = (0, react_1.useMemo)(() => constants_1.NAVBAR_HEIGHT + scrollYOffset, [scrollYOffset]);
10
11
  // Needed to run on JS thread
11
12
  const update = (y) => {
12
13
  setCurrScrollY(y);
@@ -25,17 +26,17 @@ const useAnimatedHeaderScrolling = (scrollY) => {
25
26
  const [prevScrollY] = previousScroll ?? [0, false];
26
27
  // Hacky way to avoid some weird header behavior.
27
28
  // look at HACKS.md for more info.
28
- const suddenlyScrolled = Math.abs(animatedScrollY - prevScrollY) > constants_1.NAVBAR_HEIGHT;
29
+ const suddenlyScrolled = Math.abs(animatedScrollY - prevScrollY) > HEADER_HEIGHT;
29
30
  if (isListeningForScroll && suddenlyScrolled) {
30
31
  return;
31
32
  }
32
- const prevTitleShown = prevScrollY >= constants_1.NAVBAR_HEIGHT;
33
- const currTitleShown = animatedScrollY >= constants_1.NAVBAR_HEIGHT;
33
+ const prevTitleShown = prevScrollY >= HEADER_HEIGHT;
34
+ const currTitleShown = animatedScrollY >= HEADER_HEIGHT;
34
35
  if (prevTitleShown === currTitleShown) {
35
36
  return;
36
37
  }
37
38
  (0, react_native_reanimated_1.runOnJS)(update)(Math.floor(animatedScrollY));
38
- }, [scrollY]);
39
+ }, [scrollY, HEADER_HEIGHT]);
39
40
  return currScrollY;
40
41
  };
41
42
  exports.useAnimatedHeaderScrolling = useAnimatedHeaderScrolling;
@@ -6,9 +6,9 @@ const react_native_reanimated_1 = require("react-native-reanimated");
6
6
  const useAnimatedHeaderScrolling_1 = require("./useAnimatedHeaderScrolling");
7
7
  const ScreenScrollContext_1 = require("../ScreenScrollContext");
8
8
  const useListenForScreenScroll = () => {
9
- const { updateCurrentScrollY } = (0, ScreenScrollContext_1.useScreenScrollContext)();
9
+ const { updateCurrentScrollY, scrollYOffset } = (0, ScreenScrollContext_1.useScreenScrollContext)();
10
10
  const animatedScrollY = (0, react_native_reanimated_1.useSharedValue)(0);
11
- const scrollY = (0, useAnimatedHeaderScrolling_1.useAnimatedHeaderScrolling)(animatedScrollY);
11
+ const scrollY = (0, useAnimatedHeaderScrolling_1.useAnimatedHeaderScrolling)(animatedScrollY, scrollYOffset);
12
12
  const scrollHandler = (0, react_native_reanimated_1.useAnimatedScrollHandler)({
13
13
  onScroll: (event) => {
14
14
  animatedScrollY.value = event.contentOffset.y;
@@ -6,8 +6,8 @@ const react_native_collapsible_tab_view_1 = require("react-native-collapsible-ta
6
6
  const ScreenScrollContext_1 = require("../../Screen/ScreenScrollContext");
7
7
  const useAnimatedHeaderScrolling_1 = require("../../Screen/hooks/useAnimatedHeaderScrolling");
8
8
  const useListenForTabContentScroll = () => {
9
- const scrollY = (0, useAnimatedHeaderScrolling_1.useAnimatedHeaderScrolling)((0, react_native_collapsible_tab_view_1.useCurrentTabScrollY)());
10
- const { updateCurrentScrollY } = (0, ScreenScrollContext_1.useScreenScrollContext)();
9
+ const { updateCurrentScrollY, scrollYOffset } = (0, ScreenScrollContext_1.useScreenScrollContext)();
10
+ const scrollY = (0, useAnimatedHeaderScrolling_1.useAnimatedHeaderScrolling)((0, react_native_collapsible_tab_view_1.useCurrentTabScrollY)(), scrollYOffset);
11
11
  (0, react_1.useEffect)(() => {
12
12
  updateCurrentScrollY(scrollY);
13
13
  }, [scrollY, updateCurrentScrollY]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artsy/palette-mobile",
3
- "version": "13.0.5",
3
+ "version": "13.0.6",
4
4
  "description": "Artsy's design system for React Native",
5
5
  "scripts": {
6
6
  "android": "react-native run-android",