@planningcenter/chat-react-native 4.4.1-qa-staging.32 → 4.4.1-qa-1036.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/build/components/conversation/message_list.d.ts.map +1 -1
- package/build/components/conversation/message_list.js +123 -155
- package/build/components/conversation/message_list.js.map +1 -1
- package/build/components/conversations/conversations.d.ts.map +1 -1
- package/build/components/conversations/conversations.js +0 -1
- package/build/components/conversations/conversations.js.map +1 -1
- package/build/components/display/keyboard_scroll_view.d.ts.map +1 -1
- package/build/components/display/keyboard_scroll_view.js +0 -1
- package/build/components/display/keyboard_scroll_view.js.map +1 -1
- package/build/components/page/page_error_boundary.d.ts +1 -9
- package/build/components/page/page_error_boundary.d.ts.map +1 -1
- package/build/components/page/page_error_boundary.js +31 -56
- package/build/components/page/page_error_boundary.js.map +1 -1
- package/build/navigation/index.d.ts.map +1 -1
- package/build/navigation/index.js +3 -11
- package/build/navigation/index.js.map +1 -1
- package/build/navigation/screenLayout.d.ts.map +1 -1
- package/build/navigation/screenLayout.js +6 -10
- package/build/navigation/screenLayout.js.map +1 -1
- package/build/screens/age_check/age_check_required_screen.d.ts.map +1 -1
- package/build/screens/age_check/age_check_required_screen.js +0 -1
- package/build/screens/age_check/age_check_required_screen.js.map +1 -1
- package/build/screens/conversation_details_screen.d.ts.map +1 -1
- package/build/screens/conversation_details_screen.js +0 -1
- package/build/screens/conversation_details_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_new_entry_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_new_entry_screen.js +0 -1
- package/build/screens/conversation_select_recipients/conversation_new_entry_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.js +291 -332
- package/build/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js +0 -1
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js +0 -1
- package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js.map +1 -1
- package/build/screens/get_help_screen.js +62 -56
- package/build/screens/get_help_screen.js.map +1 -1
- package/build/screens/group_notification_settings_screen.js +2 -3
- package/build/screens/group_notification_settings_screen.js.map +1 -1
- package/build/screens/notification_settings_screen.d.ts.map +1 -1
- package/build/screens/notification_settings_screen.js +0 -1
- package/build/screens/notification_settings_screen.js.map +1 -1
- package/build/screens/preferred_app_selection_screen.js +39 -45
- package/build/screens/preferred_app_selection_screen.js.map +1 -1
- package/build/screens/search/components/search_results_list.d.ts +1 -4
- package/build/screens/search/components/search_results_list.d.ts.map +1 -1
- package/build/screens/search/components/search_results_list.js +110 -136
- package/build/screens/search/components/search_results_list.js.map +1 -1
- package/build/screens/search/search_screen.d.ts.map +1 -1
- package/build/screens/search/search_screen.js +28 -21
- package/build/screens/search/search_screen.js.map +1 -1
- package/build/screens/settings_screen.d.ts.map +1 -1
- package/build/screens/settings_screen.js +6 -7
- package/build/screens/settings_screen.js.map +1 -1
- package/package.json +3 -3
- package/src/components/conversation/__tests__/message_list.test.tsx +0 -4
- package/src/components/conversation/message_list.tsx +0 -6
- package/src/components/conversations/conversations.tsx +0 -1
- package/src/components/display/keyboard_scroll_view.tsx +0 -1
- package/src/components/page/__tests__/page_error_boundary.test.tsx +0 -33
- package/src/components/page/page_error_boundary.tsx +12 -43
- package/src/navigation/index.tsx +2 -11
- package/src/navigation/screenLayout.tsx +1 -3
- package/src/screens/age_check/age_check_required_screen.tsx +1 -5
- package/src/screens/conversation_details_screen.tsx +0 -1
- package/src/screens/conversation_select_recipients/conversation_new_entry_screen.tsx +1 -4
- package/src/screens/conversation_select_recipients/conversation_select_direct_message_recipients_screen.tsx +68 -78
- package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx +0 -1
- package/src/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.tsx +0 -1
- package/src/screens/get_help_screen.tsx +4 -4
- package/src/screens/group_notification_settings_screen.tsx +3 -3
- package/src/screens/notification_settings_screen.tsx +0 -1
- package/src/screens/preferred_app_selection_screen.tsx +4 -4
- package/src/screens/search/__tests__/search_screen.test.tsx +7 -5
- package/src/screens/search/components/__tests__/search_results_list.test.tsx +2 -6
- package/src/screens/search/components/search_results_list.tsx +13 -34
- package/src/screens/search/search_screen.tsx +18 -8
- package/src/screens/settings_screen.tsx +25 -25
- package/build/navigation/page_error_fallbacks.d.ts +0 -7
- package/build/navigation/page_error_fallbacks.d.ts.map +0 -1
- package/build/navigation/page_error_fallbacks.js +0 -7
- package/build/navigation/page_error_fallbacks.js.map +0 -1
- package/src/navigation/page_error_fallbacks.ts +0 -14
- package/src/screens/conversation_select_recipients/__tests__/conversation_select_direct_message_recipients_screen.test.tsx +0 -100
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings_screen.js","names":["PlatformPressable","useNavigation","React","useCallback","Platform","ScrollView","StyleSheet","View","useSafeAreaInsets","Heading","Icon","Text","VersionFooter","Switch","useDirectMessagesEligible","useTheme","useAppName","usePersonSettings","jsx","_jsx","jsxs","_jsxs","SettingsScreen","t0","$","_c","styles","useStyles","directMessagesDisabled","setDirectMessagesDisabled","isMutating","directMessagesEligible","appName","navigation","t1","navigate","handleNotificationSettings","t2","type","handleGetHelp","t3","Symbol","for","variant","children","t4","sectionHeader","style","t5","settingRow","settingRowText","value","onValueChange","enabled","t6","NavRow","label","t7","t8","sectionOuter","contentInsetAdjustmentBehavior","t9","t10","footer","t11","container","onPress","useNavRowStyles","chevron","OS","name","size","inner","accessibilityRole","colors","insets","borderColorDefaultBase","bottom","create","flex","paddingBottom","Math","max","paddingLeft","paddingRight","paddingTop","borderBottomWidth","borderBottomColor","flexDirection","alignItems","justifyContent","paddingVertical","gap","iconColorDefaultDisabled","color"],"sources":["../../src/screens/settings_screen.tsx"],"sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport React, { useCallback } from 'react'\nimport { Platform, ScrollView, StyleSheet, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Heading, Icon, Text, VersionFooter } from '../components'\nimport { Switch } from '../components/display/switch'\nimport { useDirectMessagesEligible, useTheme } from '../hooks'\nimport { useAppName } from '../hooks/use_app_name'\nimport { usePersonSettings } from '../hooks/use_person_settings'\n\nexport type SettingsScreenProps = StaticScreenProps<{}>\n\nexport function SettingsScreen({}: SettingsScreenProps) {\n const styles = useStyles()\n const { directMessagesDisabled, setDirectMessagesDisabled, isMutating } = usePersonSettings()\n const directMessagesEligible = useDirectMessagesEligible()\n const appName = useAppName()\n const navigation = useNavigation()\n\n const handleNotificationSettings = useCallback(() => {\n navigation.navigate('NotificationSettings', {})\n }, [navigation])\n\n const handleGetHelp = useCallback(() => {\n navigation.navigate('GetHelp', { type: 'chat' })\n }, [navigation])\n\n return (\n <View style={styles.container}>\n <ScrollView contentInsetAdjustmentBehavior=\"automatic\">\n <View style={styles.sectionOuter}>\n <View style={styles.sectionHeader}>\n <Heading variant=\"h2\">Messages</Heading>\n </View>\n {directMessagesEligible && (\n <View style={styles.settingRow}>\n <View style={styles.settingRowText}>\n <Text>Allow direct messages</Text>\n <Text variant=\"tertiary\">\n When off, you can't be added to new direct messages, and any you're already in\n will be turned off.\n </Text>\n </View>\n <Switch\n value={!directMessagesDisabled}\n onValueChange={enabled => setDirectMessagesDisabled(!enabled)}\n disabled={isMutating}\n />\n </View>\n )}\n <NavRow label=\"Notification settings\" onPress={handleNotificationSettings} />\n {appName !== 'services' && <NavRow label=\"Get help\" onPress={handleGetHelp} />}\n </View>\n </ScrollView>\n <View style={styles.footer}>\n <VersionFooter />\n </View>\n </View>\n )\n}\n\ninterface NavRowProps {\n label: string\n onPress: () => void\n}\n\nfunction NavRow({ label, onPress }: NavRowProps) {\n const styles = useNavRowStyles()\n return (\n <PlatformPressable\n style={styles.container}\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n >\n <View style={styles.inner}>\n <Text>{label}</Text>\n {Platform.OS === 'ios' && (\n <Icon name=\"general.rightChevron\" size={16} style={styles.chevron} />\n )}\n </View>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n const insets = useSafeAreaInsets()\n return StyleSheet.create({\n container: {\n flex: 1,\n },\n footer: {\n paddingBottom: Math.max(insets.bottom, 8),\n },\n sectionOuter: {\n paddingLeft: 16,\n },\n sectionHeader: {\n paddingRight: 16,\n paddingTop: 24,\n paddingBottom: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRow: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRowText: {\n flex: 1,\n gap: 8,\n },\n })\n}\n\nconst useNavRowStyles = () => {\n const { colors } = useTheme()\n return StyleSheet.create({\n container: {\n paddingLeft: 0,\n },\n inner: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 14,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n chevron: {\n color: colors.iconColorDefaultDisabled,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"settings_screen.js","names":["PlatformPressable","useNavigation","React","useCallback","Platform","StyleSheet","View","useSafeAreaInsets","Heading","Icon","Text","VersionFooter","Switch","useDirectMessagesEligible","useTheme","useAppName","usePersonSettings","jsx","_jsx","jsxs","_jsxs","SettingsScreen","t0","$","_c","styles","useStyles","directMessagesDisabled","setDirectMessagesDisabled","isMutating","directMessagesEligible","appName","navigation","t1","navigate","handleNotificationSettings","t2","type","handleGetHelp","t3","Symbol","for","variant","children","t4","sectionHeader","style","t5","settingRow","settingRowText","value","onValueChange","enabled","t6","NavRow","label","t7","t8","sectionOuter","t9","t10","footer","t11","container","onPress","useNavRowStyles","chevron","OS","name","size","inner","accessibilityRole","colors","insets","borderColorDefaultBase","bottom","create","flex","justifyContent","paddingBottom","Math","max","paddingLeft","paddingRight","paddingTop","borderBottomWidth","borderBottomColor","flexDirection","alignItems","paddingVertical","gap","iconColorDefaultDisabled","color"],"sources":["../../src/screens/settings_screen.tsx"],"sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport React, { useCallback } from 'react'\nimport { Platform, StyleSheet, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Heading, Icon, Text, VersionFooter } from '../components'\nimport { Switch } from '../components/display/switch'\nimport { useDirectMessagesEligible, useTheme } from '../hooks'\nimport { useAppName } from '../hooks/use_app_name'\nimport { usePersonSettings } from '../hooks/use_person_settings'\n\nexport type SettingsScreenProps = StaticScreenProps<{}>\n\nexport function SettingsScreen({}: SettingsScreenProps) {\n const styles = useStyles()\n const { directMessagesDisabled, setDirectMessagesDisabled, isMutating } = usePersonSettings()\n const directMessagesEligible = useDirectMessagesEligible()\n const appName = useAppName()\n const navigation = useNavigation()\n\n const handleNotificationSettings = useCallback(() => {\n navigation.navigate('NotificationSettings', {})\n }, [navigation])\n\n const handleGetHelp = useCallback(() => {\n navigation.navigate('GetHelp', { type: 'chat' })\n }, [navigation])\n\n return (\n <View style={styles.container}>\n <View style={styles.sectionOuter}>\n <View style={styles.sectionHeader}>\n <Heading variant=\"h2\">Messages</Heading>\n </View>\n {directMessagesEligible && (\n <View style={styles.settingRow}>\n <View style={styles.settingRowText}>\n <Text>Allow direct messages</Text>\n <Text variant=\"tertiary\">\n When off, you can't be added to new direct messages, and any you're already in will\n be turned off.\n </Text>\n </View>\n <Switch\n value={!directMessagesDisabled}\n onValueChange={enabled => setDirectMessagesDisabled(!enabled)}\n disabled={isMutating}\n />\n </View>\n )}\n <NavRow label=\"Notification settings\" onPress={handleNotificationSettings} />\n {appName !== 'services' && <NavRow label=\"Get help\" onPress={handleGetHelp} />}\n </View>\n <View style={styles.footer}>\n <VersionFooter />\n </View>\n </View>\n )\n}\n\ninterface NavRowProps {\n label: string\n onPress: () => void\n}\n\nfunction NavRow({ label, onPress }: NavRowProps) {\n const styles = useNavRowStyles()\n return (\n <PlatformPressable\n style={styles.container}\n onPress={onPress}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n >\n <View style={styles.inner}>\n <Text>{label}</Text>\n {Platform.OS === 'ios' && (\n <Icon name=\"general.rightChevron\" size={16} style={styles.chevron} />\n )}\n </View>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n const insets = useSafeAreaInsets()\n return StyleSheet.create({\n container: {\n flex: 1,\n },\n footer: {\n flex: 1,\n justifyContent: 'flex-end',\n paddingBottom: Math.max(insets.bottom, 8),\n },\n sectionOuter: {\n paddingLeft: 16,\n },\n sectionHeader: {\n paddingRight: 16,\n paddingTop: 24,\n paddingBottom: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRow: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n settingRowText: {\n flex: 1,\n gap: 8,\n },\n })\n}\n\nconst useNavRowStyles = () => {\n const { colors } = useTheme()\n return StyleSheet.create({\n container: {\n paddingLeft: 0,\n },\n inner: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingRight: 16,\n paddingVertical: 14,\n borderBottomWidth: 1,\n borderBottomColor: colors.borderColorDefaultBase,\n },\n chevron: {\n color: colors.iconColorDefaultDisabled,\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-
|
|
3
|
+
"version": "4.4.1-qa-1036.0",
|
|
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-
|
|
36
|
+
"@planningcenter/emoji-keyboard": "4.4.1-qa-1036.0",
|
|
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": "
|
|
87
|
+
"gitHead": "9f37793866610b35761115c51af6462ce827501a"
|
|
88
88
|
}
|
|
@@ -27,10 +27,6 @@ import { addRecordInPagesData, deleteRecordInPagesData } from '../../../utils/ca
|
|
|
27
27
|
import { getMessagesQueryKey } from '../../../utils/request/get_messages'
|
|
28
28
|
import { MessageList } from '../message_list'
|
|
29
29
|
|
|
30
|
-
jest.mock('@react-navigation/elements', () => ({
|
|
31
|
-
...jest.requireActual('@react-navigation/elements'),
|
|
32
|
-
useHeaderHeight: () => 0,
|
|
33
|
-
}))
|
|
34
30
|
jest.mock('../../../hooks/use_api_client')
|
|
35
31
|
const mockFlash = jest.fn()
|
|
36
32
|
jest.mock('../../../hooks/use_animated_message_background_color', () => ({
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { date as formatDate } from '@planningcenter/datetime-fmt'
|
|
2
|
-
import { useHeaderHeight } from '@react-navigation/elements'
|
|
3
2
|
import { noop } from 'lodash'
|
|
4
3
|
import React, { RefObject, useCallback, useEffect, useRef, useState } from 'react'
|
|
5
4
|
import { FlatList, FlatListProps, StyleSheet, View } from 'react-native'
|
|
@@ -8,7 +7,6 @@ import { ConversationResource } from '../../types/resources/conversation'
|
|
|
8
7
|
import { MessageResource } from '../../types/resources/message'
|
|
9
8
|
import { getRelativeDateStatus } from '../../utils/date'
|
|
10
9
|
import { groupMessages, type DateSeparator, type EnrichedMessage } from '../../utils/group_messages'
|
|
11
|
-
import { isLiquidGlassEnabled } from '../../utils/liquid_glass'
|
|
12
10
|
import { CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL } from '../../utils/styles'
|
|
13
11
|
import { isSystemMessage } from '../../utils/system_messages'
|
|
14
12
|
import { Text } from '../display'
|
|
@@ -71,8 +69,6 @@ export function MessageList({
|
|
|
71
69
|
onMomentumScrollEnd,
|
|
72
70
|
}: MessageListProps) {
|
|
73
71
|
const styles = useStyles()
|
|
74
|
-
const headerHeight = useHeaderHeight()
|
|
75
|
-
const glassHeaderInset = isLiquidGlassEnabled() ? headerHeight : 0
|
|
76
72
|
const inReplyScreen = !!replyRootId
|
|
77
73
|
const canDeleteNonAuthoredMessages =
|
|
78
74
|
conversation.memberAbility?.canDeleteNonAuthoredMessages ?? false
|
|
@@ -159,8 +155,6 @@ export function MessageList({
|
|
|
159
155
|
inverted
|
|
160
156
|
ref={listRef}
|
|
161
157
|
contentContainerStyle={styles.listContainer}
|
|
162
|
-
contentInset={{ bottom: glassHeaderInset }}
|
|
163
|
-
scrollIndicatorInsets={{ bottom: glassHeaderInset }}
|
|
164
158
|
data={messagesWithSeparators}
|
|
165
159
|
keyExtractor={item => item.id}
|
|
166
160
|
onScroll={onScroll}
|
|
@@ -79,7 +79,6 @@ export const Conversations = ({ ListHeaderComponent }: ConversationsProps) => {
|
|
|
79
79
|
data={data}
|
|
80
80
|
keyExtractor={item => item.id.toString()}
|
|
81
81
|
contentContainerStyle={styles.contentContainer}
|
|
82
|
-
contentInsetAdjustmentBehavior="automatic"
|
|
83
82
|
onRefresh={refetch}
|
|
84
83
|
refreshing={!isFetched && isRefetching}
|
|
85
84
|
ListHeaderComponent={ListHeaderComponent}
|
|
@@ -43,7 +43,6 @@ export function KeyboardScrollView({ children, contentContainerStyle }: Keyboard
|
|
|
43
43
|
<KeyboardView>
|
|
44
44
|
<ScrollView
|
|
45
45
|
ref={scrollViewRef}
|
|
46
|
-
contentInsetAdjustmentBehavior="automatic"
|
|
47
46
|
contentContainerStyle={contentContainerStyle}
|
|
48
47
|
onLayout={scrollFocusedInputIntoView}
|
|
49
48
|
onContentSizeChange={scrollFocusedInputIntoView}
|
|
@@ -4,7 +4,6 @@ import { render } from '@testing-library/react-native'
|
|
|
4
4
|
import React from 'react'
|
|
5
5
|
import { buildTestQueryClient } from '../../../__utils__/query_client'
|
|
6
6
|
import { Log } from '../../../utils/native_adapters/configuration'
|
|
7
|
-
import { ResponseError } from '../../../utils/response_error'
|
|
8
7
|
import { PageErrorBoundary } from '../page_error_boundary'
|
|
9
8
|
|
|
10
9
|
jest.mock('../../primitive/blank_state_primitive', () => {
|
|
@@ -75,36 +74,4 @@ describe('PageErrorBoundary', () => {
|
|
|
75
74
|
expect(getByText('Oops!')).toBeTruthy()
|
|
76
75
|
expect(getByText('Something unexpected happened.')).toBeTruthy()
|
|
77
76
|
})
|
|
78
|
-
|
|
79
|
-
describe('with a generic fallback override', () => {
|
|
80
|
-
const genericFallback = { heading: 'Nothing here', body: 'Come back later.' }
|
|
81
|
-
const responseError = (status: number) =>
|
|
82
|
-
new ResponseError({ status, statusText: 'x', errors: [] } as never)
|
|
83
|
-
|
|
84
|
-
it.each([
|
|
85
|
-
['a plain error', new Error('boom')],
|
|
86
|
-
['an unhandled status', responseError(500)],
|
|
87
|
-
])('replaces the Oops copy for %s', (_label, thrown) => {
|
|
88
|
-
const { getByText, queryByText } = renderWithProviders(
|
|
89
|
-
<PageErrorBoundary genericFallback={genericFallback}>
|
|
90
|
-
<Boom thrown={thrown} />
|
|
91
|
-
</PageErrorBoundary>
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
expect(getByText('Nothing here')).toBeTruthy()
|
|
95
|
-
expect(getByText('Come back later.')).toBeTruthy()
|
|
96
|
-
expect(queryByText('Oops!')).toBeNull()
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
it('leaves a known status alone', () => {
|
|
100
|
-
const { getByText, queryByText } = renderWithProviders(
|
|
101
|
-
<PageErrorBoundary genericFallback={genericFallback}>
|
|
102
|
-
<Boom thrown={responseError(403)} />
|
|
103
|
-
</PageErrorBoundary>
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
expect(getByText('Permission required')).toBeTruthy()
|
|
107
|
-
expect(queryByText('Nothing here')).toBeNull()
|
|
108
|
-
})
|
|
109
|
-
})
|
|
110
77
|
})
|
|
@@ -6,26 +6,11 @@ import { ResponseError } from '../../utils/response_error'
|
|
|
6
6
|
import BlankState from '../primitive/blank_state_primitive'
|
|
7
7
|
import { ErrorBoundary, ErrorBoundaryFallback, ErrorBoundaryProps } from './error_boundary'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
heading: 'Oops!',
|
|
13
|
-
body: 'Something unexpected happened.',
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
type PageErrorBoundaryProps = PropsWithChildren<
|
|
17
|
-
ErrorBoundaryProps & { genericFallback?: PageErrorFallback }
|
|
18
|
-
>
|
|
19
|
-
|
|
20
|
-
export function PageErrorBoundary({
|
|
21
|
-
children,
|
|
22
|
-
genericFallback = GENERIC_FALLBACK,
|
|
23
|
-
...props
|
|
24
|
-
}: PageErrorBoundaryProps) {
|
|
25
|
-
const renderPageFallback: ErrorBoundaryFallback = (error, reset) => (
|
|
26
|
-
<ErrorView error={error} reset={reset} generic={genericFallback} />
|
|
27
|
-
)
|
|
9
|
+
const renderPageFallback: ErrorBoundaryFallback = (error, reset) => (
|
|
10
|
+
<ErrorView error={error} reset={reset} />
|
|
11
|
+
)
|
|
28
12
|
|
|
13
|
+
export function PageErrorBoundary({ children, ...props }: PropsWithChildren<ErrorBoundaryProps>) {
|
|
29
14
|
return (
|
|
30
15
|
<ErrorBoundary scope="screen" fallback={renderPageFallback} {...props}>
|
|
31
16
|
{children}
|
|
@@ -33,15 +18,7 @@ export function PageErrorBoundary({
|
|
|
33
18
|
)
|
|
34
19
|
}
|
|
35
20
|
|
|
36
|
-
function ErrorView({
|
|
37
|
-
error,
|
|
38
|
-
reset,
|
|
39
|
-
generic,
|
|
40
|
-
}: {
|
|
41
|
-
error: Error
|
|
42
|
-
reset: () => void
|
|
43
|
-
generic: PageErrorFallback
|
|
44
|
-
}) {
|
|
21
|
+
function ErrorView({ error, reset }: { error: Error; reset: () => void }) {
|
|
45
22
|
const { reset: resetQueries } = useQueryErrorResetBoundary()
|
|
46
23
|
|
|
47
24
|
const handleReset = useCallback(() => {
|
|
@@ -52,7 +29,7 @@ function ErrorView({
|
|
|
52
29
|
useEffect(() => handleReset, [handleReset])
|
|
53
30
|
|
|
54
31
|
if (error instanceof ResponseError) {
|
|
55
|
-
return <ResponseErrorView response={error.response} onReset={handleReset}
|
|
32
|
+
return <ResponseErrorView response={error.response} onReset={handleReset} />
|
|
56
33
|
}
|
|
57
34
|
|
|
58
35
|
if (isNetworkError(error)) {
|
|
@@ -64,7 +41,7 @@ function ErrorView({
|
|
|
64
41
|
)
|
|
65
42
|
}
|
|
66
43
|
|
|
67
|
-
return <ErrorContent heading={
|
|
44
|
+
return <ErrorContent heading={'Oops!'} body={'Something unexpected happened.'} />
|
|
68
45
|
}
|
|
69
46
|
|
|
70
47
|
function isNetworkError(error: Error) {
|
|
@@ -77,15 +54,7 @@ function isNetworkError(error: Error) {
|
|
|
77
54
|
return new RegExp(networkFailedMessages.join('|'), 'i').test(error.message)
|
|
78
55
|
}
|
|
79
56
|
|
|
80
|
-
function ResponseErrorView({
|
|
81
|
-
response,
|
|
82
|
-
onReset,
|
|
83
|
-
generic,
|
|
84
|
-
}: {
|
|
85
|
-
response: Response
|
|
86
|
-
onReset: () => void
|
|
87
|
-
generic: PageErrorFallback
|
|
88
|
-
}) {
|
|
57
|
+
function ResponseErrorView({ response, onReset }: { response: Response; onReset: () => void }) {
|
|
89
58
|
const { status } = response
|
|
90
59
|
|
|
91
60
|
const heading = useMemo(() => {
|
|
@@ -95,9 +64,9 @@ function ResponseErrorView({
|
|
|
95
64
|
case 404:
|
|
96
65
|
return 'Content not found'
|
|
97
66
|
default:
|
|
98
|
-
return
|
|
67
|
+
return 'Oops!'
|
|
99
68
|
}
|
|
100
|
-
}, [status
|
|
69
|
+
}, [status])
|
|
101
70
|
|
|
102
71
|
const body = useMemo(() => {
|
|
103
72
|
switch (status) {
|
|
@@ -106,9 +75,9 @@ function ResponseErrorView({
|
|
|
106
75
|
case 404:
|
|
107
76
|
return 'If you believe something should be here, please reach out to your administrator.'
|
|
108
77
|
default:
|
|
109
|
-
return
|
|
78
|
+
return 'Something unexpected happened.'
|
|
110
79
|
}
|
|
111
|
-
}, [status
|
|
80
|
+
}, [status])
|
|
112
81
|
|
|
113
82
|
useEffect(() => {
|
|
114
83
|
if (status !== 401) return
|
package/src/navigation/index.tsx
CHANGED
|
@@ -83,12 +83,9 @@ import { TeamConversationScreen } from '../screens/team_conversation_screen'
|
|
|
83
83
|
import { isLiquidGlassEnabled } from '../utils/liquid_glass'
|
|
84
84
|
import { ScreenLayoutWithChatAccessGate } from './screenLayout'
|
|
85
85
|
|
|
86
|
-
const conversationGlassHeader = (): NativeStackNavigationOptions =>
|
|
87
|
-
isLiquidGlassEnabled() ? { headerBlurEffect: 'systemChromeMaterial' } : {}
|
|
88
|
-
|
|
89
86
|
const globalScreenOptions: () => NativeStackNavigationOptions = () => ({
|
|
90
87
|
headerBackButtonDisplayMode: 'minimal',
|
|
91
|
-
...(isLiquidGlassEnabled() ? { headerShadowVisible: false
|
|
88
|
+
...(isLiquidGlassEnabled() ? { headerShadowVisible: false } : {}),
|
|
92
89
|
})
|
|
93
90
|
|
|
94
91
|
export const NewConversationStack = createNativeStackNavigator({
|
|
@@ -154,7 +151,6 @@ export const NewConversationStack = createNativeStackNavigator({
|
|
|
154
151
|
{
|
|
155
152
|
title: 'New conversation',
|
|
156
153
|
headerLeft: () => null,
|
|
157
|
-
headerTransparent: false,
|
|
158
154
|
},
|
|
159
155
|
withRightClose({
|
|
160
156
|
onPress: () => {
|
|
@@ -200,7 +196,6 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
200
196
|
options: ({ route, navigation }) =>
|
|
201
197
|
composeOptions(
|
|
202
198
|
{
|
|
203
|
-
...conversationGlassHeader(),
|
|
204
199
|
headerTitle: (props: NativeStackHeaderRightProps) => {
|
|
205
200
|
const { conversation_id, title, badge, deleted, muted } =
|
|
206
201
|
route.params as ConversationRouteProps
|
|
@@ -237,10 +232,7 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
237
232
|
screen: ConversationScreen,
|
|
238
233
|
options: ({ route, navigation }) =>
|
|
239
234
|
composeOptions(
|
|
240
|
-
{
|
|
241
|
-
...conversationGlassHeader(),
|
|
242
|
-
title: (route.params as ConversationRouteProps)?.title ?? 'Reply',
|
|
243
|
-
},
|
|
235
|
+
{ title: (route.params as ConversationRouteProps)?.title ?? 'Reply' },
|
|
244
236
|
withMinimalBack({ onPress: navigation.goBack })
|
|
245
237
|
),
|
|
246
238
|
},
|
|
@@ -332,7 +324,6 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
332
324
|
{
|
|
333
325
|
title: 'New conversation',
|
|
334
326
|
headerLeft: () => null,
|
|
335
|
-
headerTransparent: false,
|
|
336
327
|
},
|
|
337
328
|
withRightClose({ onPress: () => navigation.getParent()?.goBack() })
|
|
338
329
|
),
|
|
@@ -4,14 +4,12 @@ import { Suspense } from 'react'
|
|
|
4
4
|
import { DefaultLoading } from '../components/page/loading'
|
|
5
5
|
import { PageErrorBoundary } from '../components/page/page_error_boundary'
|
|
6
6
|
import { ChatAccessGate } from './chat_access_gate'
|
|
7
|
-
import { PAGE_ERROR_FALLBACKS } from './page_error_fallbacks'
|
|
8
7
|
|
|
9
8
|
export function ScreenLayout({ children }: { children: React.ReactElement }) {
|
|
10
9
|
const route = useRoute()
|
|
11
|
-
const genericFallback = PAGE_ERROR_FALLBACKS[route.name as keyof typeof PAGE_ERROR_FALLBACKS]
|
|
12
10
|
|
|
13
11
|
return (
|
|
14
|
-
<PageErrorBoundary screenName={route.name}
|
|
12
|
+
<PageErrorBoundary screenName={route.name}>
|
|
15
13
|
<Suspense fallback={<DefaultLoading />}>{children}</Suspense>
|
|
16
14
|
</PageErrorBoundary>
|
|
17
15
|
)
|
|
@@ -58,11 +58,7 @@ export function AgeCheckRequiredScreen() {
|
|
|
58
58
|
|
|
59
59
|
return (
|
|
60
60
|
<>
|
|
61
|
-
<ScrollView
|
|
62
|
-
contentInsetAdjustmentBehavior="automatic"
|
|
63
|
-
style={styles.scrollView}
|
|
64
|
-
contentContainerStyle={styles.container}
|
|
65
|
-
>
|
|
61
|
+
<ScrollView style={styles.scrollView} contentContainerStyle={styles.container}>
|
|
66
62
|
<View style={styles.header}>
|
|
67
63
|
<View style={styles.heading}>
|
|
68
64
|
<Icon name="general.exclamationTriangle" size={20} style={styles.warningIcon} />
|
|
@@ -427,7 +427,6 @@ export function ConversationDetailsScreen({ route }: ConversationDetailsScreenPr
|
|
|
427
427
|
return (
|
|
428
428
|
<View style={styles.listContainer}>
|
|
429
429
|
<FlatList
|
|
430
|
-
contentInsetAdjustmentBehavior="automatic"
|
|
431
430
|
data={listData as SectionListData}
|
|
432
431
|
contentContainerStyle={styles.contentContainer}
|
|
433
432
|
renderItem={({ item, index }) => {
|
|
@@ -59,10 +59,7 @@ export const ConversationNewEntryScreen = ({ route }: ConversationSelectRecipien
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
return (
|
|
62
|
-
<ScrollView
|
|
63
|
-
contentInsetAdjustmentBehavior="automatic"
|
|
64
|
-
contentContainerStyle={styles.contentContainer}
|
|
65
|
-
>
|
|
62
|
+
<ScrollView contentContainerStyle={styles.contentContainer}>
|
|
66
63
|
<View style={styles.header}>
|
|
67
64
|
<Heading variant="h2">Start a conversation by</Heading>
|
|
68
65
|
</View>
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { PlatformPressable } from '@react-navigation/elements'
|
|
2
2
|
import { StackActions, useNavigation } from '@react-navigation/native'
|
|
3
|
-
import {
|
|
3
|
+
import { RefObject, useRef, useState } from 'react'
|
|
4
4
|
import { FlatList, Pressable, StyleSheet, TextInput, View } from 'react-native'
|
|
5
5
|
import { Avatar, Badge, Banner, Icon, KeyboardView, Spinner, Text } from '../../components'
|
|
6
6
|
import { ActionButton } from '../../components/display/action_button'
|
|
7
7
|
import { AutoFocusAwareTextInput } from '../../components/display/text_input'
|
|
8
|
+
import { ComponentErrorBoundary } from '../../components/page/component_error_boundary'
|
|
8
9
|
import { useTheme } from '../../hooks'
|
|
9
10
|
import { useDirectMessageAffiliations } from '../../hooks/direct_messages/use_direct_message_affiliations'
|
|
10
11
|
import { useDirectMessageCandidates } from '../../hooks/direct_messages/use_direct_message_candidates'
|
|
@@ -91,31 +92,38 @@ export function ConversationSelectDirectMessageRecipientsScreen({
|
|
|
91
92
|
|
|
92
93
|
return (
|
|
93
94
|
<KeyboardView>
|
|
95
|
+
{isError && (
|
|
96
|
+
<Banner
|
|
97
|
+
appearance="error"
|
|
98
|
+
description="There was an issue starting the conversation. Please try again."
|
|
99
|
+
style={styles.errorBanner}
|
|
100
|
+
/>
|
|
101
|
+
)}
|
|
102
|
+
<ToField
|
|
103
|
+
selectedPeople={selectedPeople}
|
|
104
|
+
searchTerm={searchTerm}
|
|
105
|
+
onSearchChange={setSearchTerm}
|
|
106
|
+
onRemove={removePerson}
|
|
107
|
+
onClear={() => setSelectedPeople(new Map())}
|
|
108
|
+
searchInputRef={searchInputRef}
|
|
109
|
+
/>
|
|
94
110
|
<View style={styles.candidateResultsContainer}>
|
|
95
|
-
<
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
{
|
|
102
|
-
|
|
103
|
-
appearance="error"
|
|
104
|
-
description="There was an issue starting the conversation. Please try again."
|
|
105
|
-
style={styles.errorBanner}
|
|
106
|
-
/>
|
|
107
|
-
)}
|
|
108
|
-
<ToField
|
|
109
|
-
selectedPeople={selectedPeople}
|
|
110
|
-
searchTerm={searchTerm}
|
|
111
|
-
onSearchChange={setSearchTerm}
|
|
112
|
-
onRemove={removePerson}
|
|
113
|
-
onClear={() => setSelectedPeople(new Map())}
|
|
114
|
-
searchInputRef={searchInputRef}
|
|
115
|
-
/>
|
|
116
|
-
</>
|
|
111
|
+
<ComponentErrorBoundary
|
|
112
|
+
key={debouncedTerm}
|
|
113
|
+
fallback={
|
|
114
|
+
<Banner
|
|
115
|
+
appearance="error"
|
|
116
|
+
description="Couldn't load people right now. Try again."
|
|
117
|
+
style={styles.errorBanner}
|
|
118
|
+
/>
|
|
117
119
|
}
|
|
118
|
-
|
|
120
|
+
>
|
|
121
|
+
<CandidateResults
|
|
122
|
+
term={debouncedTerm}
|
|
123
|
+
selectedPeople={selectedPeople}
|
|
124
|
+
onSelect={selectPerson}
|
|
125
|
+
/>
|
|
126
|
+
</ComponentErrorBoundary>
|
|
119
127
|
</View>
|
|
120
128
|
<ActionButton
|
|
121
129
|
title={buttonText}
|
|
@@ -206,57 +214,53 @@ function CandidateResults({
|
|
|
206
214
|
term,
|
|
207
215
|
selectedPeople,
|
|
208
216
|
onSelect,
|
|
209
|
-
header,
|
|
210
217
|
}: {
|
|
211
218
|
term: string
|
|
212
219
|
selectedPeople: Map<string, DirectMessageCandidateResource>
|
|
213
220
|
onSelect: (candidate: DirectMessageCandidateResource) => void
|
|
214
|
-
header: ReactElement
|
|
215
221
|
}) {
|
|
216
222
|
const styles = useStyles()
|
|
217
223
|
const { data, isFetching } = useDirectMessageCandidates(term)
|
|
218
224
|
const { groups, teams, resultsDescription } = useDirectMessageAffiliations()
|
|
219
225
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
const isAtLimit = selectedPeople.size >= MAX_RECIPIENTS
|
|
223
|
-
const showsResults = term.length >= 1 && !isAtLimit && unselectedCandidates.length > 0
|
|
226
|
+
if (term.length < 1) {
|
|
227
|
+
if (selectedPeople.size > 0) return null
|
|
224
228
|
|
|
225
|
-
|
|
226
|
-
|
|
229
|
+
return (
|
|
230
|
+
<View style={styles.emptyState}>
|
|
231
|
+
<Icon name="churchCenter.people" size={40} style={styles.emptyStateIcon} />
|
|
232
|
+
<Text style={styles.emptyStateTitle}>Search for people to direct message</Text>
|
|
233
|
+
<Text variant="secondary" style={styles.emptyStateSubtitle}>
|
|
234
|
+
Start a conversation with people in your groups and teams.
|
|
235
|
+
</Text>
|
|
236
|
+
</View>
|
|
237
|
+
)
|
|
238
|
+
}
|
|
227
239
|
|
|
228
|
-
|
|
229
|
-
if (selectedPeople.size > 0) return null
|
|
240
|
+
const isAtLimit = selectedPeople.size >= MAX_RECIPIENTS
|
|
230
241
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
242
|
+
if (isAtLimit) {
|
|
243
|
+
return (
|
|
244
|
+
<View style={styles.emptyState}>
|
|
245
|
+
<Text variant="secondary" style={styles.emptyStateSubtitle}>
|
|
246
|
+
You can add up to {MAX_RECIPIENTS} people to a direct message.
|
|
247
|
+
</Text>
|
|
248
|
+
</View>
|
|
249
|
+
)
|
|
250
|
+
}
|
|
241
251
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
<View style={styles.emptyState}>
|
|
245
|
-
<Text variant="secondary" style={styles.emptyStateSubtitle}>
|
|
246
|
-
You can add up to {MAX_RECIPIENTS} people to a direct message.
|
|
247
|
-
</Text>
|
|
248
|
-
</View>
|
|
249
|
-
)
|
|
250
|
-
}
|
|
252
|
+
const unselectedCandidates = (data?.data ?? []).filter(c => !selectedPeople.has(c.id))
|
|
253
|
+
const hasTruncated = (data?.meta.totalCount ?? 0) > (data?.data.length ?? 0)
|
|
251
254
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
255
|
+
if (isFetching && unselectedCandidates.length === 0) {
|
|
256
|
+
return (
|
|
257
|
+
<View style={styles.emptyState}>
|
|
258
|
+
<Spinner />
|
|
259
|
+
</View>
|
|
260
|
+
)
|
|
261
|
+
}
|
|
259
262
|
|
|
263
|
+
if (!isFetching && unselectedCandidates.length === 0) {
|
|
260
264
|
return (
|
|
261
265
|
<View style={styles.emptyState}>
|
|
262
266
|
<Icon name="general.search" size={32} style={styles.emptyStateIcon} />
|
|
@@ -266,15 +270,13 @@ function CandidateResults({
|
|
|
266
270
|
</Text>
|
|
267
271
|
</View>
|
|
268
272
|
)
|
|
269
|
-
}
|
|
273
|
+
}
|
|
270
274
|
|
|
271
275
|
return (
|
|
272
276
|
<CandidateList
|
|
273
|
-
|
|
274
|
-
candidates={showsResults ? unselectedCandidates : []}
|
|
277
|
+
candidates={unselectedCandidates}
|
|
275
278
|
hasTruncated={hasTruncated}
|
|
276
279
|
description={resultsDescription}
|
|
277
|
-
emptyState={emptyState}
|
|
278
280
|
groups={groups}
|
|
279
281
|
teams={teams}
|
|
280
282
|
onSelect={onSelect}
|
|
@@ -307,33 +309,27 @@ function candidateAffiliationNames(
|
|
|
307
309
|
}
|
|
308
310
|
|
|
309
311
|
function CandidateList({
|
|
310
|
-
header,
|
|
311
312
|
candidates,
|
|
312
313
|
hasTruncated,
|
|
313
314
|
description,
|
|
314
|
-
emptyState,
|
|
315
315
|
groups,
|
|
316
316
|
teams,
|
|
317
317
|
onSelect,
|
|
318
318
|
}: {
|
|
319
|
-
header: ReactElement
|
|
320
319
|
candidates: DirectMessageCandidateResource[]
|
|
321
320
|
hasTruncated: boolean
|
|
322
321
|
description: string | null
|
|
323
|
-
emptyState: ReactElement | null
|
|
324
322
|
groups: Map<number, string>
|
|
325
323
|
teams: Map<number, string>
|
|
326
324
|
onSelect: (candidate: DirectMessageCandidateResource) => void
|
|
327
325
|
}) {
|
|
328
326
|
const styles = useStyles()
|
|
329
|
-
const hasCandidates = candidates.length > 0
|
|
330
327
|
const available = candidates.filter(c => !c.directMessagesDisabled)
|
|
331
328
|
const dmDisabled = candidates.filter(c => c.directMessagesDisabled)
|
|
332
329
|
|
|
333
330
|
return (
|
|
334
331
|
<FlatList<DirectMessageCandidateResource>
|
|
335
332
|
data={available}
|
|
336
|
-
contentInsetAdjustmentBehavior="automatic"
|
|
337
333
|
keyboardShouldPersistTaps="handled"
|
|
338
334
|
keyExtractor={item => item.id}
|
|
339
335
|
renderItem={({ item }) => (
|
|
@@ -344,13 +340,7 @@ function CandidateList({
|
|
|
344
340
|
onSelect={() => onSelect(item)}
|
|
345
341
|
/>
|
|
346
342
|
)}
|
|
347
|
-
ListHeaderComponent={
|
|
348
|
-
<>
|
|
349
|
-
{header}
|
|
350
|
-
{hasCandidates && <ResultsHeading description={description} />}
|
|
351
|
-
</>
|
|
352
|
-
}
|
|
353
|
-
ListEmptyComponent={emptyState}
|
|
343
|
+
ListHeaderComponent={<ResultsHeading description={description} />}
|
|
354
344
|
ListFooterComponent={
|
|
355
345
|
<>
|
|
356
346
|
{dmDisabled.length > 0 && (
|
|
@@ -371,7 +361,7 @@ function CandidateList({
|
|
|
371
361
|
))}
|
|
372
362
|
</>
|
|
373
363
|
)}
|
|
374
|
-
{
|
|
364
|
+
{hasTruncated && (
|
|
375
365
|
<View style={styles.truncatedFooter}>
|
|
376
366
|
<Text variant="secondary" style={styles.truncatedText}>
|
|
377
367
|
Keep typing to narrow your results.
|
package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx
CHANGED
|
@@ -60,7 +60,6 @@ export const ConversationSelectGroupRecipientsScreen = ({
|
|
|
60
60
|
|
|
61
61
|
return (
|
|
62
62
|
<SectionList<GroupsGroupResource, GroupsSection>
|
|
63
|
-
contentInsetAdjustmentBehavior="automatic"
|
|
64
63
|
sections={sections}
|
|
65
64
|
keyExtractor={item => item.id.toString()}
|
|
66
65
|
stickySectionHeadersEnabled={false}
|