@applicaster/zapp-react-native-ui-components 13.0.8-alpha.1940580104 → 13.0.8-alpha.2505844239

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.
@@ -15,7 +15,6 @@ import { AccessibilityManager } from "@applicaster/zapp-react-native-utils/appUt
15
15
  import { styles } from "./styles";
16
16
 
17
17
  type Props = {
18
- dataLength: number;
19
18
  item: ZappEntry;
20
19
  index: number;
21
20
  shouldScrollHorizontally: (arg1: [any]) => boolean | null | undefined;
@@ -71,8 +70,6 @@ type State = {
71
70
  };
72
71
 
73
72
  export class CellComponent extends React.Component<Props, State> {
74
- accessibilityManager: AccessibilityManager;
75
-
76
73
  constructor(props) {
77
74
  super(props);
78
75
  this.onPress = this.onPress.bind(this);
@@ -82,13 +79,10 @@ export class CellComponent extends React.Component<Props, State> {
82
79
  this.hasReceivedFocus = this.hasReceivedFocus.bind(this);
83
80
  this.scrollVertically = this.scrollVertically.bind(this);
84
81
  this.scrollToIndex = this.scrollToIndex.bind(this);
85
- this.handleAccessibilityFocus = this.handleAccessibilityFocus.bind(this);
86
82
 
87
83
  this.state = {
88
84
  hasFocusableInside: props.CellRenderer.hasFocusableInside?.(props.item),
89
85
  };
90
-
91
- this.accessibilityManager = AccessibilityManager.getInstance();
92
86
  }
93
87
 
94
88
  setScreenLayout(componentAnchorPointY, screenLayout) {
@@ -189,30 +183,6 @@ export class CellComponent extends React.Component<Props, State> {
189
183
  return !isFocusable ? false : focused || focusableFocused;
190
184
  }
191
185
 
192
- handleAccessibilityFocus(item, index, dataLength) {
193
- const accessibilityTitle =
194
- item?.extensions?.accessibility?.label || item?.title;
195
-
196
- const accessibilityHint = item?.extensions?.accessibility?.hint;
197
-
198
- // For loop scrolling, calculate the correct logical index
199
- const logicalIndex = dataLength ? index % dataLength : index;
200
-
201
- const positionLabel = dataLength
202
- ? `item ${logicalIndex + 1} of ${dataLength}`
203
- : "";
204
-
205
- accessibilityTitle &&
206
- this.accessibilityManager.addHeading(accessibilityTitle);
207
-
208
- accessibilityHint &&
209
- this.accessibilityManager.addHeading(accessibilityHint);
210
-
211
- this.accessibilityManager.readText({
212
- text: `${positionLabel}`,
213
- });
214
- }
215
-
216
186
  componentDidUpdate(prevProps: Readonly<Props>) {
217
187
  if (prevProps.item !== this.props.item) {
218
188
  this.setState({
@@ -227,7 +197,6 @@ export class CellComponent extends React.Component<Props, State> {
227
197
  const {
228
198
  item,
229
199
  index,
230
- dataLength,
231
200
  component,
232
201
  offsetUpdater,
233
202
  preferredFocus,
@@ -288,15 +257,22 @@ export class CellComponent extends React.Component<Props, State> {
288
257
  style={styles.baseCell}
289
258
  isFocusable={isFocusable}
290
259
  skipFocusManagerRegistration={skipFocusManagerRegistration}
291
- {...this.accessibilityManager.getButtonAccessibilityProps(
292
- item?.extensions?.accessibility?.label || item?.title
293
- )}
294
260
  >
295
261
  {(focused, event) => {
296
262
  const isFocused = this.isCellFocused(focused);
297
263
 
298
264
  if (isFocused) {
299
- this.handleAccessibilityFocus(item, index, dataLength);
265
+ const accessibilityManager = AccessibilityManager.getInstance();
266
+
267
+ const accessibilityTitle =
268
+ item?.extensions?.accessibility?.label || item?.title || "";
269
+
270
+ const accessibilityHint =
271
+ item?.extensions?.accessibility?.hint || "";
272
+
273
+ accessibilityManager.readText({
274
+ text: `${accessibilityTitle} ${accessibilityHint}`,
275
+ });
300
276
  }
301
277
 
302
278
  return (
@@ -5,7 +5,6 @@ import { BaseFocusable } from "../BaseFocusable";
5
5
  import { focusManager } from "@applicaster/zapp-react-native-utils/appUtils/focusManager";
6
6
  import { LONG_KEY_PRESS_TIMEOUT } from "@applicaster/quick-brick-core/const";
7
7
  import { withFocusableContext } from "../../Contexts/FocusableGroupContext/withFocusableContext";
8
- import { AccessibilityManager } from "@applicaster/zapp-react-native-utils/appUtils/accessibilityManager";
9
8
 
10
9
  type Props = {
11
10
  initialFocus?: boolean;
@@ -29,7 +28,6 @@ class Focusable extends BaseFocusable<Props> {
29
28
  isGroup: boolean;
30
29
  mouse: boolean;
31
30
  longPressTimeout = null;
32
- accessibilityManager: AccessibilityManager;
33
31
 
34
32
  constructor(props) {
35
33
  super(props);
@@ -44,8 +42,6 @@ class Focusable extends BaseFocusable<Props> {
44
42
  this.resetLongPressTimeout = this.resetLongPressTimeout.bind(this);
45
43
  this.longPress = this.longPress.bind(this);
46
44
  this.press = this.press.bind(this);
47
-
48
- this.accessibilityManager = AccessibilityManager.getInstance();
49
45
  }
50
46
 
51
47
  /**
@@ -132,9 +128,6 @@ class Focusable extends BaseFocusable<Props> {
132
128
  const id = this.getId();
133
129
  const focusableId = `focusable-${id}`;
134
130
 
135
- const accessibilityProps =
136
- this.accessibilityManager.getWebAccessibilityProps(this.props);
137
-
138
131
  return (
139
132
  <div
140
133
  id={focusableId}
@@ -147,7 +140,6 @@ class Focusable extends BaseFocusable<Props> {
147
140
  data-testid={focusableId}
148
141
  focused-teststate={focused ? "focused" : "default"}
149
142
  style={style}
150
- {...accessibilityProps}
151
143
  >
152
144
  {children(focused, { mouse: this.mouse })}
153
145
  </div>
@@ -47,7 +47,7 @@ export function FocusableView({ style, children, item, ...otherProps }: Props) {
47
47
 
48
48
  const accessibilityManager = useAccessibilityManager({});
49
49
 
50
- const { heading = "", ttsLabel = "" } =
50
+ const { ttsLabel = "" } =
51
51
  actionContext?.initialEntryState(item)?.getAccessibility?.(item) || {};
52
52
 
53
53
  const onPress = (event) => {
@@ -95,12 +95,10 @@ export function FocusableView({ style, children, item, ...otherProps }: Props) {
95
95
  });
96
96
  });
97
97
 
98
- if (heading && ttsLabel) {
99
- accessibilityManager.addHeading(heading);
100
- }
101
-
102
98
  if (ttsLabel) {
103
- accessibilityManager.readText({ text: `${ttsLabel} button` });
99
+ accessibilityManager.readText({
100
+ text: ttsLabel,
101
+ });
104
102
  }
105
103
  };
106
104
 
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import * as R from "ramda";
3
- import { View, StyleSheet, FlatList } from "react-native";
3
+ import { FlatList, StyleSheet, View } from "react-native";
4
4
  import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
5
5
  import { RiverItem } from "../RiverItem";
6
6
  import { RiverFooter } from "../RiverFooter";
@@ -9,8 +9,8 @@ import { useScreenConfiguration } from "../useScreenConfiguration";
9
9
  import { RefreshControl } from "../RefreshControl";
10
10
  import { ifEmptyUseFallback } from "@applicaster/zapp-react-native-utils/cellUtils";
11
11
  import {
12
- useProfilerLogging,
13
12
  usePipesCacheReset,
13
+ useProfilerLogging,
14
14
  } from "@applicaster/zapp-react-native-utils/reactHooks";
15
15
  import { useLoadingState } from "./hooks/useLoadingState";
16
16
  import { ViewportTracker } from "../../Viewport";
@@ -25,6 +25,8 @@ import { useScreenContextV2 } from "@applicaster/zapp-react-native-utils/reactHo
25
25
  import { useShallow } from "zustand/react/shallow";
26
26
 
27
27
  import { isAndroidPlatform } from "@applicaster/zapp-react-native-utils/reactUtils";
28
+ import { ComponentsMapHeightContext } from "./ContextProviders/ComponentsMapHeightContext";
29
+ import { ComponentsMapRefContext } from "./ContextProviders/ComponentsMapRefContext";
28
30
 
29
31
  const isAndroid = isAndroidPlatform();
30
32
 
@@ -70,6 +72,7 @@ function ComponentsMapComponent(props: Props) {
70
72
  } = props;
71
73
 
72
74
  const flatListRef = React.useRef<FlatList | null>(null);
75
+ const flatListWrapperRef = React.useRef<View | null>(null);
73
76
  const screenConfig = useScreenConfiguration(riverId);
74
77
  const screenData = useScreenData(riverId);
75
78
  const pullToRefreshEnabled = screenData?.rules?.pull_to_refresh_enabled;
@@ -265,48 +268,57 @@ function ComponentsMapComponent(props: Props) {
265
268
  // The Screen Picker in Mobile is completly different than the TV
266
269
  // so the various offsets / margins in TV do not apply here.
267
270
  return (
268
- <View style={styles.container}>
269
- <ScreenLoadingMeasurements
270
- riverId={riverId}
271
- numberOfComponents={riverComponents.length}
272
- >
273
- <ViewportTracker>
274
- <FlatList
275
- ref={(ref) => {
276
- flatListRef.current = ref;
277
- }}
278
- // Fix for WebView rerender crashes on Android API 28+
279
- // https://github.com/react-native-webview/react-native-webview/issues/1915#issuecomment-964035468
280
- overScrollMode={isAndroid ? "never" : "auto"}
281
- scrollIndicatorInsets={scrollIndicatorInsets}
282
- extraData={feed}
283
- stickyHeaderIndices={stickyHeaderIndices}
284
- removeClippedSubviews={isAndroid}
285
- onLayout={handleOnLayout}
286
- initialNumToRender={3}
287
- maxToRenderPerBatch={10}
288
- windowSize={12}
289
- listKey={riverId}
290
- keyExtractor={keyExtractor}
291
- renderItem={renderRiverItem}
292
- data={riverComponents}
293
- contentContainerStyle={contentContainerStyle}
294
- ListFooterComponent={
295
- <RiverFooter
296
- flatListHeight={flatListHeight}
297
- loadingState={loadingState}
271
+ <View
272
+ style={styles.container}
273
+ ref={(ref) => {
274
+ flatListWrapperRef.current = ref;
275
+ }}
276
+ >
277
+ <ComponentsMapHeightContext.Provider value={flatListHeight}>
278
+ <ComponentsMapRefContext.Provider value={flatListWrapperRef}>
279
+ <ScreenLoadingMeasurements
280
+ riverId={riverId}
281
+ numberOfComponents={riverComponents.length}
282
+ >
283
+ <ViewportTracker>
284
+ <FlatList
285
+ ref={(ref) => {
286
+ flatListRef.current = ref;
287
+ }}
288
+ // Fix for WebView rerender crashes on Android API 28+
289
+ // https://github.com/react-native-webview/react-native-webview/issues/1915#issuecomment-964035468
290
+ overScrollMode={isAndroid ? "never" : "auto"}
291
+ scrollIndicatorInsets={scrollIndicatorInsets}
292
+ extraData={feed}
293
+ stickyHeaderIndices={stickyHeaderIndices}
294
+ removeClippedSubviews={isAndroid}
295
+ onLayout={handleOnLayout}
296
+ initialNumToRender={3}
297
+ maxToRenderPerBatch={10}
298
+ windowSize={12}
299
+ listKey={riverId}
300
+ keyExtractor={keyExtractor}
301
+ renderItem={renderRiverItem}
302
+ data={riverComponents}
303
+ contentContainerStyle={contentContainerStyle}
304
+ ListFooterComponent={
305
+ <RiverFooter
306
+ flatListHeight={flatListHeight}
307
+ loadingState={loadingState}
308
+ />
309
+ }
310
+ refreshControl={refreshControl}
311
+ onScrollBeginDrag={onScrollBeginDrag}
312
+ onScroll={onScroll}
313
+ onMomentumScrollEnd={_onMomentumScrollEnd}
314
+ onScrollEndDrag={_onScrollEndDrag}
315
+ scrollEventThrottle={16}
316
+ {...scrollViewExtraProps}
298
317
  />
299
- }
300
- refreshControl={refreshControl}
301
- onScrollBeginDrag={onScrollBeginDrag}
302
- onScroll={onScroll}
303
- onMomentumScrollEnd={_onMomentumScrollEnd}
304
- onScrollEndDrag={_onScrollEndDrag}
305
- scrollEventThrottle={16}
306
- {...scrollViewExtraProps}
307
- />
308
- </ViewportTracker>
309
- </ScreenLoadingMeasurements>
318
+ </ViewportTracker>
319
+ </ScreenLoadingMeasurements>
320
+ </ComponentsMapRefContext.Provider>
321
+ </ComponentsMapHeightContext.Provider>
310
322
  </View>
311
323
  );
312
324
  }
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+
3
+ export const ComponentsMapHeightContext = React.createContext<number | null>(
4
+ null
5
+ );
6
+
7
+ export const useComponentsMapHeight = () =>
8
+ React.useContext(ComponentsMapHeightContext);
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import { View } from "react-native";
3
+
4
+ export const ComponentsMapRefContext =
5
+ React.createContext<React.RefObject<View | null> | null>(null);
6
+
7
+ export const useComponentsMapRef = () =>
8
+ React.useContext(ComponentsMapRefContext);
@@ -2,19 +2,6 @@
2
2
 
3
3
  exports[`<TextInputTv /> renders 1`] = `
4
4
  <input
5
- accessibilityProps={
6
- {
7
- "accessibilityHint": "Enter text into Search",
8
- "accessibilityLabel": "Search",
9
- "accessibilityRole": "text",
10
- "accessible": true,
11
- "aria-description": "Enter text into Search",
12
- "aria-label": "Search",
13
- "aria-role": "text",
14
- "role": "text",
15
- "tabindex": 0,
16
- }
17
- }
18
5
  testID="TextInput-tv"
19
6
  />
20
7
  `;
@@ -4,7 +4,6 @@ import { Appearance, Platform, StyleSheet, TextInput } from "react-native";
4
4
  import { isFunction } from "@applicaster/zapp-react-native-utils/functionUtils";
5
5
  import { isWeb } from "@applicaster/zapp-react-native-utils/reactUtils";
6
6
  import { useIsRTL } from "@applicaster/zapp-react-native-utils/localizationUtils";
7
- import { useAccessibilityManager } from "@applicaster/zapp-react-native-utils/appUtils/accessibilityManager/hooks";
8
7
 
9
8
  type Props = Partial<{
10
9
  style: any;
@@ -43,8 +42,6 @@ function TextInputTV(props: Props, ref) {
43
42
  const [colorScheme, setColorScheme] = useState(getInitialColorScheme());
44
43
  const isRTL = useIsRTL();
45
44
 
46
- const accessibilityManager = useAccessibilityManager({});
47
-
48
45
  const onColorChange = useCallback(
49
46
  ({ colorScheme: color }) => {
50
47
  if (color !== colorScheme) {
@@ -156,13 +153,6 @@ function TextInputTV(props: Props, ref) {
156
153
  ])
157
154
  )(props);
158
155
 
159
- const getAccessibilityProps = () => {
160
- return {
161
- accessibilityProps:
162
- accessibilityManager.getInputAccessibilityProps("Search"),
163
- };
164
- };
165
-
166
156
  const inputProps = {
167
157
  ...getProps(),
168
158
  ...getStyle(),
@@ -171,7 +161,6 @@ function TextInputTV(props: Props, ref) {
171
161
  ...getSecureTextEntry(),
172
162
  ...getOnEndEditing(),
173
163
  ...getOnPress(),
174
- ...getAccessibilityProps(),
175
164
  };
176
165
 
177
166
  if (
@@ -372,7 +372,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
372
372
  maxDeltaY={lastSnap - modalSnapPoints[0]}
373
373
  numberOfTaps={1}
374
374
  >
375
- <View pointerEvents="box-none">
375
+ <View pointerEvents="box-none" style={generalStyles.container}>
376
376
  <PanGestureHandler
377
377
  enabled={isEnablePanGesture}
378
378
  ref={panHandlerRef}
@@ -382,7 +382,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
382
382
  onHandlerStateChange={onHandlerStateChange}
383
383
  activeOffsetY={[-5, 5]}
384
384
  >
385
- <Animated.View>
385
+ <Animated.View style={generalStyles.container}>
386
386
  <NativeViewGestureHandler
387
387
  ref={scrollRef}
388
388
  waitFor={tapHandlerRef}
@@ -397,6 +397,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
397
397
  onMomentumScrollEnd={onMomentumScrollEnd}
398
398
  scrollEventThrottle={1}
399
399
  showsVerticalScrollIndicator={false}
400
+ contentContainerStyle={generalStyles.container}
400
401
  >
401
402
  {children}
402
403
  </Animated.ScrollView>
@@ -4,8 +4,8 @@ import {
4
4
  Dimensions,
5
5
  Easing,
6
6
  StyleProp,
7
- ViewStyle,
8
7
  StyleSheet,
8
+ ViewStyle,
9
9
  } from "react-native";
10
10
  import { useTargetScreenData } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
11
11
  import { ComponentsMap } from "@applicaster/zapp-react-native-ui-components/Components/River/ComponentsMap";
@@ -13,6 +13,7 @@ import { useSafeAreaInsets } from "react-native-safe-area-context";
13
13
  import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
14
14
 
15
15
  const { width: SCREEN_WIDTH } = Dimensions.get("screen");
16
+ const flex1 = { flex: 1 };
16
17
 
17
18
  type Configuration = {
18
19
  [key: string]: any;
@@ -50,7 +51,7 @@ export const PlayerDetails = ({
50
51
  const extraTabletStyles = !isAudioPlayer
51
52
  ? isTabletLandscape
52
53
  ? { marginTop: -insets.top, paddingTop: insets.top + 20 }
53
- : { marginTop: -8, paddingTop: -8 }
54
+ : {}
54
55
  : {};
55
56
 
56
57
  // Animation setup
@@ -93,6 +94,7 @@ export const PlayerDetails = ({
93
94
  transform: [{ translateY }],
94
95
  opacity,
95
96
  },
97
+ flex1,
96
98
  {
97
99
  // workaround for avoid wrong text-height after going back to portrait rotation
98
100
  // we don't see this view in landscape mode, so we are able to use fixed width from portrait mode
@@ -107,6 +109,7 @@ export const PlayerDetails = ({
107
109
  riverId={screenData.id}
108
110
  feed={screenData?.data?.source}
109
111
  riverComponents={screenData.ui_components}
112
+ isScreenWrappedInContainer
110
113
  />
111
114
  ) : null}
112
115
  </Animated.View>
@@ -238,7 +238,6 @@ const PlayerWrapperComponent = (props: Props) => {
238
238
  </AnimatedVideoPlayerComponent>
239
239
  </AnimationComponent>
240
240
  </View>
241
-
242
241
  <AnimatedScrollModal>
243
242
  {isShowPlayerDetails ? (
244
243
  <AnimationComponent
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-ui-components",
3
- "version": "13.0.8-alpha.1940580104",
3
+ "version": "13.0.8-alpha.2505844239",
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",
@@ -31,10 +31,10 @@
31
31
  "redux-mock-store": "^1.5.3"
32
32
  },
33
33
  "dependencies": {
34
- "@applicaster/applicaster-types": "13.0.8-alpha.1940580104",
35
- "@applicaster/zapp-react-native-bridge": "13.0.8-alpha.1940580104",
36
- "@applicaster/zapp-react-native-redux": "13.0.8-alpha.1940580104",
37
- "@applicaster/zapp-react-native-utils": "13.0.8-alpha.1940580104",
34
+ "@applicaster/applicaster-types": "13.0.8-alpha.2505844239",
35
+ "@applicaster/zapp-react-native-bridge": "13.0.8-alpha.2505844239",
36
+ "@applicaster/zapp-react-native-redux": "13.0.8-alpha.2505844239",
37
+ "@applicaster/zapp-react-native-utils": "13.0.8-alpha.2505844239",
38
38
  "promise": "^8.3.0",
39
39
  "react-router-native": "^5.1.2",
40
40
  "url": "^0.11.0",