@planningcenter/chat-react-native 4.3.0 → 4.3.1-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -187,8 +187,12 @@ function MessageActionsScreenContent(t0) {
187
187
  const handleReplyPress = t4;
188
188
  let t5;
189
189
  if ($[12] !== attachmentForCopy || $[13] !== message.text || $[14] !== navigation) {
190
- t5 = () => {
191
- Clipboard.setStringAsync(message?.text || attachmentForCopy() || "");
190
+ t5 = async () => {
191
+ const textToCopy = message?.text || attachmentForCopy();
192
+ if (textToCopy) {
193
+ await Clipboard.setStringAsync(textToCopy);
194
+ Haptic.notificationSuccess();
195
+ }
192
196
  navigation.goBack();
193
197
  };
194
198
  $[12] = attachmentForCopy;
@@ -1 +1 @@
1
- {"version":3,"file":"message_actions_screen.js","names":["PlatformPressable","StackActions","useNavigation","useMutation","useQueryClient","isNil","omitBy","React","useCallback","Alert","Platform","StyleSheet","View","Text","useReactionStyles","FormSheet","getFormSheetScreenOptions","useCreateAndroidRippleColor","useFontScale","useTheme","useApiClient","useConversationMessages","availableFeatures","useFeatures","useMessageReactionToggle","REACTION_EMOJIS","applyMessageDeletionToCaches","getThreadedMessagesQueryKey","Clipboard","Haptic","jsx","_jsx","jsxs","_jsxs","MessageActionsScreenOptions","sheetAllowedDetents","headerTitle","MessageActionsScreen","t0","$","_c","route","conversation_id","message_id","canDeleteNonAuthoredMessages","inReplyScreen","reply_root_author_name","isSystemMessage","params","t1","t2","Symbol","for","refetchOnMount","messages","refetch","t3","t4","m","id","find","message","t5","MessageActionsScreenContent","refetchMessages","replyRootAuthorName","navigation","apiClient","queryClient","styles","useStyles","featureEnabled","attachments","_temp","expandedLink","hasExpandedLink","reactionCounts","myReactions","filter","_temp2","map","_temp3","Object","entries","value","emoji","mine","includes","availableReactions","giphyTitleLink","_temp4","titleLink","attachmentForCopy","replyRootId","goBack","requestAnimationFrame","navigate","reply_root_id","handleReplyPress","text","setStringAsync","handleCopyPress","t6","impactLight","handleReportPress","t7","handleReactionToggle","isPending","t8","url","chat","delete","deleteMessage","t9","t10","invalidateQueries","queryKey","notificationSuccess","t11","mutationFn","mutationKey","onSuccess","onError","_temp5","mutate","handleDeleteMessage","t12","alert","style","onPress","handleDeleteConfirm","t13","state","getState","targetRouteName","targetRoute","routes","r","name","editing_message_id","dispatch","popTo","handleEditPress","t14","params_0","handleViewReadReceiptsPress","t15","url_0","data","type","attributes","expanded_link_id","post","removeLinkPreview","t16","t17","_temp6","handleRemoveLinkPreview","t18","handleRemoveLinkPreviewConfirm","t19","message_reporting","showReportMessageAction","t20","formSheetContent","t21","reactionList","t22","reaction_1","index","Reaction","reaction","t23","children","t24","actions","Action","title","iconName","accessibilityHint","accessibilityRole","appearance","t25","Root","attachment_0","attachment","reaction_0","reactionStyles","colors","baseRippleColor","interaction","fillColorNeutral060","color","androidRippleColor","borderless","foreground","reactionEmoji","allowFontScaling","android_ripple","maxFontSizeMultiplier","fontScale","baseSize","Math","max","borderColorDefaultBase","reactionBtnSize","select","ios","android","create","paddingTop","flexDirection","justifyContent","alignItems","gap","paddingBottom","borderBottomColor","borderBottomWidth","height","width","borderWidth","borderRadius","overflow","fontSize","textAlign"],"sources":["../../src/screens/message_actions_screen.tsx"],"sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StackActions, StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { isNil, omitBy } from 'lodash'\nimport React, { useCallback } from 'react'\nimport { Alert, Platform, StyleSheet, View } from 'react-native'\nimport { Text } from '../components'\nimport { useReactionStyles } from '../components/conversation/message_reaction'\nimport FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'\nimport { useCreateAndroidRippleColor, useFontScale, useTheme } from '../hooks'\nimport { useApiClient } from '../hooks/use_api_client'\nimport { useConversationMessages } from '../hooks/use_conversation_messages'\nimport { availableFeatures, useFeatures } from '../hooks/use_features'\nimport { useMessageReactionToggle } from '../hooks/use_message_reaction_toggle'\nimport { MessageResource } from '../types'\nimport { ReactionCountResource } from '../types/resources/reaction'\nimport { REACTION_EMOJIS } from '../utils'\nimport {\n applyMessageDeletionToCaches,\n getThreadedMessagesQueryKey,\n} from '../utils/cache/messages_cache'\nimport { Clipboard, Haptic } from '../utils/native_adapters'\n\nexport const MessageActionsScreenOptions = getFormSheetScreenOptions({\n sheetAllowedDetents: [0.5],\n headerTitle: 'Message actions',\n})\n\nexport type MessageActionsScreenProps = StaticScreenProps<{\n message_id: string\n reply_root_author_name?: string\n conversation_id: number\n canDeleteNonAuthoredMessages?: boolean\n inReplyScreen?: boolean\n isSystemMessage?: boolean\n}>\n\nexport function MessageActionsScreen({ route }: MessageActionsScreenProps) {\n const {\n conversation_id,\n message_id,\n canDeleteNonAuthoredMessages,\n inReplyScreen,\n reply_root_author_name,\n isSystemMessage,\n } = route.params\n\n const { messages, refetch } = useConversationMessages(\n { conversation_id },\n { refetchOnMount: false }\n )\n const message = messages.find(m => m.id === message_id)\n\n if (!message) return null\n\n return (\n <MessageActionsScreenContent\n message={message}\n conversation_id={conversation_id}\n canDeleteNonAuthoredMessages={canDeleteNonAuthoredMessages || false}\n refetchMessages={refetch}\n inReplyScreen={inReplyScreen}\n replyRootAuthorName={reply_root_author_name}\n isSystemMessage={isSystemMessage}\n />\n )\n}\n\nfunction MessageActionsScreenContent({\n message,\n conversation_id,\n canDeleteNonAuthoredMessages,\n refetchMessages,\n inReplyScreen,\n replyRootAuthorName,\n isSystemMessage,\n}: {\n message: MessageResource\n conversation_id: number\n canDeleteNonAuthoredMessages: boolean\n refetchMessages: () => void\n inReplyScreen?: boolean\n replyRootAuthorName?: string\n isSystemMessage?: boolean\n}) {\n const navigation = useNavigation()\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const styles = useStyles()\n const { featureEnabled } = useFeatures()\n const expandedLink = message.attachments.find(attachment => attachment.type === 'ExpandedLink')\n const hasExpandedLink = !!expandedLink\n\n const myReactions = message?.reactionCounts\n .filter(reaction => reaction.mine)\n .map(reaction => reaction.value)\n\n const availableReactions = Object.entries(REACTION_EMOJIS).map(([value, emoji]) => {\n return {\n value: value as ReactionCountResource['value'],\n emoji,\n mine: myReactions?.includes(value as ReactionCountResource['value']),\n }\n })\n\n const attachmentForCopy = (): string => {\n const giphyTitleLink = message?.attachments.find(\n attachment => attachment.type === 'giphy'\n )?.titleLink\n\n if (giphyTitleLink) return giphyTitleLink\n return ''\n }\n\n const handleReplyPress = useCallback(() => {\n navigation.goBack()\n // Waits for the modal to be dismissed before pushing the reply screen\n requestAnimationFrame(() => {\n navigation.navigate('ConversationReply', {\n conversation_id,\n reply_root_id: message.replyRootId || message.id,\n reply_root_author_name: replyRootAuthorName,\n })\n })\n }, [navigation, conversation_id, message.id, message.replyRootId, replyRootAuthorName])\n\n const handleCopyPress = () => {\n Clipboard.setStringAsync(message?.text || attachmentForCopy() || '')\n navigation.goBack()\n }\n\n const handleReportPress = useCallback(() => {\n Haptic.impactLight()\n navigation.navigate('MessageReport', {\n conversation_id,\n message_id: message.id,\n })\n }, [navigation, conversation_id, message.id])\n\n const { handleReactionToggle, isPending } = useMessageReactionToggle({\n conversation_id,\n message,\n })\n\n const deleteMessage = useCallback(() => {\n const url = `/me/conversations/${conversation_id}/messages/${message.id}/`\n\n return apiClient.chat.delete({ url })\n }, [apiClient, conversation_id, message.id])\n\n const { mutate: handleDeleteMessage } = useMutation({\n mutationFn: deleteMessage,\n mutationKey: ['deleteMessage', message.id],\n onSuccess: () => {\n applyMessageDeletionToCaches(queryClient, conversation_id, message)\n if (message.replyRootId) {\n queryClient.invalidateQueries({\n queryKey: getThreadedMessagesQueryKey(conversation_id, message.replyRootId),\n })\n }\n refetchMessages()\n Haptic.notificationSuccess()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to delete this message. Please try again.')\n },\n })\n\n const handleDeleteConfirm = useCallback(() => {\n Alert.alert('Delete message', 'Are you sure you want to permanently delete this message?', [\n { text: 'Cancel', style: 'cancel' },\n {\n text: 'Delete',\n style: 'destructive',\n onPress: () => {\n handleDeleteMessage()\n navigation.goBack()\n },\n },\n ])\n }, [handleDeleteMessage, navigation])\n\n const handleEditPress = useCallback(() => {\n const state = navigation.getState?.()\n const targetRouteName = inReplyScreen ? 'ConversationReply' : 'Conversation'\n const targetRoute = state?.routes?.find(r => r.name === targetRouteName)\n const params = omitBy(\n {\n ...(targetRoute?.params || {}),\n conversation_id,\n editing_message_id: message.id,\n },\n isNil\n )\n navigation.dispatch(StackActions.popTo(targetRouteName, params))\n }, [navigation, conversation_id, message.id, inReplyScreen])\n\n const handleViewReadReceiptsPress = useCallback(() => {\n Haptic.impactLight()\n const params = omitBy(\n {\n conversation_id,\n message_id: message.id,\n },\n isNil\n )\n navigation.dispatch(StackActions.popTo('MessageReadReceipts', params))\n }, [navigation, conversation_id, message.id])\n\n const removeLinkPreview = useCallback(() => {\n const url = `/me/conversations/${conversation_id}/messages/${message.id}/remove_expanded_link`\n const data = {\n data: { type: 'ExpandedLink', attributes: { expanded_link_id: expandedLink?.id } },\n }\n\n return apiClient.chat.post({ url, data })\n }, [apiClient, conversation_id, message.id, expandedLink])\n\n const { mutate: handleRemoveLinkPreview } = useMutation({\n mutationFn: removeLinkPreview,\n onSuccess: () => {\n refetchMessages()\n Haptic.notificationSuccess()\n navigation.goBack()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to remove the preview. Please try again.')\n },\n })\n\n const handleRemoveLinkPreviewConfirm = useCallback(() => {\n Alert.alert('Remove link preview?', 'This will remove the image preview but retain the link', [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Remove', style: 'destructive', onPress: () => handleRemoveLinkPreview() },\n ])\n }, [handleRemoveLinkPreview])\n\n const showReportMessageAction =\n !message?.mine && featureEnabled(availableFeatures.message_reporting)\n\n return (\n <FormSheet.Root style={styles.formSheetContent}>\n <View style={styles.reactionList}>\n {availableReactions.map((reaction, index) => (\n <Reaction\n key={index}\n reaction={reaction}\n onPress={() => {\n Haptic.impactLight()\n handleReactionToggle({\n value: reaction.value,\n mine: reaction.mine,\n })\n navigation.goBack()\n }}\n />\n ))}\n </View>\n {!isSystemMessage && (\n <View style={styles.actions}>\n {!inReplyScreen && (\n <FormSheet.Action\n onPress={handleReplyPress}\n title=\"Reply to message\"\n iconName=\"registrations.undo\"\n accessibilityHint=\"Navigates to the reply screen\"\n accessibilityRole=\"link\"\n />\n )}\n <FormSheet.Action\n onPress={handleCopyPress}\n title=\"Copy text\"\n iconName=\"services.fileCopy\"\n accessibilityHint=\"Copies text and links to clipboard\"\n />\n {showReportMessageAction && (\n <FormSheet.Action\n onPress={handleReportPress}\n title=\"Report message\"\n iconName=\"chat.reportMessageO\"\n accessibilityHint=\"Opens a form to report this message\"\n />\n )}\n {message?.mine && (\n <FormSheet.Action\n onPress={() => handleEditPress()}\n title=\"Edit message\"\n iconName=\"accounts.editor\"\n accessibilityHint=\"Opens existing text in the message form input.\"\n />\n )}\n {message?.mine && (\n <FormSheet.Action\n onPress={() => handleViewReadReceiptsPress()}\n title=\"View read receipts\"\n iconName=\"general.checkPerson\"\n accessibilityHint=\"Opens a modal with a list of people who read your message.\"\n />\n )}\n {message?.mine && hasExpandedLink && (\n <FormSheet.Action\n onPress={() => handleRemoveLinkPreviewConfirm()}\n title=\"Remove link preview\"\n iconName=\"general.brokenLink\"\n accessibilityHint=\"Removes an expanded link preview from the message.\"\n />\n )}\n {(message?.mine || canDeleteNonAuthoredMessages) && (\n <FormSheet.Action\n onPress={() => handleDeleteConfirm()}\n title=\"Delete message\"\n iconName=\"publishing.trash\"\n appearance=\"danger\"\n disabled={isPending}\n accessibilityHint=\"Opens a confirmation alert to delete this message permanently.\"\n />\n )}\n </View>\n )}\n </FormSheet.Root>\n )\n}\n\nconst Reaction = ({\n reaction,\n onPress,\n}: {\n reaction: { value: ReactionCountResource['value']; emoji: string; mine: boolean | undefined }\n onPress: () => void\n}) => {\n const styles = useStyles()\n const reactionStyles = useReactionStyles({ mine: reaction.mine ? 1 : 0 })\n\n const { colors } = useTheme()\n const baseRippleColor = reaction.mine ? colors.interaction : colors.fillColorNeutral060\n const androidRippleColor = useCreateAndroidRippleColor({ color: baseRippleColor })\n\n return (\n <PlatformPressable\n key={reaction.value}\n style={[reactionStyles.reaction, styles.reaction]}\n android_ripple={{ color: androidRippleColor, borderless: false, foreground: true }}\n onPress={onPress}\n >\n <Text style={styles.reactionEmoji} allowFontScaling={false}>\n {REACTION_EMOJIS[reaction.value]}\n </Text>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n const fontScale = useFontScale({ maxFontSizeMultiplier: 1.3 })\n\n const btnBorderWidth = 1\n const baseSize = 46 * Math.max(1, fontScale)\n const reactionBtnSize = Platform.select({\n ios: baseSize,\n android: baseSize + btnBorderWidth * 2,\n })\n\n return StyleSheet.create({\n formSheetContent: {\n paddingTop: 16,\n },\n reactionList: {\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 16,\n paddingTop: 8,\n paddingBottom: 16,\n borderBottomColor: colors.borderColorDefaultBase,\n borderBottomWidth: 1,\n },\n reaction: {\n height: reactionBtnSize,\n width: reactionBtnSize,\n borderWidth: btnBorderWidth,\n borderRadius: 32,\n justifyContent: 'center',\n overflow: 'hidden',\n },\n reactionEmoji: {\n fontSize: 24,\n textAlign: 'center',\n },\n actions: {\n paddingTop: 4,\n },\n })\n}\n"],"mappings":";AAAA,SAASA,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,YAAY,EAAqBC,aAAa,QAAQ,0BAA0B;AACzF,SAASC,WAAW,EAAEC,cAAc,QAAQ,uBAAuB;AACnE,SAASC,KAAK,EAAEC,MAAM,QAAQ,QAAQ;AACtC,OAAOC,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,KAAK,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAChE,SAASC,IAAI,QAAQ,eAAe;AACpC,SAASC,iBAAiB,QAAQ,6CAA6C;AAC/E,OAAOC,SAAS,IAAIC,yBAAyB,QAAQ,oCAAoC;AACzF,SAASC,2BAA2B,EAAEC,YAAY,EAAEC,QAAQ,QAAQ,UAAU;AAC9E,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,uBAAuB,QAAQ,oCAAoC;AAC5E,SAASC,iBAAiB,EAAEC,WAAW,QAAQ,uBAAuB;AACtE,SAASC,wBAAwB,QAAQ,sCAAsC;AAG/E,SAASC,eAAe,QAAQ,UAAU;AAC1C,SACEC,4BAA4B,EAC5BC,2BAA2B,QACtB,+BAA+B;AACtC,SAASC,SAAS,EAAEC,MAAM,QAAQ,0BAA0B;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAE5D,OAAO,MAAMC,2BAA2B,GAAGlB,yBAAyB,CAAC;EACnEmB,mBAAmB,EAAE,CAAC,GAAG,CAAC;EAC1BC,WAAW,EAAE;AACf,CAAC,CAAC;AAWF,OAAO,SAAAC,qBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA8B;IAAAC;EAAA,IAAAH,EAAoC;EACvE;IAAAI,eAAA;IAAAC,UAAA;IAAAC,4BAAA;IAAAC,aAAA;IAAAC,sBAAA;IAAAC;EAAA,IAOIN,KAAK,CAAAO,MAAO;EAAA,IAAAC,EAAA;EAAA,IAAAV,CAAA,QAAAG,eAAA;IAGdO,EAAA;MAAAP;IAAkB,CAAC;IAAAH,CAAA,MAAAG,eAAA;IAAAH,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,IAAAW,EAAA;EAAA,IAAAX,CAAA,QAAAY,MAAA,CAAAC,GAAA;IACnBF,EAAA;MAAAG,cAAA,EAAkB;IAAM,CAAC;IAAAd,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EAF3B;IAAAe,QAAA;IAAAC;EAAA,IAA8BlC,uBAAuB,CACnD4B,EAAmB,EACnBC,EACF,CAAC;EAAA,IAAAM,EAAA;EAAA,IAAAjB,CAAA,QAAAI,UAAA,IAAAJ,CAAA,QAAAe,QAAA;IAAA,IAAAG,EAAA;IAAA,IAAAlB,CAAA,QAAAI,UAAA;MAC6Bc,EAAA,GAAAC,CAAA,IAAKA,CAAC,CAAAC,EAAG,KAAKhB,UAAU;MAAAJ,CAAA,MAAAI,UAAA;MAAAJ,CAAA,MAAAkB,EAAA;IAAA;MAAAA,EAAA,GAAAlB,CAAA;IAAA;IAAtCiB,EAAA,GAAAF,QAAQ,CAAAM,IAAK,CAACH,EAAwB,CAAC;IAAAlB,CAAA,MAAAI,UAAA;IAAAJ,CAAA,MAAAe,QAAA;IAAAf,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAAvD,MAAAsB,OAAA,GAAgBL,EAAuC;EAEvD,IAAI,CAACK,OAAO;IAAA,OAAS,IAAI;EAAA;EAMS,MAAAJ,EAAA,GAAAb,4BAAqC,IAArC,KAAqC;EAAA,IAAAkB,EAAA;EAAA,IAAAvB,CAAA,QAAAG,eAAA,IAAAH,CAAA,QAAAM,aAAA,IAAAN,CAAA,SAAAQ,eAAA,IAAAR,CAAA,SAAAsB,OAAA,IAAAtB,CAAA,SAAAgB,OAAA,IAAAhB,CAAA,SAAAO,sBAAA,IAAAP,CAAA,SAAAkB,EAAA;IAHrEK,EAAA,gBAAA/B,IAAA,CAACgC,2BAA2B;MACjBF,OAAO,EAAPA,OAAO;MACCnB,eAAe,EAAfA,eAAe;MACFE,4BAAqC,EAArCa,EAAqC;MAClDF,eAAO,EAAPA,OAAO;MACTV,aAAa,EAAbA,aAAa;MACPC,mBAAsB,EAAtBA,sBAAsB;MAC1BC,eAAe,EAAfA;IAAe,CACjC,CAAC;IAAAR,CAAA,MAAAG,eAAA;IAAAH,CAAA,MAAAM,aAAA;IAAAN,CAAA,OAAAQ,eAAA;IAAAR,CAAA,OAAAsB,OAAA;IAAAtB,CAAA,OAAAgB,OAAA;IAAAhB,CAAA,OAAAO,sBAAA;IAAAP,CAAA,OAAAkB,EAAA;IAAAlB,CAAA,OAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAAA,OARFuB,EAQE;AAAA;AAIN,SAAAC,4BAAAzB,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAqC;IAAAqB,OAAA;IAAAnB,eAAA;IAAAE,4BAAA;IAAAoB,eAAA;IAAAnB,aAAA;IAAAoB,mBAAA;IAAAlB;EAAA,IAAAT,EAgBpC;EACC,MAAA4B,UAAA,GAAmBhE,aAAa,CAAC,CAAC;EAClC,MAAAiE,SAAA,GAAkB/C,YAAY,CAAC,CAAC;EAChC,MAAAgD,WAAA,GAAoBhE,cAAc,CAAC,CAAC;EACpC,MAAAiE,MAAA,GAAeC,SAAS,CAAC,CAAC;EAC1B;IAAAC;EAAA,IAA2BhD,WAAW,CAAC,CAAC;EAAA,IAAA0B,EAAA;EAAA,IAAAV,CAAA,QAAAsB,OAAA,CAAAW,WAAA;IACnBvB,EAAA,GAAAY,OAAO,CAAAW,WAAY,CAAAZ,IAAK,CAACa,KAAgD,CAAC;IAAAlC,CAAA,MAAAsB,OAAA,CAAAW,WAAA;IAAAjC,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAA/F,MAAAmC,YAAA,GAAqBzB,EAA0E;EAC/F,MAAA0B,eAAA,GAAwB,CAAC,CAACD,YAAY;EAAA,IAAAxB,EAAA;EAAA,IAAAX,CAAA,QAAAsB,OAAA,CAAAe,cAAA;IAEtC,MAAAC,WAAA,GAAoBhB,OAAO,EAAAe,cAClB,CAAAE,MAA2B,CAA1BC,MACL,CAAC,CAAAC,GAA4B,CAA3BC,MAA0B,CAAC;IAEP/B,EAAA,GAAAgC,MAAM,CAAAC,OAAQ,CAAC1D,eAAe,CAAC,CAAAuD,GAAI,CAACxB,EAAA;MAAC,OAAA4B,KAAA,EAAAC,KAAA,IAAA7B,EAAc;MAAA,OACrE;QAAA4B,KAAA,EACEA,KAAK;QAAAC,KAAA;QAAAC,IAAA,EAENT,WAAW,EAAAU,QAAmD,CAAxCH,KAAuC;MACrE,CAAC;IAAA,CACF,CAAC;IAAA7C,CAAA,MAAAsB,OAAA,CAAAe,cAAA;IAAArC,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EANF,MAAAiD,kBAAA,GAA2BtC,EAMzB;EAAA,IAAAM,EAAA;EAAA,IAAAjB,CAAA,QAAAsB,OAAA,CAAAW,WAAA;IAEwBhB,EAAA,GAAAA,CAAA;MACxB,MAAAiC,cAAA,GAAuB5B,OAAO,EAAAW,WAAkB,CAAAZ,IAE/C,CADC8B,MACS,CAAC,EAAAC,SAAA;MAEZ,IAAIF,cAAc;QAAA,OAASA,cAAc;MAAA;MAAA,OAClC,EAAE;IAAA,CACV;IAAAlD,CAAA,MAAAsB,OAAA,CAAAW,WAAA;IAAAjC,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAPD,MAAAqD,iBAAA,GAA0BpC,EAOzB;EAAA,IAAAC,EAAA;EAAA,IAAAlB,CAAA,QAAAG,eAAA,IAAAH,CAAA,QAAAsB,OAAA,CAAAF,EAAA,IAAApB,CAAA,QAAAsB,OAAA,CAAAgC,WAAA,IAAAtD,CAAA,QAAA2B,UAAA,IAAA3B,CAAA,SAAA0B,mBAAA;IAEoCR,EAAA,GAAAA,CAAA;MACnCS,UAAU,CAAA4B,MAAO,CAAC,CAAC;MAEnBC,qBAAqB,CAAC;QACpB7B,UAAU,CAAA8B,QAAS,CAAC,mBAAmB,EAAE;UAAAtD,eAAA;UAAAuD,aAAA,EAExBpC,OAAO,CAAAgC,WAA0B,IAAVhC,OAAO,CAAAF,EAAG;UAAAb,sBAAA,EACxBmB;QAC1B,CAAC,CAAC;MAAA,CACH,CAAC;IAAA,CACH;IAAA1B,CAAA,MAAAG,eAAA;IAAAH,CAAA,MAAAsB,OAAA,CAAAF,EAAA;IAAApB,CAAA,MAAAsB,OAAA,CAAAgC,WAAA;IAAAtD,CAAA,MAAA2B,UAAA;IAAA3B,CAAA,OAAA0B,mBAAA;IAAA1B,CAAA,OAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAVD,MAAA2D,gBAAA,GAAyBzC,EAU8D;EAAA,IAAAK,EAAA;EAAA,IAAAvB,CAAA,SAAAqD,iBAAA,IAAArD,CAAA,SAAAsB,OAAA,CAAAsC,IAAA,IAAA5D,CAAA,SAAA2B,UAAA;IAE/DJ,EAAA,GAAAA,CAAA;MACtBlC,SAAS,CAAAwE,cAAe,CAACvC,OAAO,EAAAsC,IAA6B,IAAnBP,iBAAiB,CAAC,CAAO,IAA1C,EAA0C,CAAC;MACpE1B,UAAU,CAAA4B,MAAO,CAAC,CAAC;IAAA,CACpB;IAAAvD,CAAA,OAAAqD,iBAAA;IAAArD,CAAA,OAAAsB,OAAA,CAAAsC,IAAA;IAAA5D,CAAA,OAAA2B,UAAA;IAAA3B,CAAA,OAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAHD,MAAA8D,eAAA,GAAwBvC,EAGvB;EAAA,IAAAwC,EAAA;EAAA,IAAA/D,CAAA,SAAAG,eAAA,IAAAH,CAAA,SAAAsB,OAAA,CAAAF,EAAA,IAAApB,CAAA,SAAA2B,UAAA;IAEqCoC,EAAA,GAAAA,CAAA;MACpCzE,MAAM,CAAA0E,WAAY,CAAC,CAAC;MACpBrC,UAAU,CAAA8B,QAAS,CAAC,eAAe,EAAE;QAAAtD,eAAA;QAAAC,UAAA,EAEvBkB,OAAO,CAAAF;MACrB,CAAC,CAAC;IAAA,CACH;IAAApB,CAAA,OAAAG,eAAA;IAAAH,CAAA,OAAAsB,OAAA,CAAAF,EAAA;IAAApB,CAAA,OAAA2B,UAAA;IAAA3B,CAAA,OAAA+D,EAAA;EAAA;IAAAA,EAAA,GAAA/D,CAAA;EAAA;EAND,MAAAiE,iBAAA,GAA0BF,EAMmB;EAAA,IAAAG,EAAA;EAAA,IAAAlE,CAAA,SAAAG,eAAA,IAAAH,CAAA,SAAAsB,OAAA;IAEwB4C,EAAA;MAAA/D,eAAA;MAAAmB;IAGrE,CAAC;IAAAtB,CAAA,OAAAG,eAAA;IAAAH,CAAA,OAAAsB,OAAA;IAAAtB,CAAA,OAAAkE,EAAA;EAAA;IAAAA,EAAA,GAAAlE,CAAA;EAAA;EAHD;IAAAmE,oBAAA;IAAAC;EAAA,IAA4CnF,wBAAwB,CAACiF,EAGpE,CAAC;EAAA,IAAAG,EAAA;EAAA,IAAArE,CAAA,SAAA4B,SAAA,IAAA5B,CAAA,SAAAG,eAAA,IAAAH,CAAA,SAAAsB,OAAA,CAAAF,EAAA;IAEgCiD,EAAA,GAAAA,CAAA;MAChC,MAAAC,GAAA,GAAY,qBAAqBnE,eAAe,aAAamB,OAAO,CAAAF,EAAG,GAAG;MAAA,OAEnEQ,SAAS,CAAA2C,IAAK,CAAAC,MAAO,CAAC;QAAAF;MAAM,CAAC,CAAC;IAAA,CACtC;IAAAtE,CAAA,OAAA4B,SAAA;IAAA5B,CAAA,OAAAG,eAAA;IAAAH,CAAA,OAAAsB,OAAA,CAAAF,EAAA;IAAApB,CAAA,OAAAqE,EAAA;EAAA;IAAAA,EAAA,GAAArE,CAAA;EAAA;EAJD,MAAAyE,aAAA,GAAsBJ,EAIsB;EAAA,IAAAK,EAAA;EAAA,IAAA1E,CAAA,SAAAsB,OAAA,CAAAF,EAAA;IAI7BsD,EAAA,IAAC,eAAe,EAAEpD,OAAO,CAAAF,EAAG,CAAC;IAAApB,CAAA,OAAAsB,OAAA,CAAAF,EAAA;IAAApB,CAAA,OAAA0E,EAAA;EAAA;IAAAA,EAAA,GAAA1E,CAAA;EAAA;EAAA,IAAA2E,GAAA;EAAA,IAAA3E,CAAA,SAAAG,eAAA,IAAAH,CAAA,SAAAsB,OAAA,IAAAtB,CAAA,SAAA6B,WAAA,IAAA7B,CAAA,SAAAyB,eAAA;IAC/BkD,GAAA,GAAAA,CAAA;MACTxF,4BAA4B,CAAC0C,WAAW,EAAE1B,eAAe,EAAEmB,OAAO,CAAC;MACnE,IAAIA,OAAO,CAAAgC,WAAY;QACrBzB,WAAW,CAAA+C,iBAAkB,CAAC;UAAAC,QAAA,EAClBzF,2BAA2B,CAACe,eAAe,EAAEmB,OAAO,CAAAgC,WAAY;QAC5E,CAAC,CAAC;MAAA;MAEJ7B,eAAe,CAAC,CAAC;MACjBnC,MAAM,CAAAwF,mBAAoB,CAAC,CAAC;IAAA,CAC7B;IAAA9E,CAAA,OAAAG,eAAA;IAAAH,CAAA,OAAAsB,OAAA;IAAAtB,CAAA,OAAA6B,WAAA;IAAA7B,CAAA,OAAAyB,eAAA;IAAAzB,CAAA,OAAA2E,GAAA;EAAA;IAAAA,GAAA,GAAA3E,CAAA;EAAA;EAAA,IAAA+E,GAAA;EAAA,IAAA/E,CAAA,SAAAyE,aAAA,IAAAzE,CAAA,SAAA2E,GAAA,IAAA3E,CAAA,SAAA0E,EAAA;IAZiDK,GAAA;MAAAC,UAAA,EACtCP,aAAa;MAAAQ,WAAA,EACZP,EAA6B;MAAAQ,SAAA,EAC/BP,GASV;MAAAQ,OAAA,EACQC;IAGX,CAAC;IAAApF,CAAA,OAAAyE,aAAA;IAAAzE,CAAA,OAAA2E,GAAA;IAAA3E,CAAA,OAAA0E,EAAA;IAAA1E,CAAA,OAAA+E,GAAA;EAAA;IAAAA,GAAA,GAAA/E,CAAA;EAAA;EAhBD;IAAAqF,MAAA,EAAAC;EAAA,IAAwC1H,WAAW,CAACmH,GAgBnD,CAAC;EAAA,IAAAQ,GAAA;EAAA,IAAAvF,CAAA,SAAAsF,mBAAA,IAAAtF,CAAA,SAAA2B,UAAA;IAEsC4D,GAAA,GAAAA,CAAA;MACtCrH,KAAK,CAAAsH,KAAM,CAAC,gBAAgB,EAAE,2DAA2D,EAAE,CACzF;QAAA5B,IAAA,EAAQ,QAAQ;QAAA6B,KAAA,EAAS;MAAS,CAAC,EACnC;QAAA7B,IAAA,EACQ,QAAQ;QAAA6B,KAAA,EACP,aAAa;QAAAC,OAAA,EACXA,CAAA;UACPJ,mBAAmB,CAAC,CAAC;UACrB3D,UAAU,CAAA4B,MAAO,CAAC,CAAC;QAAA;MAEvB,CAAC,CACF,CAAC;IAAA,CACH;IAAAvD,CAAA,OAAAsF,mBAAA;IAAAtF,CAAA,OAAA2B,UAAA;IAAA3B,CAAA,OAAAuF,GAAA;EAAA;IAAAA,GAAA,GAAAvF,CAAA;EAAA;EAZD,MAAA2F,mBAAA,GAA4BJ,GAYS;EAAA,IAAAK,GAAA;EAAA,IAAA5F,CAAA,SAAAG,eAAA,IAAAH,CAAA,SAAAM,aAAA,IAAAN,CAAA,SAAAsB,OAAA,CAAAF,EAAA,IAAApB,CAAA,SAAA2B,UAAA;IAEDiE,GAAA,GAAAA,CAAA;MAClC,MAAAC,KAAA,GAAclE,UAAU,CAAAmE,QAAa,GAAD,CAAC;MACrC,MAAAC,eAAA,GAAwBzF,aAAa,GAAb,mBAAoD,GAApD,cAAoD;MAC5E,MAAA0F,WAAA,GAAoBH,KAAK,EAAAI,MAAc,EAAA5E,IAAiC,CAAhC6E,CAAA,IAAKA,CAAC,CAAAC,IAAK,KAAKJ,eAAe,CAAC;MACxE,MAAAtF,MAAA,GAAe1C,MAAM,CACnB;QAAA,IACMiI,WAAW,EAAAvF,MAAc,IAAzB,CAAwB,CAAC;QAAAN,eAAA;QAAAiG,kBAAA,EAET9E,OAAO,CAAAF;MAC7B,CAAC,EACDtD,KACF,CAAC;MACD6D,UAAU,CAAA0E,QAAS,CAAC3I,YAAY,CAAA4I,KAAM,CAACP,eAAe,EAAEtF,MAAM,CAAC,CAAC;IAAA,CACjE;IAAAT,CAAA,OAAAG,eAAA;IAAAH,CAAA,OAAAM,aAAA;IAAAN,CAAA,OAAAsB,OAAA,CAAAF,EAAA;IAAApB,CAAA,OAAA2B,UAAA;IAAA3B,CAAA,OAAA4F,GAAA;EAAA;IAAAA,GAAA,GAAA5F,CAAA;EAAA;EAbD,MAAAuG,eAAA,GAAwBX,GAaoC;EAAA,IAAAY,GAAA;EAAA,IAAAxG,CAAA,SAAAG,eAAA,IAAAH,CAAA,SAAAsB,OAAA,CAAAF,EAAA,IAAApB,CAAA,SAAA2B,UAAA;IAEZ6E,GAAA,GAAAA,CAAA;MAC9ClH,MAAM,CAAA0E,WAAY,CAAC,CAAC;MACpB,MAAAyC,QAAA,GAAe1I,MAAM,CACnB;QAAAoC,eAAA;QAAAC,UAAA,EAEckB,OAAO,CAAAF;MACrB,CAAC,EACDtD,KACF,CAAC;MACD6D,UAAU,CAAA0E,QAAS,CAAC3I,YAAY,CAAA4I,KAAM,CAAC,qBAAqB,EAAE7F,QAAM,CAAC,CAAC;IAAA,CACvE;IAAAT,CAAA,OAAAG,eAAA;IAAAH,CAAA,OAAAsB,OAAA,CAAAF,EAAA;IAAApB,CAAA,OAAA2B,UAAA;IAAA3B,CAAA,OAAAwG,GAAA;EAAA;IAAAA,GAAA,GAAAxG,CAAA;EAAA;EAVD,MAAA0G,2BAAA,GAAoCF,GAUS;EAAA,IAAAG,GAAA;EAAA,IAAA3G,CAAA,SAAA4B,SAAA,IAAA5B,CAAA,SAAAG,eAAA,IAAAH,CAAA,SAAAmC,YAAA,EAAAf,EAAA,IAAApB,CAAA,SAAAsB,OAAA,CAAAF,EAAA;IAEPuF,GAAA,GAAAA,CAAA;MACpC,MAAAC,KAAA,GAAY,qBAAqBzG,eAAe,aAAamB,OAAO,CAAAF,EAAG,uBAAuB;MAC9F,MAAAyF,IAAA,GAAa;QAAAA,IAAA,EACL;UAAAC,IAAA,EAAQ,cAAc;UAAAC,UAAA,EAAc;YAAAC,gBAAA,EAAoB7E,YAAY,EAAAf;UAAK;QAAE;MACnF,CAAC;MAAA,OAEMQ,SAAS,CAAA2C,IAAK,CAAA0C,IAAK,CAAC;QAAA3C,GAAA,EAAEA,KAAG;QAAAuC;MAAO,CAAC,CAAC;IAAA,CAC1C;IAAA7G,CAAA,OAAA4B,SAAA;IAAA5B,CAAA,OAAAG,eAAA;IAAAH,CAAA,OAAAmC,YAAA,EAAAf,EAAA;IAAApB,CAAA,OAAAsB,OAAA,CAAAF,EAAA;IAAApB,CAAA,OAAA2G,GAAA;EAAA;IAAAA,GAAA,GAAA3G,CAAA;EAAA;EAPD,MAAAkH,iBAAA,GAA0BP,GAOgC;EAAA,IAAAQ,GAAA;EAAA,IAAAnH,CAAA,SAAA2B,UAAA,IAAA3B,CAAA,SAAAyB,eAAA;IAI7C0F,GAAA,GAAAA,CAAA;MACT1F,eAAe,CAAC,CAAC;MACjBnC,MAAM,CAAAwF,mBAAoB,CAAC,CAAC;MAC5BnD,UAAU,CAAA4B,MAAO,CAAC,CAAC;IAAA,CACpB;IAAAvD,CAAA,OAAA2B,UAAA;IAAA3B,CAAA,OAAAyB,eAAA;IAAAzB,CAAA,OAAAmH,GAAA;EAAA;IAAAA,GAAA,GAAAnH,CAAA;EAAA;EAAA,IAAAoH,GAAA;EAAA,IAAApH,CAAA,SAAAkH,iBAAA,IAAAlH,CAAA,SAAAmH,GAAA;IANqDC,GAAA;MAAApC,UAAA,EAC1CkC,iBAAiB;MAAAhC,SAAA,EAClBiC,GAIV;MAAAhC,OAAA,EACQkC;IAGX,CAAC;IAAArH,CAAA,OAAAkH,iBAAA;IAAAlH,CAAA,OAAAmH,GAAA;IAAAnH,CAAA,OAAAoH,GAAA;EAAA;IAAAA,GAAA,GAAApH,CAAA;EAAA;EAVD;IAAAqF,MAAA,EAAAiC;EAAA,IAA4C1J,WAAW,CAACwJ,GAUvD,CAAC;EAAA,IAAAG,GAAA;EAAA,IAAAvH,CAAA,SAAAsH,uBAAA;IAEiDC,GAAA,GAAAA,CAAA;MACjDrJ,KAAK,CAAAsH,KAAM,CAAC,sBAAsB,EAAE,wDAAwD,EAAE,CAC5F;QAAA5B,IAAA,EAAQ,QAAQ;QAAA6B,KAAA,EAAS;MAAS,CAAC,EACnC;QAAA7B,IAAA,EAAQ,QAAQ;QAAA6B,KAAA,EAAS,aAAa;QAAAC,OAAA,EAAWA,CAAA,KAAM4B,uBAAuB,CAAC;MAAE,CAAC,CACnF,CAAC;IAAA,CACH;IAAAtH,CAAA,OAAAsH,uBAAA;IAAAtH,CAAA,OAAAuH,GAAA;EAAA;IAAAA,GAAA,GAAAvH,CAAA;EAAA;EALD,MAAAwH,8BAAA,GAAuCD,GAKV;EAAA,IAAAE,GAAA;EAAA,IAAAzH,CAAA,SAAAgC,cAAA,IAAAhC,CAAA,SAAAsB,OAAA,CAAAyB,IAAA;IAG3B0E,GAAA,IAACnG,OAAO,EAAAyB,IAA6D,IAAnDf,cAAc,CAACjD,iBAAiB,CAAA2I,iBAAkB,CAAC;IAAA1H,CAAA,OAAAgC,cAAA;IAAAhC,CAAA,OAAAsB,OAAA,CAAAyB,IAAA;IAAA/C,CAAA,OAAAyH,GAAA;EAAA;IAAAA,GAAA,GAAAzH,CAAA;EAAA;EADvE,MAAA2H,uBAAA,GACEF,GAAqE;EAG9C,MAAAG,GAAA,GAAA9F,MAAM,CAAA+F,gBAAiB;EAC/B,MAAAC,GAAA,GAAAhG,MAAM,CAAAiG,YAAa;EAAA,IAAAC,GAAA;EAAA,IAAAhI,CAAA,SAAAiD,kBAAA,IAAAjD,CAAA,SAAAmE,oBAAA,IAAAnE,CAAA,SAAA2B,UAAA;IAC7BqG,GAAA,GAAA/E,kBAAkB,CAAAR,GAAI,CAAC,CAAAwF,UAAA,EAAAC,KAAA,kBACtB1I,IAAA,CAAC2I,QAAQ;MAEGC,QAAQ,EAARA,UAAQ;MACT1C,OAOR,EAPQA,CAAA;QACPpG,MAAM,CAAA0E,WAAY,CAAC,CAAC;QACpBG,oBAAoB,CAAC;UAAAtB,KAAA,EACZuF,UAAQ,CAAAvF,KAAM;UAAAE,IAAA,EACfqF,UAAQ,CAAArF;QAChB,CAAC,CAAC;QACFpB,UAAU,CAAA4B,MAAO,CAAC,CAAC;MAAA;IACpB,GATI2E,KAUN,CACF,CAAC;IAAAlI,CAAA,OAAAiD,kBAAA;IAAAjD,CAAA,OAAAmE,oBAAA;IAAAnE,CAAA,OAAA2B,UAAA;IAAA3B,CAAA,OAAAgI,GAAA;EAAA;IAAAA,GAAA,GAAAhI,CAAA;EAAA;EAAA,IAAAqI,GAAA;EAAA,IAAArI,CAAA,SAAA8B,MAAA,CAAAiG,YAAA,IAAA/H,CAAA,SAAAgI,GAAA;IAdJK,GAAA,gBAAA7I,IAAA,CAACnB,IAAI;MAAQoH,KAAmB,EAAnBqC,GAAmB;MAAAQ,QAAA,EAC7BN;IAaC,CACE,CAAC;IAAAhI,CAAA,OAAA8B,MAAA,CAAAiG,YAAA;IAAA/H,CAAA,OAAAgI,GAAA;IAAAhI,CAAA,OAAAqI,GAAA;EAAA;IAAAA,GAAA,GAAArI,CAAA;EAAA;EAAA,IAAAuI,GAAA;EAAA,IAAAvI,CAAA,SAAAK,4BAAA,IAAAL,CAAA,SAAA8D,eAAA,IAAA9D,CAAA,SAAA2F,mBAAA,IAAA3F,CAAA,SAAAuG,eAAA,IAAAvG,CAAA,SAAAwH,8BAAA,IAAAxH,CAAA,SAAA2D,gBAAA,IAAA3D,CAAA,SAAAiE,iBAAA,IAAAjE,CAAA,SAAA0G,2BAAA,IAAA1G,CAAA,SAAAoC,eAAA,IAAApC,CAAA,SAAAM,aAAA,IAAAN,CAAA,SAAAoE,SAAA,IAAApE,CAAA,SAAAQ,eAAA,IAAAR,CAAA,SAAAsB,OAAA,CAAAyB,IAAA,IAAA/C,CAAA,SAAA2H,uBAAA,IAAA3H,CAAA,SAAA8B,MAAA,CAAA0G,OAAA;IACND,GAAA,IAAC/H,eA4DD,iBA5DAd,KAAA,CACErB,IAAI;MAAQoH,KAAc,EAAd3D,MAAM,CAAA0G,OAAQ;MAAAF,QAAA,GACxB,CAAChI,aAQD,iBARAd,IAAA,CAAAhB,SAAA,CAAAiK,MAAA;QAEY9E,OAAgB,EAAhBA,gBAAgB;QACnB+E,KAAkB,EAAlB,kBAAkB;QACfC,QAAoB,EAApB,oBAAoB;QACXC,iBAA+B,EAA/B,+BAA+B;QAC/BC,iBAAM,EAAN;MAAM,CAE5B,CAAC,eACDrJ,IAAA,CAAAhB,SAAA,CAAAiK,MAAA;QACW3E,OAAe,EAAfA,eAAe;QAClB4E,KAAW,EAAX,WAAW;QACRC,QAAmB,EAAnB,mBAAmB;QACVC,iBAAoC,EAApC;MAAoC,CACvD,CAAC,EACDjB,uBAOA,iBAPAnI,IAAA,CAAAhB,SAAA,CAAAiK,MAAA;QAEYxE,OAAiB,EAAjBA,iBAAiB;QACpByE,KAAgB,EAAhB,gBAAgB;QACbC,QAAqB,EAArB,qBAAqB;QACZC,iBAAqC,EAArC;MAAqC,CAE3D,CAAC,EACAtH,OAAO,EAAAyB,IAOP,iBAPAvD,IAAA,CAAAhB,SAAA,CAAAiK,MAAA;QAEY/C,OAAuB,EAAvBA,CAAA,KAAMa,eAAe,CAAC,CAAC;QAC1BmC,KAAc,EAAd,cAAc;QACXC,QAAiB,EAAjB,iBAAiB;QACRC,iBAAgD,EAAhD;MAAgD,CAEtE,CAAC,EACAtH,OAAO,EAAAyB,IAOP,iBAPAvD,IAAA,CAAAhB,SAAA,CAAAiK,MAAA;QAEY/C,OAAmC,EAAnCA,CAAA,KAAMgB,2BAA2B,CAAC,CAAC;QACtCgC,KAAoB,EAApB,oBAAoB;QACjBC,QAAqB,EAArB,qBAAqB;QACZC,iBAA4D,EAA5D;MAA4D,CAElF,CAAC,EACAtH,OAAO,EAAAyB,IAAyB,IAAhCX,eAOA,iBAPA5C,IAAA,CAAAhB,SAAA,CAAAiK,MAAA;QAEY/C,OAAsC,EAAtCA,CAAA,KAAM8B,8BAA8B,CAAC,CAAC;QACzCkB,KAAqB,EAArB,qBAAqB;QAClBC,QAAoB,EAApB,oBAAoB;QACXC,iBAAoD,EAApD;MAAoD,CAE1E,CAAC,EACA,CAACtH,OAAO,EAAAyB,IAAsC,IAA7C1C,4BASD,kBATAb,IAAA,CAAAhB,SAAA,CAAAiK,MAAA;QAEY/C,OAA2B,EAA3BA,CAAA,KAAMC,mBAAmB,CAAC,CAAC;QAC9B+C,KAAgB,EAAhB,gBAAgB;QACbC,QAAkB,EAAlB,kBAAkB;QAChBG,UAAQ,EAAR,QAAQ;QACT1E,QAAS,EAATA,SAAS;QACDwE,iBAAgE,EAAhE;MAAgE,CAEtF,CAAC;IAAA,CAEL,CAAC;IAAA5I,CAAA,OAAAK,4BAAA;IAAAL,CAAA,OAAA8D,eAAA;IAAA9D,CAAA,OAAA2F,mBAAA;IAAA3F,CAAA,OAAAuG,eAAA;IAAAvG,CAAA,OAAAwH,8BAAA;IAAAxH,CAAA,OAAA2D,gBAAA;IAAA3D,CAAA,OAAAiE,iBAAA;IAAAjE,CAAA,OAAA0G,2BAAA;IAAA1G,CAAA,OAAAoC,eAAA;IAAApC,CAAA,OAAAM,aAAA;IAAAN,CAAA,OAAAoE,SAAA;IAAApE,CAAA,OAAAQ,eAAA;IAAAR,CAAA,OAAAsB,OAAA,CAAAyB,IAAA;IAAA/C,CAAA,OAAA2H,uBAAA;IAAA3H,CAAA,OAAA8B,MAAA,CAAA0G,OAAA;IAAAxI,CAAA,OAAAuI,GAAA;EAAA;IAAAA,GAAA,GAAAvI,CAAA;EAAA;EAAA,IAAA+I,GAAA;EAAA,IAAA/I,CAAA,SAAA8B,MAAA,CAAA+F,gBAAA,IAAA7H,CAAA,SAAAqI,GAAA,IAAArI,CAAA,SAAAuI,GAAA;IA7EHQ,GAAA,gBAAArJ,KAAA,CAAAlB,SAAA,CAAAwK,IAAA;MAAuBvD,KAAuB,EAAvBmC,GAAuB;MAAAU,QAAA,GAC5CD,GAeO,EACNE,GA4DA;IAAA,CACa,CAAC;IAAAvI,CAAA,OAAA8B,MAAA,CAAA+F,gBAAA;IAAA7H,CAAA,OAAAqI,GAAA;IAAArI,CAAA,OAAAuI,GAAA;IAAAvI,CAAA,OAAA+I,GAAA;EAAA;IAAAA,GAAA,GAAA/I,CAAA;EAAA;EAAA,OA9EjB+I,GA8EiB;AAAA;AA3PrB,SAAA1B,OAAA;EA8JMnJ,KAAK,CAAAsH,KAAM,CAAC,MAAM,EAAE,yDAAyD,CAAC;AAAA;AA9JpF,SAAAJ,OAAA;EAgGMlH,KAAK,CAAAsH,KAAM,CAAC,MAAM,EAAE,0DAA0D,CAAC;AAAA;AAhGrF,SAAArC,OAAA8F,YAAA;EAAA,OAuCoBC,YAAU,CAAApC,IAAK,KAAK,OAAO;AAAA;AAvC/C,SAAApE,OAAAyG,UAAA;EAAA,OA2BqBf,UAAQ,CAAAvF,KAAM;AAAA;AA3BnC,SAAAL,OAAA4F,QAAA;EAAA,OA0BwBA,QAAQ,CAAArF,IAAK;AAAA;AA1BrC,SAAAb,MAAAgH,UAAA;EAAA,OAsB8DA,UAAU,CAAApC,IAAK,KAAK,cAAc;AAAA;AAyOhG,MAAMqB,QAAQ,GAAGpI,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAmI,QAAA;IAAA1C;EAAA,IAAA3F,EAMjB;EACC,MAAA+B,MAAA,GAAeC,SAAS,CAAC,CAAC;EACuB,MAAArB,EAAA,GAAA0H,QAAQ,CAAArF,IAAa,GAArB,CAAqB,GAArB,CAAqB;EAAA,IAAApC,EAAA;EAAA,IAAAX,CAAA,QAAAU,EAAA;IAA7BC,EAAA;MAAAoC,IAAA,EAAQrC;IAAsB,CAAC;IAAAV,CAAA,MAAAU,EAAA;IAAAV,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EAAxE,MAAAoJ,cAAA,GAAuB7K,iBAAiB,CAACoC,EAA+B,CAAC;EAEzE;IAAA0I;EAAA,IAAmBzK,QAAQ,CAAC,CAAC;EAC7B,MAAA0K,eAAA,GAAwBlB,QAAQ,CAAArF,IAAuD,GAA/CsG,MAAM,CAAAE,WAAyC,GAA1BF,MAAM,CAAAG,mBAAoB;EAAA,IAAAvI,EAAA;EAAA,IAAAjB,CAAA,QAAAsJ,eAAA;IAChCrI,EAAA;MAAAwI,KAAA,EAASH;IAAgB,CAAC;IAAAtJ,CAAA,MAAAsJ,eAAA;IAAAtJ,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAAjF,MAAA0J,kBAAA,GAA2BhL,2BAA2B,CAACuC,EAA0B,CAAC;EAAA,IAAAC,EAAA;EAAA,IAAAlB,CAAA,QAAAoJ,cAAA,CAAAhB,QAAA,IAAApI,CAAA,QAAA8B,MAAA,CAAAsG,QAAA;IAKvElH,EAAA,IAACkI,cAAc,CAAAhB,QAAS,EAAEtG,MAAM,CAAAsG,QAAS,CAAC;IAAApI,CAAA,MAAAoJ,cAAA,CAAAhB,QAAA;IAAApI,CAAA,MAAA8B,MAAA,CAAAsG,QAAA;IAAApI,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAAA,IAAAuB,EAAA;EAAA,IAAAvB,CAAA,QAAA0J,kBAAA;IACjCnI,EAAA;MAAAkI,KAAA,EAASC,kBAAkB;MAAAC,UAAA,EAAc,KAAK;MAAAC,UAAA,EAAc;IAAK,CAAC;IAAA5J,CAAA,MAAA0J,kBAAA;IAAA1J,CAAA,MAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAI/E,MAAA+D,EAAA,GAAA7E,eAAe,CAACkJ,QAAQ,CAAAvF,KAAM,CAAC;EAAA,IAAAqB,EAAA;EAAA,IAAAlE,CAAA,QAAA8B,MAAA,CAAA+H,aAAA,IAAA7J,CAAA,SAAA+D,EAAA;IADlCG,EAAA,gBAAA1E,IAAA,CAAClB,IAAI;MAAQmH,KAAoB,EAApB3D,MAAM,CAAA+H,aAAc;MAAoBC,gBAAK,EAAL,KAAK;MAAAxB,QAAA,EACvDvE;IAA+B,CAC5B,CAAC;IAAA/D,CAAA,MAAA8B,MAAA,CAAA+H,aAAA;IAAA7J,CAAA,OAAA+D,EAAA;IAAA/D,CAAA,OAAAkE,EAAA;EAAA;IAAAA,EAAA,GAAAlE,CAAA;EAAA;EAAA,IAAAqE,EAAA;EAAA,IAAArE,CAAA,SAAA0F,OAAA,IAAA1F,CAAA,SAAAoI,QAAA,CAAAvF,KAAA,IAAA7C,CAAA,SAAAkB,EAAA,IAAAlB,CAAA,SAAAuB,EAAA,IAAAvB,CAAA,SAAAkE,EAAA;IARTG,EAAA,gBAAA7E,IAAA,CAAC/B,iBAAiB;MAETgI,KAA0C,EAA1CvE,EAA0C;MACjC6I,cAAkE,EAAlExI,EAAkE;MACzEmE,OAAO,EAAPA,OAAO;MAAA4C,QAAA,EAEhBpE;IAEO,GAPFkE,QAAQ,CAAAvF,KAQI,CAAC;IAAA7C,CAAA,OAAA0F,OAAA;IAAA1F,CAAA,OAAAoI,QAAA,CAAAvF,KAAA;IAAA7C,CAAA,OAAAkB,EAAA;IAAAlB,CAAA,OAAAuB,EAAA;IAAAvB,CAAA,OAAAkE,EAAA;IAAAlE,CAAA,OAAAqE,EAAA;EAAA;IAAAA,EAAA,GAAArE,CAAA;EAAA;EAAA,OATpBqE,EASoB;AAAA,CAEvB;AAED,MAAMtC,SAAS,GAAGA,CAAA;EAAA,MAAA/B,CAAA,GAAAC,EAAA;EAChB;IAAAoJ;EAAA,IAAmBzK,QAAQ,CAAC,CAAC;EAAA,IAAAmB,EAAA;EAAA,IAAAC,CAAA,QAAAY,MAAA,CAAAC,GAAA;IACEd,EAAA;MAAAiK,qBAAA,EAAyB;IAAI,CAAC;IAAAhK,CAAA,MAAAD,EAAA;EAAA;IAAAA,EAAA,GAAAC,CAAA;EAAA;EAA7D,MAAAiK,SAAA,GAAkBtL,YAAY,CAACoB,EAA8B,CAAC;EAG9D,MAAAmK,QAAA,GAAiB,EAAE,GAAGC,IAAI,CAAAC,GAAI,CAAC,CAAC,EAAEH,SAAS,CAAC;EAAA,IAAAvJ,EAAA;EAAA,IAAAV,CAAA,QAAAkK,QAAA,IAAAlK,CAAA,QAAAqJ,MAAA,CAAAgB,sBAAA;IAC5C,MAAAC,eAAA,GAAwBnM,QAAQ,CAAAoM,MAAO,CAAC;MAAAC,GAAA,EACjCN,QAAQ;MAAAO,OAAA,EACJP,QAAQ,GAAG;IACtB,CAAC,CAAC;IAEKxJ,EAAA,GAAAtC,UAAU,CAAAsM,MAAO,CAAC;MAAA7C,gBAAA,EACL;QAAA8C,UAAA,EACJ;MACd,CAAC;MAAA5C,YAAA,EACa;QAAA6C,aAAA,EACG,KAAK;QAAAC,cAAA,EACJ,QAAQ;QAAAC,UAAA,EACZ,QAAQ;QAAAC,GAAA,EACf,EAAE;QAAAJ,UAAA,EACK,CAAC;QAAAK,aAAA,EACE,EAAE;QAAAC,iBAAA,EACE5B,MAAM,CAAAgB,sBAAuB;QAAAa,iBAAA,EAC7B;MACrB,CAAC;MAAA9C,QAAA,EACS;QAAA+C,MAAA,EACAb,eAAe;QAAAc,KAAA,EAChBd,eAAe;QAAAe,WAAA,EAvBH,CAAC;QAAAC,YAAA,EAyBN,EAAE;QAAAT,cAAA,EACA,QAAQ;QAAAU,QAAA,EACd;MACZ,CAAC;MAAA1B,aAAA,EACc;QAAA2B,QAAA,EACH,EAAE;QAAAC,SAAA,EACD;MACb,CAAC;MAAAjD,OAAA,EACQ;QAAAmC,UAAA,EACK;MACd;IACF,CAAC,CAAC;IAAA3K,CAAA,MAAAkK,QAAA;IAAAlK,CAAA,MAAAqJ,MAAA,CAAAgB,sBAAA;IAAArK,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,OA7BKU,EA6BL;AAAA,CACH","ignoreList":[]}
1
+ {"version":3,"file":"message_actions_screen.js","names":["PlatformPressable","StackActions","useNavigation","useMutation","useQueryClient","isNil","omitBy","React","useCallback","Alert","Platform","StyleSheet","View","Text","useReactionStyles","FormSheet","getFormSheetScreenOptions","useCreateAndroidRippleColor","useFontScale","useTheme","useApiClient","useConversationMessages","availableFeatures","useFeatures","useMessageReactionToggle","REACTION_EMOJIS","applyMessageDeletionToCaches","getThreadedMessagesQueryKey","Clipboard","Haptic","jsx","_jsx","jsxs","_jsxs","MessageActionsScreenOptions","sheetAllowedDetents","headerTitle","MessageActionsScreen","t0","$","_c","route","conversation_id","message_id","canDeleteNonAuthoredMessages","inReplyScreen","reply_root_author_name","isSystemMessage","params","t1","t2","Symbol","for","refetchOnMount","messages","refetch","t3","t4","m","id","find","message","t5","MessageActionsScreenContent","refetchMessages","replyRootAuthorName","navigation","apiClient","queryClient","styles","useStyles","featureEnabled","attachments","_temp","expandedLink","hasExpandedLink","reactionCounts","myReactions","filter","_temp2","map","_temp3","Object","entries","value","emoji","mine","includes","availableReactions","giphyTitleLink","_temp4","titleLink","attachmentForCopy","replyRootId","goBack","requestAnimationFrame","navigate","reply_root_id","handleReplyPress","text","textToCopy","setStringAsync","notificationSuccess","handleCopyPress","t6","impactLight","handleReportPress","t7","handleReactionToggle","isPending","t8","url","chat","delete","deleteMessage","t9","t10","invalidateQueries","queryKey","t11","mutationFn","mutationKey","onSuccess","onError","_temp5","mutate","handleDeleteMessage","t12","alert","style","onPress","handleDeleteConfirm","t13","state","getState","targetRouteName","targetRoute","routes","r","name","editing_message_id","dispatch","popTo","handleEditPress","t14","params_0","handleViewReadReceiptsPress","t15","url_0","data","type","attributes","expanded_link_id","post","removeLinkPreview","t16","t17","_temp6","handleRemoveLinkPreview","t18","handleRemoveLinkPreviewConfirm","t19","message_reporting","showReportMessageAction","t20","formSheetContent","t21","reactionList","t22","reaction_1","index","Reaction","reaction","t23","children","t24","actions","Action","title","iconName","accessibilityHint","accessibilityRole","appearance","t25","Root","attachment_0","attachment","reaction_0","reactionStyles","colors","baseRippleColor","interaction","fillColorNeutral060","color","androidRippleColor","borderless","foreground","reactionEmoji","allowFontScaling","android_ripple","maxFontSizeMultiplier","fontScale","baseSize","Math","max","borderColorDefaultBase","reactionBtnSize","select","ios","android","create","paddingTop","flexDirection","justifyContent","alignItems","gap","paddingBottom","borderBottomColor","borderBottomWidth","height","width","borderWidth","borderRadius","overflow","fontSize","textAlign"],"sources":["../../src/screens/message_actions_screen.tsx"],"sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StackActions, StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { isNil, omitBy } from 'lodash'\nimport React, { useCallback } from 'react'\nimport { Alert, Platform, StyleSheet, View } from 'react-native'\nimport { Text } from '../components'\nimport { useReactionStyles } from '../components/conversation/message_reaction'\nimport FormSheet, { getFormSheetScreenOptions } from '../components/primitive/form_sheet'\nimport { useCreateAndroidRippleColor, useFontScale, useTheme } from '../hooks'\nimport { useApiClient } from '../hooks/use_api_client'\nimport { useConversationMessages } from '../hooks/use_conversation_messages'\nimport { availableFeatures, useFeatures } from '../hooks/use_features'\nimport { useMessageReactionToggle } from '../hooks/use_message_reaction_toggle'\nimport { MessageResource } from '../types'\nimport { ReactionCountResource } from '../types/resources/reaction'\nimport { REACTION_EMOJIS } from '../utils'\nimport {\n applyMessageDeletionToCaches,\n getThreadedMessagesQueryKey,\n} from '../utils/cache/messages_cache'\nimport { Clipboard, Haptic } from '../utils/native_adapters'\n\nexport const MessageActionsScreenOptions = getFormSheetScreenOptions({\n sheetAllowedDetents: [0.5],\n headerTitle: 'Message actions',\n})\n\nexport type MessageActionsScreenProps = StaticScreenProps<{\n message_id: string\n reply_root_author_name?: string\n conversation_id: number\n canDeleteNonAuthoredMessages?: boolean\n inReplyScreen?: boolean\n isSystemMessage?: boolean\n}>\n\nexport function MessageActionsScreen({ route }: MessageActionsScreenProps) {\n const {\n conversation_id,\n message_id,\n canDeleteNonAuthoredMessages,\n inReplyScreen,\n reply_root_author_name,\n isSystemMessage,\n } = route.params\n\n const { messages, refetch } = useConversationMessages(\n { conversation_id },\n { refetchOnMount: false }\n )\n const message = messages.find(m => m.id === message_id)\n\n if (!message) return null\n\n return (\n <MessageActionsScreenContent\n message={message}\n conversation_id={conversation_id}\n canDeleteNonAuthoredMessages={canDeleteNonAuthoredMessages || false}\n refetchMessages={refetch}\n inReplyScreen={inReplyScreen}\n replyRootAuthorName={reply_root_author_name}\n isSystemMessage={isSystemMessage}\n />\n )\n}\n\nfunction MessageActionsScreenContent({\n message,\n conversation_id,\n canDeleteNonAuthoredMessages,\n refetchMessages,\n inReplyScreen,\n replyRootAuthorName,\n isSystemMessage,\n}: {\n message: MessageResource\n conversation_id: number\n canDeleteNonAuthoredMessages: boolean\n refetchMessages: () => void\n inReplyScreen?: boolean\n replyRootAuthorName?: string\n isSystemMessage?: boolean\n}) {\n const navigation = useNavigation()\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const styles = useStyles()\n const { featureEnabled } = useFeatures()\n const expandedLink = message.attachments.find(attachment => attachment.type === 'ExpandedLink')\n const hasExpandedLink = !!expandedLink\n\n const myReactions = message?.reactionCounts\n .filter(reaction => reaction.mine)\n .map(reaction => reaction.value)\n\n const availableReactions = Object.entries(REACTION_EMOJIS).map(([value, emoji]) => {\n return {\n value: value as ReactionCountResource['value'],\n emoji,\n mine: myReactions?.includes(value as ReactionCountResource['value']),\n }\n })\n\n const attachmentForCopy = (): string => {\n const giphyTitleLink = message?.attachments.find(\n attachment => attachment.type === 'giphy'\n )?.titleLink\n\n if (giphyTitleLink) return giphyTitleLink\n return ''\n }\n\n const handleReplyPress = useCallback(() => {\n navigation.goBack()\n // Waits for the modal to be dismissed before pushing the reply screen\n requestAnimationFrame(() => {\n navigation.navigate('ConversationReply', {\n conversation_id,\n reply_root_id: message.replyRootId || message.id,\n reply_root_author_name: replyRootAuthorName,\n })\n })\n }, [navigation, conversation_id, message.id, message.replyRootId, replyRootAuthorName])\n\n const handleCopyPress = async () => {\n const textToCopy = message?.text || attachmentForCopy()\n if (textToCopy) {\n await Clipboard.setStringAsync(textToCopy)\n Haptic.notificationSuccess()\n }\n navigation.goBack()\n }\n\n const handleReportPress = useCallback(() => {\n Haptic.impactLight()\n navigation.navigate('MessageReport', {\n conversation_id,\n message_id: message.id,\n })\n }, [navigation, conversation_id, message.id])\n\n const { handleReactionToggle, isPending } = useMessageReactionToggle({\n conversation_id,\n message,\n })\n\n const deleteMessage = useCallback(() => {\n const url = `/me/conversations/${conversation_id}/messages/${message.id}/`\n\n return apiClient.chat.delete({ url })\n }, [apiClient, conversation_id, message.id])\n\n const { mutate: handleDeleteMessage } = useMutation({\n mutationFn: deleteMessage,\n mutationKey: ['deleteMessage', message.id],\n onSuccess: () => {\n applyMessageDeletionToCaches(queryClient, conversation_id, message)\n if (message.replyRootId) {\n queryClient.invalidateQueries({\n queryKey: getThreadedMessagesQueryKey(conversation_id, message.replyRootId),\n })\n }\n refetchMessages()\n Haptic.notificationSuccess()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to delete this message. Please try again.')\n },\n })\n\n const handleDeleteConfirm = useCallback(() => {\n Alert.alert('Delete message', 'Are you sure you want to permanently delete this message?', [\n { text: 'Cancel', style: 'cancel' },\n {\n text: 'Delete',\n style: 'destructive',\n onPress: () => {\n handleDeleteMessage()\n navigation.goBack()\n },\n },\n ])\n }, [handleDeleteMessage, navigation])\n\n const handleEditPress = useCallback(() => {\n const state = navigation.getState?.()\n const targetRouteName = inReplyScreen ? 'ConversationReply' : 'Conversation'\n const targetRoute = state?.routes?.find(r => r.name === targetRouteName)\n const params = omitBy(\n {\n ...(targetRoute?.params || {}),\n conversation_id,\n editing_message_id: message.id,\n },\n isNil\n )\n navigation.dispatch(StackActions.popTo(targetRouteName, params))\n }, [navigation, conversation_id, message.id, inReplyScreen])\n\n const handleViewReadReceiptsPress = useCallback(() => {\n Haptic.impactLight()\n const params = omitBy(\n {\n conversation_id,\n message_id: message.id,\n },\n isNil\n )\n navigation.dispatch(StackActions.popTo('MessageReadReceipts', params))\n }, [navigation, conversation_id, message.id])\n\n const removeLinkPreview = useCallback(() => {\n const url = `/me/conversations/${conversation_id}/messages/${message.id}/remove_expanded_link`\n const data = {\n data: { type: 'ExpandedLink', attributes: { expanded_link_id: expandedLink?.id } },\n }\n\n return apiClient.chat.post({ url, data })\n }, [apiClient, conversation_id, message.id, expandedLink])\n\n const { mutate: handleRemoveLinkPreview } = useMutation({\n mutationFn: removeLinkPreview,\n onSuccess: () => {\n refetchMessages()\n Haptic.notificationSuccess()\n navigation.goBack()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to remove the preview. Please try again.')\n },\n })\n\n const handleRemoveLinkPreviewConfirm = useCallback(() => {\n Alert.alert('Remove link preview?', 'This will remove the image preview but retain the link', [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Remove', style: 'destructive', onPress: () => handleRemoveLinkPreview() },\n ])\n }, [handleRemoveLinkPreview])\n\n const showReportMessageAction =\n !message?.mine && featureEnabled(availableFeatures.message_reporting)\n\n return (\n <FormSheet.Root style={styles.formSheetContent}>\n <View style={styles.reactionList}>\n {availableReactions.map((reaction, index) => (\n <Reaction\n key={index}\n reaction={reaction}\n onPress={() => {\n Haptic.impactLight()\n handleReactionToggle({\n value: reaction.value,\n mine: reaction.mine,\n })\n navigation.goBack()\n }}\n />\n ))}\n </View>\n {!isSystemMessage && (\n <View style={styles.actions}>\n {!inReplyScreen && (\n <FormSheet.Action\n onPress={handleReplyPress}\n title=\"Reply to message\"\n iconName=\"registrations.undo\"\n accessibilityHint=\"Navigates to the reply screen\"\n accessibilityRole=\"link\"\n />\n )}\n <FormSheet.Action\n onPress={handleCopyPress}\n title=\"Copy text\"\n iconName=\"services.fileCopy\"\n accessibilityHint=\"Copies text and links to clipboard\"\n />\n {showReportMessageAction && (\n <FormSheet.Action\n onPress={handleReportPress}\n title=\"Report message\"\n iconName=\"chat.reportMessageO\"\n accessibilityHint=\"Opens a form to report this message\"\n />\n )}\n {message?.mine && (\n <FormSheet.Action\n onPress={() => handleEditPress()}\n title=\"Edit message\"\n iconName=\"accounts.editor\"\n accessibilityHint=\"Opens existing text in the message form input.\"\n />\n )}\n {message?.mine && (\n <FormSheet.Action\n onPress={() => handleViewReadReceiptsPress()}\n title=\"View read receipts\"\n iconName=\"general.checkPerson\"\n accessibilityHint=\"Opens a modal with a list of people who read your message.\"\n />\n )}\n {message?.mine && hasExpandedLink && (\n <FormSheet.Action\n onPress={() => handleRemoveLinkPreviewConfirm()}\n title=\"Remove link preview\"\n iconName=\"general.brokenLink\"\n accessibilityHint=\"Removes an expanded link preview from the message.\"\n />\n )}\n {(message?.mine || canDeleteNonAuthoredMessages) && (\n <FormSheet.Action\n onPress={() => handleDeleteConfirm()}\n title=\"Delete message\"\n iconName=\"publishing.trash\"\n appearance=\"danger\"\n disabled={isPending}\n accessibilityHint=\"Opens a confirmation alert to delete this message permanently.\"\n />\n )}\n </View>\n )}\n </FormSheet.Root>\n )\n}\n\nconst Reaction = ({\n reaction,\n onPress,\n}: {\n reaction: { value: ReactionCountResource['value']; emoji: string; mine: boolean | undefined }\n onPress: () => void\n}) => {\n const styles = useStyles()\n const reactionStyles = useReactionStyles({ mine: reaction.mine ? 1 : 0 })\n\n const { colors } = useTheme()\n const baseRippleColor = reaction.mine ? colors.interaction : colors.fillColorNeutral060\n const androidRippleColor = useCreateAndroidRippleColor({ color: baseRippleColor })\n\n return (\n <PlatformPressable\n key={reaction.value}\n style={[reactionStyles.reaction, styles.reaction]}\n android_ripple={{ color: androidRippleColor, borderless: false, foreground: true }}\n onPress={onPress}\n >\n <Text style={styles.reactionEmoji} allowFontScaling={false}>\n {REACTION_EMOJIS[reaction.value]}\n </Text>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const { colors } = useTheme()\n const fontScale = useFontScale({ maxFontSizeMultiplier: 1.3 })\n\n const btnBorderWidth = 1\n const baseSize = 46 * Math.max(1, fontScale)\n const reactionBtnSize = Platform.select({\n ios: baseSize,\n android: baseSize + btnBorderWidth * 2,\n })\n\n return StyleSheet.create({\n formSheetContent: {\n paddingTop: 16,\n },\n reactionList: {\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 16,\n paddingTop: 8,\n paddingBottom: 16,\n borderBottomColor: colors.borderColorDefaultBase,\n borderBottomWidth: 1,\n },\n reaction: {\n height: reactionBtnSize,\n width: reactionBtnSize,\n borderWidth: btnBorderWidth,\n borderRadius: 32,\n justifyContent: 'center',\n overflow: 'hidden',\n },\n reactionEmoji: {\n fontSize: 24,\n textAlign: 'center',\n },\n actions: {\n paddingTop: 4,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "4.3.0",
3
+ "version": "4.3.1-rc.0",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -84,5 +84,5 @@
84
84
  "sf-symbols-typescript": "^2.2.0",
85
85
  "typescript": "~6.0.3"
86
86
  },
87
- "gitHead": "2e1b1dfe9e9c7eeb8d6845f847202c1ce9b32eb9"
87
+ "gitHead": "98d7eda39e22a531267c748456a1ad9034d80d5a"
88
88
  }
@@ -0,0 +1,136 @@
1
+ import { HeaderHeightContext } from '@react-navigation/elements'
2
+ import { DefaultTheme, ThemeProvider } from '@react-navigation/native'
3
+ import { QueryClientProvider } from '@tanstack/react-query'
4
+ import { fireEvent, render, waitFor } from '@testing-library/react-native'
5
+ import React from 'react'
6
+ import { SafeAreaProvider } from 'react-native-safe-area-context'
7
+ import { buildTestQueryClient } from '../../__utils__/query_client'
8
+ import {
9
+ MessageActionsScreen,
10
+ MessageActionsScreenProps,
11
+ } from '../../screens/message_actions_screen'
12
+ import { MessageResource } from '../../types'
13
+ import {
14
+ AudioAdapter,
15
+ ChatAdapters,
16
+ ClipboardAdapter,
17
+ HapticAdapter,
18
+ ImagePickerAdapter,
19
+ VideoAdapter,
20
+ } from '../../utils/native_adapters'
21
+
22
+ const mockMessage: MessageResource = {
23
+ type: 'Message',
24
+ id: '1',
25
+ text: 'Copy me',
26
+ html: '<p>Copy me</p>',
27
+ createdAt: '2026-01-01T00:00:00Z',
28
+ deletedAt: null,
29
+ textEditedAt: null,
30
+ mine: false,
31
+ attachments: [],
32
+ author: { id: 1, type: 'Person', name: 'Author', avatar: '' },
33
+ reactionCounts: [],
34
+ replyCount: 0,
35
+ replyRootId: null,
36
+ messageType: 'user',
37
+ }
38
+
39
+ let mockCurrentMessage = mockMessage
40
+
41
+ const mockGoBack = jest.fn()
42
+ jest.mock('@react-navigation/native', () => ({
43
+ ...jest.requireActual('@react-navigation/native'),
44
+ useNavigation: () => ({ navigate: jest.fn(), dispatch: jest.fn(), goBack: mockGoBack }),
45
+ }))
46
+ jest.mock('../../hooks/use_api_client', () => ({ useApiClient: () => ({}) }))
47
+ jest.mock('../../hooks/use_features', () => ({
48
+ ...jest.requireActual('../../hooks/use_features'),
49
+ useFeatures: () => ({ features: [], featureEnabled: () => false }),
50
+ }))
51
+ jest.mock('../../hooks/use_message_reaction_toggle', () => ({
52
+ useMessageReactionToggle: () => ({ handleReactionToggle: jest.fn(), isPending: false }),
53
+ }))
54
+ jest.mock('../../hooks/use_conversation_messages', () => ({
55
+ useConversationMessages: () => ({ messages: [mockCurrentMessage], refetch: jest.fn() }),
56
+ }))
57
+
58
+ const setStringAsync = jest.fn(async (_: string) => {})
59
+ const notificationSuccess = jest.fn()
60
+
61
+ const safeAreaMetrics = {
62
+ frame: { x: 0, y: 0, width: 390, height: 844 },
63
+ insets: { top: 0, right: 0, bottom: 0, left: 0 },
64
+ }
65
+
66
+ const route = {
67
+ key: 'MessageActions',
68
+ name: 'MessageActions',
69
+ params: { conversation_id: 1, message_id: mockMessage.id },
70
+ } as MessageActionsScreenProps['route']
71
+
72
+ const renderScreen = () =>
73
+ render(
74
+ <QueryClientProvider client={buildTestQueryClient()}>
75
+ <SafeAreaProvider initialMetrics={safeAreaMetrics}>
76
+ <ThemeProvider value={DefaultTheme}>
77
+ <HeaderHeightContext.Provider value={0}>
78
+ <MessageActionsScreen route={route} />
79
+ </HeaderHeightContext.Provider>
80
+ </ThemeProvider>
81
+ </SafeAreaProvider>
82
+ </QueryClientProvider>
83
+ )
84
+
85
+ describe('MessageActionsScreen', () => {
86
+ beforeAll(() => {
87
+ ChatAdapters.configure({
88
+ clipboard: new ClipboardAdapter({ getStringAsync: async () => '', setStringAsync }),
89
+ audio: new AudioAdapter({ useAudio: () => ({}) as any }),
90
+ video: new VideoAdapter({ Player: React.forwardRef(() => null) }),
91
+ imagePicker: new ImagePickerAdapter({
92
+ openCameraAsync: async () => ({ canceled: true, assets: null }),
93
+ openImageLibraryAsync: async () => ({ canceled: true, assets: null }),
94
+ }),
95
+ haptic: new HapticAdapter({
96
+ impactLight: jest.fn(),
97
+ impactMedium: jest.fn(),
98
+ impactHeavy: jest.fn(),
99
+ rigid: jest.fn(),
100
+ soft: jest.fn(),
101
+ notificationSuccess,
102
+ notificationWarning: jest.fn(),
103
+ notificationError: jest.fn(),
104
+ }),
105
+ })
106
+ })
107
+
108
+ beforeEach(() => {
109
+ jest.clearAllMocks()
110
+ mockCurrentMessage = mockMessage
111
+ })
112
+
113
+ it('copies the message text and gives success haptic feedback before closing', async () => {
114
+ const { getByText } = renderScreen()
115
+
116
+ fireEvent.press(getByText('Copy text'))
117
+
118
+ expect(setStringAsync).toHaveBeenCalledWith('Copy me')
119
+ await waitFor(() => expect(mockGoBack).toHaveBeenCalledTimes(1))
120
+ expect(notificationSuccess).toHaveBeenCalledTimes(1)
121
+ expect(notificationSuccess.mock.invocationCallOrder[0]).toBeLessThan(
122
+ mockGoBack.mock.invocationCallOrder[0]
123
+ )
124
+ })
125
+
126
+ it('leaves the clipboard alone and gives no haptic when there is nothing to copy', async () => {
127
+ mockCurrentMessage = { ...mockMessage, text: null }
128
+ const { getByText } = renderScreen()
129
+
130
+ fireEvent.press(getByText('Copy text'))
131
+
132
+ await waitFor(() => expect(mockGoBack).toHaveBeenCalledTimes(1))
133
+ expect(setStringAsync).not.toHaveBeenCalled()
134
+ expect(notificationSuccess).not.toHaveBeenCalled()
135
+ })
136
+ })
@@ -124,8 +124,12 @@ function MessageActionsScreenContent({
124
124
  })
125
125
  }, [navigation, conversation_id, message.id, message.replyRootId, replyRootAuthorName])
126
126
 
127
- const handleCopyPress = () => {
128
- Clipboard.setStringAsync(message?.text || attachmentForCopy() || '')
127
+ const handleCopyPress = async () => {
128
+ const textToCopy = message?.text || attachmentForCopy()
129
+ if (textToCopy) {
130
+ await Clipboard.setStringAsync(textToCopy)
131
+ Haptic.notificationSuccess()
132
+ }
129
133
  navigation.goBack()
130
134
  }
131
135