@lodev09/react-native-true-sheet 3.4.0-beta.1 → 3.4.0-beta.2
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/README.md +15 -2
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +30 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +3 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDialogObserver.kt +11 -18
- package/lib/module/mocks/index.js +78 -0
- package/lib/module/mocks/index.js.map +1 -0
- package/lib/module/mocks/navigation.js +85 -0
- package/lib/module/mocks/navigation.js.map +1 -0
- package/lib/module/mocks/reanimated.js +89 -0
- package/lib/module/mocks/reanimated.js.map +1 -0
- package/lib/typescript/src/mocks/index.d.ts +36 -0
- package/lib/typescript/src/mocks/index.d.ts.map +1 -0
- package/lib/typescript/src/mocks/navigation.d.ts +66 -0
- package/lib/typescript/src/mocks/navigation.d.ts.map +1 -0
- package/lib/typescript/src/mocks/reanimated.d.ts +46 -0
- package/lib/typescript/src/mocks/reanimated.d.ts.map +1 -0
- package/package.json +4 -3
- package/src/mocks/index.ts +80 -0
- package/src/mocks/navigation.ts +72 -0
- package/src/mocks/reanimated.ts +102 -0
- package/lib/module/__mocks__/index.js +0 -81
- package/lib/module/__mocks__/index.js.map +0 -1
- package/src/__mocks__/index.js +0 -63
package/README.md
CHANGED
|
@@ -91,10 +91,23 @@ export const App = () => {
|
|
|
91
91
|
|
|
92
92
|
## Testing
|
|
93
93
|
|
|
94
|
-
TrueSheet
|
|
94
|
+
TrueSheet exports mocks for easy testing:
|
|
95
95
|
|
|
96
96
|
```tsx
|
|
97
|
-
|
|
97
|
+
// Main component
|
|
98
|
+
jest.mock('@lodev09/react-native-true-sheet', () =>
|
|
99
|
+
require('@lodev09/react-native-true-sheet/mock')
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
// Navigation (if using)
|
|
103
|
+
jest.mock('@lodev09/react-native-true-sheet/navigation', () =>
|
|
104
|
+
require('@lodev09/react-native-true-sheet/navigation/mock')
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// Reanimated (if using)
|
|
108
|
+
jest.mock('@lodev09/react-native-true-sheet/reanimated', () =>
|
|
109
|
+
require('@lodev09/react-native-true-sheet/reanimated/mock')
|
|
110
|
+
);
|
|
98
111
|
```
|
|
99
112
|
|
|
100
113
|
All methods (`present`, `dismiss`, `resize`) are mocked as Jest functions, allowing you to test your components without native dependencies.
|
|
@@ -387,6 +387,36 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
387
387
|
viewController.positionFooter()
|
|
388
388
|
}
|
|
389
389
|
|
|
390
|
+
// ==================== Stack Translation ====================
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Updates this sheet's translation based on its direct child's position.
|
|
394
|
+
* Propagates additional translation to parent so it stays behind this sheet.
|
|
395
|
+
*/
|
|
396
|
+
fun updateTranslationForChild(childSheetTop: Int) {
|
|
397
|
+
if (!viewController.isDialogVisible || viewController.isExpanded) return
|
|
398
|
+
|
|
399
|
+
val mySheetTop = viewController.getExpectedSheetTop(viewController.currentDetentIndex)
|
|
400
|
+
val newTranslation = maxOf(0, childSheetTop - mySheetTop)
|
|
401
|
+
val additionalTranslation = newTranslation - viewController.currentTranslationY
|
|
402
|
+
|
|
403
|
+
viewController.translateDialog(newTranslation)
|
|
404
|
+
|
|
405
|
+
if (additionalTranslation > 0) {
|
|
406
|
+
TrueSheetDialogObserver.getParentSheet(this)?.addTranslation(additionalTranslation)
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Adds translation to this sheet and propagates to parent.
|
|
412
|
+
*/
|
|
413
|
+
private fun addTranslation(amount: Int) {
|
|
414
|
+
if (!viewController.isDialogVisible || viewController.isExpanded) return
|
|
415
|
+
|
|
416
|
+
viewController.translateDialog(viewController.currentTranslationY + amount)
|
|
417
|
+
TrueSheetDialogObserver.getParentSheet(this)?.addTranslation(amount)
|
|
418
|
+
}
|
|
419
|
+
|
|
390
420
|
companion object {
|
|
391
421
|
const val TAG_NAME = "TrueSheet"
|
|
392
422
|
}
|
|
@@ -475,6 +475,9 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
475
475
|
val currentSheetTop: Int
|
|
476
476
|
get() = bottomSheetView?.top ?: screenHeight
|
|
477
477
|
|
|
478
|
+
val currentTranslationY: Int
|
|
479
|
+
get() = bottomSheetView?.translationY?.toInt() ?: 0
|
|
480
|
+
|
|
478
481
|
fun getExpectedSheetTop(detentIndex: Int): Int {
|
|
479
482
|
if (detentIndex < 0 || detentIndex >= detents.size) return screenHeight
|
|
480
483
|
return realScreenHeight - getDetentHeight(detents[detentIndex])
|
|
@@ -21,7 +21,7 @@ object TrueSheetDialogObserver {
|
|
|
21
21
|
?.takeIf { it.viewController.isPresented && it.viewController.isDialogVisible }
|
|
22
22
|
|
|
23
23
|
val childSheetTop = sheetView.viewController.getExpectedSheetTop(detentIndex)
|
|
24
|
-
|
|
24
|
+
parentSheet?.updateTranslationForChild(childSheetTop)
|
|
25
25
|
|
|
26
26
|
if (!presentedSheetStack.contains(sheetView)) {
|
|
27
27
|
presentedSheetStack.add(sheetView)
|
|
@@ -55,13 +55,15 @@ object TrueSheetDialogObserver {
|
|
|
55
55
|
val index = presentedSheetStack.indexOf(sheetView)
|
|
56
56
|
if (index <= 0) return
|
|
57
57
|
|
|
58
|
+
val parentSheet = presentedSheetStack[index - 1]
|
|
59
|
+
|
|
58
60
|
// Post to ensure layout is complete before reading position
|
|
59
61
|
sheetView.viewController.post {
|
|
60
62
|
val childMinSheetTop = sheetView.viewController.getExpectedSheetTop(0)
|
|
61
63
|
val childCurrentSheetTop = sheetView.viewController.getExpectedSheetTop(sheetView.viewController.currentDetentIndex)
|
|
62
64
|
// Cap to minimum detent position
|
|
63
65
|
val childSheetTop = maxOf(childMinSheetTop, childCurrentSheetTop)
|
|
64
|
-
|
|
66
|
+
parentSheet.updateTranslationForChild(childSheetTop)
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
}
|
|
@@ -94,23 +96,14 @@ object TrueSheetDialogObserver {
|
|
|
94
96
|
}
|
|
95
97
|
|
|
96
98
|
/**
|
|
97
|
-
*
|
|
98
|
-
* @param childSheetTop The top position of the child sheet
|
|
99
|
-
* @param untilIndex If specified, only update sheets up to this index (exclusive)
|
|
99
|
+
* Gets the parent sheet of the given sheet, if any.
|
|
100
100
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (
|
|
106
|
-
|
|
107
|
-
val parentSheetTop = parentSheet.viewController.getExpectedSheetTop(parentSheet.viewController.currentDetentIndex)
|
|
108
|
-
if (parentSheetTop < childSheetTop) {
|
|
109
|
-
val translationY = childSheetTop - parentSheetTop
|
|
110
|
-
parentSheet.viewController.translateDialog(translationY)
|
|
111
|
-
} else {
|
|
112
|
-
parentSheet.viewController.translateDialog(0)
|
|
113
|
-
}
|
|
101
|
+
@JvmStatic
|
|
102
|
+
fun getParentSheet(sheetView: TrueSheetView): TrueSheetView? {
|
|
103
|
+
synchronized(presentedSheetStack) {
|
|
104
|
+
val index = presentedSheetStack.indexOf(sheetView)
|
|
105
|
+
if (index <= 0) return null
|
|
106
|
+
return presentedSheetStack[index - 1]
|
|
114
107
|
}
|
|
115
108
|
}
|
|
116
109
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { createElement, isValidElement } from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
/**
|
|
6
|
+
* Mock TrueSheet component for testing.
|
|
7
|
+
* Import from '@lodev09/react-native-true-sheet/mock' in your test setup.
|
|
8
|
+
*/
|
|
9
|
+
export class TrueSheet extends React.Component {
|
|
10
|
+
static instances = {};
|
|
11
|
+
static dismiss = jest.fn((_name, _animated) => Promise.resolve());
|
|
12
|
+
static present = jest.fn((_name, _index, _animated) => Promise.resolve());
|
|
13
|
+
static resize = jest.fn((_name, _index) => Promise.resolve());
|
|
14
|
+
dismiss = jest.fn(_animated => Promise.resolve());
|
|
15
|
+
present = jest.fn((_index, _animated) => Promise.resolve());
|
|
16
|
+
resize = jest.fn(_index => Promise.resolve());
|
|
17
|
+
componentDidMount() {
|
|
18
|
+
const {
|
|
19
|
+
name
|
|
20
|
+
} = this.props;
|
|
21
|
+
if (name) {
|
|
22
|
+
TrueSheet.instances[name] = this;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
componentWillUnmount() {
|
|
26
|
+
const {
|
|
27
|
+
name
|
|
28
|
+
} = this.props;
|
|
29
|
+
if (name) {
|
|
30
|
+
delete TrueSheet.instances[name];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
renderHeader() {
|
|
34
|
+
const {
|
|
35
|
+
header
|
|
36
|
+
} = this.props;
|
|
37
|
+
if (!header) return null;
|
|
38
|
+
return /*#__PURE__*/isValidElement(header) ? header : /*#__PURE__*/createElement(header);
|
|
39
|
+
}
|
|
40
|
+
renderFooter() {
|
|
41
|
+
const {
|
|
42
|
+
footer
|
|
43
|
+
} = this.props;
|
|
44
|
+
if (!footer) return null;
|
|
45
|
+
return /*#__PURE__*/isValidElement(footer) ? footer : /*#__PURE__*/createElement(footer);
|
|
46
|
+
}
|
|
47
|
+
render() {
|
|
48
|
+
const {
|
|
49
|
+
children,
|
|
50
|
+
style
|
|
51
|
+
} = this.props;
|
|
52
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
53
|
+
style
|
|
54
|
+
}, this.renderHeader(), children, this.renderFooter());
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Mock TrueSheetProvider for testing.
|
|
60
|
+
*/
|
|
61
|
+
export function TrueSheetProvider({
|
|
62
|
+
children
|
|
63
|
+
}) {
|
|
64
|
+
return children;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Mock useTrueSheet hook for testing.
|
|
69
|
+
*/
|
|
70
|
+
export function useTrueSheet() {
|
|
71
|
+
return {
|
|
72
|
+
present: TrueSheet.present,
|
|
73
|
+
dismiss: TrueSheet.dismiss,
|
|
74
|
+
resize: TrueSheet.resize
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export * from "../TrueSheet.types.js";
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createElement","isValidElement","View","TrueSheet","Component","instances","dismiss","jest","fn","_name","_animated","Promise","resolve","present","_index","resize","componentDidMount","name","props","componentWillUnmount","renderHeader","header","renderFooter","footer","render","children","style","TrueSheetProvider","useTrueSheet"],"sourceRoot":"../../../src","sources":["mocks/index.ts"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,cAAc,QAAwB,OAAO;AAC5E,SAASC,IAAI,QAAQ,cAAc;AAQnC;AACA;AACA;AACA;AACA,OAAO,MAAMC,SAAS,SACZJ,KAAK,CAACK,SAAS,CAEzB;EACE,OAAOC,SAAS,GAA8B,CAAC,CAAC;EAEhD,OAAOC,OAAO,GAAGC,IAAI,CAACC,EAAE,CAAC,CAACC,KAAa,EAAEC,SAAmB,KAAKC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EACnF,OAAOC,OAAO,GAAGN,IAAI,CAACC,EAAE,CAAC,CAACC,KAAa,EAAEK,MAAe,EAAEJ,SAAmB,KAC3EC,OAAO,CAACC,OAAO,CAAC,CAClB,CAAC;EACD,OAAOG,MAAM,GAAGR,IAAI,CAACC,EAAE,CAAC,CAACC,KAAa,EAAEK,MAAc,KAAKH,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EAE7EN,OAAO,GAAGC,IAAI,CAACC,EAAE,CAAEE,SAAmB,IAAKC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EAC7DC,OAAO,GAAGN,IAAI,CAACC,EAAE,CAAC,CAACM,MAAe,EAAEJ,SAAmB,KAAKC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EAC9EG,MAAM,GAAGR,IAAI,CAACC,EAAE,CAAEM,MAAc,IAAKH,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EAEvDI,iBAAiBA,CAAA,EAAG;IAClB,MAAM;MAAEC;IAAK,CAAC,GAAG,IAAI,CAACC,KAAK;IAC3B,IAAID,IAAI,EAAE;MACRd,SAAS,CAACE,SAAS,CAACY,IAAI,CAAC,GAAG,IAAI;IAClC;EACF;EAEAE,oBAAoBA,CAAA,EAAG;IACrB,MAAM;MAAEF;IAAK,CAAC,GAAG,IAAI,CAACC,KAAK;IAC3B,IAAID,IAAI,EAAE;MACR,OAAOd,SAAS,CAACE,SAAS,CAACY,IAAI,CAAC;IAClC;EACF;EAEQG,YAAYA,CAAA,EAAc;IAChC,MAAM;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACH,KAAK;IAC7B,IAAI,CAACG,MAAM,EAAE,OAAO,IAAI;IACxB,OAAO,aAAApB,cAAc,CAACoB,MAAM,CAAC,GAAGA,MAAM,gBAAGrB,aAAa,CAACqB,MAAM,CAAC;EAChE;EAEQC,YAAYA,CAAA,EAAc;IAChC,MAAM;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACL,KAAK;IAC7B,IAAI,CAACK,MAAM,EAAE,OAAO,IAAI;IACxB,OAAO,aAAAtB,cAAc,CAACsB,MAAM,CAAC,GAAGA,MAAM,gBAAGvB,aAAa,CAACuB,MAAM,CAAC;EAChE;EAEAC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,QAAQ;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACR,KAAK;IACtC,oBAAOnB,KAAK,CAACC,aAAa,CAACE,IAAI,EAAE;MAAEwB;IAAM,CAAC,EAAE,IAAI,CAACN,YAAY,CAAC,CAAC,EAAEK,QAAQ,EAAE,IAAI,CAACH,YAAY,CAAC,CAAC,CAAC;EACjG;AACF;;AAEA;AACA;AACA;AACA,OAAO,SAASK,iBAAiBA,CAAC;EAAEF;AAAwC,CAAC,EAAE;EAC7E,OAAOA,QAAQ;AACjB;;AAEA;AACA;AACA;AACA,OAAO,SAASG,YAAYA,CAAA,EAA4B;EACtD,OAAO;IACLf,OAAO,EAAEV,SAAS,CAACU,OAAO;IAC1BP,OAAO,EAAEH,SAAS,CAACG,OAAO;IAC1BS,MAAM,EAAEZ,SAAS,CAACY;EACpB,CAAC;AACH;AAEA,cAAc,uBAAoB","ignoreList":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Mock createTrueSheetNavigator for testing.
|
|
5
|
+
* Import from '@lodev09/react-native-true-sheet/navigation/mock' in your test setup.
|
|
6
|
+
*/
|
|
7
|
+
export const createTrueSheetNavigator = jest.fn(() => ({
|
|
8
|
+
Navigator: jest.fn(({
|
|
9
|
+
children
|
|
10
|
+
}) => children),
|
|
11
|
+
Screen: jest.fn(() => null),
|
|
12
|
+
Group: jest.fn(() => null)
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Mock TrueSheetActions for testing.
|
|
17
|
+
*/
|
|
18
|
+
export const TrueSheetActions = {
|
|
19
|
+
push: jest.fn((name, params) => ({
|
|
20
|
+
type: 'PUSH',
|
|
21
|
+
payload: {
|
|
22
|
+
name,
|
|
23
|
+
params
|
|
24
|
+
}
|
|
25
|
+
})),
|
|
26
|
+
pop: jest.fn(count => ({
|
|
27
|
+
type: 'POP',
|
|
28
|
+
payload: {
|
|
29
|
+
count
|
|
30
|
+
}
|
|
31
|
+
})),
|
|
32
|
+
popTo: jest.fn((name, params) => ({
|
|
33
|
+
type: 'POP_TO',
|
|
34
|
+
payload: {
|
|
35
|
+
name,
|
|
36
|
+
params
|
|
37
|
+
}
|
|
38
|
+
})),
|
|
39
|
+
popToTop: jest.fn(() => ({
|
|
40
|
+
type: 'POP_TO_TOP'
|
|
41
|
+
})),
|
|
42
|
+
replace: jest.fn((name, params) => ({
|
|
43
|
+
type: 'REPLACE',
|
|
44
|
+
payload: {
|
|
45
|
+
name,
|
|
46
|
+
params
|
|
47
|
+
}
|
|
48
|
+
})),
|
|
49
|
+
resize: jest.fn(index => ({
|
|
50
|
+
type: 'RESIZE',
|
|
51
|
+
index
|
|
52
|
+
})),
|
|
53
|
+
dismiss: jest.fn(() => ({
|
|
54
|
+
type: 'DISMISS'
|
|
55
|
+
})),
|
|
56
|
+
remove: jest.fn(() => ({
|
|
57
|
+
type: 'REMOVE'
|
|
58
|
+
}))
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Mock useTrueSheetNavigation hook for testing.
|
|
63
|
+
*/
|
|
64
|
+
export const useTrueSheetNavigation = jest.fn(() => ({
|
|
65
|
+
navigate: jest.fn(),
|
|
66
|
+
goBack: jest.fn(),
|
|
67
|
+
reset: jest.fn(),
|
|
68
|
+
setParams: jest.fn(),
|
|
69
|
+
dispatch: jest.fn(),
|
|
70
|
+
isFocused: jest.fn(() => true),
|
|
71
|
+
canGoBack: jest.fn(() => true),
|
|
72
|
+
getId: jest.fn(),
|
|
73
|
+
getParent: jest.fn(),
|
|
74
|
+
getState: jest.fn(),
|
|
75
|
+
addListener: jest.fn(() => jest.fn()),
|
|
76
|
+
removeListener: jest.fn(),
|
|
77
|
+
setOptions: jest.fn(),
|
|
78
|
+
push: jest.fn(),
|
|
79
|
+
pop: jest.fn(),
|
|
80
|
+
popTo: jest.fn(),
|
|
81
|
+
popToTop: jest.fn(),
|
|
82
|
+
replace: jest.fn(),
|
|
83
|
+
resize: jest.fn()
|
|
84
|
+
}));
|
|
85
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createTrueSheetNavigator","jest","fn","Navigator","children","Screen","Group","TrueSheetActions","push","name","params","type","payload","pop","count","popTo","popToTop","replace","resize","index","dismiss","remove","useTrueSheetNavigation","navigate","goBack","reset","setParams","dispatch","isFocused","canGoBack","getId","getParent","getState","addListener","removeListener","setOptions"],"sourceRoot":"../../../src","sources":["mocks/navigation.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { createElement, isValidElement } from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
const createMockSharedValue = initialValue => ({
|
|
6
|
+
value: initialValue,
|
|
7
|
+
get: () => initialValue,
|
|
8
|
+
set: () => {},
|
|
9
|
+
addListener: () => () => {},
|
|
10
|
+
removeListener: () => {},
|
|
11
|
+
modify: () => {}
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Mock ReanimatedTrueSheet component for testing.
|
|
16
|
+
* Import from '@lodev09/react-native-true-sheet/reanimated/mock' in your test setup.
|
|
17
|
+
*/
|
|
18
|
+
export class ReanimatedTrueSheet extends React.Component {
|
|
19
|
+
static instances = {};
|
|
20
|
+
static dismiss = jest.fn((_name, _animated) => Promise.resolve());
|
|
21
|
+
static present = jest.fn((_name, _index, _animated) => Promise.resolve());
|
|
22
|
+
static resize = jest.fn((_name, _index) => Promise.resolve());
|
|
23
|
+
dismiss = jest.fn(_animated => Promise.resolve());
|
|
24
|
+
present = jest.fn((_index, _animated) => Promise.resolve());
|
|
25
|
+
resize = jest.fn(_index => Promise.resolve());
|
|
26
|
+
componentDidMount() {
|
|
27
|
+
const {
|
|
28
|
+
name
|
|
29
|
+
} = this.props;
|
|
30
|
+
if (name) {
|
|
31
|
+
ReanimatedTrueSheet.instances[name] = this;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
componentWillUnmount() {
|
|
35
|
+
const {
|
|
36
|
+
name
|
|
37
|
+
} = this.props;
|
|
38
|
+
if (name) {
|
|
39
|
+
delete ReanimatedTrueSheet.instances[name];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
renderHeader() {
|
|
43
|
+
const {
|
|
44
|
+
header
|
|
45
|
+
} = this.props;
|
|
46
|
+
if (!header) return null;
|
|
47
|
+
return /*#__PURE__*/isValidElement(header) ? header : /*#__PURE__*/createElement(header);
|
|
48
|
+
}
|
|
49
|
+
renderFooter() {
|
|
50
|
+
const {
|
|
51
|
+
footer
|
|
52
|
+
} = this.props;
|
|
53
|
+
if (!footer) return null;
|
|
54
|
+
return /*#__PURE__*/isValidElement(footer) ? footer : /*#__PURE__*/createElement(footer);
|
|
55
|
+
}
|
|
56
|
+
render() {
|
|
57
|
+
const {
|
|
58
|
+
children,
|
|
59
|
+
style
|
|
60
|
+
} = this.props;
|
|
61
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
62
|
+
style
|
|
63
|
+
}, this.renderHeader(), children, this.renderFooter());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Mock ReanimatedTrueSheetProvider for testing.
|
|
69
|
+
*/
|
|
70
|
+
export function ReanimatedTrueSheetProvider({
|
|
71
|
+
children
|
|
72
|
+
}) {
|
|
73
|
+
return children;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Mock useReanimatedTrueSheet hook for testing.
|
|
78
|
+
*/
|
|
79
|
+
export const useReanimatedTrueSheet = jest.fn(() => ({
|
|
80
|
+
animatedPosition: createMockSharedValue(0),
|
|
81
|
+
animatedIndex: createMockSharedValue(-1),
|
|
82
|
+
animatedDetent: createMockSharedValue(0)
|
|
83
|
+
}));
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Mock useReanimatedPositionChangeHandler hook for testing.
|
|
87
|
+
*/
|
|
88
|
+
export const useReanimatedPositionChangeHandler = jest.fn((_handler, _dependencies) => jest.fn());
|
|
89
|
+
//# sourceMappingURL=reanimated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createElement","isValidElement","View","createMockSharedValue","initialValue","value","get","set","addListener","removeListener","modify","ReanimatedTrueSheet","Component","instances","dismiss","jest","fn","_name","_animated","Promise","resolve","present","_index","resize","componentDidMount","name","props","componentWillUnmount","renderHeader","header","renderFooter","footer","render","children","style","ReanimatedTrueSheetProvider","useReanimatedTrueSheet","animatedPosition","animatedIndex","animatedDetent","useReanimatedPositionChangeHandler","_handler","_dependencies"],"sourceRoot":"../../../src","sources":["mocks/reanimated.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import type { TrueSheetProps, TrueSheetRef, TrueSheetContextMethods } from '../TrueSheet.types';
|
|
4
|
+
interface TrueSheetState {
|
|
5
|
+
shouldRenderNativeView: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Mock TrueSheet component for testing.
|
|
9
|
+
* Import from '@lodev09/react-native-true-sheet/mock' in your test setup.
|
|
10
|
+
*/
|
|
11
|
+
export declare class TrueSheet extends React.Component<TrueSheetProps, TrueSheetState> implements TrueSheetRef {
|
|
12
|
+
static instances: Record<string, TrueSheet>;
|
|
13
|
+
static dismiss: jest.Mock<Promise<void>, [_name: string, _animated?: boolean | undefined], any>;
|
|
14
|
+
static present: jest.Mock<Promise<void>, [_name: string, _index?: number | undefined, _animated?: boolean | undefined], any>;
|
|
15
|
+
static resize: jest.Mock<Promise<void>, [_name: string, _index: number], any>;
|
|
16
|
+
dismiss: jest.Mock<Promise<void>, [_animated?: boolean | undefined], any>;
|
|
17
|
+
present: jest.Mock<Promise<void>, [_index?: number | undefined, _animated?: boolean | undefined], any>;
|
|
18
|
+
resize: jest.Mock<Promise<void>, [_index: number], any>;
|
|
19
|
+
componentDidMount(): void;
|
|
20
|
+
componentWillUnmount(): void;
|
|
21
|
+
private renderHeader;
|
|
22
|
+
private renderFooter;
|
|
23
|
+
render(): React.CElement<import("react-native").ViewProps, View>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Mock TrueSheetProvider for testing.
|
|
27
|
+
*/
|
|
28
|
+
export declare function TrueSheetProvider({ children }: {
|
|
29
|
+
children: React.ReactNode;
|
|
30
|
+
}): React.ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Mock useTrueSheet hook for testing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function useTrueSheet(): TrueSheetContextMethods;
|
|
35
|
+
export * from '../TrueSheet.types';
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mocks/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEhG,UAAU,cAAc;IACtB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,SACX,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,CACtD,YAAW,YAAY;IAEvB,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAM;IAEjD,MAAM,CAAC,OAAO,kFAAsE;IACpF,MAAM,CAAC,OAAO,+GAEZ;IACF,MAAM,CAAC,MAAM,iEAAiE;IAE9E,OAAO,mEAAuD;IAC9D,OAAO,gGAAwE;IAC/E,MAAM,kDAAkD;IAExD,iBAAiB;IAOjB,oBAAoB;IAOpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAMpB,MAAM;CAIP;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,mBAE5E;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,uBAAuB,CAMtD;AAED,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ParamListBase } from '@react-navigation/native';
|
|
2
|
+
import type { TrueSheetNavigationProp } from '../navigation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Mock createTrueSheetNavigator for testing.
|
|
5
|
+
* Import from '@lodev09/react-native-true-sheet/navigation/mock' in your test setup.
|
|
6
|
+
*/
|
|
7
|
+
export declare const createTrueSheetNavigator: jest.Mock<{
|
|
8
|
+
Navigator: jest.Mock<import("react").ReactNode, [{
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}], any>;
|
|
11
|
+
Screen: jest.Mock<null, [], any>;
|
|
12
|
+
Group: jest.Mock<null, [], any>;
|
|
13
|
+
}, [], any>;
|
|
14
|
+
/**
|
|
15
|
+
* Mock TrueSheetActions for testing.
|
|
16
|
+
*/
|
|
17
|
+
export declare const TrueSheetActions: {
|
|
18
|
+
push: jest.Mock<{
|
|
19
|
+
type: string;
|
|
20
|
+
payload: {
|
|
21
|
+
name: string;
|
|
22
|
+
params: object | undefined;
|
|
23
|
+
};
|
|
24
|
+
}, [name: string, params?: object | undefined], any>;
|
|
25
|
+
pop: jest.Mock<{
|
|
26
|
+
type: string;
|
|
27
|
+
payload: {
|
|
28
|
+
count: number | undefined;
|
|
29
|
+
};
|
|
30
|
+
}, [count?: number | undefined], any>;
|
|
31
|
+
popTo: jest.Mock<{
|
|
32
|
+
type: string;
|
|
33
|
+
payload: {
|
|
34
|
+
name: string;
|
|
35
|
+
params: object | undefined;
|
|
36
|
+
};
|
|
37
|
+
}, [name: string, params?: object | undefined], any>;
|
|
38
|
+
popToTop: jest.Mock<{
|
|
39
|
+
type: string;
|
|
40
|
+
}, [], any>;
|
|
41
|
+
replace: jest.Mock<{
|
|
42
|
+
type: string;
|
|
43
|
+
payload: {
|
|
44
|
+
name: string;
|
|
45
|
+
params: object | undefined;
|
|
46
|
+
};
|
|
47
|
+
}, [name: string, params?: object | undefined], any>;
|
|
48
|
+
resize: jest.Mock<{
|
|
49
|
+
type: string;
|
|
50
|
+
index: number;
|
|
51
|
+
}, [index: number], any>;
|
|
52
|
+
dismiss: jest.Mock<{
|
|
53
|
+
type: string;
|
|
54
|
+
}, [], any>;
|
|
55
|
+
remove: jest.Mock<{
|
|
56
|
+
type: string;
|
|
57
|
+
}, [], any>;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Mock useTrueSheetNavigation hook for testing.
|
|
61
|
+
*/
|
|
62
|
+
export declare const useTrueSheetNavigation: jest.Mock<TrueSheetNavigationProp<ParamListBase>, [], any>;
|
|
63
|
+
export type { TrueSheetActionType } from '../navigation/TrueSheetRouter';
|
|
64
|
+
export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
65
|
+
export type { TrueSheetNavigationEventMap, TrueSheetNavigationHelpers, TrueSheetNavigationOptions, TrueSheetNavigationProp, TrueSheetNavigationState, TrueSheetScreenProps, } from '../navigation/types';
|
|
66
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../src/mocks/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;kBACW,KAAK,CAAC,SAAS;;;;WAG5D,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAe5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,4DAuBlC,CAAC;AAEF,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC7F,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import type { SharedValue } from 'react-native-reanimated';
|
|
4
|
+
import type { TrueSheetProps, TrueSheetRef, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
5
|
+
interface TrueSheetState {
|
|
6
|
+
shouldRenderNativeView: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface MockReanimatedTrueSheetContextValue {
|
|
9
|
+
animatedPosition: SharedValue<number>;
|
|
10
|
+
animatedIndex: SharedValue<number>;
|
|
11
|
+
animatedDetent: SharedValue<number>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Mock ReanimatedTrueSheet component for testing.
|
|
15
|
+
* Import from '@lodev09/react-native-true-sheet/reanimated/mock' in your test setup.
|
|
16
|
+
*/
|
|
17
|
+
export declare class ReanimatedTrueSheet extends React.Component<TrueSheetProps, TrueSheetState> implements TrueSheetRef {
|
|
18
|
+
static instances: Record<string, ReanimatedTrueSheet>;
|
|
19
|
+
static dismiss: jest.Mock<Promise<void>, [_name: string, _animated?: boolean | undefined], any>;
|
|
20
|
+
static present: jest.Mock<Promise<void>, [_name: string, _index?: number | undefined, _animated?: boolean | undefined], any>;
|
|
21
|
+
static resize: jest.Mock<Promise<void>, [_name: string, _index: number], any>;
|
|
22
|
+
dismiss: jest.Mock<Promise<void>, [_animated?: boolean | undefined], any>;
|
|
23
|
+
present: jest.Mock<Promise<void>, [_index?: number | undefined, _animated?: boolean | undefined], any>;
|
|
24
|
+
resize: jest.Mock<Promise<void>, [_index: number], any>;
|
|
25
|
+
componentDidMount(): void;
|
|
26
|
+
componentWillUnmount(): void;
|
|
27
|
+
private renderHeader;
|
|
28
|
+
private renderFooter;
|
|
29
|
+
render(): React.CElement<import("react-native").ViewProps, View>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Mock ReanimatedTrueSheetProvider for testing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function ReanimatedTrueSheetProvider({ children }: {
|
|
35
|
+
children: React.ReactNode;
|
|
36
|
+
}): React.ReactNode;
|
|
37
|
+
/**
|
|
38
|
+
* Mock useReanimatedTrueSheet hook for testing.
|
|
39
|
+
*/
|
|
40
|
+
export declare const useReanimatedTrueSheet: jest.Mock<MockReanimatedTrueSheetContextValue, [], any>;
|
|
41
|
+
/**
|
|
42
|
+
* Mock useReanimatedPositionChangeHandler hook for testing.
|
|
43
|
+
*/
|
|
44
|
+
export declare const useReanimatedPositionChangeHandler: jest.Mock<jest.Mock<any, any, any>, [_handler: (payload: PositionChangeEventPayload) => void, _dependencies?: unknown[] | undefined], any>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=reanimated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reanimated.d.ts","sourceRoot":"","sources":["../../../../src/mocks/reanimated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEnG,UAAU,cAAc;IACtB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,UAAU,mCAAmC;IAC3C,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAYD;;;GAGG;AACH,qBAAa,mBACX,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,CACtD,YAAW,YAAY;IAEvB,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAM;IAE3D,MAAM,CAAC,OAAO,kFAAsE;IACpF,MAAM,CAAC,OAAO,+GAEZ;IACF,MAAM,CAAC,MAAM,iEAAiE;IAE9E,OAAO,mEAAuD;IAC9D,OAAO,gGAAwE;IAC/E,MAAM,kDAAkD;IAExD,iBAAiB;IAOjB,oBAAoB;IAOpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAMpB,MAAM;CAIP;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,mBAEtF;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,yDAMlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,2DACxB,0BAA0B,KAAK,IAAI,8CACzD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodev09/react-native-true-sheet",
|
|
3
|
-
"version": "3.4.0-beta.
|
|
3
|
+
"version": "3.4.0-beta.2",
|
|
4
4
|
"description": "The true native bottom sheet experience for your React Native Apps.",
|
|
5
5
|
"source": "./src/index.ts",
|
|
6
6
|
"main": "./lib/module/index.js",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"types": "./lib/typescript/src/index.d.ts",
|
|
12
12
|
"default": "./lib/module/index.js"
|
|
13
13
|
},
|
|
14
|
+
"./mock": "./lib/module/mocks/index.js",
|
|
15
|
+
"./navigation/mock": "./lib/module/mocks/navigation.js",
|
|
16
|
+
"./reanimated/mock": "./lib/module/mocks/reanimated.js",
|
|
14
17
|
"./reanimated": {
|
|
15
18
|
"source": "./src/reanimated/index.ts",
|
|
16
19
|
"types": "./lib/typescript/src/reanimated/index.d.ts",
|
|
@@ -164,7 +167,6 @@
|
|
|
164
167
|
],
|
|
165
168
|
"testPathIgnorePatterns": [
|
|
166
169
|
"/node_modules/",
|
|
167
|
-
"<rootDir>/src/__mocks__/",
|
|
168
170
|
"<rootDir>/example/"
|
|
169
171
|
]
|
|
170
172
|
},
|
|
@@ -214,7 +216,6 @@
|
|
|
214
216
|
"react-native-builder-bob": {
|
|
215
217
|
"source": "src",
|
|
216
218
|
"output": "lib",
|
|
217
|
-
"exclude": "**/{__tests__,__fixtures__}/**",
|
|
218
219
|
"targets": [
|
|
219
220
|
[
|
|
220
221
|
"module",
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import React, { createElement, isValidElement, type ReactNode } from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import type { TrueSheetProps, TrueSheetRef, TrueSheetContextMethods } from '../TrueSheet.types';
|
|
5
|
+
|
|
6
|
+
interface TrueSheetState {
|
|
7
|
+
shouldRenderNativeView: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Mock TrueSheet component for testing.
|
|
12
|
+
* Import from '@lodev09/react-native-true-sheet/mock' in your test setup.
|
|
13
|
+
*/
|
|
14
|
+
export class TrueSheet
|
|
15
|
+
extends React.Component<TrueSheetProps, TrueSheetState>
|
|
16
|
+
implements TrueSheetRef
|
|
17
|
+
{
|
|
18
|
+
static instances: Record<string, TrueSheet> = {};
|
|
19
|
+
|
|
20
|
+
static dismiss = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
|
|
21
|
+
static present = jest.fn((_name: string, _index?: number, _animated?: boolean) =>
|
|
22
|
+
Promise.resolve()
|
|
23
|
+
);
|
|
24
|
+
static resize = jest.fn((_name: string, _index: number) => Promise.resolve());
|
|
25
|
+
|
|
26
|
+
dismiss = jest.fn((_animated?: boolean) => Promise.resolve());
|
|
27
|
+
present = jest.fn((_index?: number, _animated?: boolean) => Promise.resolve());
|
|
28
|
+
resize = jest.fn((_index: number) => Promise.resolve());
|
|
29
|
+
|
|
30
|
+
componentDidMount() {
|
|
31
|
+
const { name } = this.props;
|
|
32
|
+
if (name) {
|
|
33
|
+
TrueSheet.instances[name] = this;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
componentWillUnmount() {
|
|
38
|
+
const { name } = this.props;
|
|
39
|
+
if (name) {
|
|
40
|
+
delete TrueSheet.instances[name];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private renderHeader(): ReactNode {
|
|
45
|
+
const { header } = this.props;
|
|
46
|
+
if (!header) return null;
|
|
47
|
+
return isValidElement(header) ? header : createElement(header);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private renderFooter(): ReactNode {
|
|
51
|
+
const { footer } = this.props;
|
|
52
|
+
if (!footer) return null;
|
|
53
|
+
return isValidElement(footer) ? footer : createElement(footer);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
render() {
|
|
57
|
+
const { children, style } = this.props;
|
|
58
|
+
return React.createElement(View, { style }, this.renderHeader(), children, this.renderFooter());
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Mock TrueSheetProvider for testing.
|
|
64
|
+
*/
|
|
65
|
+
export function TrueSheetProvider({ children }: { children: React.ReactNode }) {
|
|
66
|
+
return children;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Mock useTrueSheet hook for testing.
|
|
71
|
+
*/
|
|
72
|
+
export function useTrueSheet(): TrueSheetContextMethods {
|
|
73
|
+
return {
|
|
74
|
+
present: TrueSheet.present,
|
|
75
|
+
dismiss: TrueSheet.dismiss,
|
|
76
|
+
resize: TrueSheet.resize,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export * from '../TrueSheet.types';
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ParamListBase } from '@react-navigation/native';
|
|
2
|
+
|
|
3
|
+
import type { TrueSheetNavigationProp } from '../navigation/types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Mock createTrueSheetNavigator for testing.
|
|
7
|
+
* Import from '@lodev09/react-native-true-sheet/navigation/mock' in your test setup.
|
|
8
|
+
*/
|
|
9
|
+
export const createTrueSheetNavigator = jest.fn(() => ({
|
|
10
|
+
Navigator: jest.fn(({ children }: { children: React.ReactNode }) => children),
|
|
11
|
+
Screen: jest.fn(() => null),
|
|
12
|
+
Group: jest.fn(() => null),
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Mock TrueSheetActions for testing.
|
|
17
|
+
*/
|
|
18
|
+
export const TrueSheetActions = {
|
|
19
|
+
push: jest.fn((name: string, params?: object) => ({ type: 'PUSH', payload: { name, params } })),
|
|
20
|
+
pop: jest.fn((count?: number) => ({ type: 'POP', payload: { count } })),
|
|
21
|
+
popTo: jest.fn((name: string, params?: object) => ({
|
|
22
|
+
type: 'POP_TO',
|
|
23
|
+
payload: { name, params },
|
|
24
|
+
})),
|
|
25
|
+
popToTop: jest.fn(() => ({ type: 'POP_TO_TOP' })),
|
|
26
|
+
replace: jest.fn((name: string, params?: object) => ({
|
|
27
|
+
type: 'REPLACE',
|
|
28
|
+
payload: { name, params },
|
|
29
|
+
})),
|
|
30
|
+
resize: jest.fn((index: number) => ({ type: 'RESIZE', index })),
|
|
31
|
+
dismiss: jest.fn(() => ({ type: 'DISMISS' })),
|
|
32
|
+
remove: jest.fn(() => ({ type: 'REMOVE' })),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Mock useTrueSheetNavigation hook for testing.
|
|
37
|
+
*/
|
|
38
|
+
export const useTrueSheetNavigation = jest.fn(
|
|
39
|
+
<T extends ParamListBase = ParamListBase>() =>
|
|
40
|
+
({
|
|
41
|
+
navigate: jest.fn(),
|
|
42
|
+
goBack: jest.fn(),
|
|
43
|
+
reset: jest.fn(),
|
|
44
|
+
setParams: jest.fn(),
|
|
45
|
+
dispatch: jest.fn(),
|
|
46
|
+
isFocused: jest.fn(() => true),
|
|
47
|
+
canGoBack: jest.fn(() => true),
|
|
48
|
+
getId: jest.fn(),
|
|
49
|
+
getParent: jest.fn(),
|
|
50
|
+
getState: jest.fn(),
|
|
51
|
+
addListener: jest.fn(() => jest.fn()),
|
|
52
|
+
removeListener: jest.fn(),
|
|
53
|
+
setOptions: jest.fn(),
|
|
54
|
+
push: jest.fn(),
|
|
55
|
+
pop: jest.fn(),
|
|
56
|
+
popTo: jest.fn(),
|
|
57
|
+
popToTop: jest.fn(),
|
|
58
|
+
replace: jest.fn(),
|
|
59
|
+
resize: jest.fn(),
|
|
60
|
+
}) as unknown as TrueSheetNavigationProp<T>
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
export type { TrueSheetActionType } from '../navigation/TrueSheetRouter';
|
|
64
|
+
export type { DetentInfoEventPayload, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
65
|
+
export type {
|
|
66
|
+
TrueSheetNavigationEventMap,
|
|
67
|
+
TrueSheetNavigationHelpers,
|
|
68
|
+
TrueSheetNavigationOptions,
|
|
69
|
+
TrueSheetNavigationProp,
|
|
70
|
+
TrueSheetNavigationState,
|
|
71
|
+
TrueSheetScreenProps,
|
|
72
|
+
} from '../navigation/types';
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import React, { createElement, isValidElement, type ReactNode } from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import type { SharedValue } from 'react-native-reanimated';
|
|
4
|
+
|
|
5
|
+
import type { TrueSheetProps, TrueSheetRef, PositionChangeEventPayload } from '../TrueSheet.types';
|
|
6
|
+
|
|
7
|
+
interface TrueSheetState {
|
|
8
|
+
shouldRenderNativeView: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface MockReanimatedTrueSheetContextValue {
|
|
12
|
+
animatedPosition: SharedValue<number>;
|
|
13
|
+
animatedIndex: SharedValue<number>;
|
|
14
|
+
animatedDetent: SharedValue<number>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const createMockSharedValue = <T>(initialValue: T): SharedValue<T> =>
|
|
18
|
+
({
|
|
19
|
+
value: initialValue,
|
|
20
|
+
get: () => initialValue,
|
|
21
|
+
set: () => {},
|
|
22
|
+
addListener: () => () => {},
|
|
23
|
+
removeListener: () => {},
|
|
24
|
+
modify: () => {},
|
|
25
|
+
}) as unknown as SharedValue<T>;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Mock ReanimatedTrueSheet component for testing.
|
|
29
|
+
* Import from '@lodev09/react-native-true-sheet/reanimated/mock' in your test setup.
|
|
30
|
+
*/
|
|
31
|
+
export class ReanimatedTrueSheet
|
|
32
|
+
extends React.Component<TrueSheetProps, TrueSheetState>
|
|
33
|
+
implements TrueSheetRef
|
|
34
|
+
{
|
|
35
|
+
static instances: Record<string, ReanimatedTrueSheet> = {};
|
|
36
|
+
|
|
37
|
+
static dismiss = jest.fn((_name: string, _animated?: boolean) => Promise.resolve());
|
|
38
|
+
static present = jest.fn((_name: string, _index?: number, _animated?: boolean) =>
|
|
39
|
+
Promise.resolve()
|
|
40
|
+
);
|
|
41
|
+
static resize = jest.fn((_name: string, _index: number) => Promise.resolve());
|
|
42
|
+
|
|
43
|
+
dismiss = jest.fn((_animated?: boolean) => Promise.resolve());
|
|
44
|
+
present = jest.fn((_index?: number, _animated?: boolean) => Promise.resolve());
|
|
45
|
+
resize = jest.fn((_index: number) => Promise.resolve());
|
|
46
|
+
|
|
47
|
+
componentDidMount() {
|
|
48
|
+
const { name } = this.props;
|
|
49
|
+
if (name) {
|
|
50
|
+
ReanimatedTrueSheet.instances[name] = this;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
componentWillUnmount() {
|
|
55
|
+
const { name } = this.props;
|
|
56
|
+
if (name) {
|
|
57
|
+
delete ReanimatedTrueSheet.instances[name];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private renderHeader(): ReactNode {
|
|
62
|
+
const { header } = this.props;
|
|
63
|
+
if (!header) return null;
|
|
64
|
+
return isValidElement(header) ? header : createElement(header);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private renderFooter(): ReactNode {
|
|
68
|
+
const { footer } = this.props;
|
|
69
|
+
if (!footer) return null;
|
|
70
|
+
return isValidElement(footer) ? footer : createElement(footer);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
render() {
|
|
74
|
+
const { children, style } = this.props;
|
|
75
|
+
return React.createElement(View, { style }, this.renderHeader(), children, this.renderFooter());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Mock ReanimatedTrueSheetProvider for testing.
|
|
81
|
+
*/
|
|
82
|
+
export function ReanimatedTrueSheetProvider({ children }: { children: React.ReactNode }) {
|
|
83
|
+
return children;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Mock useReanimatedTrueSheet hook for testing.
|
|
88
|
+
*/
|
|
89
|
+
export const useReanimatedTrueSheet = jest.fn(
|
|
90
|
+
(): MockReanimatedTrueSheetContextValue => ({
|
|
91
|
+
animatedPosition: createMockSharedValue(0),
|
|
92
|
+
animatedIndex: createMockSharedValue(-1),
|
|
93
|
+
animatedDetent: createMockSharedValue(0),
|
|
94
|
+
})
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Mock useReanimatedPositionChangeHandler hook for testing.
|
|
99
|
+
*/
|
|
100
|
+
export const useReanimatedPositionChangeHandler = jest.fn(
|
|
101
|
+
(_handler: (payload: PositionChangeEventPayload) => void, _dependencies?: unknown[]) => jest.fn()
|
|
102
|
+
);
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { View } from 'react-native';
|
|
5
|
-
|
|
6
|
-
// Mock TrueSheet class component
|
|
7
|
-
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
8
|
-
export class TrueSheet extends React.Component {
|
|
9
|
-
static instances = {};
|
|
10
|
-
|
|
11
|
-
// Static methods
|
|
12
|
-
static dismiss = jest.fn((name, animated = true) => Promise.resolve());
|
|
13
|
-
static present = jest.fn((name, index = 0, animated = true) => Promise.resolve());
|
|
14
|
-
static resize = jest.fn((name, index) => Promise.resolve());
|
|
15
|
-
|
|
16
|
-
// Instance methods
|
|
17
|
-
dismiss = jest.fn((animated = true) => Promise.resolve());
|
|
18
|
-
present = jest.fn((index = 0, animated = true) => Promise.resolve());
|
|
19
|
-
resize = jest.fn(index => Promise.resolve());
|
|
20
|
-
componentDidMount() {
|
|
21
|
-
const {
|
|
22
|
-
name
|
|
23
|
-
} = this.props;
|
|
24
|
-
if (name) {
|
|
25
|
-
TrueSheet.instances[name] = this;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
componentWillUnmount() {
|
|
29
|
-
const {
|
|
30
|
-
name
|
|
31
|
-
} = this.props;
|
|
32
|
-
if (name) {
|
|
33
|
-
delete TrueSheet.instances[name];
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
render() {
|
|
37
|
-
const {
|
|
38
|
-
children,
|
|
39
|
-
header,
|
|
40
|
-
footer,
|
|
41
|
-
style,
|
|
42
|
-
...rest
|
|
43
|
-
} = this.props;
|
|
44
|
-
return /*#__PURE__*/_jsxs(View, {
|
|
45
|
-
style: style,
|
|
46
|
-
...rest,
|
|
47
|
-
children: [header, children, footer]
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Mock ReanimatedTrueSheet
|
|
53
|
-
export class ReanimatedTrueSheet extends TrueSheet {
|
|
54
|
-
render() {
|
|
55
|
-
return /*#__PURE__*/_jsx(TrueSheet, {
|
|
56
|
-
...this.props
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Mock ReanimatedTrueSheetProvider
|
|
62
|
-
export const ReanimatedTrueSheetProvider = ({
|
|
63
|
-
children
|
|
64
|
-
}) => /*#__PURE__*/_jsx(_Fragment, {
|
|
65
|
-
children: children
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// Mock hooks
|
|
69
|
-
export const useReanimatedTrueSheet = jest.fn(() => ({
|
|
70
|
-
animatedPosition: {
|
|
71
|
-
value: 0
|
|
72
|
-
},
|
|
73
|
-
animatedIndex: {
|
|
74
|
-
value: -1
|
|
75
|
-
}
|
|
76
|
-
}));
|
|
77
|
-
export const useReanimatedPositionChangeHandler = jest.fn(callback => jest.fn());
|
|
78
|
-
|
|
79
|
-
// Re-export types (these will be no-ops in JS but useful for TS consumers)
|
|
80
|
-
export * from "../TrueSheet.types.js";
|
|
81
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","jsxs","_jsxs","jsx","_jsx","Fragment","_Fragment","TrueSheet","Component","instances","dismiss","jest","fn","name","animated","Promise","resolve","present","index","resize","componentDidMount","props","componentWillUnmount","render","children","header","footer","style","rest","ReanimatedTrueSheet","ReanimatedTrueSheetProvider","useReanimatedTrueSheet","animatedPosition","value","animatedIndex","useReanimatedPositionChangeHandler","callback"],"sourceRoot":"../../../src","sources":["__mocks__/index.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;;AAEnC;AAAA,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA;AACA,OAAO,MAAMC,SAAS,SAASR,KAAK,CAACS,SAAS,CAAC;EAC7C,OAAOC,SAAS,GAAG,CAAC,CAAC;;EAErB;EACA,OAAOC,OAAO,GAAGC,IAAI,CAACC,EAAE,CAAC,CAACC,IAAI,EAAEC,QAAQ,GAAG,IAAI,KAAKC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EACtE,OAAOC,OAAO,GAAGN,IAAI,CAACC,EAAE,CAAC,CAACC,IAAI,EAAEK,KAAK,GAAG,CAAC,EAAEJ,QAAQ,GAAG,IAAI,KAAKC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EACjF,OAAOG,MAAM,GAAGR,IAAI,CAACC,EAAE,CAAC,CAACC,IAAI,EAAEK,KAAK,KAAKH,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;;EAE3D;EACAN,OAAO,GAAGC,IAAI,CAACC,EAAE,CAAC,CAACE,QAAQ,GAAG,IAAI,KAAKC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EACzDC,OAAO,GAAGN,IAAI,CAACC,EAAE,CAAC,CAACM,KAAK,GAAG,CAAC,EAAEJ,QAAQ,GAAG,IAAI,KAAKC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EACpEG,MAAM,GAAGR,IAAI,CAACC,EAAE,CAAEM,KAAK,IAAKH,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC;EAE9CI,iBAAiBA,CAAA,EAAG;IAClB,MAAM;MAAEP;IAAK,CAAC,GAAG,IAAI,CAACQ,KAAK;IAC3B,IAAIR,IAAI,EAAE;MACRN,SAAS,CAACE,SAAS,CAACI,IAAI,CAAC,GAAG,IAAI;IAClC;EACF;EAEAS,oBAAoBA,CAAA,EAAG;IACrB,MAAM;MAAET;IAAK,CAAC,GAAG,IAAI,CAACQ,KAAK;IAC3B,IAAIR,IAAI,EAAE;MACR,OAAON,SAAS,CAACE,SAAS,CAACI,IAAI,CAAC;IAClC;EACF;EAEAU,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,QAAQ;MAAEC,MAAM;MAAEC,MAAM;MAAEC,KAAK;MAAE,GAAGC;IAAK,CAAC,GAAG,IAAI,CAACP,KAAK;IAC/D,oBACEnB,KAAA,CAACF,IAAI;MAAC2B,KAAK,EAAEA,KAAM;MAAA,GAAKC,IAAI;MAAAJ,QAAA,GACzBC,MAAM,EACND,QAAQ,EACRE,MAAM;IAAA,CACH,CAAC;EAEX;AACF;;AAEA;AACA,OAAO,MAAMG,mBAAmB,SAAStB,SAAS,CAAC;EACjDgB,MAAMA,CAAA,EAAG;IACP,oBAAOnB,IAAA,CAACG,SAAS;MAAA,GAAK,IAAI,CAACc;IAAK,CAAG,CAAC;EACtC;AACF;;AAEA;AACA,OAAO,MAAMS,2BAA2B,GAAGA,CAAC;EAAEN;AAAS,CAAC,kBAAKpB,IAAA,CAAAE,SAAA;EAAAkB,QAAA,EAAGA;AAAQ,CAAG,CAAC;;AAE5E;AACA,OAAO,MAAMO,sBAAsB,GAAGpB,IAAI,CAACC,EAAE,CAAC,OAAO;EACnDoB,gBAAgB,EAAE;IAAEC,KAAK,EAAE;EAAE,CAAC;EAC9BC,aAAa,EAAE;IAAED,KAAK,EAAE,CAAC;EAAE;AAC7B,CAAC,CAAC,CAAC;AAEH,OAAO,MAAME,kCAAkC,GAAGxB,IAAI,CAACC,EAAE,CAAEwB,QAAQ,IAAKzB,IAAI,CAACC,EAAE,CAAC,CAAC,CAAC;;AAElF;AACA,cAAc,uBAAoB","ignoreList":[]}
|
package/src/__mocks__/index.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { View } from 'react-native';
|
|
3
|
-
|
|
4
|
-
// Mock TrueSheet class component
|
|
5
|
-
export class TrueSheet extends React.Component {
|
|
6
|
-
static instances = {};
|
|
7
|
-
|
|
8
|
-
// Static methods
|
|
9
|
-
static dismiss = jest.fn((name, animated = true) => Promise.resolve());
|
|
10
|
-
static present = jest.fn((name, index = 0, animated = true) => Promise.resolve());
|
|
11
|
-
static resize = jest.fn((name, index) => Promise.resolve());
|
|
12
|
-
|
|
13
|
-
// Instance methods
|
|
14
|
-
dismiss = jest.fn((animated = true) => Promise.resolve());
|
|
15
|
-
present = jest.fn((index = 0, animated = true) => Promise.resolve());
|
|
16
|
-
resize = jest.fn((index) => Promise.resolve());
|
|
17
|
-
|
|
18
|
-
componentDidMount() {
|
|
19
|
-
const { name } = this.props;
|
|
20
|
-
if (name) {
|
|
21
|
-
TrueSheet.instances[name] = this;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
componentWillUnmount() {
|
|
26
|
-
const { name } = this.props;
|
|
27
|
-
if (name) {
|
|
28
|
-
delete TrueSheet.instances[name];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
render() {
|
|
33
|
-
const { children, header, footer, style, ...rest } = this.props;
|
|
34
|
-
return (
|
|
35
|
-
<View style={style} {...rest}>
|
|
36
|
-
{header}
|
|
37
|
-
{children}
|
|
38
|
-
{footer}
|
|
39
|
-
</View>
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Mock ReanimatedTrueSheet
|
|
45
|
-
export class ReanimatedTrueSheet extends TrueSheet {
|
|
46
|
-
render() {
|
|
47
|
-
return <TrueSheet {...this.props} />;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Mock ReanimatedTrueSheetProvider
|
|
52
|
-
export const ReanimatedTrueSheetProvider = ({ children }) => <>{children}</>;
|
|
53
|
-
|
|
54
|
-
// Mock hooks
|
|
55
|
-
export const useReanimatedTrueSheet = jest.fn(() => ({
|
|
56
|
-
animatedPosition: { value: 0 },
|
|
57
|
-
animatedIndex: { value: -1 },
|
|
58
|
-
}));
|
|
59
|
-
|
|
60
|
-
export const useReanimatedPositionChangeHandler = jest.fn((callback) => jest.fn());
|
|
61
|
-
|
|
62
|
-
// Re-export types (these will be no-ops in JS but useful for TS consumers)
|
|
63
|
-
export * from '../TrueSheet.types';
|