react-native-screens 3.7.0 → 3.9.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.
- package/README.md +31 -3
- package/android/build.gradle +12 -21
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +55 -40
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +2 -100
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +0 -3
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +1 -1
- package/ios/RNSScreen.h +1 -0
- package/ios/RNSScreen.m +31 -0
- package/ios/RNSScreenContainer.h +2 -0
- package/ios/RNSScreenStack.m +17 -0
- package/ios/RNSScreenStackHeaderConfig.m +45 -2
- package/ios/RNSScreenWindowTraits.h +5 -0
- package/ios/RNSScreenWindowTraits.m +29 -0
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.native.js +50 -12
- package/lib/commonjs/index.native.js.map +1 -1
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.native.js +47 -13
- package/lib/module/index.native.js.map +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/native-stack/README.md +4 -2
- package/package.json +4 -2
- package/src/index.native.tsx +57 -20
- package/src/index.tsx +6 -0
package/src/index.native.tsx
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
View,
|
|
11
11
|
ViewProps,
|
|
12
12
|
} from 'react-native';
|
|
13
|
+
import { Freeze } from 'react-freeze';
|
|
13
14
|
// @ts-ignore Getting private component
|
|
14
15
|
// eslint-disable-next-line import/default
|
|
15
16
|
import processColor from 'react-native/Libraries/StyleSheet/processColor';
|
|
@@ -47,6 +48,12 @@ function enableScreens(shouldEnableScreens = true): void {
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
let ENABLE_FREEZE = false;
|
|
52
|
+
|
|
53
|
+
function enableFreeze(shouldEnableReactFreeze = true): void {
|
|
54
|
+
ENABLE_FREEZE = shouldEnableReactFreeze;
|
|
55
|
+
}
|
|
56
|
+
|
|
50
57
|
// const that tells if the library should use new implementation, will be undefined for older versions
|
|
51
58
|
const shouldUseActivityState = true;
|
|
52
59
|
|
|
@@ -85,7 +92,9 @@ const ScreensNativeModules = {
|
|
|
85
92
|
get NativeScreenNavigationContainer() {
|
|
86
93
|
NativeScreenNavigationContainerValue =
|
|
87
94
|
NativeScreenNavigationContainerValue ||
|
|
88
|
-
|
|
95
|
+
(Platform.OS === 'ios'
|
|
96
|
+
? requireNativeComponent('RNSScreenNavigationContainer')
|
|
97
|
+
: this.NativeScreenContainer);
|
|
89
98
|
return NativeScreenNavigationContainerValue;
|
|
90
99
|
},
|
|
91
100
|
|
|
@@ -121,6 +130,36 @@ const ScreensNativeModules = {
|
|
|
121
130
|
},
|
|
122
131
|
};
|
|
123
132
|
|
|
133
|
+
function MaybeFreeze({
|
|
134
|
+
freeze,
|
|
135
|
+
children,
|
|
136
|
+
}: {
|
|
137
|
+
freeze: boolean;
|
|
138
|
+
children: React.ReactNode;
|
|
139
|
+
}) {
|
|
140
|
+
if (ENABLE_FREEZE) {
|
|
141
|
+
return <Freeze freeze={freeze}>{children}</Freeze>;
|
|
142
|
+
} else {
|
|
143
|
+
return <>{children}</>;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function ScreenStack(props: ScreenStackProps) {
|
|
148
|
+
if (ENABLE_FREEZE) {
|
|
149
|
+
const { children, ...rest } = props;
|
|
150
|
+
const count = React.Children.count(children);
|
|
151
|
+
const childrenWithProps = React.Children.map(children, (child, index) => {
|
|
152
|
+
return <Freeze freeze={count - index > 2}>{child}</Freeze>;
|
|
153
|
+
});
|
|
154
|
+
return (
|
|
155
|
+
<ScreensNativeModules.NativeScreenStack {...rest}>
|
|
156
|
+
{childrenWithProps}
|
|
157
|
+
</ScreensNativeModules.NativeScreenStack>
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
return <ScreensNativeModules.NativeScreenStack {...props} />;
|
|
161
|
+
}
|
|
162
|
+
|
|
124
163
|
class Screen extends React.Component<ScreenProps> {
|
|
125
164
|
private ref: React.ElementRef<typeof View> | null = null;
|
|
126
165
|
private closing = new Animated.Value(0);
|
|
@@ -187,18 +226,20 @@ class Screen extends React.Component<ScreenProps> {
|
|
|
187
226
|
{ useNativeDriver: true }
|
|
188
227
|
)
|
|
189
228
|
}>
|
|
190
|
-
{
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
229
|
+
<MaybeFreeze freeze={activityState === 0}>
|
|
230
|
+
{!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed
|
|
231
|
+
children
|
|
232
|
+
) : (
|
|
233
|
+
<TransitionProgressContext.Provider
|
|
234
|
+
value={{
|
|
235
|
+
progress: this.progress,
|
|
236
|
+
closing: this.closing,
|
|
237
|
+
goingForward: this.goingForward,
|
|
238
|
+
}}>
|
|
239
|
+
{children}
|
|
240
|
+
</TransitionProgressContext.Provider>
|
|
241
|
+
)}
|
|
242
|
+
</MaybeFreeze>
|
|
202
243
|
</AnimatedNativeScreen>
|
|
203
244
|
);
|
|
204
245
|
} else {
|
|
@@ -321,6 +362,7 @@ module.exports = {
|
|
|
321
362
|
Screen,
|
|
322
363
|
ScreenContainer,
|
|
323
364
|
ScreenContext,
|
|
365
|
+
ScreenStack,
|
|
324
366
|
|
|
325
367
|
get NativeScreen() {
|
|
326
368
|
return ScreensNativeModules.NativeScreen;
|
|
@@ -331,15 +373,9 @@ module.exports = {
|
|
|
331
373
|
},
|
|
332
374
|
|
|
333
375
|
get NativeScreenNavigationContainer() {
|
|
334
|
-
|
|
335
|
-
return ScreensNativeModules.NativeScreenNavigationContainer;
|
|
336
|
-
}
|
|
337
|
-
return ScreensNativeModules.NativeScreenContainer;
|
|
376
|
+
return ScreensNativeModules.NativeScreenNavigationContainer;
|
|
338
377
|
},
|
|
339
378
|
|
|
340
|
-
get ScreenStack() {
|
|
341
|
-
return ScreensNativeModules.NativeScreenStack;
|
|
342
|
-
},
|
|
343
379
|
get ScreenStackHeaderConfig() {
|
|
344
380
|
return ScreensNativeModules.NativeScreenStackHeaderConfig;
|
|
345
381
|
},
|
|
@@ -371,6 +407,7 @@ module.exports = {
|
|
|
371
407
|
ScreenStackHeaderSearchBarView,
|
|
372
408
|
|
|
373
409
|
enableScreens,
|
|
410
|
+
enableFreeze,
|
|
374
411
|
screensEnabled,
|
|
375
412
|
shouldUseActivityState,
|
|
376
413
|
useTransitionProgress,
|
package/src/index.tsx
CHANGED
|
@@ -22,6 +22,12 @@ export function screensEnabled(): boolean {
|
|
|
22
22
|
return ENABLE_SCREENS;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
// @ts-ignore function stub, freezing logic is located in index.native.tsx
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
27
|
+
export function enableFreeze(shouldEnableReactFreeze = true): void {
|
|
28
|
+
// noop
|
|
29
|
+
}
|
|
30
|
+
|
|
25
31
|
export class NativeScreen extends React.Component<ScreenProps> {
|
|
26
32
|
render(): JSX.Element {
|
|
27
33
|
let {
|