@applicaster/zapp-react-native-ui-components 13.0.0-alpha.2060875348 → 13.0.0-alpha.2082004638
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/Components/AnimatedInOut/index.tsx +3 -5
- package/Components/AudioPlayer/AudioPlayer.tsx +7 -0
- package/Components/AudioPlayer/helpers.tsx +1 -0
- package/Components/Cell/Cell.tsx +3 -13
- package/Components/Cell/CellWithFocusable.tsx +18 -14
- package/Components/Cell/CellWrapper.ts +5 -0
- package/Components/Cell/styles.ts +17 -0
- package/Components/ErrorScreen/index.tsx +8 -0
- package/Components/FocusableCell/index.tsx +1 -1
- package/Components/FocusableGroup/FocusableTvOS.tsx +3 -6
- package/Components/FocusableGroup/index.tsx +0 -1
- package/Components/HandlePlayable/HandlePlayable.tsx +14 -27
- package/Components/Layout/TV/ScreenContainer.tsx +8 -1
- package/Components/Layout/TV/ScreenLayoutContextProvider.tsx +5 -0
- package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +2 -1
- package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +4 -3
- package/Components/MasterCell/DefaultComponents/Image/hooks/useImage.ts +11 -7
- package/Components/MasterCell/utils/behaviorProvider.ts +136 -0
- package/Components/MasterCell/utils/index.ts +8 -134
- package/Components/ModalComponent/Button/assets.ts +1 -1
- package/Components/OfflineHandler/utils/index.ts +1 -1
- package/Components/PlayerContainer/PlayerContainer.tsx +9 -5
- package/Components/PlayerImageBackground/index.tsx +4 -24
- package/Components/River/ComponentsMap/ComponentsMap.tsx +4 -0
- package/Components/River/ComponentsMap/hooks/useLoadingState.ts +3 -3
- package/Components/Screen/TV/index.web.tsx +5 -6
- package/Components/Screen/hooks.ts +3 -6
- package/Components/TrackedView/index.tsx +1 -0
- package/Components/Transitioner/AnimationManager.js +15 -15
- package/Components/VideoLive/PlayerLiveImageComponent.tsx +4 -0
- package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +1 -0
- package/Components/VideoLive/animationUtils.ts +4 -7
- package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +1 -1
- package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +36 -20
- package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +3 -3
- package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +34 -13
- package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +2 -2
- package/Components/VideoModal/ModalAnimation/__tests__/getMoveUpValue.test.ts +108 -0
- package/Components/VideoModal/ModalAnimation/const.ts +5 -0
- package/Components/VideoModal/ModalAnimation/index.ts +2 -0
- package/Components/VideoModal/ModalAnimation/utils.ts +36 -0
- package/Components/VideoModal/VideoModal.tsx +2 -2
- package/Contexts/FocusableGroupContext/withFocusableContext.tsx +4 -10
- package/Contexts/HeaderOffsetContext/index.tsx +4 -6
- package/Contexts/ScreenContext/index.tsx +3 -10
- package/Contexts/ScreenLayoutContext/index.tsx +5 -3
- package/Decorators/RiverResolver/index.tsx +5 -7
- package/Decorators/ZappPipesDataConnector/index.tsx +4 -30
- package/package.json +5 -9
- package/tsconfig.json +2 -3
- package/.babelrc +0 -8
- package/Components/Cell/CellStyles/FallbackCellStyle/index.js +0 -157
- package/Components/Cell/CellStyles/Hero/index.js +0 -111
- package/Components/Cell/CellStyles/ScreenSelector/index.js +0 -68
- package/Components/Cell/CellStyles/cellStylesResolver.ts +0 -19
- package/Components/Cell/CellStyles/colors.js +0 -40
- package/Components/Cell/CellStyles/index.js +0 -15
|
@@ -50,7 +50,7 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
|
|
|
50
50
|
|
|
51
51
|
const isNotMinimizeMaximazeAnimation =
|
|
52
52
|
playerAnimationState !== PlayerAnimationStateEnum.minimize &&
|
|
53
|
-
playerAnimationState !== PlayerAnimationStateEnum.
|
|
53
|
+
playerAnimationState !== PlayerAnimationStateEnum.maximize;
|
|
54
54
|
|
|
55
55
|
const isEnablePanGesture =
|
|
56
56
|
!isLanguageOverlayVisible &&
|
|
@@ -89,7 +89,7 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
|
|
|
89
89
|
setLastSnap(destSnapPoint);
|
|
90
90
|
|
|
91
91
|
if (destSnapPoint === modalSnapPoints[0]) {
|
|
92
|
-
setPlayerAnimationState(PlayerAnimationStateEnum.
|
|
92
|
+
setPlayerAnimationState(PlayerAnimationStateEnum.maximize);
|
|
93
93
|
} else {
|
|
94
94
|
lastScrollY.setValue(0);
|
|
95
95
|
lastScrollYValue.current = 0;
|
|
@@ -105,7 +105,7 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
|
|
|
105
105
|
modalSnapPoints[1] - preparedTranslationY
|
|
106
106
|
);
|
|
107
107
|
|
|
108
|
-
setPlayerAnimationState(PlayerAnimationStateEnum.
|
|
108
|
+
setPlayerAnimationState(PlayerAnimationStateEnum.maximize);
|
|
109
109
|
} else {
|
|
110
110
|
resetPlayerAnimationState();
|
|
111
111
|
}
|
|
@@ -24,8 +24,11 @@ import {
|
|
|
24
24
|
gestureListenerHelper,
|
|
25
25
|
getAnimationDefaultValue,
|
|
26
26
|
getAnimationStyle,
|
|
27
|
+
getMoveUpValue,
|
|
27
28
|
} from "./utils";
|
|
28
29
|
|
|
30
|
+
import { DURATION_TO_MINIMIZE, DEFAULT_DURATION_FOR_ANIMATION } from "./const";
|
|
31
|
+
|
|
29
32
|
type Props = {
|
|
30
33
|
animationType: string;
|
|
31
34
|
children: React.ReactNode;
|
|
@@ -97,14 +100,16 @@ export const AnimationView = ({
|
|
|
97
100
|
|
|
98
101
|
const inlineAudioPlayer = additionalData.inlineAudioPlayer;
|
|
99
102
|
|
|
100
|
-
const moveUpValue =
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
103
|
+
const moveUpValue = getMoveUpValue({
|
|
104
|
+
additionalData,
|
|
105
|
+
insets,
|
|
106
|
+
isAudioItem,
|
|
107
|
+
progressBarHeight,
|
|
108
|
+
isTablet,
|
|
109
|
+
isTabletLandscape,
|
|
110
|
+
inlineAudioPlayer,
|
|
111
|
+
tabletLandscapePlayerTopPosition,
|
|
112
|
+
});
|
|
108
113
|
|
|
109
114
|
const moveComponentHorizontalValue = additionalData.moveValue
|
|
110
115
|
? isRTL
|
|
@@ -119,7 +124,10 @@ export const AnimationView = ({
|
|
|
119
124
|
(animationType, state) => {
|
|
120
125
|
const defaultConfig = {
|
|
121
126
|
toValue: 0,
|
|
122
|
-
duration:
|
|
127
|
+
duration:
|
|
128
|
+
state === PlayerAnimationStateEnum.minimize
|
|
129
|
+
? DURATION_TO_MINIMIZE
|
|
130
|
+
: DEFAULT_DURATION_FOR_ANIMATION,
|
|
123
131
|
useNativeDriver: true,
|
|
124
132
|
};
|
|
125
133
|
|
|
@@ -228,6 +236,8 @@ export const AnimationView = ({
|
|
|
228
236
|
isAudioItem,
|
|
229
237
|
moveUpValue,
|
|
230
238
|
moveComponentHorizontalValue,
|
|
239
|
+
isRTL,
|
|
240
|
+
inlineAudioPlayer,
|
|
231
241
|
]
|
|
232
242
|
);
|
|
233
243
|
|
|
@@ -246,7 +256,7 @@ export const AnimationView = ({
|
|
|
246
256
|
default:
|
|
247
257
|
return getAnimationValue(
|
|
248
258
|
animationType,
|
|
249
|
-
PlayerAnimationStateEnum.
|
|
259
|
+
PlayerAnimationStateEnum.maximize
|
|
250
260
|
).toValue;
|
|
251
261
|
}
|
|
252
262
|
}, [defaultValue, videoModalState]);
|
|
@@ -278,6 +288,11 @@ export const AnimationView = ({
|
|
|
278
288
|
moveUpValue,
|
|
279
289
|
moveComponentHorizontalValue,
|
|
280
290
|
videoModalMode,
|
|
291
|
+
isAudioItem,
|
|
292
|
+
isTablet,
|
|
293
|
+
isTabletLandscape,
|
|
294
|
+
isRTL,
|
|
295
|
+
inlineAudioPlayer,
|
|
281
296
|
]
|
|
282
297
|
);
|
|
283
298
|
|
|
@@ -306,7 +321,7 @@ export const AnimationView = ({
|
|
|
306
321
|
}
|
|
307
322
|
|
|
308
323
|
if (
|
|
309
|
-
videoModalMode === "MAXIMIZED" &&
|
|
324
|
+
(videoModalMode === "MAXIMIZED" || videoModalMode === "MINIMIZED") &&
|
|
310
325
|
defaultValue.x !== screenWidth &&
|
|
311
326
|
width &&
|
|
312
327
|
height
|
|
@@ -332,7 +347,13 @@ export const AnimationView = ({
|
|
|
332
347
|
animatedValue.setValue(value);
|
|
333
348
|
}
|
|
334
349
|
}
|
|
335
|
-
}, [
|
|
350
|
+
}, [
|
|
351
|
+
animatedValue,
|
|
352
|
+
animationType,
|
|
353
|
+
getAnimationValue,
|
|
354
|
+
playerAnimationState,
|
|
355
|
+
videoModalState,
|
|
356
|
+
]);
|
|
336
357
|
|
|
337
358
|
React.useEffect(() => {
|
|
338
359
|
if (
|
|
@@ -344,7 +365,7 @@ export const AnimationView = ({
|
|
|
344
365
|
animatedValue,
|
|
345
366
|
getAnimationValue(animationType, playerAnimationState)
|
|
346
367
|
).start();
|
|
347
|
-
} else if (playerAnimationState === PlayerAnimationStateEnum.
|
|
368
|
+
} else if (playerAnimationState === PlayerAnimationStateEnum.maximize) {
|
|
348
369
|
animatedValue.setValue(defaultValue);
|
|
349
370
|
}
|
|
350
371
|
}, [playerAnimationState, startComponentsAnimation, defaultValue]);
|
|
@@ -14,12 +14,12 @@ import { useConfiguration } from "../utils";
|
|
|
14
14
|
|
|
15
15
|
export enum PlayerAnimationStateEnum {
|
|
16
16
|
minimize = "minimize",
|
|
17
|
-
|
|
17
|
+
maximize = "maximize",
|
|
18
18
|
drag_player = "drag_player",
|
|
19
19
|
drag_scroll = "drag_scroll",
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
type PlayerAnimationStateT = number | PlayerAnimationStateEnum | null;
|
|
22
|
+
export type PlayerAnimationStateT = number | PlayerAnimationStateEnum | null;
|
|
23
23
|
|
|
24
24
|
export type ModalAnimationContextT = {
|
|
25
25
|
isActiveGesture: boolean;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { getMoveUpValue } from "../utils";
|
|
2
|
+
|
|
3
|
+
describe("getMoveUpValue", () => {
|
|
4
|
+
it("returns correct value when additionalData.saveArea is true and isAudioItem is false", () => {
|
|
5
|
+
const result = getMoveUpValue({
|
|
6
|
+
additionalData: { saveArea: true },
|
|
7
|
+
insets: { top: 20 },
|
|
8
|
+
isAudioItem: false,
|
|
9
|
+
progressBarHeight: 10,
|
|
10
|
+
isTablet: false,
|
|
11
|
+
isTabletLandscape: false,
|
|
12
|
+
inlineAudioPlayer: false,
|
|
13
|
+
tabletLandscapePlayerTopPosition: 100,
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
expect(result).toBe(-20 + 10);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it("returns correct value when additionalData.saveArea is true and isAudioItem is true", () => {
|
|
20
|
+
const result = getMoveUpValue({
|
|
21
|
+
additionalData: { saveArea: true },
|
|
22
|
+
insets: { top: 15 },
|
|
23
|
+
isAudioItem: true,
|
|
24
|
+
progressBarHeight: 5,
|
|
25
|
+
isTablet: false,
|
|
26
|
+
isTabletLandscape: false,
|
|
27
|
+
inlineAudioPlayer: false,
|
|
28
|
+
tabletLandscapePlayerTopPosition: 100,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
expect(result).toBe(-15 + 0);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("returns correct value for audio item (tablet or not)", () => {
|
|
35
|
+
const result = getMoveUpValue({
|
|
36
|
+
additionalData: { marginTop: 30 },
|
|
37
|
+
insets: { top: 0 },
|
|
38
|
+
isAudioItem: true,
|
|
39
|
+
progressBarHeight: 0,
|
|
40
|
+
isTablet: false,
|
|
41
|
+
isTabletLandscape: false,
|
|
42
|
+
inlineAudioPlayer: false,
|
|
43
|
+
tabletLandscapePlayerTopPosition: 0,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
expect(result).toBe(-30);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("returns correct value for tablet landscape with inline audio player", () => {
|
|
50
|
+
const result = getMoveUpValue({
|
|
51
|
+
additionalData: {},
|
|
52
|
+
insets: { top: 0 },
|
|
53
|
+
isAudioItem: true,
|
|
54
|
+
progressBarHeight: 8,
|
|
55
|
+
isTablet: true,
|
|
56
|
+
isTabletLandscape: true,
|
|
57
|
+
inlineAudioPlayer: true,
|
|
58
|
+
tabletLandscapePlayerTopPosition: 50,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
expect(result).toBe(-0);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("returns correct value for tablet landscape without audio item", () => {
|
|
65
|
+
const result = getMoveUpValue({
|
|
66
|
+
additionalData: {},
|
|
67
|
+
insets: { top: 0 },
|
|
68
|
+
isAudioItem: false,
|
|
69
|
+
progressBarHeight: 12,
|
|
70
|
+
isTablet: true,
|
|
71
|
+
isTabletLandscape: true,
|
|
72
|
+
inlineAudioPlayer: false,
|
|
73
|
+
tabletLandscapePlayerTopPosition: 60,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
expect(result).toBe(-60 + 12);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("returns -130 for tablet portrait (not landscape)", () => {
|
|
80
|
+
const result = getMoveUpValue({
|
|
81
|
+
additionalData: {},
|
|
82
|
+
insets: { top: 0 },
|
|
83
|
+
isAudioItem: false,
|
|
84
|
+
progressBarHeight: 0,
|
|
85
|
+
isTablet: true,
|
|
86
|
+
isTabletLandscape: false,
|
|
87
|
+
inlineAudioPlayer: false,
|
|
88
|
+
tabletLandscapePlayerTopPosition: 0,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
expect(result).toBe(-130);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("returns -50 + progressBarHeight for mobile audio player in docked mode", () => {
|
|
95
|
+
const result = getMoveUpValue({
|
|
96
|
+
additionalData: {},
|
|
97
|
+
insets: { top: 0 },
|
|
98
|
+
isAudioItem: false,
|
|
99
|
+
progressBarHeight: 7,
|
|
100
|
+
isTablet: false,
|
|
101
|
+
isTabletLandscape: false,
|
|
102
|
+
inlineAudioPlayer: false,
|
|
103
|
+
tabletLandscapePlayerTopPosition: 0,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
expect(result).toBe(-50 + 7);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
@@ -14,3 +14,5 @@ export { useModalAnimationContext } from "./useModalAnimationContext";
|
|
|
14
14
|
export { AnimationComponent } from "./AnimationComponent";
|
|
15
15
|
|
|
16
16
|
export { ComponentAnimationType, defaultAspectRatioWidth } from "./utils";
|
|
17
|
+
|
|
18
|
+
export { DURATION_TO_MINIMIZE, DURATION_TO_MAXIMIZE } from "./const";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable padding-line-between-statements */
|
|
2
2
|
|
|
3
3
|
import { PlayerAnimationStateEnum } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
4
|
+
import { toNumberWithDefaultZero } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
4
5
|
|
|
5
6
|
export enum ComponentAnimationType {
|
|
6
7
|
bottomBar = "bottomBar",
|
|
@@ -300,3 +301,38 @@ export const resetScrollAnimatedValues = (
|
|
|
300
301
|
dragScrollY.setValue(0);
|
|
301
302
|
dragVideoPlayerY.setValue(0);
|
|
302
303
|
};
|
|
304
|
+
|
|
305
|
+
export const getMoveUpValue = ({
|
|
306
|
+
additionalData,
|
|
307
|
+
insets,
|
|
308
|
+
isAudioItem,
|
|
309
|
+
progressBarHeight,
|
|
310
|
+
isTablet,
|
|
311
|
+
isTabletLandscape,
|
|
312
|
+
inlineAudioPlayer,
|
|
313
|
+
tabletLandscapePlayerTopPosition,
|
|
314
|
+
}) => {
|
|
315
|
+
if (additionalData.saveArea) {
|
|
316
|
+
return -insets.top + (isAudioItem ? 0 : progressBarHeight);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (isAudioItem) {
|
|
320
|
+
// for tablet and audioPlayer
|
|
321
|
+
return -1 * toNumberWithDefaultZero(additionalData?.marginTop);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if (isTablet) {
|
|
325
|
+
if (
|
|
326
|
+
isTabletLandscape &&
|
|
327
|
+
(!isAudioItem || (isAudioItem && inlineAudioPlayer))
|
|
328
|
+
) {
|
|
329
|
+
return -tabletLandscapePlayerTopPosition + progressBarHeight;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// for audioPlayer(tablet/isTabletPortrait) in docked mode
|
|
333
|
+
return -130;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// for audioPlayer(mobile) in docked mode
|
|
337
|
+
return -50 + progressBarHeight;
|
|
338
|
+
};
|
|
@@ -137,14 +137,14 @@ const VideoModalComponent = () => {
|
|
|
137
137
|
styles.container,
|
|
138
138
|
{
|
|
139
139
|
backgroundColor,
|
|
140
|
+
width: modalSize.width,
|
|
141
|
+
height: modalSize.height,
|
|
140
142
|
},
|
|
141
143
|
]}
|
|
142
144
|
>
|
|
143
145
|
<HandlePlayable
|
|
144
146
|
item={item}
|
|
145
147
|
isModal={mode !== "PIP"}
|
|
146
|
-
modalHeight={modalSize.height}
|
|
147
|
-
modalWidth={modalSize.width}
|
|
148
148
|
mode={mode}
|
|
149
149
|
/>
|
|
150
150
|
</AnimatedPlayerModalWrapper>
|
|
@@ -7,17 +7,11 @@ export const withFocusableContext = (Component) => {
|
|
|
7
7
|
{ groupId, ...props }: Record<string, any>,
|
|
8
8
|
ref
|
|
9
9
|
) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// eslint-disable-next-line react/display-name
|
|
14
|
-
const propsGroupId = groupId || null;
|
|
15
|
-
const providedGroupId = propsGroupId || groupIdContext;
|
|
10
|
+
const groupIdContext = React.useContext(FocusableGroupContext);
|
|
11
|
+
const propsGroupId = groupId || null;
|
|
12
|
+
const providedGroupId = propsGroupId || groupIdContext;
|
|
16
13
|
|
|
17
|
-
|
|
18
|
-
}}
|
|
19
|
-
</FocusableGroupContext.Consumer>
|
|
20
|
-
);
|
|
14
|
+
return <Component {...props} groupId={providedGroupId} ref={ref} />;
|
|
21
15
|
};
|
|
22
16
|
|
|
23
17
|
return React.forwardRef(WithFocusableContext);
|
|
@@ -13,7 +13,7 @@ type ProviderProps = {
|
|
|
13
13
|
};
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
const initialHeaderOffsetContext = () => ({
|
|
16
|
+
const initialHeaderOffsetContext: HeaderOffsetContextType = () => ({
|
|
17
17
|
headerOffset: 0,
|
|
18
18
|
headersAbove: null,
|
|
19
19
|
});
|
|
@@ -24,11 +24,9 @@ export const HeaderOffsetContext = React.createContext<HeaderOffsetContextType>(
|
|
|
24
24
|
|
|
25
25
|
export function withConsumer(Component) {
|
|
26
26
|
return function WithConsumer(props) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
</HeaderOffsetContext.Consumer>
|
|
31
|
-
);
|
|
27
|
+
const getHeaderOffset = React.useContext(HeaderOffsetContext);
|
|
28
|
+
|
|
29
|
+
return <Component getHeaderOffset={getHeaderOffset} {...props} />;
|
|
32
30
|
};
|
|
33
31
|
}
|
|
34
32
|
|
|
@@ -176,15 +176,8 @@ export function ScreenContextProvider({
|
|
|
176
176
|
|
|
177
177
|
export function withScreenContext(Component: React.ComponentType<any>) {
|
|
178
178
|
return function WithScreenContextWrapper(props) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
(value) => (
|
|
183
|
-
<Component {...props} screenContext={value} />
|
|
184
|
-
),
|
|
185
|
-
[Component, props]
|
|
186
|
-
)}
|
|
187
|
-
</ScreenContext.Consumer>
|
|
188
|
-
);
|
|
179
|
+
const screenContext = React.useContext(ScreenContext);
|
|
180
|
+
|
|
181
|
+
return <Component {...props} screenContext={screenContext} />;
|
|
189
182
|
};
|
|
190
183
|
}
|
|
@@ -8,10 +8,11 @@ type LayoutContext = {
|
|
|
8
8
|
componentAnchorPointY: number | null;
|
|
9
9
|
componentAvailableWidth: number | null;
|
|
10
10
|
setScreenLayout?: (properties: {}) => void;
|
|
11
|
+
resetScreenLayout?: () => void;
|
|
11
12
|
extraAnchorPointYOffset: number;
|
|
12
13
|
};
|
|
13
14
|
|
|
14
|
-
const
|
|
15
|
+
const initialScreenLayoutContext: LayoutContext = {
|
|
15
16
|
screenMarginTop: null,
|
|
16
17
|
screenMarginBottom: null,
|
|
17
18
|
screenHeight: null,
|
|
@@ -21,8 +22,9 @@ const screenLayoutContext: LayoutContext = {
|
|
|
21
22
|
extraAnchorPointYOffset: 0,
|
|
22
23
|
};
|
|
23
24
|
|
|
24
|
-
export const ScreenLayoutContext =
|
|
25
|
-
|
|
25
|
+
export const ScreenLayoutContext = React.createContext<LayoutContext>(
|
|
26
|
+
initialScreenLayoutContext
|
|
27
|
+
);
|
|
26
28
|
|
|
27
29
|
export function ScreenLayoutContextConsumer(Component) {
|
|
28
30
|
return function WithConsumer(props) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
|
|
3
|
-
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
|
|
4
3
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
5
4
|
import { usePathname } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/usePathname";
|
|
5
|
+
import { useRivers } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
6
6
|
|
|
7
7
|
type Props = ZappUIComponentProps & {
|
|
8
8
|
rivers: ZappRivers;
|
|
@@ -12,27 +12,25 @@ type Props = ZappUIComponentProps & {
|
|
|
12
12
|
|
|
13
13
|
export function withRiver(Component: ZappComponent): ZappComponent {
|
|
14
14
|
const RiverWithData = ({ screenId, ...otherProps }: Props) => {
|
|
15
|
-
const
|
|
15
|
+
const river = useRivers()?.[screenId];
|
|
16
16
|
const pathname = usePathname();
|
|
17
|
-
const river = rivers[screenId];
|
|
18
17
|
|
|
19
18
|
if (!river) {
|
|
20
19
|
return null;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
if (!otherProps.screenData) {
|
|
24
|
-
otherProps.screenData = river;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
22
|
return (
|
|
28
23
|
<Component
|
|
29
24
|
screenId={screenId}
|
|
30
25
|
river={river}
|
|
31
26
|
key={isTV() ? pathname : undefined}
|
|
32
27
|
{...otherProps}
|
|
28
|
+
screenData={otherProps.screenData || river}
|
|
33
29
|
/>
|
|
34
30
|
);
|
|
35
31
|
};
|
|
36
32
|
|
|
33
|
+
RiverWithData.displayName = `RiverWithData(${Component.displayName || Component.name})`;
|
|
34
|
+
|
|
37
35
|
return RiverWithData;
|
|
38
36
|
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/// <reference types="@applicaster/applicaster-types" />
|
|
2
2
|
/// <reference types="@applicaster/zapp-react-native-ui-components" />
|
|
3
3
|
import React, { useEffect, useMemo } from "react";
|
|
4
|
-
import { localStorage } from "@applicaster/zapp-react-native-bridge/ZappStorage/LocalStorage";
|
|
5
4
|
|
|
6
5
|
import * as R from "ramda";
|
|
7
6
|
import { Platform } from "react-native";
|
|
8
7
|
import Url from "url";
|
|
9
|
-
import { ENDPOINT_TAGS } from "@applicaster/zapp-react-native-utils/types";
|
|
10
8
|
import { favoritesListener } from "@applicaster/zapp-react-native-bridge/Favorites";
|
|
11
9
|
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
|
|
12
10
|
import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
|
|
@@ -21,12 +19,7 @@ import { ZappPipesSearchContext } from "@applicaster/zapp-react-native-ui-compon
|
|
|
21
19
|
import { useScreenContext } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
|
|
22
20
|
|
|
23
21
|
import { isVerticalListOrGrid } from "./utils";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
findEndpointForURL,
|
|
27
|
-
HTTP_METHODS,
|
|
28
|
-
} from "@applicaster/zapp-pipes-v2-client";
|
|
29
|
-
import { getNamespaceAndKey } from "@applicaster/zapp-react-native-utils/appUtils/contextKeysManager/utils";
|
|
22
|
+
import { subscribeForUrlContextKeyChanges } from "@applicaster/zapp-pipes-v2-client";
|
|
30
23
|
|
|
31
24
|
type Props = {
|
|
32
25
|
component: ZappUIComponent;
|
|
@@ -237,7 +230,8 @@ export function zappPipesDataConnector(
|
|
|
237
230
|
const entryContext =
|
|
238
231
|
(shouldUseNestedContext && screenContextData?.nested?.entry
|
|
239
232
|
? screenContextData?.nested?.entry
|
|
240
|
-
: screenContextData?.entry) ||
|
|
233
|
+
: (screenContextData?.entry?.payload ?? screenContextData?.entry)) ||
|
|
234
|
+
{};
|
|
241
235
|
|
|
242
236
|
const screenContext =
|
|
243
237
|
(shouldUseNestedContext && screenContextData?.nested?.screen
|
|
@@ -300,27 +294,7 @@ export function zappPipesDataConnector(
|
|
|
300
294
|
return addListener(reloadData);
|
|
301
295
|
}
|
|
302
296
|
} else {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
const endpointURL = findEndpointForURL(
|
|
306
|
-
dataSourceUrl,
|
|
307
|
-
pipesEndpoints,
|
|
308
|
-
HTTP_METHODS.GET
|
|
309
|
-
);
|
|
310
|
-
|
|
311
|
-
const endpoint = pipesEndpoints?.[endpointURL];
|
|
312
|
-
|
|
313
|
-
if (endpoint?.tags?.includes(ENDPOINT_TAGS.observe_storage)) {
|
|
314
|
-
const subscriptions: (() => void)[] = endpoint.context_obj.map(
|
|
315
|
-
(data: Record<string, any>) => {
|
|
316
|
-
const { namespace, key } = getNamespaceAndKey(data.key);
|
|
317
|
-
|
|
318
|
-
return localStorage.addListener({ key, namespace }, reloadData);
|
|
319
|
-
}
|
|
320
|
-
);
|
|
321
|
-
|
|
322
|
-
return () => subscriptions.forEach((listener) => listener());
|
|
323
|
-
}
|
|
297
|
+
return subscribeForUrlContextKeyChanges(dataSourceUrl, {}, reloadData);
|
|
324
298
|
}
|
|
325
299
|
}, [dataSourceUrl, reloadData]);
|
|
326
300
|
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-native-ui-components",
|
|
3
|
-
"version": "13.0.0-alpha.
|
|
3
|
+
"version": "13.0.0-alpha.2082004638",
|
|
4
4
|
"description": "Applicaster Zapp React Native ui components for the Quick Brick App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"test": "jest -w=2",
|
|
9
8
|
"build": "echo skipping hybrid typescript build for now"
|
|
10
9
|
},
|
|
11
10
|
"publishConfig": {
|
|
@@ -29,15 +28,13 @@
|
|
|
29
28
|
},
|
|
30
29
|
"homepage": "https://github.com/applicaster/quickbrick#readme",
|
|
31
30
|
"devDependencies": {
|
|
32
|
-
"@types/react": "17.0.2",
|
|
33
|
-
"@types/react-native": "0.69.6",
|
|
34
31
|
"redux-mock-store": "^1.5.3"
|
|
35
32
|
},
|
|
36
33
|
"dependencies": {
|
|
37
|
-
"@applicaster/applicaster-types": "13.0.0-alpha.
|
|
38
|
-
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.
|
|
39
|
-
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.
|
|
40
|
-
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.
|
|
34
|
+
"@applicaster/applicaster-types": "13.0.0-alpha.2082004638",
|
|
35
|
+
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.2082004638",
|
|
36
|
+
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.2082004638",
|
|
37
|
+
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.2082004638",
|
|
41
38
|
"promise": "^8.3.0",
|
|
42
39
|
"react-router-native": "^5.1.2",
|
|
43
40
|
"url": "^0.11.0",
|
|
@@ -46,7 +43,6 @@
|
|
|
46
43
|
"peerDependencies": {
|
|
47
44
|
"@applicaster/zapp-pipes-v2-client": "*",
|
|
48
45
|
"@react-native-community/netinfo": "*",
|
|
49
|
-
"@types/node": "*",
|
|
50
46
|
"immer": "*",
|
|
51
47
|
"react": "*",
|
|
52
48
|
"react-native": "*",
|
package/tsconfig.json
CHANGED