@applicaster/zapp-react-native-ui-components 15.1.0-alpha.2915689988 → 15.1.0-alpha.4285753931

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,38 @@
1
+ import * as React from "react";
2
+ import { StyleSheet, View } from "react-native";
3
+
4
+ const styles = StyleSheet.create({
5
+ row: { flexDirection: "row" },
6
+ basis: {
7
+ maxWidth: "100%",
8
+ flexBasis: "100%",
9
+ },
10
+ });
11
+
12
+ type Props = {
13
+ children: React.ReactNode;
14
+ };
15
+
16
+ /**
17
+ * Constrains its child to exactly the available parent width.
18
+ *
19
+ * UI components such as Hero and List render their items inside a parent
20
+ * `ScrollView` (e.g. when wrapped by tabs). A child placed directly in a
21
+ * scroll container can size itself to its own content rather than to the
22
+ * viewport, which causes items to be measured at a stale width and resize
23
+ * unexpectedly after layout changes such as device rotation.
24
+ *
25
+ * Wrapping the content in a `flexDirection: "row"` parent with a
26
+ * `flexBasis: "100%"` / `maxWidth: "100%"` child forces the child to
27
+ * re-derive its width from the parent on every layout pass instead of
28
+ * caching a measured pixel width, keeping it full-width and stable.
29
+ *
30
+ * @param children - The content to render at full parent width.
31
+ */
32
+ export function FullWidthRow({ children }: Props) {
33
+ return (
34
+ <View style={styles.row}>
35
+ <View style={styles.basis}>{children}</View>
36
+ </View>
37
+ );
38
+ }
@@ -10,11 +10,6 @@ exports[`componentsMap renders renders components map correctly 1`] = `
10
10
  >
11
11
  <View
12
12
  onLayout={[Function]}
13
- style={
14
- {
15
- "flex": 1,
16
- }
17
- }
18
13
  >
19
14
  <RCTScrollView
20
15
  ListFooterComponent={
@@ -166,11 +161,6 @@ exports[`componentsMap renders renders components map correctly 1`] = `
166
161
  >
167
162
  <View
168
163
  onLayout={[Function]}
169
- style={
170
- {
171
- "flex": 1,
172
- }
173
- }
174
164
  >
175
165
  <View />
176
166
  </View>
@@ -182,11 +172,6 @@ exports[`componentsMap renders renders components map correctly 1`] = `
182
172
  >
183
173
  <View
184
174
  onLayout={[Function]}
185
- style={
186
- {
187
- "flex": 1,
188
- }
189
- }
190
175
  />
191
176
  </View>
192
177
  <View
@@ -1,11 +1,11 @@
1
1
  import React from "react";
2
- import { StyleSheet } from "react-native";
2
+ import { StyleSheet, SafeAreaView as RNSafeAreaView } from "react-native";
3
3
  import { SafeAreaView } from "react-native-safe-area-context";
4
-
5
4
  import { useIsRTL } from "@applicaster/zapp-react-native-utils/localizationUtils";
6
5
  import CloseButton from "./Buttons/CloseButton";
7
6
  import BackButton from "./Buttons/BackButton";
8
7
  import BarTitle from "./BarTitle";
8
+ import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
9
9
 
10
10
  type Props = {
11
11
  screenStyles: {
@@ -24,6 +24,11 @@ const defaultState: NavBarState = {
24
24
  title: "",
25
25
  };
26
26
 
27
+ const SafeAreaViewPlatform = platformSelect({
28
+ ios: RNSafeAreaView,
29
+ android: SafeAreaView,
30
+ });
31
+
27
32
  const BarView = ({ screenStyles, barState = defaultState }: Props) => {
28
33
  const isRTL = useIsRTL();
29
34
 
@@ -45,7 +50,7 @@ const BarView = ({ screenStyles, barState = defaultState }: Props) => {
45
50
  );
46
51
 
47
52
  return (
48
- <SafeAreaView
53
+ <SafeAreaViewPlatform
49
54
  edges={["top", "left", "right"]}
50
55
  style={[style.view, isRTL ? style.rtlStyle : {}]}
51
56
  testID="BarView-safeAreaView"
@@ -53,7 +58,7 @@ const BarView = ({ screenStyles, barState = defaultState }: Props) => {
53
58
  {backButton}
54
59
  <BarTitle title={barState.title} screenStyles={screenStyles} />
55
60
  {closeButton}
56
- </SafeAreaView>
61
+ </SafeAreaViewPlatform>
57
62
  );
58
63
  };
59
64
 
@@ -1,6 +1,7 @@
1
1
  import { create, useStore } from "zustand";
2
2
  import { produce } from "immer";
3
3
  import { useCallback, useMemo } from "react";
4
+ import { last } from "@applicaster/zapp-react-native-utils/utils";
4
5
 
5
6
  type Dimensions = {
6
7
  width: Option<number>;
@@ -10,14 +11,17 @@ type Dimensions = {
10
11
  type DimensionsState = {
11
12
  dimensions: Record<string, Dimensions>;
12
13
  setCachedDimensions: (id: string, dimensions: Dimensions) => void;
14
+ ids: string[];
13
15
  };
14
16
 
15
17
  const dimensionsStore = create<DimensionsState>((set) => ({
16
18
  dimensions: {},
19
+ ids: [],
17
20
  setCachedDimensions: (id, dimensions) =>
18
21
  set(
19
22
  produce((draft) => {
20
23
  draft.dimensions[id] = dimensions;
24
+ draft.ids.push(id);
21
25
  })
22
26
  ),
23
27
  }));
@@ -28,7 +32,7 @@ const initialDimensions = () => ({
28
32
  });
29
33
 
30
34
  export const useCachedDimensions = (id: string) => {
31
- const { dimensions, setCachedDimensions } = useStore(
35
+ const { dimensions, setCachedDimensions, ids } = useStore(
32
36
  dimensionsStore
33
37
  ) as DimensionsState;
34
38
 
@@ -40,11 +44,22 @@ export const useCachedDimensions = (id: string) => {
40
44
  setCachedDimensions(id, newDimensions);
41
45
  }, []);
42
46
 
47
+ const getLastCachedDimensions = useCallback(() => {
48
+ const previousId = last(ids);
49
+
50
+ if (!previousId) {
51
+ return undefined;
52
+ }
53
+
54
+ return dimensions[previousId];
55
+ }, [dimensions, ids]);
56
+
43
57
  return useMemo(
44
58
  () => ({
45
59
  getCachedDimensions,
46
60
  setCachedDimensions: handleSetCachedDimensions,
61
+ getLastCachedDimensions,
47
62
  }),
48
- [getCachedDimensions, handleSetCachedDimensions]
63
+ [getCachedDimensions, handleSetCachedDimensions, getLastCachedDimensions]
49
64
  );
50
65
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-ui-components",
3
- "version": "15.1.0-alpha.2915689988",
3
+ "version": "15.1.0-alpha.4285753931",
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",
@@ -28,10 +28,10 @@
28
28
  },
29
29
  "homepage": "https://github.com/applicaster/quickbrick#readme",
30
30
  "dependencies": {
31
- "@applicaster/applicaster-types": "15.1.0-alpha.2915689988",
32
- "@applicaster/zapp-react-native-bridge": "15.1.0-alpha.2915689988",
33
- "@applicaster/zapp-react-native-redux": "15.1.0-alpha.2915689988",
34
- "@applicaster/zapp-react-native-utils": "15.1.0-alpha.2915689988",
31
+ "@applicaster/applicaster-types": "15.1.0-alpha.4285753931",
32
+ "@applicaster/zapp-react-native-bridge": "15.1.0-alpha.4285753931",
33
+ "@applicaster/zapp-react-native-redux": "15.1.0-alpha.4285753931",
34
+ "@applicaster/zapp-react-native-utils": "15.1.0-alpha.4285753931",
35
35
  "fast-json-stable-stringify": "^2.1.0",
36
36
  "promise": "^8.3.0",
37
37
  "url": "^0.11.0",