@r0b0t3d/react-native-collapsible 1.3.5-beta.2 → 1.3.5-beta.3

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.
Files changed (66) hide show
  1. package/lib/commonjs/components/CollapsibleContainer.js +1 -2
  2. package/lib/commonjs/components/CollapsibleContainer.js.map +1 -1
  3. package/lib/commonjs/components/CollapsibleView.js +1 -1
  4. package/lib/commonjs/components/CollapsibleView.js.map +1 -1
  5. package/lib/commonjs/components/header/CollapsibleHeaderContainer.js +85 -23
  6. package/lib/commonjs/components/header/CollapsibleHeaderContainer.js.map +1 -1
  7. package/lib/commonjs/components/header/StickyView.js +30 -19
  8. package/lib/commonjs/components/header/StickyView.js.map +1 -1
  9. package/lib/commonjs/components/scrollable/useAnimatedScroll.js +2 -3
  10. package/lib/commonjs/components/scrollable/useAnimatedScroll.js.map +1 -1
  11. package/lib/commonjs/hooks/useCollapsibleHeaderContext.js.map +1 -1
  12. package/lib/commonjs/utils/useSharedValueRef.js +21 -0
  13. package/lib/commonjs/utils/useSharedValueRef.js.map +1 -0
  14. package/lib/commonjs/withCollapsibleContext.js +37 -92
  15. package/lib/commonjs/withCollapsibleContext.js.map +1 -1
  16. package/lib/module/components/CollapsibleContainer.js +1 -2
  17. package/lib/module/components/CollapsibleContainer.js.map +1 -1
  18. package/lib/module/components/CollapsibleView.js +1 -1
  19. package/lib/module/components/CollapsibleView.js.map +1 -1
  20. package/lib/module/components/header/CollapsibleHeaderContainer.js +87 -24
  21. package/lib/module/components/header/CollapsibleHeaderContainer.js.map +1 -1
  22. package/lib/module/components/header/StickyView.js +31 -20
  23. package/lib/module/components/header/StickyView.js.map +1 -1
  24. package/lib/module/components/scrollable/useAnimatedScroll.js +2 -3
  25. package/lib/module/components/scrollable/useAnimatedScroll.js.map +1 -1
  26. package/lib/module/hooks/useCollapsibleHeaderContext.js.map +1 -1
  27. package/lib/module/utils/useSharedValueRef.js +15 -0
  28. package/lib/module/utils/useSharedValueRef.js.map +1 -0
  29. package/lib/module/withCollapsibleContext.js +38 -92
  30. package/lib/module/withCollapsibleContext.js.map +1 -1
  31. package/lib/typescript/components/CollapsibleContainer.d.ts.map +1 -1
  32. package/lib/typescript/components/header/CollapsibleHeaderContainer.d.ts +2 -2
  33. package/lib/typescript/components/header/CollapsibleHeaderContainer.d.ts.map +1 -1
  34. package/lib/typescript/components/header/StickyView.d.ts.map +1 -1
  35. package/lib/typescript/components/scrollable/useAnimatedScroll.d.ts.map +1 -1
  36. package/lib/typescript/hooks/useCollapsibleHeaderContext.d.ts +6 -11
  37. package/lib/typescript/hooks/useCollapsibleHeaderContext.d.ts.map +1 -1
  38. package/lib/typescript/types.d.ts +6 -6
  39. package/lib/typescript/types.d.ts.map +1 -1
  40. package/lib/typescript/utils/useSharedValueRef.d.ts +3 -0
  41. package/lib/typescript/utils/useSharedValueRef.d.ts.map +1 -0
  42. package/lib/typescript/withCollapsibleContext.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/src/components/CollapsibleContainer.tsx +0 -2
  45. package/src/components/CollapsibleView.tsx +1 -1
  46. package/src/components/header/CollapsibleHeaderContainer.tsx +145 -25
  47. package/src/components/header/StickyView.tsx +32 -17
  48. package/src/components/scrollable/useAnimatedScroll.ts +3 -9
  49. package/src/hooks/useCollapsibleHeaderContext.ts +6 -8
  50. package/src/types.ts +8 -8
  51. package/src/utils/useSharedValueRef.ts +22 -0
  52. package/src/withCollapsibleContext.tsx +46 -110
  53. package/lib/commonjs/components/header/CollapsibleHeaderConsumer.js +0 -59
  54. package/lib/commonjs/components/header/CollapsibleHeaderConsumer.js.map +0 -1
  55. package/lib/commonjs/components/header/CollapsibleHeaderProvider.js +0 -58
  56. package/lib/commonjs/components/header/CollapsibleHeaderProvider.js.map +0 -1
  57. package/lib/module/components/header/CollapsibleHeaderConsumer.js +0 -50
  58. package/lib/module/components/header/CollapsibleHeaderConsumer.js.map +0 -1
  59. package/lib/module/components/header/CollapsibleHeaderProvider.js +0 -49
  60. package/lib/module/components/header/CollapsibleHeaderProvider.js.map +0 -1
  61. package/lib/typescript/components/header/CollapsibleHeaderConsumer.d.ts +0 -3
  62. package/lib/typescript/components/header/CollapsibleHeaderConsumer.d.ts.map +0 -1
  63. package/lib/typescript/components/header/CollapsibleHeaderProvider.d.ts +0 -5
  64. package/lib/typescript/components/header/CollapsibleHeaderProvider.d.ts.map +0 -1
  65. package/src/components/header/CollapsibleHeaderConsumer.tsx +0 -62
  66. package/src/components/header/CollapsibleHeaderProvider.tsx +0 -70
@@ -1,14 +1,21 @@
1
1
  /* eslint-disable react-hooks/exhaustive-deps */
2
2
  import React, { useCallback, useEffect, useMemo, useRef } from 'react';
3
- import { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';
4
- import useCollapsibleContext from '../../hooks/useCollapsibleContext';
5
- import useInternalCollapsibleContext from '../../hooks/useInternalCollapsibleContext';
3
+ import {
4
+ LayoutChangeEvent,
5
+ LayoutRectangle,
6
+ StyleProp,
7
+ StyleSheet,
8
+ View,
9
+ ViewStyle,
10
+ } from 'react-native';
6
11
  import Animated, {
7
12
  Extrapolate,
8
13
  interpolate,
9
14
  useAnimatedStyle,
10
15
  useDerivedValue,
16
+ useSharedValue,
11
17
  } from 'react-native-reanimated';
18
+ import useCollapsibleHeaderContext from '../../hooks/useCollapsibleHeaderContext';
12
19
 
13
20
  type Props = {
14
21
  style?: StyleProp<ViewStyle>;
@@ -20,29 +27,37 @@ let stickyKey = 0;
20
27
  export default function StickyView({ children, style }: Props) {
21
28
  const key = useMemo(() => `sticky_${stickyKey++}`, []);
22
29
  const viewRef = useRef<View>(null);
23
- const { handleStickyViewLayout, stickyViewTops, stickyViewPositions } =
24
- useInternalCollapsibleContext();
25
- const { scrollY } = useCollapsibleContext();
30
+ const { handleStickyViewLayout, animatedY } = useCollapsibleHeaderContext();
31
+ const currentLayout = useSharedValue<LayoutRectangle | undefined>(undefined);
26
32
 
27
33
  useEffect(() => {
28
34
  return () => handleStickyViewLayout(key, undefined);
29
35
  }, [key]);
30
36
 
31
- const handleLayout = useCallback(() => {
32
- handleStickyViewLayout(key, viewRef);
33
- }, [key]);
37
+ const handleLayout = useCallback(
38
+ ({ nativeEvent: { layout } }: LayoutChangeEvent) => {
39
+ currentLayout.value = layout;
40
+ handleStickyViewLayout(key, layout);
41
+ },
42
+ [key, handleStickyViewLayout]
43
+ );
34
44
 
35
45
  const translateY = useDerivedValue(() => {
36
- const top = stickyViewTops.value[key] || 0;
37
- const layoutValues = stickyViewPositions.value[key] || { top: 0 };
38
- const inputMid = layoutValues.top - top;
46
+ if (!currentLayout.value) {
47
+ return 0;
48
+ }
49
+ const { height: stickyHeight, y: top } = currentLayout.value;
50
+ const topValue = top;
51
+
52
+ console.log({ key, animatedY: animatedY.value, top, stickyHeight });
53
+
39
54
  return interpolate(
40
- scrollY.value,
41
- [0, inputMid, inputMid + 100000],
42
- [0, 0, 100000],
55
+ animatedY.value,
56
+ [0, topValue, topValue + stickyHeight + 100],
57
+ [0, 0, stickyHeight + 100],
43
58
  Extrapolate.CLAMP
44
59
  );
45
- }, [key]);
60
+ }, []);
46
61
 
47
62
  const animatedStyle = useAnimatedStyle(() => {
48
63
  return {
@@ -60,7 +75,7 @@ export default function StickyView({ children, style }: Props) {
60
75
  // @ts-ignore
61
76
  ref={viewRef}
62
77
  onLayout={handleLayout}
63
- style={[styles.container, animatedStyle, style]}
78
+ style={[styles.container, style, animatedStyle]}
64
79
  pointerEvents="box-none"
65
80
  >
66
81
  {children}
@@ -25,7 +25,7 @@ export default function useAnimatedScroll({
25
25
  }: Props) {
26
26
  const scrollDirection = useSharedValue('unknown');
27
27
  const { scrollY } = useCollapsibleContext();
28
- const { setCollapsibleHandlers, firstStickyViewY, fixedHeaderHeight } =
28
+ const { setCollapsibleHandlers, fixedHeaderHeight } =
29
29
  useInternalCollapsibleContext();
30
30
 
31
31
  useEffect(() => {
@@ -36,10 +36,7 @@ export default function useAnimatedScroll({
36
36
 
37
37
  const collapse = useCallback(
38
38
  (animated = true) => {
39
- scrollTo(
40
- Math.min(fixedHeaderHeight.value || 0, firstStickyViewY.value || 0),
41
- animated
42
- );
39
+ scrollTo(fixedHeaderHeight.value, animated);
43
40
  },
44
41
  [scrollTo]
45
42
  );
@@ -65,10 +62,7 @@ export default function useAnimatedScroll({
65
62
  },
66
63
  onEndDrag: () => {
67
64
  if (!headerSnappable) return;
68
- const maxY =
69
- firstStickyViewY.value && firstStickyViewY.value > 0
70
- ? firstStickyViewY.value
71
- : fixedHeaderHeight.value || 0;
65
+ const maxY = fixedHeaderHeight.value;
72
66
 
73
67
  if (scrollY.value < maxY) {
74
68
  const delta = Math.abs(scrollY.value - maxY);
@@ -1,12 +1,10 @@
1
- import { createContext, ReactNode, useContext } from 'react';
1
+ import { createContext, useContext } from 'react';
2
+ import { LayoutRectangle } from 'react-native';
3
+ import Animated from 'react-native-reanimated';
2
4
 
3
- export type HeaderItem = { key: string; children: ReactNode };
4
-
5
- type CollapsibleContextHeaderType = {
6
- headers: HeaderItem[];
7
- mount: (key: string, header: ReactNode) => void;
8
- update: (key: string, header: ReactNode) => void;
9
- unmount: (key: string) => void;
5
+ export type CollapsibleContextHeaderType = {
6
+ handleStickyViewLayout: (key: string, layout?: LayoutRectangle) => void;
7
+ animatedY: Animated.SharedValue<number>;
10
8
  };
11
9
 
12
10
  export const CollapsibleHeaderContext =
package/src/types.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- import type { View } from 'react-native';
2
+ import type { LayoutRectangle, View } from 'react-native';
3
3
  import type Animated from 'react-native-reanimated';
4
4
 
5
5
  export type ScrollToIndexParams = {
@@ -33,16 +33,16 @@ export type CollapsibleContextInternalType = {
33
33
  scrollViewRef: React.RefObject<any>;
34
34
  containerRef: React.RefObject<View>;
35
35
  contentMinHeight: Animated.SharedValue<number>;
36
- firstStickyViewY: Animated.SharedValue<number>;
37
- stickyViewPositions: Animated.SharedValue<Record<string, LayoutParams>>;
38
- stickyViewTops: Animated.SharedValue<Record<string, number>>;
36
+ headerViewPositions: Animated.SharedValue<
37
+ Record<string, { top: number; stickyHeight: number }>
38
+ >;
39
39
  fixedHeaderHeight: Animated.SharedValue<number>;
40
40
  handleContainerHeight: (height: number) => void;
41
- handleStickyViewLayout: (
42
- viewKey: string,
43
- viewRef?: React.RefObject<View>
41
+ handleHeaderContainerLayout: (
42
+ key: string,
43
+ layout?: LayoutRectangle,
44
+ stickyHeight?: number
44
45
  ) => void;
45
- handleHeaderContainerLayout: (height: number) => void;
46
46
  setCollapsibleHandlers: (handlers: CollapsibleHandles) => void;
47
47
  };
48
48
 
@@ -0,0 +1,22 @@
1
+ import { useCallback, useRef } from 'react';
2
+ import Animated, { useSharedValue } from 'react-native-reanimated';
3
+
4
+ export default function useSharedValueRef<T>(
5
+ defaultValue: T
6
+ ): [Animated.SharedValue<T>, (value: T) => void] {
7
+ const sharedValue = useSharedValue<T>(defaultValue);
8
+ const savedValue = useRef<T>(defaultValue);
9
+
10
+ const appendValue = useCallback(
11
+ (value: T) => {
12
+ savedValue.current = {
13
+ ...savedValue.current,
14
+ ...value,
15
+ };
16
+ sharedValue.value = savedValue.current;
17
+ },
18
+ [sharedValue]
19
+ );
20
+
21
+ return [sharedValue, appendValue];
22
+ }
@@ -1,45 +1,35 @@
1
1
  /* eslint-disable react-hooks/exhaustive-deps */
2
2
  import React, { useCallback, useMemo, useRef, FC } from 'react';
3
- import type { CollapsibleHandles, LayoutParams } from './types';
3
+ import type { CollapsibleHandles } from './types';
4
4
  import { CollapsibleContext } from './hooks/useCollapsibleContext';
5
5
  import { InternalCollapsibleContext } from './hooks/useInternalCollapsibleContext';
6
6
  import {
7
- useAnimatedReaction,
8
7
  useDerivedValue,
9
8
  useSharedValue,
10
9
  withTiming,
11
10
  } from 'react-native-reanimated';
12
- import type { View } from 'react-native';
13
- import { debounce } from './utils/debounce';
14
- import CollapsibleHeaderProvider from './components/header/CollapsibleHeaderProvider';
11
+ import type { LayoutRectangle, View } from 'react-native';
15
12
 
16
13
  export default function withCollapsibleContext<T>(Component: FC<T>) {
17
14
  return (props: T) => {
18
15
  const collapsibleHandlers = useRef<CollapsibleHandles>();
19
16
  const headerHeight = useSharedValue(0);
20
17
  const scrollY = useSharedValue(0);
21
- const stickyViewRefs = useRef<
22
- Record<string, React.RefObject<View> | undefined>
23
- >({});
24
- const stickyViewTops = useSharedValue<Record<string, number>>({});
25
- const stickyViewPositionsRef = useRef<
26
- Record<string, LayoutParams | undefined>
27
- >({});
28
- const stickyViewPositions = useSharedValue<Record<string, LayoutParams>>(
29
- {}
30
- );
31
18
  const fixedHeaderHeight = useSharedValue(0);
32
19
  const containerHeight = useSharedValue(0);
33
- const firstStickyViewY = useSharedValue(1000000);
34
20
  const containerRef = useRef<View>(null);
35
21
  const scrollViewRef = useRef<View>(null);
22
+ const headerContainerLayouts = useRef<
23
+ Record<string, (LayoutRectangle & { stickyHeight?: number }) | undefined>
24
+ >({});
25
+ const headerViewPositions = useSharedValue({});
36
26
 
37
27
  const setCollapsibleHandlers = useCallback((handlers) => {
38
28
  collapsibleHandlers.current = handlers;
39
29
  }, []);
40
30
 
41
31
  const headerCollapsed = useDerivedValue(() => {
42
- const maxY = fixedHeaderHeight.value - firstStickyViewY.value;
32
+ const maxY = fixedHeaderHeight.value;
43
33
  return scrollY.value >= maxY;
44
34
  }, []);
45
35
 
@@ -47,97 +37,51 @@ export default function withCollapsibleContext<T>(Component: FC<T>) {
47
37
  return containerHeight.value + fixedHeaderHeight.value;
48
38
  }, []);
49
39
 
50
- useAnimatedReaction(
51
- () => {
52
- const totalHeight = Object.keys(stickyViewPositions.value).reduce(
53
- (acc, item) => {
54
- const value = stickyViewPositions.value[item];
55
- if (value) {
56
- return acc + value.top;
40
+ const handleHeaderContainerLayout = useCallback(
41
+ (key: string, layout?: LayoutRectangle, stickyHeight?: number) => {
42
+ headerContainerLayouts.current[key] = layout
43
+ ? {
44
+ ...layout,
45
+ stickyHeight,
57
46
  }
58
- return acc;
59
- },
47
+ : undefined;
48
+ const headerContainers = Object.keys(
49
+ headerContainerLayouts.current
50
+ ).filter((k: string) => !!headerContainerLayouts.current[k]);
51
+ // Calculate total header height
52
+ const totalHeight = headerContainers.reduce(
53
+ (acc, value) =>
54
+ acc + (headerContainerLayouts.current[value]?.height ?? 0),
60
55
  0
61
56
  );
62
- return totalHeight - fixedHeaderHeight.value;
63
- },
64
- (result, previous) => {
65
- if (result !== previous) {
66
- const viewPositions = stickyViewPositions.value;
67
- const sortedKeys = Object.keys(viewPositions)
68
- .filter((v) => !!viewPositions[v])
69
- // @ts-ignore
70
- .sort((a, b) => viewPositions[a].top - viewPositions[b].top);
71
- let totalTop = 0;
72
- const values: any = {};
73
- for (let i = 0; i < sortedKeys.length; i++) {
74
- // @ts-ignore
75
- values[sortedKeys[i]] = totalTop;
76
- // Try minus 1 make it filled when scrolling up.
77
- // Otherwise, we can see a small space between the persits views
78
- // @ts-ignore
79
- totalTop += viewPositions[sortedKeys[i]].height - 1;
80
- }
81
- stickyViewTops.value = values;
82
- // @ts-ignore
83
- firstStickyViewY.value = viewPositions[sortedKeys[0]]?.top || 0;
84
- }
85
- }
86
- );
87
-
88
- const handleStickyViewLayout = useCallback(
89
- (viewKey: string, viewRef?: React.RefObject<View>) => {
90
- if (viewRef && viewRef.current && containerRef.current) {
91
- stickyViewRefs.current[viewKey] = viewRef;
92
- viewRef.current.measureLayout(
93
- // @ts-ignore
94
- containerRef.current,
95
- (left, top, width, height) => {
96
- stickyViewPositionsRef.current = {
97
- ...stickyViewPositionsRef.current,
98
- [viewKey]: { left, top, width, height },
99
- };
100
- // @ts-ignore
101
- stickyViewPositions.value = stickyViewPositionsRef.current;
102
- },
103
- () => {}
57
+ headerHeight.value = withTiming(totalHeight, {
58
+ duration: fixedHeaderHeight.value === 0 ? 0 : 10,
59
+ });
60
+ fixedHeaderHeight.value = totalHeight;
61
+ // Calculate header positions
62
+ const sortedHeaders = headerContainers.sort((a, b) => {
63
+ return (
64
+ (headerContainerLayouts.current[a]?.y || 0) -
65
+ (headerContainerLayouts.current[b]?.y || 0)
104
66
  );
105
- } else {
106
- stickyViewRefs.current = {
107
- ...stickyViewRefs.current,
108
- [viewKey]: undefined,
109
- };
110
- stickyViewPositionsRef.current = {
111
- ...stickyViewPositionsRef.current,
112
- [viewKey]: undefined,
67
+ });
68
+ const values: any = {};
69
+ let aStickyHeight = 0;
70
+ for (let index = 0; index < sortedHeaders.length; index++) {
71
+ const headerKey = sortedHeaders[index];
72
+ const sHeight =
73
+ headerContainerLayouts.current[headerKey]?.stickyHeight ?? 0;
74
+ values[headerKey] = {
75
+ top: aStickyHeight,
76
+ stickyHeight: sHeight,
113
77
  };
114
- // @ts-ignore
115
- stickyViewPositions.value = stickyViewPositionsRef.current;
78
+ aStickyHeight += sHeight;
116
79
  }
80
+ headerViewPositions.value = values;
117
81
  },
118
82
  []
119
83
  );
120
84
 
121
- const debounceRefreshStickyPositions = useMemo(() => {
122
- return debounce(() => {
123
- Object.keys(stickyViewRefs.current).forEach((key) => {
124
- const viewRef = stickyViewRefs.current[key];
125
- if (viewRef) {
126
- handleStickyViewLayout(key, viewRef);
127
- }
128
- });
129
- }, 200);
130
- }, []);
131
-
132
- const handleHeaderContainerLayout = useCallback((height: number) => {
133
- headerHeight.value = withTiming(height, {
134
- duration: fixedHeaderHeight.value === 0 ? 0 : 10,
135
- });
136
- fixedHeaderHeight.value = height;
137
- // Try refresh sticky positions
138
- debounceRefreshStickyPositions();
139
- }, []);
140
-
141
85
  const handleContainerHeight = useCallback((height: number) => {
142
86
  containerHeight.value = height;
143
87
  }, []);
@@ -161,36 +105,28 @@ export default function withCollapsibleContext<T>(Component: FC<T>) {
161
105
  () => ({
162
106
  scrollViewRef,
163
107
  containerRef,
164
- handleStickyViewLayout,
165
108
  handleHeaderContainerLayout,
166
109
  setCollapsibleHandlers,
167
110
  handleContainerHeight,
168
- firstStickyViewY,
169
- stickyViewTops,
170
- stickyViewPositions,
171
111
  fixedHeaderHeight,
172
112
  contentMinHeight,
113
+ headerViewPositions,
173
114
  }),
174
115
  [
175
116
  setCollapsibleHandlers,
176
- handleStickyViewLayout,
177
117
  handleHeaderContainerLayout,
178
118
  handleContainerHeight,
179
- firstStickyViewY,
180
- stickyViewTops,
181
- stickyViewPositions,
182
119
  fixedHeaderHeight,
183
120
  contentMinHeight,
121
+ headerViewPositions,
184
122
  ]
185
123
  );
186
124
 
187
125
  return (
188
126
  <CollapsibleContext.Provider value={context}>
189
127
  <InternalCollapsibleContext.Provider value={internalContext}>
190
- <CollapsibleHeaderProvider>
191
- {/** @ts-ignore */}
192
- <Component {...props} />
193
- </CollapsibleHeaderProvider>
128
+ {/** @ts-ignore */}
129
+ <Component {...props} />
194
130
  </InternalCollapsibleContext.Provider>
195
131
  </CollapsibleContext.Provider>
196
132
  );
@@ -1,59 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = CollapsibleHeaderConsumer;
7
- var _react = _interopRequireWildcard(require("react"));
8
- var _useInternalCollapsibleContext = _interopRequireDefault(require("../../hooks/useInternalCollapsibleContext"));
9
- var _useCollapsibleHeaderContext = _interopRequireDefault(require("../../hooks/useCollapsibleHeaderContext"));
10
- var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
11
- var _useCollapsibleContext = _interopRequireDefault(require("../../hooks/useCollapsibleContext"));
12
- var _reactNative = require("react-native");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
- function CollapsibleHeaderConsumer() {
17
- const {
18
- headers
19
- } = (0, _useCollapsibleHeaderContext.default)();
20
- const {
21
- handleHeaderContainerLayout
22
- } = (0, _useInternalCollapsibleContext.default)();
23
- const {
24
- scrollY,
25
- headerHeight
26
- } = (0, _useCollapsibleContext.default)();
27
- const headerTranslate = (0, _reactNativeReanimated.useDerivedValue)(() => (0, _reactNativeReanimated.interpolate)(scrollY.value,
28
- // FIXME: can improve by geting maxY value of header and sticky views
29
- [-1000, 0, 100000], [0, 0, -100000], 'clamp'), []);
30
- const headerStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
31
- return {
32
- transform: [{
33
- translateY: headerTranslate.value
34
- }]
35
- };
36
- }, [headerHeight, headerTranslate]);
37
- const handleHeaderLayout = (0, _react.useCallback)(_ref => {
38
- let {
39
- nativeEvent: {
40
- layout: {
41
- height
42
- }
43
- }
44
- } = _ref;
45
- handleHeaderContainerLayout(height);
46
- }, [handleHeaderContainerLayout]);
47
- return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
48
- onLayout: handleHeaderLayout,
49
- style: [styles.container, headerStyle],
50
- pointerEvents: "box-none"
51
- }, headers.map(item => item.children));
52
- }
53
- const styles = _reactNative.StyleSheet.create({
54
- container: {
55
- zIndex: 10,
56
- backgroundColor: 'white'
57
- }
58
- });
59
- //# sourceMappingURL=CollapsibleHeaderConsumer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_useInternalCollapsibleContext","_interopRequireDefault","_useCollapsibleHeaderContext","_reactNativeReanimated","_useCollapsibleContext","_reactNative","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","CollapsibleHeaderConsumer","headers","useCollapsibleHeaderContext","handleHeaderContainerLayout","useInternalCollapsibleContext","scrollY","headerHeight","useCollapsibleContext","headerTranslate","useDerivedValue","interpolate","value","headerStyle","useAnimatedStyle","transform","translateY","handleHeaderLayout","useCallback","_ref","nativeEvent","layout","height","createElement","View","onLayout","style","styles","container","pointerEvents","map","item","children","StyleSheet","create","zIndex","backgroundColor"],"sourceRoot":"../../../../src","sources":["components/header/CollapsibleHeaderConsumer.tsx"],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = CollapsibleHeaderProvider;
7
- var _react = _interopRequireWildcard(require("react"));
8
- var _useCollapsibleHeaderContext = require("../../hooks/useCollapsibleHeaderContext");
9
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
11
- /* eslint-disable no-shadow */
12
-
13
- function CollapsibleHeaderProvider(_ref) {
14
- let {
15
- children
16
- } = _ref;
17
- const [headers, setHeaders] = (0, _react.useState)([]);
18
- const mounted = (0, _react.useRef)(false);
19
- (0, _react.useEffect)(() => {
20
- mounted.current = true;
21
- return () => {
22
- mounted.current = false;
23
- };
24
- }, []);
25
- const mount = (0, _react.useCallback)((key, children) => {
26
- setHeaders(prev => [...prev, {
27
- key,
28
- children
29
- }]);
30
- }, []);
31
- const unmount = (0, _react.useCallback)(key => {
32
- setHeaders(prev => prev.filter(h => h.key !== key));
33
- }, []);
34
- const update = (0, _react.useCallback)((key, children) => {
35
- if (!mounted.current) {
36
- return;
37
- }
38
- setHeaders(prev => prev.map(item => {
39
- if (item.key === key) {
40
- return {
41
- ...item,
42
- children
43
- };
44
- }
45
- return item;
46
- }));
47
- }, []);
48
- const context = (0, _react.useMemo)(() => ({
49
- headers,
50
- mount,
51
- unmount,
52
- update
53
- }), [headers, mount, unmount, update]);
54
- return /*#__PURE__*/_react.default.createElement(_useCollapsibleHeaderContext.CollapsibleHeaderContext.Provider, {
55
- value: context
56
- }, children);
57
- }
58
- //# sourceMappingURL=CollapsibleHeaderProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_useCollapsibleHeaderContext","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","CollapsibleHeaderProvider","_ref","children","headers","setHeaders","useState","mounted","useRef","useEffect","current","mount","useCallback","prev","unmount","filter","h","update","map","item","context","useMemo","createElement","CollapsibleHeaderContext","Provider","value"],"sourceRoot":"../../../../src","sources":["components/header/CollapsibleHeaderProvider.tsx"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAQA,IAAAC,4BAAA,GAAAD,OAAA;AAGiD,SAAAE,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAJ,wBAAAQ,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAZjD;;AAce,SAASW,yBAAyBA,CAAAC,IAAA,EAI9C;EAAA,IAJ+C;IAChDC;EAGF,CAAC,GAAAD,IAAA;EACC,MAAM,CAACE,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAC,eAAQ,EAAe,EAAE,CAAC;EACxD,MAAMC,OAAO,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EAE7B,IAAAC,gBAAS,EAAC,MAAM;IACdF,OAAO,CAACG,OAAO,GAAG,IAAI;IACtB,OAAO,MAAM;MACXH,OAAO,CAACG,OAAO,GAAG,KAAK;IACzB,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,KAAK,GAAG,IAAAC,kBAAW,EAAC,CAACjB,GAAW,EAAEQ,QAAmB,KAAK;IAC9DE,UAAU,CAAEQ,IAAI,IAAK,CAAC,GAAGA,IAAI,EAAE;MAAElB,GAAG;MAAEQ;IAAS,CAAC,CAAC,CAAC;EACpD,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMW,OAAO,GAAG,IAAAF,kBAAW,EAAEjB,GAAW,IAAK;IAC3CU,UAAU,CAAEQ,IAAI,IAAKA,IAAI,CAACE,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACrB,GAAG,KAAKA,GAAG,CAAC,CAAC;EACzD,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMsB,MAAM,GAAG,IAAAL,kBAAW,EAAC,CAACjB,GAAW,EAAEQ,QAAmB,KAAK;IAC/D,IAAI,CAACI,OAAO,CAACG,OAAO,EAAE;MACpB;IACF;IACAL,UAAU,CAAEQ,IAAI,IACdA,IAAI,CAACK,GAAG,CAAEC,IAAI,IAAK;MACjB,IAAIA,IAAI,CAACxB,GAAG,KAAKA,GAAG,EAAE;QACpB,OAAO;UACL,GAAGwB,IAAI;UACPhB;QACF,CAAC;MACH;MACA,OAAOgB,IAAI;IACb,CAAC,CACH,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,OAAO,GAAG,IAAAC,cAAO,EACrB,OAAO;IACLjB,OAAO;IACPO,KAAK;IACLG,OAAO;IACPG;EACF,CAAC,CAAC,EACF,CAACb,OAAO,EAAEO,KAAK,EAAEG,OAAO,EAAEG,MAAM,CAClC,CAAC;EAED,oBACE1C,MAAA,CAAAW,OAAA,CAAAoC,aAAA,CAAC5C,4BAAA,CAAA6C,wBAAwB,CAACC,QAAQ;IAACC,KAAK,EAAEL;EAAQ,GAC/CjB,QACgC,CAAC;AAExC"}
@@ -1,50 +0,0 @@
1
- import React, { useCallback } from 'react';
2
- import useInternalCollapsibleContext from '../../hooks/useInternalCollapsibleContext';
3
- import useCollapsibleHeaderContext from '../../hooks/useCollapsibleHeaderContext';
4
- import Animated, { interpolate, useAnimatedStyle, useDerivedValue } from 'react-native-reanimated';
5
- import useCollapsibleContext from '../../hooks/useCollapsibleContext';
6
- import { StyleSheet } from 'react-native';
7
- export default function CollapsibleHeaderConsumer() {
8
- const {
9
- headers
10
- } = useCollapsibleHeaderContext();
11
- const {
12
- handleHeaderContainerLayout
13
- } = useInternalCollapsibleContext();
14
- const {
15
- scrollY,
16
- headerHeight
17
- } = useCollapsibleContext();
18
- const headerTranslate = useDerivedValue(() => interpolate(scrollY.value,
19
- // FIXME: can improve by geting maxY value of header and sticky views
20
- [-1000, 0, 100000], [0, 0, -100000], 'clamp'), []);
21
- const headerStyle = useAnimatedStyle(() => {
22
- return {
23
- transform: [{
24
- translateY: headerTranslate.value
25
- }]
26
- };
27
- }, [headerHeight, headerTranslate]);
28
- const handleHeaderLayout = useCallback(_ref => {
29
- let {
30
- nativeEvent: {
31
- layout: {
32
- height
33
- }
34
- }
35
- } = _ref;
36
- handleHeaderContainerLayout(height);
37
- }, [handleHeaderContainerLayout]);
38
- return /*#__PURE__*/React.createElement(Animated.View, {
39
- onLayout: handleHeaderLayout,
40
- style: [styles.container, headerStyle],
41
- pointerEvents: "box-none"
42
- }, headers.map(item => item.children));
43
- }
44
- const styles = StyleSheet.create({
45
- container: {
46
- zIndex: 10,
47
- backgroundColor: 'white'
48
- }
49
- });
50
- //# sourceMappingURL=CollapsibleHeaderConsumer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useCallback","useInternalCollapsibleContext","useCollapsibleHeaderContext","Animated","interpolate","useAnimatedStyle","useDerivedValue","useCollapsibleContext","StyleSheet","CollapsibleHeaderConsumer","headers","handleHeaderContainerLayout","scrollY","headerHeight","headerTranslate","value","headerStyle","transform","translateY","handleHeaderLayout","_ref","nativeEvent","layout","height","createElement","View","onLayout","style","styles","container","pointerEvents","map","item","children","create","zIndex","backgroundColor"],"sourceRoot":"../../../../src","sources":["components/header/CollapsibleHeaderConsumer.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,OAAOC,6BAA6B,MAAM,2CAA2C;AACrF,OAAOC,2BAA2B,MAAM,yCAAyC;AACjF,OAAOC,QAAQ,IACbC,WAAW,EACXC,gBAAgB,EAChBC,eAAe,QACV,yBAAyB;AAChC,OAAOC,qBAAqB,MAAM,mCAAmC;AACrE,SAA4BC,UAAU,QAAQ,cAAc;AAE5D,eAAe,SAASC,yBAAyBA,CAAA,EAAG;EAClD,MAAM;IAAEC;EAAQ,CAAC,GAAGR,2BAA2B,CAAC,CAAC;EACjD,MAAM;IAAES;EAA4B,CAAC,GAAGV,6BAA6B,CAAC,CAAC;EACvE,MAAM;IAAEW,OAAO;IAAEC;EAAa,CAAC,GAAGN,qBAAqB,CAAC,CAAC;EAEzD,MAAMO,eAAe,GAAGR,eAAe,CACrC,MACEF,WAAW,CACTQ,OAAO,CAACG,KAAK;EACb;EACA,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EACf,OACF,CAAC,EACH,EACF,CAAC;EAED,MAAMC,WAAW,GAAGX,gBAAgB,CAAC,MAAM;IACzC,OAAO;MACLY,SAAS,EAAE,CAAC;QAAEC,UAAU,EAAEJ,eAAe,CAACC;MAAM,CAAC;IACnD,CAAC;EACH,CAAC,EAAE,CAACF,YAAY,EAAEC,eAAe,CAAC,CAAC;EAEnC,MAAMK,kBAAkB,GAAGnB,WAAW,CACpCoB,IAAA,IAIyB;IAAA,IAJxB;MACCC,WAAW,EAAE;QACXC,MAAM,EAAE;UAAEC;QAAO;MACnB;IACiB,CAAC,GAAAH,IAAA;IAClBT,2BAA2B,CAACY,MAAM,CAAC;EACrC,CAAC,EACD,CAACZ,2BAA2B,CAC9B,CAAC;EAED,oBACEZ,KAAA,CAAAyB,aAAA,CAACrB,QAAQ,CAACsB,IAAI;IACZC,QAAQ,EAAEP,kBAAmB;IAC7BQ,KAAK,EAAE,CAACC,MAAM,CAACC,SAAS,EAAEb,WAAW,CAAE;IACvCc,aAAa,EAAC;EAAU,GAEvBpB,OAAO,CAACqB,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,QAAQ,CACvB,CAAC;AAEpB;AAEA,MAAML,MAAM,GAAGpB,UAAU,CAAC0B,MAAM,CAAC;EAC/BL,SAAS,EAAE;IACTM,MAAM,EAAE,EAAE;IACVC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC"}
@@ -1,49 +0,0 @@
1
- /* eslint-disable no-shadow */
2
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
- import { CollapsibleHeaderContext } from '../../hooks/useCollapsibleHeaderContext';
4
- export default function CollapsibleHeaderProvider(_ref) {
5
- let {
6
- children
7
- } = _ref;
8
- const [headers, setHeaders] = useState([]);
9
- const mounted = useRef(false);
10
- useEffect(() => {
11
- mounted.current = true;
12
- return () => {
13
- mounted.current = false;
14
- };
15
- }, []);
16
- const mount = useCallback((key, children) => {
17
- setHeaders(prev => [...prev, {
18
- key,
19
- children
20
- }]);
21
- }, []);
22
- const unmount = useCallback(key => {
23
- setHeaders(prev => prev.filter(h => h.key !== key));
24
- }, []);
25
- const update = useCallback((key, children) => {
26
- if (!mounted.current) {
27
- return;
28
- }
29
- setHeaders(prev => prev.map(item => {
30
- if (item.key === key) {
31
- return {
32
- ...item,
33
- children
34
- };
35
- }
36
- return item;
37
- }));
38
- }, []);
39
- const context = useMemo(() => ({
40
- headers,
41
- mount,
42
- unmount,
43
- update
44
- }), [headers, mount, unmount, update]);
45
- return /*#__PURE__*/React.createElement(CollapsibleHeaderContext.Provider, {
46
- value: context
47
- }, children);
48
- }
49
- //# sourceMappingURL=CollapsibleHeaderProvider.js.map