@planningcenter/chat-react-native 3.42.3-qa-staging.5 → 3.42.3-qa-staging.7
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/display/action_button.d.ts +1 -1
- package/build/components/display/action_button.d.ts.map +1 -1
- package/build/components/display/action_button.js +3 -13
- package/build/components/display/action_button.js.map +1 -1
- package/build/components/display/platform_modal_header_buttons.d.ts +7 -47
- package/build/components/display/platform_modal_header_buttons.d.ts.map +1 -1
- package/build/components/display/platform_modal_header_buttons.js +9 -119
- package/build/components/display/platform_modal_header_buttons.js.map +1 -1
- package/build/hooks/index.d.ts +1 -1
- package/build/hooks/index.d.ts.map +1 -1
- package/build/hooks/index.js +1 -1
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/use_current_person.d.ts.map +1 -1
- package/build/hooks/use_current_person.js +0 -1
- package/build/hooks/use_current_person.js.map +1 -1
- package/build/hooks/use_direct_messages_enabled.d.ts +2 -0
- package/build/hooks/use_direct_messages_enabled.d.ts.map +1 -0
- package/build/hooks/use_direct_messages_enabled.js +16 -0
- package/build/hooks/use_direct_messages_enabled.js.map +1 -0
- package/build/hooks/use_features.d.ts +1 -0
- package/build/hooks/use_features.d.ts.map +1 -1
- package/build/hooks/use_features.js +1 -0
- package/build/hooks/use_features.js.map +1 -1
- package/build/navigation/index.d.ts +173 -69
- package/build/navigation/index.d.ts.map +1 -1
- package/build/navigation/index.js +72 -61
- package/build/navigation/index.js.map +1 -1
- package/build/screens/bug_report_screen.d.ts.map +1 -1
- package/build/screens/bug_report_screen.js +13 -10
- package/build/screens/bug_report_screen.js.map +1 -1
- package/build/screens/conversation_details_screen.d.ts.map +1 -1
- package/build/screens/conversation_details_screen.js +12 -11
- package/build/screens/conversation_details_screen.js.map +1 -1
- package/build/screens/conversation_filters/components/conversation_filters.js +3 -3
- package/build/screens/conversation_filters/components/conversation_filters.js.map +1 -1
- package/build/screens/conversation_filters_screen.js +2 -2
- package/build/screens/conversation_filters_screen.js.map +1 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +2 -9
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/conversation_select_type_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_type_screen.js +7 -4
- package/build/screens/conversation_select_type_screen.js.map +1 -1
- package/build/screens/conversations/components/list_header_component.js +3 -3
- package/build/screens/conversations/components/list_header_component.js.map +1 -1
- package/build/screens/message_report_screen.d.ts.map +1 -1
- package/build/screens/message_report_screen.js +18 -14
- package/build/screens/message_report_screen.js.map +1 -1
- package/build/screens/notification_settings_screen.d.ts.map +1 -1
- package/build/screens/notification_settings_screen.js +14 -0
- package/build/screens/notification_settings_screen.js.map +1 -1
- package/build/screens/settings_screen.js +3 -3
- package/build/screens/settings_screen.js.map +1 -1
- package/build/types/resources/person.d.ts +0 -1
- package/build/types/resources/person.d.ts.map +1 -1
- package/build/types/resources/person.js.map +1 -1
- package/package.json +4 -4
- package/src/components/display/action_button.tsx +48 -45
- package/src/components/display/platform_modal_header_buttons.tsx +13 -254
- package/src/hooks/index.ts +1 -1
- package/src/hooks/use_current_person.ts +0 -1
- package/src/hooks/use_direct_messages_enabled.ts +23 -0
- package/src/hooks/use_features.ts +1 -0
- package/src/navigation/index.tsx +166 -149
- package/src/screens/bug_report_screen.tsx +15 -16
- package/src/screens/conversation_details_screen.tsx +17 -11
- package/src/screens/conversation_filters/components/conversation_filters.tsx +3 -3
- package/src/screens/conversation_filters_screen.tsx +2 -2
- package/src/screens/conversation_screen.tsx +2 -10
- package/src/screens/conversation_select_type_screen.tsx +7 -4
- package/src/screens/conversations/components/list_header_component.tsx +3 -3
- package/src/screens/message_report_screen.tsx +21 -20
- package/src/screens/notification_settings_screen.tsx +21 -1
- package/src/screens/settings_screen.tsx +3 -3
- package/src/types/resources/person.ts +0 -1
- package/build/hooks/use_direct_messages_eligible.d.ts +0 -2
- package/build/hooks/use_direct_messages_eligible.d.ts.map +0 -1
- package/build/hooks/use_direct_messages_eligible.js +0 -9
- package/build/hooks/use_direct_messages_eligible.js.map +0 -1
- package/src/__tests__/hooks/use_direct_messages_eligible.test.tsx +0 -77
- package/src/hooks/use_direct_messages_eligible.ts +0 -11
package/src/navigation/index.tsx
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
+
import { HeaderBackButton } from '@react-navigation/elements'
|
|
1
2
|
import { StaticParamList } from '@react-navigation/native'
|
|
2
3
|
import {
|
|
3
4
|
createNativeStackNavigator,
|
|
4
5
|
NativeStackHeaderRightProps,
|
|
5
|
-
NativeStackNavigationOptions,
|
|
6
6
|
} from '@react-navigation/native-stack'
|
|
7
7
|
import { CardStyleInterpolators } from '@react-navigation/stack'
|
|
8
8
|
import React from 'react'
|
|
9
|
+
import { Platform } from 'react-native'
|
|
10
|
+
import { Icon } from '../components'
|
|
9
11
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
withMinimalBack,
|
|
13
|
-
withRightClose,
|
|
14
|
-
withRightDone,
|
|
12
|
+
HeaderDoneButton,
|
|
13
|
+
HeaderTextButton,
|
|
15
14
|
} from '../components/display/platform_modal_header_buttons'
|
|
16
|
-
import {
|
|
15
|
+
import { useDirectMessagesEnabled, useQualifiedByAge } from '../hooks'
|
|
17
16
|
import {
|
|
18
17
|
AttachmentActionsScreen,
|
|
19
18
|
AttachmentActionsScreenOptions,
|
|
@@ -80,66 +79,69 @@ import {
|
|
|
80
79
|
SystemMessagePeopleScreenOptions,
|
|
81
80
|
} from '../screens/system_message_people_screen'
|
|
82
81
|
import { TeamConversationScreen } from '../screens/team_conversation_screen'
|
|
83
|
-
import { isLiquidGlassEnabled } from '../utils/liquid_glass'
|
|
84
82
|
import { ScreenLayoutWithChatAccessGate } from './screenLayout'
|
|
85
83
|
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
84
|
+
const HEADER_BACK_BUTTON_LAYOUT_RESET_STYLES = {
|
|
85
|
+
marginLeft: Platform.select({ ios: -8, default: -3 }),
|
|
86
|
+
marginRight: Platform.select({ ios: 0, default: 30 }),
|
|
87
|
+
}
|
|
90
88
|
|
|
91
89
|
export const NewConversationStack = createNativeStackNavigator({
|
|
92
90
|
initialRouteName: 'ConversationNewEntry',
|
|
93
|
-
screenOptions:
|
|
91
|
+
screenOptions: {
|
|
92
|
+
headerBackButtonDisplayMode: 'minimal',
|
|
93
|
+
},
|
|
94
94
|
screenLayout: ScreenLayoutWithChatAccessGate,
|
|
95
95
|
screens: {
|
|
96
96
|
ConversationNewEntry: {
|
|
97
97
|
screen: ConversationNewEntryScreen,
|
|
98
|
-
options: ({ navigation }) =>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
headerBackVisible: false,
|
|
103
|
-
},
|
|
104
|
-
withRightClose({ onPress: navigation.goBack })
|
|
98
|
+
options: ({ navigation }) => ({
|
|
99
|
+
title: 'New conversation',
|
|
100
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
101
|
+
<HeaderTextButton {...props} onPress={navigation.goBack} title="Cancel" />
|
|
105
102
|
),
|
|
103
|
+
headerBackVisible: false,
|
|
104
|
+
}),
|
|
106
105
|
},
|
|
107
106
|
ConversationSelectGroupRecipients: {
|
|
108
107
|
screen: ConversationSelectGroupRecipientsScreen,
|
|
109
|
-
options: ({ navigation, route }) =>
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
108
|
+
options: ({ navigation, route }) => ({
|
|
109
|
+
title: 'New conversation',
|
|
110
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
111
|
+
<HeaderTextButton
|
|
112
|
+
{...props}
|
|
113
|
+
onPress={() => navigation.popTo('Conversations', route.params)}
|
|
114
|
+
title="Cancel"
|
|
115
|
+
/>
|
|
117
116
|
),
|
|
117
|
+
}),
|
|
118
118
|
},
|
|
119
119
|
ConversationSelectTeamsILeadRecipients: {
|
|
120
120
|
screen: ConversationSelectTeamsILeadRecipientsScreen,
|
|
121
|
-
options: ({ navigation, route }) =>
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
121
|
+
options: ({ navigation, route }) => ({
|
|
122
|
+
title: 'New conversation',
|
|
123
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
124
|
+
<HeaderTextButton
|
|
125
|
+
{...props}
|
|
126
|
+
onPress={() => navigation.popTo('Conversations', route.params)}
|
|
127
|
+
title="Cancel"
|
|
128
|
+
/>
|
|
129
129
|
),
|
|
130
|
+
}),
|
|
130
131
|
},
|
|
131
132
|
ConversationSelectDirectMessageRecipients: {
|
|
132
133
|
screen: ConversationSelectDirectMessageRecipientsScreen,
|
|
133
|
-
if:
|
|
134
|
-
options: ({ navigation, route }) =>
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
134
|
+
if: useDirectMessagesEnabled,
|
|
135
|
+
options: ({ navigation, route }) => ({
|
|
136
|
+
title: 'New conversation',
|
|
137
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
138
|
+
<HeaderTextButton
|
|
139
|
+
{...props}
|
|
140
|
+
onPress={() => navigation.popTo('Conversations', route.params)}
|
|
141
|
+
title="Cancel"
|
|
142
|
+
/>
|
|
142
143
|
),
|
|
144
|
+
}),
|
|
143
145
|
},
|
|
144
146
|
ConversationFilterRecipients: {
|
|
145
147
|
screen: ConversationFilterRecipientsScreen,
|
|
@@ -147,20 +149,21 @@ export const NewConversationStack = createNativeStackNavigator({
|
|
|
147
149
|
},
|
|
148
150
|
ConversationNew: {
|
|
149
151
|
screen: ConversationNewScreen,
|
|
150
|
-
options: ({ navigation, route }) =>
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
onPress: () => {
|
|
152
|
+
options: ({ navigation, route }) => ({
|
|
153
|
+
title: 'New conversation',
|
|
154
|
+
headerLeft: () => null,
|
|
155
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
156
|
+
<HeaderTextButton
|
|
157
|
+
{...props}
|
|
158
|
+
onPress={() => {
|
|
158
159
|
const { chat_group_graph_id, group_source_app_name } =
|
|
159
160
|
route.params as ConversationSelectRecipientsParams
|
|
160
161
|
navigation.popTo('Conversations', { chat_group_graph_id, group_source_app_name })
|
|
161
|
-
}
|
|
162
|
-
|
|
162
|
+
}}
|
|
163
|
+
title="Cancel"
|
|
164
|
+
/>
|
|
163
165
|
),
|
|
166
|
+
}),
|
|
164
167
|
},
|
|
165
168
|
AvatarPicker: {
|
|
166
169
|
screen: AvatarPickerScreen,
|
|
@@ -170,19 +173,24 @@ export const NewConversationStack = createNativeStackNavigator({
|
|
|
170
173
|
})
|
|
171
174
|
|
|
172
175
|
export const ChatStack = createNativeStackNavigator({
|
|
173
|
-
screenOptions:
|
|
176
|
+
screenOptions: {
|
|
177
|
+
headerBackButtonDisplayMode: 'minimal',
|
|
178
|
+
},
|
|
174
179
|
screenLayout: ScreenLayoutWithChatAccessGate,
|
|
175
180
|
screens: {
|
|
176
181
|
Conversations: {
|
|
177
182
|
screen: ConversationsScreen,
|
|
178
|
-
options: ({ route, navigation }) =>
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
options: ({ route, navigation }) => ({
|
|
184
|
+
headerTitle: (route.params as { title?: string })?.title ?? 'Chat',
|
|
185
|
+
headerBackVisible: false,
|
|
186
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
187
|
+
<HeaderBackButton
|
|
188
|
+
backImage={() => <Icon name="general.x" size={18} color={props.tintColor} />}
|
|
189
|
+
onPress={navigation.goBack}
|
|
190
|
+
{...props}
|
|
191
|
+
/>
|
|
185
192
|
),
|
|
193
|
+
}),
|
|
186
194
|
},
|
|
187
195
|
ConversationFilters: {
|
|
188
196
|
screen: ConversationFiltersScreen,
|
|
@@ -190,48 +198,61 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
190
198
|
},
|
|
191
199
|
Conversation: {
|
|
192
200
|
screen: ConversationScreen,
|
|
193
|
-
options: ({ route, navigation }) =>
|
|
194
|
-
|
|
195
|
-
{
|
|
196
|
-
|
|
197
|
-
const { conversation_id, title, badge, deleted, muted } =
|
|
198
|
-
route.params as ConversationRouteProps
|
|
201
|
+
options: ({ route, navigation }) => ({
|
|
202
|
+
headerTitle: (props: NativeStackHeaderRightProps) => {
|
|
203
|
+
const { conversation_id, title, badge, deleted, muted } =
|
|
204
|
+
route.params as ConversationRouteProps
|
|
199
205
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
const { chat_group_graph_id } = params
|
|
218
|
-
navigation.popTo('Conversations', { chat_group_graph_id })
|
|
219
|
-
} else {
|
|
220
|
-
navigation.goBack()
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
}),
|
|
224
|
-
},
|
|
225
|
-
withRightClose({ onPress: () => navigation.getParent()?.goBack() })
|
|
206
|
+
return (
|
|
207
|
+
<ConversationScreenTitle
|
|
208
|
+
conversation_id={conversation_id}
|
|
209
|
+
badge={badge}
|
|
210
|
+
deleted={deleted}
|
|
211
|
+
muted={muted}
|
|
212
|
+
{...props}
|
|
213
|
+
>
|
|
214
|
+
{title ?? 'Conversation'}
|
|
215
|
+
</ConversationScreenTitle>
|
|
216
|
+
)
|
|
217
|
+
},
|
|
218
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
219
|
+
<HeaderBackButton
|
|
220
|
+
backImage={() => <Icon name="general.x" size={18} color={props.tintColor} />}
|
|
221
|
+
onPress={() => navigation.getParent()?.goBack()}
|
|
222
|
+
/>
|
|
226
223
|
),
|
|
224
|
+
headerLeft: props => (
|
|
225
|
+
<HeaderBackButton
|
|
226
|
+
style={HEADER_BACK_BUTTON_LAYOUT_RESET_STYLES}
|
|
227
|
+
displayMode="minimal"
|
|
228
|
+
onPress={() => {
|
|
229
|
+
const params = route.params as ConversationRouteProps
|
|
230
|
+
if ((params as ConversationFiltersParams)?.chat_group_graph_id) {
|
|
231
|
+
// Ensure that conversations with a graph id pass them back to the conversation list
|
|
232
|
+
const { chat_group_graph_id } = params
|
|
233
|
+
navigation.popTo('Conversations', { chat_group_graph_id })
|
|
234
|
+
} else {
|
|
235
|
+
navigation.goBack()
|
|
236
|
+
}
|
|
237
|
+
}}
|
|
238
|
+
{...props}
|
|
239
|
+
/>
|
|
240
|
+
),
|
|
241
|
+
}),
|
|
227
242
|
},
|
|
228
243
|
ConversationReply: {
|
|
229
244
|
screen: ConversationScreen,
|
|
230
|
-
options: ({ route, navigation }) =>
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
245
|
+
options: ({ route, navigation }) => ({
|
|
246
|
+
title: (route.params as ConversationRouteProps)?.title ?? 'Reply',
|
|
247
|
+
headerLeft: props => (
|
|
248
|
+
<HeaderBackButton
|
|
249
|
+
style={HEADER_BACK_BUTTON_LAYOUT_RESET_STYLES}
|
|
250
|
+
displayMode="minimal"
|
|
251
|
+
onPress={() => navigation.goBack()}
|
|
252
|
+
{...props}
|
|
253
|
+
/>
|
|
234
254
|
),
|
|
255
|
+
}),
|
|
235
256
|
},
|
|
236
257
|
TeamConversation: {
|
|
237
258
|
screen: TeamConversationScreen,
|
|
@@ -244,14 +265,13 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
244
265
|
},
|
|
245
266
|
ConversationDetails: {
|
|
246
267
|
screen: ConversationDetailsScreen,
|
|
247
|
-
options: ({ navigation }) =>
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
},
|
|
253
|
-
withRightDone({ onPress: navigation.goBack })
|
|
268
|
+
options: ({ navigation }) => ({
|
|
269
|
+
presentation: 'modal',
|
|
270
|
+
title: 'Conversation details',
|
|
271
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
272
|
+
<HeaderTextButton {...props} onPress={navigation.goBack} title="Done" />
|
|
254
273
|
),
|
|
274
|
+
}),
|
|
255
275
|
},
|
|
256
276
|
AvatarPicker: {
|
|
257
277
|
screen: AvatarPickerScreen,
|
|
@@ -259,43 +279,38 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
259
279
|
},
|
|
260
280
|
ChatSettings: {
|
|
261
281
|
screen: SettingsScreen,
|
|
262
|
-
options: ({ navigation }) =>
|
|
263
|
-
|
|
282
|
+
options: ({ navigation }) => ({
|
|
283
|
+
title: 'Chat settings',
|
|
284
|
+
headerBackVisible: false,
|
|
285
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
286
|
+
<HeaderTextButton {...props} onPress={navigation.goBack} title="Done" />
|
|
287
|
+
),
|
|
288
|
+
}),
|
|
264
289
|
},
|
|
265
290
|
NotificationSettings: {
|
|
266
291
|
screen: NotificationSettingsScreen,
|
|
267
|
-
options: ({ navigation }) =>
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
{ title: 'Chat notifications' },
|
|
275
|
-
withMinimalBack({ onPress: navigation.goBack })
|
|
276
|
-
),
|
|
292
|
+
options: ({ navigation }) => ({
|
|
293
|
+
title: 'Chat',
|
|
294
|
+
headerBackVisible: false,
|
|
295
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
296
|
+
<HeaderTextButton {...props} onPress={navigation.goBack} title="Done" />
|
|
297
|
+
),
|
|
298
|
+
}),
|
|
277
299
|
},
|
|
278
300
|
PreferredAppSelection: {
|
|
279
301
|
screen: PreferredAppSelectionScreen,
|
|
280
|
-
options:
|
|
281
|
-
|
|
302
|
+
options: {
|
|
303
|
+
title: 'Preferred app',
|
|
304
|
+
},
|
|
282
305
|
},
|
|
283
306
|
GroupNotificationSettings: {
|
|
284
307
|
screen: GroupNotificationSettingsScreen,
|
|
285
|
-
options: ({ route, navigation }) => {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
? composeOptions(
|
|
292
|
-
{
|
|
293
|
-
title,
|
|
294
|
-
},
|
|
295
|
-
withRightClose({ onPress: navigation.goBack })
|
|
296
|
-
)
|
|
297
|
-
: composeOptions({ title }, withMinimalBack({ onPress: navigation.goBack }))
|
|
298
|
-
},
|
|
308
|
+
options: ({ route, navigation }) => ({
|
|
309
|
+
title: (route.params as { title?: string })?.title || 'Group Settings',
|
|
310
|
+
headerRight: (props: NativeStackHeaderRightProps) => (
|
|
311
|
+
<HeaderDoneButton {...props} navigation={navigation} />
|
|
312
|
+
),
|
|
313
|
+
}),
|
|
299
314
|
},
|
|
300
315
|
GroupNotificationLevelSelect: {
|
|
301
316
|
screen: GroupNotificationLevelSelectScreen,
|
|
@@ -316,14 +331,17 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
316
331
|
GroupConversationNew: {
|
|
317
332
|
screen: ConversationNewScreen,
|
|
318
333
|
if: useQualifiedByAge,
|
|
319
|
-
options: ({ navigation }) =>
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
334
|
+
options: ({ navigation }) => ({
|
|
335
|
+
title: 'New conversation',
|
|
336
|
+
headerLeft: () => null,
|
|
337
|
+
headerRight: props => (
|
|
338
|
+
<HeaderTextButton
|
|
339
|
+
{...props}
|
|
340
|
+
onPress={() => navigation.getParent()?.goBack()}
|
|
341
|
+
title="Cancel"
|
|
342
|
+
/>
|
|
326
343
|
),
|
|
344
|
+
}),
|
|
327
345
|
},
|
|
328
346
|
SendGiphy: {
|
|
329
347
|
screen: SendGiphyScreen,
|
|
@@ -364,15 +382,14 @@ export const ChatStack = createNativeStackNavigator({
|
|
|
364
382
|
},
|
|
365
383
|
GetHelp: {
|
|
366
384
|
screen: GetHelpScreen,
|
|
367
|
-
options: ({ navigation }) =>
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
},
|
|
374
|
-
withRightClose({ onPress: navigation.goBack })
|
|
385
|
+
options: ({ navigation }) => ({
|
|
386
|
+
headerTitle: 'Get help',
|
|
387
|
+
headerBackVisible: false,
|
|
388
|
+
presentation: 'modal',
|
|
389
|
+
headerRight: props => (
|
|
390
|
+
<HeaderTextButton {...props} onPress={navigation.goBack} title="Close" />
|
|
375
391
|
),
|
|
392
|
+
}),
|
|
376
393
|
},
|
|
377
394
|
NotFound: {
|
|
378
395
|
screen: NotFound,
|
|
@@ -4,7 +4,7 @@ import type {
|
|
|
4
4
|
NativeStackScreenProps,
|
|
5
5
|
} from '@react-navigation/native-stack'
|
|
6
6
|
import { startsWith } from 'lodash'
|
|
7
|
-
import React, { useCallback, useState } from 'react'
|
|
7
|
+
import React, { useCallback, useLayoutEffect, useState } from 'react'
|
|
8
8
|
import {
|
|
9
9
|
View,
|
|
10
10
|
StyleSheet,
|
|
@@ -25,10 +25,8 @@ import {
|
|
|
25
25
|
KeyboardView,
|
|
26
26
|
} from '../components'
|
|
27
27
|
import {
|
|
28
|
-
composeOptions,
|
|
29
28
|
HeaderDismissButton,
|
|
30
|
-
|
|
31
|
-
withLeftClose,
|
|
29
|
+
HeaderTextButton,
|
|
32
30
|
} from '../components/display/platform_modal_header_buttons'
|
|
33
31
|
import { VideoAttachmentPreview } from '../components/display/video_attachment_preview'
|
|
34
32
|
import { DefaultLoading } from '../components/page/loading'
|
|
@@ -57,11 +55,11 @@ enum BUG_TYPE_OPTIONS {
|
|
|
57
55
|
|
|
58
56
|
export const BugReportScreenOptions = ({
|
|
59
57
|
navigation,
|
|
60
|
-
}: NativeStackScreenProps<any>): NativeStackNavigationOptions =>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
}: NativeStackScreenProps<any>): NativeStackNavigationOptions => ({
|
|
59
|
+
presentation: 'modal',
|
|
60
|
+
title: 'Report a bug',
|
|
61
|
+
headerLeft: () => <HeaderDismissButton title="Cancel" onPress={() => navigation.goBack()} />,
|
|
62
|
+
})
|
|
65
63
|
|
|
66
64
|
interface Attachment {
|
|
67
65
|
id: string
|
|
@@ -158,13 +156,14 @@ export function BugReportScreen() {
|
|
|
158
156
|
return ImagePicker.openImageLibraryAsync().then(result => uploadImagePickerResult(result))
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
159
|
+
useLayoutEffect(() => {
|
|
160
|
+
navigation.setOptions({
|
|
161
|
+
// eslint-disable-next-line react/no-unstable-nested-components
|
|
162
|
+
headerRight: () => (
|
|
163
|
+
<HeaderTextButton title="Submit" onPress={handleSubmit} disabled={!formValid} />
|
|
164
|
+
),
|
|
165
|
+
})
|
|
166
|
+
}, [formValid, handleSubmit, navigation])
|
|
168
167
|
|
|
169
168
|
if (status === 'pending') {
|
|
170
169
|
return (
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
type TextStyle,
|
|
39
39
|
} from '../components'
|
|
40
40
|
import { ConversationAvatar } from '../components/display/conversation_avatar'
|
|
41
|
-
import {
|
|
41
|
+
import { HeaderTextButton } from '../components/display/platform_modal_header_buttons'
|
|
42
42
|
import { ButtonAppearanceUnion } from '../components/display/utils/button_colors'
|
|
43
43
|
import { useSuspensePaginator, useTheme } from '../hooks'
|
|
44
44
|
import {
|
|
@@ -222,18 +222,24 @@ export function ConversationDetailsScreen({ route }: ConversationDetailsScreenPr
|
|
|
222
222
|
[name, productName, resourceType, styles.headerTitleBadge, styles.headerTitleContainer]
|
|
223
223
|
)
|
|
224
224
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
225
|
+
const HeaderRight = useCallback(() => {
|
|
226
|
+
return (
|
|
227
|
+
<HeaderTextButton
|
|
228
|
+
onPress={() => {
|
|
229
|
+
saveTitle({ title: trimmedTitle || conversation.title })
|
|
230
|
+
navigation.goBack()
|
|
231
|
+
}}
|
|
232
|
+
title="Done"
|
|
233
|
+
/>
|
|
234
|
+
)
|
|
235
|
+
}, [conversation.title, navigation, saveTitle, trimmedTitle])
|
|
233
236
|
|
|
234
237
|
useEffect(() => {
|
|
235
|
-
navigation.setOptions({
|
|
236
|
-
|
|
238
|
+
navigation.setOptions({
|
|
239
|
+
headerRight: HeaderRight,
|
|
240
|
+
headerTitle: HeaderTitle,
|
|
241
|
+
})
|
|
242
|
+
}, [HeaderRight, HeaderTitle, navigation])
|
|
237
243
|
|
|
238
244
|
const listData = [
|
|
239
245
|
{
|
|
@@ -4,7 +4,7 @@ import { FlatList } from 'react-native-gesture-handler'
|
|
|
4
4
|
import { Heading } from '../../../components'
|
|
5
5
|
import {
|
|
6
6
|
useAtFontScaleBreakpoint,
|
|
7
|
-
|
|
7
|
+
useDirectMessagesEnabled,
|
|
8
8
|
useHasDirectMessages,
|
|
9
9
|
useTheme,
|
|
10
10
|
} from '../../../hooks'
|
|
@@ -59,9 +59,9 @@ export const ConversationFilters = () => {
|
|
|
59
59
|
const { setScrollOffset, params } = useContext(FilterContext)
|
|
60
60
|
const { chat_group_graph_id, group_source_app_name = '', show_direct_messages } = params
|
|
61
61
|
|
|
62
|
-
const
|
|
62
|
+
const directMessagesEnabled = useDirectMessagesEnabled()
|
|
63
63
|
const hasDirectMessages = useHasDirectMessages()
|
|
64
|
-
const canFilterByDMs =
|
|
64
|
+
const canFilterByDMs = directMessagesEnabled && hasDirectMessages
|
|
65
65
|
|
|
66
66
|
const activeFilter: FilterTypes = useMemo(() => {
|
|
67
67
|
if (chat_group_graph_id) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useHeaderHeight } from '@react-navigation/elements'
|
|
2
|
-
import { RouteProp, useRoute } from '@react-navigation/native'
|
|
2
|
+
import { createComponentForStaticNavigation, RouteProp, useRoute } from '@react-navigation/native'
|
|
3
3
|
import { createNativeStackNavigator } from '@react-navigation/native-stack'
|
|
4
4
|
import React, { useCallback } from 'react'
|
|
5
5
|
import { LayoutChangeEvent, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'
|
|
@@ -58,7 +58,7 @@ const FilterNavigator = createNativeStackNavigator<ConversationFilterStackParamL
|
|
|
58
58
|
},
|
|
59
59
|
})
|
|
60
60
|
|
|
61
|
-
const Filters = FilterNavigator
|
|
61
|
+
const Filters = createComponentForStaticNavigation(FilterNavigator, 'Filters')
|
|
62
62
|
|
|
63
63
|
export const ConversationFiltersScreen = (_props: ConversationFiltersScreenProps) => {
|
|
64
64
|
const styles = useStyles()
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
useRoute,
|
|
10
10
|
} from '@react-navigation/native'
|
|
11
11
|
import React, { useCallback, useEffect, useRef, useState } from 'react'
|
|
12
|
-
import { FlatList, Platform, StyleSheet,
|
|
12
|
+
import { FlatList, Platform, StyleSheet, View } from 'react-native'
|
|
13
13
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
14
14
|
import { Badge, Icon, Text } from '../components'
|
|
15
15
|
import { ConversationStartBanner } from '../components/conversation/conversation_start_banner'
|
|
@@ -25,7 +25,6 @@ import { ReplyShadowMessage } from '../components/conversation/reply_shadow_mess
|
|
|
25
25
|
import { SystemMessage } from '../components/conversation/system_message'
|
|
26
26
|
import { TypingIndicator } from '../components/conversation/typing_indicator'
|
|
27
27
|
import { KeyboardView } from '../components/display/keyboard_view'
|
|
28
|
-
import { useHeaderSlotReserve } from '../components/display/platform_modal_header_buttons'
|
|
29
28
|
import BlankState from '../components/primitive/blank_state_primitive'
|
|
30
29
|
import { ConversationContextProvider } from '../contexts/conversation_context'
|
|
31
30
|
import { useTheme } from '../hooks'
|
|
@@ -46,7 +45,6 @@ import { ConversationBadgeResource } from '../types/resources/conversation_badge
|
|
|
46
45
|
import { MessageResource } from '../types/resources/message'
|
|
47
46
|
import { getRelativeDateStatus } from '../utils/date'
|
|
48
47
|
import { groupMessages, type DateSeparator } from '../utils/group_messages'
|
|
49
|
-
import { isLiquidGlassEnabled } from '../utils/liquid_glass'
|
|
50
48
|
import { CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL } from '../utils/styles'
|
|
51
49
|
import { isSystemMessage } from '../utils/system_messages'
|
|
52
50
|
|
|
@@ -376,17 +374,11 @@ export const ConversationScreenTitle = ({
|
|
|
376
374
|
}
|
|
377
375
|
|
|
378
376
|
const usePressableHeaderStyle = () => {
|
|
379
|
-
const { width } = useWindowDimensions()
|
|
380
|
-
const slotReserve = useHeaderSlotReserve()
|
|
381
|
-
const headerContainerStyle = isLiquidGlassEnabled()
|
|
382
|
-
? { maxWidth: width - slotReserve * 2 }
|
|
383
|
-
: { marginRight: Platform.select({ default: 20, android: 16 }) }
|
|
384
|
-
|
|
385
377
|
return StyleSheet.create({
|
|
386
378
|
container: {
|
|
387
379
|
alignItems: Platform.select({ android: 'flex-start', default: 'center' }),
|
|
380
|
+
marginRight: Platform.select({ ios: 20, default: 16 }),
|
|
388
381
|
flex: 1,
|
|
389
|
-
...headerContainerStyle,
|
|
390
382
|
},
|
|
391
383
|
titleWrapper: {
|
|
392
384
|
alignItems: 'center',
|
|
@@ -2,6 +2,7 @@ import { StaticScreenProps, useNavigation } from '@react-navigation/native'
|
|
|
2
2
|
import React, { useLayoutEffect } from 'react'
|
|
3
3
|
import FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'
|
|
4
4
|
import { useCurrentPerson } from '../hooks/use_current_person'
|
|
5
|
+
import { availableFeatures, useFeatures } from '../hooks/use_features'
|
|
5
6
|
import { useConversationTypeAccess } from '../hooks/use_new_conversation_entry'
|
|
6
7
|
import type { NewConversationFromFilter } from '../hooks/use_new_conversation_from_filter'
|
|
7
8
|
import { AppName } from '../types/resources/app_name'
|
|
@@ -27,15 +28,17 @@ export function ConversationSelectTypeScreen({ route }: ConversationSelectTypeSc
|
|
|
27
28
|
const navigation = useNavigation()
|
|
28
29
|
const { canCreateGroupsConversations, canCreateServicesConversations } =
|
|
29
30
|
useConversationTypeAccess()
|
|
30
|
-
const {
|
|
31
|
+
const { featureEnabled } = useFeatures()
|
|
32
|
+
const { directMessagesDisabled, under_18 } = useCurrentPerson()
|
|
31
33
|
const { newConversationFromFilter, chat_group_graph_id, group_source_app_name } =
|
|
32
34
|
route.params || {}
|
|
33
35
|
|
|
34
36
|
const filterParams = { chat_group_graph_id, group_source_app_name }
|
|
35
|
-
const
|
|
37
|
+
const dmFeatureEnabled = featureEnabled(availableFeatures.direct_messages_eap)
|
|
38
|
+
const showDirectMessageOption = dmFeatureEnabled && !under_18
|
|
36
39
|
|
|
37
|
-
// sheetAllowedDetents depends on DM
|
|
38
|
-
// here instead of in the static ConversationSelectTypeScreenOptions. useLayoutEffect applies
|
|
40
|
+
// sheetAllowedDetents depends on the DM feature flag, which isn't known until render, so it's
|
|
41
|
+
// set here instead of in the static ConversationSelectTypeScreenOptions. useLayoutEffect applies
|
|
39
42
|
// it before paint so the sheet never visibly resizes after opening.
|
|
40
43
|
useLayoutEffect(() => {
|
|
41
44
|
navigation.setOptions({ sheetAllowedDetents: showDirectMessageOption ? [0.3] : [0.25] })
|