@planningcenter/chat-react-native 4.4.1-rc.0 → 4.5.0-rc.1
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.map +1 -1
- package/build/components/conversation/message.js +193 -145
- package/build/components/conversation/message.js.map +1 -1
- package/build/components/conversation/reply_shadow_message.d.ts.map +1 -1
- package/build/components/conversation/reply_shadow_message.js +135 -107
- package/build/components/conversation/reply_shadow_message.js.map +1 -1
- package/build/components/conversations/conversations.d.ts.map +1 -1
- package/build/components/conversations/conversations.js +3 -2
- package/build/components/conversations/conversations.js.map +1 -1
- package/build/contexts/conversations_context.d.ts.map +1 -1
- package/build/contexts/conversations_context.js +20 -17
- package/build/contexts/conversations_context.js.map +1 -1
- package/build/hooks/use_clear_conversation_filters.d.ts.map +1 -1
- package/build/hooks/use_clear_conversation_filters.js +2 -1
- package/build/hooks/use_clear_conversation_filters.js.map +1 -1
- package/build/hooks/use_conversations_cache.d.ts +1 -1
- package/build/hooks/use_conversations_cache.d.ts.map +1 -1
- package/build/hooks/use_conversations_cache.js +64 -55
- package/build/hooks/use_conversations_cache.js.map +1 -1
- package/build/hooks/use_conversations_jolt_events.js +2 -2
- package/build/hooks/use_conversations_jolt_events.js.map +1 -1
- package/build/hooks/use_jolt.d.ts.map +1 -1
- package/build/hooks/use_jolt.js +37 -9
- package/build/hooks/use_jolt.js.map +1 -1
- package/build/screens/conversation_filters/context/conversation_filter_context.d.ts.map +1 -1
- package/build/screens/conversation_filters/context/conversation_filter_context.js +8 -4
- package/build/screens/conversation_filters/context/conversation_filter_context.js.map +1 -1
- package/build/screens/conversation_filters/screen_props.d.ts +1 -0
- package/build/screens/conversation_filters/screen_props.d.ts.map +1 -1
- package/build/screens/conversation_filters/screen_props.js.map +1 -1
- package/build/screens/conversations/components/filter_dropdown_list_header_component.d.ts.map +1 -1
- package/build/screens/conversations/components/filter_dropdown_list_header_component.js +191 -168
- package/build/screens/conversations/components/filter_dropdown_list_header_component.js.map +1 -1
- package/build/screens/conversations/conversations_screen.d.ts +1 -0
- package/build/screens/conversations/conversations_screen.d.ts.map +1 -1
- package/build/screens/conversations/conversations_screen.js.map +1 -1
- package/build/utils/request/conversation.d.ts +2 -1
- package/build/utils/request/conversation.d.ts.map +1 -1
- package/build/utils/request/conversation.js +4 -1
- package/build/utils/request/conversation.js.map +1 -1
- package/build/utils/styles.d.ts +1 -0
- package/build/utils/styles.d.ts.map +1 -1
- package/build/utils/styles.js +1 -1
- package/build/utils/styles.js.map +1 -1
- package/package.json +2 -2
- package/src/components/conversation/message.tsx +10 -2
- package/src/components/conversation/reply_shadow_message.tsx +14 -3
- package/src/components/conversations/__tests__/conversations_blank_state.test.tsx +1 -0
- package/src/components/conversations/conversations.tsx +12 -2
- package/src/contexts/conversations_context.tsx +8 -1
- package/src/hooks/__tests__/use_conversations_jolt_events.test.tsx +135 -0
- package/src/hooks/__tests__/use_jolt.test.tsx +76 -1
- package/src/hooks/use_clear_conversation_filters.ts +1 -0
- package/src/hooks/use_conversations_cache.ts +29 -24
- package/src/hooks/use_conversations_jolt_events.ts +2 -2
- package/src/hooks/use_jolt.ts +26 -2
- package/src/screens/conversation_filters/context/conversation_filter_context.tsx +4 -0
- package/src/screens/conversation_filters/screen_props.ts +1 -0
- package/src/screens/conversations/components/__tests__/filter_dropdown_list_header_component.test.tsx +55 -3
- package/src/screens/conversations/components/filter_dropdown_list_header_component.tsx +17 -2
- package/src/screens/conversations/conversations_screen.tsx +1 -0
- package/src/utils/__tests__/conversation.test.ts +1 -0
- package/src/utils/request/conversation.ts +4 -0
- package/src/utils/styles.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_dropdown_list_header_component.js","names":["useNavigation","useRoute","React","useCallback","useMemo","Alert","StyleSheet","View","FilterDropdown","TextButton","useAtFontScaleBreakpoint","useCanBrowseArchivedConversations","useCanCreateConversations","useCurrentPersonCache","useDirectMessagesEligible","useHasDirectMessages","useNewConversationEntry","useTheme","useApiGet","useMarkAllRead","useCanDisplayGroups","useNewConversationFromFilter","useSearchEnabled","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Haptic","ListHeaderActionButton","jsx","_jsx","jsxs","_jsxs","ROW_PADDING_HORIZONTAL","ALL_CONVERSATIONS_LABEL","ARCHIVED_LABEL","FilterTypes","FILTER_PARAMS","All","Groups","group_source_app_name","Teams","DMs","show_direct_messages","FilterDropdownListHeaderComponent","$","_c","navigation","t0","Symbol","for","source_app_name","source_type","canFilterByTeams","t1","canFilterByGroups","directMessagesEligible","hasDirectMessages","canFilterByDMs","canBrowseArchived","searchEnabled","route","t2","params","title","chat_group_graph_id","t3","show_archived","undefined","currentPersonCache","markAllRead","isPending","canCreateConversations","entryMode","newConversationFromFilter","t4","t5","fields","Group","t6","url","data","app","t7","t8","enabled","group","t9","bb0","More","test","active","t10","id","label","t11","t12","t13","t14","options","t15","name","t16","triggerLabel","t17","navigate","screen","handleNewConversationNavigation","t18","setParams","handleSetFilter","t19","params_0","handleSelectFilter","t20","handleSearch","t21","handleChatSettings","t22","handleOpenConversationFilters","t23","update","unreadCount","notificationSuccess","handleMarkAllRead","t24","alert","text","onPress","alertMarkAllRead","showMoreFilters","styles","useStyles","t25","t26","titleContainer","style","children","t27","accessibilityLabel","testID","t28","t29","t30","actionsContainer","t31","headingRow","t32","markAllReadRow","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t33","listHeader","theme","atFontScaleBreakpoint","colors","fillColorNeutral050Base","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","alignItems","justifyContent","paddingHorizontal","flexShrink","minWidth"],"sources":["../../../../src/screens/conversations/components/filter_dropdown_list_header_component.tsx"],"sourcesContent":["import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'\nimport React, { useCallback, useMemo } from 'react'\nimport { Alert, StyleSheet, View } from 'react-native'\nimport { FilterDropdown, FilterDropdownOption, TextButton } from '../../../components'\nimport {\n useAtFontScaleBreakpoint,\n useCanBrowseArchivedConversations,\n useCanCreateConversations,\n useCurrentPersonCache,\n useDirectMessagesEligible,\n useHasDirectMessages,\n useNewConversationEntry,\n useTheme,\n} from '../../../hooks'\nimport { useApiGet } from '../../../hooks/use_api'\nimport { useMarkAllRead } from '../../../hooks/use_conversations_actions'\nimport { useCanDisplayGroups } from '../../../hooks/use_groups'\nimport { useNewConversationFromFilter } from '../../../hooks/use_new_conversation_from_filter'\nimport { useSearchEnabled } from '../../../hooks/use_search_enabled'\nimport { GraphId, GroupResource } 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 { ListHeaderActionButton } from './list_header_action_button'\n\nconst ROW_PADDING_HORIZONTAL = 16\nconst ALL_CONVERSATIONS_LABEL = 'All conversations'\nconst ARCHIVED_LABEL = 'Archived'\n\nenum FilterTypes {\n All = 'All',\n Groups = 'Groups',\n Teams = 'Teams',\n DMs = 'DMs',\n More = 'More',\n}\n\nconst FILTER_PARAMS: Record<Exclude<FilterTypes, FilterTypes.More>, ConversationFiltersParams> = {\n [FilterTypes.All]: {},\n [FilterTypes.Groups]: { group_source_app_name: 'Groups' },\n [FilterTypes.Teams]: { group_source_app_name: 'Services' },\n [FilterTypes.DMs]: { show_direct_messages: true },\n}\n\nexport const FilterDropdownListHeaderComponent = () => {\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 canBrowseArchived = useCanBrowseArchivedConversations()\n const searchEnabled = useSearchEnabled()\n const route = useRoute<RouteProp<ConversationsScreenProps['route']>>()\n const {\n title,\n chat_group_graph_id,\n group_source_app_name = '',\n show_direct_messages,\n show_archived,\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 const { data: group } = useApiGet<GroupResource>(\n { url: `/me/groups/${chat_group_graph_id}`, data: { fields: { Group: [] } }, app: 'chat' },\n { enabled: !!chat_group_graph_id }\n )\n\n const active: FilterTypes = useMemo(() => {\n if (chat_group_graph_id || show_archived) {\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, show_archived])\n\n const options: FilterDropdownOption[] = useMemo(\n () => [\n { id: FilterTypes.All, label: FilterTypes.All },\n ...(canFilterByGroups ? [{ id: FilterTypes.Groups, label: FilterTypes.Groups }] : []),\n ...(canFilterByTeams ? [{ id: FilterTypes.Teams, label: FilterTypes.Teams }] : []),\n ...(canFilterByDMs ? [{ id: FilterTypes.DMs, label: FilterTypes.DMs }] : []),\n ],\n [canFilterByGroups, canFilterByTeams, canFilterByDMs]\n )\n\n const triggerLabel = useMemo(() => {\n if (chat_group_graph_id) return group?.name || title || ALL_CONVERSATIONS_LABEL\n if (show_archived) return ARCHIVED_LABEL\n if (active === FilterTypes.All) return ALL_CONVERSATIONS_LABEL\n\n return active\n }, [chat_group_graph_id, group?.name, title, show_archived, active])\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 show_archived: undefined,\n ...params,\n })\n },\n [navigation]\n )\n\n const handleSelectFilter = useCallback(\n (id: string) => {\n const params = FILTER_PARAMS[id as keyof typeof FILTER_PARAMS]\n if (params) handleSetFilter(params)\n },\n [handleSetFilter]\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 show_archived,\n })\n }, [navigation, chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived])\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 showMoreFilters = canFilterByGroups || canFilterByTeams || canBrowseArchived\n\n const styles = useStyles()\n\n return (\n <View style={styles.listHeader}>\n <View style={styles.headingRow}>\n <View style={styles.titleContainer}>\n <FilterDropdown\n options={options}\n selectedId={active}\n onSelect={handleSelectFilter}\n onMoreFilters={handleOpenConversationFilters}\n showMoreFilters={showMoreFilters}\n triggerLabel={triggerLabel}\n />\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 {searchEnabled && (\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 )}\n </View>\n </View>\n {!show_archived && (\n <View style={styles.markAllReadRow}>\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 )}\n </View>\n )\n}\n\nconst useStyles = () => {\n const theme = useTheme()\n const atFontScaleBreakpoint = useAtFontScaleBreakpoint()\n\n return StyleSheet.create({\n listHeader: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.fillColorNeutral050Base,\n paddingBottom: 16,\n gap: 8,\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 flexShrink: 1,\n minWidth: 0,\n },\n actionsContainer: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n },\n markAllReadRow: {\n alignItems: 'flex-start',\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n })\n}\n"],"mappings":";AAAA,SAAoBA,aAAa,EAAEC,QAAQ,QAAQ,0BAA0B;AAC7E,OAAOC,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACnD,SAASC,KAAK,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACtD,SAASC,cAAc,EAAwBC,UAAU,QAAQ,qBAAqB;AACtF,SACEC,wBAAwB,EACxBC,iCAAiC,EACjCC,yBAAyB,EACzBC,qBAAqB,EACrBC,yBAAyB,EACzBC,oBAAoB,EACpBC,uBAAuB,EACvBC,QAAQ,QACH,gBAAgB;AACvB,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SAASC,cAAc,QAAQ,0CAA0C;AACzE,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,4BAA4B,QAAQ,iDAAiD;AAC9F,SAASC,gBAAgB,QAAQ,mCAAmC;AAEpE,SAASC,iCAAiC,QAAQ,gBAAgB;AAClE,SAASC,MAAM,QAAQ,gCAAgC;AAGvD,SAASC,sBAAsB,QAAQ,6BAA6B;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEpE,MAAMC,sBAAsB,GAAG,EAAE;AACjC,MAAMC,uBAAuB,GAAG,mBAAmB;AACnD,MAAMC,cAAc,GAAG,UAAU;AAAA,IAE5BC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA,EAAXA,WAAW;AAQhB,MAAMC,aAAwF,GAAG;EAC/F,CAACD,WAAW,CAACE,GAAG,GAAG,CAAC,CAAC;EACrB,CAACF,WAAW,CAACG,MAAM,GAAG;IAAEC,qBAAqB,EAAE;EAAS,CAAC;EACzD,CAACJ,WAAW,CAACK,KAAK,GAAG;IAAED,qBAAqB,EAAE;EAAW,CAAC;EAC1D,CAACJ,WAAW,CAACM,GAAG,GAAG;IAAEC,oBAAoB,EAAE;EAAK;AAClD,CAAC;AAED,OAAO,MAAMC,iCAAiC,GAAGA,CAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAC/C,MAAAC,UAAA,GAAmB5C,aAAa,CAAC,CAAC;EAAA,IAAA6C,EAAA;EAAA,IAAAH,CAAA,QAAAI,MAAA,CAAAC,GAAA;IACWF,EAAA;MAAAG,eAAA,EAAmB,UAAU;MAAAC,WAAA,EAAe;IAAO,CAAC;IAAAP,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAjG,MAAAQ,gBAAA,GAAyB9B,mBAAmB,CAACyB,EAAoD,CAAC;EAAA,IAAAM,EAAA;EAAA,IAAAT,CAAA,QAAAI,MAAA,CAAAC,GAAA;IACpDI,EAAA;MAAAH,eAAA,EAAmB,QAAQ;MAAAC,WAAA,EAAe;IAAQ,CAAC;IAAAP,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAjG,MAAAU,iBAAA,GAA0BhC,mBAAmB,CAAC+B,EAAmD,CAAC;EAClG,MAAAE,sBAAA,GAA+BvC,yBAAyB,CAAC,CAAC;EAC1D,MAAAwC,iBAAA,GAA0BvC,oBAAoB,CAAC,CAAC;EAChD,MAAAwC,cAAA,GAAuBF,sBAA2C,IAA3CC,iBAA2C;EAClE,MAAAE,iBAAA,GAA0B7C,iCAAiC,CAAC,CAAC;EAC7D,MAAA8C,aAAA,GAAsBnC,gBAAgB,CAAC,CAAC;EACxC,MAAAoC,KAAA,GAAczD,QAAQ,CAA+C,CAAC;EAAA,IAAA0D,EAAA;EAAA,IAAAjB,CAAA,QAAAgB,KAAA,CAAAE,MAAA;IAOlED,EAAA,GAAAD,KAAK,CAAAE,MAAa,IAAlB,CAAiB,CAAC;IAAAlB,CAAA,MAAAgB,KAAA,CAAAE,MAAA;IAAAlB,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EANtB;IAAAmB,KAAA;IAAAC,mBAAA;IAAAzB,qBAAA,EAAA0B,EAAA;IAAAvB,oBAAA;IAAAwB;EAAA,IAMIL,EAAkB;EAHpB,MAAAtB,qBAAA,GAAA0B,EAA0B,KAA1BE,SAA0B,GAA1B,EAA0B,GAA1BF,EAA0B;EAI5B,MAAAG,kBAAA,GAA2BrD,qBAAqB,CAAC,CAAC;EAClD;IAAAsD,WAAA;IAAAC;EAAA,IAAmCjD,cAAc,CAAC,CAAC;EACnD,MAAAkD,sBAAA,GAA+BzD,yBAAyB,CAAC,CAAC;EAC1D,MAAA0D,SAAA,GAAkBtD,uBAAuB,CAAC,CAAC;EAC3C,MAAAuD,yBAAA,GAAkClD,4BAA4B,CAC5DyC,mBACF,CAAC;EAEQ,MAAAU,EAAA,iBAAcV,mBAAmB,EAAE;EAAA,IAAAW,EAAA;EAAA,IAAA/B,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAAQ0B,EAAA;MAAAC,MAAA,EAAU;QAAAC,KAAA,EAAS;MAAG;IAAE,CAAC;IAAAjC,CAAA,MAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAAA,IAAAkC,EAAA;EAAA,IAAAlC,CAAA,QAAA8B,EAAA;IAA3EI,EAAA;MAAAC,GAAA,EAAOL,EAAmC;MAAAM,IAAA,EAAQL,EAAyB;MAAAM,GAAA,EAAO;IAAO,CAAC;IAAArC,CAAA,MAAA8B,EAAA;IAAA9B,CAAA,MAAAkC,EAAA;EAAA;IAAAA,EAAA,GAAAlC,CAAA;EAAA;EAC/E,MAAAsC,EAAA,IAAC,CAAClB,mBAAmB;EAAA,IAAAmB,EAAA;EAAA,IAAAvC,CAAA,QAAAsC,EAAA;IAAhCC,EAAA;MAAAC,OAAA,EAAWF;IAAsB,CAAC;IAAAtC,CAAA,MAAAsC,EAAA;IAAAtC,CAAA,MAAAuC,EAAA;EAAA;IAAAA,EAAA,GAAAvC,CAAA;EAAA;EAFpC;IAAAoC,IAAA,EAAAK;EAAA,IAAwBjE,SAAS,CAC/B0D,EAA0F,EAC1FK,EACF,CAAC;EAAA,IAAAG,EAAA;EAAAC,GAAA;IAGC,IAAIvB,mBAAoC,IAApCE,aAAoC;MACtCoB,EAAA,GAAOnD,WAAW,CAAAqD,IAAK;MAAvB,MAAAD,GAAA;IAAuB;MAClB,IAAI,SAAS,CAAAE,IAAK,CAAClD,qBAAqB,CAAC;QAC9C+C,EAAA,GAAOnD,WAAW,CAAAG,MAAO;QAAzB,MAAAiD,GAAA;MAAyB;QACpB,IAAI,WAAW,CAAAE,IAAK,CAAClD,qBAAqB,CAAC;UAChD+C,EAAA,GAAOnD,WAAW,CAAAK,KAAM;UAAxB,MAAA+C,GAAA;QAAwB;UACnB,IAAI7C,oBAAoB;YAC7B4C,EAAA,GAAOnD,WAAW,CAAAM,GAAI;YAAtB,MAAA8C,GAAA;UAAsB;QACvB;MAAA;IAAA;IAEDD,EAAA,GAAOnD,WAAW,CAAAE,GAAI;EAAA;EAXxB,MAAAqD,MAAA,GAA4BJ,EAYyD;EAAA,IAAAK,GAAA;EAAA,IAAA/C,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAIjF0C,GAAA;MAAAC,EAAA,EAAMzD,WAAW,CAAAE,GAAI;MAAAwD,KAAA,EAAS1D,WAAW,CAAAE;IAAK,CAAC;IAAAO,CAAA,MAAA+C,GAAA;EAAA;IAAAA,GAAA,GAAA/C,CAAA;EAAA;EAAA,IAAAkD,GAAA;EAAA,IAAAlD,CAAA,SAAAU,iBAAA;IAC3CwC,GAAA,GAAAxC,iBAAiB,GAAjB,CAAqB;MAAAsC,EAAA,EAAMzD,WAAW,CAAAG,MAAO;MAAAuD,KAAA,EAAS1D,WAAW,CAAAG;IAAQ,CAAC,CAAM,GAAhF,EAAgF;IAAAM,CAAA,OAAAU,iBAAA;IAAAV,CAAA,OAAAkD,GAAA;EAAA;IAAAA,GAAA,GAAAlD,CAAA;EAAA;EAAA,IAAAmD,GAAA;EAAA,IAAAnD,CAAA,SAAAQ,gBAAA;IAChF2C,GAAA,GAAA3C,gBAAgB,GAAhB,CAAoB;MAAAwC,EAAA,EAAMzD,WAAW,CAAAK,KAAM;MAAAqD,KAAA,EAAS1D,WAAW,CAAAK;IAAO,CAAC,CAAM,GAA7E,EAA6E;IAAAI,CAAA,OAAAQ,gBAAA;IAAAR,CAAA,OAAAmD,GAAA;EAAA;IAAAA,GAAA,GAAAnD,CAAA;EAAA;EAAA,IAAAoD,GAAA;EAAA,IAAApD,CAAA,SAAAa,cAAA;IAC7EuC,GAAA,GAAAvC,cAAc,GAAd,CAAkB;MAAAmC,EAAA,EAAMzD,WAAW,CAAAM,GAAI;MAAAoD,KAAA,EAAS1D,WAAW,CAAAM;IAAK,CAAC,CAAM,GAAvE,EAAuE;IAAAG,CAAA,OAAAa,cAAA;IAAAb,CAAA,OAAAoD,GAAA;EAAA;IAAAA,GAAA,GAAApD,CAAA;EAAA;EAAA,IAAAqD,GAAA;EAAA,IAAArD,CAAA,SAAAkD,GAAA,IAAAlD,CAAA,SAAAmD,GAAA,IAAAnD,CAAA,SAAAoD,GAAA;IAJvEC,GAAA,IACJN,GAA+C,KAC3CG,GAAgF,KAChFC,GAA6E,KAC7EC,GAAuE,CAC5E;IAAApD,CAAA,OAAAkD,GAAA;IAAAlD,CAAA,OAAAmD,GAAA;IAAAnD,CAAA,OAAAoD,GAAA;IAAApD,CAAA,OAAAqD,GAAA;EAAA;IAAAA,GAAA,GAAArD,CAAA;EAAA;EANH,MAAAsD,OAAA,GACQD,GAKL;EAEF,IAAAE,GAAA;EAAA,IAAAvD,CAAA,SAAA8C,MAAA,IAAA9C,CAAA,SAAAoB,mBAAA,IAAApB,CAAA,SAAAyC,KAAA,EAAAe,IAAA,IAAAxD,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAmB,KAAA;IAE4BoC,GAAA,GAAAA,CAAA;MAC3B,IAAInC,mBAAmB;QAAA,OAASqB,KAAK,EAAAe,IAAe,IAApBrC,KAA+C,IAA/C9B,uBAA+C;MAAA;MAC/E,IAAIiC,aAAa;QAAA,OAAShC,cAAc;MAAA;MACxC,IAAIwD,MAAM,KAAKvD,WAAW,CAAAE,GAAI;QAAA,OAASJ,uBAAuB;MAAA;MAAA,OAEvDyD,MAAM;IAAA,CACd;IAAA9C,CAAA,OAAA8C,MAAA;IAAA9C,CAAA,OAAAoB,mBAAA;IAAApB,CAAA,OAAAyC,KAAA,EAAAe,IAAA;IAAAxD,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAmB,KAAA;IAAAnB,CAAA,OAAAuD,GAAA;EAAA;IAAAA,GAAA,GAAAvD,CAAA;EAAA;EAAwByC,KAAK,EAAAe,IAAM;EAAA,IAAAC,GAAA;EAAA,IAAAzD,CAAA,SAAAuD,GAAA;IANfE,GAAA,GAAQF,GAM5B,CAAkE,CAAC;IAAAvD,CAAA,OAAAuD,GAAA;IAAAvD,CAAA,OAAAyD,GAAA;EAAA;IAAAA,GAAA,GAAAzD,CAAA;EAAA;EANpE,MAAA0D,YAAA,GAAqBD,GAM+C;EAAA,IAAAE,GAAA;EAAA,IAAA3D,CAAA,SAAA4B,SAAA,IAAA5B,CAAA,SAAAE,UAAA,IAAAF,CAAA,SAAA6B,yBAAA,IAAA7B,CAAA,SAAAgB,KAAA,CAAAE,MAAA;IAEhByC,GAAA,GAAAA,CAAA;MAClD,IAAI9B,yBAAwD,IAA3BD,SAAS,KAAK,aAAa;QAAA,OACnD1B,UAAU,CAAA0D,QAAS,CAAC,wBAAwB,EAAE;UAAA,GAChD5C,KAAK,CAAAE,MAAO;UAAAW;QAEjB,CAAC,CAAC;MAAA;MAGJ,IAAID,SAAS,KAAK,QAAQ;QAAA,OACjB1B,UAAU,CAAA0D,QAAS,CAAC,KAAK,EAAE;UAAAC,MAAA,EACxB,mCAAmC;UAAA3C,MAAA,EACnC;YAAA,GAAKF,KAAK,CAAAE;UAAQ;QAC5B,CAAC,CAAC;MAAA;MAGJ,IAAIU,SAAS,KAAK,OAAO;QAAA,OAChB1B,UAAU,CAAA0D,QAAS,CAAC,KAAK,EAAE;UAAAC,MAAA,EACxB,wCAAwC;UAAA3C,MAAA,EACxC;YAAA,GAAKF,KAAK,CAAAE;UAAQ;QAC5B,CAAC,CAAC;MAAA;MAGJ,IAAIU,SAAS,KAAK,gBAAgB;QAAA,OACzB1B,UAAU,CAAA0D,QAAS,CAAC,KAAK,EAAE;UAAAC,MAAA,EACxB,2CAA2C;UAAA3C,MAAA,EAC3C;YAAA,GAAKF,KAAK,CAAAE;UAAQ;QAC5B,CAAC,CAAC;MAAA;IACH,CACF;IAAAlB,CAAA,OAAA4B,SAAA;IAAA5B,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAA6B,yBAAA;IAAA7B,CAAA,OAAAgB,KAAA,CAAAE,MAAA;IAAAlB,CAAA,OAAA2D,GAAA;EAAA;IAAAA,GAAA,GAAA3D,CAAA;EAAA;EA5BD,MAAA8D,+BAAA,GAAwCH,GA4B4B;EAAA,IAAAI,GAAA;EAAA,IAAA/D,CAAA,SAAAE,UAAA;IAGlE6D,GAAA,GAAA7C,MAAA;MACEhB,UAAU,CAAA8D,SAAU,CAAC;QAAA7C,KAAA,EACZI,SAAS;QAAAH,mBAAA,EACKG,SAAS;QAAA5B,qBAAA,EACP4B,SAAS;QAAAzB,oBAAA,EACVyB,SAAS;QAAAD,aAAA,EAChBC,SAAS;QAAA,GACrBL;MACL,CAAC,CAAC;IAAA,CACH;IAAAlB,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAA+D,GAAA;EAAA;IAAAA,GAAA,GAAA/D,CAAA;EAAA;EAVH,MAAAiE,eAAA,GAAwBF,GAYvB;EAAA,IAAAG,GAAA;EAAA,IAAAlE,CAAA,SAAAiE,eAAA;IAGCC,GAAA,GAAAlB,EAAA;MACE,MAAAmB,QAAA,GAAe3E,aAAa,CAACwD,EAAE,CAA+B;MAC9D,IAAI9B,QAAM;QAAE+C,eAAe,CAAC/C,QAAM,CAAC;MAAA;IAAA,CACpC;IAAAlB,CAAA,OAAAiE,eAAA;IAAAjE,CAAA,OAAAkE,GAAA;EAAA;IAAAA,GAAA,GAAAlE,CAAA;EAAA;EAJH,MAAAoE,kBAAA,GAA2BF,GAM1B;EAAA,IAAAG,GAAA;EAAA,IAAArE,CAAA,SAAAE,UAAA;IAEgCmE,GAAA,GAAAA,CAAA;MAC/BnE,UAAU,CAAA0D,QAAS,CAAC,QAAQ,CAAC;IAAA,CAC9B;IAAA5D,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAAqE,GAAA;EAAA;IAAAA,GAAA,GAAArE,CAAA;EAAA;EAFD,MAAAsE,YAAA,GAAqBD,GAEL;EAAA,IAAAE,GAAA;EAAA,IAAAvE,CAAA,SAAAE,UAAA;IAEuBqE,GAAA,GAAAA,CAAA;MACrCrE,UAAU,CAAA0D,QAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAAA,CACxC;IAAA5D,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAAuE,GAAA;EAAA;IAAAA,GAAA,GAAAvE,CAAA;EAAA;EAFD,MAAAwE,kBAAA,GAA2BD,GAEX;EAAA,IAAAE,GAAA;EAAA,IAAAzE,CAAA,SAAAoB,mBAAA,IAAApB,CAAA,SAAAL,qBAAA,IAAAK,CAAA,SAAAE,UAAA,IAAAF,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAF,oBAAA;IAEkC2E,GAAA,GAAAA,CAAA;MAChDvE,UAAU,CAAA0D,QAAS,CAAC,qBAAqB,EAAE;QAAAxC,mBAAA;QAAAzB,qBAAA;QAAAG,oBAAA;QAAAwB;MAK3C,CAAC,CAAC;IAAA,CACH;IAAAtB,CAAA,OAAAoB,mBAAA;IAAApB,CAAA,OAAAL,qBAAA;IAAAK,CAAA,OAAAE,UAAA;IAAAF,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAF,oBAAA;IAAAE,CAAA,OAAAyE,GAAA;EAAA;IAAAA,GAAA,GAAAzE,CAAA;EAAA;EAPD,MAAA0E,6BAAA,GAAsCD,GAO2D;EAAA,IAAAE,GAAA;EAAA,IAAA3E,CAAA,SAAAwB,kBAAA,IAAAxB,CAAA,SAAAyB,WAAA;IAE3DkD,GAAA,GAAAA,CAAA;MACpCnD,kBAAkB,CAAAoD,MAAO,CAAC;QAAAC,WAAA,EAAe;MAAE,CAAC,CAAC;MAC7C/F,MAAM,CAAAgG,mBAAoB,CAAC,CAAC;MAC5BrD,WAAW,CAAC,CAAC;IAAA,CACd;IAAAzB,CAAA,OAAAwB,kBAAA;IAAAxB,CAAA,OAAAyB,WAAA;IAAAzB,CAAA,OAAA2E,GAAA;EAAA;IAAAA,GAAA,GAAA3E,CAAA;EAAA;EAJD,MAAA+E,iBAAA,GAA0BJ,GAIW;EAAA,IAAAK,GAAA;EAAA,IAAAhF,CAAA,SAAA8C,MAAA,IAAA9C,CAAA,SAAA+E,iBAAA;IAEAC,GAAA,GAAAA,CAAA;MACnC,IAAIlC,MAAM,KAAKvD,WAAW,CAAAE,GAAI;QAAA,OAASsF,iBAAiB,CAAC,CAAC;MAAA;MAE1DpH,KAAK,CAAAsH,KAAM,CAAC,eAAe,EAAE,8DAA8D,EAAE,CAC3F;QAAAC,IAAA,EAAQ;MAAS,CAAC,EAClB;QAAAA,IAAA,EAAQ,IAAI;QAAAC,OAAA,EAAWA,CAAA,KAAMJ,iBAAiB,CAAC;MAAE,CAAC,CACnD,CAAC;IAAA,CACH;IAAA/E,CAAA,OAAA8C,MAAA;IAAA9C,CAAA,OAAA+E,iBAAA;IAAA/E,CAAA,OAAAgF,GAAA;EAAA;IAAAA,GAAA,GAAAhF,CAAA;EAAA;EAPD,MAAAoF,gBAAA,GAAyBJ,GAOM;EAE/B,MAAAK,eAAA,GAAwB3E,iBAAqC,IAArCF,gBAA0D,IAA1DM,iBAA0D;EAElF,MAAAwE,MAAA,GAAeC,SAAS,CAAC,CAAC;EAAA,IAAAC,GAAA;EAAA,IAAAxF,CAAA,SAAA8C,MAAA,IAAA9C,CAAA,SAAA0E,6BAAA,IAAA1E,CAAA,SAAAoE,kBAAA,IAAApE,CAAA,SAAAsD,OAAA,IAAAtD,CAAA,SAAAqF,eAAA,IAAArF,CAAA,SAAA0D,YAAA;IAMlB8B,GAAA,gBAAAvG,IAAA,CAACnB,cAAc;MACJwF,OAAO,EAAPA,OAAO;MACJR,UAAM,EAANA,MAAM;MACRsB,QAAkB,EAAlBA,kBAAkB;MACbM,aAA6B,EAA7BA,6BAA6B;MAC3BW,eAAe,EAAfA,eAAe;MAClB3B,YAAY,EAAZA;IAAY,CAC3B,CAAC;IAAA1D,CAAA,OAAA8C,MAAA;IAAA9C,CAAA,OAAA0E,6BAAA;IAAA1E,CAAA,OAAAoE,kBAAA;IAAApE,CAAA,OAAAsD,OAAA;IAAAtD,CAAA,OAAAqF,eAAA;IAAArF,CAAA,OAAA0D,YAAA;IAAA1D,CAAA,OAAAwF,GAAA;EAAA;IAAAA,GAAA,GAAAxF,CAAA;EAAA;EAAA,IAAAyF,GAAA;EAAA,IAAAzF,CAAA,SAAAsF,MAAA,CAAAI,cAAA,IAAA1F,CAAA,SAAAwF,GAAA;IARJC,GAAA,gBAAAxG,IAAA,CAACpB,IAAI;MAAQ8H,KAAqB,EAArBL,MAAM,CAAAI,cAAe;MAAAE,QAAA,EAChCJ;IAOE,CACE,CAAC;IAAAxF,CAAA,OAAAsF,MAAA,CAAAI,cAAA;IAAA1F,CAAA,OAAAwF,GAAA;IAAAxF,CAAA,OAAAyF,GAAA;EAAA;IAAAA,GAAA,GAAAzF,CAAA;EAAA;EAAA,IAAA6F,GAAA;EAAA,IAAA7F,CAAA,SAAAwE,kBAAA;IAELqB,GAAA,gBAAA5G,IAAA,CAACF,sBAAsB;MAChByE,IAAa,EAAb,aAAa;MACTgB,OAAkB,EAAlBA,kBAAkB;MACRsB,kBAAe,EAAf,eAAe;MAC3BC,MAAoC,EAApC,oCAAoC;MACpBlH,qBAAiC,EAAjCA;IAAiC,CACzD,CAAC;IAAAmB,CAAA,OAAAwE,kBAAA;IAAAxE,CAAA,OAAA6F,GAAA;EAAA;IAAAA,GAAA,GAAA7F,CAAA;EAAA;EAAA,IAAAgG,GAAA;EAAA,IAAAhG,CAAA,SAAA2B,sBAAA,IAAA3B,CAAA,SAAA8D,+BAAA;IACDkC,GAAA,GAAArE,sBAQA,iBARA1C,IAAA,CACEF,sBAAsB;MAChByE,IAAsB,EAAtB,sBAAsB;MAClBM,OAA+B,EAA/BA,+BAA+B;MACrBgC,kBAAkB,EAAlB,kBAAkB;MAC9BC,MAAuC,EAAvC,uCAAuC;MACvBlH,qBAAiC,EAAjCA;IAAiC,CAE5D,CAAC;IAAAmB,CAAA,OAAA2B,sBAAA;IAAA3B,CAAA,OAAA8D,+BAAA;IAAA9D,CAAA,OAAAgG,GAAA;EAAA;IAAAA,GAAA,GAAAhG,CAAA;EAAA;EAAA,IAAAiG,GAAA;EAAA,IAAAjG,CAAA,SAAAsE,YAAA,IAAAtE,CAAA,SAAAe,aAAA;IACAkF,GAAA,GAAAlF,aAQA,iBARA9B,IAAA,CACEF,sBAAsB;MAChByE,IAAgB,EAAhB,gBAAgB;MACZc,OAAY,EAAZA,YAAY;MACFwB,kBAAQ,EAAR,QAAQ;MACpBC,MAA6B,EAA7B,6BAA6B;MACblH,qBAAiC,EAAjCA;IAAiC,CAE5D,CAAC;IAAAmB,CAAA,OAAAsE,YAAA;IAAAtE,CAAA,OAAAe,aAAA;IAAAf,CAAA,OAAAiG,GAAA;EAAA;IAAAA,GAAA,GAAAjG,CAAA;EAAA;EAAA,IAAAkG,GAAA;EAAA,IAAAlG,CAAA,SAAAsF,MAAA,CAAAa,gBAAA,IAAAnG,CAAA,SAAA6F,GAAA,IAAA7F,CAAA,SAAAgG,GAAA,IAAAhG,CAAA,SAAAiG,GAAA;IAzBHC,GAAA,gBAAA/G,KAAA,CAACtB,IAAI;MAAQ8H,KAAuB,EAAvBL,MAAM,CAAAa,gBAAiB;MAAAP,QAAA,GAClCC,GAME,EACDG,GAQA,EACAC,GAQA;IAAA,CACG,CAAC;IAAAjG,CAAA,OAAAsF,MAAA,CAAAa,gBAAA;IAAAnG,CAAA,OAAA6F,GAAA;IAAA7F,CAAA,OAAAgG,GAAA;IAAAhG,CAAA,OAAAiG,GAAA;IAAAjG,CAAA,OAAAkG,GAAA;EAAA;IAAAA,GAAA,GAAAlG,CAAA;EAAA;EAAA,IAAAoG,GAAA;EAAA,IAAApG,CAAA,SAAAsF,MAAA,CAAAe,UAAA,IAAArG,CAAA,SAAAyF,GAAA,IAAAzF,CAAA,SAAAkG,GAAA;IArCTE,GAAA,gBAAAjH,KAAA,CAACtB,IAAI;MAAQ8H,KAAiB,EAAjBL,MAAM,CAAAe,UAAW;MAAAT,QAAA,GAC5BH,GASO,EACPS,GA0BO;IAAA,CACH,CAAC;IAAAlG,CAAA,OAAAsF,MAAA,CAAAe,UAAA;IAAArG,CAAA,OAAAyF,GAAA;IAAAzF,CAAA,OAAAkG,GAAA;IAAAlG,CAAA,OAAAoG,GAAA;EAAA;IAAAA,GAAA,GAAApG,CAAA;EAAA;EAAA,IAAAsG,GAAA;EAAA,IAAAtG,CAAA,SAAAoF,gBAAA,IAAApF,CAAA,SAAA0B,SAAA,IAAA1B,CAAA,SAAAsB,aAAA,IAAAtB,CAAA,SAAAsF,MAAA,CAAAiB,cAAA;IACND,GAAA,IAAChF,aAYD,iBAZArC,IAAA,CACEpB,IAAI;MAAQ8H,KAAqB,EAArBL,MAAM,CAAAiB,cAAe;MAAAX,QAAA,eAChC3G,IAAA,CAAClB,UAAU;QACAqH,OAAgB,EAAhBA,gBAAgB;QACf1D,QAAS,EAATA,SAAS;QACI7C,qBAAiC,EAAjCA,iCAAiC;QACxD2H,oCAAoC,EAApC,IAAoC;QACLC,8BAAe,EAAf,eAAe;QAAAb,QAAA,EAC/C;MAED,CAAY;IAAC,CAEjB,CAAC;IAAA5F,CAAA,OAAAoF,gBAAA;IAAApF,CAAA,OAAA0B,SAAA;IAAA1B,CAAA,OAAAsB,aAAA;IAAAtB,CAAA,OAAAsF,MAAA,CAAAiB,cAAA;IAAAvG,CAAA,OAAAsG,GAAA;EAAA;IAAAA,GAAA,GAAAtG,CAAA;EAAA;EAAA,IAAA0G,GAAA;EAAA,IAAA1G,CAAA,SAAAsF,MAAA,CAAAqB,UAAA,IAAA3G,CAAA,SAAAoG,GAAA,IAAApG,CAAA,SAAAsG,GAAA;IApDHI,GAAA,gBAAAvH,KAAA,CAACtB,IAAI;MAAQ8H,KAAiB,EAAjBL,MAAM,CAAAqB,UAAW;MAAAf,QAAA,GAC5BQ,GAsCO,EACNE,GAYA;IAAA,CACG,CAAC;IAAAtG,CAAA,OAAAsF,MAAA,CAAAqB,UAAA;IAAA3G,CAAA,OAAAoG,GAAA;IAAApG,CAAA,OAAAsG,GAAA;IAAAtG,CAAA,OAAA0G,GAAA;EAAA;IAAAA,GAAA,GAAA1G,CAAA;EAAA;EAAA,OArDP0G,GAqDO;AAAA,CAEV;AAED,MAAMnB,SAAS,GAAGA,CAAA;EAAA,MAAAvF,CAAA,GAAAC,EAAA;EAChB,MAAA2G,KAAA,GAAcrI,QAAQ,CAAC,CAAC;EACxB,MAAAsI,qBAAA,GAA8B7I,wBAAwB,CAAC,CAAC;EAAA,IAAAmC,EAAA;EAAA,IAAAH,CAAA,QAAA6G,qBAAA,IAAA7G,CAAA,QAAA4G,KAAA,CAAAE,MAAA,CAAAC,uBAAA;IAEjD5G,EAAA,GAAAvC,UAAU,CAAAoJ,MAAO,CAAC;MAAAL,UAAA,EACX;QAAAM,iBAAA,EACS,CAAC;QAAAC,iBAAA,EACDN,KAAK,CAAAE,MAAO,CAAAC,uBAAwB;QAAAI,aAAA,EACxC,EAAE;QAAAC,GAAA,EACZ;MACP,CAAC;MAAAf,UAAA,EACW;QAAAe,GAAA,EACL,EAAE;QAAAC,aAAA,EACQR,qBAAqB,GAArB,QAAwC,GAAxC,KAAwC;QAAAS,UAAA,EAC3CT,qBAAqB,GAArB,YAA+C,GAA/C,QAA+C;QAAAU,cAAA,EAC3C,eAAe;QAAAJ,aAAA,EAChBN,qBAAqB,GAArB,CAA6B,GAA7B,CAA6B;QAAAW,iBAAA,EACzBpI;MACrB,CAAC;MAAAsG,cAAA,EACe;QAAA+B,UAAA,EACF,CAAC;QAAAC,QAAA,EACH;MACZ,CAAC;MAAAvB,gBAAA,EACiB;QAAAkB,aAAA,EACD,KAAK;QAAAD,GAAA,EACf,CAAC;QAAAE,UAAA,EACM;MACd,CAAC;MAAAf,cAAA,EACe;QAAAe,UAAA,EACF,YAAY;QAAAE,iBAAA,EACLpI;MACrB;IACF,CAAC,CAAC;IAAAY,CAAA,MAAA6G,qBAAA;IAAA7G,CAAA,MAAA4G,KAAA,CAAAE,MAAA,CAAAC,uBAAA;IAAA/G,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,OA5BKG,EA4BL;AAAA,CACH","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"filter_dropdown_list_header_component.js","names":["useNavigation","useRoute","React","useCallback","useMemo","Alert","StyleSheet","View","FilterDropdown","TextButton","useAtFontScaleBreakpoint","useCanBrowseArchivedConversations","useCanCreateConversations","useCurrentPersonCache","useDirectMessagesEligible","useHasDirectMessages","useNewConversationEntry","useTheme","useApiGet","useMarkAllRead","useCanDisplayGroups","useNewConversationFromFilter","useSearchEnabled","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","Haptic","ListHeaderActionButton","jsx","_jsx","jsxs","_jsxs","ROW_PADDING_HORIZONTAL","ALL_CONVERSATIONS_LABEL","ARCHIVED_LABEL","FilterTypes","FILTER_PARAMS","All","Groups","group_source_app_name","Teams","DMs","show_direct_messages","Unread","show_unread","FilterDropdownListHeaderComponent","$","_c","navigation","t0","Symbol","for","source_app_name","source_type","canFilterByTeams","t1","canFilterByGroups","directMessagesEligible","hasDirectMessages","canFilterByDMs","canBrowseArchived","searchEnabled","route","t2","params","title","chat_group_graph_id","t3","show_archived","undefined","currentPersonCache","markAllRead","isPending","canCreateConversations","entryMode","newConversationFromFilter","t4","t5","fields","Group","t6","url","data","app","t7","t8","enabled","group","t9","bb0","More","test","active","t10","id","label","t11","t12","t13","t14","t15","options","t16","name","t17","triggerLabel","t18","navigate","screen","handleNewConversationNavigation","t19","setParams","handleSetFilter","t20","params_0","handleSelectFilter","t21","handleSearch","t22","handleChatSettings","t23","handleOpenConversationFilters","t24","update","unreadCount","notificationSuccess","handleMarkAllRead","t25","alert","text","onPress","alertMarkAllRead","showMoreFilters","styles","useStyles","t26","t27","titleContainer","style","children","t28","accessibilityLabel","testID","t29","t30","t31","actionsContainer","t32","headingRow","t33","markAllReadRow","accessibilityShowsLargeContentViewer","accessibilityLargeContentTitle","t34","listHeader","theme","atFontScaleBreakpoint","colors","fillColorNeutral050Base","create","borderBottomWidth","borderBottomColor","paddingBottom","gap","flexDirection","alignItems","justifyContent","paddingHorizontal","flexShrink","minWidth"],"sources":["../../../../src/screens/conversations/components/filter_dropdown_list_header_component.tsx"],"sourcesContent":["import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'\nimport React, { useCallback, useMemo } from 'react'\nimport { Alert, StyleSheet, View } from 'react-native'\nimport { FilterDropdown, FilterDropdownOption, TextButton } from '../../../components'\nimport {\n useAtFontScaleBreakpoint,\n useCanBrowseArchivedConversations,\n useCanCreateConversations,\n useCurrentPersonCache,\n useDirectMessagesEligible,\n useHasDirectMessages,\n useNewConversationEntry,\n useTheme,\n} from '../../../hooks'\nimport { useApiGet } from '../../../hooks/use_api'\nimport { useMarkAllRead } from '../../../hooks/use_conversations_actions'\nimport { useCanDisplayGroups } from '../../../hooks/use_groups'\nimport { useNewConversationFromFilter } from '../../../hooks/use_new_conversation_from_filter'\nimport { useSearchEnabled } from '../../../hooks/use_search_enabled'\nimport { GraphId, GroupResource } 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 { ListHeaderActionButton } from './list_header_action_button'\n\nconst ROW_PADDING_HORIZONTAL = 16\nconst ALL_CONVERSATIONS_LABEL = 'All conversations'\nconst ARCHIVED_LABEL = 'Archived'\n\nenum FilterTypes {\n All = 'All',\n Groups = 'Groups',\n Teams = 'Teams',\n DMs = 'DMs',\n Unread = 'Unread',\n More = 'More',\n}\n\nconst FILTER_PARAMS: Record<Exclude<FilterTypes, FilterTypes.More>, ConversationFiltersParams> = {\n [FilterTypes.All]: {},\n [FilterTypes.Groups]: { group_source_app_name: 'Groups' },\n [FilterTypes.Teams]: { group_source_app_name: 'Services' },\n [FilterTypes.DMs]: { show_direct_messages: true },\n [FilterTypes.Unread]: { show_unread: true },\n}\n\nexport const FilterDropdownListHeaderComponent = () => {\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 canBrowseArchived = useCanBrowseArchivedConversations()\n const searchEnabled = useSearchEnabled()\n const route = useRoute<RouteProp<ConversationsScreenProps['route']>>()\n const {\n title,\n chat_group_graph_id,\n group_source_app_name = '',\n show_direct_messages,\n show_archived,\n show_unread,\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 const { data: group } = useApiGet<GroupResource>(\n { url: `/me/groups/${chat_group_graph_id}`, data: { fields: { Group: [] } }, app: 'chat' },\n { enabled: !!chat_group_graph_id }\n )\n\n const active: FilterTypes = useMemo(() => {\n if (chat_group_graph_id || show_archived) {\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 } else if (show_unread) {\n return FilterTypes.Unread\n }\n\n return FilterTypes.All\n }, [chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived, show_unread])\n\n const options: FilterDropdownOption[] = useMemo(\n () => [\n { id: FilterTypes.All, label: FilterTypes.All },\n ...(canFilterByGroups ? [{ id: FilterTypes.Groups, label: FilterTypes.Groups }] : []),\n ...(canFilterByTeams ? [{ id: FilterTypes.Teams, label: FilterTypes.Teams }] : []),\n ...(canFilterByDMs ? [{ id: FilterTypes.DMs, label: FilterTypes.DMs }] : []),\n { id: FilterTypes.Unread, label: FilterTypes.Unread },\n ],\n [canFilterByGroups, canFilterByTeams, canFilterByDMs]\n )\n\n const triggerLabel = useMemo(() => {\n if (chat_group_graph_id) return group?.name || title || ALL_CONVERSATIONS_LABEL\n if (show_archived) return ARCHIVED_LABEL\n if (active === FilterTypes.All) return ALL_CONVERSATIONS_LABEL\n\n return active\n }, [chat_group_graph_id, group?.name, title, show_archived, active])\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 show_archived: undefined,\n show_unread: undefined,\n ...params,\n })\n },\n [navigation]\n )\n\n const handleSelectFilter = useCallback(\n (id: string) => {\n const params = FILTER_PARAMS[id as keyof typeof FILTER_PARAMS]\n if (params) handleSetFilter(params)\n },\n [handleSetFilter]\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 show_archived,\n show_unread,\n })\n }, [\n navigation,\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n show_archived,\n show_unread,\n ])\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 showMoreFilters = canFilterByGroups || canFilterByTeams || canBrowseArchived\n\n const styles = useStyles()\n\n return (\n <View style={styles.listHeader}>\n <View style={styles.headingRow}>\n <View style={styles.titleContainer}>\n <FilterDropdown\n options={options}\n selectedId={active}\n onSelect={handleSelectFilter}\n onMoreFilters={handleOpenConversationFilters}\n showMoreFilters={showMoreFilters}\n triggerLabel={triggerLabel}\n />\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 {searchEnabled && (\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 )}\n </View>\n </View>\n {!show_archived && (\n <View style={styles.markAllReadRow}>\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 )}\n </View>\n )\n}\n\nconst useStyles = () => {\n const theme = useTheme()\n const atFontScaleBreakpoint = useAtFontScaleBreakpoint()\n\n return StyleSheet.create({\n listHeader: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.fillColorNeutral050Base,\n paddingBottom: 16,\n gap: 8,\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 flexShrink: 1,\n minWidth: 0,\n },\n actionsContainer: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n },\n markAllReadRow: {\n alignItems: 'flex-start',\n paddingHorizontal: ROW_PADDING_HORIZONTAL,\n },\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,6 +7,7 @@ export type ConversationsScreenProps = StaticScreenProps<{
|
|
|
7
7
|
group_source_app_name?: AppName;
|
|
8
8
|
show_direct_messages?: boolean;
|
|
9
9
|
show_archived?: boolean;
|
|
10
|
+
show_unread?: boolean;
|
|
10
11
|
}>;
|
|
11
12
|
export declare function ConversationsScreen({ route }: ConversationsScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
//# sourceMappingURL=conversations_screen.d.ts.map
|
|
@@ -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;AAQ5D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAM9D,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;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;
|
|
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;AAQ5D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAM9D,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;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAC,CAAA;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,wBAAwB,2CAatE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations_screen.js","names":["React","StyleSheet","View","Conversations","ConversationsContextProvider","useFilterDropdownEnabled","analyticsEvents","usePublishProductAnalyticsEvent","useSearchEnabled","Menu","FilterDropdownListHeaderComponent","ListHeaderComponent","SearchListHeaderComponent","jsx","_jsx","ConversationsScreen","t0","$","_c","route","styles","useStyles","Header","useListHeaderComponent","conversation_index_opened","t1","Symbol","for","throwOnError","t2","t3","params","args","opts","children","t4","container","style","filterDropdownEnabled","searchEnabled","isConfigured","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 { useFilterDropdownEnabled } from '../../hooks/use_filter_dropdown_enabled'\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 { Menu } from '../../utils/native_adapters'\nimport { FilterDropdownListHeaderComponent } from './components/filter_dropdown_list_header_component'\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 show_archived?: boolean\n}>\n\nexport function ConversationsScreen({ route }: ConversationsScreenProps) {\n const styles = useStyles()\n const Header = useListHeaderComponent()\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 useListHeaderComponent = () => {\n const filterDropdownEnabled = useFilterDropdownEnabled()\n const searchEnabled = useSearchEnabled()\n\n if (filterDropdownEnabled && Menu.isConfigured) return FilterDropdownListHeaderComponent\n if (searchEnabled) return SearchListHeaderComponent\n\n return ListHeaderComponent\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,wBAAwB,QAAQ,yCAAyC;AAClF,SAASC,eAAe,EAAEC,+BAA+B,QAAQ,mCAAmC;AACpG,SAASC,gBAAgB,QAAQ,gCAAgC;AAGjE,SAASC,IAAI,QAAQ,6BAA6B;AAClD,SAASC,iCAAiC,QAAQ,oDAAoD;AACtG,SAASC,mBAAmB,QAAQ,oCAAoC;AACxE,SAASC,yBAAyB,QAAQ,2CAA2C;AAAA,SAAAC,GAAA,IAAAC,IAAA;
|
|
1
|
+
{"version":3,"file":"conversations_screen.js","names":["React","StyleSheet","View","Conversations","ConversationsContextProvider","useFilterDropdownEnabled","analyticsEvents","usePublishProductAnalyticsEvent","useSearchEnabled","Menu","FilterDropdownListHeaderComponent","ListHeaderComponent","SearchListHeaderComponent","jsx","_jsx","ConversationsScreen","t0","$","_c","route","styles","useStyles","Header","useListHeaderComponent","conversation_index_opened","t1","Symbol","for","throwOnError","t2","t3","params","args","opts","children","t4","container","style","filterDropdownEnabled","searchEnabled","isConfigured","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 { useFilterDropdownEnabled } from '../../hooks/use_filter_dropdown_enabled'\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 { Menu } from '../../utils/native_adapters'\nimport { FilterDropdownListHeaderComponent } from './components/filter_dropdown_list_header_component'\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 show_archived?: boolean\n show_unread?: boolean\n}>\n\nexport function ConversationsScreen({ route }: ConversationsScreenProps) {\n const styles = useStyles()\n const Header = useListHeaderComponent()\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 useListHeaderComponent = () => {\n const filterDropdownEnabled = useFilterDropdownEnabled()\n const searchEnabled = useSearchEnabled()\n\n if (filterDropdownEnabled && Menu.isConfigured) return FilterDropdownListHeaderComponent\n if (searchEnabled) return SearchListHeaderComponent\n\n return ListHeaderComponent\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,wBAAwB,QAAQ,yCAAyC;AAClF,SAASC,eAAe,EAAEC,+BAA+B,QAAQ,mCAAmC;AACpG,SAASC,gBAAgB,QAAQ,gCAAgC;AAGjE,SAASC,IAAI,QAAQ,6BAA6B;AAClD,SAASC,iCAAiC,QAAQ,oDAAoD;AACtG,SAASC,mBAAmB,QAAQ,oCAAoC;AACxE,SAASC,yBAAyB,QAAQ,2CAA2C;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWrF,OAAO,SAAAC,oBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA6B;IAAAC;EAAA,IAAAH,EAAmC;EACrE,MAAAI,MAAA,GAAeC,SAAS,CAAC,CAAC;EAC1B,MAAAC,MAAA,GAAeC,sBAAsB,CAAC,CAAC;EAEvChB,+BAA+B,CAACD,eAAe,CAAAkB,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,QAAAK,MAAA;IAC5EO,EAAA,gBAAAf,IAAA,CAACX,aAAa;MAAsBmB,mBAAM,EAANA;IAAM,CAAG,CAAC;IAAAL,CAAA,MAAAK,MAAA;IAAAL,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,CAACV,4BAA4B;MAAO4B,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,CAACZ,IAAI;MAAQmC,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,MAAMZ,sBAAsB,GAAGA,CAAA;EAC7B,MAAAe,qBAAA,GAA8BjC,wBAAwB,CAAC,CAAC;EACxD,MAAAkC,aAAA,GAAsB/B,gBAAgB,CAAC,CAAC;EAExC,IAAI8B,qBAA0C,IAAjB7B,IAAI,CAAA+B,YAAa;IAAA,OAAS9B,iCAAiC;EAAA;EACxF,IAAI6B,aAAa;IAAA,OAAS3B,yBAAyB;EAAA;EAAA,OAE5CD,mBAAmB;AAAA,CAC3B;AAED,MAAMU,SAAS,GAAGA,CAAA,KAAM;EACtB,OAAOpB,UAAU,CAACwC,MAAM,CAAC;IACvBL,SAAS,EAAE;MACTM,IAAI,EAAE,CAAC;MACPC,cAAc,EAAE;IAClB;EACF,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@ export interface ConversationRequestArgs {
|
|
|
6
6
|
group_source_app_name?: string;
|
|
7
7
|
show_direct_messages?: boolean;
|
|
8
8
|
show_archived?: boolean;
|
|
9
|
+
show_unread?: boolean;
|
|
9
10
|
}
|
|
10
|
-
export declare const getConversationsRequestArgs: ({ gids, chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived, }?: Partial<ConversationRequestArgs>) => GetRequest;
|
|
11
|
+
export declare const getConversationsRequestArgs: ({ gids, chat_group_graph_id, group_source_app_name, show_direct_messages, show_archived, show_unread, }?: Partial<ConversationRequestArgs>) => GetRequest;
|
|
11
12
|
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/utils/request/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/utils/request/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,eAAO,MAAM,2BAA2B,GAAI,0GAOzC,OAAO,CAAC,uBAAuB,CAAM,KAAG,UAyD1C,CAAA"}
|
|
@@ -3,13 +3,16 @@ export const getConversationsRequestArgs = ({
|
|
|
3
3
|
chat_group_graph_id,
|
|
4
4
|
group_source_app_name,
|
|
5
5
|
show_direct_messages,
|
|
6
|
-
show_archived
|
|
6
|
+
show_archived,
|
|
7
|
+
show_unread
|
|
7
8
|
} = {}) => {
|
|
8
9
|
let filter;
|
|
9
10
|
if (chat_group_graph_id) {
|
|
10
11
|
filter = 'mine_or_not_empty,group';
|
|
11
12
|
} else if (show_archived) {
|
|
12
13
|
filter = 'mine_or_not_empty,archived';
|
|
14
|
+
} else if (show_unread) {
|
|
15
|
+
filter = 'mine_or_not_empty,unread';
|
|
13
16
|
} else if (show_direct_messages) {
|
|
14
17
|
filter = 'mine_or_not_empty,direct_message';
|
|
15
18
|
} else if (group_source_app_name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.js","names":["getConversationsRequestArgs","gids","chat_group_graph_id","group_source_app_name","show_direct_messages","show_archived","filter","url","data","perPage","order","group","fields","Conversation","AnalyticsMetadata","ConversationBadge","include"],"sources":["../../../src/utils/request/conversation.ts"],"sourcesContent":["import { GraphId } from '../../types/resources/group_resource'\nimport { GetRequest } from '../client/types'\n\nexport interface ConversationRequestArgs {\n gids: string\n chat_group_graph_id?: GraphId\n group_source_app_name?: string\n show_direct_messages?: boolean\n show_archived?: boolean\n}\n\nexport const getConversationsRequestArgs = ({\n gids,\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n show_archived,\n}: Partial<ConversationRequestArgs> = {}): GetRequest => {\n let filter: string\n if (chat_group_graph_id) {\n filter = 'mine_or_not_empty,group'\n } else if (show_archived) {\n filter = 'mine_or_not_empty,archived'\n } else if (show_direct_messages) {\n filter = 'mine_or_not_empty,direct_message'\n } else if (group_source_app_name) {\n filter = 'mine_or_not_empty,group_source_app_name'\n } else {\n filter = 'mine_or_not_empty'\n }\n\n return {\n url: '/me/conversations',\n data: {\n perPage: 20,\n order: '-last_message',\n filter,\n gids,\n group: chat_group_graph_id,\n group_source_app_name,\n fields: {\n Conversation: [\n 'created_at',\n 'badges',\n 'conversation_preview',\n 'disabled',\n 'disabled_reason',\n 'disabled_message',\n 'groups',\n 'last_message_author_id',\n 'last_message_author_name',\n 'last_message_created_at',\n 'last_message_text_preview',\n 'preview_avatar_urls',\n 'custom_avatar_type',\n 'custom_avatar_key',\n 'custom_avatar_color',\n 'custom_avatar_image_url',\n 'member_ability',\n 'muted',\n 'replies_disabled',\n 'title',\n 'unread_count',\n 'unread_reaction',\n 'updated_at',\n ],\n AnalyticsMetadata: ['metadata'],\n ConversationBadge: ['app_name', 'pco_resource_type', 'text'],\n },\n include: ['badges', 'analytics_metadata'],\n },\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversation.js","names":["getConversationsRequestArgs","gids","chat_group_graph_id","group_source_app_name","show_direct_messages","show_archived","show_unread","filter","url","data","perPage","order","group","fields","Conversation","AnalyticsMetadata","ConversationBadge","include"],"sources":["../../../src/utils/request/conversation.ts"],"sourcesContent":["import { GraphId } from '../../types/resources/group_resource'\nimport { GetRequest } from '../client/types'\n\nexport interface ConversationRequestArgs {\n gids: string\n chat_group_graph_id?: GraphId\n group_source_app_name?: string\n show_direct_messages?: boolean\n show_archived?: boolean\n show_unread?: boolean\n}\n\nexport const getConversationsRequestArgs = ({\n gids,\n chat_group_graph_id,\n group_source_app_name,\n show_direct_messages,\n show_archived,\n show_unread,\n}: Partial<ConversationRequestArgs> = {}): GetRequest => {\n let filter: string\n if (chat_group_graph_id) {\n filter = 'mine_or_not_empty,group'\n } else if (show_archived) {\n filter = 'mine_or_not_empty,archived'\n } else if (show_unread) {\n filter = 'mine_or_not_empty,unread'\n } else if (show_direct_messages) {\n filter = 'mine_or_not_empty,direct_message'\n } else if (group_source_app_name) {\n filter = 'mine_or_not_empty,group_source_app_name'\n } else {\n filter = 'mine_or_not_empty'\n }\n\n return {\n url: '/me/conversations',\n data: {\n perPage: 20,\n order: '-last_message',\n filter,\n gids,\n group: chat_group_graph_id,\n group_source_app_name,\n fields: {\n Conversation: [\n 'created_at',\n 'badges',\n 'conversation_preview',\n 'disabled',\n 'disabled_reason',\n 'disabled_message',\n 'groups',\n 'last_message_author_id',\n 'last_message_author_name',\n 'last_message_created_at',\n 'last_message_text_preview',\n 'preview_avatar_urls',\n 'custom_avatar_type',\n 'custom_avatar_key',\n 'custom_avatar_color',\n 'custom_avatar_image_url',\n 'member_ability',\n 'muted',\n 'replies_disabled',\n 'title',\n 'unread_count',\n 'unread_reaction',\n 'updated_at',\n ],\n AnalyticsMetadata: ['metadata'],\n ConversationBadge: ['app_name', 'pco_resource_type', 'text'],\n },\n include: ['badges', 'analytics_metadata'],\n },\n }\n}\n"],"mappings":"AAYA,OAAO,MAAMA,2BAA2B,GAAGA,CAAC;EAC1CC,IAAI;EACJC,mBAAmB;EACnBC,qBAAqB;EACrBC,oBAAoB;EACpBC,aAAa;EACbC;AACgC,CAAC,GAAG,CAAC,CAAC,KAAiB;EACvD,IAAIC,MAAc;EAClB,IAAIL,mBAAmB,EAAE;IACvBK,MAAM,GAAG,yBAAyB;EACpC,CAAC,MAAM,IAAIF,aAAa,EAAE;IACxBE,MAAM,GAAG,4BAA4B;EACvC,CAAC,MAAM,IAAID,WAAW,EAAE;IACtBC,MAAM,GAAG,0BAA0B;EACrC,CAAC,MAAM,IAAIH,oBAAoB,EAAE;IAC/BG,MAAM,GAAG,kCAAkC;EAC7C,CAAC,MAAM,IAAIJ,qBAAqB,EAAE;IAChCI,MAAM,GAAG,yCAAyC;EACpD,CAAC,MAAM;IACLA,MAAM,GAAG,mBAAmB;EAC9B;EAEA,OAAO;IACLC,GAAG,EAAE,mBAAmB;IACxBC,IAAI,EAAE;MACJC,OAAO,EAAE,EAAE;MACXC,KAAK,EAAE,eAAe;MACtBJ,MAAM;MACNN,IAAI;MACJW,KAAK,EAAEV,mBAAmB;MAC1BC,qBAAqB;MACrBU,MAAM,EAAE;QACNC,YAAY,EAAE,CACZ,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,EAChB,OAAO,EACP,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,YAAY,CACb;QACDC,iBAAiB,EAAE,CAAC,UAAU,CAAC;QAC/BC,iBAAiB,EAAE,CAAC,UAAU,EAAE,mBAAmB,EAAE,MAAM;MAC7D,CAAC;MACDC,OAAO,EAAE,CAAC,QAAQ,EAAE,oBAAoB;IAC1C;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
package/build/utils/styles.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export declare const MAX_FONT_SIZE_MULTIPLIER = 1.5;
|
|
|
2
2
|
export declare const MAX_FONT_SIZE_MULTIPLIER_LANDMARK = 1.2;
|
|
3
3
|
export declare const CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL = 16;
|
|
4
4
|
export declare const MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH = 32;
|
|
5
|
+
export declare const MESSAGE_BACKGROUND_OUTSET = 2;
|
|
5
6
|
export declare const platformFontWeightMedium: "500" | "700" | undefined;
|
|
6
7
|
export declare const platformFontWeightBold: "600" | "700" | undefined;
|
|
7
8
|
export declare const platformPressedOpacityStyle: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/utils/styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,eAAO,MAAM,iCAAiC,MAAM,CAAA;AAEpD,eAAO,MAAM,4CAA4C,KAAK,CAAA;AAC9D,eAAO,MAAM,kCAAkC,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/utils/styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,eAAO,MAAM,iCAAiC,MAAM,CAAA;AAEpD,eAAO,MAAM,4CAA4C,KAAK,CAAA;AAC9D,eAAO,MAAM,kCAAkC,KAAK,CAAA;AACpD,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C,eAAO,MAAM,wBAAwB,2BAGnC,CAAA;AAEF,eAAO,MAAM,sBAAsB,2BAGjC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;aAGtC,CAAA"}
|
package/build/utils/styles.js
CHANGED
|
@@ -5,7 +5,7 @@ export const MAX_FONT_SIZE_MULTIPLIER_LANDMARK = 1.2; // Use in headers, footers
|
|
|
5
5
|
|
|
6
6
|
export const CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL = 16; // TODO: move to `screens/conversation/utils/styles` when `/screens/conversation` is created
|
|
7
7
|
export const MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH = 32; // TODO: move to `screens/conversation/utils/styles` when `/screens/conversation` is created
|
|
8
|
-
|
|
8
|
+
export const MESSAGE_BACKGROUND_OUTSET = 2;
|
|
9
9
|
export const platformFontWeightMedium = Platform.select({
|
|
10
10
|
ios: tokens.fontWeightMedium,
|
|
11
11
|
android: tokens.fontWeightBold
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","names":["Platform","tokens","MAX_FONT_SIZE_MULTIPLIER","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL","MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH","platformFontWeightMedium","select","ios","fontWeightMedium","android","fontWeightBold","platformFontWeightBold","fontWeightSemiBold","platformPressedOpacityStyle","opacity"],"sources":["../../src/utils/styles.ts"],"sourcesContent":["import { Platform } from 'react-native'\nimport { tokens } from '../vendor/tapestry/tokens'\n\nexport const MAX_FONT_SIZE_MULTIPLIER = 1.5\nexport const MAX_FONT_SIZE_MULTIPLIER_LANDMARK = 1.2 // Use in headers, footers, toolbars, etc.\n\nexport const CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL = 16 // TODO: move to `screens/conversation/utils/styles` when `/screens/conversation` is created\nexport const MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH = 32 // TODO: move to `screens/conversation/utils/styles` when `/screens/conversation` is created\n\nexport const platformFontWeightMedium = Platform.select({\n ios: tokens.fontWeightMedium,\n android: tokens.fontWeightBold,\n})\n\nexport const platformFontWeightBold = Platform.select({\n ios: tokens.fontWeightSemiBold,\n android: tokens.fontWeightBold,\n})\n\nexport const platformPressedOpacityStyle = Platform.select({\n ios: { opacity: 0.5 },\n android: { opacity: 1 },\n})\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,MAAM,QAAQ,2BAA2B;AAElD,OAAO,MAAMC,wBAAwB,GAAG,GAAG;AAC3C,OAAO,MAAMC,iCAAiC,GAAG,GAAG,EAAC;;AAErD,OAAO,MAAMC,4CAA4C,GAAG,EAAE,EAAC;AAC/D,OAAO,MAAMC,kCAAkC,GAAG,EAAE,EAAC
|
|
1
|
+
{"version":3,"file":"styles.js","names":["Platform","tokens","MAX_FONT_SIZE_MULTIPLIER","MAX_FONT_SIZE_MULTIPLIER_LANDMARK","CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL","MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH","MESSAGE_BACKGROUND_OUTSET","platformFontWeightMedium","select","ios","fontWeightMedium","android","fontWeightBold","platformFontWeightBold","fontWeightSemiBold","platformPressedOpacityStyle","opacity"],"sources":["../../src/utils/styles.ts"],"sourcesContent":["import { Platform } from 'react-native'\nimport { tokens } from '../vendor/tapestry/tokens'\n\nexport const MAX_FONT_SIZE_MULTIPLIER = 1.5\nexport const MAX_FONT_SIZE_MULTIPLIER_LANDMARK = 1.2 // Use in headers, footers, toolbars, etc.\n\nexport const CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL = 16 // TODO: move to `screens/conversation/utils/styles` when `/screens/conversation` is created\nexport const MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH = 32 // TODO: move to `screens/conversation/utils/styles` when `/screens/conversation` is created\nexport const MESSAGE_BACKGROUND_OUTSET = 2\n\nexport const platformFontWeightMedium = Platform.select({\n ios: tokens.fontWeightMedium,\n android: tokens.fontWeightBold,\n})\n\nexport const platformFontWeightBold = Platform.select({\n ios: tokens.fontWeightSemiBold,\n android: tokens.fontWeightBold,\n})\n\nexport const platformPressedOpacityStyle = Platform.select({\n ios: { opacity: 0.5 },\n android: { opacity: 1 },\n})\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,MAAM,QAAQ,2BAA2B;AAElD,OAAO,MAAMC,wBAAwB,GAAG,GAAG;AAC3C,OAAO,MAAMC,iCAAiC,GAAG,GAAG,EAAC;;AAErD,OAAO,MAAMC,4CAA4C,GAAG,EAAE,EAAC;AAC/D,OAAO,MAAMC,kCAAkC,GAAG,EAAE,EAAC;AACrD,OAAO,MAAMC,yBAAyB,GAAG,CAAC;AAE1C,OAAO,MAAMC,wBAAwB,GAAGP,QAAQ,CAACQ,MAAM,CAAC;EACtDC,GAAG,EAAER,MAAM,CAACS,gBAAgB;EAC5BC,OAAO,EAAEV,MAAM,CAACW;AAClB,CAAC,CAAC;AAEF,OAAO,MAAMC,sBAAsB,GAAGb,QAAQ,CAACQ,MAAM,CAAC;EACpDC,GAAG,EAAER,MAAM,CAACa,kBAAkB;EAC9BH,OAAO,EAAEV,MAAM,CAACW;AAClB,CAAC,CAAC;AAEF,OAAO,MAAMG,2BAA2B,GAAGf,QAAQ,CAACQ,MAAM,CAAC;EACzDC,GAAG,EAAE;IAAEO,OAAO,EAAE;EAAI,CAAC;EACrBL,OAAO,EAAE;IAAEK,OAAO,EAAE;EAAE;AACxB,CAAC,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/chat-react-native",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0-rc.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"sf-symbols-typescript": "^2.2.0",
|
|
85
85
|
"typescript": "~6.0.3"
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "856c408a4a998b4ce9b499ea42769c2b4f071adb"
|
|
88
88
|
}
|
|
@@ -30,6 +30,7 @@ import { Haptic } from '../../utils/native_adapters'
|
|
|
30
30
|
import {
|
|
31
31
|
CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL,
|
|
32
32
|
MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH,
|
|
33
|
+
MESSAGE_BACKGROUND_OUTSET,
|
|
33
34
|
platformFontWeightMedium,
|
|
34
35
|
} from '../../utils/styles'
|
|
35
36
|
import { ComponentErrorBoundary } from '../page/component_error_boundary'
|
|
@@ -109,6 +110,7 @@ export const Message = memo(function MessageRow({
|
|
|
109
110
|
: hasReactions || showMessageMeta || showReplyCountButton
|
|
110
111
|
? 8
|
|
111
112
|
: 4
|
|
113
|
+
const spaceBelowPressable = messageBottomMargin - MESSAGE_BACKGROUND_OUTSET
|
|
112
114
|
|
|
113
115
|
const messageIsReplyLabel = replyToReplyRootMessage ? 'Reply' : ''
|
|
114
116
|
const attachmentLabel = some(attachments) ? pluralize(attachments.length, 'attachment') : ''
|
|
@@ -215,6 +217,7 @@ export const Message = memo(function MessageRow({
|
|
|
215
217
|
return (
|
|
216
218
|
<Pressable
|
|
217
219
|
testID={`message-${message.id}`}
|
|
220
|
+
style={[styles.pressable, { marginBottom: spaceBelowPressable }]}
|
|
218
221
|
onLongPress={isDeleting ? undefined : handleMessageLongPress}
|
|
219
222
|
onPress={isDeleting ? undefined : handleMessagePress}
|
|
220
223
|
onPressIn={isDeleting ? undefined : handleMessagePressIn}
|
|
@@ -227,7 +230,8 @@ export const Message = memo(function MessageRow({
|
|
|
227
230
|
onAccessibilityAction={isReplyRootMessage ? handleAccessibilityAction : undefined}
|
|
228
231
|
disabled={isDeletedReplyRootMessage || isDeleting}
|
|
229
232
|
>
|
|
230
|
-
<Animated.View style={[
|
|
233
|
+
<Animated.View style={[StyleSheet.absoluteFill, animatedBackgroundColor]} />
|
|
234
|
+
<View style={[styles.message, { marginBottom: -spaceBelowPressable }]}>
|
|
231
235
|
{!message.mine && (
|
|
232
236
|
<View>
|
|
233
237
|
{renderAuthor ? (
|
|
@@ -351,7 +355,7 @@ export const Message = memo(function MessageRow({
|
|
|
351
355
|
{message.mine && (
|
|
352
356
|
<MyReplyConnector message={message} messageBubbleHeight={messageBubbleHeight} />
|
|
353
357
|
)}
|
|
354
|
-
</
|
|
358
|
+
</View>
|
|
355
359
|
</Pressable>
|
|
356
360
|
)
|
|
357
361
|
})
|
|
@@ -365,6 +369,10 @@ const useMessageStyles = (mine: boolean, isDeleting: boolean) => {
|
|
|
365
369
|
const messageBubbleBackgroundColor = mine ? myMessageBackgroundColor : colors.fillColorNeutral070
|
|
366
370
|
|
|
367
371
|
return StyleSheet.create({
|
|
372
|
+
pressable: {
|
|
373
|
+
marginTop: -MESSAGE_BACKGROUND_OUTSET,
|
|
374
|
+
paddingTop: MESSAGE_BACKGROUND_OUTSET,
|
|
375
|
+
},
|
|
368
376
|
message: {
|
|
369
377
|
gap: 8,
|
|
370
378
|
flexDirection: mine ? 'row-reverse' : 'row',
|
|
@@ -24,11 +24,15 @@ import {
|
|
|
24
24
|
CONVERSATION_MESSAGE_LIST_PADDING_HORIZONTAL,
|
|
25
25
|
MAX_FONT_SIZE_MULTIPLIER,
|
|
26
26
|
MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH,
|
|
27
|
+
MESSAGE_BACKGROUND_OUTSET,
|
|
27
28
|
platformFontWeightMedium,
|
|
28
29
|
} from '../../utils/styles'
|
|
29
30
|
import { Avatar, Icon, IconProps, Image, Text } from '../display'
|
|
30
31
|
import { TheirReplyConnector, MyReplyConnector } from './reply_connectors'
|
|
31
32
|
|
|
33
|
+
const SPACE_BELOW_MESSAGE = 12
|
|
34
|
+
const SPACE_BELOW_PRESSABLE = SPACE_BELOW_MESSAGE - MESSAGE_BACKGROUND_OUTSET
|
|
35
|
+
|
|
32
36
|
interface ReplyShadowMessageProps extends MessageResource {
|
|
33
37
|
messageId: string
|
|
34
38
|
conversation_id: number
|
|
@@ -96,6 +100,7 @@ function ShadowMessageContent({ conversation_id, ...message }: ShadowMessageCont
|
|
|
96
100
|
|
|
97
101
|
return (
|
|
98
102
|
<Pressable
|
|
103
|
+
style={styles.pressable}
|
|
99
104
|
android_ripple={{ color: colors.androidRippleNeutral }}
|
|
100
105
|
onPress={handleNavigateToReplies}
|
|
101
106
|
onPressIn={handleMessagePressIn}
|
|
@@ -104,7 +109,8 @@ function ShadowMessageContent({ conversation_id, ...message }: ShadowMessageCont
|
|
|
104
109
|
accessibilityHint="Navigate to reply screen for this message"
|
|
105
110
|
accessibilityRole="link"
|
|
106
111
|
>
|
|
107
|
-
<Animated.View style={[
|
|
112
|
+
<Animated.View style={[StyleSheet.absoluteFill, animatedBackgroundColor]} />
|
|
113
|
+
<View style={[styles.message, { marginBottom: -SPACE_BELOW_PRESSABLE }]}>
|
|
108
114
|
{!message.mine && (
|
|
109
115
|
<View>
|
|
110
116
|
<View style={[styles.avatarWrapper, !isDeleted && styles.avatarOpacity]}>
|
|
@@ -145,7 +151,7 @@ function ShadowMessageContent({ conversation_id, ...message }: ShadowMessageCont
|
|
|
145
151
|
{message.mine && (
|
|
146
152
|
<MyReplyConnector message={message} messageBubbleHeight={messageBubbleHeight} />
|
|
147
153
|
)}
|
|
148
|
-
</
|
|
154
|
+
</View>
|
|
149
155
|
</Pressable>
|
|
150
156
|
)
|
|
151
157
|
}
|
|
@@ -282,6 +288,11 @@ const useStyles = ({ mine, imageWidth = 32, imageHeight = 32 }: StylesProps = {}
|
|
|
282
288
|
const tabletWidth = width >= 744 // Smallest iPad Mini's width
|
|
283
289
|
|
|
284
290
|
return StyleSheet.create({
|
|
291
|
+
pressable: {
|
|
292
|
+
marginTop: -MESSAGE_BACKGROUND_OUTSET,
|
|
293
|
+
paddingTop: MESSAGE_BACKGROUND_OUTSET,
|
|
294
|
+
marginBottom: SPACE_BELOW_PRESSABLE,
|
|
295
|
+
},
|
|
285
296
|
message: {
|
|
286
297
|
gap: 8,
|
|
287
298
|
flexDirection: mine ? 'row-reverse' : 'row',
|
|
@@ -290,7 +301,7 @@ const useStyles = ({ mine, imageWidth = 32, imageHeight = 32 }: StylesProps = {}
|
|
|
290
301
|
messageContent: {
|
|
291
302
|
flex: 1,
|
|
292
303
|
gap: 4,
|
|
293
|
-
marginBottom:
|
|
304
|
+
marginBottom: SPACE_BELOW_MESSAGE,
|
|
294
305
|
},
|
|
295
306
|
avatarWrapper: {
|
|
296
307
|
width: MESSAGE_AUTHOR_AVATAR_COLUMN_WIDTH,
|
|
@@ -31,14 +31,24 @@ export const Conversations = ({ ListHeaderComponent }: ConversationsProps) => {
|
|
|
31
31
|
isRefetching,
|
|
32
32
|
isFetched,
|
|
33
33
|
hasNextPage,
|
|
34
|
-
args: {
|
|
34
|
+
args: {
|
|
35
|
+
chat_group_graph_id,
|
|
36
|
+
group_source_app_name,
|
|
37
|
+
show_direct_messages,
|
|
38
|
+
show_archived,
|
|
39
|
+
show_unread,
|
|
40
|
+
},
|
|
35
41
|
} = useConversationsContext()
|
|
36
42
|
const navigation = useNavigation()
|
|
37
43
|
const canCreateConversations = useCanCreateConversations()
|
|
38
44
|
const clearFilters = useClearConversationFilters()
|
|
39
45
|
const filterDropdownEnabled = useFilterDropdownEnabled()
|
|
40
46
|
const isFilterApplied =
|
|
41
|
-
!!chat_group_graph_id ||
|
|
47
|
+
!!chat_group_graph_id ||
|
|
48
|
+
!!group_source_app_name ||
|
|
49
|
+
!!show_direct_messages ||
|
|
50
|
+
!!show_archived ||
|
|
51
|
+
!!show_unread
|
|
42
52
|
const showArchivedResultsFooter = !!show_archived && !isLoading && !hasNextPage
|
|
43
53
|
const showFilteredResultsFooter =
|
|
44
54
|
filterDropdownEnabled &&
|
|
@@ -45,7 +45,13 @@ export const ConversationsContextProvider = ({
|
|
|
45
45
|
opts?: ApiGetQueryOptions
|
|
46
46
|
}>) => {
|
|
47
47
|
const [activeConversationId, setActiveConversationId] = useState<number | undefined>()
|
|
48
|
-
const {
|
|
48
|
+
const {
|
|
49
|
+
chat_group_graph_id,
|
|
50
|
+
group_source_app_name,
|
|
51
|
+
show_direct_messages,
|
|
52
|
+
show_archived,
|
|
53
|
+
show_unread,
|
|
54
|
+
} = args
|
|
49
55
|
|
|
50
56
|
const query = useConversations(
|
|
51
57
|
{
|
|
@@ -53,6 +59,7 @@ export const ConversationsContextProvider = ({
|
|
|
53
59
|
group_source_app_name,
|
|
54
60
|
show_direct_messages,
|
|
55
61
|
show_archived,
|
|
62
|
+
show_unread,
|
|
56
63
|
},
|
|
57
64
|
paginatorOptions
|
|
58
65
|
)
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { InfiniteData, QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
2
|
+
import { renderHook, waitFor } from '@testing-library/react-native'
|
|
3
|
+
import React from 'react'
|
|
4
|
+
import { buildTestQueryClient } from '../../__utils__/query_client'
|
|
5
|
+
import { ConversationFiltersParams } from '../../screens/conversation_filters/screen_props'
|
|
6
|
+
import type { ApiCollection, ConversationResource } from '../../types'
|
|
7
|
+
import { getConversationsRequestArgs } from '../../utils/request/conversation'
|
|
8
|
+
import { useConversationsJoltEvents } from '../use_conversations_jolt_events'
|
|
9
|
+
import { getRequestQueryKey } from '../use_suspense_api'
|
|
10
|
+
|
|
11
|
+
const handlers: Record<string, (event: unknown) => void> = {}
|
|
12
|
+
jest.mock('../use_jolt', () => ({
|
|
13
|
+
useJoltChannel: () => 'channel',
|
|
14
|
+
useJoltEvent: (_channel: unknown, name: string, handler: (event: unknown) => void) => {
|
|
15
|
+
handlers[name] = handler
|
|
16
|
+
},
|
|
17
|
+
}))
|
|
18
|
+
jest.mock('../use_api', () => ({ useApiGet: () => ({ data: { id: 1 } }) }))
|
|
19
|
+
jest.mock('../use_current_person', () => ({
|
|
20
|
+
currentPersonRequestArgs: {},
|
|
21
|
+
useCurrentPersonCache: () => ({ invalidate: jest.fn() }),
|
|
22
|
+
}))
|
|
23
|
+
|
|
24
|
+
const mockGet = jest.fn()
|
|
25
|
+
jest.mock('../use_api_client', () => ({ useApiClient: () => ({ chat: { get: mockGet } }) }))
|
|
26
|
+
|
|
27
|
+
let mockContextArgs: ConversationFiltersParams = {}
|
|
28
|
+
jest.mock('../../contexts/conversations_context', () => ({
|
|
29
|
+
useConversationsContext: () => ({ args: mockContextArgs }),
|
|
30
|
+
}))
|
|
31
|
+
|
|
32
|
+
type QueryData = InfiniteData<ApiCollection<ConversationResource>>
|
|
33
|
+
|
|
34
|
+
const conversationId = 7
|
|
35
|
+
let queryClient: QueryClient
|
|
36
|
+
|
|
37
|
+
const wrapper = ({ children }: { children: React.ReactNode }) => (
|
|
38
|
+
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
const queryKey = () => getRequestQueryKey(getConversationsRequestArgs(mockContextArgs))
|
|
42
|
+
|
|
43
|
+
const seedList = (conversations: Partial<ConversationResource>[] = []) =>
|
|
44
|
+
queryClient.setQueryData<QueryData>(queryKey(), {
|
|
45
|
+
pages: [
|
|
46
|
+
{
|
|
47
|
+
data: conversations,
|
|
48
|
+
links: {},
|
|
49
|
+
meta: {},
|
|
50
|
+
} as unknown as ApiCollection<ConversationResource>,
|
|
51
|
+
],
|
|
52
|
+
pageParams: [undefined],
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
const cachedIds = () =>
|
|
56
|
+
queryClient
|
|
57
|
+
.getQueryData<QueryData>(queryKey())!
|
|
58
|
+
.pages.flatMap(page => page.data.map(conversation => conversation.id))
|
|
59
|
+
|
|
60
|
+
const serverReturns = (conversations: Partial<ConversationResource>[]) =>
|
|
61
|
+
mockGet.mockResolvedValue({
|
|
62
|
+
data: conversations.map(conversation => ({
|
|
63
|
+
type: 'Conversation',
|
|
64
|
+
id: conversationId,
|
|
65
|
+
title: 'Youth',
|
|
66
|
+
...conversation,
|
|
67
|
+
})),
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
const conversationUpdated = () =>
|
|
71
|
+
handlers['conversation.updated']({
|
|
72
|
+
event: 'conversation.updated',
|
|
73
|
+
data: { data: { id: conversationId, last_message_author_id: 2 } },
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const renderWithFilter = (args: ConversationFiltersParams) => {
|
|
77
|
+
mockContextArgs = args
|
|
78
|
+
queryClient = buildTestQueryClient({ defaultOptions: { queries: { gcTime: Infinity } } })
|
|
79
|
+
renderHook(() => useConversationsJoltEvents(), { wrapper })
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
beforeEach(() => mockGet.mockReset())
|
|
83
|
+
|
|
84
|
+
describe('useConversationsJoltEvents on conversation.updated', () => {
|
|
85
|
+
it('asks the server for the conversation under the active filter', async () => {
|
|
86
|
+
renderWithFilter({ show_unread: true })
|
|
87
|
+
seedList()
|
|
88
|
+
serverReturns([])
|
|
89
|
+
|
|
90
|
+
conversationUpdated()
|
|
91
|
+
|
|
92
|
+
await waitFor(() => expect(mockGet).toHaveBeenCalled())
|
|
93
|
+
expect(mockGet).toHaveBeenCalledWith(
|
|
94
|
+
expect.objectContaining({
|
|
95
|
+
url: '/me/conversations',
|
|
96
|
+
data: expect.objectContaining({
|
|
97
|
+
filter: 'mine_or_not_empty,unread',
|
|
98
|
+
where: { id: conversationId },
|
|
99
|
+
perPage: 1,
|
|
100
|
+
}),
|
|
101
|
+
})
|
|
102
|
+
)
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('adds a conversation the server returns for the list', async () => {
|
|
106
|
+
renderWithFilter({ show_unread: true })
|
|
107
|
+
seedList()
|
|
108
|
+
serverReturns([{ unreadCount: 1 }])
|
|
109
|
+
|
|
110
|
+
conversationUpdated()
|
|
111
|
+
|
|
112
|
+
await waitFor(() => expect(cachedIds()).toEqual([conversationId]))
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
it('removes a conversation the server leaves out of the list', async () => {
|
|
116
|
+
renderWithFilter({ show_unread: true })
|
|
117
|
+
seedList([{ id: conversationId, unreadCount: 1 }])
|
|
118
|
+
serverReturns([])
|
|
119
|
+
|
|
120
|
+
conversationUpdated()
|
|
121
|
+
|
|
122
|
+
await waitFor(() => expect(cachedIds()).toEqual([]))
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
it('keeps the list as it was when the fetch fails', async () => {
|
|
126
|
+
renderWithFilter({ show_unread: true })
|
|
127
|
+
seedList([{ id: conversationId, unreadCount: 1 }])
|
|
128
|
+
mockGet.mockRejectedValue(new Error('offline'))
|
|
129
|
+
|
|
130
|
+
conversationUpdated()
|
|
131
|
+
|
|
132
|
+
await waitFor(() => expect(mockGet).toHaveBeenCalled())
|
|
133
|
+
expect(cachedIds()).toEqual([conversationId])
|
|
134
|
+
})
|
|
135
|
+
})
|