@r0b0t3d/react-native-collapsible 1.4.3 → 1.5.0-alpha.0

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.
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = CollapsibleFlatList;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
10
+ var _flashList = require("@shopify/flash-list");
11
+ var _useAnimatedScroll = _interopRequireDefault(require("./useAnimatedScroll"));
12
+ var _useInternalCollapsibleContext = _interopRequireDefault(require("../../hooks/useInternalCollapsibleContext"));
13
+ var _AnimatedTopView = _interopRequireDefault(require("../header/AnimatedTopView"));
14
+ var _useCollapsibleContext = _interopRequireDefault(require("../../hooks/useCollapsibleContext"));
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ 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); }
17
+ 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; }
18
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } /* eslint-disable react-hooks/exhaustive-deps */
19
+ const AnimatedFlashList = _reactNativeReanimated.default.createAnimatedComponent(_flashList.FlashList);
20
+ function CollapsibleFlatList(_ref) {
21
+ let {
22
+ headerSnappable = true,
23
+ ...props
24
+ } = _ref;
25
+ const {
26
+ headerHeight
27
+ } = (0, _useCollapsibleContext.default)();
28
+ const {
29
+ contentMinHeight,
30
+ scrollViewRef,
31
+ fixedHeaderHeight
32
+ } = (0, _useInternalCollapsibleContext.default)();
33
+ const mounted = (0, _react.useRef)(true);
34
+ const contentHeight = (0, _react.useRef)(0);
35
+ const [internalContentMinHeight, setInternalContentMinHeight] = (0, _react.useState)(contentMinHeight.value);
36
+ const [internalProgressViewOffset, setInternalProgressViewOffset] = (0, _react.useState)(0);
37
+ (0, _react.useEffect)(() => {
38
+ return () => {
39
+ mounted.current = false;
40
+ };
41
+ }, []);
42
+ const scrollTo = (0, _react.useCallback)(function (yValue) {
43
+ var _scrollViewRef$curren;
44
+ let animated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
45
+ (_scrollViewRef$curren = scrollViewRef.current) === null || _scrollViewRef$curren === void 0 ? void 0 : _scrollViewRef$curren.scrollToOffset({
46
+ offset: yValue,
47
+ animated
48
+ });
49
+ }, []);
50
+ const scrollToIndex = (0, _react.useCallback)(params => {
51
+ var _scrollViewRef$curren2;
52
+ (_scrollViewRef$curren2 = scrollViewRef.current) === null || _scrollViewRef$curren2 === void 0 ? void 0 : _scrollViewRef$curren2.scrollToIndex(params);
53
+ }, []);
54
+ const scrollToLocation = (0, _react.useCallback)(() => {
55
+ console.warn('CollapsibleFlatList does not support scrollToLocation');
56
+ }, []);
57
+ const {
58
+ scrollHandler
59
+ } = (0, _useAnimatedScroll.default)({
60
+ headerSnappable,
61
+ scrollTo,
62
+ scrollToIndex,
63
+ scrollToLocation
64
+ });
65
+ const handleInternalContentHeight = (0, _react.useCallback)(value => {
66
+ if (mounted.current) {
67
+ setInternalContentMinHeight(value);
68
+ }
69
+ }, []);
70
+ const handleInternalProgressViewOffset = (0, _react.useCallback)(value => {
71
+ if (mounted.current) {
72
+ setInternalProgressViewOffset(value);
73
+ }
74
+ }, []);
75
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => {
76
+ return contentMinHeight.value;
77
+ }, (result, previous) => {
78
+ if (result !== previous) {
79
+ if (contentHeight.current < result && internalContentMinHeight !== result) {
80
+ (0, _reactNativeReanimated.runOnJS)(handleInternalContentHeight)(result);
81
+ }
82
+ }
83
+ });
84
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => {
85
+ return fixedHeaderHeight.value;
86
+ }, (result, previous) => {
87
+ if (result !== previous) {
88
+ (0, _reactNativeReanimated.runOnJS)(handleInternalProgressViewOffset)(result);
89
+ }
90
+ });
91
+ const contentContainerStyle = (0, _react.useMemo)(() => [styles.contentContainer, {
92
+ minHeight: internalContentMinHeight
93
+ }, props.contentContainerStyle], [props.contentContainerStyle, internalContentMinHeight]);
94
+ const handleContentSizeChange = (0, _react.useCallback)((_, height) => {
95
+ contentHeight.current = height;
96
+ }, []);
97
+ const handleScrollToIndexFailed = (0, _react.useCallback)(() => {}, []);
98
+ function renderListHeader() {
99
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, /*#__PURE__*/_react.default.createElement(_AnimatedTopView.default, {
100
+ height: headerHeight
101
+ }), props.ListHeaderComponent);
102
+ }
103
+ return /*#__PURE__*/_react.default.createElement(AnimatedFlashList, _extends({
104
+ ref: scrollViewRef,
105
+ keyboardDismissMode: "on-drag",
106
+ keyboardShouldPersistTaps: "handled",
107
+ scrollEventThrottle: 1,
108
+ onScrollToIndexFailed: handleScrollToIndexFailed
109
+ }, props, {
110
+ style: [styles.container, props.style]
111
+ //@ts-ignore
112
+ ,
113
+ contentContainerStyle: contentContainerStyle,
114
+ onScroll: scrollHandler,
115
+ ListHeaderComponent: renderListHeader(),
116
+ onContentSizeChange: handleContentSizeChange,
117
+ simultaneousHandlers: [],
118
+ progressViewOffset: internalProgressViewOffset
119
+ }));
120
+ }
121
+ const styles = _reactNative.StyleSheet.create({
122
+ container: {
123
+ ..._reactNative.StyleSheet.absoluteFillObject
124
+ },
125
+ contentContainer: {
126
+ flexGrow: 1
127
+ },
128
+ topView: {
129
+ position: 'absolute',
130
+ top: 0,
131
+ left: 0,
132
+ right: 0
133
+ }
134
+ });
135
+ //# sourceMappingURL=CollapsibleFlashList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_flashList","_useAnimatedScroll","_interopRequireDefault","_useInternalCollapsibleContext","_AnimatedTopView","_useCollapsibleContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","AnimatedFlashList","Animated","createAnimatedComponent","FlashList","CollapsibleFlatList","_ref","headerSnappable","props","headerHeight","useCollapsibleContext","contentMinHeight","scrollViewRef","fixedHeaderHeight","useInternalCollapsibleContext","mounted","useRef","contentHeight","internalContentMinHeight","setInternalContentMinHeight","useState","value","internalProgressViewOffset","setInternalProgressViewOffset","useEffect","current","scrollTo","useCallback","yValue","_scrollViewRef$curren","animated","undefined","scrollToOffset","offset","scrollToIndex","params","_scrollViewRef$curren2","scrollToLocation","console","warn","scrollHandler","useAnimatedScroll","handleInternalContentHeight","handleInternalProgressViewOffset","useAnimatedReaction","result","previous","runOnJS","contentContainerStyle","useMemo","styles","contentContainer","minHeight","handleContentSizeChange","_","height","handleScrollToIndexFailed","renderListHeader","createElement","View","ListHeaderComponent","ref","keyboardDismissMode","keyboardShouldPersistTaps","scrollEventThrottle","onScrollToIndexFailed","style","container","onScroll","onContentSizeChange","simultaneousHandlers","progressViewOffset","StyleSheet","create","absoluteFillObject","flexGrow","topView","position","top","left","right"],"sourceRoot":"../../../../src","sources":["components/scrollable/CollapsibleFlashList.tsx"],"mappings":"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"}
@@ -8,6 +8,7 @@ var _exportNames = {
8
8
  useCollapsibleContext: true,
9
9
  CollapsibleContainer: true,
10
10
  CollapsibleFlatList: true,
11
+ CollapsibleFlashList: true,
11
12
  CollapsibleScrollView: true,
12
13
  CollapsibleSectionList: true,
13
14
  CollapsibleHeaderContainer: true,
@@ -20,6 +21,12 @@ Object.defineProperty(exports, "CollapsibleContainer", {
20
21
  return _CollapsibleContainer.default;
21
22
  }
22
23
  });
24
+ Object.defineProperty(exports, "CollapsibleFlashList", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _CollapsibleFlashList.default;
28
+ }
29
+ });
23
30
  Object.defineProperty(exports, "CollapsibleFlatList", {
24
31
  enumerable: true,
25
32
  get: function () {
@@ -72,6 +79,7 @@ var _withCollapsibleContext = _interopRequireDefault(require("./withCollapsibleC
72
79
  var _useCollapsibleContext = _interopRequireDefault(require("./hooks/useCollapsibleContext"));
73
80
  var _CollapsibleContainer = _interopRequireDefault(require("./components/CollapsibleContainer"));
74
81
  var _CollapsibleFlatList = _interopRequireDefault(require("./components/scrollable/CollapsibleFlatList"));
82
+ var _CollapsibleFlashList = _interopRequireDefault(require("./components/scrollable/CollapsibleFlashList"));
75
83
  var _CollapsibleScrollView = _interopRequireDefault(require("./components/scrollable/CollapsibleScrollView"));
76
84
  var _CollapsibleSectionList = _interopRequireDefault(require("./components/scrollable/CollapsibleSectionList"));
77
85
  var _CollapsibleHeaderContainer = _interopRequireDefault(require("./components/header/CollapsibleHeaderContainer"));
@@ -1 +1 @@
1
- {"version":3,"names":["_withCollapsibleContext","_interopRequireDefault","require","_useCollapsibleContext","_CollapsibleContainer","_CollapsibleFlatList","_CollapsibleScrollView","_CollapsibleSectionList","_CollapsibleHeaderContainer","_StickyView","_CollapsibleView","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","set"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,qBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,oBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,sBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,uBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,2BAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,WAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,gBAAA,GAAAC,uBAAA,CAAAT,OAAA;AACAU,MAAA,CAAAC,IAAA,CAAAH,gBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,gBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,gBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAA6C,SAAAS,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,SAAAd,wBAAAkB,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,CAAAT,GAAA,CAAAM,GAAA,SAAAK,MAAA,WAAAC,qBAAA,GAAAvB,MAAA,CAAAS,cAAA,IAAAT,MAAA,CAAAwB,wBAAA,WAAArB,GAAA,IAAAc,GAAA,QAAAd,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAW,GAAA,EAAAd,GAAA,SAAAsB,IAAA,GAAAF,qBAAA,GAAAvB,MAAA,CAAAwB,wBAAA,CAAAP,GAAA,EAAAd,GAAA,cAAAsB,IAAA,KAAAA,IAAA,CAAAd,GAAA,IAAAc,IAAA,CAAAC,GAAA,KAAA1B,MAAA,CAAAS,cAAA,CAAAa,MAAA,EAAAnB,GAAA,EAAAsB,IAAA,YAAAH,MAAA,CAAAnB,GAAA,IAAAc,GAAA,CAAAd,GAAA,SAAAmB,MAAA,CAAAH,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAM,GAAA,CAAAT,GAAA,EAAAK,MAAA,YAAAA,MAAA;AAAA,SAAAjC,uBAAA4B,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA"}
1
+ {"version":3,"names":["_withCollapsibleContext","_interopRequireDefault","require","_useCollapsibleContext","_CollapsibleContainer","_CollapsibleFlatList","_CollapsibleFlashList","_CollapsibleScrollView","_CollapsibleSectionList","_CollapsibleHeaderContainer","_StickyView","_CollapsibleView","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","set"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,qBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,oBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,qBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,sBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,uBAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,2BAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,WAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,gBAAA,GAAAC,uBAAA,CAAAV,OAAA;AACAW,MAAA,CAAAC,IAAA,CAAAH,gBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,gBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,gBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAA6C,SAAAS,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,SAAAd,wBAAAkB,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,CAAAT,GAAA,CAAAM,GAAA,SAAAK,MAAA,WAAAC,qBAAA,GAAAvB,MAAA,CAAAS,cAAA,IAAAT,MAAA,CAAAwB,wBAAA,WAAArB,GAAA,IAAAc,GAAA,QAAAd,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAW,GAAA,EAAAd,GAAA,SAAAsB,IAAA,GAAAF,qBAAA,GAAAvB,MAAA,CAAAwB,wBAAA,CAAAP,GAAA,EAAAd,GAAA,cAAAsB,IAAA,KAAAA,IAAA,CAAAd,GAAA,IAAAc,IAAA,CAAAC,GAAA,KAAA1B,MAAA,CAAAS,cAAA,CAAAa,MAAA,EAAAnB,GAAA,EAAAsB,IAAA,YAAAH,MAAA,CAAAnB,GAAA,IAAAc,GAAA,CAAAd,GAAA,SAAAmB,MAAA,CAAAH,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAM,GAAA,CAAAT,GAAA,EAAAK,MAAA,YAAAA,MAAA;AAAA,SAAAlC,uBAAA6B,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA"}
@@ -0,0 +1,127 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ /* eslint-disable react-hooks/exhaustive-deps */
3
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { View, StyleSheet } from 'react-native';
5
+ import Animated, { runOnJS, useAnimatedReaction } from 'react-native-reanimated';
6
+ import { FlashList } from '@shopify/flash-list';
7
+ import useAnimatedScroll from './useAnimatedScroll';
8
+ import useInternalCollapsibleContext from '../../hooks/useInternalCollapsibleContext';
9
+ import AnimatedTopView from '../header/AnimatedTopView';
10
+ import useCollapsibleContext from '../../hooks/useCollapsibleContext';
11
+ const AnimatedFlashList = Animated.createAnimatedComponent(FlashList);
12
+ export default function CollapsibleFlatList(_ref) {
13
+ let {
14
+ headerSnappable = true,
15
+ ...props
16
+ } = _ref;
17
+ const {
18
+ headerHeight
19
+ } = useCollapsibleContext();
20
+ const {
21
+ contentMinHeight,
22
+ scrollViewRef,
23
+ fixedHeaderHeight
24
+ } = useInternalCollapsibleContext();
25
+ const mounted = useRef(true);
26
+ const contentHeight = useRef(0);
27
+ const [internalContentMinHeight, setInternalContentMinHeight] = useState(contentMinHeight.value);
28
+ const [internalProgressViewOffset, setInternalProgressViewOffset] = useState(0);
29
+ useEffect(() => {
30
+ return () => {
31
+ mounted.current = false;
32
+ };
33
+ }, []);
34
+ const scrollTo = useCallback(function (yValue) {
35
+ var _scrollViewRef$curren;
36
+ let animated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
37
+ (_scrollViewRef$curren = scrollViewRef.current) === null || _scrollViewRef$curren === void 0 ? void 0 : _scrollViewRef$curren.scrollToOffset({
38
+ offset: yValue,
39
+ animated
40
+ });
41
+ }, []);
42
+ const scrollToIndex = useCallback(params => {
43
+ var _scrollViewRef$curren2;
44
+ (_scrollViewRef$curren2 = scrollViewRef.current) === null || _scrollViewRef$curren2 === void 0 ? void 0 : _scrollViewRef$curren2.scrollToIndex(params);
45
+ }, []);
46
+ const scrollToLocation = useCallback(() => {
47
+ console.warn('CollapsibleFlatList does not support scrollToLocation');
48
+ }, []);
49
+ const {
50
+ scrollHandler
51
+ } = useAnimatedScroll({
52
+ headerSnappable,
53
+ scrollTo,
54
+ scrollToIndex,
55
+ scrollToLocation
56
+ });
57
+ const handleInternalContentHeight = useCallback(value => {
58
+ if (mounted.current) {
59
+ setInternalContentMinHeight(value);
60
+ }
61
+ }, []);
62
+ const handleInternalProgressViewOffset = useCallback(value => {
63
+ if (mounted.current) {
64
+ setInternalProgressViewOffset(value);
65
+ }
66
+ }, []);
67
+ useAnimatedReaction(() => {
68
+ return contentMinHeight.value;
69
+ }, (result, previous) => {
70
+ if (result !== previous) {
71
+ if (contentHeight.current < result && internalContentMinHeight !== result) {
72
+ runOnJS(handleInternalContentHeight)(result);
73
+ }
74
+ }
75
+ });
76
+ useAnimatedReaction(() => {
77
+ return fixedHeaderHeight.value;
78
+ }, (result, previous) => {
79
+ if (result !== previous) {
80
+ runOnJS(handleInternalProgressViewOffset)(result);
81
+ }
82
+ });
83
+ const contentContainerStyle = useMemo(() => [styles.contentContainer, {
84
+ minHeight: internalContentMinHeight
85
+ }, props.contentContainerStyle], [props.contentContainerStyle, internalContentMinHeight]);
86
+ const handleContentSizeChange = useCallback((_, height) => {
87
+ contentHeight.current = height;
88
+ }, []);
89
+ const handleScrollToIndexFailed = useCallback(() => {}, []);
90
+ function renderListHeader() {
91
+ return /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(AnimatedTopView, {
92
+ height: headerHeight
93
+ }), props.ListHeaderComponent);
94
+ }
95
+ return /*#__PURE__*/React.createElement(AnimatedFlashList, _extends({
96
+ ref: scrollViewRef,
97
+ keyboardDismissMode: "on-drag",
98
+ keyboardShouldPersistTaps: "handled",
99
+ scrollEventThrottle: 1,
100
+ onScrollToIndexFailed: handleScrollToIndexFailed
101
+ }, props, {
102
+ style: [styles.container, props.style]
103
+ //@ts-ignore
104
+ ,
105
+ contentContainerStyle: contentContainerStyle,
106
+ onScroll: scrollHandler,
107
+ ListHeaderComponent: renderListHeader(),
108
+ onContentSizeChange: handleContentSizeChange,
109
+ simultaneousHandlers: [],
110
+ progressViewOffset: internalProgressViewOffset
111
+ }));
112
+ }
113
+ const styles = StyleSheet.create({
114
+ container: {
115
+ ...StyleSheet.absoluteFillObject
116
+ },
117
+ contentContainer: {
118
+ flexGrow: 1
119
+ },
120
+ topView: {
121
+ position: 'absolute',
122
+ top: 0,
123
+ left: 0,
124
+ right: 0
125
+ }
126
+ });
127
+ //# sourceMappingURL=CollapsibleFlashList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","View","StyleSheet","Animated","runOnJS","useAnimatedReaction","FlashList","useAnimatedScroll","useInternalCollapsibleContext","AnimatedTopView","useCollapsibleContext","AnimatedFlashList","createAnimatedComponent","CollapsibleFlatList","_ref","headerSnappable","props","headerHeight","contentMinHeight","scrollViewRef","fixedHeaderHeight","mounted","contentHeight","internalContentMinHeight","setInternalContentMinHeight","value","internalProgressViewOffset","setInternalProgressViewOffset","current","scrollTo","yValue","_scrollViewRef$curren","animated","arguments","length","undefined","scrollToOffset","offset","scrollToIndex","params","_scrollViewRef$curren2","scrollToLocation","console","warn","scrollHandler","handleInternalContentHeight","handleInternalProgressViewOffset","result","previous","contentContainerStyle","styles","contentContainer","minHeight","handleContentSizeChange","_","height","handleScrollToIndexFailed","renderListHeader","createElement","ListHeaderComponent","_extends","ref","keyboardDismissMode","keyboardShouldPersistTaps","scrollEventThrottle","onScrollToIndexFailed","style","container","onScroll","onContentSizeChange","simultaneousHandlers","progressViewOffset","create","absoluteFillObject","flexGrow","topView","position","top","left","right"],"sourceRoot":"../../../../src","sources":["components/scrollable/CollapsibleFlashList.tsx"],"mappings":"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"}
@@ -2,6 +2,7 @@ export { default as withCollapsibleContext } from './withCollapsibleContext';
2
2
  export { default as useCollapsibleContext } from './hooks/useCollapsibleContext';
3
3
  export { default as CollapsibleContainer } from './components/CollapsibleContainer';
4
4
  export { default as CollapsibleFlatList } from './components/scrollable/CollapsibleFlatList';
5
+ export { default as CollapsibleFlashList } from './components/scrollable/CollapsibleFlashList';
5
6
  export { default as CollapsibleScrollView } from './components/scrollable/CollapsibleScrollView';
6
7
  export { default as CollapsibleSectionList } from './components/scrollable/CollapsibleSectionList';
7
8
  export { default as CollapsibleHeaderContainer } from './components/header/CollapsibleHeaderContainer';
@@ -1 +1 @@
1
- {"version":3,"names":["default","withCollapsibleContext","useCollapsibleContext","CollapsibleContainer","CollapsibleFlatList","CollapsibleScrollView","CollapsibleSectionList","CollapsibleHeaderContainer","StickyView","CollapsibleView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,OAAO,IAAIC,sBAAsB,QAAQ,0BAA0B;AAC5E,SAASD,OAAO,IAAIE,qBAAqB,QAAQ,+BAA+B;AAEhF,SAASF,OAAO,IAAIG,oBAAoB,QAAQ,mCAAmC;AACnF,SAASH,OAAO,IAAII,mBAAmB,QAAQ,6CAA6C;AAC5F,SAASJ,OAAO,IAAIK,qBAAqB,QAAQ,+CAA+C;AAChG,SAASL,OAAO,IAAIM,sBAAsB,QAAQ,gDAAgD;AAClG,SAASN,OAAO,IAAIO,0BAA0B,QAAQ,gDAAgD;AACtG,SAASP,OAAO,IAAIQ,UAAU,QAAQ,gCAAgC;AACtE,SAASR,OAAO,IAAIS,eAAe,QAAQ,8BAA8B;AACzE,cAAc,8BAA8B"}
1
+ {"version":3,"names":["default","withCollapsibleContext","useCollapsibleContext","CollapsibleContainer","CollapsibleFlatList","CollapsibleFlashList","CollapsibleScrollView","CollapsibleSectionList","CollapsibleHeaderContainer","StickyView","CollapsibleView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,OAAO,IAAIC,sBAAsB,QAAQ,0BAA0B;AAC5E,SAASD,OAAO,IAAIE,qBAAqB,QAAQ,+BAA+B;AAEhF,SAASF,OAAO,IAAIG,oBAAoB,QAAQ,mCAAmC;AACnF,SAASH,OAAO,IAAII,mBAAmB,QAAQ,6CAA6C;AAC5F,SAASJ,OAAO,IAAIK,oBAAoB,QAAQ,8CAA8C;AAC9F,SAASL,OAAO,IAAIM,qBAAqB,QAAQ,+CAA+C;AAChG,SAASN,OAAO,IAAIO,sBAAsB,QAAQ,gDAAgD;AAClG,SAASP,OAAO,IAAIQ,0BAA0B,QAAQ,gDAAgD;AACtG,SAASR,OAAO,IAAIS,UAAU,QAAQ,gCAAgC;AACtE,SAAST,OAAO,IAAIU,eAAe,QAAQ,8BAA8B;AACzE,cAAc,8BAA8B"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { FlatListProps } from 'react-native';
3
+ import type { CollapsibleProps } from '../../types';
4
+ type Props<Data> = Omit<FlatListProps<Data>, 'scrollEnabled'> & CollapsibleProps;
5
+ export default function CollapsibleFlatList<Data>({ headerSnappable, ...props }: Props<Data>): React.JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=CollapsibleFlashList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleFlashList.d.ts","sourceRoot":"","sources":["../../../../src/components/scrollable/CollapsibleFlashList.tsx"],"names":[],"mappings":"AACA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,aAAa,EAAoB,MAAM,cAAc,CAAC;AAQ/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMpD,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,GAC3D,gBAAgB,CAAC;AAEnB,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,IAAI,EAAE,EAChD,eAAsB,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,IAAI,CAAC,qBAyHb"}
@@ -2,6 +2,7 @@ export { default as withCollapsibleContext } from './withCollapsibleContext';
2
2
  export { default as useCollapsibleContext } from './hooks/useCollapsibleContext';
3
3
  export { default as CollapsibleContainer } from './components/CollapsibleContainer';
4
4
  export { default as CollapsibleFlatList } from './components/scrollable/CollapsibleFlatList';
5
+ export { default as CollapsibleFlashList } from './components/scrollable/CollapsibleFlashList';
5
6
  export { default as CollapsibleScrollView } from './components/scrollable/CollapsibleScrollView';
6
7
  export { default as CollapsibleSectionList } from './components/scrollable/CollapsibleSectionList';
7
8
  export { default as CollapsibleHeaderContainer } from './components/header/CollapsibleHeaderContainer';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACjG,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AACvG,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACjG,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AACvG,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,cAAc,8BAA8B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@r0b0t3d/react-native-collapsible",
3
- "version": "1.4.3",
3
+ "version": "1.5.0-alpha.0",
4
4
  "description": "Fully customizable collapsible views",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -55,6 +55,7 @@
55
55
  "@evilmartians/lefthook": "^1.2.2",
56
56
  "@react-native-community/eslint-config": "^3.0.2",
57
57
  "@release-it/conventional-changelog": "^5.0.0",
58
+ "@shopify/flash-list": "^1.6.1",
58
59
  "@types/jest": "^28.1.2",
59
60
  "@types/react": "~17.0.21",
60
61
  "@types/react-native": "0.70.0",
@@ -77,6 +78,7 @@
77
78
  "@types/react": "17.0.21"
78
79
  },
79
80
  "peerDependencies": {
81
+ "@shopify/flash-list": "*",
80
82
  "react": "*",
81
83
  "react-native": "*",
82
84
  "react-native-gesture-handler": "*",
@@ -0,0 +1,165 @@
1
+ /* eslint-disable react-hooks/exhaustive-deps */
2
+ import React, {
3
+ useCallback,
4
+ useEffect,
5
+ useMemo,
6
+ useRef,
7
+ useState,
8
+ } from 'react';
9
+ import { FlatListProps, View, StyleSheet } from 'react-native';
10
+ import Animated, {
11
+ runOnJS,
12
+ useAnimatedReaction,
13
+ } from 'react-native-reanimated';
14
+ import { FlashList } from '@shopify/flash-list';
15
+ import useAnimatedScroll from './useAnimatedScroll';
16
+ import useInternalCollapsibleContext from '../../hooks/useInternalCollapsibleContext';
17
+ import type { CollapsibleProps } from '../../types';
18
+ import AnimatedTopView from '../header/AnimatedTopView';
19
+ import useCollapsibleContext from '../../hooks/useCollapsibleContext';
20
+
21
+ const AnimatedFlashList = Animated.createAnimatedComponent(FlashList);
22
+
23
+ type Props<Data> = Omit<FlatListProps<Data>, 'scrollEnabled'> &
24
+ CollapsibleProps;
25
+
26
+ export default function CollapsibleFlatList<Data>({
27
+ headerSnappable = true,
28
+ ...props
29
+ }: Props<Data>) {
30
+ const { headerHeight } = useCollapsibleContext();
31
+ const { contentMinHeight, scrollViewRef, fixedHeaderHeight } =
32
+ useInternalCollapsibleContext();
33
+ const mounted = useRef(true);
34
+ const contentHeight = useRef(0);
35
+ const [internalContentMinHeight, setInternalContentMinHeight] = useState(
36
+ contentMinHeight.value
37
+ );
38
+ const [internalProgressViewOffset, setInternalProgressViewOffset] =
39
+ useState(0);
40
+
41
+ useEffect(() => {
42
+ return () => {
43
+ mounted.current = false;
44
+ };
45
+ }, []);
46
+
47
+ const scrollTo = useCallback((yValue: number, animated = true) => {
48
+ scrollViewRef.current?.scrollToOffset({
49
+ offset: yValue,
50
+ animated,
51
+ });
52
+ }, []);
53
+
54
+ const scrollToIndex = useCallback((params) => {
55
+ scrollViewRef.current?.scrollToIndex(params);
56
+ }, []);
57
+
58
+ const scrollToLocation = useCallback(() => {
59
+ console.warn('CollapsibleFlatList does not support scrollToLocation');
60
+ }, []);
61
+
62
+ const { scrollHandler } = useAnimatedScroll({
63
+ headerSnappable,
64
+ scrollTo,
65
+ scrollToIndex,
66
+ scrollToLocation,
67
+ });
68
+
69
+ const handleInternalContentHeight = useCallback((value: number) => {
70
+ if (mounted.current) {
71
+ setInternalContentMinHeight(value);
72
+ }
73
+ }, []);
74
+
75
+ const handleInternalProgressViewOffset = useCallback((value: number) => {
76
+ if (mounted.current) {
77
+ setInternalProgressViewOffset(value);
78
+ }
79
+ }, []);
80
+
81
+ useAnimatedReaction(
82
+ () => {
83
+ return contentMinHeight.value;
84
+ },
85
+ (result, previous) => {
86
+ if (result !== previous) {
87
+ if (
88
+ contentHeight.current < result &&
89
+ internalContentMinHeight !== result
90
+ ) {
91
+ runOnJS(handleInternalContentHeight)(result);
92
+ }
93
+ }
94
+ }
95
+ );
96
+
97
+ useAnimatedReaction(
98
+ () => {
99
+ return fixedHeaderHeight.value;
100
+ },
101
+ (result, previous) => {
102
+ if (result !== previous) {
103
+ runOnJS(handleInternalProgressViewOffset)(result);
104
+ }
105
+ }
106
+ );
107
+
108
+ const contentContainerStyle = useMemo(
109
+ () => [
110
+ styles.contentContainer,
111
+ { minHeight: internalContentMinHeight },
112
+ props.contentContainerStyle,
113
+ ],
114
+ [props.contentContainerStyle, internalContentMinHeight]
115
+ );
116
+
117
+ const handleContentSizeChange = useCallback((_, height) => {
118
+ contentHeight.current = height;
119
+ }, []);
120
+
121
+ const handleScrollToIndexFailed = useCallback(() => {}, []);
122
+
123
+ function renderListHeader() {
124
+ return (
125
+ <View>
126
+ <AnimatedTopView height={headerHeight} />
127
+ {props.ListHeaderComponent}
128
+ </View>
129
+ );
130
+ }
131
+
132
+ return (
133
+ <AnimatedFlashList
134
+ ref={scrollViewRef}
135
+ keyboardDismissMode="on-drag"
136
+ keyboardShouldPersistTaps="handled"
137
+ scrollEventThrottle={1}
138
+ onScrollToIndexFailed={handleScrollToIndexFailed}
139
+ {...props}
140
+ style={[styles.container, props.style]}
141
+ //@ts-ignore
142
+ contentContainerStyle={contentContainerStyle}
143
+ onScroll={scrollHandler}
144
+ ListHeaderComponent={renderListHeader()}
145
+ onContentSizeChange={handleContentSizeChange}
146
+ simultaneousHandlers={[]}
147
+ progressViewOffset={internalProgressViewOffset}
148
+ />
149
+ );
150
+ }
151
+
152
+ const styles = StyleSheet.create({
153
+ container: {
154
+ ...StyleSheet.absoluteFillObject,
155
+ },
156
+ contentContainer: {
157
+ flexGrow: 1,
158
+ },
159
+ topView: {
160
+ position: 'absolute',
161
+ top: 0,
162
+ left: 0,
163
+ right: 0,
164
+ },
165
+ });
package/src/index.tsx CHANGED
@@ -3,6 +3,7 @@ export { default as useCollapsibleContext } from './hooks/useCollapsibleContext'
3
3
 
4
4
  export { default as CollapsibleContainer } from './components/CollapsibleContainer';
5
5
  export { default as CollapsibleFlatList } from './components/scrollable/CollapsibleFlatList';
6
+ export { default as CollapsibleFlashList } from './components/scrollable/CollapsibleFlashList';
6
7
  export { default as CollapsibleScrollView } from './components/scrollable/CollapsibleScrollView';
7
8
  export { default as CollapsibleSectionList } from './components/scrollable/CollapsibleSectionList';
8
9
  export { default as CollapsibleHeaderContainer } from './components/header/CollapsibleHeaderContainer';