@planningcenter/chat-react-native 3.2.0-rc.17 → 3.2.0-rc.18
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/navigation/index.d.ts +26 -16
- package/build/navigation/index.d.ts.map +1 -1
- package/build/navigation/index.js +11 -0
- package/build/navigation/index.js.map +1 -1
- package/build/screens/conversation_select_recipients/components/recipient_link_row.d.ts +12 -0
- package/build/screens/conversation_select_recipients/components/recipient_link_row.d.ts.map +1 -0
- package/build/screens/conversation_select_recipients/components/recipient_link_row.js +61 -0
- package/build/screens/conversation_select_recipients/components/recipient_link_row.js.map +1 -0
- package/build/screens/conversation_select_recipients/components/view_more_link_row.d.ts +7 -0
- package/build/screens/conversation_select_recipients/components/view_more_link_row.d.ts.map +1 -0
- package/build/screens/conversation_select_recipients/components/view_more_link_row.js +21 -0
- package/build/screens/conversation_select_recipients/components/view_more_link_row.js.map +1 -0
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.d.ts +4 -0
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.d.ts.map +1 -0
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js +46 -0
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js.map +1 -0
- package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.d.ts +1 -8
- package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.js +26 -56
- package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/types/screen_props.d.ts +9 -0
- package/build/screens/conversation_select_recipients/types/screen_props.d.ts.map +1 -0
- package/build/screens/conversation_select_recipients/types/screen_props.js +2 -0
- package/build/screens/conversation_select_recipients/types/screen_props.js.map +1 -0
- package/package.json +2 -2
- package/src/navigation/index.tsx +16 -0
- package/src/screens/conversation_select_recipients/components/recipient_link_row.tsx +91 -0
- package/src/screens/conversation_select_recipients/components/view_more_link_row.tsx +30 -0
- package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx +76 -0
- package/src/screens/conversation_select_recipients/conversation_select_recipients_screen.tsx +39 -73
- package/src/screens/conversation_select_recipients/types/screen_props.tsx +11 -0
|
@@ -27,18 +27,23 @@ export declare const NewConversationStack: import("@react-navigation/native").Ty
|
|
|
27
27
|
readonly screenLayout: typeof ScreenLayout;
|
|
28
28
|
readonly screens: {
|
|
29
29
|
readonly ConversationSelectRecipients: {
|
|
30
|
-
readonly screen: ({ route, }:
|
|
31
|
-
route: {
|
|
32
|
-
params: {
|
|
33
|
-
chat_group_graph_id?: import("../types/resources/group_resource").GraphId;
|
|
34
|
-
group_source_app_name?: import("../types/resources/app_name").AppName;
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
}) => React.JSX.Element;
|
|
30
|
+
readonly screen: ({ route, }: import("../screens/conversation_select_recipients/types/screen_props").ConversationSelectRecipientsScreenProps) => React.JSX.Element;
|
|
38
31
|
readonly options: ({ navigation }: {
|
|
39
32
|
route: import("@react-navigation/native").RouteProp<import("@react-navigation/native").ParamListBase, string>;
|
|
40
33
|
navigation: import("@react-navigation/native-stack").NativeStackNavigationProp<import("@react-navigation/native").ParamListBase, string, undefined>;
|
|
41
34
|
theme: ReactNavigation.Theme;
|
|
35
|
+
}) => {
|
|
36
|
+
title: string;
|
|
37
|
+
headerRight: (props: NativeStackHeaderRightProps) => React.JSX.Element;
|
|
38
|
+
headerBackVisible: false;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
readonly ConversationSelectGroupRecipients: {
|
|
42
|
+
readonly screen: ({ route, }: import("../screens/conversation_select_recipients/types/screen_props").ConversationSelectRecipientsScreenProps) => React.JSX.Element;
|
|
43
|
+
readonly options: ({ navigation, route }: {
|
|
44
|
+
route: import("@react-navigation/native").RouteProp<import("@react-navigation/native").ParamListBase, string>;
|
|
45
|
+
navigation: import("@react-navigation/native-stack").NativeStackNavigationProp<import("@react-navigation/native").ParamListBase, string, undefined>;
|
|
46
|
+
theme: ReactNavigation.Theme;
|
|
42
47
|
}) => {
|
|
43
48
|
title: string;
|
|
44
49
|
headerRight: (props: NativeStackHeaderRightProps) => React.JSX.Element;
|
|
@@ -146,18 +151,23 @@ export declare const ChatStack: import("@react-navigation/native").TypedNavigato
|
|
|
146
151
|
readonly screenLayout: typeof ScreenLayout;
|
|
147
152
|
readonly screens: {
|
|
148
153
|
readonly ConversationSelectRecipients: {
|
|
149
|
-
readonly screen: ({ route, }:
|
|
150
|
-
route: {
|
|
151
|
-
params: {
|
|
152
|
-
chat_group_graph_id?: import("../types/resources/group_resource").GraphId;
|
|
153
|
-
group_source_app_name?: import("../types/resources/app_name").AppName;
|
|
154
|
-
};
|
|
155
|
-
};
|
|
156
|
-
}) => React.JSX.Element;
|
|
154
|
+
readonly screen: ({ route, }: import("../screens/conversation_select_recipients/types/screen_props").ConversationSelectRecipientsScreenProps) => React.JSX.Element;
|
|
157
155
|
readonly options: ({ navigation }: {
|
|
158
156
|
route: import("@react-navigation/native").RouteProp<import("@react-navigation/native").ParamListBase, string>;
|
|
159
157
|
navigation: import("@react-navigation/native-stack").NativeStackNavigationProp<import("@react-navigation/native").ParamListBase, string, undefined>;
|
|
160
158
|
theme: ReactNavigation.Theme;
|
|
159
|
+
}) => {
|
|
160
|
+
title: string;
|
|
161
|
+
headerRight: (props: NativeStackHeaderRightProps) => React.JSX.Element;
|
|
162
|
+
headerBackVisible: false;
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
readonly ConversationSelectGroupRecipients: {
|
|
166
|
+
readonly screen: ({ route, }: import("../screens/conversation_select_recipients/types/screen_props").ConversationSelectRecipientsScreenProps) => React.JSX.Element;
|
|
167
|
+
readonly options: ({ navigation, route }: {
|
|
168
|
+
route: import("@react-navigation/native").RouteProp<import("@react-navigation/native").ParamListBase, string>;
|
|
169
|
+
navigation: import("@react-navigation/native-stack").NativeStackNavigationProp<import("@react-navigation/native").ParamListBase, string, undefined>;
|
|
170
|
+
theme: ReactNavigation.Theme;
|
|
161
171
|
}) => {
|
|
162
172
|
title: string;
|
|
163
173
|
headerRight: (props: NativeStackHeaderRightProps) => React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAEL,2BAA2B,EAC5B,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AAOnF,OAAO,EACL,oBAAoB,EAErB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,eAAe,EAA0B,MAAM,8BAA8B,CAAA;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAA0B,MAAM,6BAA6B,CAAA;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAEL,2BAA2B,EAC5B,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AAOnF,OAAO,EACL,oBAAoB,EAErB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,eAAe,EAA0B,MAAM,8BAA8B,CAAA;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAA0B,MAAM,6BAA6B,CAAA;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQ7C,eAAO,MAAM,oBAAoB;;;;;;;;;uOAvBoC,mBACjE;;;;;;;;;;;;;uBA2KqgZ,gBAAiB,KAAK;;;qCA1IlgZ,2BAA2B;;;;;;;;;uBA0Ii9Y,gBAAiB,KAAK;;;qCA9HlgZ,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;uBA8Hi9Y,gBAAiB,KAAK;;;;qCA3GlgZ,2BAA2B;;;;EAWtD,CAAA;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;uBA8Fm/Y,gBAAiB,KAAK;;;qCApFlgZ,2BAA2B;;;;;;;;;;;;uBAoFi9Y,gBAAiB,KAAK;;;;;;;;;;;uBAAtB,gBAAiB,KAAK;;;;qCA9ClgZ,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;mDA8Ck+Y,KAAK;;;iDA1IlgZ,2BAA2B;;;;;;;;;mDA0Ik+Y,KAAK;;;iDA9HlgZ,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;mDA8Hk+Y,KAAK;;;;iDA3GlgZ,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkGtD,CAAA;AAEF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,SAAS,CAAC,CAAA;AAE3D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,eAAe,CAAC;QACxB,UAAU,aAAc,SAAQ,kBAAkB;SAAG;KACtD;CACF"}
|
|
@@ -15,6 +15,7 @@ import { ReactionsScreen, ReactionsScreenOptions } from '../screens/reactions_sc
|
|
|
15
15
|
import { HeaderRightButton } from './header';
|
|
16
16
|
import { ScreenLayout } from './screenLayout';
|
|
17
17
|
import { ConversationFiltersScreen, ConversationFiltersScreenOptions, } from '../screens/conversation_filters_screen';
|
|
18
|
+
import { ConversationSelectGroupRecipientsScreen } from '../screens/conversation_select_recipients/conversation_select_group_recipients_screen';
|
|
18
19
|
export const NewConversationStack = createNativeStackNavigator({
|
|
19
20
|
initialRouteName: 'ConversationSelectRecipients',
|
|
20
21
|
screenOptions: {
|
|
@@ -28,6 +29,16 @@ export const NewConversationStack = createNativeStackNavigator({
|
|
|
28
29
|
title: 'New conversation',
|
|
29
30
|
headerRight: (props) => (<HeaderRightButton {...props} onPress={navigation.goBack}>
|
|
30
31
|
Cancel
|
|
32
|
+
</HeaderRightButton>),
|
|
33
|
+
headerBackVisible: false,
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
ConversationSelectGroupRecipients: {
|
|
37
|
+
screen: ConversationSelectGroupRecipientsScreen,
|
|
38
|
+
options: ({ navigation, route }) => ({
|
|
39
|
+
title: 'New conversation',
|
|
40
|
+
headerRight: (props) => (<HeaderRightButton {...props} onPress={() => navigation.popTo('Conversations', route.params)}>
|
|
41
|
+
Cancel
|
|
31
42
|
</HeaderRightButton>),
|
|
32
43
|
}),
|
|
33
44
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HeaderBackButton } from '@react-navigation/elements'\nimport { StaticParamList } from '@react-navigation/native'\nimport {\n createNativeStackNavigator,\n NativeStackHeaderRightProps,\n} from '@react-navigation/native-stack'\nimport React from 'react'\nimport { Icon } from '../components'\nimport { ConversationDetailsScreen } from '../screens/conversation_details_screen'\nimport { ConversationScreen } from '../screens/conversation_screen'\nimport { ConversationsScreen } from '../screens/conversations/conversations_screen'\nimport { ConversationNewScreen } from '../screens/conversation_new/conversation_new_screen'\nimport {\n ConversationFilterReceipientsScreenOptions,\n ConversationFilterRecipientsScreen,\n} from '../screens/conversation_filter_recipients/conversation_filter_recipients_screen'\nimport { ConversationSelectRecipientsScreen } from '../screens/conversation_select_recipients/conversation_select_recipients_screen'\nimport {\n MessageActionsScreen,\n MessageActionsScreenOptions,\n} from '../screens/message_actions_screen'\nimport { SendGiphyScreen, SendGiphyScreenOptions } from '../screens/send_giphy_screen'\nimport { NotFound } from '../screens/not_found'\nimport { ReactionsScreen, ReactionsScreenOptions } from '../screens/reactions_screen'\nimport { HeaderRightButton } from './header'\nimport { ScreenLayout } from './screenLayout'\nimport {\n ConversationFiltersScreen,\n ConversationFiltersScreenOptions,\n} from '../screens/conversation_filters_screen'\nimport { ConversationFiltersParams } from '../screens/conversation_filters/screen_props'\n\nexport const NewConversationStack = createNativeStackNavigator({\n initialRouteName: 'ConversationSelectRecipients',\n screenOptions: {\n headerBackButtonDisplayMode: 'minimal',\n },\n screenLayout: ScreenLayout,\n screens: {\n ConversationSelectRecipients: {\n screen: ConversationSelectRecipientsScreen,\n options: ({ navigation }) => ({\n title: 'New conversation',\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderRightButton {...props} onPress={navigation.goBack}>\n Cancel\n </HeaderRightButton>\n ),\n }),\n },\n ConversationFilterRecipients: {\n screen: ConversationFilterRecipientsScreen,\n options: ConversationFilterReceipientsScreenOptions,\n },\n ConversationNew: {\n screen: ConversationNewScreen,\n options: ({ navigation, route }) => ({\n title: 'New conversation',\n headerLeft: () => null,\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderRightButton\n {...props}\n onPress={() => navigation.popTo('Conversations', route.params)}\n >\n Cancel\n </HeaderRightButton>\n ),\n }),\n },\n },\n})\n\nexport const ChatStack = createNativeStackNavigator({\n screenOptions: {\n headerBackButtonDisplayMode: 'minimal',\n },\n screenLayout: ScreenLayout,\n screens: {\n Conversations: {\n screen: ConversationsScreen,\n options: ({ route, navigation }) => ({\n headerTitle: (route.params as { title?: string })?.title ?? 'Chat',\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderBackButton\n backImage={() => <Icon name=\"general.x\" size={18} color={props.tintColor} />}\n onPress={navigation.goBack}\n {...props}\n />\n ),\n }),\n },\n ConversationFilters: {\n screen: ConversationFiltersScreen,\n options: ConversationFiltersScreenOptions,\n },\n Conversation: {\n screen: ConversationScreen,\n options: ({ route, navigation }) => ({\n headerTitle: (route.params as { title?: string })?.title ?? 'Chat',\n headerLeft: props => (\n <HeaderBackButton\n displayMode=\"minimal\"\n onPress={() => {\n if ((route.params as ConversationFiltersParams)?.chat_group_graph_id) {\n // Ensure that conversations with a graph id pass them back to the conversation list\n navigation.popTo('Conversations', route.params)\n } else {\n navigation.goBack()\n }\n }}\n {...props}\n />\n ),\n }),\n },\n ConversationDetails: {\n screen: ConversationDetailsScreen,\n options: ({ navigation }) => ({\n presentation: 'modal',\n title: 'Conversation details',\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderRightButton {...props} onPress={navigation.goBack}>\n Done\n </HeaderRightButton>\n ),\n }),\n },\n New: {\n screen: NewConversationStack,\n options: {\n headerShown: false,\n presentation: 'modal',\n },\n },\n SendGiphy: {\n screen: SendGiphyScreen,\n options: SendGiphyScreenOptions,\n },\n MessageActions: {\n screen: MessageActionsScreen,\n // Something about sheetAllowedDetents declared inline breaks TS\n options: MessageActionsScreenOptions,\n },\n Reactions: {\n screen: ReactionsScreen,\n options: ReactionsScreenOptions,\n },\n NotFound: {\n screen: NotFound,\n options: {\n title: '404',\n },\n linking: {\n path: '*',\n },\n },\n },\n})\n\ntype ChatStackParamList = StaticParamList<typeof ChatStack>\n\ndeclare global {\n namespace ReactNavigation {\n interface RootParamList extends ChatStackParamList {}\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HeaderBackButton } from '@react-navigation/elements'\nimport { StaticParamList } from '@react-navigation/native'\nimport {\n createNativeStackNavigator,\n NativeStackHeaderRightProps,\n} from '@react-navigation/native-stack'\nimport React from 'react'\nimport { Icon } from '../components'\nimport { ConversationDetailsScreen } from '../screens/conversation_details_screen'\nimport { ConversationScreen } from '../screens/conversation_screen'\nimport { ConversationsScreen } from '../screens/conversations/conversations_screen'\nimport { ConversationNewScreen } from '../screens/conversation_new/conversation_new_screen'\nimport {\n ConversationFilterReceipientsScreenOptions,\n ConversationFilterRecipientsScreen,\n} from '../screens/conversation_filter_recipients/conversation_filter_recipients_screen'\nimport { ConversationSelectRecipientsScreen } from '../screens/conversation_select_recipients/conversation_select_recipients_screen'\nimport {\n MessageActionsScreen,\n MessageActionsScreenOptions,\n} from '../screens/message_actions_screen'\nimport { SendGiphyScreen, SendGiphyScreenOptions } from '../screens/send_giphy_screen'\nimport { NotFound } from '../screens/not_found'\nimport { ReactionsScreen, ReactionsScreenOptions } from '../screens/reactions_screen'\nimport { HeaderRightButton } from './header'\nimport { ScreenLayout } from './screenLayout'\nimport {\n ConversationFiltersScreen,\n ConversationFiltersScreenOptions,\n} from '../screens/conversation_filters_screen'\nimport { ConversationFiltersParams } from '../screens/conversation_filters/screen_props'\nimport { ConversationSelectGroupRecipientsScreen } from '../screens/conversation_select_recipients/conversation_select_group_recipients_screen'\n\nexport const NewConversationStack = createNativeStackNavigator({\n initialRouteName: 'ConversationSelectRecipients',\n screenOptions: {\n headerBackButtonDisplayMode: 'minimal',\n },\n screenLayout: ScreenLayout,\n screens: {\n ConversationSelectRecipients: {\n screen: ConversationSelectRecipientsScreen,\n options: ({ navigation }) => ({\n title: 'New conversation',\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderRightButton {...props} onPress={navigation.goBack}>\n Cancel\n </HeaderRightButton>\n ),\n headerBackVisible: false,\n }),\n },\n ConversationSelectGroupRecipients: {\n screen: ConversationSelectGroupRecipientsScreen,\n options: ({ navigation, route }) => ({\n title: 'New conversation',\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderRightButton\n {...props}\n onPress={() => navigation.popTo('Conversations', route.params)}\n >\n Cancel\n </HeaderRightButton>\n ),\n }),\n },\n ConversationFilterRecipients: {\n screen: ConversationFilterRecipientsScreen,\n options: ConversationFilterReceipientsScreenOptions,\n },\n ConversationNew: {\n screen: ConversationNewScreen,\n options: ({ navigation, route }) => ({\n title: 'New conversation',\n headerLeft: () => null,\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderRightButton\n {...props}\n onPress={() => navigation.popTo('Conversations', route.params)}\n >\n Cancel\n </HeaderRightButton>\n ),\n }),\n },\n },\n})\n\nexport const ChatStack = createNativeStackNavigator({\n screenOptions: {\n headerBackButtonDisplayMode: 'minimal',\n },\n screenLayout: ScreenLayout,\n screens: {\n Conversations: {\n screen: ConversationsScreen,\n options: ({ route, navigation }) => ({\n headerTitle: (route.params as { title?: string })?.title ?? 'Chat',\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderBackButton\n backImage={() => <Icon name=\"general.x\" size={18} color={props.tintColor} />}\n onPress={navigation.goBack}\n {...props}\n />\n ),\n }),\n },\n ConversationFilters: {\n screen: ConversationFiltersScreen,\n options: ConversationFiltersScreenOptions,\n },\n Conversation: {\n screen: ConversationScreen,\n options: ({ route, navigation }) => ({\n headerTitle: (route.params as { title?: string })?.title ?? 'Chat',\n headerLeft: props => (\n <HeaderBackButton\n displayMode=\"minimal\"\n onPress={() => {\n if ((route.params as ConversationFiltersParams)?.chat_group_graph_id) {\n // Ensure that conversations with a graph id pass them back to the conversation list\n navigation.popTo('Conversations', route.params)\n } else {\n navigation.goBack()\n }\n }}\n {...props}\n />\n ),\n }),\n },\n ConversationDetails: {\n screen: ConversationDetailsScreen,\n options: ({ navigation }) => ({\n presentation: 'modal',\n title: 'Conversation details',\n headerRight: (props: NativeStackHeaderRightProps) => (\n <HeaderRightButton {...props} onPress={navigation.goBack}>\n Done\n </HeaderRightButton>\n ),\n }),\n },\n New: {\n screen: NewConversationStack,\n options: {\n headerShown: false,\n presentation: 'modal',\n },\n },\n SendGiphy: {\n screen: SendGiphyScreen,\n options: SendGiphyScreenOptions,\n },\n MessageActions: {\n screen: MessageActionsScreen,\n // Something about sheetAllowedDetents declared inline breaks TS\n options: MessageActionsScreenOptions,\n },\n Reactions: {\n screen: ReactionsScreen,\n options: ReactionsScreenOptions,\n },\n NotFound: {\n screen: NotFound,\n options: {\n title: '404',\n },\n linking: {\n path: '*',\n },\n },\n },\n})\n\ntype ChatStackParamList = StaticParamList<typeof ChatStack>\n\ndeclare global {\n namespace ReactNavigation {\n interface RootParamList extends ChatStackParamList {}\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface RecipientLinkRowProps {
|
|
3
|
+
onPress: () => void;
|
|
4
|
+
accessibilityLabel: string;
|
|
5
|
+
accessibilityHint: string;
|
|
6
|
+
imageUri?: string;
|
|
7
|
+
title: string;
|
|
8
|
+
subtitle: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const RecipientLinkRow: ({ onPress, accessibilityLabel, accessibilityHint, imageUri, title, subtitle, }: RecipientLinkRowProps) => React.JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=recipient_link_row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipient_link_row.d.ts","sourceRoot":"","sources":["../../../../src/screens/conversation_select_recipients/components/recipient_link_row.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,gBAAgB,mFAO1B,qBAAqB,sBA2BvB,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { PlatformPressable } from '@react-navigation/elements';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { StyleSheet, View } from 'react-native';
|
|
4
|
+
import { Icon, Image, Text } from '../../../components';
|
|
5
|
+
import { useTheme } from '../../../hooks';
|
|
6
|
+
import { platformFontWeightMedium } from '../../../utils';
|
|
7
|
+
export const RecipientLinkRow = ({ onPress, accessibilityLabel, accessibilityHint, imageUri, title, subtitle, }) => {
|
|
8
|
+
const styles = useStyles();
|
|
9
|
+
return (<PlatformPressable style={styles.row} onPress={onPress} accessibilityRole="link" accessibilityLabel={accessibilityLabel} accessibilityHint={accessibilityHint}>
|
|
10
|
+
<View style={styles.innerContainer}>
|
|
11
|
+
{imageUri && (<Image source={{ uri: imageUri }} resizeMode="cover" style={styles.image} alt=""/>)}
|
|
12
|
+
<View style={styles.content}>
|
|
13
|
+
<Text style={styles.title} numberOfLines={2}>
|
|
14
|
+
{title}
|
|
15
|
+
</Text>
|
|
16
|
+
<Text variant="tertiary" numberOfLines={1}>
|
|
17
|
+
{subtitle}
|
|
18
|
+
</Text>
|
|
19
|
+
</View>
|
|
20
|
+
<Icon name="general.rightChevron" size={16} style={styles.icon}/>
|
|
21
|
+
</View>
|
|
22
|
+
</PlatformPressable>);
|
|
23
|
+
};
|
|
24
|
+
const ASPECT_RATIO = 16 / 9;
|
|
25
|
+
const THUMBNAIL_WIDTH = 80;
|
|
26
|
+
const THUMBNAIL_HEIGHT = THUMBNAIL_WIDTH / ASPECT_RATIO;
|
|
27
|
+
const useStyles = () => {
|
|
28
|
+
const theme = useTheme();
|
|
29
|
+
return StyleSheet.create({
|
|
30
|
+
row: {
|
|
31
|
+
paddingLeft: 16,
|
|
32
|
+
},
|
|
33
|
+
innerContainer: {
|
|
34
|
+
flexDirection: 'row',
|
|
35
|
+
alignItems: 'center',
|
|
36
|
+
gap: 12,
|
|
37
|
+
paddingVertical: 16,
|
|
38
|
+
paddingRight: 16,
|
|
39
|
+
borderBottomWidth: 1,
|
|
40
|
+
borderColor: theme.colors.fillColorNeutral050Base,
|
|
41
|
+
},
|
|
42
|
+
image: {
|
|
43
|
+
width: THUMBNAIL_WIDTH,
|
|
44
|
+
height: THUMBNAIL_HEIGHT,
|
|
45
|
+
borderRadius: 4,
|
|
46
|
+
},
|
|
47
|
+
title: {
|
|
48
|
+
fontWeight: platformFontWeightMedium,
|
|
49
|
+
flexShrink: 1,
|
|
50
|
+
},
|
|
51
|
+
content: {
|
|
52
|
+
flexShrink: 1,
|
|
53
|
+
gap: 2,
|
|
54
|
+
},
|
|
55
|
+
icon: {
|
|
56
|
+
marginLeft: 'auto',
|
|
57
|
+
color: theme.colors.fillColorNeutral030,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=recipient_link_row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipient_link_row.js","sourceRoot":"","sources":["../../../../src/screens/conversation_select_recipients/components/recipient_link_row.tsx"],"names":[],"mappings":"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","sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport React from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport { Icon, Image, Text } from '../../../components'\nimport { useTheme } from '../../../hooks'\nimport { platformFontWeightMedium } from '../../../utils'\n\ninterface RecipientLinkRowProps {\n onPress: () => void\n accessibilityLabel: string\n accessibilityHint: string\n imageUri?: string\n title: string\n subtitle: string\n}\n\nexport const RecipientLinkRow = ({\n onPress,\n accessibilityLabel,\n accessibilityHint,\n imageUri,\n title,\n subtitle,\n}: RecipientLinkRowProps) => {\n const styles = useStyles()\n\n return (\n <PlatformPressable\n style={styles.row}\n onPress={onPress}\n accessibilityRole=\"link\"\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n >\n <View style={styles.innerContainer}>\n {imageUri && (\n <Image source={{ uri: imageUri }} resizeMode=\"cover\" style={styles.image} alt=\"\" />\n )}\n <View style={styles.content}>\n <Text style={styles.title} numberOfLines={2}>\n {title}\n </Text>\n <Text variant=\"tertiary\" numberOfLines={1}>\n {subtitle}\n </Text>\n </View>\n <Icon name=\"general.rightChevron\" size={16} style={styles.icon} />\n </View>\n </PlatformPressable>\n )\n}\n\nconst ASPECT_RATIO = 16 / 9\nconst THUMBNAIL_WIDTH = 80\nconst THUMBNAIL_HEIGHT = THUMBNAIL_WIDTH / ASPECT_RATIO\n\nconst useStyles = () => {\n const theme = useTheme()\n\n return StyleSheet.create({\n row: {\n paddingLeft: 16,\n },\n innerContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingVertical: 16,\n paddingRight: 16,\n borderBottomWidth: 1,\n borderColor: theme.colors.fillColorNeutral050Base,\n },\n image: {\n width: THUMBNAIL_WIDTH,\n height: THUMBNAIL_HEIGHT,\n borderRadius: 4,\n },\n title: {\n fontWeight: platformFontWeightMedium,\n flexShrink: 1,\n },\n content: {\n flexShrink: 1,\n gap: 2,\n },\n icon: {\n marginLeft: 'auto',\n color: theme.colors.fillColorNeutral030,\n },\n })\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface ViewMoreLinkRowProps {
|
|
2
|
+
onPress: () => void;
|
|
3
|
+
accessibilityHint: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const ViewMoreLinkRow: ({ accessibilityHint, onPress }: ViewMoreLinkRowProps) => import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=view_more_link_row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view_more_link_row.d.ts","sourceRoot":"","sources":["../../../../src/screens/conversation_select_recipients/components/view_more_link_row.tsx"],"names":[],"mappings":"AAGA,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,mCAAoC,oBAAoB,gCAUnF,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { StyleSheet, View } from 'react-native';
|
|
2
|
+
import { TextButton } from '../../../components';
|
|
3
|
+
export const ViewMoreLinkRow = ({ accessibilityHint, onPress }) => {
|
|
4
|
+
const styles = useRowStyles();
|
|
5
|
+
return (<View style={[styles.row]}>
|
|
6
|
+
<TextButton onPress={onPress} accessibilityHint={accessibilityHint} accessibilityRole="link">
|
|
7
|
+
View more
|
|
8
|
+
</TextButton>
|
|
9
|
+
</View>);
|
|
10
|
+
};
|
|
11
|
+
const useRowStyles = () => {
|
|
12
|
+
return StyleSheet.create({
|
|
13
|
+
row: {
|
|
14
|
+
flexDirection: 'row',
|
|
15
|
+
alignItems: 'center',
|
|
16
|
+
paddingVertical: 12,
|
|
17
|
+
paddingHorizontal: 16,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=view_more_link_row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view_more_link_row.js","sourceRoot":"","sources":["../../../../src/screens/conversation_select_recipients/components/view_more_link_row.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAOhD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAwB,EAAE,EAAE;IACtF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;IAE7B,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACxB;MAAA,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAC1F;;MACF,EAAE,UAAU,CACd;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,OAAO,UAAU,CAAC,MAAM,CAAC;QACvB,GAAG,EAAE;YACH,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ;YACpB,eAAe,EAAE,EAAE;YACnB,iBAAiB,EAAE,EAAE;SACtB;KACF,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["import { StyleSheet, View } from 'react-native'\nimport { TextButton } from '../../../components'\n\ninterface ViewMoreLinkRowProps {\n onPress: () => void\n accessibilityHint: string\n}\n\nexport const ViewMoreLinkRow = ({ accessibilityHint, onPress }: ViewMoreLinkRowProps) => {\n const styles = useRowStyles()\n\n return (\n <View style={[styles.row]}>\n <TextButton onPress={onPress} accessibilityHint={accessibilityHint} accessibilityRole=\"link\">\n View more\n </TextButton>\n </View>\n )\n}\n\nconst useRowStyles = () => {\n return StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 12,\n paddingHorizontal: 16,\n },\n })\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ConversationSelectRecipientsScreenProps } from './types/screen_props';
|
|
3
|
+
export declare const ConversationSelectGroupRecipientsScreen: ({ route, }: ConversationSelectRecipientsScreenProps) => React.JSX.Element;
|
|
4
|
+
//# sourceMappingURL=conversation_select_group_recipients_screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation_select_group_recipients_screen.d.ts","sourceRoot":"","sources":["../../../src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,OAAO,EAAE,uCAAuC,EAAE,MAAM,sBAAsB,CAAA;AAE9E,eAAO,MAAM,uCAAuC,eAEjD,uCAAuC,sBA6CzC,CAAA"}
|
package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useNavigation } from '@react-navigation/native';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { StyleSheet, View } from 'react-native';
|
|
4
|
+
import { FlashList } from '@shopify/flash-list';
|
|
5
|
+
import { Heading } from '../../components';
|
|
6
|
+
import { useGroupsGroups } from '../../hooks/use_groups_groups';
|
|
7
|
+
import { pluralize } from '../../utils';
|
|
8
|
+
import { RecipientLinkRow } from './components/recipient_link_row';
|
|
9
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
10
|
+
export const ConversationSelectGroupRecipientsScreen = ({ route, }) => {
|
|
11
|
+
const styles = useStyles();
|
|
12
|
+
const navigation = useNavigation();
|
|
13
|
+
const { data: groups = [] } = useGroupsGroups();
|
|
14
|
+
const groupsWithCreatePermission = groups.filter(g => g.canCreateConversation);
|
|
15
|
+
const handleNavigateToConversationNew = (group) => {
|
|
16
|
+
navigation.navigate('New', {
|
|
17
|
+
screen: 'ConversationNew',
|
|
18
|
+
params: {
|
|
19
|
+
group_id: group.id,
|
|
20
|
+
source_app_name: 'Groups',
|
|
21
|
+
...route.params,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
return (<FlashList data={groupsWithCreatePermission} keyExtractor={item => item.id.toString()} estimatedItemSize={65} contentContainerStyle={styles.contentContainer} ListHeaderComponent={<View style={styles.sectionHeader}>
|
|
26
|
+
<Heading variant="h3">All my groups</Heading>
|
|
27
|
+
</View>} renderItem={({ item: group }) => {
|
|
28
|
+
const groupAccessibilityLabel = `Select ${group.name} with ${pluralize(group.membershipsCount, 'member')}`;
|
|
29
|
+
return (<RecipientLinkRow key={group.id} imageUri={group.headerImage?.thumbnail} title={group.name} subtitle={`${group.membershipsCount} members`} onPress={() => handleNavigateToConversationNew(group)} accessibilityLabel={groupAccessibilityLabel} accessibilityHint={`Selects group as recipient and navigates to the final screen to finish creating the conversation`}/>);
|
|
30
|
+
}}/>);
|
|
31
|
+
};
|
|
32
|
+
const useStyles = () => {
|
|
33
|
+
const { bottom } = useSafeAreaInsets();
|
|
34
|
+
return StyleSheet.create({
|
|
35
|
+
contentContainer: {
|
|
36
|
+
paddingBottom: bottom,
|
|
37
|
+
},
|
|
38
|
+
sectionHeader: {
|
|
39
|
+
flexDirection: 'row',
|
|
40
|
+
justifyContent: 'space-between',
|
|
41
|
+
padding: 16,
|
|
42
|
+
paddingBottom: 4,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=conversation_select_group_recipients_screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation_select_group_recipients_screen.js","sourceRoot":"","sources":["../../../src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useNavigation } from '@react-navigation/native'\nimport React from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport { FlashList } from '@shopify/flash-list'\nimport { Heading } from '../../components'\nimport { GroupsGroupResource } from '../../types'\nimport { useGroupsGroups } from '../../hooks/use_groups_groups'\nimport { pluralize } from '../../utils'\nimport { RecipientLinkRow } from './components/recipient_link_row'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { ConversationSelectRecipientsScreenProps } from './types/screen_props'\n\nexport const ConversationSelectGroupRecipientsScreen = ({\n route,\n}: ConversationSelectRecipientsScreenProps) => {\n const styles = useStyles()\n const navigation = useNavigation()\n const { data: groups = [] } = useGroupsGroups()\n const groupsWithCreatePermission = groups.filter(g => g.canCreateConversation)\n\n const handleNavigateToConversationNew = (group: GroupsGroupResource) => {\n navigation.navigate('New', {\n screen: 'ConversationNew',\n params: {\n group_id: group.id,\n source_app_name: 'Groups',\n ...route.params,\n },\n })\n }\n\n return (\n <FlashList\n data={groupsWithCreatePermission}\n keyExtractor={item => item.id.toString()}\n estimatedItemSize={65}\n contentContainerStyle={styles.contentContainer}\n ListHeaderComponent={\n <View style={styles.sectionHeader}>\n <Heading variant=\"h3\">All my groups</Heading>\n </View>\n }\n renderItem={({ item: group }: { item: GroupsGroupResource }) => {\n const groupAccessibilityLabel = `Select ${group.name} with ${pluralize(group.membershipsCount, 'member')}`\n\n return (\n <RecipientLinkRow\n key={group.id}\n imageUri={group.headerImage?.thumbnail}\n title={group.name}\n subtitle={`${group.membershipsCount} members`}\n onPress={() => handleNavigateToConversationNew(group)}\n accessibilityLabel={groupAccessibilityLabel}\n accessibilityHint={`Selects group as recipient and navigates to the final screen to finish creating the conversation`}\n />\n )\n }}\n />\n )\n}\n\nconst useStyles = () => {\n const { bottom } = useSafeAreaInsets()\n\n return StyleSheet.create({\n contentContainer: {\n paddingBottom: bottom,\n },\n sectionHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n padding: 16,\n paddingBottom: 4,\n },\n })\n}\n"]}
|
package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.d.ts
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import { StaticScreenProps } from '@react-navigation/native';
|
|
2
1
|
import React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import { AppName } from '../../types/resources/app_name';
|
|
5
|
-
type ConversationSelectRecipientsScreenProps = StaticScreenProps<{
|
|
6
|
-
chat_group_graph_id?: GraphId;
|
|
7
|
-
group_source_app_name?: AppName;
|
|
8
|
-
}>;
|
|
2
|
+
import { ConversationSelectRecipientsScreenProps } from './types/screen_props';
|
|
9
3
|
export declare const ConversationSelectRecipientsScreen: ({ route, }: ConversationSelectRecipientsScreenProps) => React.JSX.Element;
|
|
10
|
-
export {};
|
|
11
4
|
//# sourceMappingURL=conversation_select_recipients_screen.d.ts.map
|
package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation_select_recipients_screen.d.ts","sourceRoot":"","sources":["../../../src/screens/conversation_select_recipients/conversation_select_recipients_screen.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"conversation_select_recipients_screen.d.ts","sourceRoot":"","sources":["../../../src/screens/conversation_select_recipients/conversation_select_recipients_screen.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,EAAE,uCAAuC,EAAE,MAAM,sBAAsB,CAAA;AAK9E,eAAO,MAAM,kCAAkC,eAE5C,uCAAuC,sBA+EzC,CAAA"}
|
package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { PlatformPressable } from '@react-navigation/elements';
|
|
2
1
|
import { useNavigation } from '@react-navigation/native';
|
|
3
2
|
import React from 'react';
|
|
4
3
|
import { ScrollView, StyleSheet, View } from 'react-native';
|
|
5
|
-
import {
|
|
6
|
-
import { Button, Heading, Icon, Image, Text } from '../../components';
|
|
7
|
-
import { useTheme } from '../../hooks';
|
|
4
|
+
import { Button, Heading } from '../../components';
|
|
8
5
|
import { useGroupsGroups } from '../../hooks/use_groups_groups';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
import { pluralize } from '../../utils';
|
|
7
|
+
import { RecipientLinkRow } from './components/recipient_link_row';
|
|
8
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
9
|
+
import { ViewMoreLinkRow } from './components/view_more_link_row';
|
|
10
|
+
const MAX_VISIBLE_GROUPS = 5;
|
|
13
11
|
export const ConversationSelectRecipientsScreen = ({ route, }) => {
|
|
14
12
|
const styles = useStyles();
|
|
15
13
|
const navigation = useNavigation();
|
|
16
14
|
const { data: groups = [] } = useGroupsGroups();
|
|
17
15
|
const groupsWithCreatePermission = groups.filter(g => g.canCreateConversation);
|
|
16
|
+
const visibleGroups = groupsWithCreatePermission.slice(0, MAX_VISIBLE_GROUPS);
|
|
17
|
+
const hasMoreGroups = groupsWithCreatePermission.length > MAX_VISIBLE_GROUPS;
|
|
18
18
|
const handleNavigateToConversationNew = (group) => {
|
|
19
19
|
navigation.navigate('New', {
|
|
20
20
|
screen: 'ConversationNew',
|
|
@@ -25,25 +25,25 @@ export const ConversationSelectRecipientsScreen = ({ route, }) => {
|
|
|
25
25
|
},
|
|
26
26
|
});
|
|
27
27
|
};
|
|
28
|
-
|
|
28
|
+
const handleGroupsViewMore = () => {
|
|
29
|
+
navigation.navigate('New', {
|
|
30
|
+
screen: 'ConversationSelectGroupRecipients',
|
|
31
|
+
params: {
|
|
32
|
+
...route.params,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
return (<ScrollView contentContainerStyle={styles.contentContainer}>
|
|
29
37
|
<View style={styles.section}>
|
|
30
38
|
<View style={styles.sectionHeader}>
|
|
31
39
|
<Heading variant="h3">My groups</Heading>
|
|
32
40
|
</View>
|
|
33
41
|
<View>
|
|
34
|
-
{
|
|
42
|
+
{visibleGroups.map(group => {
|
|
35
43
|
const groupAccessibilityLabel = `Select ${group.name} with ${pluralize(group.membershipsCount, 'member')}`;
|
|
36
|
-
return (<
|
|
37
|
-
<Image source={{ uri: group.headerImage?.thumbnail }} resizeMode="cover" style={styles.rowImage} alt=""/>
|
|
38
|
-
<View style={styles.rowContent}>
|
|
39
|
-
<Text style={styles.rowName} numberOfLines={2}>
|
|
40
|
-
{group.name}
|
|
41
|
-
</Text>
|
|
42
|
-
<Text variant="tertiary">{group.membershipsCount} members</Text>
|
|
43
|
-
</View>
|
|
44
|
-
<Icon name="general.rightChevron" size={16} style={styles.rowIconRight}/>
|
|
45
|
-
</PlatformPressable>);
|
|
44
|
+
return (<RecipientLinkRow key={group.id} imageUri={group.headerImage?.thumbnail} title={group.name} subtitle={`${group.membershipsCount} members`} onPress={() => handleNavigateToConversationNew(group)} accessibilityLabel={groupAccessibilityLabel} accessibilityHint={`Selects group as recipient and navigates to the final screen to finish creating the conversation`}/>);
|
|
46
45
|
})}
|
|
46
|
+
{hasMoreGroups && (<ViewMoreLinkRow onPress={handleGroupsViewMore} accessibilityHint="Navigate to a full list of your groups."/>)}
|
|
47
47
|
</View>
|
|
48
48
|
</View>
|
|
49
49
|
<View style={styles.section}>
|
|
@@ -61,52 +61,22 @@ export const ConversationSelectRecipientsScreen = ({ route, }) => {
|
|
|
61
61
|
};
|
|
62
62
|
const useStyles = () => {
|
|
63
63
|
const { bottom } = useSafeAreaInsets();
|
|
64
|
-
const theme = useTheme();
|
|
65
64
|
return StyleSheet.create({
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
contentContainer: {
|
|
66
|
+
gap: 24,
|
|
67
|
+
paddingTop: 16,
|
|
68
|
+
paddingBottom: 16 + bottom,
|
|
69
69
|
},
|
|
70
70
|
section: {
|
|
71
|
-
padding: 16,
|
|
72
71
|
flex: 1,
|
|
73
72
|
},
|
|
74
73
|
sectionHeader: {
|
|
75
74
|
flexDirection: 'row',
|
|
76
75
|
justifyContent: 'space-between',
|
|
76
|
+
paddingHorizontal: 16,
|
|
77
|
+
paddingBottom: 4,
|
|
77
78
|
},
|
|
78
79
|
selectTeamsButton: {},
|
|
79
|
-
row: {
|
|
80
|
-
flexDirection: 'row',
|
|
81
|
-
alignItems: 'center',
|
|
82
|
-
gap: 12,
|
|
83
|
-
paddingVertical: 16,
|
|
84
|
-
borderBottomWidth: 1,
|
|
85
|
-
borderColor: theme.colors.fillColorNeutral050Base,
|
|
86
|
-
},
|
|
87
|
-
rowImage: {
|
|
88
|
-
width: THUMBNAIL_WIDTH,
|
|
89
|
-
height: THUMBNAIL_HEIGHT,
|
|
90
|
-
borderRadius: 4,
|
|
91
|
-
},
|
|
92
|
-
rowName: {
|
|
93
|
-
fontWeight: platformFontWeightMedium,
|
|
94
|
-
flexShrink: 1,
|
|
95
|
-
},
|
|
96
|
-
rowContent: {
|
|
97
|
-
flexShrink: 1,
|
|
98
|
-
},
|
|
99
|
-
rowIconRight: {
|
|
100
|
-
marginLeft: 'auto',
|
|
101
|
-
color: theme.colors.fillColorNeutral030,
|
|
102
|
-
},
|
|
103
|
-
routeDebug: {
|
|
104
|
-
alignContent: 'center',
|
|
105
|
-
padding: 16,
|
|
106
|
-
paddingBottom: bottom,
|
|
107
|
-
borderTopWidth: 1,
|
|
108
|
-
borderTopColor: theme.colors.fillColorNeutral050Base,
|
|
109
|
-
},
|
|
110
80
|
});
|
|
111
81
|
};
|
|
112
82
|
//# sourceMappingURL=conversation_select_recipients_screen.js.map
|
package/build/screens/conversation_select_recipients/conversation_select_recipients_screen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation_select_recipients_screen.js","sourceRoot":"","sources":["../../../src/screens/conversation_select_recipients/conversation_select_recipients_screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"conversation_select_recipients_screen.js","sourceRoot":"","sources":["../../../src/screens/conversation_select_recipients/conversation_select_recipients_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useNavigation } from '@react-navigation/native'\nimport React from 'react'\nimport { ScrollView, StyleSheet, View } from 'react-native'\nimport { Button, Heading } from '../../components'\nimport { GroupsGroupResource } from '../../types'\nimport { useGroupsGroups } from '../../hooks/use_groups_groups'\nimport { pluralize } from '../../utils'\nimport { RecipientLinkRow } from './components/recipient_link_row'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { ConversationSelectRecipientsScreenProps } from './types/screen_props'\nimport { ViewMoreLinkRow } from './components/view_more_link_row'\n\nconst MAX_VISIBLE_GROUPS = 5\n\nexport const ConversationSelectRecipientsScreen = ({\n route,\n}: ConversationSelectRecipientsScreenProps) => {\n const styles = useStyles()\n const navigation = useNavigation()\n const { data: groups = [] } = useGroupsGroups()\n const groupsWithCreatePermission = groups.filter(g => g.canCreateConversation)\n const visibleGroups = groupsWithCreatePermission.slice(0, MAX_VISIBLE_GROUPS)\n const hasMoreGroups = groupsWithCreatePermission.length > MAX_VISIBLE_GROUPS\n\n const handleNavigateToConversationNew = (group: GroupsGroupResource) => {\n navigation.navigate('New', {\n screen: 'ConversationNew',\n params: {\n group_id: group.id,\n source_app_name: 'Groups',\n ...route.params,\n },\n })\n }\n\n const handleGroupsViewMore = () => {\n navigation.navigate('New', {\n screen: 'ConversationSelectGroupRecipients',\n params: {\n ...route.params,\n },\n })\n }\n\n return (\n <ScrollView contentContainerStyle={styles.contentContainer}>\n <View style={styles.section}>\n <View style={styles.sectionHeader}>\n <Heading variant=\"h3\">My groups</Heading>\n </View>\n <View>\n {visibleGroups.map(group => {\n const groupAccessibilityLabel = `Select ${group.name} with ${pluralize(group.membershipsCount, 'member')}`\n\n return (\n <RecipientLinkRow\n key={group.id}\n imageUri={group.headerImage?.thumbnail}\n title={group.name}\n subtitle={`${group.membershipsCount} members`}\n onPress={() => handleNavigateToConversationNew(group)}\n accessibilityLabel={groupAccessibilityLabel}\n accessibilityHint={`Selects group as recipient and navigates to the final screen to finish creating the conversation`}\n />\n )\n })}\n {hasMoreGroups && (\n <ViewMoreLinkRow\n onPress={handleGroupsViewMore}\n accessibilityHint=\"Navigate to a full list of your groups.\"\n />\n )}\n </View>\n </View>\n <View style={styles.section}>\n <View style={styles.sectionHeader}>\n <Heading variant=\"h3\">Teams I lead</Heading>\n <Button\n style={styles.selectTeamsButton}\n onPress={() =>\n navigation.navigate('New', {\n screen: 'ConversationFilterRecipients',\n params: {\n source_app_name: 'Services',\n },\n })\n }\n title=\"Select teams\"\n variant=\"outline\"\n iconNameLeft=\"general.search\"\n />\n </View>\n </View>\n </ScrollView>\n )\n}\n\nconst useStyles = () => {\n const { bottom } = useSafeAreaInsets()\n\n return StyleSheet.create({\n contentContainer: {\n gap: 24,\n paddingTop: 16,\n paddingBottom: 16 + bottom,\n },\n section: {\n flex: 1,\n },\n sectionHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 16,\n paddingBottom: 4,\n },\n selectTeamsButton: {},\n })\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { StaticScreenProps } from '@react-navigation/native';
|
|
2
|
+
import { AppName } from '../../../types/resources/app_name';
|
|
3
|
+
import { GraphId } from '../../../types/resources/group_resource';
|
|
4
|
+
export type ConversationSelectRecipientsParams = {
|
|
5
|
+
chat_group_graph_id?: GraphId;
|
|
6
|
+
group_source_app_name?: AppName;
|
|
7
|
+
};
|
|
8
|
+
export type ConversationSelectRecipientsScreenProps = StaticScreenProps<ConversationSelectRecipientsParams>;
|
|
9
|
+
//# sourceMappingURL=screen_props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen_props.d.ts","sourceRoot":"","sources":["../../../../src/screens/conversation_select_recipients/types/screen_props.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAA;AAEjE,MAAM,MAAM,kCAAkC,GAAG;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,uCAAuC,GACjD,iBAAiB,CAAC,kCAAkC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen_props.js","sourceRoot":"","sources":["../../../../src/screens/conversation_select_recipients/types/screen_props.tsx"],"names":[],"mappings":"","sourcesContent":["import { StaticScreenProps } from '@react-navigation/native'\nimport { AppName } from '../../../types/resources/app_name'\nimport { GraphId } from '../../../types/resources/group_resource'\n\nexport type ConversationSelectRecipientsParams = {\n chat_group_graph_id?: GraphId\n group_source_app_name?: AppName\n}\n\nexport type ConversationSelectRecipientsScreenProps =\n StaticScreenProps<ConversationSelectRecipientsParams>\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/chat-react-native",
|
|
3
|
-
"version": "3.2.0-rc.
|
|
3
|
+
"version": "3.2.0-rc.18",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"prettier": "^3.4.2",
|
|
56
56
|
"typescript": "<5.6.0"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "2d3b63eef761f8eadbfefdf080b39d9ea0a1e5ff"
|
|
59
59
|
}
|
package/src/navigation/index.tsx
CHANGED
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
ConversationFiltersScreenOptions,
|
|
30
30
|
} from '../screens/conversation_filters_screen'
|
|
31
31
|
import { ConversationFiltersParams } from '../screens/conversation_filters/screen_props'
|
|
32
|
+
import { ConversationSelectGroupRecipientsScreen } from '../screens/conversation_select_recipients/conversation_select_group_recipients_screen'
|
|
32
33
|
|
|
33
34
|
export const NewConversationStack = createNativeStackNavigator({
|
|
34
35
|
initialRouteName: 'ConversationSelectRecipients',
|
|
@@ -46,6 +47,21 @@ export const NewConversationStack = createNativeStackNavigator({
|
|
|
46
47
|
Cancel
|
|
47
48
|
</HeaderRightButton>
|
|
48
49
|
),
|
|
50
|
+
headerBackVisible: false,
|
|
51
|
+
}),
|
|
52
|
+
},
|
|
53
|
+
ConversationSelectGroupRecipients: {
|
|
54
|
+
screen: ConversationSelectGroupRecipientsScreen,
|
|
55
|
+
options: ({ navigation, route }) => ({
|
|
56
|
+
title: 'New conversation',
|
|
57
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
58
|
+
<HeaderRightButton
|
|
59
|
+
{...props}
|
|
60
|
+
onPress={() => navigation.popTo('Conversations', route.params)}
|
|
61
|
+
>
|
|
62
|
+
Cancel
|
|
63
|
+
</HeaderRightButton>
|
|
64
|
+
),
|
|
49
65
|
}),
|
|
50
66
|
},
|
|
51
67
|
ConversationFilterRecipients: {
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { PlatformPressable } from '@react-navigation/elements'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { StyleSheet, View } from 'react-native'
|
|
4
|
+
import { Icon, Image, Text } from '../../../components'
|
|
5
|
+
import { useTheme } from '../../../hooks'
|
|
6
|
+
import { platformFontWeightMedium } from '../../../utils'
|
|
7
|
+
|
|
8
|
+
interface RecipientLinkRowProps {
|
|
9
|
+
onPress: () => void
|
|
10
|
+
accessibilityLabel: string
|
|
11
|
+
accessibilityHint: string
|
|
12
|
+
imageUri?: string
|
|
13
|
+
title: string
|
|
14
|
+
subtitle: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const RecipientLinkRow = ({
|
|
18
|
+
onPress,
|
|
19
|
+
accessibilityLabel,
|
|
20
|
+
accessibilityHint,
|
|
21
|
+
imageUri,
|
|
22
|
+
title,
|
|
23
|
+
subtitle,
|
|
24
|
+
}: RecipientLinkRowProps) => {
|
|
25
|
+
const styles = useStyles()
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<PlatformPressable
|
|
29
|
+
style={styles.row}
|
|
30
|
+
onPress={onPress}
|
|
31
|
+
accessibilityRole="link"
|
|
32
|
+
accessibilityLabel={accessibilityLabel}
|
|
33
|
+
accessibilityHint={accessibilityHint}
|
|
34
|
+
>
|
|
35
|
+
<View style={styles.innerContainer}>
|
|
36
|
+
{imageUri && (
|
|
37
|
+
<Image source={{ uri: imageUri }} resizeMode="cover" style={styles.image} alt="" />
|
|
38
|
+
)}
|
|
39
|
+
<View style={styles.content}>
|
|
40
|
+
<Text style={styles.title} numberOfLines={2}>
|
|
41
|
+
{title}
|
|
42
|
+
</Text>
|
|
43
|
+
<Text variant="tertiary" numberOfLines={1}>
|
|
44
|
+
{subtitle}
|
|
45
|
+
</Text>
|
|
46
|
+
</View>
|
|
47
|
+
<Icon name="general.rightChevron" size={16} style={styles.icon} />
|
|
48
|
+
</View>
|
|
49
|
+
</PlatformPressable>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const ASPECT_RATIO = 16 / 9
|
|
54
|
+
const THUMBNAIL_WIDTH = 80
|
|
55
|
+
const THUMBNAIL_HEIGHT = THUMBNAIL_WIDTH / ASPECT_RATIO
|
|
56
|
+
|
|
57
|
+
const useStyles = () => {
|
|
58
|
+
const theme = useTheme()
|
|
59
|
+
|
|
60
|
+
return StyleSheet.create({
|
|
61
|
+
row: {
|
|
62
|
+
paddingLeft: 16,
|
|
63
|
+
},
|
|
64
|
+
innerContainer: {
|
|
65
|
+
flexDirection: 'row',
|
|
66
|
+
alignItems: 'center',
|
|
67
|
+
gap: 12,
|
|
68
|
+
paddingVertical: 16,
|
|
69
|
+
paddingRight: 16,
|
|
70
|
+
borderBottomWidth: 1,
|
|
71
|
+
borderColor: theme.colors.fillColorNeutral050Base,
|
|
72
|
+
},
|
|
73
|
+
image: {
|
|
74
|
+
width: THUMBNAIL_WIDTH,
|
|
75
|
+
height: THUMBNAIL_HEIGHT,
|
|
76
|
+
borderRadius: 4,
|
|
77
|
+
},
|
|
78
|
+
title: {
|
|
79
|
+
fontWeight: platformFontWeightMedium,
|
|
80
|
+
flexShrink: 1,
|
|
81
|
+
},
|
|
82
|
+
content: {
|
|
83
|
+
flexShrink: 1,
|
|
84
|
+
gap: 2,
|
|
85
|
+
},
|
|
86
|
+
icon: {
|
|
87
|
+
marginLeft: 'auto',
|
|
88
|
+
color: theme.colors.fillColorNeutral030,
|
|
89
|
+
},
|
|
90
|
+
})
|
|
91
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { StyleSheet, View } from 'react-native'
|
|
2
|
+
import { TextButton } from '../../../components'
|
|
3
|
+
|
|
4
|
+
interface ViewMoreLinkRowProps {
|
|
5
|
+
onPress: () => void
|
|
6
|
+
accessibilityHint: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const ViewMoreLinkRow = ({ accessibilityHint, onPress }: ViewMoreLinkRowProps) => {
|
|
10
|
+
const styles = useRowStyles()
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<View style={[styles.row]}>
|
|
14
|
+
<TextButton onPress={onPress} accessibilityHint={accessibilityHint} accessibilityRole="link">
|
|
15
|
+
View more
|
|
16
|
+
</TextButton>
|
|
17
|
+
</View>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const useRowStyles = () => {
|
|
22
|
+
return StyleSheet.create({
|
|
23
|
+
row: {
|
|
24
|
+
flexDirection: 'row',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
paddingVertical: 12,
|
|
27
|
+
paddingHorizontal: 16,
|
|
28
|
+
},
|
|
29
|
+
})
|
|
30
|
+
}
|
package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { useNavigation } from '@react-navigation/native'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import { StyleSheet, View } from 'react-native'
|
|
4
|
+
import { FlashList } from '@shopify/flash-list'
|
|
5
|
+
import { Heading } from '../../components'
|
|
6
|
+
import { GroupsGroupResource } from '../../types'
|
|
7
|
+
import { useGroupsGroups } from '../../hooks/use_groups_groups'
|
|
8
|
+
import { pluralize } from '../../utils'
|
|
9
|
+
import { RecipientLinkRow } from './components/recipient_link_row'
|
|
10
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
11
|
+
import { ConversationSelectRecipientsScreenProps } from './types/screen_props'
|
|
12
|
+
|
|
13
|
+
export const ConversationSelectGroupRecipientsScreen = ({
|
|
14
|
+
route,
|
|
15
|
+
}: ConversationSelectRecipientsScreenProps) => {
|
|
16
|
+
const styles = useStyles()
|
|
17
|
+
const navigation = useNavigation()
|
|
18
|
+
const { data: groups = [] } = useGroupsGroups()
|
|
19
|
+
const groupsWithCreatePermission = groups.filter(g => g.canCreateConversation)
|
|
20
|
+
|
|
21
|
+
const handleNavigateToConversationNew = (group: GroupsGroupResource) => {
|
|
22
|
+
navigation.navigate('New', {
|
|
23
|
+
screen: 'ConversationNew',
|
|
24
|
+
params: {
|
|
25
|
+
group_id: group.id,
|
|
26
|
+
source_app_name: 'Groups',
|
|
27
|
+
...route.params,
|
|
28
|
+
},
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<FlashList
|
|
34
|
+
data={groupsWithCreatePermission}
|
|
35
|
+
keyExtractor={item => item.id.toString()}
|
|
36
|
+
estimatedItemSize={65}
|
|
37
|
+
contentContainerStyle={styles.contentContainer}
|
|
38
|
+
ListHeaderComponent={
|
|
39
|
+
<View style={styles.sectionHeader}>
|
|
40
|
+
<Heading variant="h3">All my groups</Heading>
|
|
41
|
+
</View>
|
|
42
|
+
}
|
|
43
|
+
renderItem={({ item: group }: { item: GroupsGroupResource }) => {
|
|
44
|
+
const groupAccessibilityLabel = `Select ${group.name} with ${pluralize(group.membershipsCount, 'member')}`
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<RecipientLinkRow
|
|
48
|
+
key={group.id}
|
|
49
|
+
imageUri={group.headerImage?.thumbnail}
|
|
50
|
+
title={group.name}
|
|
51
|
+
subtitle={`${group.membershipsCount} members`}
|
|
52
|
+
onPress={() => handleNavigateToConversationNew(group)}
|
|
53
|
+
accessibilityLabel={groupAccessibilityLabel}
|
|
54
|
+
accessibilityHint={`Selects group as recipient and navigates to the final screen to finish creating the conversation`}
|
|
55
|
+
/>
|
|
56
|
+
)
|
|
57
|
+
}}
|
|
58
|
+
/>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const useStyles = () => {
|
|
63
|
+
const { bottom } = useSafeAreaInsets()
|
|
64
|
+
|
|
65
|
+
return StyleSheet.create({
|
|
66
|
+
contentContainer: {
|
|
67
|
+
paddingBottom: bottom,
|
|
68
|
+
},
|
|
69
|
+
sectionHeader: {
|
|
70
|
+
flexDirection: 'row',
|
|
71
|
+
justifyContent: 'space-between',
|
|
72
|
+
padding: 16,
|
|
73
|
+
paddingBottom: 4,
|
|
74
|
+
},
|
|
75
|
+
})
|
|
76
|
+
}
|
package/src/screens/conversation_select_recipients/conversation_select_recipients_screen.tsx
CHANGED
|
@@ -1,24 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { StaticScreenProps, useNavigation } from '@react-navigation/native'
|
|
1
|
+
import { useNavigation } from '@react-navigation/native'
|
|
3
2
|
import React from 'react'
|
|
4
3
|
import { ScrollView, StyleSheet, View } from 'react-native'
|
|
5
|
-
import {
|
|
6
|
-
import { Button, Heading, Icon, Image, Text } from '../../components'
|
|
7
|
-
import { useTheme } from '../../hooks'
|
|
4
|
+
import { Button, Heading } from '../../components'
|
|
8
5
|
import { GroupsGroupResource } from '../../types'
|
|
9
6
|
import { useGroupsGroups } from '../../hooks/use_groups_groups'
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
chat_group_graph_id?: GraphId
|
|
16
|
-
group_source_app_name?: AppName
|
|
17
|
-
}>
|
|
7
|
+
import { pluralize } from '../../utils'
|
|
8
|
+
import { RecipientLinkRow } from './components/recipient_link_row'
|
|
9
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
10
|
+
import { ConversationSelectRecipientsScreenProps } from './types/screen_props'
|
|
11
|
+
import { ViewMoreLinkRow } from './components/view_more_link_row'
|
|
18
12
|
|
|
19
|
-
const
|
|
20
|
-
const THUMBNAIL_WIDTH = 80
|
|
21
|
-
const THUMBNAIL_HEIGHT = THUMBNAIL_WIDTH / ASPECT_RATIO
|
|
13
|
+
const MAX_VISIBLE_GROUPS = 5
|
|
22
14
|
|
|
23
15
|
export const ConversationSelectRecipientsScreen = ({
|
|
24
16
|
route,
|
|
@@ -27,6 +19,8 @@ export const ConversationSelectRecipientsScreen = ({
|
|
|
27
19
|
const navigation = useNavigation()
|
|
28
20
|
const { data: groups = [] } = useGroupsGroups()
|
|
29
21
|
const groupsWithCreatePermission = groups.filter(g => g.canCreateConversation)
|
|
22
|
+
const visibleGroups = groupsWithCreatePermission.slice(0, MAX_VISIBLE_GROUPS)
|
|
23
|
+
const hasMoreGroups = groupsWithCreatePermission.length > MAX_VISIBLE_GROUPS
|
|
30
24
|
|
|
31
25
|
const handleNavigateToConversationNew = (group: GroupsGroupResource) => {
|
|
32
26
|
navigation.navigate('New', {
|
|
@@ -39,41 +33,43 @@ export const ConversationSelectRecipientsScreen = ({
|
|
|
39
33
|
})
|
|
40
34
|
}
|
|
41
35
|
|
|
36
|
+
const handleGroupsViewMore = () => {
|
|
37
|
+
navigation.navigate('New', {
|
|
38
|
+
screen: 'ConversationSelectGroupRecipients',
|
|
39
|
+
params: {
|
|
40
|
+
...route.params,
|
|
41
|
+
},
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
|
|
42
45
|
return (
|
|
43
|
-
<ScrollView
|
|
46
|
+
<ScrollView contentContainerStyle={styles.contentContainer}>
|
|
44
47
|
<View style={styles.section}>
|
|
45
48
|
<View style={styles.sectionHeader}>
|
|
46
49
|
<Heading variant="h3">My groups</Heading>
|
|
47
50
|
</View>
|
|
48
51
|
<View>
|
|
49
|
-
{
|
|
52
|
+
{visibleGroups.map(group => {
|
|
50
53
|
const groupAccessibilityLabel = `Select ${group.name} with ${pluralize(group.membershipsCount, 'member')}`
|
|
51
54
|
|
|
52
55
|
return (
|
|
53
|
-
<
|
|
56
|
+
<RecipientLinkRow
|
|
54
57
|
key={group.id}
|
|
55
|
-
|
|
58
|
+
imageUri={group.headerImage?.thumbnail}
|
|
59
|
+
title={group.name}
|
|
60
|
+
subtitle={`${group.membershipsCount} members`}
|
|
56
61
|
onPress={() => handleNavigateToConversationNew(group)}
|
|
57
|
-
accessibilityRole="link"
|
|
58
62
|
accessibilityLabel={groupAccessibilityLabel}
|
|
59
|
-
accessibilityHint={`Selects group as recipient and navigates to the final screen to finish creating the conversation
|
|
60
|
-
|
|
61
|
-
<Image
|
|
62
|
-
source={{ uri: group.headerImage?.thumbnail }}
|
|
63
|
-
resizeMode="cover"
|
|
64
|
-
style={styles.rowImage}
|
|
65
|
-
alt=""
|
|
66
|
-
/>
|
|
67
|
-
<View style={styles.rowContent}>
|
|
68
|
-
<Text style={styles.rowName} numberOfLines={2}>
|
|
69
|
-
{group.name}
|
|
70
|
-
</Text>
|
|
71
|
-
<Text variant="tertiary">{group.membershipsCount} members</Text>
|
|
72
|
-
</View>
|
|
73
|
-
<Icon name="general.rightChevron" size={16} style={styles.rowIconRight} />
|
|
74
|
-
</PlatformPressable>
|
|
63
|
+
accessibilityHint={`Selects group as recipient and navigates to the final screen to finish creating the conversation`}
|
|
64
|
+
/>
|
|
75
65
|
)
|
|
76
66
|
})}
|
|
67
|
+
{hasMoreGroups && (
|
|
68
|
+
<ViewMoreLinkRow
|
|
69
|
+
onPress={handleGroupsViewMore}
|
|
70
|
+
accessibilityHint="Navigate to a full list of your groups."
|
|
71
|
+
/>
|
|
72
|
+
)}
|
|
77
73
|
</View>
|
|
78
74
|
</View>
|
|
79
75
|
<View style={styles.section}>
|
|
@@ -101,52 +97,22 @@ export const ConversationSelectRecipientsScreen = ({
|
|
|
101
97
|
|
|
102
98
|
const useStyles = () => {
|
|
103
99
|
const { bottom } = useSafeAreaInsets()
|
|
104
|
-
const theme = useTheme()
|
|
105
100
|
|
|
106
101
|
return StyleSheet.create({
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
contentContainer: {
|
|
103
|
+
gap: 24,
|
|
104
|
+
paddingTop: 16,
|
|
105
|
+
paddingBottom: 16 + bottom,
|
|
110
106
|
},
|
|
111
107
|
section: {
|
|
112
|
-
padding: 16,
|
|
113
108
|
flex: 1,
|
|
114
109
|
},
|
|
115
110
|
sectionHeader: {
|
|
116
111
|
flexDirection: 'row',
|
|
117
112
|
justifyContent: 'space-between',
|
|
113
|
+
paddingHorizontal: 16,
|
|
114
|
+
paddingBottom: 4,
|
|
118
115
|
},
|
|
119
116
|
selectTeamsButton: {},
|
|
120
|
-
row: {
|
|
121
|
-
flexDirection: 'row',
|
|
122
|
-
alignItems: 'center',
|
|
123
|
-
gap: 12,
|
|
124
|
-
paddingVertical: 16,
|
|
125
|
-
borderBottomWidth: 1,
|
|
126
|
-
borderColor: theme.colors.fillColorNeutral050Base,
|
|
127
|
-
},
|
|
128
|
-
rowImage: {
|
|
129
|
-
width: THUMBNAIL_WIDTH,
|
|
130
|
-
height: THUMBNAIL_HEIGHT,
|
|
131
|
-
borderRadius: 4,
|
|
132
|
-
},
|
|
133
|
-
rowName: {
|
|
134
|
-
fontWeight: platformFontWeightMedium,
|
|
135
|
-
flexShrink: 1,
|
|
136
|
-
},
|
|
137
|
-
rowContent: {
|
|
138
|
-
flexShrink: 1,
|
|
139
|
-
},
|
|
140
|
-
rowIconRight: {
|
|
141
|
-
marginLeft: 'auto',
|
|
142
|
-
color: theme.colors.fillColorNeutral030,
|
|
143
|
-
},
|
|
144
|
-
routeDebug: {
|
|
145
|
-
alignContent: 'center',
|
|
146
|
-
padding: 16,
|
|
147
|
-
paddingBottom: bottom,
|
|
148
|
-
borderTopWidth: 1,
|
|
149
|
-
borderTopColor: theme.colors.fillColorNeutral050Base,
|
|
150
|
-
},
|
|
151
117
|
})
|
|
152
118
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { StaticScreenProps } from '@react-navigation/native'
|
|
2
|
+
import { AppName } from '../../../types/resources/app_name'
|
|
3
|
+
import { GraphId } from '../../../types/resources/group_resource'
|
|
4
|
+
|
|
5
|
+
export type ConversationSelectRecipientsParams = {
|
|
6
|
+
chat_group_graph_id?: GraphId
|
|
7
|
+
group_source_app_name?: AppName
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type ConversationSelectRecipientsScreenProps =
|
|
11
|
+
StaticScreenProps<ConversationSelectRecipientsParams>
|