@planningcenter/chat-react-native 3.38.0-rc.0 → 3.38.0-rc.1
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/conversations/conversations.d.ts.map +1 -1
- package/build/components/conversations/conversations.js +6 -16
- package/build/components/conversations/conversations.js.map +1 -1
- package/build/components/conversations/conversations_blank_state.d.ts +8 -0
- package/build/components/conversations/conversations_blank_state.d.ts.map +1 -0
- package/build/components/conversations/conversations_blank_state.js +25 -0
- package/build/components/conversations/conversations_blank_state.js.map +1 -0
- package/build/screens/age_check/age_check_underage_screen.js +1 -1
- package/build/screens/age_check/age_check_underage_screen.js.map +1 -1
- package/package.json +2 -2
- package/src/components/conversations/conversations.tsx +9 -16
- package/src/components/conversations/conversations_blank_state.tsx +42 -0
- package/src/screens/age_check/age_check_underage_screen.tsx +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../../src/components/conversations/conversations.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../../src/components/conversations/conversations.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAWtC,UAAU,kBAAkB;IAC1B,mBAAmB,CAAC,EAChB,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GACxB,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAClE,IAAI,GACJ,SAAS,CAAA;CACd;AAED,eAAO,MAAM,aAAa,GAAI,yBAAyB,kBAAkB,sBA4ExE,CAAA"}
|
|
@@ -3,14 +3,17 @@ import React, { useMemo } from 'react';
|
|
|
3
3
|
import { FlatList, StyleSheet, View } from 'react-native';
|
|
4
4
|
import { useConversationsContext } from '../../contexts/conversations_context';
|
|
5
5
|
import { useTheme } from '../../hooks';
|
|
6
|
+
import { useCanCreateConversations } from '../../hooks/use_chat_permissions';
|
|
6
7
|
import { useConversationsJoltEvents } from '../../hooks/use_conversations_jolt_events';
|
|
7
8
|
import { throwResponseError } from '../../utils/response_error';
|
|
8
|
-
import BlankState from '../primitive/blank_state_primitive';
|
|
9
9
|
import { ConversationPreview, ConversationPreviewSkeleton } from './conversation_preview';
|
|
10
|
+
import { ConversationsBlankState } from './conversations_blank_state';
|
|
10
11
|
export const Conversations = ({ ListHeaderComponent }) => {
|
|
11
12
|
const styles = useStyles();
|
|
12
|
-
const { conversations, isLoading, fetchNextPage, refetch, isRefetching, isFetched, isError, error, args: { chat_group_graph_id }, } = useConversationsContext();
|
|
13
|
+
const { conversations, isLoading, fetchNextPage, refetch, isRefetching, isFetched, isError, error, args: { chat_group_graph_id, group_source_app_name }, } = useConversationsContext();
|
|
13
14
|
const navigation = useNavigation();
|
|
15
|
+
const canCreateConversations = useCanCreateConversations();
|
|
16
|
+
const isFilterApplied = !!chat_group_graph_id || !!group_source_app_name;
|
|
14
17
|
const showBadges = !chat_group_graph_id;
|
|
15
18
|
const data = useMemo(() => {
|
|
16
19
|
if (isLoading) {
|
|
@@ -27,14 +30,7 @@ export const Conversations = ({ ListHeaderComponent }) => {
|
|
|
27
30
|
}
|
|
28
31
|
useConversationsJoltEvents();
|
|
29
32
|
return (<View style={styles.container}>
|
|
30
|
-
<FlatList data={data} keyExtractor={item => item.id.toString()} contentContainerStyle={styles.contentContainer} onRefresh={refetch} refreshing={!isFetched && isRefetching} ListHeaderComponent={ListHeaderComponent} ListEmptyComponent={<
|
|
31
|
-
<BlankState.Root>
|
|
32
|
-
<BlankState.Imagery name="general.outlinedTextMessage"/>
|
|
33
|
-
<BlankState.Content>
|
|
34
|
-
<BlankState.Heading>No conversations</BlankState.Heading>
|
|
35
|
-
</BlankState.Content>
|
|
36
|
-
</BlankState.Root>
|
|
37
|
-
</View>} renderItem={({ item }) => {
|
|
33
|
+
<FlatList data={data} keyExtractor={item => item.id.toString()} contentContainerStyle={styles.contentContainer} onRefresh={refetch} refreshing={!isFetched && isRefetching} ListHeaderComponent={ListHeaderComponent} ListEmptyComponent={<ConversationsBlankState isFilterApplied={isFilterApplied} canCreateConversations={canCreateConversations}/>} renderItem={({ item }) => {
|
|
38
34
|
if (item.type === 'loading') {
|
|
39
35
|
return <ConversationPreviewSkeleton />;
|
|
40
36
|
}
|
|
@@ -56,12 +52,6 @@ const useStyles = () => {
|
|
|
56
52
|
container: { flex: 1 },
|
|
57
53
|
contentContainer: { paddingVertical: 16 },
|
|
58
54
|
listItem: { color: colors.fillColorNeutral020 },
|
|
59
|
-
listEmpty: {
|
|
60
|
-
flex: 1,
|
|
61
|
-
justifyContent: 'center',
|
|
62
|
-
alignItems: 'center',
|
|
63
|
-
paddingVertical: 32,
|
|
64
|
-
},
|
|
65
55
|
});
|
|
66
56
|
};
|
|
67
57
|
const loadingPlaceholder = Array.from({ length: 5 }, (_, i) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../../src/components/conversations/conversations.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AAEtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../../src/components/conversations/conversations.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useNavigation } from '@react-navigation/native'\nimport React, { useMemo } from 'react'\nimport { FlatList, StyleSheet, View } from 'react-native'\nimport { useConversationsContext } from '../../contexts/conversations_context'\nimport { useTheme } from '../../hooks'\nimport { useCanCreateConversations } from '../../hooks/use_chat_permissions'\nimport { useConversationsJoltEvents } from '../../hooks/use_conversations_jolt_events'\nimport { ConversationResource } from '../../types'\nimport { throwResponseError } from '../../utils/response_error'\nimport { ConversationPreview, ConversationPreviewSkeleton } from './conversation_preview'\nimport { ConversationsBlankState } from './conversations_blank_state'\n\ninterface ConversationsProps {\n ListHeaderComponent?:\n | React.ComponentType<any>\n | React.ReactElement<any, string | React.JSXElementConstructor<any>>\n | null\n | undefined\n}\n\nexport const Conversations = ({ ListHeaderComponent }: ConversationsProps) => {\n const styles = useStyles()\n const {\n conversations,\n isLoading,\n fetchNextPage,\n refetch,\n isRefetching,\n isFetched,\n isError,\n error,\n args: { chat_group_graph_id, group_source_app_name },\n } = useConversationsContext()\n const navigation = useNavigation()\n const canCreateConversations = useCanCreateConversations()\n const isFilterApplied = !!chat_group_graph_id || !!group_source_app_name\n\n const showBadges = !chat_group_graph_id\n\n const data: FlatListItem[] = useMemo(() => {\n if (isLoading) {\n return loadingPlaceholder\n }\n return conversations.map(conversation => ({\n type: 'conversation' as const,\n id: conversation.id,\n resource: conversation,\n }))\n }, [conversations, isLoading])\n\n if (isError) {\n throwResponseError(error)\n }\n\n useConversationsJoltEvents()\n\n return (\n <View style={styles.container}>\n <FlatList\n data={data}\n keyExtractor={item => item.id.toString()}\n contentContainerStyle={styles.contentContainer}\n onRefresh={refetch}\n refreshing={!isFetched && isRefetching}\n ListHeaderComponent={ListHeaderComponent}\n ListEmptyComponent={\n <ConversationsBlankState\n isFilterApplied={isFilterApplied}\n canCreateConversations={canCreateConversations}\n />\n }\n renderItem={({ item }) => {\n if (item.type === 'loading') {\n return <ConversationPreviewSkeleton />\n } else {\n return (\n <ConversationPreview\n conversation={item.resource}\n onPress={() =>\n navigation.navigate('Conversation', {\n conversation_id: item.resource.id,\n title: item.resource.title,\n badge: item.resource.badges?.[0],\n deleted: item.resource.deleted,\n muted: item.resource.muted,\n })\n }\n showBadges={showBadges}\n />\n )\n }\n }}\n onEndReached={() => fetchNextPage()}\n />\n </View>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n container: { flex: 1 },\n contentContainer: { paddingVertical: 16 },\n listItem: { color: colors.fillColorNeutral020 },\n })\n}\n\ninterface FlatListLoadingItem {\n type: 'loading'\n id: string\n}\ninterface FlatListConversationItem {\n type: 'conversation'\n resource: ConversationResource\n id: number\n}\ntype FlatListItem = FlatListLoadingItem | FlatListConversationItem\n\nconst loadingPlaceholder: FlatListItem[] = Array.from({ length: 5 }, (_, i) => ({\n type: 'loading',\n id: `loading${i}`,\n}))\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface ConversationsBlankStateProps {
|
|
3
|
+
isFilterApplied: boolean;
|
|
4
|
+
canCreateConversations: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function ConversationsBlankState({ isFilterApplied, canCreateConversations, }: ConversationsBlankStateProps): React.JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=conversations_blank_state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversations_blank_state.d.ts","sourceRoot":"","sources":["../../../src/components/conversations/conversations_blank_state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,UAAU,4BAA4B;IACpC,eAAe,EAAE,OAAO,CAAA;IACxB,sBAAsB,EAAE,OAAO,CAAA;CAChC;AAED,wBAAgB,uBAAuB,CAAC,EACtC,eAAe,EACf,sBAAsB,GACvB,EAAE,4BAA4B,qBAoB9B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
import BlankState from '../primitive/blank_state_primitive';
|
|
4
|
+
export function ConversationsBlankState({ isFilterApplied, canCreateConversations, }) {
|
|
5
|
+
return (<View style={styles.container}>
|
|
6
|
+
<BlankState.Root>
|
|
7
|
+
<BlankState.Imagery name="general.outlinedTextMessage"/>
|
|
8
|
+
<BlankState.Content>
|
|
9
|
+
<BlankState.Heading>No conversations yet.</BlankState.Heading>
|
|
10
|
+
{isFilterApplied ? (<BlankState.Text>Adjust your filters to find conversations.</BlankState.Text>) : canCreateConversations ? (<BlankState.Text>Tap the compose button to get started.</BlankState.Text>) : (<BlankState.Text>
|
|
11
|
+
When your groups or teams start chatting, you’ll find them here.
|
|
12
|
+
</BlankState.Text>)}
|
|
13
|
+
</BlankState.Content>
|
|
14
|
+
</BlankState.Root>
|
|
15
|
+
</View>);
|
|
16
|
+
}
|
|
17
|
+
const styles = StyleSheet.create({
|
|
18
|
+
container: {
|
|
19
|
+
flex: 1,
|
|
20
|
+
justifyContent: 'center',
|
|
21
|
+
alignItems: 'center',
|
|
22
|
+
paddingVertical: 32,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=conversations_blank_state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversations_blank_state.js","sourceRoot":"","sources":["../../../src/components/conversations/conversations_blank_state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,UAAU,MAAM,oCAAoC,CAAA;AAO3D,MAAM,UAAU,uBAAuB,CAAC,EACtC,eAAe,EACf,sBAAsB,GACO;IAC7B,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,UAAU,CAAC,IAAI,CACd;QAAA,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,EACtD;QAAA,CAAC,UAAU,CAAC,OAAO,CACjB;UAAA,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,UAAU,CAAC,OAAO,CAC7D;UAAA,CAAC,eAAe,CAAC,CAAC,CAAC,CACjB,CAAC,UAAU,CAAC,IAAI,CAAC,0CAA0C,EAAE,UAAU,CAAC,IAAI,CAAC,CAC9E,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAC3B,CAAC,UAAU,CAAC,IAAI,CAAC,sCAAsC,EAAE,UAAU,CAAC,IAAI,CAAC,CAC1E,CAAC,CAAC,CAAC,CACF,CAAC,UAAU,CAAC,IAAI,CACd;;YACF,EAAE,UAAU,CAAC,IAAI,CAAC,CACnB,CACH;QAAA,EAAE,UAAU,CAAC,OAAO,CACtB;MAAA,EAAE,UAAU,CAAC,IAAI,CACnB;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,eAAe,EAAE,EAAE;KACpB;CACF,CAAC,CAAA","sourcesContent":["import React from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport BlankState from '../primitive/blank_state_primitive'\n\ninterface ConversationsBlankStateProps {\n isFilterApplied: boolean\n canCreateConversations: boolean\n}\n\nexport function ConversationsBlankState({\n isFilterApplied,\n canCreateConversations,\n}: ConversationsBlankStateProps) {\n return (\n <View style={styles.container}>\n <BlankState.Root>\n <BlankState.Imagery name=\"general.outlinedTextMessage\" />\n <BlankState.Content>\n <BlankState.Heading>No conversations yet.</BlankState.Heading>\n {isFilterApplied ? (\n <BlankState.Text>Adjust your filters to find conversations.</BlankState.Text>\n ) : canCreateConversations ? (\n <BlankState.Text>Tap the compose button to get started.</BlankState.Text>\n ) : (\n <BlankState.Text>\n When your groups or teams start chatting, you’ll find them here.\n </BlankState.Text>\n )}\n </BlankState.Content>\n </BlankState.Root>\n </View>\n )\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingVertical: 32,\n },\n})\n"]}
|
|
@@ -21,7 +21,7 @@ export function AgeCheckUnderageScreen({ contactEmail } = {}) {
|
|
|
21
21
|
|
|
22
22
|
<View style={styles.content}>
|
|
23
23
|
<Heading variant="h3" style={styles.baseText}>
|
|
24
|
-
|
|
24
|
+
Chat is only available for users 13 and older.
|
|
25
25
|
</Heading>
|
|
26
26
|
<Text variant="tertiary" style={styles.baseText}>
|
|
27
27
|
If you submitted the wrong birthdate by accident,{` `}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"age_check_underage_screen.js","sourceRoot":"","sources":["../../../src/screens/age_check/age_check_underage_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useRoute, RouteProp } from '@react-navigation/native'\nimport React from 'react'\nimport { Linking, StyleSheet, View, ScrollView } from 'react-native'\nimport { Heading } from '../../components'\nimport { Icon, Text, TextInlineButton } from '../../components/display'\nimport { useTheme } from '../../hooks'\nimport type { AgeCheckParams } from './screen_props'\n\nexport interface AgeCheckUnderageScreenProps {\n contactEmail?: string\n}\n\nexport function AgeCheckUnderageScreen({ contactEmail }: AgeCheckUnderageScreenProps = {}) {\n const styles = useStyles()\n const route = useRoute<RouteProp<AgeCheckParams, 'UnderagePerson'>>()\n\n const email = contactEmail ?? route?.params?.contactEmail\n\n const openChurchAdminHelp = () => {\n if (!email) return\n Linking.openURL(`mailto:${email}`)\n }\n\n const openTerms = () => {\n Linking.openURL('https://www.planningcenter.com/terms')\n }\n\n return (\n <ScrollView style={styles.scrollView} contentContainerStyle={styles.container}>\n <Icon name=\"general.outlinedTextMessage\" size={32} style={styles.icon} />\n\n <View style={styles.content}>\n <Heading variant=\"h3\" style={styles.baseText}>\n
|
|
1
|
+
{"version":3,"file":"age_check_underage_screen.js","sourceRoot":"","sources":["../../../src/screens/age_check/age_check_underage_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useRoute, RouteProp } from '@react-navigation/native'\nimport React from 'react'\nimport { Linking, StyleSheet, View, ScrollView } from 'react-native'\nimport { Heading } from '../../components'\nimport { Icon, Text, TextInlineButton } from '../../components/display'\nimport { useTheme } from '../../hooks'\nimport type { AgeCheckParams } from './screen_props'\n\nexport interface AgeCheckUnderageScreenProps {\n contactEmail?: string\n}\n\nexport function AgeCheckUnderageScreen({ contactEmail }: AgeCheckUnderageScreenProps = {}) {\n const styles = useStyles()\n const route = useRoute<RouteProp<AgeCheckParams, 'UnderagePerson'>>()\n\n const email = contactEmail ?? route?.params?.contactEmail\n\n const openChurchAdminHelp = () => {\n if (!email) return\n Linking.openURL(`mailto:${email}`)\n }\n\n const openTerms = () => {\n Linking.openURL('https://www.planningcenter.com/terms')\n }\n\n return (\n <ScrollView style={styles.scrollView} contentContainerStyle={styles.container}>\n <Icon name=\"general.outlinedTextMessage\" size={32} style={styles.icon} />\n\n <View style={styles.content}>\n <Heading variant=\"h3\" style={styles.baseText}>\n Chat is only available for users 13 and older.\n </Heading>\n <Text variant=\"tertiary\" style={styles.baseText}>\n If you submitted the wrong birthdate by accident,{` `}\n {email ? (\n <TextInlineButton\n onPress={openChurchAdminHelp}\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens email client to contact your church administrator\"\n style={styles.linkText}\n >\n please contact your church administrator\n </TextInlineButton>\n ) : (\n <>please contact your church administrator</>\n )}\n {` `}\n to update your profile.\n </Text>\n <Text variant=\"tertiary\" style={styles.baseText}>\n For more information, view our{` `}\n <TextInlineButton\n onPress={openTerms}\n accessibilityRole=\"link\"\n accessibilityHint=\"Opens terms of service in browser\"\n style={styles.linkText}\n >\n terms of service\n </TextInlineButton>\n .\n </Text>\n </View>\n </ScrollView>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n return StyleSheet.create({\n scrollView: {\n flex: 1,\n },\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n gap: 16,\n padding: 16,\n minHeight: '100%',\n },\n icon: {\n color: colors.iconColorDefaultDisabled,\n },\n content: {\n alignItems: 'center',\n gap: 8,\n maxWidth: 250,\n },\n baseText: {\n textAlign: 'center',\n color: colors.textColorDefaultSecondary,\n },\n linkText: {\n fontSize: 14,\n },\n })\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/chat-react-native",
|
|
3
|
-
"version": "3.38.0-rc.
|
|
3
|
+
"version": "3.38.0-rc.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"react-native": "./src/index.tsx",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"react-native-url-polyfill": "^2.0.0",
|
|
73
73
|
"typescript": "~5.9.2"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "addadedc983bf11d717e5528d8d4d143a7acd4c9"
|
|
76
76
|
}
|
|
@@ -3,11 +3,12 @@ import React, { useMemo } from 'react'
|
|
|
3
3
|
import { FlatList, StyleSheet, View } from 'react-native'
|
|
4
4
|
import { useConversationsContext } from '../../contexts/conversations_context'
|
|
5
5
|
import { useTheme } from '../../hooks'
|
|
6
|
+
import { useCanCreateConversations } from '../../hooks/use_chat_permissions'
|
|
6
7
|
import { useConversationsJoltEvents } from '../../hooks/use_conversations_jolt_events'
|
|
7
8
|
import { ConversationResource } from '../../types'
|
|
8
9
|
import { throwResponseError } from '../../utils/response_error'
|
|
9
|
-
import BlankState from '../primitive/blank_state_primitive'
|
|
10
10
|
import { ConversationPreview, ConversationPreviewSkeleton } from './conversation_preview'
|
|
11
|
+
import { ConversationsBlankState } from './conversations_blank_state'
|
|
11
12
|
|
|
12
13
|
interface ConversationsProps {
|
|
13
14
|
ListHeaderComponent?:
|
|
@@ -28,9 +29,11 @@ export const Conversations = ({ ListHeaderComponent }: ConversationsProps) => {
|
|
|
28
29
|
isFetched,
|
|
29
30
|
isError,
|
|
30
31
|
error,
|
|
31
|
-
args: { chat_group_graph_id },
|
|
32
|
+
args: { chat_group_graph_id, group_source_app_name },
|
|
32
33
|
} = useConversationsContext()
|
|
33
34
|
const navigation = useNavigation()
|
|
35
|
+
const canCreateConversations = useCanCreateConversations()
|
|
36
|
+
const isFilterApplied = !!chat_group_graph_id || !!group_source_app_name
|
|
34
37
|
|
|
35
38
|
const showBadges = !chat_group_graph_id
|
|
36
39
|
|
|
@@ -61,14 +64,10 @@ export const Conversations = ({ ListHeaderComponent }: ConversationsProps) => {
|
|
|
61
64
|
refreshing={!isFetched && isRefetching}
|
|
62
65
|
ListHeaderComponent={ListHeaderComponent}
|
|
63
66
|
ListEmptyComponent={
|
|
64
|
-
<
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
<BlankState.Heading>No conversations</BlankState.Heading>
|
|
69
|
-
</BlankState.Content>
|
|
70
|
-
</BlankState.Root>
|
|
71
|
-
</View>
|
|
67
|
+
<ConversationsBlankState
|
|
68
|
+
isFilterApplied={isFilterApplied}
|
|
69
|
+
canCreateConversations={canCreateConversations}
|
|
70
|
+
/>
|
|
72
71
|
}
|
|
73
72
|
renderItem={({ item }) => {
|
|
74
73
|
if (item.type === 'loading') {
|
|
@@ -104,12 +103,6 @@ const useStyles = () => {
|
|
|
104
103
|
container: { flex: 1 },
|
|
105
104
|
contentContainer: { paddingVertical: 16 },
|
|
106
105
|
listItem: { color: colors.fillColorNeutral020 },
|
|
107
|
-
listEmpty: {
|
|
108
|
-
flex: 1,
|
|
109
|
-
justifyContent: 'center',
|
|
110
|
-
alignItems: 'center',
|
|
111
|
-
paddingVertical: 32,
|
|
112
|
-
},
|
|
113
106
|
})
|
|
114
107
|
}
|
|
115
108
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { StyleSheet, View } from 'react-native'
|
|
3
|
+
import BlankState from '../primitive/blank_state_primitive'
|
|
4
|
+
|
|
5
|
+
interface ConversationsBlankStateProps {
|
|
6
|
+
isFilterApplied: boolean
|
|
7
|
+
canCreateConversations: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function ConversationsBlankState({
|
|
11
|
+
isFilterApplied,
|
|
12
|
+
canCreateConversations,
|
|
13
|
+
}: ConversationsBlankStateProps) {
|
|
14
|
+
return (
|
|
15
|
+
<View style={styles.container}>
|
|
16
|
+
<BlankState.Root>
|
|
17
|
+
<BlankState.Imagery name="general.outlinedTextMessage" />
|
|
18
|
+
<BlankState.Content>
|
|
19
|
+
<BlankState.Heading>No conversations yet.</BlankState.Heading>
|
|
20
|
+
{isFilterApplied ? (
|
|
21
|
+
<BlankState.Text>Adjust your filters to find conversations.</BlankState.Text>
|
|
22
|
+
) : canCreateConversations ? (
|
|
23
|
+
<BlankState.Text>Tap the compose button to get started.</BlankState.Text>
|
|
24
|
+
) : (
|
|
25
|
+
<BlankState.Text>
|
|
26
|
+
When your groups or teams start chatting, you’ll find them here.
|
|
27
|
+
</BlankState.Text>
|
|
28
|
+
)}
|
|
29
|
+
</BlankState.Content>
|
|
30
|
+
</BlankState.Root>
|
|
31
|
+
</View>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const styles = StyleSheet.create({
|
|
36
|
+
container: {
|
|
37
|
+
flex: 1,
|
|
38
|
+
justifyContent: 'center',
|
|
39
|
+
alignItems: 'center',
|
|
40
|
+
paddingVertical: 32,
|
|
41
|
+
},
|
|
42
|
+
})
|
|
@@ -31,7 +31,7 @@ export function AgeCheckUnderageScreen({ contactEmail }: AgeCheckUnderageScreenP
|
|
|
31
31
|
|
|
32
32
|
<View style={styles.content}>
|
|
33
33
|
<Heading variant="h3" style={styles.baseText}>
|
|
34
|
-
|
|
34
|
+
Chat is only available for users 13 and older.
|
|
35
35
|
</Heading>
|
|
36
36
|
<Text variant="tertiary" style={styles.baseText}>
|
|
37
37
|
If you submitted the wrong birthdate by accident,{` `}
|