@planningcenter/chat-react-native 3.18.0-rc.4 → 3.18.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/conversation/message.d.ts +2 -1
- package/build/components/conversation/message.d.ts.map +1 -1
- package/build/components/conversation/message.js +5 -5
- package/build/components/conversation/message.js.map +1 -1
- package/build/components/conversation/message_form.js +5 -2
- package/build/components/conversation/message_form.js.map +1 -1
- package/build/components/conversation/reply_connectors.d.ts.map +1 -1
- package/build/components/conversation/reply_connectors.js +0 -5
- package/build/components/conversation/reply_connectors.js.map +1 -1
- package/build/components/conversations/conversations.d.ts.map +1 -1
- package/build/components/conversations/conversations.js +2 -3
- package/build/components/conversations/conversations.js.map +1 -1
- package/build/hooks/use_features.d.ts +9 -0
- package/build/hooks/use_features.d.ts.map +1 -0
- package/build/hooks/use_features.js +35 -0
- package/build/hooks/use_features.js.map +1 -0
- package/build/screens/conversation_details_screen.d.ts.map +1 -1
- package/build/screens/conversation_details_screen.js +3 -4
- package/build/screens/conversation_details_screen.js.map +1 -1
- package/build/screens/conversation_new/components/form_list.d.ts +2 -2
- package/build/screens/conversation_new/components/form_list.d.ts.map +1 -1
- package/build/screens/conversation_new/components/form_list.js +2 -3
- package/build/screens/conversation_new/components/form_list.js.map +1 -1
- package/build/screens/conversation_screen.d.ts +2 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +12 -6
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js +2 -3
- package/build/screens/conversation_select_recipients/conversation_select_group_recipients_screen.js.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.d.ts.map +1 -1
- package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js +2 -3
- package/build/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.js.map +1 -1
- package/build/screens/message_actions_screen.js +4 -2
- package/build/screens/message_actions_screen.js.map +1 -1
- package/build/types/resources/feature_resource.d.ts +7 -0
- package/build/types/resources/feature_resource.d.ts.map +1 -0
- package/build/types/resources/feature_resource.js +2 -0
- package/build/types/resources/feature_resource.js.map +1 -0
- package/build/utils/index.d.ts +0 -1
- package/build/utils/index.d.ts.map +1 -1
- package/build/utils/index.js +0 -1
- package/build/utils/index.js.map +1 -1
- package/build/utils/request/get_features.d.ts +11 -0
- package/build/utils/request/get_features.d.ts.map +1 -0
- package/build/utils/request/get_features.js +18 -0
- package/build/utils/request/get_features.js.map +1 -0
- package/package.json +2 -3
- package/src/components/conversation/message.tsx +8 -4
- package/src/components/conversation/message_form.tsx +4 -2
- package/src/components/conversation/reply_connectors.tsx +0 -3
- package/src/components/conversations/conversations.tsx +7 -9
- package/src/hooks/use_features.ts +47 -0
- package/src/screens/conversation_details_screen.tsx +3 -4
- package/src/screens/conversation_new/components/form_list.tsx +3 -5
- package/src/screens/conversation_screen.tsx +17 -5
- package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx +2 -4
- package/src/screens/conversation_select_recipients/conversation_select_teams_i_lead_recipients_screen.tsx +2 -4
- package/src/screens/message_actions_screen.tsx +4 -2
- package/src/types/resources/feature_resource.ts +6 -0
- package/src/utils/index.ts +0 -1
- package/src/utils/request/get_features.ts +20 -0
- package/build/utils/replies_local_feature_flag.d.ts +0 -2
- package/build/utils/replies_local_feature_flag.d.ts.map +0 -1
- package/build/utils/replies_local_feature_flag.js +0 -3
- package/build/utils/replies_local_feature_flag.js.map +0 -1
- package/src/utils/replies_local_feature_flag.ts +0 -2
|
@@ -35,7 +35,7 @@ import { CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL } from '../utils/styles'
|
|
|
35
35
|
import { useConversationJoltEvents } from '../hooks/use_conversation_jolt_events'
|
|
36
36
|
import { JumpToBottomButton } from '../components/conversation/jump_to_bottom_button'
|
|
37
37
|
import { ReplyShadowMessage } from '../components/conversation/reply_shadow_message'
|
|
38
|
-
import {
|
|
38
|
+
import { availableFeatures, useFeatures } from '../hooks/use_features'
|
|
39
39
|
|
|
40
40
|
export type ConversationRouteProps = {
|
|
41
41
|
conversation_id: number
|
|
@@ -66,7 +66,13 @@ export function ConversationScreen({ route }: ConversationScreenProps) {
|
|
|
66
66
|
useConversationMessagesJoltEvents({ conversationId: conversation_id })
|
|
67
67
|
useEnsureConversationsRouteExists()
|
|
68
68
|
useMarkLatestMessageRead({ conversation, messages })
|
|
69
|
-
const
|
|
69
|
+
const { featureEnabled } = useFeatures()
|
|
70
|
+
const repliesEnabled = featureEnabled(availableFeatures.threaded_replies)
|
|
71
|
+
const messagesWithSeparators = groupMessages({
|
|
72
|
+
ms: messages,
|
|
73
|
+
inReplyScreen: !!reply_root_id,
|
|
74
|
+
repliesEnabled,
|
|
75
|
+
})
|
|
70
76
|
const noMessages = messagesWithSeparators.length === 0
|
|
71
77
|
|
|
72
78
|
const { repliesDisabled, memberAbility, badges, title } = conversation
|
|
@@ -164,6 +170,7 @@ export function ConversationScreen({ route }: ConversationScreenProps) {
|
|
|
164
170
|
conversation_id={conversation_id}
|
|
165
171
|
latestReadMessageSortKey={conversation?.latestReadMessageSortKey}
|
|
166
172
|
inReplyScreen={!!reply_root_id}
|
|
173
|
+
repliesEnabled={repliesEnabled}
|
|
167
174
|
/>
|
|
168
175
|
)
|
|
169
176
|
}}
|
|
@@ -252,9 +259,14 @@ type ReplyShadowMessage = {
|
|
|
252
259
|
interface GroupMessagesProps {
|
|
253
260
|
ms: MessageResource[]
|
|
254
261
|
inReplyScreen?: boolean
|
|
262
|
+
repliesEnabled?: boolean
|
|
255
263
|
}
|
|
256
264
|
|
|
257
|
-
export const groupMessages = ({
|
|
265
|
+
export const groupMessages = ({
|
|
266
|
+
ms,
|
|
267
|
+
inReplyScreen,
|
|
268
|
+
repliesEnabled = false,
|
|
269
|
+
}: GroupMessagesProps) => {
|
|
258
270
|
let enrichedMessages: (MessageResource | DateSeparator | ReplyShadowMessage)[] = []
|
|
259
271
|
let encounteredOneOfMyMessages = false
|
|
260
272
|
|
|
@@ -298,7 +310,7 @@ export const groupMessages = ({ ms, inReplyScreen }: GroupMessagesProps) => {
|
|
|
298
310
|
message.nextRendersAuthor = nextMessage?.renderAuthor
|
|
299
311
|
message.isReplyShadowMessage = false
|
|
300
312
|
message.nextIsReplyShadowMessage =
|
|
301
|
-
|
|
313
|
+
repliesEnabled &&
|
|
302
314
|
nextMessageInThread &&
|
|
303
315
|
!nextMessageThreadRoot &&
|
|
304
316
|
(nextMessageDifferentThread || nextMessageIsDateSeparator)
|
|
@@ -319,7 +331,7 @@ export const groupMessages = ({ ms, inReplyScreen }: GroupMessagesProps) => {
|
|
|
319
331
|
|
|
320
332
|
enrichedMessages.push(message)
|
|
321
333
|
|
|
322
|
-
if (insertReplyShadowMessage &&
|
|
334
|
+
if (insertReplyShadowMessage && repliesEnabled) {
|
|
323
335
|
enrichedMessages.push({
|
|
324
336
|
type: 'ReplyShadowMessage',
|
|
325
337
|
id: `${message.id}-${message.replyRootId}`,
|
package/src/screens/conversation_select_recipients/conversation_select_group_recipients_screen.tsx
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useNavigation } from '@react-navigation/native'
|
|
2
2
|
import React from 'react'
|
|
3
|
-
import { StyleSheet, View } from 'react-native'
|
|
4
|
-
import { FlashList } from '@shopify/flash-list'
|
|
3
|
+
import { FlatList, StyleSheet, View } from 'react-native'
|
|
5
4
|
import { Heading } from '../../components'
|
|
6
5
|
import { GroupsGroupResource } from '../../types'
|
|
7
6
|
import { useGroupsGroups } from '../../hooks/use_groups_groups'
|
|
@@ -31,10 +30,9 @@ export const ConversationSelectGroupRecipientsScreen = ({
|
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
return (
|
|
34
|
-
<
|
|
33
|
+
<FlatList
|
|
35
34
|
data={groupsWithCreatePermission}
|
|
36
35
|
keyExtractor={item => item.id.toString()}
|
|
37
|
-
estimatedItemSize={65}
|
|
38
36
|
contentContainerStyle={styles.contentContainer}
|
|
39
37
|
ListHeaderComponent={
|
|
40
38
|
<View style={styles.sectionHeader}>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useNavigation } from '@react-navigation/native'
|
|
2
2
|
import React from 'react'
|
|
3
|
-
import { StyleSheet, View } from 'react-native'
|
|
4
|
-
import { FlashList } from '@shopify/flash-list'
|
|
3
|
+
import { FlatList, StyleSheet, View } from 'react-native'
|
|
5
4
|
import { Heading } from '../../components'
|
|
6
5
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
7
6
|
import { ConversationSelectRecipientsScreenProps } from './types/screen_props'
|
|
@@ -30,10 +29,9 @@ export const ConversationSelectTeamsILeadRecipientsScreen = ({
|
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
return (
|
|
33
|
-
<
|
|
32
|
+
<FlatList
|
|
34
33
|
data={serviceTypes}
|
|
35
34
|
keyExtractor={item => item.id.toString()}
|
|
36
|
-
estimatedItemSize={65}
|
|
37
35
|
contentContainerStyle={styles.contentContainer}
|
|
38
36
|
ListHeaderComponent={
|
|
39
37
|
<View style={styles.sectionHeader}>
|
|
@@ -14,7 +14,7 @@ import { useMessageReactionToggle } from '../hooks/use_message_reaction_toggle'
|
|
|
14
14
|
import { ReactionCountResource } from '../types/resources/reaction'
|
|
15
15
|
import { Clipboard, Haptic } from '../utils/native_adapters'
|
|
16
16
|
import { MessageResource } from '../types'
|
|
17
|
-
import {
|
|
17
|
+
import { availableFeatures, useFeatures } from '../hooks/use_features'
|
|
18
18
|
|
|
19
19
|
export const MessageActionsScreenOptions = getFormSheetScreenOptions({
|
|
20
20
|
sheetAllowedDetents: [0.5],
|
|
@@ -76,6 +76,8 @@ function MessageActionsScreenContent({
|
|
|
76
76
|
const navigation = useNavigation()
|
|
77
77
|
const apiClient = useApiClient()
|
|
78
78
|
const styles = useStyles()
|
|
79
|
+
const { featureEnabled } = useFeatures()
|
|
80
|
+
const repliesEnabled = featureEnabled(availableFeatures.threaded_replies)
|
|
79
81
|
|
|
80
82
|
const myReactions = message?.reactionCounts
|
|
81
83
|
.filter(reaction => reaction.mine)
|
|
@@ -190,7 +192,7 @@ function MessageActionsScreenContent({
|
|
|
190
192
|
))}
|
|
191
193
|
</View>
|
|
192
194
|
<View style={styles.actions}>
|
|
193
|
-
{
|
|
195
|
+
{repliesEnabled && !inReplyScreen && (
|
|
194
196
|
<FormSheet.Action
|
|
195
197
|
onPress={handleReplyPress}
|
|
196
198
|
title="Reply to message"
|
package/src/utils/index.ts
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { getRequestQueryKey } from '../../hooks/use_suspense_api'
|
|
2
|
+
|
|
3
|
+
export const getFeaturesRequestArgs = () => {
|
|
4
|
+
const url = '/me/features'
|
|
5
|
+
|
|
6
|
+
return {
|
|
7
|
+
url,
|
|
8
|
+
data: {
|
|
9
|
+
perPage: 100,
|
|
10
|
+
fields: {
|
|
11
|
+
Feature: ['name', 'enabled'],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const getFeaturesQueryKey = () => {
|
|
18
|
+
const requestArgs = getFeaturesRequestArgs()
|
|
19
|
+
return getRequestQueryKey(requestArgs)
|
|
20
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replies_local_feature_flag.d.ts","sourceRoot":"","sources":["../../src/utils/replies_local_feature_flag.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,uBAAuB,QAAQ,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replies_local_feature_flag.js","sourceRoot":"","sources":["../../src/utils/replies_local_feature_flag.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA","sourcesContent":["// TODO: Replace this whole file with the flipper flag\nexport const REPLIES_FEATURE_ENABLED = false\n"]}
|