@planningcenter/chat-react-native 4.4.0-rc.0 → 4.4.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/conversation/message.d.ts +3 -1
- package/build/components/conversation/message.d.ts.map +1 -1
- package/build/components/conversation/message.js +183 -158
- package/build/components/conversation/message.js.map +1 -1
- package/build/components/conversation/message_list.d.ts.map +1 -1
- package/build/components/conversation/message_list.js +143 -88
- package/build/components/conversation/message_list.js.map +1 -1
- package/build/hooks/use_animated_message_background_color.d.ts +1 -0
- package/build/hooks/use_animated_message_background_color.d.ts.map +1 -1
- package/build/hooks/use_animated_message_background_color.js +26 -9
- package/build/hooks/use_animated_message_background_color.js.map +1 -1
- package/build/hooks/use_product_analytics.d.ts +9 -0
- package/build/hooks/use_product_analytics.d.ts.map +1 -1
- package/build/hooks/use_product_analytics.js +4 -2
- package/build/hooks/use_product_analytics.js.map +1 -1
- package/build/hooks/use_search_enabled.d.ts +2 -0
- package/build/hooks/use_search_enabled.d.ts.map +1 -0
- package/build/hooks/use_search_enabled.js +18 -0
- package/build/hooks/use_search_enabled.js.map +1 -0
- package/build/screens/conversations/components/search_list_header_component.js +3 -3
- package/build/screens/conversations/components/search_list_header_component.js.map +1 -1
- package/build/screens/conversations/conversations_screen.d.ts.map +1 -1
- package/build/screens/conversations/conversations_screen.js +2 -5
- package/build/screens/conversations/conversations_screen.js.map +1 -1
- package/build/screens/search/components/conversation_results.d.ts +1 -1
- package/build/screens/search/components/conversation_results.d.ts.map +1 -1
- package/build/screens/search/components/conversation_results.js +2 -2
- package/build/screens/search/components/conversation_results.js.map +1 -1
- package/build/screens/search/components/search_results_list.d.ts +7 -2
- package/build/screens/search/components/search_results_list.d.ts.map +1 -1
- package/build/screens/search/components/search_results_list.js +135 -105
- package/build/screens/search/components/search_results_list.js.map +1 -1
- package/build/screens/search/search_screen.d.ts.map +1 -1
- package/build/screens/search/search_screen.js +69 -31
- package/build/screens/search/search_screen.js.map +1 -1
- package/package.json +2 -2
- package/src/components/conversation/__tests__/message_list.test.tsx +71 -3
- package/src/components/conversation/message.tsx +12 -1
- package/src/components/conversation/message_list.tsx +26 -1
- package/src/hooks/use_animated_message_background_color.ts +37 -12
- package/src/hooks/use_product_analytics.ts +3 -1
- package/src/hooks/use_search_enabled.ts +9 -0
- package/src/screens/conversations/__tests__/conversations_screen.test.tsx +71 -0
- package/src/screens/conversations/components/search_list_header_component.tsx +1 -1
- package/src/screens/conversations/conversations_screen.tsx +2 -3
- package/src/screens/search/__tests__/search_screen.test.tsx +56 -2
- package/src/screens/search/components/__tests__/conversation_results.test.tsx +2 -2
- package/src/screens/search/components/__tests__/search_results_list.test.tsx +47 -2
- package/src/screens/search/components/conversation_results.tsx +7 -3
- package/src/screens/search/components/search_results_list.tsx +25 -4
- package/src/screens/search/search_screen.tsx +24 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message_list.js","names":["date","formatDate","noop","React","useRef","FlatList","StyleSheet","View","useTheme","getRelativeDateStatus","groupMessages","CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL","isSystemMessage","Text","ConversationStartBanner","Message","MissingMessage","ReplyShadowMessage","SystemMessage","jsx","_jsx","jsxs","_jsxs","HOLD_AND_FOLLOW","minIndexForVisible","autoscrollToTopThreshold","HOLD_ONLY","ANCHOR_CLEARS_JUMP_BUTTON","MessageList","t0","$","_c","listRef","conversation","conversationId","messages","replyRootId","anchorMessageId","behind","t1","hasNextPage","onEndReached","onStartReached","onScroll","onLayout","onContentSizeChange","onScrollBeginDrag","onScrollEndDrag","onMomentumScrollEnd","undefined","styles","useStyles","inReplyScreen","canDeleteNonAuthoredMessages","memberAbility","latestRead","latestReadMessageSortKey","messagesWithSeparators","t2","ms","findIndex","item","id","anchorIndex","layoutHeight","contentHeight","userHasScrolled","draggedSinceStartReached","t3","anchorIsLoaded","current","scrollable","scrollToIndex","index","viewPosition","viewOffset","animated","pinAnchorToBottomEdge","t4","event","nativeEvent","layout","height","handleLayout","t5","width","handleContentSizeChange","t6","event_0","handleScrollBeginDrag","t7","handleStartReached","t8","t9","hasMessages","t10","t11","item_1","type","InlineDateSeparator","deletedAt","readByOthers","mine","listHeader","style","t12","listContainer","inverted","contentContainerStyle","keyExtractor","_temp","scrollEventThrottle","maintainVisibleContentPosition","ListFooterComponent","renderItem","ListHeaderComponent","item_0","useDateSeparatorStyles","isThisYear","showYear","year","dateStamp","separator","dateText","variant","children","container","theme","colors","borderColorDefaultBase","create","alignItems","flexDirection","paddingHorizontal","paddingVertical","flex","borderTopWidth","borderTopColor"],"sources":["../../../src/components/conversation/message_list.tsx"],"sourcesContent":["import { date as formatDate } from '@planningcenter/datetime-fmt'\nimport { noop } from 'lodash'\nimport React, { RefObject, useRef } from 'react'\nimport { FlatList, FlatListProps, StyleSheet, View } from 'react-native'\nimport { useTheme } from '../../hooks'\nimport { ConversationResource } from '../../types/resources/conversation'\nimport { MessageResource } from '../../types/resources/message'\nimport { getRelativeDateStatus } from '../../utils/date'\nimport { groupMessages, type DateSeparator, type EnrichedMessage } from '../../utils/group_messages'\nimport { CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL } from '../../utils/styles'\nimport { isSystemMessage } from '../../utils/system_messages'\nimport { Text } from '../display'\nimport { ConversationStartBanner } from './conversation_start_banner'\nimport { Message } from './message'\nimport { MissingMessage } from './missing_message'\nimport { ReplyShadowMessage } from './reply_shadow_message'\nimport { SystemMessage } from './system_message'\n\n// While behind, the bottom of the window isn't the live edge. Following there pulls\n// each newly paged-in page into view and chains the next fetch.\nconst HOLD_AND_FOLLOW = { minIndexForVisible: 0, autoscrollToTopThreshold: 100 }\nconst HOLD_ONLY = { minIndexForVisible: 0 }\n\ntype ScrollHandlers = Pick<\n FlatListProps<EnrichedMessage>,\n | 'onScroll'\n | 'onLayout'\n | 'onContentSizeChange'\n | 'onScrollBeginDrag'\n | 'onScrollEndDrag'\n | 'onMomentumScrollEnd'\n>\n\ninterface MessageListProps extends ScrollHandlers {\n listRef: RefObject<FlatList | null>\n conversation: ConversationResource\n conversationId: number\n messages: MessageResource[]\n replyRootId?: string | null\n anchorMessageId?: string | null\n behind?: boolean\n hasNextPage: boolean\n onEndReached: () => void\n onStartReached?: () => void\n}\n\nconst ANCHOR_CLEARS_JUMP_BUTTON = 56\n\n/** MessageList\n * The inverted list of messages, reply previews, and date separators for a conversation\n */\nexport function MessageList({\n listRef,\n conversation,\n conversationId,\n messages,\n replyRootId,\n anchorMessageId,\n behind = false,\n hasNextPage,\n onEndReached,\n onStartReached,\n onScroll,\n onLayout,\n onContentSizeChange,\n onScrollBeginDrag,\n onScrollEndDrag,\n onMomentumScrollEnd,\n}: MessageListProps) {\n const styles = useStyles()\n const inReplyScreen = !!replyRootId\n const canDeleteNonAuthoredMessages =\n conversation.memberAbility?.canDeleteNonAuthoredMessages ?? false\n const latestRead = conversation.latestReadMessageSortKey\n const messagesWithSeparators = groupMessages({ ms: messages, inReplyScreen })\n const anchorIndex = anchorMessageId\n ? messagesWithSeparators.findIndex(item => item.id === anchorMessageId)\n : -1\n const layoutHeight = useRef(0)\n const contentHeight = useRef(0)\n const userHasScrolled = useRef(false)\n const draggedSinceStartReached = useRef(false)\n\n // Row heights keep settling after the first layout (images, attachments), so we\n // re-pin on every layout pass until the reader takes over with a drag.\n const pinAnchorToBottomEdge = () => {\n const anchorIsLoaded = anchorIndex >= 0\n if (!anchorIsLoaded || userHasScrolled.current) return\n\n const scrollable = layoutHeight.current > 0 && contentHeight.current > layoutHeight.current\n if (!scrollable) return\n\n listRef.current?.scrollToIndex({\n index: anchorIndex,\n viewPosition: 0,\n viewOffset: ANCHOR_CLEARS_JUMP_BUTTON,\n animated: false,\n })\n }\n\n const handleLayout: FlatListProps<EnrichedMessage>['onLayout'] = event => {\n onLayout?.(event)\n layoutHeight.current = event.nativeEvent.layout.height\n pinAnchorToBottomEdge()\n }\n\n const handleContentSizeChange: FlatListProps<EnrichedMessage>['onContentSizeChange'] = (\n width,\n height\n ) => {\n onContentSizeChange?.(width, height)\n contentHeight.current = height\n pinAnchorToBottomEdge()\n }\n\n const handleScrollBeginDrag: FlatListProps<EnrichedMessage>['onScrollBeginDrag'] = event => {\n userHasScrolled.current = true\n draggedSinceStartReached.current = true\n onScrollBeginDrag?.(event)\n }\n\n // VirtualizedList re-checks its edges on every content size change using a JS offset\n // the native hold never updates, so without this each merged page re-fires it.\n const handleStartReached = () => {\n if (!draggedSinceStartReached.current) return\n\n draggedSinceStartReached.current = false\n onStartReached?.()\n }\n\n return (\n <FlatList\n inverted\n ref={listRef}\n contentContainerStyle={styles.listContainer}\n data={messagesWithSeparators}\n keyExtractor={item => item.id}\n onScroll={onScroll}\n onLayout={handleLayout}\n onContentSizeChange={handleContentSizeChange}\n onScrollBeginDrag={handleScrollBeginDrag}\n // Expected while rows are still measuring; the next layout pass pins again.\n onScrollToIndexFailed={noop}\n onScrollEndDrag={onScrollEndDrag}\n onMomentumScrollEnd={onMomentumScrollEnd}\n scrollEventThrottle={10}\n maintainVisibleContentPosition={behind ? HOLD_ONLY : HOLD_AND_FOLLOW}\n ListFooterComponent={\n hasNextPage ? null : (\n <ConversationStartBanner conversation={conversation} hasMessages={true} />\n )\n }\n renderItem={({ item }) => {\n if (item.type === 'DateSeparator') {\n return <InlineDateSeparator {...item} />\n }\n\n if (item.type === 'Message' && item.deletedAt && !item.replyRootId) {\n return <MissingMessage />\n }\n\n if (item.type === 'ReplyShadowMessage') {\n return (\n <ReplyShadowMessage\n {...(item as any)}\n conversation_id={conversationId}\n inReplyScreen={inReplyScreen}\n />\n )\n }\n\n if (isSystemMessage(item)) {\n return <SystemMessage message={item} conversationId={conversationId} />\n }\n\n const readByOthers = item.mine && !!latestRead && item.id <= latestRead\n return (\n <Message\n {...item}\n canDeleteNonAuthoredMessages={canDeleteNonAuthoredMessages}\n conversation_id={conversationId}\n readByOthers={readByOthers}\n inReplyScreen={inReplyScreen}\n />\n )\n }}\n onEndReached={onEndReached}\n onStartReached={handleStartReached}\n ListHeaderComponent={<View style={styles.listHeader} />}\n />\n )\n}\n\nfunction InlineDateSeparator({ date }: DateSeparator) {\n const styles = useDateSeparatorStyles()\n const { isThisYear } = getRelativeDateStatus(date)\n const showYear = !isThisYear\n const dateStamp = formatDate(date, { style: 'long', year: showYear })\n\n return (\n <View style={styles.container}>\n <View style={styles.separator} />\n <Text variant=\"footnote\" style={styles.dateText}>\n {dateStamp}\n </Text>\n <View style={styles.separator} />\n </View>\n )\n}\n\nconst useDateSeparatorStyles = () => {\n const theme = useTheme()\n return StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n paddingHorizontal: CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL,\n paddingVertical: 16,\n },\n separator: {\n flex: 1,\n height: 1,\n borderTopWidth: 1,\n borderTopColor: theme.colors.borderColorDefaultBase,\n },\n dateText: {\n paddingHorizontal: 8,\n },\n })\n}\n\nconst useStyles = () =>\n StyleSheet.create({\n listContainer: {\n paddingVertical: 12,\n },\n listHeader: {\n // Just whitespace to provide space where the typing indicator can be\n height: 16,\n },\n })\n"],"mappings":";AAAA,SAASA,IAAI,IAAIC,UAAU,QAAQ,8BAA8B;AACjE,SAASC,IAAI,QAAQ,QAAQ;AAC7B,OAAOC,KAAK,IAAeC,MAAM,QAAQ,OAAO;AAChD,SAASC,QAAQ,EAAiBC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACxE,SAASC,QAAQ,QAAQ,aAAa;AAGtC,SAASC,qBAAqB,QAAQ,kBAAkB;AACxD,SAASC,aAAa,QAAkD,4BAA4B;AACpG,SAASC,4CAA4C,QAAQ,oBAAoB;AACjF,SAASC,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,uBAAuB,QAAQ,6BAA6B;AACrE,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,kBAAkB,QAAQ,wBAAwB;AAC3D,SAASC,aAAa,QAAQ,kBAAkB;;AAEhD;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,MAAMC,eAAe,GAAG;EAAEC,kBAAkB,EAAE,CAAC;EAAEC,wBAAwB,EAAE;AAAI,CAAC;AAChF,MAAMC,SAAS,GAAG;EAAEF,kBAAkB,EAAE;AAAE,CAAC;AAyB3C,MAAMG,yBAAyB,GAAG,EAAE;;AAEpC;AACA;AACA;AACA,OAAO,SAAAC,YAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAqB;IAAAC,OAAA;IAAAC,YAAA;IAAAC,cAAA;IAAAC,QAAA;IAAAC,WAAA;IAAAC,eAAA;IAAAC,MAAA,EAAAC,EAAA;IAAAC,WAAA;IAAAC,YAAA;IAAAC,cAAA;IAAAC,QAAA;IAAAC,QAAA;IAAAC,mBAAA;IAAAC,iBAAA;IAAAC,eAAA;IAAAC;EAAA,IAAAnB,EAiBT;EAVjB,MAAAS,MAAA,GAAAC,EAAc,KAAdU,SAAc,GAAd,KAAc,GAAdV,EAAc;EAWd,MAAAW,MAAA,GAAeC,SAAS,CAAC,CAAC;EAC1B,MAAAC,aAAA,GAAsB,CAAC,CAAChB,WAAW;EACnC,MAAAiB,4BAAA,GACEpB,YAAY,CAAAqB,aAA4C,EAAAD,4BAAS,IAAjE,KAAiE;EACnE,MAAAE,UAAA,GAAmBtB,YAAY,CAAAuB,wBAAyB;EAAA,IAAAC,sBAAA;EAAA,IAAAC,EAAA;EAAA,IAAA5B,CAAA,QAAAO,eAAA,IAAAP,CAAA,QAAAsB,aAAA,IAAAtB,CAAA,QAAAK,QAAA;IACxDsB,sBAAA,GAA+B/C,aAAa,CAAC;MAAAiD,EAAA,EAAMxB,QAAQ;MAAAiB;IAAgB,CAAC,CAAC;IACzDM,EAAA,GAAArB,eAAe,GAC/BoB,sBAAsB,CAAAG,SAAU,CAACC,IAAA,IAAQA,IAAI,CAAAC,EAAG,KAAKzB,eACpD,CAAC,GAFc,EAEd;IAAAP,CAAA,MAAAO,eAAA;IAAAP,CAAA,MAAAsB,aAAA;IAAAtB,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAA2B,sBAAA;IAAA3B,CAAA,MAAA4B,EAAA;EAAA;IAAAD,sBAAA,GAAA3B,CAAA;IAAA4B,EAAA,GAAA5B,CAAA;EAAA;EAFN,MAAAiC,WAAA,GAAoBL,EAEd;EACN,MAAAM,YAAA,GAAqB5D,MAAM,CAAC,CAAC,CAAC;EAC9B,MAAA6D,aAAA,GAAsB7D,MAAM,CAAC,CAAC,CAAC;EAC/B,MAAA8D,eAAA,GAAwB9D,MAAM,CAAC,KAAK,CAAC;EACrC,MAAA+D,wBAAA,GAAiC/D,MAAM,CAAC,KAAK,CAAC;EAAA,IAAAgE,EAAA;EAAA,IAAAtC,CAAA,QAAAiC,WAAA,IAAAjC,CAAA,QAAAE,OAAA;IAIhBoC,EAAA,GAAAA,CAAA;MAC5B,MAAAC,cAAA,GAAuBN,WAAW,IAAI,CAAC;MACvC,IAAI,CAACM,cAAyC,IAAvBH,eAAe,CAAAI,OAAQ;QAAA;MAAA;MAE9C,MAAAC,UAAA,GAAmBP,YAAY,CAAAM,OAAQ,GAAG,CAAiD,IAA5CL,aAAa,CAAAK,OAAQ,GAAGN,YAAY,CAAAM,OAAQ;MAC3F,IAAI,CAACC,UAAU;QAAA;MAAA;MAEfvC,OAAO,CAAAsC,OAAuB,EAAAE,aAK5B,CAL6B;QAAAC,KAAA,EACtBV,WAAW;QAAAW,YAAA,EACJ,CAAC;QAAAC,UAAA,EACHhD,yBAAyB;QAAAiD,QAAA,EAC3B;MACZ,CAAC,CAAC;IAAA,CACH;IAAA9C,CAAA,MAAAiC,WAAA;IAAAjC,CAAA,MAAAE,OAAA;IAAAF,CAAA,MAAAsC,EAAA;EAAA;IAAAA,EAAA,GAAAtC,CAAA;EAAA;EAbD,MAAA+C,qBAAA,GAA8BT,EAa7B;EAAA,IAAAU,EAAA;EAAA,IAAAhD,CAAA,QAAAc,QAAA,IAAAd,CAAA,QAAA+C,qBAAA;IAEgEC,EAAA,GAAAC,KAAA;MAC/DnC,QAAQ,GAAGmC,KAAK,CAAC;MACjBf,YAAY,CAAAM,OAAA,GAAWS,KAAK,CAAAC,WAAY,CAAAC,MAAO,CAAAC,MAA3B;MACpBL,qBAAqB,CAAC,CAAC;IAAA,CACxB;IAAA/C,CAAA,MAAAc,QAAA;IAAAd,CAAA,MAAA+C,qBAAA;IAAA/C,CAAA,OAAAgD,EAAA;EAAA;IAAAA,EAAA,GAAAhD,CAAA;EAAA;EAJD,MAAAqD,YAAA,GAAiEL,EAIhE;EAAA,IAAAM,EAAA;EAAA,IAAAtD,CAAA,SAAAe,mBAAA,IAAAf,CAAA,SAAA+C,qBAAA;IAEsFO,EAAA,GAAAA,CAAAC,KAAA,EAAAH,MAAA;MAIrFrC,mBAAmB,GAAGwC,KAAK,EAAEH,MAAM,CAAC;MACpCjB,aAAa,CAAAK,OAAA,GAAWY,MAAH;MACrBL,qBAAqB,CAAC,CAAC;IAAA,CACxB;IAAA/C,CAAA,OAAAe,mBAAA;IAAAf,CAAA,OAAA+C,qBAAA;IAAA/C,CAAA,OAAAsD,EAAA;EAAA;IAAAA,EAAA,GAAAtD,CAAA;EAAA;EAPD,MAAAwD,uBAAA,GAAuFF,EAOtF;EAAA,IAAAG,EAAA;EAAA,IAAAzD,CAAA,SAAAgB,iBAAA;IAEkFyC,EAAA,GAAAC,OAAA;MACjFtB,eAAe,CAAAI,OAAA,GAAW,IAAH;MACvBH,wBAAwB,CAAAG,OAAA,GAAW,IAAH;MAChCxB,iBAAiB,GAAGiC,OAAK,CAAC;IAAA,CAC3B;IAAAjD,CAAA,OAAAgB,iBAAA;IAAAhB,CAAA,OAAAyD,EAAA;EAAA;IAAAA,EAAA,GAAAzD,CAAA;EAAA;EAJD,MAAA2D,qBAAA,GAAmFF,EAIlF;EAAA,IAAAG,EAAA;EAAA,IAAA5D,CAAA,SAAAY,cAAA;IAI0BgD,EAAA,GAAAA,CAAA;MACzB,IAAI,CAACvB,wBAAwB,CAAAG,OAAQ;QAAA;MAAA;MAErCH,wBAAwB,CAAAG,OAAA,GAAW,KAAH;MAChC5B,cAAc,GAAG,CAAC;IAAA,CACnB;IAAAZ,CAAA,OAAAY,cAAA;IAAAZ,CAAA,OAAA4D,EAAA;EAAA;IAAAA,EAAA,GAAA5D,CAAA;EAAA;EALD,MAAA6D,kBAAA,GAA2BD,EAK1B;EAkBmC,MAAAE,EAAA,GAAAtD,MAAM,GAANZ,SAAoC,GAApCH,eAAoC;EAAA,IAAAsE,EAAA;EAAA,IAAA/D,CAAA,SAAAG,YAAA,IAAAH,CAAA,SAAAU,WAAA;IAElEqD,EAAA,GAAArD,WAAW,GAAX,IAEC,gBAFDpB,IAAA,CACGN,uBAAuB;MAAemB,YAAY,EAAZA,YAAY;MAAe6D,WAAI,EAAJ;IAAI,CACxE,CAAC;IAAAhE,CAAA,OAAAG,YAAA;IAAAH,CAAA,OAAAU,WAAA;IAAAV,CAAA,OAAA+D,EAAA;EAAA;IAAAA,EAAA,GAAA/D,CAAA;EAAA;EAAA,IAAAiE,GAAA;EAAA,IAAAjE,CAAA,SAAAuB,4BAAA,IAAAvB,CAAA,SAAAI,cAAA,IAAAJ,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAyB,UAAA;IAESwC,GAAA,GAAAC,GAAA;MAAC;QAAAnC,IAAA,EAAAoC;MAAA,IAAAD,GAAQ;MACnB,IAAInC,MAAI,CAAAqC,IAAK,KAAK,eAAe;QAAA,oBACxB9E,IAAA,CAAC+E,mBAAmB;UAAA,GAAKtC;QAAI,CAAG,CAAC;MAAA;MAG1C,IAAIA,MAAI,CAAAqC,IAAK,KAAK,SAA2B,IAAdrC,MAAI,CAAAuC,SAA+B,IAA9D,CAA8CvC,MAAI,CAAAzB,WAAY;QAAA,oBACzDhB,IAAA,CAACJ,cAAc,IAAE,CAAC;MAAA;MAG3B,IAAI6C,MAAI,CAAAqC,IAAK,KAAK,oBAAoB;QAAA,oBAElC9E,IAAA,CAACH,kBAAkB;UAAA,GACZ4C,MAAI;UACQ3B,eAAc,EAAdA,cAAc;UAChBkB,aAAa,EAAbA;QAAa,CAC7B,CAAC;MAAA;MAIN,IAAIxC,eAAe,CAACiD,MAAI,CAAC;QAAA,oBAChBzC,IAAA,CAACF,aAAa;UAAU2C,OAAI,EAAJA,MAAI;UAAkB3B,cAAc,EAAdA;QAAc,CAAG,CAAC;MAAA;MAGzE,MAAAmE,YAAA,GAAqBxC,MAAI,CAAAyC,IAAqB,IAAzB,CAAc,CAAC/C,UAAmC,IAArBM,MAAI,CAAAC,EAAG,IAAIP,UAAU;MAAA,oBAErEnC,IAAA,CAACL,OAAO;QAAA,GACF8C,MAAI;QACsBR,4BAA4B,EAA5BA,4BAA4B;QACzCnB,eAAc,EAAdA,cAAc;QACjBmE,YAAY,EAAZA,YAAY;QACXjD,aAAa,EAAbA;MAAa,CAC7B,CAAC;IAAA,CAEL;IAAAtB,CAAA,OAAAuB,4BAAA;IAAAvB,CAAA,OAAAI,cAAA;IAAAJ,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAyB,UAAA;IAAAzB,CAAA,OAAAiE,GAAA;EAAA;IAAAA,GAAA,GAAAjE,CAAA;EAAA;EAAA,IAAAkE,GAAA;EAAA,IAAAlE,CAAA,SAAAoB,MAAA,CAAAqD,UAAA;IAGoBP,GAAA,gBAAA5E,IAAA,CAACb,IAAI;MAAQiG,KAAiB,EAAjBtD,MAAM,CAAAqD;IAAW,CAAG,CAAC;IAAAzE,CAAA,OAAAoB,MAAA,CAAAqD,UAAA;IAAAzE,CAAA,OAAAkE,GAAA;EAAA;IAAAA,GAAA,GAAAlE,CAAA;EAAA;EAAA,IAAA2E,GAAA;EAAA,IAAA3E,CAAA,SAAAwD,uBAAA,IAAAxD,CAAA,SAAAqD,YAAA,IAAArD,CAAA,SAAA2D,qBAAA,IAAA3D,CAAA,SAAA6D,kBAAA,IAAA7D,CAAA,SAAAE,OAAA,IAAAF,CAAA,SAAA2B,sBAAA,IAAA3B,CAAA,SAAAW,YAAA,IAAAX,CAAA,SAAAkB,mBAAA,IAAAlB,CAAA,SAAAa,QAAA,IAAAb,CAAA,SAAAiB,eAAA,IAAAjB,CAAA,SAAAoB,MAAA,CAAAwD,aAAA,IAAA5E,CAAA,SAAAiE,GAAA,IAAAjE,CAAA,SAAAkE,GAAA,IAAAlE,CAAA,SAAA8D,EAAA,IAAA9D,CAAA,SAAA+D,EAAA;IAzDzDY,GAAA,gBAAArF,IAAA,CAACf,QAAQ;MACPsG,QAAQ,EAAR,IAAQ;MACH3E,GAAO,EAAPA,OAAO;MACW4E,qBAAoB,EAApB1D,MAAM,CAAAwD,aAAc;MACrCjD,IAAsB,EAAtBA,sBAAsB;MACdoD,YAAe,EAAfC,KAAe;MACnBnE,QAAQ,EAARA,QAAQ;MACRwC,QAAY,EAAZA,YAAY;MACDG,mBAAuB,EAAvBA,uBAAuB;MACzBG,iBAAqB,EAArBA,qBAAqB;MAEjBvF,qBAAI,EAAJA,IAAI;MACV6C,eAAe,EAAfA,eAAe;MACXC,mBAAmB,EAAnBA,mBAAmB;MACnB+D,mBAAE,EAAF,EAAE;MACSC,8BAAoC,EAApCpB,EAAoC;MAElEqB,mBAEC,EAFDpB,EAEC;MAESqB,UAiCX,EAjCWnB,GAiCX;MACatD,YAAY,EAAZA,YAAY;MACVkD,cAAkB,EAAlBA,kBAAkB;MACbwB,mBAAkC,EAAlCnB;IAAkC,CACxD,CAAC;IAAAlE,CAAA,OAAAwD,uBAAA;IAAAxD,CAAA,OAAAqD,YAAA;IAAArD,CAAA,OAAA2D,qBAAA;IAAA3D,CAAA,OAAA6D,kBAAA;IAAA7D,CAAA,OAAAE,OAAA;IAAAF,CAAA,OAAA2B,sBAAA;IAAA3B,CAAA,OAAAW,YAAA;IAAAX,CAAA,OAAAkB,mBAAA;IAAAlB,CAAA,OAAAa,QAAA;IAAAb,CAAA,OAAAiB,eAAA;IAAAjB,CAAA,OAAAoB,MAAA,CAAAwD,aAAA;IAAA5E,CAAA,OAAAiE,GAAA;IAAAjE,CAAA,OAAAkE,GAAA;IAAAlE,CAAA,OAAA8D,EAAA;IAAA9D,CAAA,OAAA+D,EAAA;IAAA/D,CAAA,OAAA2E,GAAA;EAAA;IAAAA,GAAA,GAAA3E,CAAA;EAAA;EAAA,OA1DF2E,GA0DE;AAAA;AA1IC,SAAAK,MAAAM,MAAA;EAAA,OAqFqBvD,MAAI,CAAAC,EAAG;AAAA;AAyDnC,SAAAqC,oBAAAtE,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA6B;IAAA/B;EAAA,IAAA6B,EAAuB;EAClD,MAAAqB,MAAA,GAAemE,sBAAsB,CAAC,CAAC;EAAA,IAAA9E,EAAA;EAAA,IAAAT,CAAA,QAAA9B,IAAA;IAChBuC,EAAA,GAAA9B,qBAAqB,CAACT,IAAI,CAAC;IAAA8B,CAAA,MAAA9B,IAAA;IAAA8B,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAlD;IAAAwF;EAAA,IAAuB/E,EAA2B;EAClD,MAAAgF,QAAA,GAAiB,CAACD,UAAU;EAAA,IAAA5D,EAAA;EAAA,IAAA5B,CAAA,QAAA9B,IAAA,IAAA8B,CAAA,QAAAyF,QAAA;IACV7D,EAAA,GAAAzD,UAAU,CAACD,IAAI,EAAE;MAAAwG,KAAA,EAAS,MAAM;MAAAgB,IAAA,EAAQD;IAAS,CAAC,CAAC;IAAAzF,CAAA,MAAA9B,IAAA;IAAA8B,CAAA,MAAAyF,QAAA;IAAAzF,CAAA,MAAA4B,EAAA;EAAA;IAAAA,EAAA,GAAA5B,CAAA;EAAA;EAArE,MAAA2F,SAAA,GAAkB/D,EAAmD;EAAA,IAAAU,EAAA;EAAA,IAAAtC,CAAA,QAAAoB,MAAA,CAAAwE,SAAA;IAIjEtD,EAAA,gBAAAhD,IAAA,CAACb,IAAI;MAAQiG,KAAgB,EAAhBtD,MAAM,CAAAwE;IAAU,CAAG,CAAC;IAAA5F,CAAA,MAAAoB,MAAA,CAAAwE,SAAA;IAAA5F,CAAA,MAAAsC,EAAA;EAAA;IAAAA,EAAA,GAAAtC,CAAA;EAAA;EAAA,IAAAgD,EAAA;EAAA,IAAAhD,CAAA,QAAA2F,SAAA,IAAA3F,CAAA,QAAAoB,MAAA,CAAAyE,QAAA;IACjC7C,EAAA,gBAAA1D,IAAA,CAACP,IAAI;MAAS+G,OAAU,EAAV,UAAU;MAAQpB,KAAe,EAAftD,MAAM,CAAAyE,QAAS;MAAAE,QAAA,EAC5CJ;IAAS,CACN,CAAC;IAAA3F,CAAA,MAAA2F,SAAA;IAAA3F,CAAA,MAAAoB,MAAA,CAAAyE,QAAA;IAAA7F,CAAA,MAAAgD,EAAA;EAAA;IAAAA,EAAA,GAAAhD,CAAA;EAAA;EAAA,IAAAsD,EAAA;EAAA,IAAAtD,CAAA,SAAAoB,MAAA,CAAAwE,SAAA;IACPtC,EAAA,gBAAAhE,IAAA,CAACb,IAAI;MAAQiG,KAAgB,EAAhBtD,MAAM,CAAAwE;IAAU,CAAG,CAAC;IAAA5F,CAAA,OAAAoB,MAAA,CAAAwE,SAAA;IAAA5F,CAAA,OAAAsD,EAAA;EAAA;IAAAA,EAAA,GAAAtD,CAAA;EAAA;EAAA,IAAAyD,EAAA;EAAA,IAAAzD,CAAA,SAAAoB,MAAA,CAAA4E,SAAA,IAAAhG,CAAA,SAAAsC,EAAA,IAAAtC,CAAA,SAAAgD,EAAA,IAAAhD,CAAA,SAAAsD,EAAA;IALnCG,EAAA,gBAAAjE,KAAA,CAACf,IAAI;MAAQiG,KAAgB,EAAhBtD,MAAM,CAAA4E,SAAU;MAAAD,QAAA,GAC3BzD,EAAiC,EACjCU,EAEO,EACPM,EAAiC;IAAA,CAC7B,CAAC;IAAAtD,CAAA,OAAAoB,MAAA,CAAA4E,SAAA;IAAAhG,CAAA,OAAAsC,EAAA;IAAAtC,CAAA,OAAAgD,EAAA;IAAAhD,CAAA,OAAAsD,EAAA;IAAAtD,CAAA,OAAAyD,EAAA;EAAA;IAAAA,EAAA,GAAAzD,CAAA;EAAA;EAAA,OANPyD,EAMO;AAAA;AAIX,MAAM8B,sBAAsB,GAAGA,CAAA;EAAA,MAAAvF,CAAA,GAAAC,EAAA;EAC7B,MAAAgG,KAAA,GAAcvH,QAAQ,CAAC,CAAC;EAAA,IAAAqB,EAAA;EAAA,IAAAC,CAAA,QAAAiG,KAAA,CAAAC,MAAA,CAAAC,sBAAA;IACjBpG,EAAA,GAAAvB,UAAU,CAAA4H,MAAO,CAAC;MAAAJ,SAAA,EACZ;QAAAK,UAAA,EACG,QAAQ;QAAAC,aAAA,EACL,KAAK;QAAAC,iBAAA,EACD1H,4CAA4C;QAAA2H,eAAA,EAC9C;MACnB,CAAC;MAAAZ,SAAA,EACU;QAAAa,IAAA,EACH,CAAC;QAAArD,MAAA,EACC,CAAC;QAAAsD,cAAA,EACO,CAAC;QAAAC,cAAA,EACDV,KAAK,CAAAC,MAAO,CAAAC;MAC9B,CAAC;MAAAN,QAAA,EACS;QAAAU,iBAAA,EACW;MACrB;IACF,CAAC,CAAC;IAAAvG,CAAA,MAAAiG,KAAA,CAAAC,MAAA,CAAAC,sBAAA;IAAAnG,CAAA,MAAAD,EAAA;EAAA;IAAAA,EAAA,GAAAC,CAAA;EAAA;EAAA,OAhBKD,EAgBL;AAAA,CACH;AAED,MAAMsB,SAAS,GAAGA,CAAA,KAChB7C,UAAU,CAAC4H,MAAM,CAAC;EAChBxB,aAAa,EAAE;IACb4B,eAAe,EAAE;EACnB,CAAC;EACD/B,UAAU,EAAE;IACV;IACArB,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"message_list.js","names":["date","formatDate","noop","React","useCallback","useEffect","useRef","useState","FlatList","StyleSheet","View","useTheme","getRelativeDateStatus","groupMessages","CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL","isSystemMessage","Text","ConversationStartBanner","Message","MissingMessage","ReplyShadowMessage","SystemMessage","jsx","_jsx","jsxs","_jsxs","HOLD_AND_FOLLOW","minIndexForVisible","autoscrollToTopThreshold","HOLD_ONLY","ANCHOR_CLEARS_JUMP_BUTTON","ANCHOR_VIEWABILITY","itemVisiblePercentThreshold","MessageList","t0","$","_c","listRef","conversation","conversationId","messages","replyRootId","anchorMessageId","behind","t1","hasNextPage","onEndReached","onStartReached","onScroll","onLayout","onContentSizeChange","onScrollBeginDrag","onScrollEndDrag","onMomentumScrollEnd","undefined","styles","useStyles","inReplyScreen","canDeleteNonAuthoredMessages","memberAbility","latestRead","latestReadMessageSortKey","messagesWithSeparators","t2","ms","findIndex","item","id","anchorIndex","layoutHeight","contentHeight","userHasScrolled","draggedSinceStartReached","latestAnchorMessageId","flashedAnchorId","highlightedMessageId","setHighlightedMessageId","t3","t4","current","t5","anchorIsLoaded","scrollable","scrollToIndex","index","viewPosition","viewOffset","animated","pinAnchorToBottomEdge","t6","event","nativeEvent","layout","height","handleLayout","t7","width","handleContentSizeChange","t8","event_0","handleScrollBeginDrag","t9","Symbol","for","t10","viewableItems","anchorId","some","token","flashAnchorOnceViewable","clearHighlight","t11","handleStartReached","t12","t13","hasMessages","t14","t15","item_1","type","InlineDateSeparator","deletedAt","readByOthers","mine","highlighted","listHeader","style","t16","listContainer","inverted","contentContainerStyle","keyExtractor","_temp","scrollEventThrottle","maintainVisibleContentPosition","ListFooterComponent","renderItem","ListHeaderComponent","item_0","useDateSeparatorStyles","isThisYear","showYear","year","dateStamp","separator","dateText","variant","children","container","theme","colors","borderColorDefaultBase","create","alignItems","flexDirection","paddingHorizontal","paddingVertical","flex","borderTopWidth","borderTopColor"],"sources":["../../../src/components/conversation/message_list.tsx"],"sourcesContent":["import { date as formatDate } from '@planningcenter/datetime-fmt'\nimport { noop } from 'lodash'\nimport React, { RefObject, useCallback, useEffect, useRef, useState } from 'react'\nimport { FlatList, FlatListProps, StyleSheet, View } from 'react-native'\nimport { useTheme } from '../../hooks'\nimport { ConversationResource } from '../../types/resources/conversation'\nimport { MessageResource } from '../../types/resources/message'\nimport { getRelativeDateStatus } from '../../utils/date'\nimport { groupMessages, type DateSeparator, type EnrichedMessage } from '../../utils/group_messages'\nimport { CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL } from '../../utils/styles'\nimport { isSystemMessage } from '../../utils/system_messages'\nimport { Text } from '../display'\nimport { ConversationStartBanner } from './conversation_start_banner'\nimport { Message } from './message'\nimport { MissingMessage } from './missing_message'\nimport { ReplyShadowMessage } from './reply_shadow_message'\nimport { SystemMessage } from './system_message'\n\n// While behind, the bottom of the window isn't the live edge. Following there pulls\n// each newly paged-in page into view and chains the next fetch.\nconst HOLD_AND_FOLLOW = { minIndexForVisible: 0, autoscrollToTopThreshold: 100 }\nconst HOLD_ONLY = { minIndexForVisible: 0 }\n\ntype ScrollHandlers = Pick<\n FlatListProps<EnrichedMessage>,\n | 'onScroll'\n | 'onLayout'\n | 'onContentSizeChange'\n | 'onScrollBeginDrag'\n | 'onScrollEndDrag'\n | 'onMomentumScrollEnd'\n>\n\ninterface MessageListProps extends ScrollHandlers {\n listRef: RefObject<FlatList | null>\n conversation: ConversationResource\n conversationId: number\n messages: MessageResource[]\n replyRootId?: string | null\n anchorMessageId?: string | null\n behind?: boolean\n hasNextPage: boolean\n onEndReached: () => void\n onStartReached?: () => void\n}\n\nconst ANCHOR_CLEARS_JUMP_BUTTON = 56\nconst ANCHOR_VIEWABILITY = { itemVisiblePercentThreshold: 50 }\n\n/** MessageList\n * The inverted list of messages, reply previews, and date separators for a conversation\n */\nexport function MessageList({\n listRef,\n conversation,\n conversationId,\n messages,\n replyRootId,\n anchorMessageId,\n behind = false,\n hasNextPage,\n onEndReached,\n onStartReached,\n onScroll,\n onLayout,\n onContentSizeChange,\n onScrollBeginDrag,\n onScrollEndDrag,\n onMomentumScrollEnd,\n}: MessageListProps) {\n const styles = useStyles()\n const inReplyScreen = !!replyRootId\n const canDeleteNonAuthoredMessages =\n conversation.memberAbility?.canDeleteNonAuthoredMessages ?? false\n const latestRead = conversation.latestReadMessageSortKey\n const messagesWithSeparators = groupMessages({ ms: messages, inReplyScreen })\n const anchorIndex = anchorMessageId\n ? messagesWithSeparators.findIndex(item => item.id === anchorMessageId)\n : -1\n const layoutHeight = useRef(0)\n const contentHeight = useRef(0)\n const userHasScrolled = useRef(false)\n const draggedSinceStartReached = useRef(false)\n const latestAnchorMessageId = useRef(anchorMessageId)\n const flashedAnchorId = useRef<string | null>(null)\n const [highlightedMessageId, setHighlightedMessageId] = useState<string | null>(null)\n\n useEffect(() => {\n latestAnchorMessageId.current = anchorMessageId\n }, [anchorMessageId])\n\n // Row heights keep settling after the first layout (images, attachments), so we\n // re-pin on every layout pass until the reader takes over with a drag.\n const pinAnchorToBottomEdge = () => {\n const anchorIsLoaded = anchorIndex >= 0\n if (!anchorIsLoaded || userHasScrolled.current) return\n\n const scrollable = layoutHeight.current > 0 && contentHeight.current > layoutHeight.current\n if (!scrollable) return\n\n listRef.current?.scrollToIndex({\n index: anchorIndex,\n viewPosition: 0,\n viewOffset: ANCHOR_CLEARS_JUMP_BUTTON,\n animated: false,\n })\n }\n\n const handleLayout: FlatListProps<EnrichedMessage>['onLayout'] = event => {\n onLayout?.(event)\n layoutHeight.current = event.nativeEvent.layout.height\n pinAnchorToBottomEdge()\n }\n\n const handleContentSizeChange: FlatListProps<EnrichedMessage>['onContentSizeChange'] = (\n width,\n height\n ) => {\n onContentSizeChange?.(width, height)\n contentHeight.current = height\n pinAnchorToBottomEdge()\n }\n\n const handleScrollBeginDrag: FlatListProps<EnrichedMessage>['onScrollBeginDrag'] = event => {\n userHasScrolled.current = true\n draggedSinceStartReached.current = true\n onScrollBeginDrag?.(event)\n }\n\n const flashAnchorOnceViewable: FlatListProps<EnrichedMessage>['onViewableItemsChanged'] = ({\n viewableItems,\n }) => {\n const anchorId = latestAnchorMessageId.current\n if (!anchorId || anchorId === flashedAnchorId.current) return\n if (!viewableItems.some(token => token.item.id === anchorId)) return\n\n flashedAnchorId.current = anchorId\n setHighlightedMessageId(anchorId)\n }\n\n const clearHighlight = useCallback(() => setHighlightedMessageId(null), [])\n\n // VirtualizedList re-checks its edges on every content size change using a JS offset\n // the native hold never updates, so without this each merged page re-fires it.\n const handleStartReached = () => {\n if (!draggedSinceStartReached.current) return\n\n draggedSinceStartReached.current = false\n onStartReached?.()\n }\n\n return (\n <FlatList\n inverted\n ref={listRef}\n contentContainerStyle={styles.listContainer}\n data={messagesWithSeparators}\n keyExtractor={item => item.id}\n onScroll={onScroll}\n onLayout={handleLayout}\n onContentSizeChange={handleContentSizeChange}\n onScrollBeginDrag={handleScrollBeginDrag}\n // Expected while rows are still measuring; the next layout pass pins again.\n onScrollToIndexFailed={noop}\n onScrollEndDrag={onScrollEndDrag}\n onMomentumScrollEnd={onMomentumScrollEnd}\n onViewableItemsChanged={flashAnchorOnceViewable}\n viewabilityConfig={ANCHOR_VIEWABILITY}\n scrollEventThrottle={10}\n maintainVisibleContentPosition={behind ? HOLD_ONLY : HOLD_AND_FOLLOW}\n ListFooterComponent={\n hasNextPage ? null : (\n <ConversationStartBanner conversation={conversation} hasMessages={true} />\n )\n }\n renderItem={({ item }) => {\n if (item.type === 'DateSeparator') {\n return <InlineDateSeparator {...item} />\n }\n\n if (item.type === 'Message' && item.deletedAt && !item.replyRootId) {\n return <MissingMessage />\n }\n\n if (item.type === 'ReplyShadowMessage') {\n return (\n <ReplyShadowMessage\n {...(item as any)}\n conversation_id={conversationId}\n inReplyScreen={inReplyScreen}\n />\n )\n }\n\n if (isSystemMessage(item)) {\n return <SystemMessage message={item} conversationId={conversationId} />\n }\n\n const readByOthers = item.mine && !!latestRead && item.id <= latestRead\n return (\n <Message\n {...item}\n canDeleteNonAuthoredMessages={canDeleteNonAuthoredMessages}\n conversation_id={conversationId}\n readByOthers={readByOthers}\n inReplyScreen={inReplyScreen}\n highlighted={item.id === highlightedMessageId}\n onHighlightShown={clearHighlight}\n />\n )\n }}\n onEndReached={onEndReached}\n onStartReached={handleStartReached}\n ListHeaderComponent={<View style={styles.listHeader} />}\n />\n )\n}\n\nfunction InlineDateSeparator({ date }: DateSeparator) {\n const styles = useDateSeparatorStyles()\n const { isThisYear } = getRelativeDateStatus(date)\n const showYear = !isThisYear\n const dateStamp = formatDate(date, { style: 'long', year: showYear })\n\n return (\n <View style={styles.container}>\n <View style={styles.separator} />\n <Text variant=\"footnote\" style={styles.dateText}>\n {dateStamp}\n </Text>\n <View style={styles.separator} />\n </View>\n )\n}\n\nconst useDateSeparatorStyles = () => {\n const theme = useTheme()\n return StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n paddingHorizontal: CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL,\n paddingVertical: 16,\n },\n separator: {\n flex: 1,\n height: 1,\n borderTopWidth: 1,\n borderTopColor: theme.colors.borderColorDefaultBase,\n },\n dateText: {\n paddingHorizontal: 8,\n },\n })\n}\n\nconst useStyles = () =>\n StyleSheet.create({\n listContainer: {\n paddingVertical: 12,\n },\n listHeader: {\n // Just whitespace to provide space where the typing indicator can be\n height: 16,\n },\n })\n"],"mappings":";AAAA,SAASA,IAAI,IAAIC,UAAU,QAAQ,8BAA8B;AACjE,SAASC,IAAI,QAAQ,QAAQ;AAC7B,OAAOC,KAAK,IAAeC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAClF,SAASC,QAAQ,EAAiBC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACxE,SAASC,QAAQ,QAAQ,aAAa;AAGtC,SAASC,qBAAqB,QAAQ,kBAAkB;AACxD,SAASC,aAAa,QAAkD,4BAA4B;AACpG,SAASC,4CAA4C,QAAQ,oBAAoB;AACjF,SAASC,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,uBAAuB,QAAQ,6BAA6B;AACrE,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,kBAAkB,QAAQ,wBAAwB;AAC3D,SAASC,aAAa,QAAQ,kBAAkB;;AAEhD;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,MAAMC,eAAe,GAAG;EAAEC,kBAAkB,EAAE,CAAC;EAAEC,wBAAwB,EAAE;AAAI,CAAC;AAChF,MAAMC,SAAS,GAAG;EAAEF,kBAAkB,EAAE;AAAE,CAAC;AAyB3C,MAAMG,yBAAyB,GAAG,EAAE;AACpC,MAAMC,kBAAkB,GAAG;EAAEC,2BAA2B,EAAE;AAAG,CAAC;;AAE9D;AACA;AACA;AACA,OAAO,SAAAC,YAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAqB;IAAAC,OAAA;IAAAC,YAAA;IAAAC,cAAA;IAAAC,QAAA;IAAAC,WAAA;IAAAC,eAAA;IAAAC,MAAA,EAAAC,EAAA;IAAAC,WAAA;IAAAC,YAAA;IAAAC,cAAA;IAAAC,QAAA;IAAAC,QAAA;IAAAC,mBAAA;IAAAC,iBAAA;IAAAC,eAAA;IAAAC;EAAA,IAAAnB,EAiBT;EAVjB,MAAAS,MAAA,GAAAC,EAAc,KAAdU,SAAc,GAAd,KAAc,GAAdV,EAAc;EAWd,MAAAW,MAAA,GAAeC,SAAS,CAAC,CAAC;EAC1B,MAAAC,aAAA,GAAsB,CAAC,CAAChB,WAAW;EACnC,MAAAiB,4BAAA,GACEpB,YAAY,CAAAqB,aAA4C,EAAAD,4BAAS,IAAjE,KAAiE;EACnE,MAAAE,UAAA,GAAmBtB,YAAY,CAAAuB,wBAAyB;EAAA,IAAAC,sBAAA;EAAA,IAAAC,EAAA;EAAA,IAAA5B,CAAA,QAAAO,eAAA,IAAAP,CAAA,QAAAsB,aAAA,IAAAtB,CAAA,QAAAK,QAAA;IACxDsB,sBAAA,GAA+BjD,aAAa,CAAC;MAAAmD,EAAA,EAAMxB,QAAQ;MAAAiB;IAAgB,CAAC,CAAC;IACzDM,EAAA,GAAArB,eAAe,GAC/BoB,sBAAsB,CAAAG,SAAU,CAACC,IAAA,IAAQA,IAAI,CAAAC,EAAG,KAAKzB,eACpD,CAAC,GAFc,EAEd;IAAAP,CAAA,MAAAO,eAAA;IAAAP,CAAA,MAAAsB,aAAA;IAAAtB,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAA2B,sBAAA;IAAA3B,CAAA,MAAA4B,EAAA;EAAA;IAAAD,sBAAA,GAAA3B,CAAA;IAAA4B,EAAA,GAAA5B,CAAA;EAAA;EAFN,MAAAiC,WAAA,GAAoBL,EAEd;EACN,MAAAM,YAAA,GAAqB/D,MAAM,CAAC,CAAC,CAAC;EAC9B,MAAAgE,aAAA,GAAsBhE,MAAM,CAAC,CAAC,CAAC;EAC/B,MAAAiE,eAAA,GAAwBjE,MAAM,CAAC,KAAK,CAAC;EACrC,MAAAkE,wBAAA,GAAiClE,MAAM,CAAC,KAAK,CAAC;EAC9C,MAAAmE,qBAAA,GAA8BnE,MAAM,CAACoC,eAAe,CAAC;EACrD,MAAAgC,eAAA,GAAwBpE,MAAM,CAAgB,IAAI,CAAC;EACnD,OAAAqE,oBAAA,EAAAC,uBAAA,IAAwDrE,QAAQ,CAAgB,IAAI,CAAC;EAAA,IAAAsE,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAA3C,CAAA,QAAAO,eAAA;IAE3EmC,EAAA,GAAAA,CAAA;MACRJ,qBAAqB,CAAAM,OAAA,GAAWrC,eAAH;IAAA,CAC9B;IAAEoC,EAAA,IAACpC,eAAe,CAAC;IAAAP,CAAA,MAAAO,eAAA;IAAAP,CAAA,MAAA0C,EAAA;IAAA1C,CAAA,MAAA2C,EAAA;EAAA;IAAAD,EAAA,GAAA1C,CAAA;IAAA2C,EAAA,GAAA3C,CAAA;EAAA;EAFpB9B,SAAS,CAACwE,EAET,EAAEC,EAAiB,CAAC;EAAA,IAAAE,EAAA;EAAA,IAAA7C,CAAA,QAAAiC,WAAA,IAAAjC,CAAA,QAAAE,OAAA;IAIS2C,EAAA,GAAAA,CAAA;MAC5B,MAAAC,cAAA,GAAuBb,WAAW,IAAI,CAAC;MACvC,IAAI,CAACa,cAAyC,IAAvBV,eAAe,CAAAQ,OAAQ;QAAA;MAAA;MAE9C,MAAAG,UAAA,GAAmBb,YAAY,CAAAU,OAAQ,GAAG,CAAiD,IAA5CT,aAAa,CAAAS,OAAQ,GAAGV,YAAY,CAAAU,OAAQ;MAC3F,IAAI,CAACG,UAAU;QAAA;MAAA;MAEf7C,OAAO,CAAA0C,OAAuB,EAAAI,aAK5B,CAL6B;QAAAC,KAAA,EACtBhB,WAAW;QAAAiB,YAAA,EACJ,CAAC;QAAAC,UAAA,EACHxD,yBAAyB;QAAAyD,QAAA,EAC3B;MACZ,CAAC,CAAC;IAAA,CACH;IAAApD,CAAA,MAAAiC,WAAA;IAAAjC,CAAA,MAAAE,OAAA;IAAAF,CAAA,OAAA6C,EAAA;EAAA;IAAAA,EAAA,GAAA7C,CAAA;EAAA;EAbD,MAAAqD,qBAAA,GAA8BR,EAa7B;EAAA,IAAAS,EAAA;EAAA,IAAAtD,CAAA,SAAAc,QAAA,IAAAd,CAAA,SAAAqD,qBAAA;IAEgEC,EAAA,GAAAC,KAAA;MAC/DzC,QAAQ,GAAGyC,KAAK,CAAC;MACjBrB,YAAY,CAAAU,OAAA,GAAWW,KAAK,CAAAC,WAAY,CAAAC,MAAO,CAAAC,MAA3B;MACpBL,qBAAqB,CAAC,CAAC;IAAA,CACxB;IAAArD,CAAA,OAAAc,QAAA;IAAAd,CAAA,OAAAqD,qBAAA;IAAArD,CAAA,OAAAsD,EAAA;EAAA;IAAAA,EAAA,GAAAtD,CAAA;EAAA;EAJD,MAAA2D,YAAA,GAAiEL,EAIhE;EAAA,IAAAM,EAAA;EAAA,IAAA5D,CAAA,SAAAe,mBAAA,IAAAf,CAAA,SAAAqD,qBAAA;IAEsFO,EAAA,GAAAA,CAAAC,KAAA,EAAAH,MAAA;MAIrF3C,mBAAmB,GAAG8C,KAAK,EAAEH,MAAM,CAAC;MACpCvB,aAAa,CAAAS,OAAA,GAAWc,MAAH;MACrBL,qBAAqB,CAAC,CAAC;IAAA,CACxB;IAAArD,CAAA,OAAAe,mBAAA;IAAAf,CAAA,OAAAqD,qBAAA;IAAArD,CAAA,OAAA4D,EAAA;EAAA;IAAAA,EAAA,GAAA5D,CAAA;EAAA;EAPD,MAAA8D,uBAAA,GAAuFF,EAOtF;EAAA,IAAAG,EAAA;EAAA,IAAA/D,CAAA,SAAAgB,iBAAA;IAEkF+C,EAAA,GAAAC,OAAA;MACjF5B,eAAe,CAAAQ,OAAA,GAAW,IAAH;MACvBP,wBAAwB,CAAAO,OAAA,GAAW,IAAH;MAChC5B,iBAAiB,GAAGuC,OAAK,CAAC;IAAA,CAC3B;IAAAvD,CAAA,OAAAgB,iBAAA;IAAAhB,CAAA,OAAA+D,EAAA;EAAA;IAAAA,EAAA,GAAA/D,CAAA;EAAA;EAJD,MAAAiE,qBAAA,GAAmFF,EAIlF;EAAA,IAAAG,EAAA;EAAA,IAAAlE,CAAA,SAAAmE,MAAA,CAAAC,GAAA;IAEyFF,EAAA,GAAAG,GAAA;MAAC;QAAAC;MAAA,IAAAD,GAE1F;MACC,MAAAE,QAAA,GAAiBjC,qBAAqB,CAAAM,OAAQ;MAC9C,IAAI,CAAC2B,QAAgD,IAApCA,QAAQ,KAAKhC,eAAe,CAAAK,OAAQ;QAAA;MAAA;MACrD,IAAI,CAAC0B,aAAa,CAAAE,IAAK,CAACC,KAAA,IAASA,KAAK,CAAA1C,IAAK,CAAAC,EAAG,KAAKuC,QAAQ,CAAC;QAAA;MAAA;MAE5DhC,eAAe,CAAAK,OAAA,GAAW2B,QAAH;MACvB9B,uBAAuB,CAAC8B,QAAQ,CAAC;IAAA,CAClC;IAAAvE,CAAA,OAAAkE,EAAA;EAAA;IAAAA,EAAA,GAAAlE,CAAA;EAAA;EATD,MAAA0E,uBAAA,GAA0FR,EASzF;EAAA,IAAAG,GAAA;EAAA,IAAArE,CAAA,SAAAmE,MAAA,CAAAC,GAAA;IAEkCC,GAAA,GAAAA,CAAA,KAAM5B,uBAAuB,CAAC,IAAI,CAAC;IAAAzC,CAAA,OAAAqE,GAAA;EAAA;IAAAA,GAAA,GAAArE,CAAA;EAAA;EAAtE,MAAA2E,cAAA,GAAuBN,GAAoD;EAAA,IAAAO,GAAA;EAAA,IAAA5E,CAAA,SAAAY,cAAA;IAIhDgE,GAAA,GAAAA,CAAA;MACzB,IAAI,CAACvC,wBAAwB,CAAAO,OAAQ;QAAA;MAAA;MAErCP,wBAAwB,CAAAO,OAAA,GAAW,KAAH;MAChChC,cAAc,GAAG,CAAC;IAAA,CACnB;IAAAZ,CAAA,OAAAY,cAAA;IAAAZ,CAAA,OAAA4E,GAAA;EAAA;IAAAA,GAAA,GAAA5E,CAAA;EAAA;EALD,MAAA6E,kBAAA,GAA2BD,GAK1B;EAoBmC,MAAAE,GAAA,GAAAtE,MAAM,GAANd,SAAoC,GAApCH,eAAoC;EAAA,IAAAwF,GAAA;EAAA,IAAA/E,CAAA,SAAAG,YAAA,IAAAH,CAAA,SAAAU,WAAA;IAElEqE,GAAA,GAAArE,WAAW,GAAX,IAEC,gBAFDtB,IAAA,CACGN,uBAAuB;MAAeqB,YAAY,EAAZA,YAAY;MAAe6E,WAAI,EAAJ;IAAI,CACxE,CAAC;IAAAhF,CAAA,OAAAG,YAAA;IAAAH,CAAA,OAAAU,WAAA;IAAAV,CAAA,OAAA+E,GAAA;EAAA;IAAAA,GAAA,GAAA/E,CAAA;EAAA;EAAA,IAAAiF,GAAA;EAAA,IAAAjF,CAAA,SAAAuB,4BAAA,IAAAvB,CAAA,SAAAI,cAAA,IAAAJ,CAAA,SAAAwC,oBAAA,IAAAxC,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAyB,UAAA;IAESwD,GAAA,GAAAC,GAAA;MAAC;QAAAnD,IAAA,EAAAoD;MAAA,IAAAD,GAAQ;MACnB,IAAInD,MAAI,CAAAqD,IAAK,KAAK,eAAe;QAAA,oBACxBhG,IAAA,CAACiG,mBAAmB;UAAA,GAAKtD;QAAI,CAAG,CAAC;MAAA;MAG1C,IAAIA,MAAI,CAAAqD,IAAK,KAAK,SAA2B,IAAdrD,MAAI,CAAAuD,SAA+B,IAA9D,CAA8CvD,MAAI,CAAAzB,WAAY;QAAA,oBACzDlB,IAAA,CAACJ,cAAc,IAAE,CAAC;MAAA;MAG3B,IAAI+C,MAAI,CAAAqD,IAAK,KAAK,oBAAoB;QAAA,oBAElChG,IAAA,CAACH,kBAAkB;UAAA,GACZ8C,MAAI;UACQ3B,eAAc,EAAdA,cAAc;UAChBkB,aAAa,EAAbA;QAAa,CAC7B,CAAC;MAAA;MAIN,IAAI1C,eAAe,CAACmD,MAAI,CAAC;QAAA,oBAChB3C,IAAA,CAACF,aAAa;UAAU6C,OAAI,EAAJA,MAAI;UAAkB3B,cAAc,EAAdA;QAAc,CAAG,CAAC;MAAA;MAGzE,MAAAmF,YAAA,GAAqBxD,MAAI,CAAAyD,IAAqB,IAAzB,CAAc,CAAC/D,UAAmC,IAArBM,MAAI,CAAAC,EAAG,IAAIP,UAAU;MAAA,oBAErErC,IAAA,CAACL,OAAO;QAAA,GACFgD,MAAI;QACsBR,4BAA4B,EAA5BA,4BAA4B;QACzCnB,eAAc,EAAdA,cAAc;QACjBmF,YAAY,EAAZA,YAAY;QACXjE,aAAa,EAAbA,aAAa;QACfmE,WAAgC,EAAhC1D,MAAI,CAAAC,EAAG,KAAKQ,oBAAoB;QAC3BmC,gBAAc,EAAdA;MAAc,CACjC,CAAC;IAAA,CAEL;IAAA3E,CAAA,OAAAuB,4BAAA;IAAAvB,CAAA,OAAAI,cAAA;IAAAJ,CAAA,OAAAwC,oBAAA;IAAAxC,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAyB,UAAA;IAAAzB,CAAA,OAAAiF,GAAA;EAAA;IAAAA,GAAA,GAAAjF,CAAA;EAAA;EAAA,IAAAkF,GAAA;EAAA,IAAAlF,CAAA,SAAAoB,MAAA,CAAAsE,UAAA;IAGoBR,GAAA,gBAAA9F,IAAA,CAACb,IAAI;MAAQoH,KAAiB,EAAjBvE,MAAM,CAAAsE;IAAW,CAAG,CAAC;IAAA1F,CAAA,OAAAoB,MAAA,CAAAsE,UAAA;IAAA1F,CAAA,OAAAkF,GAAA;EAAA;IAAAA,GAAA,GAAAlF,CAAA;EAAA;EAAA,IAAA4F,GAAA;EAAA,IAAA5F,CAAA,SAAA8D,uBAAA,IAAA9D,CAAA,SAAA2D,YAAA,IAAA3D,CAAA,SAAAiE,qBAAA,IAAAjE,CAAA,SAAA6E,kBAAA,IAAA7E,CAAA,SAAAE,OAAA,IAAAF,CAAA,SAAA2B,sBAAA,IAAA3B,CAAA,SAAAW,YAAA,IAAAX,CAAA,SAAAkB,mBAAA,IAAAlB,CAAA,SAAAa,QAAA,IAAAb,CAAA,SAAAiB,eAAA,IAAAjB,CAAA,SAAAoB,MAAA,CAAAyE,aAAA,IAAA7F,CAAA,SAAA8E,GAAA,IAAA9E,CAAA,SAAA+E,GAAA,IAAA/E,CAAA,SAAAiF,GAAA,IAAAjF,CAAA,SAAAkF,GAAA;IA7DzDU,GAAA,gBAAAxG,IAAA,CAACf,QAAQ;MACPyH,QAAQ,EAAR,IAAQ;MACH5F,GAAO,EAAPA,OAAO;MACW6F,qBAAoB,EAApB3E,MAAM,CAAAyE,aAAc;MACrClE,IAAsB,EAAtBA,sBAAsB;MACdqE,YAAe,EAAfC,KAAe;MACnBpF,QAAQ,EAARA,QAAQ;MACR8C,QAAY,EAAZA,YAAY;MACDG,mBAAuB,EAAvBA,uBAAuB;MACzBG,iBAAqB,EAArBA,qBAAqB;MAEjBlG,qBAAI,EAAJA,IAAI;MACVkD,eAAe,EAAfA,eAAe;MACXC,mBAAmB,EAAnBA,mBAAmB;MAChBwD,sBAAuB,EAAvBA,uBAAuB;MAC5B9E,iBAAkB,EAAlBA,kBAAkB;MAChBsG,mBAAE,EAAF,EAAE;MACSC,8BAAoC,EAApCrB,GAAoC;MAElEsB,mBAEC,EAFDrB,GAEC;MAESsB,UAmCX,EAnCWpB,GAmCX;MACatE,YAAY,EAAZA,YAAY;MACVkE,cAAkB,EAAlBA,kBAAkB;MACbyB,mBAAkC,EAAlCpB;IAAkC,CACxD,CAAC;IAAAlF,CAAA,OAAA8D,uBAAA;IAAA9D,CAAA,OAAA2D,YAAA;IAAA3D,CAAA,OAAAiE,qBAAA;IAAAjE,CAAA,OAAA6E,kBAAA;IAAA7E,CAAA,OAAAE,OAAA;IAAAF,CAAA,OAAA2B,sBAAA;IAAA3B,CAAA,OAAAW,YAAA;IAAAX,CAAA,OAAAkB,mBAAA;IAAAlB,CAAA,OAAAa,QAAA;IAAAb,CAAA,OAAAiB,eAAA;IAAAjB,CAAA,OAAAoB,MAAA,CAAAyE,aAAA;IAAA7F,CAAA,OAAA8E,GAAA;IAAA9E,CAAA,OAAA+E,GAAA;IAAA/E,CAAA,OAAAiF,GAAA;IAAAjF,CAAA,OAAAkF,GAAA;IAAAlF,CAAA,OAAA4F,GAAA;EAAA;IAAAA,GAAA,GAAA5F,CAAA;EAAA;EAAA,OA9DF4F,GA8DE;AAAA;AAlKC,SAAAK,MAAAM,MAAA;EAAA,OAyGqBxE,MAAI,CAAAC,EAAG;AAAA;AA6DnC,SAAAqD,oBAAAtF,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA6B;IAAApC;EAAA,IAAAkC,EAAuB;EAClD,MAAAqB,MAAA,GAAeoF,sBAAsB,CAAC,CAAC;EAAA,IAAA/F,EAAA;EAAA,IAAAT,CAAA,QAAAnC,IAAA;IAChB4C,EAAA,GAAAhC,qBAAqB,CAACZ,IAAI,CAAC;IAAAmC,CAAA,MAAAnC,IAAA;IAAAmC,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAlD;IAAAyG;EAAA,IAAuBhG,EAA2B;EAClD,MAAAiG,QAAA,GAAiB,CAACD,UAAU;EAAA,IAAA7E,EAAA;EAAA,IAAA5B,CAAA,QAAAnC,IAAA,IAAAmC,CAAA,QAAA0G,QAAA;IACV9E,EAAA,GAAA9D,UAAU,CAACD,IAAI,EAAE;MAAA8H,KAAA,EAAS,MAAM;MAAAgB,IAAA,EAAQD;IAAS,CAAC,CAAC;IAAA1G,CAAA,MAAAnC,IAAA;IAAAmC,CAAA,MAAA0G,QAAA;IAAA1G,CAAA,MAAA4B,EAAA;EAAA;IAAAA,EAAA,GAAA5B,CAAA;EAAA;EAArE,MAAA4G,SAAA,GAAkBhF,EAAmD;EAAA,IAAAc,EAAA;EAAA,IAAA1C,CAAA,QAAAoB,MAAA,CAAAyF,SAAA;IAIjEnE,EAAA,gBAAAtD,IAAA,CAACb,IAAI;MAAQoH,KAAgB,EAAhBvE,MAAM,CAAAyF;IAAU,CAAG,CAAC;IAAA7G,CAAA,MAAAoB,MAAA,CAAAyF,SAAA;IAAA7G,CAAA,MAAA0C,EAAA;EAAA;IAAAA,EAAA,GAAA1C,CAAA;EAAA;EAAA,IAAA2C,EAAA;EAAA,IAAA3C,CAAA,QAAA4G,SAAA,IAAA5G,CAAA,QAAAoB,MAAA,CAAA0F,QAAA;IACjCnE,EAAA,gBAAAvD,IAAA,CAACP,IAAI;MAASkI,OAAU,EAAV,UAAU;MAAQpB,KAAe,EAAfvE,MAAM,CAAA0F,QAAS;MAAAE,QAAA,EAC5CJ;IAAS,CACN,CAAC;IAAA5G,CAAA,MAAA4G,SAAA;IAAA5G,CAAA,MAAAoB,MAAA,CAAA0F,QAAA;IAAA9G,CAAA,MAAA2C,EAAA;EAAA;IAAAA,EAAA,GAAA3C,CAAA;EAAA;EAAA,IAAA6C,EAAA;EAAA,IAAA7C,CAAA,SAAAoB,MAAA,CAAAyF,SAAA;IACPhE,EAAA,gBAAAzD,IAAA,CAACb,IAAI;MAAQoH,KAAgB,EAAhBvE,MAAM,CAAAyF;IAAU,CAAG,CAAC;IAAA7G,CAAA,OAAAoB,MAAA,CAAAyF,SAAA;IAAA7G,CAAA,OAAA6C,EAAA;EAAA;IAAAA,EAAA,GAAA7C,CAAA;EAAA;EAAA,IAAAsD,EAAA;EAAA,IAAAtD,CAAA,SAAAoB,MAAA,CAAA6F,SAAA,IAAAjH,CAAA,SAAA0C,EAAA,IAAA1C,CAAA,SAAA2C,EAAA,IAAA3C,CAAA,SAAA6C,EAAA;IALnCS,EAAA,gBAAAhE,KAAA,CAACf,IAAI;MAAQoH,KAAgB,EAAhBvE,MAAM,CAAA6F,SAAU;MAAAD,QAAA,GAC3BtE,EAAiC,EACjCC,EAEO,EACPE,EAAiC;IAAA,CAC7B,CAAC;IAAA7C,CAAA,OAAAoB,MAAA,CAAA6F,SAAA;IAAAjH,CAAA,OAAA0C,EAAA;IAAA1C,CAAA,OAAA2C,EAAA;IAAA3C,CAAA,OAAA6C,EAAA;IAAA7C,CAAA,OAAAsD,EAAA;EAAA;IAAAA,EAAA,GAAAtD,CAAA;EAAA;EAAA,OANPsD,EAMO;AAAA;AAIX,MAAMkD,sBAAsB,GAAGA,CAAA;EAAA,MAAAxG,CAAA,GAAAC,EAAA;EAC7B,MAAAiH,KAAA,GAAc1I,QAAQ,CAAC,CAAC;EAAA,IAAAuB,EAAA;EAAA,IAAAC,CAAA,QAAAkH,KAAA,CAAAC,MAAA,CAAAC,sBAAA;IACjBrH,EAAA,GAAAzB,UAAU,CAAA+I,MAAO,CAAC;MAAAJ,SAAA,EACZ;QAAAK,UAAA,EACG,QAAQ;QAAAC,aAAA,EACL,KAAK;QAAAC,iBAAA,EACD7I,4CAA4C;QAAA8I,eAAA,EAC9C;MACnB,CAAC;MAAAZ,SAAA,EACU;QAAAa,IAAA,EACH,CAAC;QAAAhE,MAAA,EACC,CAAC;QAAAiE,cAAA,EACO,CAAC;QAAAC,cAAA,EACDV,KAAK,CAAAC,MAAO,CAAAC;MAC9B,CAAC;MAAAN,QAAA,EACS;QAAAU,iBAAA,EACW;MACrB;IACF,CAAC,CAAC;IAAAxH,CAAA,MAAAkH,KAAA,CAAAC,MAAA,CAAAC,sBAAA;IAAApH,CAAA,MAAAD,EAAA;EAAA;IAAAA,EAAA,GAAAC,CAAA;EAAA;EAAA,OAhBKD,EAgBL;AAAA,CACH;AAED,MAAMsB,SAAS,GAAGA,CAAA,KAChB/C,UAAU,CAAC+I,MAAM,CAAC;EAChBxB,aAAa,EAAE;IACb4B,eAAe,EAAE;EACnB,CAAC;EACD/B,UAAU,EAAE;IACV;IACAhC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ export declare function useAnimatedMessageBackgroundColor(): {
|
|
|
2
2
|
animatedBackgroundColor: import("react-native-reanimated/lib/typescript/hook/commonTypes").AnimatedStyleHandle<{
|
|
3
3
|
backgroundColor: string;
|
|
4
4
|
}>;
|
|
5
|
+
flash: () => void;
|
|
5
6
|
handleMessagePressIn: () => void;
|
|
6
7
|
handleMessagePressOut: () => void;
|
|
7
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_animated_message_background_color.d.ts","sourceRoot":"","sources":["../../src/hooks/use_animated_message_background_color.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_animated_message_background_color.d.ts","sourceRoot":"","sources":["../../src/hooks/use_animated_message_background_color.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iCAAiC;;;;;;;EAkDhD"}
|
|
@@ -1,35 +1,52 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
1
2
|
import { Platform } from 'react-native';
|
|
2
|
-
import { useSharedValue, useAnimatedStyle, withTiming, interpolateColor, Easing } from 'react-native-reanimated';
|
|
3
|
+
import { useSharedValue, useAnimatedStyle, withDelay, withSequence, withTiming, interpolateColor, Easing, ReduceMotion } from 'react-native-reanimated';
|
|
3
4
|
import { useTheme } from './use_theme';
|
|
5
|
+
const FLASH_IN_MS = 150;
|
|
6
|
+
const FLASH_HOLD_MS = 500;
|
|
7
|
+
const FLASH_OUT_MS = 1500;
|
|
4
8
|
export function useAnimatedMessageBackgroundColor() {
|
|
5
9
|
const {
|
|
6
10
|
colors
|
|
7
11
|
} = useTheme();
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
});
|
|
12
|
+
const pressProgress = useSharedValue(0);
|
|
13
|
+
const flashProgress = useSharedValue(0);
|
|
14
|
+
const tintColor = colors.fillColorNeutral050Base;
|
|
15
|
+
const tintsOnPress = Platform.OS === 'ios';
|
|
13
16
|
const animatedBackgroundColor = useAnimatedStyle(() => {
|
|
14
|
-
const
|
|
17
|
+
const pressTint = tintsOnPress ? pressProgress.value : 0;
|
|
18
|
+
const progress = Math.max(pressTint, flashProgress.value);
|
|
19
|
+
const backgroundColor = interpolateColor(progress, [0, 1], ['transparent', tintColor]);
|
|
15
20
|
return {
|
|
16
21
|
backgroundColor
|
|
17
22
|
};
|
|
18
23
|
});
|
|
19
24
|
const handleMessagePressIn = () => {
|
|
20
|
-
|
|
25
|
+
pressProgress.value = withTiming(1, {
|
|
21
26
|
duration: 300,
|
|
22
27
|
easing: Easing.inOut(Easing.ease)
|
|
23
28
|
});
|
|
24
29
|
};
|
|
25
30
|
const handleMessagePressOut = () => {
|
|
26
|
-
|
|
31
|
+
pressProgress.value = withTiming(0, {
|
|
27
32
|
duration: 300,
|
|
28
33
|
easing: Easing.inOut(Easing.ease)
|
|
29
34
|
});
|
|
30
35
|
};
|
|
36
|
+
const flash = useCallback(() => {
|
|
37
|
+
flashProgress.value = withSequence(withTiming(1, {
|
|
38
|
+
duration: FLASH_IN_MS,
|
|
39
|
+
easing: Easing.out(Easing.ease),
|
|
40
|
+
reduceMotion: ReduceMotion.Never
|
|
41
|
+
}), withDelay(FLASH_HOLD_MS, withTiming(0, {
|
|
42
|
+
duration: FLASH_OUT_MS,
|
|
43
|
+
easing: Easing.out(Easing.ease),
|
|
44
|
+
reduceMotion: ReduceMotion.System
|
|
45
|
+
}), ReduceMotion.Never));
|
|
46
|
+
}, [flashProgress]);
|
|
31
47
|
return {
|
|
32
48
|
animatedBackgroundColor,
|
|
49
|
+
flash,
|
|
33
50
|
handleMessagePressIn,
|
|
34
51
|
handleMessagePressOut
|
|
35
52
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_animated_message_background_color.js","names":["Platform","useSharedValue","useAnimatedStyle","withTiming","interpolateColor","Easing","useTheme","useAnimatedMessageBackgroundColor","colors","
|
|
1
|
+
{"version":3,"file":"use_animated_message_background_color.js","names":["useCallback","Platform","useSharedValue","useAnimatedStyle","withDelay","withSequence","withTiming","interpolateColor","Easing","ReduceMotion","useTheme","FLASH_IN_MS","FLASH_HOLD_MS","FLASH_OUT_MS","useAnimatedMessageBackgroundColor","colors","pressProgress","flashProgress","tintColor","fillColorNeutral050Base","tintsOnPress","OS","animatedBackgroundColor","pressTint","value","progress","Math","max","backgroundColor","handleMessagePressIn","duration","easing","inOut","ease","handleMessagePressOut","flash","out","reduceMotion","Never","System"],"sources":["../../src/hooks/use_animated_message_background_color.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { Platform } from 'react-native'\nimport {\n useSharedValue,\n useAnimatedStyle,\n withDelay,\n withSequence,\n withTiming,\n interpolateColor,\n Easing,\n ReduceMotion,\n} from 'react-native-reanimated'\nimport { useTheme } from './use_theme'\n\nconst FLASH_IN_MS = 150\nconst FLASH_HOLD_MS = 500\nconst FLASH_OUT_MS = 1500\n\nexport function useAnimatedMessageBackgroundColor() {\n const { colors } = useTheme()\n const pressProgress = useSharedValue(0)\n const flashProgress = useSharedValue(0)\n\n const tintColor = colors.fillColorNeutral050Base\n const tintsOnPress = Platform.OS === 'ios'\n\n const animatedBackgroundColor = useAnimatedStyle(() => {\n const pressTint = tintsOnPress ? pressProgress.value : 0\n const progress = Math.max(pressTint, flashProgress.value)\n const backgroundColor = interpolateColor(progress, [0, 1], ['transparent', tintColor])\n return {\n backgroundColor,\n }\n })\n\n const handleMessagePressIn = () => {\n pressProgress.value = withTiming(1, { duration: 300, easing: Easing.inOut(Easing.ease) })\n }\n\n const handleMessagePressOut = () => {\n pressProgress.value = withTiming(0, { duration: 300, easing: Easing.inOut(Easing.ease) })\n }\n\n const flash = useCallback(() => {\n flashProgress.value = withSequence(\n withTiming(1, {\n duration: FLASH_IN_MS,\n easing: Easing.out(Easing.ease),\n reduceMotion: ReduceMotion.Never,\n }),\n withDelay(\n FLASH_HOLD_MS,\n withTiming(0, {\n duration: FLASH_OUT_MS,\n easing: Easing.out(Easing.ease),\n reduceMotion: ReduceMotion.System,\n }),\n ReduceMotion.Never\n )\n )\n }, [flashProgress])\n\n return {\n animatedBackgroundColor,\n flash,\n handleMessagePressIn,\n handleMessagePressOut,\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,QAAQ,QAAQ,cAAc;AACvC,SACEC,cAAc,EACdC,gBAAgB,EAChBC,SAAS,EACTC,YAAY,EACZC,UAAU,EACVC,gBAAgB,EAChBC,MAAM,EACNC,YAAY,QACP,yBAAyB;AAChC,SAASC,QAAQ,QAAQ,aAAa;AAEtC,MAAMC,WAAW,GAAG,GAAG;AACvB,MAAMC,aAAa,GAAG,GAAG;AACzB,MAAMC,YAAY,GAAG,IAAI;AAEzB,OAAO,SAASC,iCAAiCA,CAAA,EAAG;EAClD,MAAM;IAAEC;EAAO,CAAC,GAAGL,QAAQ,CAAC,CAAC;EAC7B,MAAMM,aAAa,GAAGd,cAAc,CAAC,CAAC,CAAC;EACvC,MAAMe,aAAa,GAAGf,cAAc,CAAC,CAAC,CAAC;EAEvC,MAAMgB,SAAS,GAAGH,MAAM,CAACI,uBAAuB;EAChD,MAAMC,YAAY,GAAGnB,QAAQ,CAACoB,EAAE,KAAK,KAAK;EAE1C,MAAMC,uBAAuB,GAAGnB,gBAAgB,CAAC,MAAM;IACrD,MAAMoB,SAAS,GAAGH,YAAY,GAAGJ,aAAa,CAACQ,KAAK,GAAG,CAAC;IACxD,MAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACJ,SAAS,EAAEN,aAAa,CAACO,KAAK,CAAC;IACzD,MAAMI,eAAe,GAAGrB,gBAAgB,CAACkB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAEP,SAAS,CAAC,CAAC;IACtF,OAAO;MACLU;IACF,CAAC;EACH,CAAC,CAAC;EAEF,MAAMC,oBAAoB,GAAGA,CAAA,KAAM;IACjCb,aAAa,CAACQ,KAAK,GAAGlB,UAAU,CAAC,CAAC,EAAE;MAAEwB,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEvB,MAAM,CAACwB,KAAK,CAACxB,MAAM,CAACyB,IAAI;IAAE,CAAC,CAAC;EAC3F,CAAC;EAED,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;IAClClB,aAAa,CAACQ,KAAK,GAAGlB,UAAU,CAAC,CAAC,EAAE;MAAEwB,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEvB,MAAM,CAACwB,KAAK,CAACxB,MAAM,CAACyB,IAAI;IAAE,CAAC,CAAC;EAC3F,CAAC;EAED,MAAME,KAAK,GAAGnC,WAAW,CAAC,MAAM;IAC9BiB,aAAa,CAACO,KAAK,GAAGnB,YAAY,CAChCC,UAAU,CAAC,CAAC,EAAE;MACZwB,QAAQ,EAAEnB,WAAW;MACrBoB,MAAM,EAAEvB,MAAM,CAAC4B,GAAG,CAAC5B,MAAM,CAACyB,IAAI,CAAC;MAC/BI,YAAY,EAAE5B,YAAY,CAAC6B;IAC7B,CAAC,CAAC,EACFlC,SAAS,CACPQ,aAAa,EACbN,UAAU,CAAC,CAAC,EAAE;MACZwB,QAAQ,EAAEjB,YAAY;MACtBkB,MAAM,EAAEvB,MAAM,CAAC4B,GAAG,CAAC5B,MAAM,CAACyB,IAAI,CAAC;MAC/BI,YAAY,EAAE5B,YAAY,CAAC8B;IAC7B,CAAC,CAAC,EACF9B,YAAY,CAAC6B,KACf,CACF,CAAC;EACH,CAAC,EAAE,CAACrB,aAAa,CAAC,CAAC;EAEnB,OAAO;IACLK,uBAAuB;IACvBa,KAAK;IACLN,oBAAoB;IACpBK;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -5,8 +5,17 @@ export interface EventMetadata {
|
|
|
5
5
|
export declare const analyticsEvents: {
|
|
6
6
|
readonly conversation_index_opened: "chat.mobile.conversations.index.opened";
|
|
7
7
|
readonly conversation_show_opened: "chat.mobile.conversations.show.opened";
|
|
8
|
+
readonly search_performed: "chat.mobile.search.performed";
|
|
9
|
+
readonly search_result_opened: "chat.mobile.search.result.opened";
|
|
8
10
|
};
|
|
9
11
|
type AnalyticsEventName = (typeof analyticsEvents)[keyof typeof analyticsEvents];
|
|
12
|
+
export declare const useProductAnalytics: () => {
|
|
13
|
+
publishEvent: (name: AnalyticsEventName, meta?: EventMetadata) => Promise<Response[]>;
|
|
14
|
+
publishEvents: (events: Array<{
|
|
15
|
+
name: AnalyticsEventName;
|
|
16
|
+
meta?: EventMetadata;
|
|
17
|
+
}>) => Promise<Response[]>;
|
|
18
|
+
};
|
|
10
19
|
export declare function usePublishProductAnalyticsEvent(eventName: AnalyticsEventName, meta?: EventMetadata): void;
|
|
11
20
|
export declare function normalizeAnalyticsMetadata(resource: {
|
|
12
21
|
analyticsMetadata?: AnalyticsMetadataResource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_product_analytics.d.ts","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAIjF,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAC5D;AAED,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"use_product_analytics.d.ts","sourceRoot":"","sources":["../../src/hooks/use_product_analytics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAIjF,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAC5D;AAED,eAAO,MAAM,eAAe;;;;;CAKgC,CAAA;AAE5D,KAAK,kBAAkB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAuChF,eAAO,MAAM,mBAAmB;yBASrB,kBAAkB,SAAQ,aAAa,KAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;4BAgBhE,KAAK,CAAC;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC,KAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAmB3F,CAAA;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,kBAAkB,EAC7B,IAAI,GAAE,aAAkB,QAYzB;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE;IACnD,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;CAC9C,GACwE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/F"}
|
|
@@ -5,7 +5,9 @@ import { keysToSnakeCase } from '../utils/client/utils';
|
|
|
5
5
|
import { SHA256, enc } from '../utils/sha_256';
|
|
6
6
|
export const analyticsEvents = {
|
|
7
7
|
conversation_index_opened: 'chat.mobile.conversations.index.opened',
|
|
8
|
-
conversation_show_opened: 'chat.mobile.conversations.show.opened'
|
|
8
|
+
conversation_show_opened: 'chat.mobile.conversations.show.opened',
|
|
9
|
+
search_performed: 'chat.mobile.search.performed',
|
|
10
|
+
search_result_opened: 'chat.mobile.search.result.opened'
|
|
9
11
|
};
|
|
10
12
|
function contentSha256(payload) {
|
|
11
13
|
return SHA256(payload).toString(enc.Hex);
|
|
@@ -36,7 +38,7 @@ function sendEvents(events, config) {
|
|
|
36
38
|
return [];
|
|
37
39
|
});
|
|
38
40
|
}
|
|
39
|
-
const useProductAnalytics = () => {
|
|
41
|
+
export const useProductAnalytics = () => {
|
|
40
42
|
const $ = _c(13);
|
|
41
43
|
const {
|
|
42
44
|
productAnalyticsConfig
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_product_analytics.js","names":["useCallback","useEffect","useMemo","useRef","useChatContext","keysToSnakeCase","SHA256","enc","analyticsEvents","conversation_index_opened","conversation_show_opened","contentSha256","payload","toString","Hex","sendEvents","events","config","chunks","i","length","push","slice","Promise","all","map","chunk","JSON","stringify","fetch","endpoint","method","headers","token","body","catch","error","__DEV__","console","warn","useProductAnalytics","$","_c","productAnalyticsConfig","metadata","t0","t1","snakeCasedBaseMeta","t2","name","t3","meta","undefined","resolve","mergedMeta","publishEvent","eventsWithMeta","event","publishEvents","t4","usePublishProductAnalyticsEvent","eventName","hasPublishedEventRef","current","normalizeAnalyticsMetadata","resource","analyticsMetadata"],"sources":["../../src/hooks/use_product_analytics.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ProductAnalyticsConfig } from '../types/product_analytics'\nimport { AnalyticsMetadataResource } from '../types/resources/analytics_metadata'\nimport { keysToSnakeCase } from '../utils/client/utils'\nimport { SHA256, enc } from '../utils/sha_256'\n\nexport interface EventMetadata {\n [key: string]: string | number | boolean | null | undefined\n}\n\nexport const analyticsEvents = {\n conversation_index_opened: 'chat.mobile.conversations.index.opened',\n conversation_show_opened: 'chat.mobile.conversations.show.opened',\n} as const satisfies Record<string, `chat.mobile.${string}`>\n\ntype AnalyticsEventName = (typeof analyticsEvents)[keyof typeof analyticsEvents]\n\ninterface AnalyticsEvent {\n name: string\n meta: EventMetadata\n}\n\nfunction contentSha256(payload: string): string {\n return SHA256(payload).toString(enc.Hex)\n}\n\nfunction sendEvents(events: AnalyticsEvent[], config: ProductAnalyticsConfig): Promise<Response[]> {\n // Split into chunks of 10 and make parallel requests\n const chunks: AnalyticsEvent[][] = []\n for (let i = 0; i < events.length; i += 10) {\n chunks.push(events.slice(i, i + 10))\n }\n\n return Promise.all(\n chunks.map(async chunk => {\n const payload = JSON.stringify({ events: chunk })\n return fetch(config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n 'X-Authorization': `Bearer ${config.token}`,\n 'X-Amz-Content-Sha256': contentSha256(payload),\n },\n body: payload,\n })\n })\n ).catch(error => {\n if (__DEV__) {\n console.warn('Product Analytics request failed:', error)\n }\n return [] as Response[]\n })\n}\n\
|
|
1
|
+
{"version":3,"file":"use_product_analytics.js","names":["useCallback","useEffect","useMemo","useRef","useChatContext","keysToSnakeCase","SHA256","enc","analyticsEvents","conversation_index_opened","conversation_show_opened","search_performed","search_result_opened","contentSha256","payload","toString","Hex","sendEvents","events","config","chunks","i","length","push","slice","Promise","all","map","chunk","JSON","stringify","fetch","endpoint","method","headers","token","body","catch","error","__DEV__","console","warn","useProductAnalytics","$","_c","productAnalyticsConfig","metadata","t0","t1","snakeCasedBaseMeta","t2","name","t3","meta","undefined","resolve","mergedMeta","publishEvent","eventsWithMeta","event","publishEvents","t4","usePublishProductAnalyticsEvent","eventName","hasPublishedEventRef","current","normalizeAnalyticsMetadata","resource","analyticsMetadata"],"sources":["../../src/hooks/use_product_analytics.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useChatContext } from '../contexts/chat_context'\nimport { ProductAnalyticsConfig } from '../types/product_analytics'\nimport { AnalyticsMetadataResource } from '../types/resources/analytics_metadata'\nimport { keysToSnakeCase } from '../utils/client/utils'\nimport { SHA256, enc } from '../utils/sha_256'\n\nexport interface EventMetadata {\n [key: string]: string | number | boolean | null | undefined\n}\n\nexport const analyticsEvents = {\n conversation_index_opened: 'chat.mobile.conversations.index.opened',\n conversation_show_opened: 'chat.mobile.conversations.show.opened',\n search_performed: 'chat.mobile.search.performed',\n search_result_opened: 'chat.mobile.search.result.opened',\n} as const satisfies Record<string, `chat.mobile.${string}`>\n\ntype AnalyticsEventName = (typeof analyticsEvents)[keyof typeof analyticsEvents]\n\ninterface AnalyticsEvent {\n name: string\n meta: EventMetadata\n}\n\nfunction contentSha256(payload: string): string {\n return SHA256(payload).toString(enc.Hex)\n}\n\nfunction sendEvents(events: AnalyticsEvent[], config: ProductAnalyticsConfig): Promise<Response[]> {\n // Split into chunks of 10 and make parallel requests\n const chunks: AnalyticsEvent[][] = []\n for (let i = 0; i < events.length; i += 10) {\n chunks.push(events.slice(i, i + 10))\n }\n\n return Promise.all(\n chunks.map(async chunk => {\n const payload = JSON.stringify({ events: chunk })\n return fetch(config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n 'X-Authorization': `Bearer ${config.token}`,\n 'X-Amz-Content-Sha256': contentSha256(payload),\n },\n body: payload,\n })\n })\n ).catch(error => {\n if (__DEV__) {\n console.warn('Product Analytics request failed:', error)\n }\n return [] as Response[]\n })\n}\n\nexport const useProductAnalytics = () => {\n const { productAnalyticsConfig } = useChatContext()\n\n const snakeCasedBaseMeta = useMemo(\n () => keysToSnakeCase(productAnalyticsConfig?.metadata || {}),\n [productAnalyticsConfig?.metadata]\n )\n\n const publishEvent = useCallback(\n (name: AnalyticsEventName, meta: EventMetadata = {}): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const mergedMeta = { ...snakeCasedBaseMeta, ...meta } as EventMetadata\n\n return sendEvents([{ name, meta: mergedMeta }], productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n const publishEvents = useCallback(\n (events: Array<{ name: AnalyticsEventName; meta?: EventMetadata }>): Promise<Response[]> => {\n if (!productAnalyticsConfig) {\n if (__DEV__) {\n console.warn('Product Analytics not available')\n }\n return Promise.resolve([])\n }\n\n const eventsWithMeta = events.map(event => ({\n name: event.name,\n meta: { ...snakeCasedBaseMeta, ...event.meta } as EventMetadata,\n }))\n\n return sendEvents(eventsWithMeta, productAnalyticsConfig)\n },\n [productAnalyticsConfig, snakeCasedBaseMeta]\n )\n\n return { publishEvent, publishEvents }\n}\n\nexport function usePublishProductAnalyticsEvent(\n eventName: AnalyticsEventName,\n meta: EventMetadata = {}\n) {\n const { publishEvent } = useProductAnalytics()\n const hasPublishedEventRef = useRef(false)\n\n useEffect(() => {\n if (hasPublishedEventRef.current) return\n\n hasPublishedEventRef.current = true\n\n publishEvent(eventName, meta)\n }, [eventName, meta, publishEvent])\n}\n\nexport function normalizeAnalyticsMetadata(resource: {\n analyticsMetadata?: AnalyticsMetadataResource\n}) {\n return keysToSnakeCase(resource?.analyticsMetadata?.metadata || {}) as Record<string, unknown>\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_search_enabled.d.ts","sourceRoot":"","sources":["../../src/hooks/use_search_enabled.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,YAM/B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { c as _c } from "react/compiler-runtime";
|
|
2
|
+
import { availableFeatures, useFeatures } from './use_features';
|
|
3
|
+
export function useSearchEnabled() {
|
|
4
|
+
const $ = _c(2);
|
|
5
|
+
const {
|
|
6
|
+
featureEnabled
|
|
7
|
+
} = useFeatures();
|
|
8
|
+
let t0;
|
|
9
|
+
if ($[0] !== featureEnabled) {
|
|
10
|
+
t0 = featureEnabled(availableFeatures.search) || featureEnabled(availableFeatures.search_rollout);
|
|
11
|
+
$[0] = featureEnabled;
|
|
12
|
+
$[1] = t0;
|
|
13
|
+
} else {
|
|
14
|
+
t0 = $[1];
|
|
15
|
+
}
|
|
16
|
+
return t0;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=use_search_enabled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_search_enabled.js","names":["availableFeatures","useFeatures","useSearchEnabled","$","_c","featureEnabled","t0","search","search_rollout"],"sources":["../../src/hooks/use_search_enabled.ts"],"sourcesContent":["import { availableFeatures, useFeatures } from './use_features'\n\nexport function useSearchEnabled() {\n const { featureEnabled } = useFeatures()\n\n return (\n featureEnabled(availableFeatures.search) || featureEnabled(availableFeatures.search_rollout)\n )\n}\n"],"mappings":";AAAA,SAASA,iBAAiB,EAAEC,WAAW,QAAQ,gBAAgB;AAE/D,OAAO,SAAAC,iBAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL;IAAAC;EAAA,IAA2BJ,WAAW,CAAC,CAAC;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAE,cAAA;IAGtCC,EAAA,GAAAD,cAAc,CAACL,iBAAiB,CAAAO,MAA2D,CAAC,IAAhDF,cAAc,CAACL,iBAAiB,CAAAQ,cAAe,CAAC;IAAAL,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,OAA5FG,EAA4F;AAAA","ignoreList":[]}
|
|
@@ -472,11 +472,11 @@ const useStyles = t0 => {
|
|
|
472
472
|
const theme = useTheme();
|
|
473
473
|
const atFontScaleBreakpoint = useAtFontScaleBreakpoint(shouldShowHeaderFiltersButton ? 1.2 : undefined);
|
|
474
474
|
let t1;
|
|
475
|
-
if ($[0] !== atFontScaleBreakpoint || $[1] !== theme.colors.
|
|
475
|
+
if ($[0] !== atFontScaleBreakpoint || $[1] !== theme.colors.fillColorNeutral050Base) {
|
|
476
476
|
t1 = StyleSheet.create({
|
|
477
477
|
listHeader: {
|
|
478
478
|
borderBottomWidth: 1,
|
|
479
|
-
borderBottomColor: theme.colors.
|
|
479
|
+
borderBottomColor: theme.colors.fillColorNeutral050Base,
|
|
480
480
|
paddingBottom: 16,
|
|
481
481
|
gap: 16
|
|
482
482
|
},
|
|
@@ -512,7 +512,7 @@ const useStyles = t0 => {
|
|
|
512
512
|
}
|
|
513
513
|
});
|
|
514
514
|
$[0] = atFontScaleBreakpoint;
|
|
515
|
-
$[1] = theme.colors.
|
|
515
|
+
$[1] = theme.colors.fillColorNeutral050Base;
|
|
516
516
|
$[2] = t1;
|
|
517
517
|
} else {
|
|
518
518
|
t1 = $[2];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search_list_header_component.js","names":["useNavigation","useRoute","React","useCallback","useMemo","Alert","ScrollView","StyleSheet","View","Heading","TextButton","ToggleButton","useAtFontScaleBreakpoint","useCanCreateConversations","useCurrentPersonCache","useDirectMessagesEligible","useHasDirectMessages","useNewConversationEntry","useTheme","useMarkAllRead","useCanDisplayGroups","useNewConversationFromFilter","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Haptic","ChatGroupBadge","ListHeaderActionButton","jsx","_jsx","jsxs","_jsxs","ROW_PADDING_HORIZONTAL","FilterTypes","SearchListHeaderComponent","$","_c","navigation","t0","Symbol","for","source_app_name","source_type","canFilterByTeams","t1","canFilterByGroups","directMessagesEligible","hasDirectMessages","canFilterByDMs","route","t2","params","chat_group_graph_id","group_source_app_name","t3","show_direct_messages","undefined","currentPersonCache","markAllRead","isPending","canCreateConversations","entryMode","newConversationFromFilter","t4","bb0","More","test","Groups","Teams","DMs","All","active","t5","navigate","screen","handleNewConversationNavigation","t6","setParams","title","handleSetFilter","t7","handleSearch","t8","handleChatSettings","t9","handleOpenConversationFilters","t10","update","unreadCount","notificationSuccess","handleMarkAllRead","t11","alert","text","onPress","alertMarkAllRead","hasSomeSourceFilterCapability","hasMultiSourceFilterCapabilities","showFilterRow","shouldShowHeaderFiltersButton","moreFiltersButtonA11yLabel","t12","t13","iconNameRight","accessibilityLabel","moreFiltersButtonProps","t14","styles","useStyles","t15","numberOfLines","variant","children","t16","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t17","titleContainer","style","t18","name","testID","t19","t20","t21","t22","actionsContainer","t23","headingRow","t24","filterButton","filterRow","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","accessibilityRole","t25","t26","listHeader","theme","atFontScaleBreakpoint","colors","statusErrorBorder","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","alignItems","justifyContent","paddingHorizontal","markAllReadRow","flexGrow","flex","minWidth"],"sources":["../../../../src/screens/conversations/components/search_list_header_component.tsx"],"sourcesContent":["import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'\nimport React, { useCallback, useMemo } from 'react'\nimport { Alert, ScrollView, StyleSheet, View } from 'react-native'\nimport { Heading, TextButton, ToggleButton } from '../../../components'\nimport {\n useAtFontScaleBreakpoint,\n useCanCreateConversations,\n useCurrentPersonCache,\n useDirectMessagesEligible,\n useHasDirectMessages,\n useNewConversationEntry,\n useTheme,\n} from '../../../hooks'\nimport { useMarkAllRead } from '../../../hooks/use_conversations_actions'\nimport { useCanDisplayGroups } from '../../../hooks/use_groups'\nimport { useNewConversationFromFilter } from '../../../hooks/use_new_conversation_from_filter'\nimport { GraphId } from '../../../types/resources/group_resource'\nimport { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../../utils'\nimport { Haptic } from '../../../utils/native_adapters'\nimport { ConversationFiltersParams } from '../../conversation_filters/screen_props'\nimport { ConversationsScreenProps } from '../conversations_screen'\nimport { ChatGroupBadge } from './chat_group_badge'\nimport { ListHeaderActionButton } from './list_header_action_button'\n\nconst ROW_PADDING_HORIZONTAL = 16\n\nenum FilterTypes {\n All = 'All',\n Groups = 'Groups',\n Teams = 'Teams',\n DMs = 'DMs',\n More = 'More',\n}\n\nexport const SearchListHeaderComponent = () => {\n const navigation = useNavigation()\n const canFilterByTeams = useCanDisplayGroups({ source_app_name: 'Services', source_type: 'Team' })\n const canFilterByGroups = useCanDisplayGroups({ source_app_name: 'Groups', source_type: 'Group' })\n const directMessagesEligible = useDirectMessagesEligible()\n const hasDirectMessages = useHasDirectMessages()\n const canFilterByDMs = directMessagesEligible && hasDirectMessages\n const route = useRoute<RouteProp<ConversationsScreenProps['route']>>()\n const {\n chat_group_graph_id,\n group_source_app_name = '',\n show_direct_messages,\n } = route.params || {}\n const currentPersonCache = useCurrentPersonCache()\n const { markAllRead, isPending } = useMarkAllRead()\n const canCreateConversations = useCanCreateConversations()\n const entryMode = useNewConversationEntry()\n const newConversationFromFilter = useNewConversationFromFilter(\n chat_group_graph_id as GraphId | undefined\n )\n\n const active: FilterTypes = useMemo(() => {\n if (chat_group_graph_id) {\n return FilterTypes.More\n } else if (/groups/i.test(group_source_app_name)) {\n return FilterTypes.Groups\n } else if (/services/i.test(group_source_app_name)) {\n return FilterTypes.Teams\n } else if (show_direct_messages) {\n return FilterTypes.DMs\n }\n\n return FilterTypes.All\n }, [chat_group_graph_id, group_source_app_name, show_direct_messages])\n\n const handleNewConversationNavigation = useCallback(() => {\n if (newConversationFromFilter || entryMode === 'select_type') {\n return navigation.navigate('ConversationSelectType', {\n ...route.params,\n newConversationFromFilter,\n })\n }\n\n if (entryMode === 'groups') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectGroupRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'teams') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectTeamsILeadRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'direct_message') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectDirectMessageRecipients',\n params: { ...route.params },\n })\n }\n }, [navigation, route.params, entryMode, newConversationFromFilter])\n\n const handleSetFilter = useCallback(\n (params: ConversationFiltersParams) => {\n navigation.setParams({\n title: undefined,\n chat_group_graph_id: undefined,\n group_source_app_name: undefined,\n show_direct_messages: undefined,\n ...params,\n })\n },\n [navigation]\n )\n\n const handleSearch = useCallback(() => {\n navigation.navigate('Search')\n }, [navigation])\n\n const handleChatSettings = useCallback(() => {\n navigation.navigate('ChatSettings', {})\n }, [navigation])\n\n const handleOpenConversationFilters = useCallback(() => {\n navigation.navigate('ConversationFilters', {\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n })\n }, [navigation, chat_group_graph_id, group_source_app_name, show_direct_messages])\n\n const handleMarkAllRead = useCallback(() => {\n currentPersonCache.update({ unreadCount: 0 })\n Haptic.notificationSuccess()\n markAllRead()\n }, [currentPersonCache, markAllRead])\n\n const alertMarkAllRead = useCallback(() => {\n if (active === FilterTypes.All) return handleMarkAllRead()\n\n Alert.alert('Mark all read', 'This includes conversations not shown by the current filter.', [\n { text: 'Cancel' },\n { text: 'OK', onPress: () => handleMarkAllRead() },\n ])\n }, [active, handleMarkAllRead])\n\n const hasSomeSourceFilterCapability = canFilterByTeams || canFilterByGroups\n const hasMultiSourceFilterCapabilities = canFilterByTeams && canFilterByGroups\n const showFilterRow = hasMultiSourceFilterCapabilities || canFilterByDMs\n const shouldShowHeaderFiltersButton = hasSomeSourceFilterCapability && !showFilterRow\n const moreFiltersButtonA11yLabel = shouldShowHeaderFiltersButton\n ? 'View filters'\n : 'View more filters'\n\n const moreFiltersButtonProps = {\n onPress: handleOpenConversationFilters,\n active: active === FilterTypes.More,\n iconNameRight: 'general.threeReducingHorizontalBars' as const,\n accessibilityLabel: moreFiltersButtonA11yLabel,\n }\n\n const styles = useStyles({ shouldShowHeaderFiltersButton })\n\n return (\n <View style={styles.listHeader}>\n <View style={styles.headingRow}>\n <View style={styles.titleContainer}>\n <Heading numberOfLines={1} variant=\"h2\">\n Conversations\n </Heading>\n <TextButton\n onPress={alertMarkAllRead}\n disabled={isPending}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n accessibilityShowsLargeContentViewer\n accessibilityLargeContentTitle=\"Mark all read\"\n >\n Mark all read\n </TextButton>\n </View>\n <View style={styles.actionsContainer}>\n <ListHeaderActionButton\n name=\"general.cog\"\n onPress={handleChatSettings}\n accessibilityLabel=\"Chat settings\"\n testID=\"conversations-chat-settings-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n {canCreateConversations && (\n <ListHeaderActionButton\n name=\"churchCenter.signups\"\n onPress={handleNewConversationNavigation}\n accessibilityLabel=\"New conversation\"\n testID=\"conversations-new-conversation-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n )}\n <ListHeaderActionButton\n name=\"general.search\"\n onPress={handleSearch}\n accessibilityLabel=\"Search\"\n testID=\"conversations-search-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n {shouldShowHeaderFiltersButton && <ToggleButton {...moreFiltersButtonProps} />}\n </View>\n </View>\n {showFilterRow && (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.filterRow}\n accessibilityRole=\"toolbar\"\n >\n <ToggleButton\n title={FilterTypes.All}\n active={active === FilterTypes.All}\n onPress={() => handleSetFilter({})}\n accessibilityLabel=\"Show all conversations\"\n style={styles.filterButton}\n />\n {canFilterByGroups && (\n <ToggleButton\n title={FilterTypes.Groups}\n active={active === FilterTypes.Groups}\n onPress={() => handleSetFilter({ group_source_app_name: 'Groups' })}\n accessibilityLabel=\"Filter to group conversations\"\n style={styles.filterButton}\n />\n )}\n {canFilterByTeams && (\n <ToggleButton\n title={FilterTypes.Teams}\n active={active === FilterTypes.Teams}\n onPress={() => handleSetFilter({ group_source_app_name: 'Services' })}\n accessibilityLabel=\"Filter to team conversations\"\n style={styles.filterButton}\n />\n )}\n {canFilterByDMs && (\n <ToggleButton\n title={FilterTypes.DMs}\n active={active === FilterTypes.DMs}\n onPress={() => handleSetFilter({ show_direct_messages: true })}\n accessibilityLabel=\"Filter to direct message conversations\"\n style={styles.filterButton}\n />\n )}\n <ToggleButton {...moreFiltersButtonProps} />\n </ScrollView>\n )}\n <ChatGroupBadge rowPaddingHorizontal={ROW_PADDING_HORIZONTAL} />\n </View>\n )\n}\n\nconst useStyles = ({\n shouldShowHeaderFiltersButton,\n}: {\n shouldShowHeaderFiltersButton: boolean\n}) => {\n const theme = useTheme()\n const atFontScaleBreakpoint = useAtFontScaleBreakpoint(\n shouldShowHeaderFiltersButton ? 1.2 : undefined\n )\n\n return StyleSheet.create({\n listHeader: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.statusErrorBorder,\n paddingBottom: 16,\n gap: 16,\n },\n headingRow: {\n gap: 12,\n flexDirection: atFontScaleBreakpoint ? 'column' : 'row',\n alignItems: atFontScaleBreakpoint ? 'flex-start' : 'center',\n justifyContent: 'space-between',\n paddingBottom: atFontScaleBreakpoint ? 4 : 0,\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n titleContainer: {\n gap: 8,\n },\n actionsContainer: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n },\n markAllReadRow: {\n paddingBottom: 4,\n },\n filterRow: {\n flexDirection: 'row',\n justifyContent: 'flex-start',\n gap: 8,\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n flexGrow: 1,\n },\n filterButton: {\n flex: 1,\n minWidth: 65,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"search_list_header_component.js","names":["useNavigation","useRoute","React","useCallback","useMemo","Alert","ScrollView","StyleSheet","View","Heading","TextButton","ToggleButton","useAtFontScaleBreakpoint","useCanCreateConversations","useCurrentPersonCache","useDirectMessagesEligible","useHasDirectMessages","useNewConversationEntry","useTheme","useMarkAllRead","useCanDisplayGroups","useNewConversationFromFilter","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Haptic","ChatGroupBadge","ListHeaderActionButton","jsx","_jsx","jsxs","_jsxs","ROW_PADDING_HORIZONTAL","FilterTypes","SearchListHeaderComponent","$","_c","navigation","t0","Symbol","for","source_app_name","source_type","canFilterByTeams","t1","canFilterByGroups","directMessagesEligible","hasDirectMessages","canFilterByDMs","route","t2","params","chat_group_graph_id","group_source_app_name","t3","show_direct_messages","undefined","currentPersonCache","markAllRead","isPending","canCreateConversations","entryMode","newConversationFromFilter","t4","bb0","More","test","Groups","Teams","DMs","All","active","t5","navigate","screen","handleNewConversationNavigation","t6","setParams","title","handleSetFilter","t7","handleSearch","t8","handleChatSettings","t9","handleOpenConversationFilters","t10","update","unreadCount","notificationSuccess","handleMarkAllRead","t11","alert","text","onPress","alertMarkAllRead","hasSomeSourceFilterCapability","hasMultiSourceFilterCapabilities","showFilterRow","shouldShowHeaderFiltersButton","moreFiltersButtonA11yLabel","t12","t13","iconNameRight","accessibilityLabel","moreFiltersButtonProps","t14","styles","useStyles","t15","numberOfLines","variant","children","t16","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t17","titleContainer","style","t18","name","testID","t19","t20","t21","t22","actionsContainer","t23","headingRow","t24","filterButton","filterRow","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","accessibilityRole","t25","t26","listHeader","theme","atFontScaleBreakpoint","colors","fillColorNeutral050Base","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","alignItems","justifyContent","paddingHorizontal","markAllReadRow","flexGrow","flex","minWidth"],"sources":["../../../../src/screens/conversations/components/search_list_header_component.tsx"],"sourcesContent":["import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'\nimport React, { useCallback, useMemo } from 'react'\nimport { Alert, ScrollView, StyleSheet, View } from 'react-native'\nimport { Heading, TextButton, ToggleButton } from '../../../components'\nimport {\n useAtFontScaleBreakpoint,\n useCanCreateConversations,\n useCurrentPersonCache,\n useDirectMessagesEligible,\n useHasDirectMessages,\n useNewConversationEntry,\n useTheme,\n} from '../../../hooks'\nimport { useMarkAllRead } from '../../../hooks/use_conversations_actions'\nimport { useCanDisplayGroups } from '../../../hooks/use_groups'\nimport { useNewConversationFromFilter } from '../../../hooks/use_new_conversation_from_filter'\nimport { GraphId } from '../../../types/resources/group_resource'\nimport { MAX_FONT_SIZE_MULTIPLIER_LANDMARK } from '../../../utils'\nimport { Haptic } from '../../../utils/native_adapters'\nimport { ConversationFiltersParams } from '../../conversation_filters/screen_props'\nimport { ConversationsScreenProps } from '../conversations_screen'\nimport { ChatGroupBadge } from './chat_group_badge'\nimport { ListHeaderActionButton } from './list_header_action_button'\n\nconst ROW_PADDING_HORIZONTAL = 16\n\nenum FilterTypes {\n All = 'All',\n Groups = 'Groups',\n Teams = 'Teams',\n DMs = 'DMs',\n More = 'More',\n}\n\nexport const SearchListHeaderComponent = () => {\n const navigation = useNavigation()\n const canFilterByTeams = useCanDisplayGroups({ source_app_name: 'Services', source_type: 'Team' })\n const canFilterByGroups = useCanDisplayGroups({ source_app_name: 'Groups', source_type: 'Group' })\n const directMessagesEligible = useDirectMessagesEligible()\n const hasDirectMessages = useHasDirectMessages()\n const canFilterByDMs = directMessagesEligible && hasDirectMessages\n const route = useRoute<RouteProp<ConversationsScreenProps['route']>>()\n const {\n chat_group_graph_id,\n group_source_app_name = '',\n show_direct_messages,\n } = route.params || {}\n const currentPersonCache = useCurrentPersonCache()\n const { markAllRead, isPending } = useMarkAllRead()\n const canCreateConversations = useCanCreateConversations()\n const entryMode = useNewConversationEntry()\n const newConversationFromFilter = useNewConversationFromFilter(\n chat_group_graph_id as GraphId | undefined\n )\n\n const active: FilterTypes = useMemo(() => {\n if (chat_group_graph_id) {\n return FilterTypes.More\n } else if (/groups/i.test(group_source_app_name)) {\n return FilterTypes.Groups\n } else if (/services/i.test(group_source_app_name)) {\n return FilterTypes.Teams\n } else if (show_direct_messages) {\n return FilterTypes.DMs\n }\n\n return FilterTypes.All\n }, [chat_group_graph_id, group_source_app_name, show_direct_messages])\n\n const handleNewConversationNavigation = useCallback(() => {\n if (newConversationFromFilter || entryMode === 'select_type') {\n return navigation.navigate('ConversationSelectType', {\n ...route.params,\n newConversationFromFilter,\n })\n }\n\n if (entryMode === 'groups') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectGroupRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'teams') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectTeamsILeadRecipients',\n params: { ...route.params },\n })\n }\n\n if (entryMode === 'direct_message') {\n return navigation.navigate('New', {\n screen: 'ConversationSelectDirectMessageRecipients',\n params: { ...route.params },\n })\n }\n }, [navigation, route.params, entryMode, newConversationFromFilter])\n\n const handleSetFilter = useCallback(\n (params: ConversationFiltersParams) => {\n navigation.setParams({\n title: undefined,\n chat_group_graph_id: undefined,\n group_source_app_name: undefined,\n show_direct_messages: undefined,\n ...params,\n })\n },\n [navigation]\n )\n\n const handleSearch = useCallback(() => {\n navigation.navigate('Search')\n }, [navigation])\n\n const handleChatSettings = useCallback(() => {\n navigation.navigate('ChatSettings', {})\n }, [navigation])\n\n const handleOpenConversationFilters = useCallback(() => {\n navigation.navigate('ConversationFilters', {\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n })\n }, [navigation, chat_group_graph_id, group_source_app_name, show_direct_messages])\n\n const handleMarkAllRead = useCallback(() => {\n currentPersonCache.update({ unreadCount: 0 })\n Haptic.notificationSuccess()\n markAllRead()\n }, [currentPersonCache, markAllRead])\n\n const alertMarkAllRead = useCallback(() => {\n if (active === FilterTypes.All) return handleMarkAllRead()\n\n Alert.alert('Mark all read', 'This includes conversations not shown by the current filter.', [\n { text: 'Cancel' },\n { text: 'OK', onPress: () => handleMarkAllRead() },\n ])\n }, [active, handleMarkAllRead])\n\n const hasSomeSourceFilterCapability = canFilterByTeams || canFilterByGroups\n const hasMultiSourceFilterCapabilities = canFilterByTeams && canFilterByGroups\n const showFilterRow = hasMultiSourceFilterCapabilities || canFilterByDMs\n const shouldShowHeaderFiltersButton = hasSomeSourceFilterCapability && !showFilterRow\n const moreFiltersButtonA11yLabel = shouldShowHeaderFiltersButton\n ? 'View filters'\n : 'View more filters'\n\n const moreFiltersButtonProps = {\n onPress: handleOpenConversationFilters,\n active: active === FilterTypes.More,\n iconNameRight: 'general.threeReducingHorizontalBars' as const,\n accessibilityLabel: moreFiltersButtonA11yLabel,\n }\n\n const styles = useStyles({ shouldShowHeaderFiltersButton })\n\n return (\n <View style={styles.listHeader}>\n <View style={styles.headingRow}>\n <View style={styles.titleContainer}>\n <Heading numberOfLines={1} variant=\"h2\">\n Conversations\n </Heading>\n <TextButton\n onPress={alertMarkAllRead}\n disabled={isPending}\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n accessibilityShowsLargeContentViewer\n accessibilityLargeContentTitle=\"Mark all read\"\n >\n Mark all read\n </TextButton>\n </View>\n <View style={styles.actionsContainer}>\n <ListHeaderActionButton\n name=\"general.cog\"\n onPress={handleChatSettings}\n accessibilityLabel=\"Chat settings\"\n testID=\"conversations-chat-settings-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n {canCreateConversations && (\n <ListHeaderActionButton\n name=\"churchCenter.signups\"\n onPress={handleNewConversationNavigation}\n accessibilityLabel=\"New conversation\"\n testID=\"conversations-new-conversation-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n )}\n <ListHeaderActionButton\n name=\"general.search\"\n onPress={handleSearch}\n accessibilityLabel=\"Search\"\n testID=\"conversations-search-button\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER_LANDMARK}\n />\n {shouldShowHeaderFiltersButton && <ToggleButton {...moreFiltersButtonProps} />}\n </View>\n </View>\n {showFilterRow && (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.filterRow}\n accessibilityRole=\"toolbar\"\n >\n <ToggleButton\n title={FilterTypes.All}\n active={active === FilterTypes.All}\n onPress={() => handleSetFilter({})}\n accessibilityLabel=\"Show all conversations\"\n style={styles.filterButton}\n />\n {canFilterByGroups && (\n <ToggleButton\n title={FilterTypes.Groups}\n active={active === FilterTypes.Groups}\n onPress={() => handleSetFilter({ group_source_app_name: 'Groups' })}\n accessibilityLabel=\"Filter to group conversations\"\n style={styles.filterButton}\n />\n )}\n {canFilterByTeams && (\n <ToggleButton\n title={FilterTypes.Teams}\n active={active === FilterTypes.Teams}\n onPress={() => handleSetFilter({ group_source_app_name: 'Services' })}\n accessibilityLabel=\"Filter to team conversations\"\n style={styles.filterButton}\n />\n )}\n {canFilterByDMs && (\n <ToggleButton\n title={FilterTypes.DMs}\n active={active === FilterTypes.DMs}\n onPress={() => handleSetFilter({ show_direct_messages: true })}\n accessibilityLabel=\"Filter to direct message conversations\"\n style={styles.filterButton}\n />\n )}\n <ToggleButton {...moreFiltersButtonProps} />\n </ScrollView>\n )}\n <ChatGroupBadge rowPaddingHorizontal={ROW_PADDING_HORIZONTAL} />\n </View>\n )\n}\n\nconst useStyles = ({\n shouldShowHeaderFiltersButton,\n}: {\n shouldShowHeaderFiltersButton: boolean\n}) => {\n const theme = useTheme()\n const atFontScaleBreakpoint = useAtFontScaleBreakpoint(\n shouldShowHeaderFiltersButton ? 1.2 : undefined\n )\n\n return StyleSheet.create({\n listHeader: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.fillColorNeutral050Base,\n paddingBottom: 16,\n gap: 16,\n },\n headingRow: {\n gap: 12,\n flexDirection: atFontScaleBreakpoint ? 'column' : 'row',\n alignItems: atFontScaleBreakpoint ? 'flex-start' : 'center',\n justifyContent: 'space-between',\n paddingBottom: atFontScaleBreakpoint ? 4 : 0,\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n titleContainer: {\n gap: 8,\n },\n actionsContainer: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n },\n markAllReadRow: {\n paddingBottom: 4,\n },\n filterRow: {\n flexDirection: 'row',\n justifyContent: 'flex-start',\n gap: 8,\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n flexGrow: 1,\n },\n filterButton: {\n flex: 1,\n minWidth: 65,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations_screen.d.ts","sourceRoot":"","sources":["../../../src/screens/conversations/conversations_screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAO5D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAI9D,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAC,CAAA;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"conversations_screen.d.ts","sourceRoot":"","sources":["../../../src/screens/conversations/conversations_screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAO5D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAI9D,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAC,CAAA;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,wBAAwB,2CActE"}
|
|
@@ -3,8 +3,8 @@ import React from 'react';
|
|
|
3
3
|
import { StyleSheet, View } from 'react-native';
|
|
4
4
|
import { Conversations } from '../../components';
|
|
5
5
|
import { ConversationsContextProvider } from '../../contexts/conversations_context';
|
|
6
|
-
import { availableFeatures, useFeatures } from '../../hooks/use_features';
|
|
7
6
|
import { analyticsEvents, usePublishProductAnalyticsEvent } from '../../hooks/use_product_analytics';
|
|
7
|
+
import { useSearchEnabled } from '../../hooks/use_search_enabled';
|
|
8
8
|
import { ListHeaderComponent } from './components/list_header_component';
|
|
9
9
|
import { SearchListHeaderComponent } from './components/search_list_header_component';
|
|
10
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -14,10 +14,7 @@ export function ConversationsScreen(t0) {
|
|
|
14
14
|
route
|
|
15
15
|
} = t0;
|
|
16
16
|
const styles = useStyles();
|
|
17
|
-
const
|
|
18
|
-
featureEnabled
|
|
19
|
-
} = useFeatures();
|
|
20
|
-
const searchEnabled = featureEnabled(availableFeatures.search);
|
|
17
|
+
const searchEnabled = useSearchEnabled();
|
|
21
18
|
const Header = searchEnabled ? SearchListHeaderComponent : ListHeaderComponent;
|
|
22
19
|
usePublishProductAnalyticsEvent(analyticsEvents.conversation_index_opened);
|
|
23
20
|
let t1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations_screen.js","names":["React","StyleSheet","View","Conversations","ConversationsContextProvider","
|
|
1
|
+
{"version":3,"file":"conversations_screen.js","names":["React","StyleSheet","View","Conversations","ConversationsContextProvider","analyticsEvents","usePublishProductAnalyticsEvent","useSearchEnabled","ListHeaderComponent","SearchListHeaderComponent","jsx","_jsx","ConversationsScreen","t0","$","_c","route","styles","useStyles","searchEnabled","Header","conversation_index_opened","t1","Symbol","for","throwOnError","t2","t3","params","args","opts","children","t4","container","style","create","flex","justifyContent"],"sources":["../../../src/screens/conversations/conversations_screen.tsx"],"sourcesContent":["import { StaticScreenProps } from '@react-navigation/native'\nimport React from 'react'\nimport { StyleSheet, View } from 'react-native'\nimport { Conversations } from '../../components'\nimport { ConversationsContextProvider } from '../../contexts/conversations_context'\nimport { analyticsEvents, usePublishProductAnalyticsEvent } from '../../hooks/use_product_analytics'\nimport { useSearchEnabled } from '../../hooks/use_search_enabled'\nimport { AppName } from '../../types/resources/app_name'\nimport { GraphId } from '../../types/resources/group_resource'\nimport { ListHeaderComponent } from './components/list_header_component'\nimport { SearchListHeaderComponent } from './components/search_list_header_component'\n\nexport type ConversationsScreenProps = StaticScreenProps<{\n title?: string\n chat_group_graph_id?: GraphId\n group_source_app_name?: AppName\n show_direct_messages?: boolean\n}>\n\nexport function ConversationsScreen({ route }: ConversationsScreenProps) {\n const styles = useStyles()\n const searchEnabled = useSearchEnabled()\n const Header = searchEnabled ? SearchListHeaderComponent : ListHeaderComponent\n\n usePublishProductAnalyticsEvent(analyticsEvents.conversation_index_opened)\n\n return (\n <View style={styles.container}>\n <ConversationsContextProvider args={route.params} opts={{ throwOnError: true }}>\n <Conversations ListHeaderComponent={Header} />\n </ConversationsContextProvider>\n </View>\n )\n}\n\nconst useStyles = () => {\n return StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n },\n })\n}\n"],"mappings":";AACA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,4BAA4B,QAAQ,sCAAsC;AACnF,SAASC,eAAe,EAAEC,+BAA+B,QAAQ,mCAAmC;AACpG,SAASC,gBAAgB,QAAQ,gCAAgC;AAGjE,SAASC,mBAAmB,QAAQ,oCAAoC;AACxE,SAASC,yBAAyB,QAAQ,2CAA2C;AAAA,SAAAC,GAAA,IAAAC,IAAA;AASrF,OAAO,SAAAC,oBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA6B;IAAAC;EAAA,IAAAH,EAAmC;EACrE,MAAAI,MAAA,GAAeC,SAAS,CAAC,CAAC;EAC1B,MAAAC,aAAA,GAAsBZ,gBAAgB,CAAC,CAAC;EACxC,MAAAa,MAAA,GAAeD,aAAa,GAAbV,yBAA+D,GAA/DD,mBAA+D;EAE9EF,+BAA+B,CAACD,eAAe,CAAAgB,yBAA0B,CAAC;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAS,MAAA,CAAAC,GAAA;IAIdF,EAAA;MAAAG,YAAA,EAAgB;IAAK,CAAC;IAAAX,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAAA,IAAAY,EAAA;EAAA,IAAAZ,CAAA,QAAAM,MAAA;IAC5EM,EAAA,gBAAAf,IAAA,CAACR,aAAa;MAAsBiB,mBAAM,EAANA;IAAM,CAAG,CAAC;IAAAN,CAAA,MAAAM,MAAA;IAAAN,CAAA,MAAAY,EAAA;EAAA;IAAAA,EAAA,GAAAZ,CAAA;EAAA;EAAA,IAAAa,EAAA;EAAA,IAAAb,CAAA,QAAAE,KAAA,CAAAY,MAAA,IAAAd,CAAA,QAAAY,EAAA;IADhDC,EAAA,gBAAAhB,IAAA,CAACP,4BAA4B;MAAOyB,IAAY,EAAZb,KAAK,CAAAY,MAAO;MAAQE,IAAsB,EAAtBR,EAAsB;MAAAS,QAAA,EAC5EL;IAA8C,CAClB,CAAC;IAAAZ,CAAA,MAAAE,KAAA,CAAAY,MAAA;IAAAd,CAAA,MAAAY,EAAA;IAAAZ,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAAA,IAAAkB,EAAA;EAAA,IAAAlB,CAAA,QAAAG,MAAA,CAAAgB,SAAA,IAAAnB,CAAA,QAAAa,EAAA;IAHjCK,EAAA,gBAAArB,IAAA,CAACT,IAAI;MAAQgC,KAAgB,EAAhBjB,MAAM,CAAAgB,SAAU;MAAAF,QAAA,EAC3BJ;IAE+B,CAC3B,CAAC;IAAAb,CAAA,MAAAG,MAAA,CAAAgB,SAAA;IAAAnB,CAAA,MAAAa,EAAA;IAAAb,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAAA,OAJPkB,EAIO;AAAA;AAIX,MAAMd,SAAS,GAAGA,CAAA,KAAM;EACtB,OAAOjB,UAAU,CAACkC,MAAM,CAAC;IACvBF,SAAS,EAAE;MACTG,IAAI,EAAE,CAAC;MACPC,cAAc,EAAE;IAClB;EACF,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ConversationSearchResultResource } from '../../../types';
|
|
2
2
|
interface ConversationResultsProps {
|
|
3
3
|
results: ConversationSearchResultResource[];
|
|
4
|
-
onSelect: (result: ConversationSearchResultResource) => void;
|
|
4
|
+
onSelect: (result: ConversationSearchResultResource, position: number) => void;
|
|
5
5
|
}
|
|
6
6
|
export declare function ConversationResults({ results, onSelect }: ConversationResultsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation_results.d.ts","sourceRoot":"","sources":["../../../../src/screens/search/components/conversation_results.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAA;AAOtE,UAAU,wBAAwB;IAChC,OAAO,EAAE,gCAAgC,EAAE,CAAA;IAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,gCAAgC,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"conversation_results.d.ts","sourceRoot":"","sources":["../../../../src/screens/search/components/conversation_results.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAA;AAOtE,UAAU,wBAAwB;IAChC,OAAO,EAAE,gCAAgC,EAAE,CAAA;IAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,gCAAgC,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/E;AAED,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,wBAAwB,kDA6BlF"}
|
|
@@ -43,9 +43,9 @@ export function ConversationResults(t0) {
|
|
|
43
43
|
if ($[6] !== onSelect || $[7] !== visible) {
|
|
44
44
|
let t4;
|
|
45
45
|
if ($[9] !== onSelect) {
|
|
46
|
-
t4 = result => /*#__PURE__*/_jsx(ConversationResultRow, {
|
|
46
|
+
t4 = (result, index) => /*#__PURE__*/_jsx(ConversationResultRow, {
|
|
47
47
|
result: result,
|
|
48
|
-
onPress: () => onSelect(result)
|
|
48
|
+
onPress: () => onSelect(result, index)
|
|
49
49
|
}, result.id);
|
|
50
50
|
$[9] = onSelect;
|
|
51
51
|
$[10] = t4;
|