@messenger-box/platform-mobile 10.0.3-alpha.34 → 10.0.3-alpha.37
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/CHANGELOG.md +8 -0
- package/lib/screens/inbox/components/CachedImage/index.js +125 -93
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogsListItem.js +80 -256
- package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +222 -324
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +0 -2
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +487 -888
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +243 -547
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +409 -1364
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/package.json +4 -4
- package/src/screens/inbox/components/CachedImage/index.tsx +191 -140
- package/src/screens/inbox/components/DialogsListItem.tsx +112 -345
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +316 -437
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +2 -4
- package/src/screens/inbox/containers/ConversationView.tsx +676 -993
- package/src/screens/inbox/containers/ConversationView.tsx.bk +1467 -0
- package/src/screens/inbox/containers/Dialogs.tsx +345 -636
- package/src/screens/inbox/containers/ThreadConversationView.tsx +661 -1887
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceDialogsListItem.js","sources":["../../../../src/screens/inbox/components/ServiceDialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef } from 'react';\nimport {\n Text,\n Image,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n View,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, IUserAccount } from 'common';\nimport {\n useOnThreadCreatedUpdatedSubscription,\n useOnThreadChatMessageAddedSubscription,\n useThreadMessagesQuery,\n OnThreadCreatedUpdatedDocument as THREAD_CHAT_ADDED,\n OnThreadChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { serviceDialogsListItemXstate, Actions, BaseState } from './workflow/service-dialogs-list-item-xstate';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue) => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n // Check if the date is valid by seeing if it returns a valid time value\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogListItemProps {\n currentUser?: any;\n users?: any;\n selectedChannelId?: any;\n channel?: any;\n onOpen: (id: any, title: any, postParentId?: any) => void;\n refreshing: boolean;\n role: any;\n}\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine) {\n // Define the state type\n interface SafeStateType {\n context: {\n channelId: string | null;\n currentUser: any;\n threadMessages: any[];\n loading: boolean;\n error: string | null;\n title: string;\n role: string;\n servicePostParentId: string | null;\n lastMessage: any;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n }\n\n // Initialize state with default values to prevent undefined errors\n const [state, setState] = useState<SafeStateType>({\n context: {\n channelId: null,\n currentUser: null,\n threadMessages: [],\n loading: false,\n error: null,\n title: '',\n role: '',\n servicePostParentId: null,\n lastMessage: null,\n },\n value: BaseState.Idle,\n matches: (stateValue) => stateValue === BaseState.Idle,\n });\n\n // Implement a send function that updates state safely\n const send = useCallback((event) => {\n try {\n // Handle specific events manually\n if (event.type === Actions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelId: event.data?.channelId || null,\n currentUser: event.data?.currentUser || null,\n role: event.data?.role || null,\n loading: true,\n },\n value: BaseState.FetchingThreadMessages,\n }));\n } else if (event.type === Actions.UPDATE_THREAD_MESSAGES) {\n setState((prev) => {\n if (event.data?.threadMessages) {\n // Handling bulk messages (initial load)\n // If a direct last message was provided (from subscription), use it\n if (event.data?.directLastMessage) {\n console.log('Using direct last message from event:', {\n id: event.data.directLastMessage.id,\n message: event.data.directLastMessage.message?.substring(0, 20) + '...',\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: event.data.threadMessages,\n lastMessage: event.data.directLastMessage,\n loading: false,\n },\n };\n }\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: event.data.threadMessages,\n lastMessage: computeLastMessage(event.data.threadMessages),\n loading: false,\n },\n };\n } else if (event.data?.message) {\n // Handling single message (from subscription)\n const newMessage = event.data.message;\n const updatedMessages = [...prev.context.threadMessages, newMessage];\n\n // Use the new message directly as the last message\n // This ensures immediate update on subscription\n console.log('Setting new message as lastMessage from subscription:', {\n id: newMessage.id,\n message: newMessage.message?.substring(0, 20) + '...',\n date: newMessage.createdAt || newMessage.updatedAt,\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: updatedMessages,\n lastMessage: newMessage, // Use the new message directly\n loading: false,\n },\n };\n }\n return prev;\n });\n } else if (event.type === Actions.SET_TITLE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n title: event.data?.title || '',\n },\n }));\n } else if (event.type === Actions.SET_SERVICE_POST_PARENT_ID) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n servicePostParentId: event.data?.servicePostParentId || null,\n },\n }));\n } else if (event.type === Actions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === Actions.STOP_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n },\n }));\n }\n } catch (error) {\n console.error('Error sending event to state machine:', error);\n }\n }, []);\n\n // Helper function to compute the last message from a list of messages\n const computeLastMessage = (threadMessages) => {\n if (!threadMessages || !threadMessages.length) return null;\n\n // Extract the post and replies from thread messages\n let posts = [];\n let replies = [];\n\n // Helper function to check if a message is an image or contains only image content\n const isTextMessage = (msg) => {\n if (!msg) return false;\n\n // If message is empty or only contains image-specific markers, ignore it\n if (!msg.message || msg.message === '') return false;\n\n // Check if message looks like an image URL or reference\n const isImageMessage =\n msg.message.includes('<img') ||\n msg.message.includes('[Image]') ||\n msg.message.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(msg.message) &&\n (msg.message.includes('http') || msg.message.includes('/images/')));\n\n // Return true only for text messages (not image messages)\n return !isImageMessage;\n };\n\n threadMessages.forEach((thread) => {\n if (thread?.post && isTextMessage(thread.post)) {\n posts.push(thread.post);\n }\n if (thread?.replies?.length) {\n replies = [...replies, ...thread.replies.filter((r) => isTextMessage(r))];\n }\n });\n\n // Combine and sort all messages\n const allMessages = [...posts, ...replies];\n if (!allMessages.length) return null;\n\n // Return the most recent message - use safe date comparison\n return allMessages.reduce((a, b) => {\n const dateA = safeDate(a?.createdAt);\n const dateB = safeDate(b?.createdAt);\n\n // If either date is invalid, prefer the message with valid date\n if (!dateA) return b;\n if (!dateB) return a;\n\n return dateA > dateB ? a : b;\n }, allMessages[0]);\n };\n\n // Add a matches function that works with the current state value\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (stateValue) => {\n try {\n return state.value === stateValue;\n } catch (error) {\n console.error(`Error in matches function:`, error);\n return false;\n }\n },\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send] as const;\n}\n\nconst ServiceChannelWithLastMessage = React.memo(({ channel, lastMessage, subscribeToNewMessages }: any) => {\n React.useEffect(() => {\n // Subscribe and store the unsubscribe function\n const unsubscribe = subscribeToNewMessages();\n return () => {\n // Cleanup subscription on unmount\n if (unsubscribe && typeof unsubscribe === 'function') {\n unsubscribe();\n }\n };\n }, [subscribeToNewMessages]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`ServiceChannelWithLastMessage rendered for channel ${channel?.id}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? safeDate(lastMessage.createdAt)?.toISOString() : 'none',\n });\n }, [lastMessage, channel?.id]);\n\n const count = 30;\n const title = channel?.title.slice(0, count) + (channel?.title.length > count ? '...' : '');\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n // Check for file attachments\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n\n // Check if the message appears to be an image\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {title}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{lastMessage ? createdAtText(lastMessage?.createdAt) : ''}</Text>\n </Box>\n </HStack>\n );\n});\n\n/**\n * TODO:\n * - Get Reservation info: reservation date, status\n * - Add ability to get property information: name, logo\n */\nexport const ServiceDialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n refreshing,\n role,\n}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n // Define safe access functions\n const [state, send] = useSafeMachine(serviceDialogsListItemXstate);\n\n const safeContextProperty = useCallback(\n (property, defaultValue = null) => {\n try {\n return state?.context?.[property] ?? defaultValue;\n } catch (error) {\n console.error(`Error accessing state.context.${property}:`, error);\n return defaultValue;\n }\n },\n [state],\n );\n\n const safeSend = useCallback(\n (event) => {\n try {\n send(event);\n } catch (error) {\n console.error('Error sending event to state machine:', error, event);\n }\n },\n [send],\n );\n\n // Query for thread messages\n const {\n data: threadMessages,\n loading: threadMessageLoading,\n error,\n refetch: refetchThreadMessages,\n subscribeToMore,\n } = useThreadMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n },\n fetchPolicy: 'cache-and-network',\n onCompleted: (data) => {\n console.log(\n `Completed thread messages query for channel ${channel?.id}:`,\n data?.threadMessages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\n console.error(`Error fetching thread messages for channel ${channel?.id}:`, error);\n },\n });\n\n // Update state when channel or currentUser changes\n React.useEffect(() => {\n if (channel?.id) {\n safeSend({\n type: Actions.INITIAL_CONTEXT,\n data: {\n channelId: channel?.id?.toString(),\n currentUser,\n role,\n },\n });\n\n safeSend({\n type: Actions.SET_TITLE,\n data: {\n title: channel?.title || '',\n },\n });\n }\n\n return () => {\n isMountedRef.current = false;\n };\n }, [channel?.id, currentUser, role, safeSend]);\n\n // Update state when thread messages are loaded or refreshed\n React.useEffect(() => {\n if (threadMessages && isMountedRef.current) {\n console.log(\n `Updating thread messages for channel ${channel?.id}, count:`,\n threadMessages?.threadMessages?.data?.length || 0,\n );\n\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n threadMessages: threadMessages?.threadMessages?.data || [],\n },\n });\n }\n }, [threadMessages, refreshing, channel?.id, safeSend]);\n\n // Use computed values from state\n const lastMessage = safeContextProperty('lastMessage', null);\n const servicePostParentId = safeContextProperty('servicePostParentId', null);\n\n // Update servicePostParentId when lastMessage changes\n React.useEffect(() => {\n if (lastMessage) {\n const sParentId = lastMessage?.parentId ? lastMessage?.parentId : lastMessage?.id;\n safeSend({\n type: Actions.SET_SERVICE_POST_PARENT_ID,\n data: {\n servicePostParentId: sParentId,\n },\n });\n }\n }, [lastMessage, safeSend]);\n\n const creatorAndMembersId = React.useMemo(() => {\n if (!channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [channel, currentUser]);\n\n const postParentId = React.useMemo(() => {\n if (!creatorAndMembersId?.length) return null;\n\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [creatorAndMembersId, lastMessage, currentUser]);\n\n // Function to force refresh the component state\n const refreshThreadState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing thread state refresh for channel:', channel?.id);\n // First ensure we're in a loading state to trigger UI updates\n safeSend({ type: Actions.START_LOADING });\n\n // Refetch messages from server\n refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n })\n .then((result) => {\n // Update the state with fresh data\n if (result.data?.threadMessages?.data && isMountedRef.current) {\n console.log(\n `Refreshed ${result.data.threadMessages.data.length} thread messages for channel ${channel?.id}`,\n );\n\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: { threadMessages: result.data.threadMessages.data },\n });\n }\n safeSend({ type: Actions.STOP_LOADING });\n })\n .catch((err) => {\n console.error('Error refreshing thread state:', err);\n safeSend({ type: Actions.STOP_LOADING });\n });\n }\n }, [channel?.id, refetchThreadMessages, safeSend, isMountedRef, role]);\n\n // Refetch messages when screen is focused or refreshing\n useFocusEffect(\n React.useCallback(() => {\n if (!channel?.id) return;\n\n console.log('ServiceDialogsListItem focused for channel:', channel?.id);\n\n // Show loading state\n safeSend({ type: Actions.START_LOADING });\n\n // Use a direct refetch with network-only policy to force fresh data\n const fetchFreshData = async () => {\n try {\n // Force a network-only fetch\n const result = await refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n });\n\n // Log the refreshed data\n console.log(\n `FOCUS EFFECT: Refetched ${\n result?.data?.threadMessages?.data?.length || 0\n } messages for channel ${channel?.id}`,\n );\n\n if (result?.data?.threadMessages?.data && isMountedRef.current) {\n // Update state with fresh data\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: { threadMessages: result.data.threadMessages.data },\n });\n }\n } catch (error) {\n console.error('Error refetching thread messages on focus:', error);\n } finally {\n if (isMountedRef.current) {\n safeSend({ type: Actions.STOP_LOADING });\n }\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [refreshing, channel?.id, refetchThreadMessages, safeSend, role, isMountedRef]),\n );\n\n return (\n <Pressable\n onPress={() => channel?.id !== selectedChannelId && onOpen(channel?.id, channel?.title, postParentId)}\n className=\"flex-1 rounded-md border-gray-200 dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] px-2 py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText> {startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n </Box>\n <Box className=\"flex-1\">\n <ServiceChannelWithLastMessage\n channel={channel}\n lastMessage={lastMessage}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: THREAD_CHAT_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId ? servicePostParentId : null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n\n const newPostThreadData: any = subscriptionData?.data?.threadCreatedUpdated?.data;\n const newMessage: any = subscriptionData?.data?.threadCreatedUpdated?.lastMessage;\n\n console.log('New thread message subscription update:', {\n channelId: channel?.id,\n threadId: newPostThreadData?.id,\n hasMessage: !!newMessage,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n const data =\n prev?.threadMessages?.data?.map((t: any) =>\n t.id === newPostThreadData?.id\n ? {\n ...t,\n replies: [...t?.replies, newMessage],\n replyCount: newPostThreadData?.replyCount,\n lastReplyAt: newPostThreadData?.lastReplyAt,\n updatedAt: newPostThreadData?.updatedAt,\n }\n : t,\n ) ?? [];\n\n // Use the safe state update function\n if (isMountedRef.current) {\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n threadMessages: data?.length > 0 ? data : [newPostThreadData],\n directLastMessage: newMessage, // Directly set the new message\n },\n });\n }\n\n return Object.assign({}, prev, {\n threadMessages: {\n ...prev?.threadMessages,\n totalCount: newPostThreadData?.totalCount ?? 0,\n data: data?.length > 0 ? data : [newPostThreadData],\n },\n });\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const ServiceDialogsListItem = React.memo(ServiceDialogsListItemComponent);\n"],"names":["React","_a","_b","_c","error","_d","THREAD_CHAT_ADDED"],"mappings":";;;;;;;;;;;;;;;;;;;AAWA,MAAM,WAAW,CAAa,SAAA,KAAA;AAC5B,EAAA,IAAI,CAAC,SAAA;AAAW,IAAO,OAAA,IAAA;AACvB,EAAI,IAAA;AACF,IAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,SAAS,CAAA;AAE/B,IAAA,IAAI,KAAM,CAAA,IAAA,CAAK,OAAQ,EAAC,CAAG,EAAA;AACzB,MAAQ,OAAA,CAAA,IAAA,CAAK,gCAAgC,SAAS,CAAA;AACtD,MAAO,OAAA,IAAA;AAAA;AAET,IAAO,OAAA,IAAA;AAAA,WACA,KAAP,EAAA;AACA,IAAQ,OAAA,CAAA,IAAA,CAAK,iCAAmC,EAAA,SAAA,EAAW,KAAK,CAAA;AAChE,IAAO,OAAA,IAAA;AAAA;AAEX,CAAA;AACA,MAAM,aAAA,GAAgB,CAAC,KAAkB,KAAA;AACvC,EAAA,IAAI,CAAC,KAAA;AAAO,IAAO,OAAA,EAAA;AACnB,EAAM,MAAA,IAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,IAAA;AAAM,IAAO,OAAA,EAAA;AAClB,EAAA,IAAI,QAAQ,IAAI,CAAA;AAAG,IAAO,OAAA,OAAA;AAC1B,EAAA,IAAI,YAAY,IAAI,CAAA;AAAG,IAAO,OAAA,WAAA;AAC9B,EAAO,OAAA,MAAA,CAAO,MAAM,cAAc,CAAA;AACpC,CAAA;AAeA,SAAS,eAAe,OAAS,EAAA;AAmB/B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAwB,CAAA;AAAA,IAChD,OAAS,EAAA;AAAA,MACP,SAAW,EAAA,IAAA;AAAA,MACX,WAAa,EAAA,IAAA;AAAA,MACb,gBAAgB,EAAC;AAAA,MACjB,OAAS,EAAA,KAAA;AAAA,MACT,KAAO,EAAA,IAAA;AAAA,MACP,KAAO,EAAA,EAAA;AAAA,MACP,IAAM,EAAA,EAAA;AAAA,MACN,mBAAqB,EAAA,IAAA;AAAA,MACrB,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAO,SAAU,CAAA,IAAA;AAAA,IACjB,OAAA,EAAS,CAAc,UAAA,KAAA,UAAA,KAAe,SAAU,CAAA;AAAA,GACjD,CAAA;AAGD,EAAM,MAAA,IAAA,GAAO,YAAY,CAAS,KAAA,KAAA;AAChC,IAAI,IAAA;AAEF,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,OAAA,CAAQ,eAAiB,EAAA;AAC1C,QAAA,QAAA,CAAS,CAAK,IAAA,KAAA;AAxFtB,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwF0B,UAAA,OAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACb,IADa,CAAA,EAAA;AAAA,YAEhB,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,cAEP,SAAW,EAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,SAAa,KAAA,IAAA;AAAA,cACpC,WAAa,EAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,WAAe,KAAA,IAAA;AAAA,cACxC,IAAM,EAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,IAAQ,KAAA,IAAA;AAAA,cAC1B,OAAS,EAAA;AAAA,aACX,CAAA;AAAA,YACA,OAAO,SAAU,CAAA;AAAA,WACnB,CAAA;AAAA,SAAE,CAAA;AAAA,OACO,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,OAAA,CAAQ,sBAAwB,EAAA;AACxD,QAAA,QAAA,CAAS,CAAQ,IAAA,KAAA;AApGzB,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqGU,UAAI,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,cAAgB,EAAA;AAG9B,YAAI,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,iBAAmB,EAAA;AACjC,cAAA,OAAA,CAAQ,IAAI,uCAAyC,EAAA;AAAA,gBACnD,EAAA,EAAI,KAAM,CAAA,IAAA,CAAK,iBAAkB,CAAA,EAAA;AAAA,gBACjC,OAAA,EAAA,CAAA,CAAS,WAAM,IAAK,CAAA,iBAAA,CAAkB,YAA7B,IAAsC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAU,GAAG,EAAM,CAAA,IAAA;AAAA,eACnE,CAAA;AACD,cAAA,OAAO,iCACF,IADE,CAAA,EAAA;AAAA,gBAEL,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,kBAEP,cAAA,EAAgB,MAAM,IAAK,CAAA,cAAA;AAAA,kBAC3B,WAAA,EAAa,MAAM,IAAK,CAAA,iBAAA;AAAA,kBACxB,OAAS,EAAA;AAAA,iBACX;AAAA,eACF,CAAA;AAAA;AAEF,YAAA,OAAO,iCACF,IADE,CAAA,EAAA;AAAA,cAEL,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,gBAEP,cAAA,EAAgB,MAAM,IAAK,CAAA,cAAA;AAAA,gBAC3B,WAAa,EAAA,kBAAA,CAAmB,KAAM,CAAA,IAAA,CAAK,cAAc,CAAA;AAAA,gBACzD,OAAS,EAAA;AAAA,eACX;AAAA,aACF,CAAA;AAAA,WACS,MAAA,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,OAAS,EAAA;AAE9B,YAAM,MAAA,UAAA,GAAa,MAAM,IAAK,CAAA,OAAA;AAC9B,YAAA,MAAM,kBAAkB,CAAC,GAAG,IAAK,CAAA,OAAA,CAAQ,gBAAgB,UAAU,CAAA;AAInE,YAAA,OAAA,CAAQ,IAAI,uDAAyD,EAAA;AAAA,cACnE,IAAI,UAAW,CAAA,EAAA;AAAA,cACf,WAAS,EAAW,GAAA,UAAA,CAAA,OAAA,KAAX,IAAoB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAU,GAAG,EAAM,CAAA,IAAA,KAAA;AAAA,cAChD,IAAA,EAAM,UAAW,CAAA,SAAA,IAAa,UAAW,CAAA;AAAA,aAC1C,CAAA;AACD,YAAA,OAAO,iCACF,IADE,CAAA,EAAA;AAAA,cAEL,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,gBAEP,cAAgB,EAAA,eAAA;AAAA,gBAChB,WAAa,EAAA,UAAA;AAAA,gBAEb,OAAS,EAAA;AAAA,eACX;AAAA,aACF,CAAA;AAAA;AAEF,UAAO,OAAA,IAAA;AAAA,SACR,CAAA;AAAA,OACQ,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,OAAA,CAAQ,SAAW,EAAA;AAC3C,QAAA,QAAA,CAAS,CAAK,IAAA,KAAA;AA1JtB,UAAA,IAAA,EAAA;AA0J0B,UAAA,OAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACb,IADa,CAAA,EAAA;AAAA,YAEhB,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,cAEP,KAAO,EAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,KAAS,KAAA;AAAA,aAC9B;AAAA,WACF,CAAA;AAAA,SAAE,CAAA;AAAA,OACO,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,OAAA,CAAQ,0BAA4B,EAAA;AAC5D,QAAA,QAAA,CAAS,CAAK,IAAA,KAAA;AAlKtB,UAAA,IAAA,EAAA;AAkK0B,UAAA,OAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACb,IADa,CAAA,EAAA;AAAA,YAEhB,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,cAEP,mBAAqB,EAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,mBAAuB,KAAA;AAAA,aAC1D;AAAA,WACF,CAAA;AAAA,SAAE,CAAA;AAAA,OACO,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,OAAA,CAAQ,aAAe,EAAA;AAC/C,QAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,UAEhB,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,YAEP,OAAS,EAAA;AAAA,WACX;AAAA,SACA,CAAA,CAAA;AAAA,OACO,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,OAAA,CAAQ,YAAc,EAAA;AAC9C,QAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,UAEhB,OAAA,EAAS,aACJ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADD,CAAA,EAAA;AAAA,YAEP,OAAS,EAAA;AAAA,WACX;AAAA,SACA,CAAA,CAAA;AAAA;AACJ,aACO,KAAP,EAAA;AACA,MAAQ,OAAA,CAAA,KAAA,CAAM,yCAAyC,KAAK,CAAA;AAAA;AAC9D,GACF,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,qBAAqB,CAAkB,cAAA,KAAA;AAC3C,IAAI,IAAA,CAAC,cAAkB,IAAA,CAAC,cAAe,CAAA,MAAA;AAAQ,MAAO,OAAA,IAAA;AAGtD,IAAA,IAAI,QAAQ,EAAC;AACb,IAAA,IAAI,UAAU,EAAC;AAGf,IAAA,MAAM,gBAAgB,CAAO,GAAA,KAAA;AAC3B,MAAA,IAAI,CAAC,GAAA;AAAK,QAAO,OAAA,KAAA;AAGjB,MAAA,IAAI,CAAC,GAAA,CAAI,OAAW,IAAA,GAAA,CAAI,OAAY,KAAA,EAAA;AAAI,QAAO,OAAA,KAAA;AAG/C,MAAA,MAAM,cAAiB,GAAA,GAAA,CAAI,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAA,IAAK,GAAI,CAAA,OAAA,CAAQ,QAAS,CAAA,SAAS,CAAK,IAAA,GAAA,CAAI,OAAQ,CAAA,QAAA,CAAS,IAAI,CAAA,IAAK,gCAAiC,CAAA,IAAA,CAAK,GAAI,CAAA,OAAO,CAAM,KAAA,GAAA,CAAI,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAA,IAAK,GAAI,CAAA,OAAA,CAAQ,SAAS,UAAU,CAAA,CAAA;AAG9O,MAAA,OAAO,CAAC,cAAA;AAAA,KACV;AACA,IAAA,cAAA,CAAe,QAAQ,CAAU,MAAA,KAAA;AApNrC,MAAA,IAAA,EAAA;AAqNM,MAAA,IAAA,CAAI,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,IAAA,KAAQ,aAAc,CAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAC9C,QAAM,KAAA,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA;AAExB,MAAI,IAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAQ,EAAA;AAC3B,QAAU,OAAA,GAAA,CAAC,GAAG,OAAA,EAAS,GAAG,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,aAAA,CAAc,CAAC,CAAC,CAAC,CAAA;AAAA;AACxE,KACD,CAAA;AAGD,IAAA,MAAM,WAAc,GAAA,CAAC,GAAG,KAAA,EAAO,GAAG,OAAO,CAAA;AACzC,IAAA,IAAI,CAAC,WAAY,CAAA,MAAA;AAAQ,MAAO,OAAA,IAAA;AAGhC,IAAA,OAAO,WAAY,CAAA,MAAA,CAAO,CAAC,CAAA,EAAG,CAAM,KAAA;AAClC,MAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,SAAS,CAAA;AACnC,MAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,SAAS,CAAA;AAGnC,MAAA,IAAI,CAAC,KAAA;AAAO,QAAO,OAAA,CAAA;AACnB,MAAA,IAAI,CAAC,KAAA;AAAO,QAAO,OAAA,CAAA;AACnB,MAAO,OAAA,KAAA,GAAQ,QAAQ,CAAI,GAAA,CAAA;AAAA,KAC7B,EAAG,YAAY,CAAE,CAAA,CAAA;AAAA,GACnB;AAGA,EAAM,MAAA,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,MAEL,SAAS,CAAc,UAAA,KAAA;AACrB,QAAI,IAAA;AACF,UAAA,OAAO,MAAM,KAAU,KAAA,UAAA;AAAA,iBAChB,KAAP,EAAA;AACA,UAAQ,OAAA,CAAA,KAAA,CAAM,8BAA8B,KAAK,CAAA;AACjD,UAAO,OAAA,KAAA;AAAA;AACT;AACF,KACF,CAAA;AAAA,GACF,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAO,OAAA,CAAC,kBAAkB,IAAI,CAAA;AAChC;AACA,MAAM,6BAAA,GAAgCA,cAAM,CAAA,IAAA,CAAK,CAAC;AAAA,EAChD,OAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAW,KAAA;AAnQX,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoQE,EAAAA,cAAA,CAAM,UAAU,MAAM;AAEpB,IAAA,MAAM,cAAc,sBAAuB,EAAA;AAC3C,IAAA,OAAO,MAAM;AAEX,MAAI,IAAA,WAAA,IAAe,OAAO,WAAA,KAAgB,UAAY,EAAA;AACpD,QAAY,WAAA,EAAA;AAAA;AACd,KACF;AAAA,GACF,EAAG,CAAC,sBAAsB,CAAC,CAAA;AAG3B,EAAAA,cAAA,CAAM,UAAU,MAAM;AAhRxB,IAAA,IAAAC,KAAAC,GAAAC,EAAAA,GAAAA;AAiRI,IAAQ,OAAA,CAAA,GAAA,CAAI,CAAsD,mDAAA,EAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,EAAO,CAAA,CAAA,CAAA,EAAA;AAAA,MAChF,cAAA,EAAgB,CAAC,CAAC,WAAA;AAAA,MAClB,WAAW,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,EAAA;AAAA,MACxB,eAAaF,GAAA,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAb,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAsB,SAAU,CAAA,CAAA,EAAG,EAAOC,CAAAA,KAAAA,CAAAA,CAAAA,GAAAA,GAAA,2CAAa,OAAb,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAsB,CAAA,MAAA,IAAS,KAAK,KAAQ,GAAA,EAAA,CAAA;AAAA,MACnG,IAAA,EAAA,CAAM,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,SAAA,IAAA,CAAYC,GAAA,GAAA,QAAA,CAAS,YAAY,SAAS,CAAA,KAA9B,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAiC,WAAgB,EAAA,GAAA;AAAA,KACjF,CAAA;AAAA,GACA,EAAA,CAAC,WAAa,EAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,EAAE,CAAC,CAAA;AAC7B,EAAA,MAAM,KAAQ,GAAA,EAAA;AACd,EAAM,MAAA,KAAA,GAAA,CAAQ,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,YAAU,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAM,MAAS,IAAA,KAAA,GAAQ,KAAQ,GAAA,EAAA,CAAA;AAGxF,EAAA,IAAI,cAAiB,GAAA,iBAAA;AACrB,EAAA,IAAI,WAAa,EAAA;AAEf,IAAA,MAAM,uBAAqB,EAAY,GAAA,CAAA,EAAA,GAAA,WAAA,CAAA,KAAA,KAAZ,IAAmB,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,KAAnB,mBAAyB,MAAS,IAAA,CAAA;AAG7D,IAAA,MAAM,cAAiB,GAAA,CAAA,CAAA,EAAA,GAAA,WAAA,CAAY,OAAZ,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,SAAS,MAAW,CAAA,MAAA,CAAA,EAAA,GAAA,WAAA,CAAY,OAAZ,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,QAAS,CAAA,SAAA,CAAA,CAAA,KAAA,CAAc,EAAY,GAAA,WAAA,CAAA,OAAA,KAAZ,mBAAqB,QAAS,CAAA,IAAA,CAAA,CAAA,IAAS,gCAAiC,CAAA,IAAA,CAAK,WAAY,CAAA,OAAA,IAAW,EAAE,CAAA,KAAA,CAAO,YAAY,OAAW,IAAA,EAAA,EAAI,QAAS,CAAA,MAAM,CAAM,IAAA,CAAA,WAAA,CAAY,OAAW,IAAA,EAAA,EAAI,SAAS,UAAU,CAAA,CAAA;AACvT,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAiB,cAAA,GAAA,2BAAA;AAAA,eACR,cAAgB,EAAA;AACzB,MAAiB,cAAA,GAAA,SAAA;AAAA,eACR,WAAY,CAAA,OAAA,IAAW,YAAY,OAAQ,CAAA,IAAA,OAAW,EAAI,EAAA;AACnE,MAAA,cAAA,GAAiB,WAAY,CAAA,OAAA;AAAA,KACxB,MAAA;AACL,MAAiB,cAAA,GAAA,iBAAA;AAAA;AACnB;AAEF,EAAO,uBAAAH,cAAA,CAAA,aAAA,CAAC,UAAO,KAAO,EAAA,IAAA,EAAM,WAAU,wBAC5B,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,YACX,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,KAAK,GAAM,CAAA,EAAA,SAAA,EAAU,iDACpC,KACL,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,KAAK,GAAM,CAAA,EAAA,aAAA,EAAe,KACzC,cACL,CACJ,mBAECA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,YAAA,EAAA,kBACVA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,IAAA,CAAK,QAAO,WAAc,GAAA,aAAA,CAAc,2CAAa,SAAS,CAAA,GAAI,EAAG,CAC7F,CACJ,CAAA;AACR,CAAC,CAAA;AAOY,MAAA,+BAAA,GAAkE,SAAS,eAAgB,CAAA;AAAA,EACtG,WAAA;AAAA,EAEA,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAG,EAAA;AA1UH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA4UE,EAAM,MAAA,YAAA,GAAe,OAAO,IAAI,CAAA;AAEhC,EAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,eAA2C,CAAA;AACjE,EAAA,MAAM,mBAAsB,GAAA,WAAA,CAAY,CAAC,QAAA,EAAU,eAAe,IAAS,KAAA;AA/U7E,IAAA,IAAAC,GAAAC,EAAAA,GAAAA;AAgVI,IAAI,IAAA;AACF,MAAOA,OAAAA,CAAAA,GAAAA,GAAAA,CAAAD,MAAA,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,OAAA,KAAP,gBAAAA,GAAiB,CAAA,QAAA,CAAA,KAAjB,OAAAC,GAA8B,GAAA,YAAA;AAAA,aAC9BE,MAAP,EAAA;AACA,MAAQ,OAAA,CAAA,KAAA,CAAM,CAAiC,8BAAA,EAAA,QAAA,CAAA,CAAA,CAAA,EAAaA,MAAK,CAAA;AACjE,MAAO,OAAA,YAAA;AAAA;AACT,GACF,EAAG,CAAC,KAAK,CAAC,CAAA;AACV,EAAM,MAAA,QAAA,GAAW,YAAY,CAAS,KAAA,KAAA;AACpC,IAAI,IAAA;AACF,MAAA,IAAA,CAAK,KAAK,CAAA;AAAA,aACHA,MAAP,EAAA;AACA,MAAQ,OAAA,CAAA,KAAA,CAAM,uCAAyCA,EAAAA,MAAAA,EAAO,KAAK,CAAA;AAAA;AACrE,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAM,MAAA;AAAA,IACJ,IAAM,EAAA,cAAA;AAAA,IACN,OAAS,EAAA,oBAAA;AAAA,IACT,KAAA;AAAA,IACA,OAAS,EAAA,qBAAA;AAAA,IACT;AAAA,MACE,sBAAuB,CAAA;AAAA,IACzB,SAAW,EAAA;AAAA,MACT,SAAA,EAAA,CAAW,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,KAAT,IAAa,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,EAAA;AAAA,MACxB,IAAA;AAAA,MACA,KAAO,EAAA;AAAA,KACT;AAAA,IACA,WAAa,EAAA,mBAAA;AAAA,IACb,aAAa,CAAQ,IAAA,KAAA;AA7WzB,MAAA,IAAAH,GAAAC,EAAAA,GAAAA;AA8WM,MAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,4CAAA,EAA+C,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAOA,OAAAD,GAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,cAAN,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAsB,IAAtB,KAAA,IAAA,GAAA,MAAA,GAAAC,GAA4B,CAAA,MAAA,IAAS,iBAAiB,aAAa,CAAA;AAAA,KAChJ;AAAA,IACA,OAAA,EAAS,CAAAE,MAAS,KAAA;AAChB,MAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,2CAAA,EAA8C,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAOA,MAAK,CAAA;AAAA;AACnF,GACD,CAAA;AAGD,EAAAJ,cAAA,CAAM,UAAU,MAAM;AAtXxB,IAAAC,IAAAA,GAAAA;AAuXI,IAAA,IAAI,mCAAS,EAAI,EAAA;AACf,MAAS,QAAA,CAAA;AAAA,QACP,MAAM,OAAQ,CAAA,eAAA;AAAA,QACd,IAAM,EAAA;AAAA,UACJ,SAAWA,EAAAA,CAAAA,GAAAA,GAAA,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,KAAT,gBAAAA,GAAa,CAAA,QAAA,EAAA;AAAA,UACxB,WAAA;AAAA,UACA;AAAA;AACF,OACD,CAAA;AACD,MAAS,QAAA,CAAA;AAAA,QACP,MAAM,OAAQ,CAAA,SAAA;AAAA,QACd,IAAM,EAAA;AAAA,UACJ,KAAA,EAAA,CAAO,mCAAS,KAAS,KAAA;AAAA;AAC3B,OACD,CAAA;AAAA;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAU,GAAA,KAAA;AAAA,KACzB;AAAA,KACC,CAAC,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,IAAI,WAAa,EAAA,IAAA,EAAM,QAAQ,CAAC,CAAA;AAG7C,EAAAD,cAAA,CAAM,UAAU,MAAM;AA7YxB,IAAA,IAAAC,KAAAC,GAAAC,EAAAA,GAAAA;AA8YI,IAAI,IAAA,cAAA,IAAkB,aAAa,OAAS,EAAA;AAC1C,MAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,qCAAA,EAAwC,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAcD,OAAAD,GAAA,GAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,cAAhB,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAgC,CAAA,IAAA,KAAhC,IAAAC,GAAAA,MAAAA,GAAAA,GAAAA,CAAsC,WAAU,CAAC,CAAA;AAC5H,MAAS,QAAA,CAAA;AAAA,QACP,MAAM,OAAQ,CAAA,sBAAA;AAAA,QACd,IAAM,EAAA;AAAA,UACJ,kBAAgBC,GAAA,GAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,mBAAhB,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAgC,SAAQ;AAAC;AAC3D,OACD,CAAA;AAAA;AACH,KACC,CAAC,cAAA,EAAgB,YAAY,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,EAAI,QAAQ,CAAC,CAAA;AAGtD,EAAM,MAAA,WAAA,GAAc,mBAAoB,CAAA,aAAA,EAAe,IAAI,CAAA;AAC3D,EAAM,MAAA,mBAAA,GAAsB,mBAAoB,CAAA,qBAAA,EAAuB,IAAI,CAAA;AAG3E,EAAAH,cAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,MAAM,SAAY,GAAA,CAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,QAAW,IAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,WAAW,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,EAAA;AAC/E,MAAS,QAAA,CAAA;AAAA,QACP,MAAM,OAAQ,CAAA,0BAAA;AAAA,QACd,IAAM,EAAA;AAAA,UACJ,mBAAqB,EAAA;AAAA;AACvB,OACD,CAAA;AAAA;AACH,GACC,EAAA,CAAC,WAAa,EAAA,QAAQ,CAAC,CAAA;AAC1B,EAAM,MAAA,mBAAA,GAAsBA,cAAM,CAAA,OAAA,CAAQ,MAAM;AAzalD,IAAAC,IAAAA,GAAAA,EAAAC,GAAAC,EAAAA,GAAAA,EAAAE,GAAA,EAAA,EAAA,EAAA,EAAA;AA0aI,IAAA,IAAI,EAAC,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,OAAA,CAAA;AAAS,MAAO,OAAA,IAAA;AAC9B,IAAM,MAAA,UAAA,GAAA,CAAkBF,GAAAD,GAAAA,CAAAA,GAAAA,GAAAA,CAAAD,GAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,YAAT,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAkB,MAAO,CAAA,CAAC,CAAQ,KAAA;AA3a9D,MAAAA,IAAAA,GAAAA;AA2aiE,MAAA,OAAA,CAAA,KAAM,UAAQA,GAAA,GAAA,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,SAAH,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAS,SAAO,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,EAAA,CAAA;AAAA,KAAA,CAAA,KAAhF,IAAAC,GAAAA,MAAAA,GAAAA,GAAAA,CAAqF,GAAI,CAAA,CAAC,EAAS,KAAA;AA3a/H,MAAAD,IAAAA,GAAAA;AA2akI,MAAA,OAAA,CAAAA,GAAA,GAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,IAAJ,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAU,CAAA,EAAA;AAAA,KAAhH,CAAA,KAAA,IAAA,GAAAE,MAAuH,EAAC;AAChJ,IAAA,MAAM,SAAiBE,GAAAA,CAAAA,GAAAA,GAAA,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,OAAA,KAAT,gBAAAA,GAAkB,CAAA,EAAA;AACzC,IAAM,MAAA,SAAA,GAAA,CAAiB,OAAG,CAAA,MAAA,CAAO,YAAY,SAAS,CAAA,KAA/B,YAAoC,EAAC;AAC5D,IAAO,OAAA,CAAA,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,MAAO,CAAA,CAAC,CAAQ,EAAA,GAAA,KAAA,CAAa,uCAAW,OAAQ,CAAA,CAAA,CAAA,MAAO,GAAlE,CAAA,KAAA,IAAA,GAAA,EAAA,GAA0E,EAAC;AAAA,GACjF,EAAA,CAAC,OAAS,EAAA,WAAW,CAAC,CAAA;AACzB,EAAM,MAAA,YAAA,GAAeL,cAAM,CAAA,OAAA,CAAQ,MAAM;AAhb3C,IAAAC,IAAAA,GAAAA;AAibI,IAAA,IAAI,EAAC,mBAAqB,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAA,MAAA,CAAA;AAAQ,MAAO,OAAA,IAAA;AACzC,IAAA,OAAA,CAAO,mBAAqB,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAA,MAAA,MAAU,mBAAqB,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAA,QAAA,CAAS,2CAAa,EAAM,CAAA,CAAA,GAAA,IAAA,GAAA,CAAO,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,QAAA,IAAW,2CAAa,QAAWA,GAAAA,CAAAA,GAAAA,GAAA,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,EAAA,KAAb,OAAAA,GAAmB,GAAA,CAAA;AAAA,GAChK,EAAA,CAAC,mBAAqB,EAAA,WAAA,EAAa,WAAW,CAAC,CAAA;AAGlD,EAA2B,YAAY,MAAM;AAtb/C,IAAAA,IAAAA,GAAAA;AAubI,IAAI,IAAA,CAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,EAAM,KAAA,YAAA,CAAa,OAAS,EAAA;AACvC,MAAQ,OAAA,CAAA,GAAA,CAAI,2CAA6C,EAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,EAAE,CAAA;AAEpE,MAAS,QAAA,CAAA;AAAA,QACP,MAAM,OAAQ,CAAA;AAAA,OACf,CAAA;AAGD,MAAsB,qBAAA,CAAA;AAAA,QACpB,SAAWA,EAAAA,CAAAA,GAAAA,GAAA,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,KAAT,gBAAAA,GAAa,CAAA,QAAA,EAAA;AAAA,QACxB,IAAA;AAAA,QACA,KAAO,EAAA;AAAA,OACR,CAAE,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA;AAncxB,QAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAqcQ,QAAIA,IAAAA,CAAAA,CAAAA,GAAAA,GAAAA,CAAAD,GAAA,GAAA,MAAA,CAAO,IAAP,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAa,CAAA,cAAA,KAAb,IAAAC,GAAAA,MAAAA,GAAAA,GAAAA,CAA6B,IAAQ,KAAA,YAAA,CAAa,OAAS,EAAA;AAC7D,UAAQ,OAAA,CAAA,GAAA,CAAI,aAAa,MAAO,CAAA,IAAA,CAAK,eAAe,IAAK,CAAA,MAAA,CAAA,6BAAA,EAAsC,mCAAS,EAAI,CAAA,CAAA,CAAA;AAC5G,UAAS,QAAA,CAAA;AAAA,YACP,MAAM,OAAQ,CAAA,sBAAA;AAAA,YACd,IAAM,EAAA;AAAA,cACJ,cAAA,EAAgB,MAAO,CAAA,IAAA,CAAK,cAAe,CAAA;AAAA;AAC7C,WACD,CAAA;AAAA;AAEH,QAAS,QAAA,CAAA;AAAA,UACP,MAAM,OAAQ,CAAA;AAAA,SACf,CAAA;AAAA,OACF,CAAE,CAAA,KAAA,CAAM,CAAO,GAAA,KAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,kCAAkC,GAAG,CAAA;AACnD,QAAS,QAAA,CAAA;AAAA,UACP,MAAM,OAAQ,CAAA;AAAA,SACf,CAAA;AAAA,OACF,CAAA;AAAA;AACH,GACF,EAAG,CAAC,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,EAAI,uBAAuB,QAAU,EAAA,YAAA,EAAc,IAAI,CAAC;AAGrE,EAAe,cAAA,CAAAF,cAAA,CAAM,YAAY,MAAM;AACrC,IAAA,IAAI,EAAC,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,CAAA;AAAI,MAAA;AAClB,IAAQ,OAAA,CAAA,GAAA,CAAI,6CAA+C,EAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,EAAE,CAAA;AAGtE,IAAS,QAAA,CAAA;AAAA,MACP,MAAM,OAAQ,CAAA;AAAA,KACf,CAAA;AAGD,IAAA,MAAM,iBAAiB,YAAY;AArevC,MAAAC,IAAAA,GAAAA,EAAAC,GAAAC,EAAAA,GAAAA,EAAAE,GAAA,EAAA,EAAA,EAAA,EAAA;AAseM,MAAI,IAAA;AAEF,QAAM,MAAA,MAAA,GAAS,MAAM,qBAAsB,CAAA;AAAA,UACzC,SAAWJ,EAAAA,CAAAA,GAAAA,GAAA,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,EAAA,KAAT,gBAAAA,GAAa,CAAA,QAAA,EAAA;AAAA,UACxB,IAAA;AAAA,UACA,KAAO,EAAA;AAAA,SACR,CAAA;AAGD,QAAA,OAAA,CAAQ,IAAI,CAA2BI,wBAAAA,EAAAA,CAAAA,CAAAA,GAAAA,GAAAA,CAAAF,OAAAD,GAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,SAAR,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAc,cAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAC,IAA8B,IAA9B,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAE,IAAoC,MAAU,KAAA,CAAA,CAAA,sBAAA,EAA0B,mCAAS,EAAI,CAAA,CAAA,CAAA;AAC5H,QAAA,IAAA,CAAA,CAAI,4CAAQ,IAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,mBAAd,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,KAAQ,aAAa,OAAS,EAAA;AAE9D,UAAS,QAAA,CAAA;AAAA,YACP,MAAM,OAAQ,CAAA,sBAAA;AAAA,YACd,IAAM,EAAA;AAAA,cACJ,cAAA,EAAgB,MAAO,CAAA,IAAA,CAAK,cAAe,CAAA;AAAA;AAC7C,WACD,CAAA;AAAA;AACH,eACOD,MAAP,EAAA;AACA,QAAQ,OAAA,CAAA,KAAA,CAAM,8CAA8CA,MAAK,CAAA;AAAA,OACjE,SAAA;AACA,QAAA,IAAI,aAAa,OAAS,EAAA;AACxB,UAAS,QAAA,CAAA;AAAA,YACP,MAAM,OAAQ,CAAA;AAAA,WACf,CAAA;AAAA;AACH;AACF,KACF;AAGA,IAAe,cAAA,EAAA;AACf,IAAA,OAAO,MAAM;AAAA,KAEb;AAAA,GACF,EAAG,CAAC,UAAA,EAAY,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,EAAI,uBAAuB,QAAU,EAAA,IAAA,EAAM,YAAY,CAAC,CAAC,CAAA;AAClF,EAAA,oDAAQ,SAAU,EAAA,EAAA,OAAA,EAAS,MAAM,CAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,QAAO,iBAAqB,IAAA,MAAA,CAAO,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,EAAI,mCAAS,KAAO,EAAA,YAAY,CAAG,EAAA,SAAA,EAAU,4EAA2E,KAAO,EAAA;AAAA,IACnN,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,SAAA;AAAA,IACb,cAAgB,EAAA;AAAA,uBAEPJ,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,KAAO,EAAA,IAAA,EAAM,WAAU,yCAC3B,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,iDACVA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,KAAK,uBAA0B,IAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,KAAI,IAAM,EAAA,IAAA,EAAM,SAAU,EAAA,oCAAA,EAAA,+CACrE,kBAAmB,EAAA,IAAA,EAAA,GAAA,EAAE,SAAU,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,YAAT,IAAkB,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,KAAlB,IAA4B,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,CAAO,EAAE,CAAE,CAAA,+CACtE,WAAY,EAAA,EAAA,GAAA,EAAI,cAAa,KAAO,EAAA;AAAA,IACjD,YAAc,EAAA,CAAA;AAAA,IACd,WAAa,EAAA,CAAA;AAAA,IACb,WAAa,EAAA;AAAA,KACZ,MAAQ,EAAA;AAAA,IACT,GAAA,EAAA,CAAK,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,OAAA,KAAT,IAAkB,GAAA,MAAA,GAAA,EAAA,CAAA;AAAA,GACtB,EAAA,CACO,CACJ,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,QAAA,EAAA,kBACVA,cAAA,CAAA,aAAA,CAAA,6BAAA,EAAA,EAA8B,OAAkB,EAAA,WAAA,EAA0B,wBAAwB,MAAG;AA7hB1H,IAAAC,IAAAA,GAAAA;AA6hB6H,IAAgB,OAAA,eAAA,CAAA;AAAA,MACnI,QAAU,EAAAK,8BAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,SAAWL,EAAAA,CAAAA,GAAAA,GAAA,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA,KAAT,gBAAAA,GAAa,CAAA,QAAA,EAAA;AAAA,QACxB,YAAA,EAAc,eAAe,mBAAsB,GAAA;AAAA,OACrD;AAAA,MACA,WAAA,EAAa,CAAC,IAAM,EAAA;AAAA,QAClB;AAAA,OACS,KAAA;AAriBrB,QAAAA,IAAAA,GAAAA,EAAAC,GAAAC,EAAAA,GAAAA,EAAAE,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsiBY,QAAA,IAAI,CAAC,gBAAiB,CAAA,IAAA;AAAM,UAAO,OAAA,IAAA;AACnC,QAAM,MAAA,iBAAA,GAAA,CAAyBH,OAAAD,GAAA,GAAA,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAkB,SAAlB,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAwB,oBAAxB,KAAA,IAAA,GAAA,MAAA,GAAAC,GAA8C,CAAA,IAAA;AAC7E,QAAM,MAAA,UAAA,GAAA,CAAkBG,OAAAF,GAAA,GAAA,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAkB,SAAlB,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAwB,oBAAxB,KAAA,IAAA,GAAA,MAAA,GAAAE,GAA8C,CAAA,WAAA;AACtE,QAAA,OAAA,CAAQ,IAAI,yCAA2C,EAAA;AAAA,UACrD,WAAW,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,EAAA;AAAA,UACpB,UAAU,iBAAmB,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA,EAAA;AAAA,UAC7B,UAAA,EAAY,CAAC,CAAC,UAAA;AAAA,UACd,WAAS,EAAY,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,OAAA,KAAZ,IAAqB,GAAA,MAAA,GAAA,EAAA,CAAA,SAAA,CAAU,GAAG,EAAM,CAAA,IAAA;AAAA,SAClD,CAAA;AACD,QAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,cAAN,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,SAAtB,IAA4B,GAAA,MAAA,GAAA,EAAA,CAAA,GAAA,CAAI,CAAC,CAAA,KAAW,CAAE,CAAA,EAAA,MAAO,iBAAmB,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA,EAAA,CAAA,GAAK,iCACrF,CADqF,CAAA,EAAA;AAAA,UAExF,OAAS,EAAA,CAAC,GAAG,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,SAAS,UAAU,CAAA;AAAA,UACnC,YAAY,iBAAmB,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA,UAAA;AAAA,UAC/B,aAAa,iBAAmB,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA,WAAA;AAAA,UAChC,WAAW,iBAAmB,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA;AAAA,SAChC,CAAA,GAAI,CANS,CAAA,KAAA,IAAA,GAAA,EAAA,GAMH,EAAC;AAGX,QAAA,IAAI,aAAa,OAAS,EAAA;AACxB,UAAS,QAAA,CAAA;AAAA,YACP,MAAM,OAAQ,CAAA,sBAAA;AAAA,YACd,IAAM,EAAA;AAAA,cACJ,iBAAgB,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,MAAA,IAAS,CAAI,GAAA,IAAA,GAAO,CAAC,iBAAiB,CAAA;AAAA,cAC5D,iBAAmB,EAAA;AAAA;AACrB,WACD,CAAA;AAAA;AAEH,QAAA,OAAO,MAAO,CAAA,MAAA,CAAO,EAAC,EAAG,IAAM,EAAA;AAAA,UAC7B,cAAA,EAAgB,aACX,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,cADK,CAAA,EAAA;AAAA,YAEd,UAAA,EAAA,CAAY,EAAmB,GAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA,UAAA,KAAnB,IAAiC,GAAA,EAAA,GAAA,CAAA;AAAA,YAC7C,OAAM,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,MAAA,IAAS,CAAI,GAAA,IAAA,GAAO,CAAC,iBAAiB;AAAA,WACpD;AAAA,SACD,CAAA;AAAA;AACH,KACD,CAAA;AAAA,GAAG,EAAA,CACI,CACJ,CACJ,CAAA;AACR;AACa,MAAA,sBAAA,GAAyBL,cAAM,CAAA,IAAA,CAAK,+BAA+B"}
|
|
1
|
+
{"version":3,"file":"ServiceDialogsListItem.js","sources":["../../../../src/screens/inbox/components/ServiceDialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef } from 'react';\nimport {\n Text,\n Image,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n View,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, IUserAccount } from 'common';\nimport {\n useOnThreadCreatedUpdatedSubscription,\n useOnThreadChatMessageAddedSubscription,\n useThreadMessagesQuery,\n OnThreadCreatedUpdatedDocument as THREAD_CHAT_ADDED,\n OnThreadChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue) => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n // Check if the date is valid by seeing if it returns a valid time value\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogListItemProps {\n currentUser?: any;\n users?: any;\n selectedChannelId?: any;\n channel?: any;\n onOpen: (id: any, title: any, postParentId?: any) => void;\n refreshing: boolean;\n role: any;\n}\n\n// Helper function to compute the last message from a list of messages\nconst computeLastMessage = (threadMessages) => {\n if (!threadMessages || !threadMessages.length) return null;\n\n // Extract the post and replies from thread messages\n let posts = [];\n let replies = [];\n\n // Helper function to check if a message is an image or contains only image content\n const isTextMessage = (msg) => {\n if (!msg) return false;\n\n // If message is empty or only contains image-specific markers, ignore it\n if (!msg.message || msg.message === '') return false;\n\n // Check if message looks like an image URL or reference\n const isImageMessage =\n msg.message.includes('<img') ||\n msg.message.includes('[Image]') ||\n msg.message.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(msg.message) &&\n (msg.message.includes('http') || msg.message.includes('/images/')));\n\n // Return true only for text messages (not image messages)\n return !isImageMessage;\n };\n\n threadMessages.forEach((thread) => {\n if (thread?.post && isTextMessage(thread.post)) {\n posts.push(thread.post);\n }\n if (thread?.replies?.length) {\n replies = [...replies, ...thread.replies.filter((r) => isTextMessage(r))];\n }\n });\n\n // Combine and sort all messages\n const allMessages = [...posts, ...replies];\n if (!allMessages.length) return null;\n\n // Return the most recent message - use safe date comparison\n return allMessages.reduce((a, b) => {\n const dateA = safeDate(a?.createdAt);\n const dateB = safeDate(b?.createdAt);\n\n // If either date is invalid, prefer the message with valid date\n if (!dateA) return b;\n if (!dateB) return a;\n\n return dateA > dateB ? a : b;\n }, allMessages[0]);\n};\n\nconst ServiceChannelWithLastMessage = React.memo(\n ({ channel, lastMessage, subscribeToNewMessages, subscribeToChatMessages }: any) => {\n React.useEffect(() => {\n console.log(`Setting up subscriptions for channel ${channel?.id}`);\n // Subscribe and store the unsubscribe functions\n let threadUnsubscribe;\n let chatUnsubscribe;\n\n try {\n threadUnsubscribe = subscribeToNewMessages();\n chatUnsubscribe = subscribeToChatMessages();\n } catch (error) {\n console.error(`Error setting up subscriptions for channel ${channel?.id}:`, error);\n }\n\n return () => {\n // Cleanup subscriptions on unmount\n if (threadUnsubscribe && typeof threadUnsubscribe === 'function') {\n try {\n console.log(`Cleaning up thread subscription for channel ${channel?.id}`);\n threadUnsubscribe();\n } catch (error) {\n console.error(`Error cleaning up thread subscription for channel ${channel?.id}:`, error);\n }\n }\n\n if (chatUnsubscribe && typeof chatUnsubscribe === 'function') {\n try {\n console.log(`Cleaning up chat subscription for channel ${channel?.id}`);\n chatUnsubscribe();\n } catch (error) {\n console.error(`Error cleaning up chat subscription for channel ${channel?.id}:`, error);\n }\n }\n };\n }, [subscribeToNewMessages, subscribeToChatMessages, channel?.id]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`ServiceChannelWithLastMessage rendered for channel ${channel?.id}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? safeDate(lastMessage.createdAt)?.toISOString() : 'none',\n });\n }, [lastMessage, channel?.id]);\n\n const count = 30;\n const title = channel?.title.slice(0, count) + (channel?.title.length > count ? '...' : '');\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n // Check for file attachments\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n\n // Check if the message appears to be an image\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {title}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{lastMessage ? createdAtText(lastMessage?.createdAt) : ''}</Text>\n </Box>\n </HStack>\n );\n },\n);\n\n/**\n * TODO:\n * - Get Reservation info: reservation date, status\n * - Add ability to get property information: name, logo\n */\nexport const ServiceDialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n refreshing,\n role,\n}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());\n\n // Query for thread messages\n const {\n data: threadMessagesData,\n loading: threadMessageLoading,\n error,\n refetch: refetchThreadMessages,\n subscribeToMore,\n } = useThreadMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n },\n fetchPolicy: 'cache-and-network',\n onCompleted: (data) => {\n console.log(\n `Completed thread messages query for channel ${channel?.id}:`,\n data?.threadMessages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\n console.error(`Error fetching thread messages for channel ${channel?.id}:`, error);\n },\n });\n\n // Extract threadMessages data for easier access\n const threadMessages = threadMessagesData?.threadMessages?.data || [];\n\n // Calculate lastMessage directly from threadMessages\n const lastMessage = useMemo(() => {\n return computeLastMessage(threadMessages);\n }, [threadMessages]);\n\n // Calculate servicePostParentId based on lastMessage\n const servicePostParentId = useMemo(() => {\n if (!lastMessage) return null;\n return lastMessage?.parentId ? lastMessage?.parentId : lastMessage?.id;\n }, [lastMessage]);\n\n // Handle component unmount\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const creatorAndMembersId = useMemo(() => {\n if (!channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [channel, currentUser]);\n\n const postParentId = useMemo(() => {\n if (!creatorAndMembersId?.length) return null;\n\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [creatorAndMembersId, lastMessage, currentUser]);\n\n // Function to force refresh the component state\n const refreshThreadState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing thread state refresh for channel:', channel?.id);\n\n // Refetch messages from server\n refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n }).catch((err) => {\n console.error('Error refreshing thread state:', err);\n });\n }\n }, [channel?.id, refetchThreadMessages, isMountedRef, role]);\n\n // Reset subscriptions when the component gains focus\n useFocusEffect(\n React.useCallback(() => {\n // Force subscription refresh\n setSubscriptionsTimestamp(Date.now());\n\n // Existing focus effect logic...\n if (!channel?.id) return;\n\n console.log('ServiceDialogsListItem focused for channel:', channel?.id);\n\n // Use a direct refetch with network-only policy to force fresh data\n const fetchFreshData = async () => {\n try {\n // Force a network-only fetch\n await refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n });\n } catch (error) {\n console.error('Error refetching thread messages on focus:', error);\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [refreshing, channel?.id, refetchThreadMessages, role]),\n );\n\n return (\n <Pressable\n // onPress={() => channel?.id !== selectedChannelId && onOpen(channel?.id, channel?.title, postParentId)}\n onPress={() => onOpen(channel?.id, channel?.title, postParentId)}\n className=\"flex-1 rounded-md border-gray-200 dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] px-2 py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText> {startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n </Box>\n <Box className=\"flex-1\">\n <ServiceChannelWithLastMessage\n key={`channel-${channel?.id}-${subscriptionsTimestamp}`}\n channel={channel}\n lastMessage={lastMessage}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: THREAD_CHAT_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData?.data) {\n console.log(`No subscription data for channel ${channel?.id}`);\n return prev;\n }\n\n try {\n const newPostThreadData: any =\n subscriptionData?.data?.threadCreatedUpdated?.data;\n const newMessage: any =\n subscriptionData?.data?.threadCreatedUpdated?.lastMessage;\n\n if (!newPostThreadData || !newMessage) {\n console.log(`Missing data in subscription for channel ${channel?.id}`);\n return prev;\n }\n\n console.log('New thread message subscription update:', {\n channelId: channel?.id,\n threadId: newPostThreadData?.id,\n hasMessage: !!newMessage,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n // Create a safe copy of the previous data\n const prevThreads = prev?.threadMessages?.data || [];\n\n // Check if this thread already exists\n const threadExists = prevThreads.some(\n (t: any) => t.id === newPostThreadData?.id,\n );\n\n let updatedThreads;\n if (threadExists) {\n // Update existing thread\n updatedThreads = prevThreads.map((t: any) =>\n t.id === newPostThreadData?.id\n ? {\n ...t,\n replies: [...(t?.replies || []), newMessage],\n replyCount: newPostThreadData?.replyCount,\n lastReplyAt: newPostThreadData?.lastReplyAt,\n updatedAt: newPostThreadData?.updatedAt,\n }\n : t,\n );\n } else {\n // Add new thread\n updatedThreads = [...prevThreads, newPostThreadData];\n }\n\n return {\n ...prev,\n threadMessages: {\n ...prev?.threadMessages,\n totalCount:\n newPostThreadData?.totalCount ??\n prev?.threadMessages?.totalCount ??\n 0,\n data: updatedThreads,\n },\n };\n } catch (error) {\n console.error(\n `Error processing subscription data for channel ${channel?.id}:`,\n error,\n );\n return prev;\n }\n },\n onError: (error) => {\n console.error(`Thread subscription error for channel ${channel?.id}:`, error);\n },\n })\n }\n subscribeToChatMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData?.data) {\n console.log(`No chat message subscription data for channel ${channel?.id}`);\n return prev;\n }\n\n try {\n const newMessage = subscriptionData?.data?.chatMessageAdded;\n\n if (!newMessage) {\n console.log(\n `Missing chat message data in subscription for channel ${channel?.id}`,\n );\n return prev;\n }\n\n console.log('New chat message subscription update:', {\n channelId: channel?.id,\n messageId: newMessage?.id,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n // Find the thread this message belongs to\n const prevThreads = prev?.threadMessages?.data || [];\n const threadIndex = prevThreads.findIndex((t: any) => {\n // Check if this message belongs to this thread\n if (newMessage.parentId && t.post?.id === newMessage.parentId) {\n return true;\n }\n // Check replies\n if (t.replies && t.replies.some((r: any) => r.id === newMessage.parentId)) {\n return true;\n }\n return false;\n });\n\n if (threadIndex === -1) {\n console.log(\n `Cannot find thread for chat message in channel ${channel?.id}`,\n );\n return prev;\n }\n\n // Update the thread with the new message\n const updatedThreads = [...prevThreads];\n const thread = { ...updatedThreads[threadIndex] };\n\n // Add message to replies\n thread.replies = [...(thread.replies || []), newMessage];\n\n // Fix for arithmetic operation type error\n const currentReplyCount =\n typeof thread.replyCount === 'number' ? thread.replyCount : 0;\n thread.replyCount = currentReplyCount + 1;\n\n thread.lastReplyAt = newMessage.createdAt;\n thread.updatedAt = newMessage.createdAt;\n\n updatedThreads[threadIndex] = thread;\n\n return {\n ...prev,\n threadMessages: {\n ...prev?.threadMessages,\n data: updatedThreads,\n },\n };\n } catch (error) {\n console.error(\n `Error processing chat message subscription for channel ${channel?.id}:`,\n error,\n );\n return prev;\n }\n },\n onError: (error) => {\n console.error(`Chat message subscription error for channel ${channel?.id}:`, error);\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const ServiceDialogsListItem = React.memo(ServiceDialogsListItemComponent);\n"],"names":["React","_a","_b","_c","error","_d","_e","THREAD_CHAT_ADDED","CHAT_MESSAGE_ADDED"],"mappings":"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"}
|
|
@@ -80,10 +80,8 @@ class Bubble extends React__default.Component {
|
|
|
80
80
|
_id
|
|
81
81
|
} = messageImageProps == null ? void 0 : messageImageProps.currentMessage;
|
|
82
82
|
if (!image || typeof image !== "string") {
|
|
83
|
-
console.log("Invalid image URL:", image);
|
|
84
83
|
return null;
|
|
85
84
|
}
|
|
86
|
-
console.log("Rendering message image:", image);
|
|
87
85
|
return /* @__PURE__ */ React__default.createElement(TouchableHighlight, { underlayColor: "transparent", style: {
|
|
88
86
|
width: "100%",
|
|
89
87
|
marginVertical: 5
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackBubble.js","sources":["../../../../../src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx"],"sourcesContent":["/* eslint-disable no-underscore-dangle, no-use-before-define */\nimport React from 'react';\nimport { Text, StyleSheet, TouchableOpacity, TouchableHighlight, View, Platform, Dimensions } from 'react-native';\n\nimport { MessageText, MessageImage, Time, utils } from 'react-native-gifted-chat';\nimport CachedImage from '../CachedImage';\nconst { isSameUser, isSameDay } = utils;\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\n\nexport default class Bubble extends React.Component<any> {\n static defaultProps: {\n touchableProps: {};\n onLongPress: null;\n renderMessageImage: null;\n renderMessageText: null;\n renderCustomView: null;\n renderTime: null;\n currentMessage: { text: null; createdAt: null; image: null };\n nextMessage: {};\n previousMessage: {};\n containerStyle: {};\n wrapperStyle: {};\n tickStyle: {};\n containerToNextStyle: {};\n containerToPreviousStyle: {};\n isShowImageViewer: false;\n setImageViewer: (obj: any, v: boolean) => void;\n };\n static propTypes: any;\n constructor(props: any) {\n super(props);\n }\n\n renderMessageText() {\n if (this.props.currentMessage.text) {\n const { containerStyle, wrapperStyle, messageTextStyle, ...messageTextProps } = this.props;\n if (this.props.renderMessageText) {\n return this.props.renderMessageText(messageTextProps);\n }\n return (\n <MessageText\n {...messageTextProps}\n textStyle={{\n left: [\n styles.standardFont,\n styles.slackMessageText,\n messageTextProps.textStyle,\n messageTextStyle,\n ],\n }}\n />\n );\n }\n return null;\n }\n\n renderMessageImage() {\n if (this.props.currentMessage.image) {\n const { containerStyle, wrapperStyle, ...messageImageProps } = this.props;\n if (this.props.renderMessageImage) {\n return this.props.renderMessageImage(messageImageProps);\n }\n const { image, _id } = messageImageProps?.currentMessage;\n\n // Add validation for image URL\n if (!image || typeof image !== 'string') {\n console.log('Invalid image URL:', image);\n return null;\n }\n\n // Log the image URL for debugging\n console.log('Rendering message image:', image);\n\n return (\n <TouchableHighlight\n underlayColor={'transparent'}\n style={{ width: '100%', marginVertical: 5 }}\n onPress={() => this.props.setImageViewer(messageImageProps?.currentMessage, true)}\n >\n <View\n style={{\n width: windowWidth * 0.6, // 60% of screen width\n height: windowWidth * 0.4, // Maintain aspect ratio\n maxHeight: 200,\n borderRadius: 8,\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n backgroundColor: '#f7f7f7',\n }}\n >\n <CachedImage\n style={[styles.slackImage, { width: '100%', height: '100%' }]}\n cacheKey={`${_id}-slack-bubble-imageKey`}\n source={{\n uri: image,\n expiresIn: 86400,\n }}\n resizeMode={'cover'}\n alt={'image'}\n placeholderContent={\n <View\n style={[\n styles.slackImage,\n {\n width: '100%',\n height: '100%',\n backgroundColor: '#e1e1e1',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 8,\n },\n ]}\n >\n <Text>Loading...</Text>\n </View>\n }\n />\n </View>\n </TouchableHighlight>\n );\n }\n return null;\n }\n\n renderTicks() {\n const { currentMessage } = this.props;\n if (this.props.renderTicks) {\n return this.props.renderTicks(currentMessage);\n }\n if (currentMessage.user._id !== this.props.user._id) {\n return null;\n }\n if (currentMessage.sent || currentMessage.received) {\n return (\n <View style={[styles.headerItem, styles.tickView]}>\n {currentMessage.sent && (\n <Text style={[styles.standardFont, styles.tick, this.props.tickStyle]}>✓</Text>\n )}\n {currentMessage.received && (\n <Text style={[styles.standardFont, styles.tick, this.props.tickStyle]}>✓</Text>\n )}\n </View>\n );\n }\n return null;\n }\n\n renderUsername() {\n const username = this.props.currentMessage.user.name;\n if (username) {\n const { containerStyle, wrapperStyle, ...usernameProps } = this.props;\n if (this.props.renderUsername) {\n return this.props.renderUsername(usernameProps);\n }\n return (\n <Text style={[styles.standardFont, styles.headerItem, styles.username, this.props.usernameStyle]}>\n {username}\n </Text>\n );\n }\n return null;\n }\n\n renderTime() {\n if (this.props.currentMessage.createdAt) {\n const { containerStyle, wrapperStyle, ...timeProps }: any = this.props;\n if (this.props.renderTime) {\n return this.props.renderTime(timeProps);\n }\n return (\n <Time\n {...timeProps}\n containerStyle={{ left: [styles.timeContainer] }}\n textStyle={{\n left: [styles.standardFont, styles.headerItem, styles.time, timeProps.textStyle],\n }}\n />\n );\n }\n return null;\n }\n\n renderCustomView() {\n if (this.props.renderCustomView) {\n return this.props.renderCustomView(this.props);\n }\n return null;\n }\n\n render() {\n const isSameThread =\n isSameUser(this.props.currentMessage, this.props.previousMessage) &&\n isSameDay(this.props.currentMessage, this.props.previousMessage);\n\n const messageHeader = isSameThread ? null : (\n <View style={styles.headerView}>\n {this.renderUsername()}\n {this.renderTime()}\n {this.renderTicks()}\n </View>\n );\n\n return (\n <View style={[styles.container, this.props.containerStyle]}>\n <TouchableHighlight\n style={{ width: '100%' }}\n // underlayColor={'#c0c0c0'}\n underlayColor={'transparent'}\n disabled={true}\n accessibilityTraits=\"text\"\n {...this.props.touchableProps}\n >\n <View style={[styles.wrapper, this.props.wrapperStyle]}>\n <View>\n {this.renderCustomView()}\n {messageHeader}\n {this.renderMessageImage()}\n {this.renderMessageText()}\n </View>\n </View>\n </TouchableHighlight>\n </View>\n );\n }\n}\n\n// Note: Everything is forced to be \"left\" positioned with this component.\n// The \"right\" position is only used in the default Bubble.\nconst styles = StyleSheet.create({\n standardFont: {\n fontSize: 15,\n },\n slackMessageText: {\n marginLeft: 0,\n marginRight: 0,\n },\n container: {\n flex: 1,\n alignItems: 'flex-start',\n },\n wrapper: {\n marginRight: 60,\n minHeight: 20,\n justifyContent: 'flex-start',\n },\n username: {\n fontWeight: 'bold',\n top: 0,\n paddingTop: 0,\n marginTop: 0,\n },\n time: {\n textAlign: 'left',\n fontSize: 12,\n },\n timeContainer: {\n marginLeft: 0,\n marginRight: 0,\n marginBottom: 0,\n },\n headerItem: {\n marginRight: 10,\n },\n headerView: {\n // Try to align it better with the avatar on Android.\n marginTop: Platform.OS === 'android' ? -2 : 0,\n flexDirection: 'row',\n alignItems: 'baseline',\n },\n /* eslint-disable react-native/no-color-literals */\n tick: {\n backgroundColor: 'transparent',\n color: 'white',\n },\n /* eslint-enable react-native/no-color-literals */\n tickView: {\n flexDirection: 'row',\n },\n slackImage: {\n borderRadius: 3,\n marginLeft: 8,\n marginRight: 0,\n },\n});\n\n// Bubble.contextTypes = {\n// actionSheet: PropTypes.func,\n// };\n\nBubble.defaultProps = {\n touchableProps: {},\n onLongPress: null,\n renderMessageImage: null,\n renderMessageText: null,\n renderCustomView: null,\n renderTime: null,\n currentMessage: {\n text: null,\n createdAt: null,\n image: null,\n },\n nextMessage: {},\n previousMessage: {},\n containerStyle: {},\n wrapperStyle: {},\n tickStyle: {},\n containerToNextStyle: {},\n containerToPreviousStyle: {},\n isShowImageViewer: false,\n setImageViewer: (obj: any, v: boolean) => null,\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAM;AAAA,EACJ,UAAA;AAAA,EACA;AACF,CAAI,GAAA,KAAA;AACJ,MAAM,WAAc,GAAA,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA,KAAA;AACxB,UAAA,CAAW,GAAI,CAAA,QAAQ,CAAE,CAAA;AACzB,MAAA,MAAA,SAAeA,eAAM,SAAe,CAAA;AAAA,EAwBvD,YAAY,KAAY,EAAA;AACtB,IAAA,KAAA,CAAM,KAAK,CAAA;AAAA;AACb,EACA,iBAAoB,GAAA;AAClB,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,IAAM,EAAA;AAClC,MAAA,MAKI,UAAK,KAJP,EAAA;AAAA,QAAA,cAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OA3CR,GA6CU,EADC,EAAA,gBAAA,GAAA,SAAA,CACD,EADC,EAAA;AAAA,QAHH,gBAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OAAA,CAAA;AAGF,MAAI,IAAA,IAAA,CAAK,MAAM,iBAAmB,EAAA;AAChC,QAAO,OAAA,IAAA,CAAK,KAAM,CAAA,iBAAA,CAAkB,gBAAgB,CAAA;AAAA;AAEtD,MAAA,uBAAQA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAgB,gBAAhB,CAAA,EAAA,EAAkC,SAAW,EAAA;AAAA,QACnD,IAAA,EAAM,CAAC,MAAO,CAAA,YAAA,EAAc,OAAO,gBAAkB,EAAA,gBAAA,CAAiB,WAAW,gBAAgB;AAAA,OAChG,EAAA,CAAA,CAAA;AAAA;AAEL,IAAO,OAAA,IAAA;AAAA;AACT,EACA,kBAAqB,GAAA;AACnB,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,KAAO,EAAA;AACnC,MAAA,MAII,UAAK,KAHP,EAAA;AAAA,QAAA,cAAA;AAAA,QACA;AAAA,OA3DR,GA6DU,EADC,EAAA,iBAAA,GAAA,SAAA,CACD,EADC,EAAA;AAAA,QAFH,gBAAA;AAAA,QACA;AAAA,OAAA,CAAA;AAGF,MAAI,IAAA,IAAA,CAAK,MAAM,kBAAoB,EAAA;AACjC,QAAO,OAAA,IAAA,CAAK,KAAM,CAAA,kBAAA,CAAmB,iBAAiB,CAAA;AAAA;AAExD,MAAM,MAAA;AAAA,QACJ,KAAA;AAAA,QACA;AAAA,UACE,iBAAmB,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA,cAAA;AAGvB,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAU,EAAA;AACvC,QAAQ,OAAA,CAAA,GAAA,CAAI,sBAAsB,KAAK,CAAA;AACvC,QAAO,OAAA,IAAA;AAAA;AAIT,MAAQ,OAAA,CAAA,GAAA,CAAI,4BAA4B,KAAK,CAAA;AAC7C,MAAA,uBAAQA,cAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,EAAmB,aAAe,EAAA,aAAA,EAAe,KAAO,EAAA;AAAA,QAC9D,KAAO,EAAA,MAAA;AAAA,QACP,cAAgB,EAAA;AAAA,OACf,EAAA,OAAA,EAAS,MAAM,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,iBAAmB,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAA,cAAA,EAAgB,IAAI,CAAA,EAAA,kBACpEA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA;AAAA,QACvB,OAAO,WAAc,GAAA,GAAA;AAAA,QAErB,QAAQ,WAAc,GAAA,GAAA;AAAA,QAEtB,SAAW,EAAA,GAAA;AAAA,QACX,YAAc,EAAA,CAAA;AAAA,QACd,QAAU,EAAA,QAAA;AAAA,QACV,WAAa,EAAA,CAAA;AAAA,QACb,WAAa,EAAA,SAAA;AAAA,QACb,eAAiB,EAAA;AAAA,2BAEFA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,QACpD,KAAO,EAAA,MAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACT,CAAA,EAAG,QAAU,EAAA,CAAA,EAAG,6BAA6B,MAAQ,EAAA;AAAA,QACpD,GAAK,EAAA,KAAA;AAAA,QACL,SAAW,EAAA;AAAA,OACb,EAAG,UAAY,EAAA,OAAA,EAAS,GAAK,EAAA,OAAA,EAAS,kBAAoB,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,QACzF,KAAO,EAAA,MAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,eAAiB,EAAA,SAAA;AAAA,QACjB,cAAgB,EAAA,QAAA;AAAA,QAChB,UAAY,EAAA,QAAA;AAAA,QACZ,YAAc,EAAA;AAAA,OACf,qBAC0BA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA,EAAK,YAAU,CACpB,CAAA,EAAS,CACrB,CACJ,CAAA;AAAA;AAEZ,IAAO,OAAA,IAAA;AAAA;AACT,EACA,WAAc,GAAA;AACZ,IAAM,MAAA;AAAA,MACJ;AAAA,QACE,IAAK,CAAA,KAAA;AACT,IAAI,IAAA,IAAA,CAAK,MAAM,WAAa,EAAA;AAC1B,MAAO,OAAA,IAAA,CAAK,KAAM,CAAA,WAAA,CAAY,cAAc,CAAA;AAAA;AAE9C,IAAA,IAAI,eAAe,IAAK,CAAA,GAAA,KAAQ,IAAK,CAAA,KAAA,CAAM,KAAK,GAAK,EAAA;AACnD,MAAO,OAAA,IAAA;AAAA;AAET,IAAI,IAAA,cAAA,CAAe,IAAQ,IAAA,cAAA,CAAe,QAAU,EAAA;AAClD,MAAA,oDAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAO,CAAA,UAAA,EAAY,OAAO,QAAQ,CAAA,EAAA,EACxC,cAAe,CAAA,IAAA,iDAAS,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAO,CAAA,YAAA,EAAc,OAAO,IAAM,EAAA,IAAA,CAAK,KAAM,CAAA,SAAS,KAAG,QAAC,CAAA,EAC/F,eAAe,QAAY,oBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA,CAAC,MAAO,CAAA,YAAA,EAAc,OAAO,IAAM,EAAA,IAAA,CAAK,MAAM,SAAS,CAAA,EAAA,EAAG,QAAC,CACxG,CAAA;AAAA;AAEZ,IAAO,OAAA,IAAA;AAAA;AACT,EACA,cAAiB,GAAA;AACf,IAAA,MAAM,QAAW,GAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,IAAK,CAAA,IAAA;AAChD,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,MAII,UAAK,KAHP,EAAA;AAAA,QAAA,cAAA;AAAA,QACA;AAAA,OA1IR,GA4IU,EADC,EAAA,aAAA,GAAA,SAAA,CACD,EADC,EAAA;AAAA,QAFH,gBAAA;AAAA,QACA;AAAA,OAAA,CAAA;AAGF,MAAI,IAAA,IAAA,CAAK,MAAM,cAAgB,EAAA;AAC7B,QAAO,OAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,aAAa,CAAA;AAAA;AAEhD,MAAA,uBAAQA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,YAAc,EAAA,MAAA,CAAO,UAAY,EAAA,MAAA,CAAO,QAAU,EAAA,IAAA,CAAK,KAAM,CAAA,aAAa,KACvF,QACL,CAAA;AAAA;AAEZ,IAAO,OAAA,IAAA;AAAA;AACT,EACA,UAAa,GAAA;AACX,IAAI,IAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,SAAW,EAAA;AACvC,MAAA,MAIS,UAAK,KAHZ,EAAA;AAAA,QAAA,cAAA;AAAA,QACA;AAAA,OA1JR,GA4Je,EADJ,EAAA,SAAA,GAAA,SAAA,CACI,EADJ,EAAA;AAAA,QAFH,gBAAA;AAAA,QACA;AAAA,OAAA,CAAA;AAGF,MAAI,IAAA,IAAA,CAAK,MAAM,UAAY,EAAA;AACzB,QAAO,OAAA,IAAA,CAAK,KAAM,CAAA,UAAA,CAAW,SAAS,CAAA;AAAA;AAExC,MAAA,uBAAQA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAS,SAAT,CAAA,EAAA,EAAoB,cAAgB,EAAA;AAAA,QAC1C,IAAA,EAAM,CAAC,MAAA,CAAO,aAAa;AAAA,SAC1B,SAAW,EAAA;AAAA,QACZ,IAAA,EAAM,CAAC,MAAO,CAAA,YAAA,EAAc,OAAO,UAAY,EAAA,MAAA,CAAO,IAAM,EAAA,SAAA,CAAU,SAAS;AAAA,OAC9E,EAAA,CAAA,CAAA;AAAA;AAEL,IAAO,OAAA,IAAA;AAAA;AACT,EACA,gBAAmB,GAAA;AACjB,IAAI,IAAA,IAAA,CAAK,MAAM,gBAAkB,EAAA;AAC/B,MAAA,OAAO,IAAK,CAAA,KAAA,CAAM,gBAAiB,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AAE/C,IAAO,OAAA,IAAA;AAAA;AACT,EACA,MAAS,GAAA;AACP,IAAA,MAAM,YAAe,GAAA,UAAA,CAAW,IAAK,CAAA,KAAA,CAAM,gBAAgB,IAAK,CAAA,KAAA,CAAM,eAAe,CAAA,IAAK,UAAU,IAAK,CAAA,KAAA,CAAM,cAAgB,EAAA,IAAA,CAAK,MAAM,eAAe,CAAA;AACzJ,IAAA,MAAM,gBAAgB,YAAe,GAAA,IAAA,mBAAQA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,UAAA,EAAA,EACnD,IAAK,CAAA,cAAA,IACL,IAAK,CAAA,UAAA,EACL,EAAA,IAAA,CAAK,aACV,CAAA;AACR,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA,IAAA,CAAK,KAAM,CAAA,cAAc,CACpD,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,kBAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QAAmB,KAAO,EAAA;AAAA,UACnC,KAAO,EAAA;AAAA,SACT;AAAA,QAEA,aAAe,EAAA,aAAA;AAAA,QAAe,QAAU,EAAA,IAAA;AAAA,QAAM,mBAAoB,EAAA;AAAA,OAAA,EAAW,KAAK,KAAM,CAAA,cAAA,CAAA;AAAA,sBAC1EA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA,IAAA,CAAK,KAAM,CAAA,YAAY,CACjD,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,YACI,IAAK,CAAA,gBAAA,IACL,aACA,EAAA,IAAA,CAAK,oBACL,EAAA,IAAA,CAAK,iBAAkB,EAC5B,CACJ;AAAA,KAER,CAAA;AAAA;AAEZ;AA1LE,aAAA,CADmB,MACZ,EAAA,cAAA,CAAA;AAsBP,aAAA,CAvBmB,MAuBZ,EAAA,WAAA,CAAA;AAwKT,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,YAAc,EAAA;AAAA,IACZ,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,gBAAkB,EAAA;AAAA,IAChB,UAAY,EAAA,CAAA;AAAA,IACZ,WAAa,EAAA;AAAA,GACf;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA;AAAA,GACd;AAAA,EACA,OAAS,EAAA;AAAA,IACP,WAAa,EAAA,EAAA;AAAA,IACb,SAAW,EAAA,EAAA;AAAA,IACX,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,QAAU,EAAA;AAAA,IACR,UAAY,EAAA,MAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,UAAY,EAAA,CAAA;AAAA,IACZ,SAAW,EAAA;AAAA,GACb;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,SAAW,EAAA,MAAA;AAAA,IACX,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,aAAe,EAAA;AAAA,IACb,UAAY,EAAA,CAAA;AAAA,IACZ,WAAa,EAAA,CAAA;AAAA,IACb,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,WAAa,EAAA;AAAA,GACf;AAAA,EACA,UAAY,EAAA;AAAA,IAEV,SAAW,EAAA,QAAA,CAAS,EAAO,KAAA,SAAA,GAAY,EAAK,GAAA,CAAA;AAAA,IAC5C,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA;AAAA,GACd;AAAA,EAEA,IAAM,EAAA;AAAA,IACJ,eAAiB,EAAA,aAAA;AAAA,IACjB,KAAO,EAAA;AAAA,GACT;AAAA,EAEA,QAAU,EAAA;AAAA,IACR,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,YAAc,EAAA,CAAA;AAAA,IACd,UAAY,EAAA,CAAA;AAAA,IACZ,WAAa,EAAA;AAAA;AAEjB,CAAC,CAAA;AAMD,MAAA,CAAO,YAAe,GAAA;AAAA,EACpB,gBAAgB,EAAC;AAAA,EACjB,WAAa,EAAA,IAAA;AAAA,EACb,kBAAoB,EAAA,IAAA;AAAA,EACpB,iBAAmB,EAAA,IAAA;AAAA,EACnB,gBAAkB,EAAA,IAAA;AAAA,EAClB,UAAY,EAAA,IAAA;AAAA,EACZ,cAAgB,EAAA;AAAA,IACd,IAAM,EAAA,IAAA;AAAA,IACN,SAAW,EAAA,IAAA;AAAA,IACX,KAAO,EAAA;AAAA,GACT;AAAA,EACA,aAAa,EAAC;AAAA,EACd,iBAAiB,EAAC;AAAA,EAClB,gBAAgB,EAAC;AAAA,EACjB,cAAc,EAAC;AAAA,EACf,WAAW,EAAC;AAAA,EACZ,sBAAsB,EAAC;AAAA,EACvB,0BAA0B,EAAC;AAAA,EAC3B,iBAAmB,EAAA,KAAA;AAAA,EACnB,cAAA,EAAgB,CAAC,GAAA,EAAU,CAAe,KAAA;AAC5C,CAAA"}
|
|
1
|
+
{"version":3,"file":"SlackBubble.js","sources":["../../../../../src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx"],"sourcesContent":["/* eslint-disable no-underscore-dangle, no-use-before-define */\nimport React from 'react';\nimport { Text, StyleSheet, TouchableOpacity, TouchableHighlight, View, Platform, Dimensions } from 'react-native';\n\nimport { MessageText, MessageImage, Time, utils } from 'react-native-gifted-chat';\nimport CachedImage from '../CachedImage';\nconst { isSameUser, isSameDay } = utils;\nconst windowWidth = Dimensions.get('window').width;\nconst windowHeight = Dimensions.get('window').height;\n\nexport default class Bubble extends React.Component<any> {\n static defaultProps: {\n touchableProps: {};\n onLongPress: null;\n renderMessageImage: null;\n renderMessageText: null;\n renderCustomView: null;\n renderTime: null;\n currentMessage: { text: null; createdAt: null; image: null };\n nextMessage: {};\n previousMessage: {};\n containerStyle: {};\n wrapperStyle: {};\n tickStyle: {};\n containerToNextStyle: {};\n containerToPreviousStyle: {};\n isShowImageViewer: false;\n setImageViewer: (obj: any, v: boolean) => void;\n };\n static propTypes: any;\n constructor(props: any) {\n super(props);\n }\n\n renderMessageText() {\n if (this.props.currentMessage.text) {\n const { containerStyle, wrapperStyle, messageTextStyle, ...messageTextProps } = this.props;\n if (this.props.renderMessageText) {\n return this.props.renderMessageText(messageTextProps);\n }\n return (\n <MessageText\n {...messageTextProps}\n textStyle={{\n left: [\n styles.standardFont,\n styles.slackMessageText,\n messageTextProps.textStyle,\n messageTextStyle,\n ],\n }}\n />\n );\n }\n return null;\n }\n\n renderMessageImage() {\n if (this.props.currentMessage.image) {\n const { containerStyle, wrapperStyle, ...messageImageProps } = this.props;\n if (this.props.renderMessageImage) {\n return this.props.renderMessageImage(messageImageProps);\n }\n const { image, _id } = messageImageProps?.currentMessage;\n\n // Add validation for image URL\n if (!image || typeof image !== 'string') {\n return null;\n }\n\n // Class components can't use hooks like useMemo\n // Directly render the CachedImage instead\n return (\n <TouchableHighlight\n underlayColor={'transparent'}\n style={{ width: '100%', marginVertical: 5 }}\n onPress={() => this.props.setImageViewer(messageImageProps?.currentMessage, true)}\n >\n <View\n style={{\n width: windowWidth * 0.6, // 60% of screen width\n height: windowWidth * 0.4, // Maintain aspect ratio\n maxHeight: 200,\n borderRadius: 8,\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n backgroundColor: '#f7f7f7',\n }}\n >\n <CachedImage\n style={[styles.slackImage, { width: '100%', height: '100%' }]}\n cacheKey={`${_id}-slack-bubble-imageKey`}\n source={{\n uri: image,\n expiresIn: 86400,\n }}\n resizeMode={'cover'}\n alt={'image'}\n placeholderContent={\n <View\n style={[\n styles.slackImage,\n {\n width: '100%',\n height: '100%',\n backgroundColor: '#e1e1e1',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 8,\n },\n ]}\n >\n <Text>Loading...</Text>\n </View>\n }\n />\n </View>\n </TouchableHighlight>\n );\n }\n return null;\n }\n\n renderTicks() {\n const { currentMessage } = this.props;\n if (this.props.renderTicks) {\n return this.props.renderTicks(currentMessage);\n }\n if (currentMessage.user._id !== this.props.user._id) {\n return null;\n }\n if (currentMessage.sent || currentMessage.received) {\n return (\n <View style={[styles.headerItem, styles.tickView]}>\n {currentMessage.sent && (\n <Text style={[styles.standardFont, styles.tick, this.props.tickStyle]}>✓</Text>\n )}\n {currentMessage.received && (\n <Text style={[styles.standardFont, styles.tick, this.props.tickStyle]}>✓</Text>\n )}\n </View>\n );\n }\n return null;\n }\n\n renderUsername() {\n const username = this.props.currentMessage.user.name;\n if (username) {\n const { containerStyle, wrapperStyle, ...usernameProps } = this.props;\n if (this.props.renderUsername) {\n return this.props.renderUsername(usernameProps);\n }\n return (\n <Text style={[styles.standardFont, styles.headerItem, styles.username, this.props.usernameStyle]}>\n {username}\n </Text>\n );\n }\n return null;\n }\n\n renderTime() {\n if (this.props.currentMessage.createdAt) {\n const { containerStyle, wrapperStyle, ...timeProps }: any = this.props;\n if (this.props.renderTime) {\n return this.props.renderTime(timeProps);\n }\n return (\n <Time\n {...timeProps}\n containerStyle={{ left: [styles.timeContainer] }}\n textStyle={{\n left: [styles.standardFont, styles.headerItem, styles.time, timeProps.textStyle],\n }}\n />\n );\n }\n return null;\n }\n\n renderCustomView() {\n if (this.props.renderCustomView) {\n return this.props.renderCustomView(this.props);\n }\n return null;\n }\n\n render() {\n const isSameThread =\n isSameUser(this.props.currentMessage, this.props.previousMessage) &&\n isSameDay(this.props.currentMessage, this.props.previousMessage);\n\n const messageHeader = isSameThread ? null : (\n <View style={styles.headerView}>\n {this.renderUsername()}\n {this.renderTime()}\n {this.renderTicks()}\n </View>\n );\n\n return (\n <View style={[styles.container, this.props.containerStyle]}>\n <TouchableHighlight\n style={{ width: '100%' }}\n // underlayColor={'#c0c0c0'}\n underlayColor={'transparent'}\n disabled={true}\n accessibilityTraits=\"text\"\n {...this.props.touchableProps}\n >\n <View style={[styles.wrapper, this.props.wrapperStyle]}>\n <View>\n {this.renderCustomView()}\n {messageHeader}\n {this.renderMessageImage()}\n {this.renderMessageText()}\n </View>\n </View>\n </TouchableHighlight>\n </View>\n );\n }\n}\n\n// Note: Everything is forced to be \"left\" positioned with this component.\n// The \"right\" position is only used in the default Bubble.\nconst styles = StyleSheet.create({\n standardFont: {\n fontSize: 15,\n },\n slackMessageText: {\n marginLeft: 0,\n marginRight: 0,\n },\n container: {\n flex: 1,\n alignItems: 'flex-start',\n },\n wrapper: {\n marginRight: 60,\n minHeight: 20,\n justifyContent: 'flex-start',\n },\n username: {\n fontWeight: 'bold',\n top: 0,\n paddingTop: 0,\n marginTop: 0,\n },\n time: {\n textAlign: 'left',\n fontSize: 12,\n },\n timeContainer: {\n marginLeft: 0,\n marginRight: 0,\n marginBottom: 0,\n },\n headerItem: {\n marginRight: 10,\n },\n headerView: {\n // Try to align it better with the avatar on Android.\n marginTop: Platform.OS === 'android' ? -2 : 0,\n flexDirection: 'row',\n alignItems: 'baseline',\n },\n /* eslint-disable react-native/no-color-literals */\n tick: {\n backgroundColor: 'transparent',\n color: 'white',\n },\n /* eslint-enable react-native/no-color-literals */\n tickView: {\n flexDirection: 'row',\n },\n slackImage: {\n borderRadius: 3,\n marginLeft: 8,\n marginRight: 0,\n },\n});\n\n// Bubble.contextTypes = {\n// actionSheet: PropTypes.func,\n// };\n\nBubble.defaultProps = {\n touchableProps: {},\n onLongPress: null,\n renderMessageImage: null,\n renderMessageText: null,\n renderCustomView: null,\n renderTime: null,\n currentMessage: {\n text: null,\n createdAt: null,\n image: null,\n },\n nextMessage: {},\n previousMessage: {},\n containerStyle: {},\n wrapperStyle: {},\n tickStyle: {},\n containerToNextStyle: {},\n containerToPreviousStyle: {},\n isShowImageViewer: false,\n setImageViewer: (obj: any, v: boolean) => null,\n};\n"],"names":["React"],"mappings":"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"}
|