@planningcenter/chat-react-native 4.4.1-qa-staging.40 → 4.4.1-qa-staging.41

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.
@@ -1 +1 @@
1
- {"version":3,"file":"screenLayout.d.ts","sourceRoot":"","sources":["../../src/navigation/screenLayout.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAA;CAAE,2CAY1E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAA;CAAE,2CAQ5F"}
1
+ {"version":3,"file":"screenLayout.d.ts","sourceRoot":"","sources":["../../src/navigation/screenLayout.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAA;CAAE,2CAa1E;AAED,wBAAgB,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAA;CAAE,2CAQ5F"}
@@ -2,7 +2,7 @@ import { c as _c } from "react/compiler-runtime";
2
2
  import { useRoute } from '@react-navigation/native';
3
3
  import React from 'react';
4
4
  import { Suspense } from 'react';
5
- import { StyleSheet, View } from 'react-native';
5
+ import { StyleSheet, useWindowDimensions, View } from 'react-native';
6
6
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
7
7
  import { DefaultLoading } from '../components/page/loading';
8
8
  import { PageErrorBoundary } from '../components/page/page_error_boundary';
@@ -10,13 +10,16 @@ import { ChatAccessGate } from './chat_access_gate';
10
10
  import { PAGE_ERROR_FALLBACKS } from './page_error_fallbacks';
11
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
12
  export function ScreenLayout(t0) {
13
- const $ = _c(10);
13
+ const $ = _c(11);
14
14
  const {
15
15
  children
16
16
  } = t0;
17
17
  const route = useRoute();
18
18
  const genericFallback = PAGE_ERROR_FALLBACKS[route.name];
19
19
  const styles = useStyles();
20
+ const {
21
+ fontScale
22
+ } = useWindowDimensions();
20
23
  let t1;
21
24
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
22
25
  t1 = /*#__PURE__*/_jsx(DefaultLoading, {});
@@ -36,30 +39,31 @@ export function ScreenLayout(t0) {
36
39
  t2 = $[2];
37
40
  }
38
41
  let t3;
39
- if ($[3] !== styles.screen || $[4] !== t2) {
42
+ if ($[3] !== fontScale || $[4] !== styles.screen || $[5] !== t2) {
40
43
  t3 = /*#__PURE__*/_jsx(View, {
41
44
  style: styles.screen,
42
45
  children: t2
43
- });
44
- $[3] = styles.screen;
45
- $[4] = t2;
46
- $[5] = t3;
46
+ }, fontScale);
47
+ $[3] = fontScale;
48
+ $[4] = styles.screen;
49
+ $[5] = t2;
50
+ $[6] = t3;
47
51
  } else {
48
- t3 = $[5];
52
+ t3 = $[6];
49
53
  }
50
54
  let t4;
51
- if ($[6] !== genericFallback || $[7] !== route.name || $[8] !== t3) {
55
+ if ($[7] !== genericFallback || $[8] !== route.name || $[9] !== t3) {
52
56
  t4 = /*#__PURE__*/_jsx(PageErrorBoundary, {
53
57
  screenName: route.name,
54
58
  genericFallback: genericFallback,
55
59
  children: t3
56
60
  });
57
- $[6] = genericFallback;
58
- $[7] = route.name;
59
- $[8] = t3;
60
- $[9] = t4;
61
+ $[7] = genericFallback;
62
+ $[8] = route.name;
63
+ $[9] = t3;
64
+ $[10] = t4;
61
65
  } else {
62
- t4 = $[9];
66
+ t4 = $[10];
63
67
  }
64
68
  return t4;
65
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"screenLayout.js","names":["useRoute","React","Suspense","StyleSheet","View","useSafeAreaInsets","DefaultLoading","PageErrorBoundary","ChatAccessGate","PAGE_ERROR_FALLBACKS","jsx","_jsx","ScreenLayout","t0","$","_c","children","route","genericFallback","name","styles","useStyles","t1","Symbol","for","t2","fallback","t3","screen","style","t4","screenName","ScreenLayoutWithChatAccessGate","insets","left","right","create","flex","paddingLeft","paddingRight"],"sources":["../../src/navigation/screenLayout.tsx"],"sourcesContent":["import { useRoute } from '@react-navigation/native'\nimport React from 'react'\nimport { Suspense } from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { DefaultLoading } from '../components/page/loading'\nimport { PageErrorBoundary } from '../components/page/page_error_boundary'\nimport { ChatAccessGate } from './chat_access_gate'\nimport { PAGE_ERROR_FALLBACKS } from './page_error_fallbacks'\n\nexport function ScreenLayout({ children }: { children: React.ReactElement }) {\n const route = useRoute()\n const genericFallback = PAGE_ERROR_FALLBACKS[route.name as keyof typeof PAGE_ERROR_FALLBACKS]\n const styles = useStyles()\n\n return (\n <PageErrorBoundary screenName={route.name} genericFallback={genericFallback}>\n <View style={styles.screen}>\n <Suspense fallback={<DefaultLoading />}>{children}</Suspense>\n </View>\n </PageErrorBoundary>\n )\n}\n\nexport function ScreenLayoutWithChatAccessGate({ children }: { children: React.ReactElement }) {\n return (\n <ScreenLayout>\n <ChatAccessGate>\n <Suspense fallback={<DefaultLoading />}>{children}</Suspense>\n </ChatAccessGate>\n </ScreenLayout>\n )\n}\n\nconst useStyles = () => {\n const insets = useSafeAreaInsets()\n\n return StyleSheet.create({\n screen: {\n flex: 1,\n paddingLeft: insets.left,\n paddingRight: insets.right,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"screenLayout.js","names":["useRoute","React","Suspense","StyleSheet","useWindowDimensions","View","useSafeAreaInsets","DefaultLoading","PageErrorBoundary","ChatAccessGate","PAGE_ERROR_FALLBACKS","jsx","_jsx","ScreenLayout","t0","$","_c","children","route","genericFallback","name","styles","useStyles","fontScale","t1","Symbol","for","t2","fallback","t3","screen","style","t4","screenName","ScreenLayoutWithChatAccessGate","insets","left","right","create","flex","paddingLeft","paddingRight"],"sources":["../../src/navigation/screenLayout.tsx"],"sourcesContent":["import { useRoute } from '@react-navigation/native'\nimport React from 'react'\nimport { Suspense } from 'react'\nimport { StyleSheet, useWindowDimensions, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { DefaultLoading } from '../components/page/loading'\nimport { PageErrorBoundary } from '../components/page/page_error_boundary'\nimport { ChatAccessGate } from './chat_access_gate'\nimport { PAGE_ERROR_FALLBACKS } from './page_error_fallbacks'\n\nexport function ScreenLayout({ children }: { children: React.ReactElement }) {\n const route = useRoute()\n const genericFallback = PAGE_ERROR_FALLBACKS[route.name as keyof typeof PAGE_ERROR_FALLBACKS]\n const styles = useStyles()\n const { fontScale } = useWindowDimensions()\n\n return (\n <PageErrorBoundary screenName={route.name} genericFallback={genericFallback}>\n <View key={fontScale} style={styles.screen}>\n <Suspense fallback={<DefaultLoading />}>{children}</Suspense>\n </View>\n </PageErrorBoundary>\n )\n}\n\nexport function ScreenLayoutWithChatAccessGate({ children }: { children: React.ReactElement }) {\n return (\n <ScreenLayout>\n <ChatAccessGate>\n <Suspense fallback={<DefaultLoading />}>{children}</Suspense>\n </ChatAccessGate>\n </ScreenLayout>\n )\n}\n\nconst useStyles = () => {\n const insets = useSafeAreaInsets()\n\n return StyleSheet.create({\n screen: {\n flex: 1,\n paddingLeft: insets.left,\n paddingRight: insets.right,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "4.4.1-qa-staging.40",
3
+ "version": "4.4.1-qa-staging.41",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "@fortawesome/fontawesome-svg-core": "^7.2.0",
35
35
  "@fortawesome/react-native-fontawesome": "^0.3.2",
36
- "@planningcenter/emoji-keyboard": "4.4.1-qa-staging.40",
36
+ "@planningcenter/emoji-keyboard": "4.4.1-qa-staging.41",
37
37
  "lodash-inflection": "^1.5.0"
38
38
  },
39
39
  "peerDependencies": {
@@ -84,5 +84,5 @@
84
84
  "sf-symbols-typescript": "^2.2.0",
85
85
  "typescript": "~6.0.3"
86
86
  },
87
- "gitHead": "2f70b94610adf193b243c90cdfa4c6b20a599e13"
87
+ "gitHead": "382bfa092bf544d43feca8879e595cebe31446de"
88
88
  }
@@ -0,0 +1,55 @@
1
+ import { render } from '@testing-library/react-native'
2
+ import React, { useEffect } from 'react'
3
+ import { ScreenLayout } from '../../navigation/screenLayout'
4
+
5
+ jest.mock('react-native', () => {
6
+ const actual = jest.requireActual('react-native')
7
+ return Object.defineProperty(actual, 'useWindowDimensions', {
8
+ value: jest.fn(),
9
+ configurable: true,
10
+ })
11
+ })
12
+ jest.mock('@react-navigation/native', () => ({ useRoute: () => ({ name: 'Conversations' }) }))
13
+ jest.mock('react-native-safe-area-context', () => ({
14
+ useSafeAreaInsets: () => ({ top: 0, right: 0, bottom: 0, left: 0 }),
15
+ }))
16
+ jest.mock('../../components/page/page_error_boundary', () => ({
17
+ PageErrorBoundary: ({ children }: { children: React.ReactNode }) => children,
18
+ }))
19
+
20
+ const mockUseWindowDimensions = require('react-native').useWindowDimensions
21
+ const onMount = jest.fn()
22
+
23
+ function Child() {
24
+ useEffect(() => {
25
+ onMount()
26
+ }, [])
27
+ return null
28
+ }
29
+
30
+ describe('ScreenLayout', () => {
31
+ afterEach(() => jest.clearAllMocks())
32
+
33
+ test('remounts its screen when the font scale changes, and only then', () => {
34
+ mockUseWindowDimensions.mockReturnValue({ fontScale: 1 })
35
+ const screen = render(
36
+ <ScreenLayout>
37
+ <Child />
38
+ </ScreenLayout>
39
+ )
40
+ screen.rerender(
41
+ <ScreenLayout>
42
+ <Child />
43
+ </ScreenLayout>
44
+ )
45
+ expect(onMount).toHaveBeenCalledTimes(1)
46
+
47
+ mockUseWindowDimensions.mockReturnValue({ fontScale: 1.2 })
48
+ screen.rerender(
49
+ <ScreenLayout>
50
+ <Child />
51
+ </ScreenLayout>
52
+ )
53
+ expect(onMount).toHaveBeenCalledTimes(2)
54
+ })
55
+ })
@@ -1,7 +1,7 @@
1
1
  import { useRoute } from '@react-navigation/native'
2
2
  import React from 'react'
3
3
  import { Suspense } from 'react'
4
- import { StyleSheet, View } from 'react-native'
4
+ import { StyleSheet, useWindowDimensions, View } from 'react-native'
5
5
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
6
6
  import { DefaultLoading } from '../components/page/loading'
7
7
  import { PageErrorBoundary } from '../components/page/page_error_boundary'
@@ -12,10 +12,11 @@ export function ScreenLayout({ children }: { children: React.ReactElement }) {
12
12
  const route = useRoute()
13
13
  const genericFallback = PAGE_ERROR_FALLBACKS[route.name as keyof typeof PAGE_ERROR_FALLBACKS]
14
14
  const styles = useStyles()
15
+ const { fontScale } = useWindowDimensions()
15
16
 
16
17
  return (
17
18
  <PageErrorBoundary screenName={route.name} genericFallback={genericFallback}>
18
- <View style={styles.screen}>
19
+ <View key={fontScale} style={styles.screen}>
19
20
  <Suspense fallback={<DefaultLoading />}>{children}</Suspense>
20
21
  </View>
21
22
  </PageErrorBoundary>