@messenger-box/platform-mobile 10.0.3-alpha.47 → 10.0.3-alpha.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [10.0.3-alpha.48](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.47...v10.0.3-alpha.48) (2025-05-30)
7
+
8
+ **Note:** Version bump only for package @messenger-box/platform-mobile
9
+
6
10
  ## [10.0.3-alpha.47](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.46...v10.0.3-alpha.47) (2025-05-26)
7
11
 
8
12
  **Note:** Version bump only for package @messenger-box/platform-mobile
@@ -1,6 +1,4 @@
1
- import {useViewChannelDetailQuery,useThreadMessagesQuery,OnThreadCreatedUpdatedDocument,useSendThreadMessageMutation,OnChatMessageAddedDocument,MessagesDocument,useOnThreadCreatedUpdatedSubscription,useCreatePostThreadMutation,useSendExpoNotificationOnPostMutation,useGetPostThreadLazyQuery,useAddDirectChannelMutation,useSendMessagesMutation,useMessagesQuery,useOnChatMessageAddedSubscription,useGetChannelsByUserQuery}from'common/graphql';export{useMessagesQuery,useThreadMessagesQuery}from'common/graphql';import'react';var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
1
+ import {useViewChannelDetailQuery,useThreadMessagesQuery,OnThreadCreatedUpdatedDocument,useSendThreadMessageMutation,OnChatMessageAddedDocument,MessagesDocument,useOnThreadCreatedUpdatedSubscription,useCreatePostThreadMutation,useSendExpoNotificationOnPostMutation,useGetPostThreadLazyQuery,useAddDirectChannelMutation,useSendMessagesMutation,useMessagesQuery}from'common/graphql';export{useMessagesQuery,useThreadMessagesQuery}from'common/graphql';import'react';var __defProp = Object.defineProperty;
4
2
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
3
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
4
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -16,12 +14,6 @@ var __spreadValues = (a, b) => {
16
14
  }
17
15
  return a;
18
16
  };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- const useChannelsQuery = (options = {}) => {
21
- return useGetChannelsByUserQuery(__spreadProps(__spreadValues({}, options), {
22
- fetchPolicy: "cache-and-network"
23
- }));
24
- };
25
17
  const useChannelDetailQuery = (channelId, options = {}) => {
26
18
  return useViewChannelDetailQuery(__spreadValues({
27
19
  variables: {
@@ -66,11 +58,8 @@ const THREAD_CREATED_UPDATED = OnThreadCreatedUpdatedDocument;
66
58
  const useThreadCreatedUpdatedSubscription = (options = {}) => {
67
59
  return useOnThreadCreatedUpdatedSubscription(__spreadValues({}, options));
68
60
  };
69
- const useChatMessageAddedSubscription = (options = {}) => {
70
- return useOnChatMessageAddedSubscription(__spreadValues({}, options));
71
- };
72
61
  const useGetPostThreadLazy = (options = {}) => {
73
62
  return useGetPostThreadLazyQuery(__spreadValues({
74
63
  fetchPolicy: "cache-and-network"
75
64
  }, options));
76
- };export{CHAT_MESSAGE_ADDED,MESSAGES_DOCUMENT,THREAD_CREATED_UPDATED,useAddDirectChannel,useChannelDetailQuery,useChannelMessagesQuery,useChannelsQuery,useChatMessageAddedSubscription,useCreatePostThread,useGetPostThreadLazy,useSendChannelMessage,useSendExpoNotification,useSendThreadMessage,useThreadCreatedUpdatedSubscription,useThreadMessagesQueryWithOptions};//# sourceMappingURL=inboxQueries.js.map
65
+ };export{CHAT_MESSAGE_ADDED,MESSAGES_DOCUMENT,THREAD_CREATED_UPDATED,useAddDirectChannel,useChannelDetailQuery,useChannelMessagesQuery,useCreatePostThread,useGetPostThreadLazy,useSendChannelMessage,useSendExpoNotification,useSendThreadMessage,useThreadCreatedUpdatedSubscription,useThreadMessagesQueryWithOptions};//# sourceMappingURL=inboxQueries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inboxQueries.js","sources":["../../src/queries/inboxQueries.ts"],"sourcesContent":["// Imports from common/graphql\nimport {\n useGetChannelsByUserWithServiceChannelsQuery,\n useGetChannelsByUserQuery,\n OnChatMessageAddedDocument,\n OnThreadCreatedUpdatedDocument,\n useViewChannelDetailQuery,\n useThreadMessagesQuery,\n useSupportServiceChannelsQuery,\n useSendThreadMessageMutation,\n useMessagesQuery,\n useSendMessagesMutation,\n useAddDirectChannelMutation,\n MessagesDocument,\n useSendExpoNotificationOnPostMutation,\n useOnThreadCreatedUpdatedSubscription,\n useOnChatMessageAddedSubscription,\n useOnThreadChatMessageAddedSubscription,\n useCreatePostThreadMutation,\n useGetPostThreadLazyQuery,\n} from 'common/graphql';\nimport { useCallback } from 'react';\n\n// ====== CHANNEL QUERIES ======\n\n/**\n * Hook for fetching channels by user including service channels\n * @param options - Query options\n * @returns Query result with data, loading state, refetch and fetchMore functions\n */\nexport const useChannelsQuery = (options: any = {}) => {\n return useGetChannelsByUserQuery({\n ...options,\n fetchPolicy: 'cache-and-network',\n //nextFetchPolicy: 'network-only',\n });\n};\n\n/**\n * Hook for fetching service channels\n * @param options - Query options\n * @returns Query result with data, loading state and refetch function\n */\nexport const useServiceChannelsQuery = (options: any = {}) => {\n return useSupportServiceChannelsQuery({\n ...options,\n fetchPolicy: 'cache-and-network',\n });\n};\n\n/**\n * Hook for fetching channel details\n * @param channelId - ID of the channel to fetch\n * @param options - Additional query options\n * @returns Query result with channel details\n */\nexport const useChannelDetailQuery = (channelId: string, options: any = {}) => {\n return useViewChannelDetailQuery({\n variables: { channelId },\n ...options,\n });\n};\n\n// ====== THREAD QUERIES ======\n\n/**\n * Direct export of the thread messages query hook\n */\nexport { useThreadMessagesQuery };\n\n/**\n * Direct export of the messages query hook\n */\nexport { useMessagesQuery };\n\n/**\n * Hook for fetching thread messages with default options\n * @param variables - Query variables including channelId, role, and limit\n * @param options - Additional query options\n * @returns Query result with thread messages data\n */\nexport const useThreadMessagesQueryWithOptions = (variables: any, options: any = {}) => {\n return useThreadMessagesQuery({\n variables,\n fetchPolicy: 'cache-and-network',\n refetchWritePolicy: 'overwrite',\n nextFetchPolicy: 'network-only',\n ...options,\n });\n};\n\n// ====== MESSAGE QUERIES ======\n\n/**\n * Hook for fetching channel messages\n * @param variables - Query variables including channelId, parentId, and pagination params\n * @param options - Additional query options\n * @returns Query result for messages\n */\nexport const useChannelMessagesQuery = (variables: any = {}, options: any = {}) => {\n return useMessagesQuery({\n variables,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n refetchWritePolicy: 'merge',\n ...options,\n });\n};\n\n/**\n * Hook for sending messages in a channel\n * @returns Mutation function and result\n */\nexport const useSendChannelMessage = () => {\n return useSendMessagesMutation();\n};\n\n/**\n * Hook for adding a direct channel\n * @returns Mutation function and result\n */\nexport const useAddDirectChannel = () => {\n return useAddDirectChannelMutation();\n};\n\n/**\n * Messages document for queries\n */\nexport const MESSAGES_DOCUMENT = MessagesDocument;\n\n// ====== MUTATIONS ======\n\n/**\n * Hook for sending thread messages\n * @returns Mutation function and result\n */\nexport const useSendThreadMessage = () => {\n return useSendThreadMessageMutation();\n};\n\n/**\n * Hook for sending expo notifications\n * @returns Mutation function and result\n */\nexport const useSendExpoNotification = () => {\n return useSendExpoNotificationOnPostMutation();\n};\n\n/**\n * Hook for creating a post thread\n * @param options - Mutation options\n * @returns Mutation function and result\n */\nexport const useCreatePostThread = (options: any = {}) => {\n return useCreatePostThreadMutation(options);\n};\n\n// ====== SUBSCRIPTION DOCUMENTS ======\n\n/**\n * Document for chat message added subscription\n */\nexport const CHAT_MESSAGE_ADDED = OnChatMessageAddedDocument;\n\n/**\n * Document for thread created/updated subscription\n */\nexport const THREAD_CREATED_UPDATED = OnThreadCreatedUpdatedDocument;\n\n/**\n * Hook for subscribing to thread creation and updates\n * @returns Subscription result for thread creation/update events\n */\nexport const useThreadCreatedUpdatedSubscription = (options: any = {}) => {\n return useOnThreadCreatedUpdatedSubscription({\n ...options,\n });\n};\n\n/**\n * Hook for subscribing to chat message additions\n * @param options - Subscription options including variables like channelId\n * @returns Subscription result for new chat messages\n */\nexport const useChatMessageAddedSubscription = (options: any = {}) => {\n return useOnChatMessageAddedSubscription({\n ...options,\n });\n};\n\n/**\n * Hook for subscribing to thread chat message additions\n * @param options - Subscription options including variables like channelId and threadId\n * @returns Subscription result for new thread chat messages\n */\nexport const useThreadChatMessageAddedSubscription = (options: any = {}) => {\n return useOnThreadChatMessageAddedSubscription({\n ...options,\n });\n};\n\n// ====== LAZY QUERIES ======\n\n/**\n * Hook for lazily fetching a post thread\n * @param options - Lazy query options\n * @returns Lazy query function and result\n */\nexport const useGetPostThreadLazy = (options: any = {}) => {\n return useGetPostThreadLazyQuery({\n fetchPolicy: 'cache-and-network',\n ...options,\n });\n};\n\n// ====== CUSTOM QUERY HOOKS ======\n\n/**\n * Custom hook that combines channels and provides refresh functionality\n */\nexport const useInboxChannels = () => {\n const queryResult = useChannelsQuery();\n\n const refresh = useCallback(() => {\n return queryResult.refetch();\n }, [queryResult.refetch]);\n\n const loadMore = useCallback(\n (page: number) => {\n if (queryResult.loading || !queryResult.data) return;\n\n return queryResult.fetchMore({\n variables: { page },\n updateQuery: (prev, { fetchMoreResult }) => {\n if (!fetchMoreResult) return prev;\n\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n // supportServiceChannels: [\n // ...(prev.supportServiceChannels || []),\n // ...(fetchMoreResult.supportServiceChannels || []),\n // ],\n };\n },\n });\n },\n [queryResult.fetchMore, queryResult.loading, queryResult.data],\n );\n\n return {\n ...queryResult,\n refresh,\n loadMore,\n };\n};\n\n/**\n * Custom hook for thread message operations\n */\nexport const useThreadOperations = (channelId: string, options: any = {}) => {\n const queryResult = useThreadMessagesQueryWithOptions({ channelId, ...options.variables }, options.queryOptions);\n\n const [sendMessage, sendMessageResult] = useSendThreadMessage();\n\n const refresh = useCallback(() => {\n return queryResult.refetch();\n }, [queryResult.refetch]);\n\n const fetchMoreMessages = useCallback(\n (variables: any) => {\n return queryResult.fetchMore({\n variables,\n updateQuery: (prev, { fetchMoreResult }) => {\n if (!fetchMoreResult?.threadMessages?.data) return prev;\n\n return {\n ...prev,\n threadMessages: {\n ...prev.threadMessages,\n data: [...fetchMoreResult.threadMessages.data, ...(prev.threadMessages?.data || [])],\n },\n };\n },\n });\n },\n [queryResult.fetchMore],\n );\n\n return {\n data: queryResult.data,\n loading: queryResult.loading,\n error: queryResult.error,\n refresh,\n fetchMoreMessages,\n sendMessage,\n sendMessageResult,\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAWO,MAAM,gBAAmB,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACrD,EAAO,OAAA,yBAAA,CAA0B,iCAC5B,OAD4B,CAAA,EAAA;AAAA,IAE/B,WAAa,EAAA;AAAA,GAEd,CAAA,CAAA;AACH;AAoBO,MAAM,qBAAwB,GAAA,CAAC,SAAmB,EAAA,OAAA,GAAe,EAAO,KAAA;AAC7E,EAAA,OAAO,yBAA0B,CAAA,cAAA,CAAA;AAAA,IAC/B,SAAW,EAAA;AAAA,MACT;AAAA;AACF,GAAA,EACG,OACJ,CAAA,CAAA;AACH;AAoBO,MAAM,iCAAoC,GAAA,CAAC,SAAgB,EAAA,OAAA,GAAe,EAAO,KAAA;AACtF,EAAA,OAAO,sBAAuB,CAAA,cAAA,CAAA;AAAA,IAC5B,SAAA;AAAA,IACA,WAAa,EAAA,mBAAA;AAAA,IACb,kBAAoB,EAAA,WAAA;AAAA,IACpB,eAAiB,EAAA;AAAA,GAAA,EACd,OACJ,CAAA,CAAA;AACH;AAUO,MAAM,0BAA0B,CAAC,SAAA,GAAiB,EAAI,EAAA,OAAA,GAAe,EAAO,KAAA;AACjF,EAAA,OAAO,gBAAiB,CAAA,cAAA,CAAA;AAAA,IACtB,SAAA;AAAA,IACA,WAAa,EAAA,mBAAA;AAAA,IACb,eAAiB,EAAA,aAAA;AAAA,IACjB,kBAAoB,EAAA;AAAA,GAAA,EACjB,OACJ,CAAA,CAAA;AACH;AAMO,MAAM,wBAAwB,MAAM;AACzC,EAAA,OAAO,uBAAwB,EAAA;AACjC;AAMO,MAAM,sBAAsB,MAAM;AACvC,EAAA,OAAO,2BAA4B,EAAA;AACrC;AAKO,MAAM,iBAAoB,GAAA;AAQ1B,MAAM,uBAAuB,MAAM;AACxC,EAAA,OAAO,4BAA6B,EAAA;AACtC;AAMO,MAAM,0BAA0B,MAAM;AAC3C,EAAA,OAAO,qCAAsC,EAAA;AAC/C;AAOO,MAAM,mBAAsB,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACxD,EAAA,OAAO,4BAA4B,OAAO,CAAA;AAC5C;AAOO,MAAM,kBAAqB,GAAA;AAK3B,MAAM,sBAAyB,GAAA;AAM/B,MAAM,mCAAsC,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACxE,EAAO,OAAA,qCAAA,CAAsC,mBACxC,OACJ,CAAA,CAAA;AACH;AAOO,MAAM,+BAAkC,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACpE,EAAO,OAAA,iCAAA,CAAkC,mBACpC,OACJ,CAAA,CAAA;AACH;AAoBO,MAAM,oBAAuB,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACzD,EAAA,OAAO,yBAA0B,CAAA,cAAA,CAAA;AAAA,IAC/B,WAAa,EAAA;AAAA,GAAA,EACV,OACJ,CAAA,CAAA;AACH"}
1
+ {"version":3,"file":"inboxQueries.js","sources":["../../src/queries/inboxQueries.ts"],"sourcesContent":["// Imports from common/graphql\nimport {\n useGetChannelsByUserWithServiceChannelsQuery,\n useGetChannelsByUserQuery,\n OnChatMessageAddedDocument,\n OnThreadCreatedUpdatedDocument,\n useViewChannelDetailQuery,\n useThreadMessagesQuery,\n useSupportServiceChannelsQuery,\n useSendThreadMessageMutation,\n useMessagesQuery,\n useSendMessagesMutation,\n useAddDirectChannelMutation,\n MessagesDocument,\n useSendExpoNotificationOnPostMutation,\n useOnThreadCreatedUpdatedSubscription,\n useOnChatMessageAddedSubscription,\n useOnThreadChatMessageAddedSubscription,\n useCreatePostThreadMutation,\n useGetPostThreadLazyQuery,\n} from 'common/graphql';\nimport { useCallback } from 'react';\n\n// ====== CHANNEL QUERIES ======\n\n/**\n * Hook for fetching channels by user including service channels\n * @param options - Query options\n * @returns Query result with data, loading state, refetch and fetchMore functions\n */\nexport const useChannelsQuery = (options: any = {}) => {\n return useGetChannelsByUserQuery({\n ...options,\n fetchPolicy: 'cache-and-network',\n //nextFetchPolicy: 'network-only',\n });\n};\n\n/**\n * Hook for fetching service channels\n * @param options - Query options\n * @returns Query result with data, loading state and refetch function\n */\nexport const useServiceChannelsQuery = (options: any = {}) => {\n return useSupportServiceChannelsQuery({\n ...options,\n fetchPolicy: 'cache-and-network',\n });\n};\n\n/**\n * Hook for fetching channel details\n * @param channelId - ID of the channel to fetch\n * @param options - Additional query options\n * @returns Query result with channel details\n */\nexport const useChannelDetailQuery = (channelId: string, options: any = {}) => {\n return useViewChannelDetailQuery({\n variables: { channelId },\n ...options,\n });\n};\n\n// ====== THREAD QUERIES ======\n\n/**\n * Direct export of the thread messages query hook\n */\nexport { useThreadMessagesQuery };\n\n/**\n * Direct export of the messages query hook\n */\nexport { useMessagesQuery };\n\n/**\n * Hook for fetching thread messages with default options\n * @param variables - Query variables including channelId, role, and limit\n * @param options - Additional query options\n * @returns Query result with thread messages data\n */\nexport const useThreadMessagesQueryWithOptions = (variables: any, options: any = {}) => {\n return useThreadMessagesQuery({\n variables,\n fetchPolicy: 'cache-and-network',\n refetchWritePolicy: 'overwrite',\n nextFetchPolicy: 'network-only',\n ...options,\n });\n};\n\n// ====== MESSAGE QUERIES ======\n\n/**\n * Hook for fetching channel messages\n * @param variables - Query variables including channelId, parentId, and pagination params\n * @param options - Additional query options\n * @returns Query result for messages\n */\nexport const useChannelMessagesQuery = (variables: any = {}, options: any = {}) => {\n return useMessagesQuery({\n variables,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n refetchWritePolicy: 'merge',\n ...options,\n });\n};\n\n/**\n * Hook for sending messages in a channel\n * @returns Mutation function and result\n */\nexport const useSendChannelMessage = () => {\n return useSendMessagesMutation();\n};\n\n/**\n * Hook for adding a direct channel\n * @returns Mutation function and result\n */\nexport const useAddDirectChannel = () => {\n return useAddDirectChannelMutation();\n};\n\n/**\n * Messages document for queries\n */\nexport const MESSAGES_DOCUMENT = MessagesDocument;\n\n// ====== MUTATIONS ======\n\n/**\n * Hook for sending thread messages\n * @returns Mutation function and result\n */\nexport const useSendThreadMessage = () => {\n return useSendThreadMessageMutation();\n};\n\n/**\n * Hook for sending expo notifications\n * @returns Mutation function and result\n */\nexport const useSendExpoNotification = () => {\n return useSendExpoNotificationOnPostMutation();\n};\n\n/**\n * Hook for creating a post thread\n * @param options - Mutation options\n * @returns Mutation function and result\n */\nexport const useCreatePostThread = (options: any = {}) => {\n return useCreatePostThreadMutation(options);\n};\n\n// ====== SUBSCRIPTION DOCUMENTS ======\n\n/**\n * Document for chat message added subscription\n */\nexport const CHAT_MESSAGE_ADDED = OnChatMessageAddedDocument;\n\n/**\n * Document for thread created/updated subscription\n */\nexport const THREAD_CREATED_UPDATED = OnThreadCreatedUpdatedDocument;\n\n/**\n * Hook for subscribing to thread creation and updates\n * @returns Subscription result for thread creation/update events\n */\nexport const useThreadCreatedUpdatedSubscription = (options: any = {}) => {\n return useOnThreadCreatedUpdatedSubscription({\n ...options,\n });\n};\n\n/**\n * Hook for subscribing to chat message additions\n * @param options - Subscription options including variables like channelId\n * @returns Subscription result for new chat messages\n */\nexport const useChatMessageAddedSubscription = (options: any = {}) => {\n return useOnChatMessageAddedSubscription({\n ...options,\n });\n};\n\n/**\n * Hook for subscribing to thread chat message additions\n * @param options - Subscription options including variables like channelId and threadId\n * @returns Subscription result for new thread chat messages\n */\nexport const useThreadChatMessageAddedSubscription = (options: any = {}) => {\n return useOnThreadChatMessageAddedSubscription({\n ...options,\n });\n};\n\n// ====== LAZY QUERIES ======\n\n/**\n * Hook for lazily fetching a post thread\n * @param options - Lazy query options\n * @returns Lazy query function and result\n */\nexport const useGetPostThreadLazy = (options: any = {}) => {\n return useGetPostThreadLazyQuery({\n fetchPolicy: 'cache-and-network',\n ...options,\n });\n};\n\n// ====== CUSTOM QUERY HOOKS ======\n\n/**\n * Custom hook that combines channels and provides refresh functionality\n */\nexport const useInboxChannels = () => {\n const queryResult = useChannelsQuery();\n\n const refresh = useCallback(() => {\n return queryResult.refetch();\n }, [queryResult.refetch]);\n\n const loadMore = useCallback(\n (page: number) => {\n if (queryResult.loading || !queryResult.data) return;\n\n return queryResult.fetchMore({\n variables: { page },\n updateQuery: (prev, { fetchMoreResult }) => {\n if (!fetchMoreResult) return prev;\n\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n // supportServiceChannels: [\n // ...(prev.supportServiceChannels || []),\n // ...(fetchMoreResult.supportServiceChannels || []),\n // ],\n };\n },\n });\n },\n [queryResult.fetchMore, queryResult.loading, queryResult.data],\n );\n\n return {\n ...queryResult,\n refresh,\n loadMore,\n };\n};\n\n/**\n * Custom hook for thread message operations\n */\nexport const useThreadOperations = (channelId: string, options: any = {}) => {\n const queryResult = useThreadMessagesQueryWithOptions({ channelId, ...options.variables }, options.queryOptions);\n\n const [sendMessage, sendMessageResult] = useSendThreadMessage();\n\n const refresh = useCallback(() => {\n return queryResult.refetch();\n }, [queryResult.refetch]);\n\n const fetchMoreMessages = useCallback(\n (variables: any) => {\n return queryResult.fetchMore({\n variables,\n updateQuery: (prev, { fetchMoreResult }) => {\n if (!fetchMoreResult?.threadMessages?.data) return prev;\n\n return {\n ...prev,\n threadMessages: {\n ...prev.threadMessages,\n data: [...fetchMoreResult.threadMessages.data, ...(prev.threadMessages?.data || [])],\n },\n };\n },\n });\n },\n [queryResult.fetchMore],\n );\n\n return {\n data: queryResult.data,\n loading: queryResult.loading,\n error: queryResult.error,\n refresh,\n fetchMoreMessages,\n sendMessage,\n sendMessageResult,\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqCO,MAAM,qBAAwB,GAAA,CAAC,SAAmB,EAAA,OAAA,GAAe,EAAO,KAAA;AAC7E,EAAA,OAAO,yBAA0B,CAAA,cAAA,CAAA;AAAA,IAC/B,SAAW,EAAA;AAAA,MACT;AAAA;AACF,GAAA,EACG,OACJ,CAAA,CAAA;AACH;AAoBO,MAAM,iCAAoC,GAAA,CAAC,SAAgB,EAAA,OAAA,GAAe,EAAO,KAAA;AACtF,EAAA,OAAO,sBAAuB,CAAA,cAAA,CAAA;AAAA,IAC5B,SAAA;AAAA,IACA,WAAa,EAAA,mBAAA;AAAA,IACb,kBAAoB,EAAA,WAAA;AAAA,IACpB,eAAiB,EAAA;AAAA,GAAA,EACd,OACJ,CAAA,CAAA;AACH;AAUO,MAAM,0BAA0B,CAAC,SAAA,GAAiB,EAAI,EAAA,OAAA,GAAe,EAAO,KAAA;AACjF,EAAA,OAAO,gBAAiB,CAAA,cAAA,CAAA;AAAA,IACtB,SAAA;AAAA,IACA,WAAa,EAAA,mBAAA;AAAA,IACb,eAAiB,EAAA,aAAA;AAAA,IACjB,kBAAoB,EAAA;AAAA,GAAA,EACjB,OACJ,CAAA,CAAA;AACH;AAMO,MAAM,wBAAwB,MAAM;AACzC,EAAA,OAAO,uBAAwB,EAAA;AACjC;AAMO,MAAM,sBAAsB,MAAM;AACvC,EAAA,OAAO,2BAA4B,EAAA;AACrC;AAKO,MAAM,iBAAoB,GAAA;AAQ1B,MAAM,uBAAuB,MAAM;AACxC,EAAA,OAAO,4BAA6B,EAAA;AACtC;AAMO,MAAM,0BAA0B,MAAM;AAC3C,EAAA,OAAO,qCAAsC,EAAA;AAC/C;AAOO,MAAM,mBAAsB,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACxD,EAAA,OAAO,4BAA4B,OAAO,CAAA;AAC5C;AAOO,MAAM,kBAAqB,GAAA;AAK3B,MAAM,sBAAyB,GAAA;AAM/B,MAAM,mCAAsC,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACxE,EAAO,OAAA,qCAAA,CAAsC,mBACxC,OACJ,CAAA,CAAA;AACH;AA+BO,MAAM,oBAAuB,GAAA,CAAC,OAAe,GAAA,EAAO,KAAA;AACzD,EAAA,OAAO,yBAA0B,CAAA,cAAA,CAAA;AAAA,IAC/B,WAAa,EAAA;AAAA,GAAA,EACV,OACJ,CAAA,CAAA;AACH"}
@@ -0,0 +1,169 @@
1
+ import React__default,{useRef,useState,useMemo,useEffect,useCallback}from'react';import {Pressable,HStack,Box,Avatar,AvatarFallbackText,AvatarImage,AvatarGroup,AvatarBadge,Text}from'@admin-layout/gluestack-ui-mobile';import {isToday,isYesterday,format}from'date-fns';import {useFocusEffect}from'@react-navigation/native';import {RoomType}from'common';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';const safeDate = (dateValue) => {
2
+ if (!dateValue)
3
+ return null;
4
+ try {
5
+ const date = new Date(dateValue);
6
+ if (isNaN(date.getTime())) {
7
+ console.warn("Invalid date value detected:", dateValue);
8
+ return null;
9
+ }
10
+ return date;
11
+ } catch (error) {
12
+ console.warn("Error creating date from value:", dateValue, error);
13
+ return null;
14
+ }
15
+ };
16
+ const createdAtText = (value) => {
17
+ if (!value)
18
+ return "";
19
+ const date = safeDate(value);
20
+ if (!date)
21
+ return "";
22
+ if (isToday(date))
23
+ return "Today";
24
+ if (isYesterday(date))
25
+ return "Yesterday";
26
+ return format(date, "MMM dd, yyyy");
27
+ };
28
+ const LastMessageComponent = ({
29
+ title,
30
+ lastMessage,
31
+ isServiceChannel = false
32
+ }) => {
33
+ var _a, _b, _c, _d, _e;
34
+ const count = 30;
35
+ const channelTitle = (title == null ? void 0 : title.slice(0, count)) + ((title == null ? void 0 : title.length) > count ? "..." : "") || "";
36
+ let displayMessage = "No messages yet";
37
+ if (lastMessage) {
38
+ const hasFileAttachments = ((_b = (_a = lastMessage.files) == null ? void 0 : _a.data) == null ? void 0 : _b.length) > 0;
39
+ const isImageMessage = ((_c = lastMessage.message) == null ? void 0 : _c.includes("<img")) || ((_d = lastMessage.message) == null ? void 0 : _d.includes("[Image]")) || ((_e = lastMessage.message) == null ? void 0 : _e.includes("![")) || /\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || "") && ((lastMessage.message || "").includes("http") || (lastMessage.message || "").includes("/images/"));
40
+ if (hasFileAttachments) {
41
+ displayMessage = "\u{1F4CE} File attachment";
42
+ } else if (isImageMessage) {
43
+ displayMessage = "[Image]";
44
+ } else if (lastMessage.message && lastMessage.message.trim() !== "") {
45
+ displayMessage = lastMessage.message;
46
+ } else {
47
+ displayMessage = "(Empty message)";
48
+ }
49
+ }
50
+ const displayDate = (lastMessage == null ? void 0 : lastMessage.createdAt) ? createdAtText(lastMessage.createdAt) : (lastMessage == null ? void 0 : lastMessage.updatedAt) ? createdAtText(lastMessage.updatedAt) : "";
51
+ return /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", className: "flex-1 justify-between" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.8]" }, /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[600], className: "text-base text-wrap flex-wrap font-semibold" }, channelTitle), /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[600], numberOfLines: 1 }, displayMessage)), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.2]" }, /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[500] }, displayDate)));
52
+ };
53
+ const DialogItemComponent = function DialogItem2({
54
+ currentUser,
55
+ channel,
56
+ onOpen
57
+ }) {
58
+ const isMountedRef = useRef(true);
59
+ const [title, setTitle] = useState("");
60
+ const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());
61
+ const isServiceChannel = (channel == null ? void 0 : channel.type) === RoomType.Service;
62
+ const lastMessage = channel == null ? void 0 : channel.lastMessage;
63
+ const creatorAndMembersId = useMemo(() => {
64
+ var _a, _b, _c, _d, _e, _f;
65
+ if (!isServiceChannel || !(channel == null ? void 0 : channel.members))
66
+ return null;
67
+ const membersIds = (_c = (_b = (_a = channel == null ? void 0 : channel.members) == null ? void 0 : _a.filter((m) => {
68
+ var _a2;
69
+ return m !== null && ((_a2 = m == null ? void 0 : m.user) == null ? void 0 : _a2.id) !== (currentUser == null ? void 0 : currentUser.id);
70
+ })) == null ? void 0 : _b.map((mu) => {
71
+ var _a2;
72
+ return (_a2 = mu == null ? void 0 : mu.user) == null ? void 0 : _a2.id;
73
+ })) != null ? _c : [];
74
+ const creatorId = (_d = channel == null ? void 0 : channel.creator) == null ? void 0 : _d.id;
75
+ const mergedIds = (_e = [].concat(membersIds, creatorId)) != null ? _e : [];
76
+ return (_f = mergedIds == null ? void 0 : mergedIds.filter((m, pos) => (mergedIds == null ? void 0 : mergedIds.indexOf(m)) === pos)) != null ? _f : [];
77
+ }, [isServiceChannel, channel, currentUser]);
78
+ const postParentId = useMemo(() => {
79
+ var _a;
80
+ if (!isServiceChannel || !(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length))
81
+ return null;
82
+ return (creatorAndMembersId == null ? void 0 : creatorAndMembersId.length) && (creatorAndMembersId == null ? void 0 : creatorAndMembersId.includes(currentUser == null ? void 0 : currentUser.id)) ? null : (lastMessage == null ? void 0 : lastMessage.parentId) ? lastMessage == null ? void 0 : lastMessage.parentId : (_a = lastMessage == null ? void 0 : lastMessage.id) != null ? _a : 0;
83
+ }, [isServiceChannel, creatorAndMembersId, lastMessage, currentUser]);
84
+ const channelMembers = useMemo(() => {
85
+ var _a, _b, _c;
86
+ if (isServiceChannel)
87
+ return [];
88
+ return (_c = (_b = (_a = channel == null ? void 0 : channel.members) == null ? void 0 : _a.filter((ch) => {
89
+ var _a2, _b2;
90
+ return ((_a2 = ch == null ? void 0 : ch.user) == null ? void 0 : _a2.id) !== (currentUser == null ? void 0 : currentUser.id) && ((_b2 = ch == null ? void 0 : ch.user) == null ? void 0 : _b2.__typename) === "UserAccount";
91
+ })) == null ? void 0 : _b.map((m) => m == null ? void 0 : m.user)) != null ? _c : [];
92
+ }, [isServiceChannel, currentUser == null ? void 0 : currentUser.id, channel == null ? void 0 : channel.members]);
93
+ useEffect(() => {
94
+ var _a, _b;
95
+ if (!isServiceChannel && channelMembers.length > 0 && isMountedRef.current) {
96
+ const titleString = ((_b = (_a = channelMembers == null ? void 0 : channelMembers.map((u) => `${(u == null ? void 0 : u.givenName) || ""} ${(u == null ? void 0 : u.familyName) || ""}`.trim())) == null ? void 0 : _a.filter(Boolean)) == null ? void 0 : _b.join(", ")) || "";
97
+ setTitle(titleString);
98
+ } else if (isServiceChannel && (channel == null ? void 0 : channel.title)) {
99
+ setTitle(channel.title);
100
+ }
101
+ }, [isServiceChannel, channelMembers, channel == null ? void 0 : channel.title]);
102
+ const displayTitle = useMemo(() => {
103
+ const length = 30;
104
+ const titleToUse = isServiceChannel ? (channel == null ? void 0 : channel.title) || "" : title;
105
+ return titleToUse.length > length ? titleToUse.substring(0, length - 3) + "..." : titleToUse;
106
+ }, [isServiceChannel, channel == null ? void 0 : channel.title, title]);
107
+ useEffect(() => {
108
+ isMountedRef.current = true;
109
+ return () => {
110
+ isMountedRef.current = false;
111
+ };
112
+ }, []);
113
+ useFocusEffect(useCallback(() => {
114
+ if (!(channel == null ? void 0 : channel.id))
115
+ return;
116
+ console.log(`DialogItem focused for ${isServiceChannel ? "service" : "direct"} channel:`, channel == null ? void 0 : channel.id);
117
+ if (isServiceChannel) {
118
+ setSubscriptionsTimestamp(Date.now());
119
+ }
120
+ }, [channel == null ? void 0 : channel.id, isServiceChannel]));
121
+ const handlePress = useCallback(() => {
122
+ if (isServiceChannel) {
123
+ onOpen(channel == null ? void 0 : channel.id, displayTitle, postParentId);
124
+ } else {
125
+ onOpen(channel == null ? void 0 : channel.id, displayTitle);
126
+ }
127
+ }, [isServiceChannel, channel == null ? void 0 : channel.id, displayTitle, postParentId, onOpen]);
128
+ const renderAvatar = () => {
129
+ var _a, _b, _c, _d;
130
+ if (isServiceChannel) {
131
+ return /* @__PURE__ */ React__default.createElement(Avatar, { key: "service-channels-key-" + (channel == null ? void 0 : channel.id), size: "sm", className: "bg-transparent top-0 right-0 z-[1]" }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, startCase((_b = (_a = channel == null ? void 0 : channel.creator) == null ? void 0 : _a.username) == null ? void 0 : _b.charAt(0))), /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "user image", style: {
132
+ borderRadius: 6,
133
+ borderWidth: 2,
134
+ borderColor: "#fff"
135
+ }, source: {
136
+ uri: (_c = channel == null ? void 0 : channel.creator) == null ? void 0 : _c.picture
137
+ } }));
138
+ }
139
+ return /* @__PURE__ */ React__default.createElement(AvatarGroup, null, channelMembers && (channelMembers == null ? void 0 : channelMembers.length) > 0 && ((_d = channelMembers == null ? void 0 : channelMembers.slice(0, 1)) == null ? void 0 : _d.map((ch, i) => {
140
+ var _a2;
141
+ return /* @__PURE__ */ React__default.createElement(Avatar, { key: "dialogs-list-" + i, size: "sm", className: `bg-transparent top-[${i === 1 ? "4" : "0"}] right-[${i === 1 ? "-2" : "0"}] z-[${i === 1 ? 5 : 1}]` }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, startCase((_a2 = ch == null ? void 0 : ch.username) == null ? void 0 : _a2.charAt(0))), (channelMembers == null ? void 0 : channelMembers.length) > 1 && /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
142
+ width: "100%",
143
+ height: "100%",
144
+ backgroundColor: "#e5e7eb",
145
+ borderRadius: 5
146
+ }, className: "items-center justify-center bg-gray-200 rounded-md" }, /* @__PURE__ */ React__default.createElement(Text, { style: {
147
+ fontSize: 12,
148
+ fontWeight: "bold",
149
+ color: "#000"
150
+ } }, channelMembers == null ? void 0 : channelMembers.length)), (channelMembers == null ? void 0 : channelMembers.length) === 1 && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "user image", style: {
151
+ borderRadius: 6,
152
+ borderWidth: 2,
153
+ borderColor: "#fff"
154
+ }, source: {
155
+ uri: ch == null ? void 0 : ch.picture
156
+ } }), /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
157
+ width: 10,
158
+ height: 10
159
+ } })));
160
+ })));
161
+ };
162
+ return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: handlePress, className: "flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700", style: {
163
+ borderBottomWidth: 1,
164
+ borderColor: "#e5e7eb",
165
+ marginVertical: 0,
166
+ paddingHorizontal: isServiceChannel ? 2 : 10
167
+ } }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 w-[100%] py-3 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.1] items-start pl-3" }, renderAvatar()), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(LastMessageComponent, { key: isServiceChannel ? `service-channel-${channel == null ? void 0 : channel.id}-${subscriptionsTimestamp}` : `last-msg-${(lastMessage == null ? void 0 : lastMessage.id) || "none"}-${channelMembers.length}`, title: displayTitle, lastMessage, isServiceChannel }))));
168
+ };
169
+ const DialogItem = React__default.memo(DialogItemComponent);export{DialogItem,DialogItemComponent};//# sourceMappingURL=DialogItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DialogItem.js","sources":["../../../../src/screens/inbox/components/DialogItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';\nimport {\n Text,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, IUserAccount, RoomType } from 'common';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue: any): Date | null => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string): string => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogItemProps {\n currentUser?: any;\n channel?: any;\n onOpen: (id: any, title: any, postParentId?: any) => void;\n}\n\ninterface LastMessageComponentProps {\n title: string;\n lastMessage: any;\n isServiceChannel?: boolean;\n}\n\n// LastMessage component that works for both direct and service channels\nconst LastMessageComponent: React.FC<LastMessageComponentProps> = ({\n title,\n lastMessage,\n isServiceChannel = false,\n}) => {\n const count = 30;\n const channelTitle = title?.slice(0, count) + (title?.length > count ? '...' : '') || '';\n\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n const displayDate = lastMessage?.createdAt\n ? createdAtText(lastMessage.createdAt)\n : lastMessage?.updatedAt\n ? createdAtText(lastMessage.updatedAt)\n : '';\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {channelTitle}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{displayDate}</Text>\n </Box>\n </HStack>\n );\n};\n\nexport const DialogItemComponent: React.FC<IDialogItemProps> = function DialogItem({ currentUser, channel, onOpen }) {\n const isMountedRef = useRef(true);\n const [title, setTitle] = useState('');\n const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());\n\n const isServiceChannel = channel?.type === RoomType.Service;\n\n // Use channel.lastMessage instead of computing it\n const lastMessage = channel?.lastMessage;\n\n // Service channel specific calculations\n const creatorAndMembersId = useMemo(() => {\n if (!isServiceChannel || !channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [isServiceChannel, channel, currentUser]);\n\n const postParentId = useMemo(() => {\n if (!isServiceChannel || !creatorAndMembersId?.length) return null;\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [isServiceChannel, creatorAndMembersId, lastMessage, currentUser]);\n\n // Channel members computation for direct channels\n const channelMembers = useMemo(() => {\n if (isServiceChannel) return [];\n return (\n channel?.members\n ?.filter((ch: any) => ch?.user?.id !== currentUser?.id && ch?.user?.__typename === 'UserAccount')\n ?.map((m: any) => m?.user) ?? []\n );\n }, [isServiceChannel, currentUser?.id, channel?.members]);\n\n // Set title when channel members change (for direct channels)\n useEffect(() => {\n if (!isServiceChannel && channelMembers.length > 0 && isMountedRef.current) {\n const titleString =\n channelMembers\n ?.map((u: any) => `${u?.givenName || ''} ${u?.familyName || ''}`.trim())\n ?.filter(Boolean)\n ?.join(', ') || '';\n setTitle(titleString);\n } else if (isServiceChannel && channel?.title) {\n setTitle(channel.title);\n }\n }, [isServiceChannel, channelMembers, channel?.title]);\n\n // Compute display title\n const displayTitle = useMemo(() => {\n const length = 30;\n const titleToUse = isServiceChannel ? channel?.title || '' : title;\n return titleToUse.length > length ? titleToUse.substring(0, length - 3) + '...' : titleToUse;\n }, [isServiceChannel, channel?.title, title]);\n\n // Set mounted state on mount/unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // Focus effect handling\n useFocusEffect(\n useCallback(() => {\n if (!channel?.id) return;\n\n console.log(`DialogItem focused for ${isServiceChannel ? 'service' : 'direct'} channel:`, channel?.id);\n\n if (isServiceChannel) {\n setSubscriptionsTimestamp(Date.now());\n }\n }, [channel?.id, isServiceChannel]),\n );\n\n // Handle press based on channel type\n const handlePress = useCallback(() => {\n if (isServiceChannel) {\n onOpen(channel?.id, displayTitle, postParentId);\n } else {\n onOpen(channel?.id, displayTitle);\n }\n }, [isServiceChannel, channel?.id, displayTitle, postParentId, onOpen]);\n\n // Render avatar based on channel type\n const renderAvatar = () => {\n if (isServiceChannel) {\n return (\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText>{startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n );\n }\n\n return (\n <AvatarGroup>\n {channelMembers &&\n channelMembers?.length > 0 &&\n channelMembers?.slice(0, 1)?.map((ch: any, i: number) => (\n <Avatar\n key={'dialogs-list-' + i}\n size={'sm'}\n className={`bg-transparent top-[${i === 1 ? '4' : '0'}] right-[${\n i === 1 ? '-2' : '0'\n }] z-[${i === 1 ? 5 : 1}]`}\n >\n <AvatarFallbackText>{startCase(ch?.username?.charAt(0))}</AvatarFallbackText>\n {channelMembers?.length > 1 && (\n <AvatarBadge\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#e5e7eb',\n borderRadius: 5,\n }}\n className=\"items-center justify-center bg-gray-200 rounded-md\"\n >\n <Text style={{ fontSize: 12, fontWeight: 'bold', color: '#000' }}>\n {channelMembers?.length}\n </Text>\n </AvatarBadge>\n )}\n {channelMembers?.length === 1 && (\n <>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: ch?.picture,\n }}\n />\n <AvatarBadge style={{ width: 10, height: 10 }} />\n </>\n )}\n </Avatar>\n ))}\n </AvatarGroup>\n );\n };\n\n return (\n <Pressable\n onPress={handlePress}\n className=\"flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700\"\n style={{\n borderBottomWidth: 1,\n borderColor: '#e5e7eb',\n marginVertical: 0,\n paddingHorizontal: isServiceChannel ? 2 : 10,\n }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">{renderAvatar()}</Box>\n <Box className=\"flex-1\">\n <LastMessageComponent\n key={\n isServiceChannel\n ? `service-channel-${channel?.id}-${subscriptionsTimestamp}`\n : `last-msg-${lastMessage?.id || 'none'}-${channelMembers.length}`\n }\n title={displayTitle}\n lastMessage={lastMessage}\n isServiceChannel={isServiceChannel}\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogItem = React.memo(DialogItemComponent);\n"],"names":["React","DialogItem","_a","_b"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React__default,{useState,useRef,useCallback,useMemo,useEffect}from'react';import {Center,Spinner,Text,Box,Heading,Input,InputField,FlatList}from'@admin-layout/gluestack-ui-mobile';import {Ionicons}from'@expo/vector-icons';import {useSelector,shallowEqual}from'react-redux';import {useRoute,useNavigation,useFocusEffect}from'@react-navigation/native';import {DialogsListItem}from'../components/DialogsListItem.js';import {ServiceDialogsListItem}from'../components/ServiceDialogsListItem.js';import {useChannelsQuery,CHAT_MESSAGE_ADDED}from'../../../queries/inboxQueries.js';import {RoomType}from'common';import {userSelector}from'@adminide-stack/user-auth0-client';import {config}from'../config/config.js';import colors from'tailwindcss/colors';import {SubscriptionHandler}from'../components/SubscriptionHandler.js';var __defProp = Object.defineProperty;
1
+ import React__default,{useState,useRef,useCallback,useMemo,useEffect}from'react';import {Center,Spinner,Text,Box,Heading,Input,InputField,FlatList}from'@admin-layout/gluestack-ui-mobile';import {Ionicons}from'@expo/vector-icons';import {useSelector,shallowEqual}from'react-redux';import {useRoute,useNavigation,useFocusEffect}from'@react-navigation/native';import {DialogItem}from'../components/DialogItem.js';import {useGetChannelsByUserWithLastMessageQuery}from'common/graphql';import {RoomType}from'common';import {userSelector}from'@adminide-stack/user-auth0-client';import {config}from'../config/config.js';import colors from'tailwindcss/colors';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -31,9 +31,6 @@ const DialogsComponent = (props) => {
31
31
  const auth = useSelector(userSelector, shallowEqual);
32
32
  const navigation = useNavigation();
33
33
  const [searchQuery, setSearchQuery] = useState("");
34
- const [selectedChannelId, setSelectedChannelId] = useState((params == null ? void 0 : params.channelId) || null);
35
- const [page, setPage] = useState(1);
36
- const [isLoadingMore, setIsLoadingMore] = useState(false);
37
34
  const isMountedRef = useRef(true);
38
35
  const focusRefreshRef = useRef(null);
39
36
  const lastRefreshTimeRef = useRef(Date.now());
@@ -47,11 +44,10 @@ const DialogsComponent = (props) => {
47
44
  refetch,
48
45
  fetchMore,
49
46
  subscribeToMore
50
- } = useChannelsQuery({
47
+ } = useGetChannelsByUserWithLastMessageQuery({
51
48
  variables: {
52
49
  role: channelRole,
53
50
  criteria: channelFilters,
54
- supportServices: false,
55
51
  limit: 15,
56
52
  skip: 0
57
53
  },
@@ -84,7 +80,6 @@ const DialogsComponent = (props) => {
84
80
  resetActiveChannelTimeoutRef.current = setTimeout(() => {
85
81
  activeChannelRef.current = null;
86
82
  }, 2e3);
87
- setSelectedChannelId(id);
88
83
  console.log("\u{1F4F1} Navigating to channel:", id);
89
84
  navigation.navigate(config.INBOX_MESSEGE_PATH, {
90
85
  channelId: id,
@@ -107,7 +102,6 @@ const DialogsComponent = (props) => {
107
102
  resetActiveChannelTimeoutRef.current = setTimeout(() => {
108
103
  activeChannelRef.current = null;
109
104
  }, 2e3);
110
- setSelectedChannelId(id);
111
105
  console.log("\u{1F4F1} Navigating to service channel:", id);
112
106
  navigation.navigate(postParentId || postParentId === 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {
113
107
  channelId: id,
@@ -146,9 +140,9 @@ const DialogsComponent = (props) => {
146
140
  item: channel
147
141
  }) => {
148
142
  const key = `${channel.type === RoomType.Service ? "service" : "direct"}-${channel.id}`;
149
- return (channel == null ? void 0 : channel.type) === RoomType.Service ? /* @__PURE__ */ React__default.createElement(ServiceDialogsListItem, { key, onOpen: handleSelectServiceChannel, currentUser: auth, channel, refreshing: loading, selectedChannelId, role: channelRole }) : /* @__PURE__ */ React__default.createElement(DialogsListItem, { key, onOpen: handleSelectChannel, currentUser: auth, channel, selectedChannelId, forceRefresh: true });
150
- }, [auth, channelRole, handleSelectChannel, handleSelectServiceChannel, loading, selectedChannelId]);
151
- const ListFooterComponent = useMemo(() => isLoadingMore ? /* @__PURE__ */ React__default.createElement(Center, { className: "py-4" }, /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500], size: "small" })) : null, [isLoadingMore]);
143
+ return /* @__PURE__ */ React__default.createElement(DialogItem, { key, onOpen: (channel == null ? void 0 : channel.type) === RoomType.Service ? handleSelectServiceChannel : handleSelectChannel, currentUser: auth, channel });
144
+ }, [auth, handleSelectChannel, handleSelectServiceChannel]);
145
+ const ListFooterComponent = useMemo(() => loading ? /* @__PURE__ */ React__default.createElement(Center, { className: "py-4" }, /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500], size: "small" })) : null, [loading]);
152
146
  const ListEmptyComponent = useMemo(() => {
153
147
  if (loading && displayChannels.length === 0) {
154
148
  return /* @__PURE__ */ React__default.createElement(Center, { className: "flex-1 justify-center items-center", style: {
@@ -206,21 +200,18 @@ const DialogsComponent = (props) => {
206
200
  refetch();
207
201
  }, [refetch]);
208
202
  const handleLoadMore = useCallback(() => {
209
- if (isLoadingMore || !data || channels.length < 10) {
203
+ if (loading || !data || channels.length < 10) {
210
204
  console.log("Skip loading more: already loading or all data loaded");
211
205
  return;
212
206
  }
213
- console.log("Loading more channels at page:", page + 1);
214
- setIsLoadingMore(true);
207
+ console.log("Loading more channels");
215
208
  fetchMore({
216
209
  variables: {
217
- skip: page * 15
210
+ skip: channels.length
218
211
  },
219
212
  updateQuery: (prev, {
220
213
  fetchMoreResult
221
214
  }) => {
222
- setIsLoadingMore(false);
223
- setPage((prevPage) => prevPage + 1);
224
215
  if (!fetchMoreResult)
225
216
  return prev;
226
217
  return __spreadProps(__spreadValues({}, fetchMoreResult), {
@@ -229,10 +220,9 @@ const DialogsComponent = (props) => {
229
220
  }
230
221
  }).catch((error) => {
231
222
  console.error("Error loading more channels:", error);
232
- setIsLoadingMore(false);
233
223
  });
234
- }, [fetchMore, isLoadingMore, data, channels.length, page]);
235
- return /* @__PURE__ */ React__default.createElement(Box, { className: "p-2" }, /* @__PURE__ */ React__default.createElement(SubscriptionHandler, { subscribeToMore, document: CHAT_MESSAGE_ADDED, variables: {}, updateQuery: void 0 }), /* @__PURE__ */ React__default.createElement(FlatList, { data: displayChannels, onRefresh: handlePullToRefresh, refreshing: loading && !isLoadingMore, contentContainerStyle: {
224
+ }, [fetchMore, loading, data, channels.length]);
225
+ return /* @__PURE__ */ React__default.createElement(Box, { className: "p-2" }, /* @__PURE__ */ React__default.createElement(FlatList, { data: displayChannels, onRefresh: handlePullToRefresh, refreshing: loading, contentContainerStyle: {
236
226
  minHeight: "100%"
237
227
  }, ItemSeparatorComponent: React__default.useCallback(() => /* @__PURE__ */ React__default.createElement(Box, { className: "h-0.5 bg-gray-200" }), []), renderItem, ListFooterComponent, onEndReached: handleLoadMore, onEndReachedThreshold: 0.5, initialNumToRender: 5, maxToRenderPerBatch: 5, windowSize: 5, removeClippedSubviews: true, updateCellsBatchingPeriod: 100, getItemLayout: React__default.useCallback((data2, index) => ({
238
228
  length: 80,
@@ -1 +1 @@
1
- {"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { FlatList, Box, Heading, Input, InputField, Text, Center, Spinner } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useChannelsQuery, CHAT_MESSAGE_ADDED } from '../../../queries/inboxQueries';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from '../components/SubscriptionHandler';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n // channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n channelFilters.type = [RoomType.Direct, RoomType.Service];\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector, shallowEqual);\n const navigation = useNavigation<any>();\n // Local state for UI control\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedChannelId, setSelectedChannelId] = useState<string | null>(params?.channelId || null);\n const [page, setPage] = useState(1);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const focusRefreshRef = useRef<number | null>(null);\n const lastRefreshTimeRef = useRef(Date.now());\n const MIN_REFRESH_INTERVAL = 2000;\n\n // Add lastNavigationTimestamp to track when the user navigates away\n const lastNavigationTimestamp = useRef(0);\n // Track active channel to prevent duplicate clicks on the same channel\n const activeChannelRef = useRef<string | null>(null);\n // Hold a timeout ref to reset active channel status\n const resetActiveChannelTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Apollo query with pagination and optimistic updates\n const { data, loading, refetch, fetchMore, subscribeToMore } = useChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: false,\n // supportServices: supportServices ? true : false,\n // supportServiceCriteria: {\n // type: RoomType.Service,\n // },\n limit: 15,\n skip: 0,\n },\n notifyOnNetworkStatusChange: true,\n fetchPolicy: 'cache-and-network',\n });\n\n // Memoize processChannels and sortChannels to avoid unnecessary recalculations\n const processChannels = useCallback(\n (rawChannels = []) => {\n if (!rawChannels?.length) return [];\n return rawChannels.filter((c) => {\n if (!c?.members) return false;\n return c.members.some(\n (member) => member?.user && member.user.id !== auth?.id && member.user.__typename === 'UserAccount',\n );\n });\n },\n [auth?.id],\n );\n\n const sortChannels = useCallback((channels) => {\n if (!channels?.length) return [];\n return channels;\n // return [...channels].sort((a, b) => {\n // const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n // const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n // return dateB - dateA;\n // });\n }, []);\n\n // Navigation handlers with debounce to prevent double taps\n const handleSelectChannel = useCallback(\n (id, title) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to channel:', id);\n navigation.navigate(config.INBOX_MESSEGE_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n timestamp: new Date().getTime(),\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id, title, postParentId) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on service channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to service channel:', id);\n navigation.navigate(postParentId || postParentId === 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n // Handle search query changes\n const handleSearchChange = useCallback((text: string) => {\n setSearchQuery(text);\n }, []);\n\n // Memoize allChannels and channels\n // const allChannels = useMemo(\n // () => [...(data?.supportServiceChannels || []), ...(data?.channelsByUser || [])],\n // [data],\n // );\n const allChannels = useMemo(() => [...(data?.channelsByUser || [])], [data]);\n const channels = useMemo(\n () => sortChannels(processChannels(allChannels)),\n [allChannels, processChannels, sortChannels],\n );\n\n // Memoize filteredChannels\n const displayChannels = useMemo(() => {\n if (!searchQuery.trim()) return channels;\n const query = searchQuery.toLowerCase();\n return channels.filter((channel) => {\n if (channel.title && channel.title.toLowerCase().includes(query)) return true;\n if (channel.members) {\n return channel.members.some((member) => {\n const user = member?.user;\n if (!user) return false;\n const fullName = `${user.givenName || ''} ${user.familyName || ''}`.toLowerCase();\n return fullName.includes(query) || (user.username && user.username.toLowerCase().includes(query));\n });\n }\n return false;\n });\n }, [channels, searchQuery]);\n\n // Memoize renderItem to avoid re-renders\n const renderItem = useCallback(\n ({ item: channel }) => {\n const key = `${channel.type === RoomType.Service ? 'service' : 'direct'}-${channel.id}`;\n return channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n key={key}\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={loading}\n selectedChannelId={selectedChannelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n key={key}\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={selectedChannelId}\n forceRefresh={true}\n />\n );\n },\n [auth, channelRole, handleSelectChannel, handleSelectServiceChannel, loading, selectedChannelId],\n );\n\n // Memoize ListFooterComponent and ListEmptyComponent\n const ListFooterComponent = useMemo(\n () =>\n isLoadingMore ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null,\n [isLoadingMore],\n );\n\n const ListEmptyComponent = useMemo(() => {\n if (loading && displayChannels.length === 0) {\n return (\n <Center className=\"flex-1 justify-center items-center\" style={{ height: 300 }}>\n <Spinner color={colors.blue[500]} size=\"large\" />\n <Text className=\"mt-4 text-gray-500\">Loading conversations...</Text>\n </Center>\n );\n }\n return (\n <Box className=\"p-6\">\n <Box className=\"mb-6\">\n <Heading className=\"text-2xl font-bold\">Direct Messages</Heading>\n <Text className=\"text-gray-600 mt-1\">Private conversations with other users</Text>\n </Box>\n <Input\n className=\"mb-8 h-[50] rounded-md border-gray-300 border\"\n size=\"md\"\n style={{\n paddingVertical: 8,\n marginBottom: 10,\n borderColor: '#d1d5db',\n borderRadius: 10,\n }}\n >\n <InputField\n placeholder=\"Search messages...\"\n onChangeText={handleSearchChange}\n value={searchQuery}\n />\n </Input>\n <Center className=\"items-center\" style={{ paddingVertical: 5 }}>\n <Box className=\"w-16 h-16 rounded-full bg-blue-500 flex items-center justify-center mb-5\">\n <Ionicons name=\"chatbubble-ellipses\" size={30} color=\"white\" />\n </Box>\n <Text className=\"text-2xl font-bold text-center mb-2\">No messages yet</Text>\n <Text className=\"text-gray-600 text-center mb-8\">\n When you start conversations with others,{'\\n'}\n they'll appear here.\n </Text>\n </Center>\n </Box>\n );\n }, [loading, displayChannels.length, handleSearchChange, searchQuery]);\n\n // Handle component cleanup\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n // Clear any active timeouts\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n };\n }, []);\n\n // Reset activeChannelRef when returning to this screen\n useFocusEffect(\n useCallback(() => {\n // When screen gains focus, check if we're coming back from a detail screen\n const now = Date.now();\n\n // Reset active channel ref if enough time has passed since last navigation\n if (now - lastNavigationTimestamp.current > 300) {\n activeChannelRef.current = null;\n console.log('Reset active channel reference on focus');\n }\n\n return () => {\n // When losing focus, update the timestamp\n lastNavigationTimestamp.current = Date.now();\n };\n }, []),\n );\n\n // Handle refresh on focus\n useFocusEffect(\n useCallback(() => {\n console.log('📱 Focus effect triggered for Dialogs screen');\n\n // Refresh when returning to the screen if enough time has passed\n const performRefresh = () => {\n const now = Date.now();\n if (now - lastRefreshTimeRef.current < MIN_REFRESH_INTERVAL) {\n console.log('⏩ Skipping refresh: too soon after previous refresh');\n return;\n }\n\n console.log('🔄 Performing refresh on screen focus');\n if (isMountedRef.current) {\n lastRefreshTimeRef.current = now;\n refetch();\n }\n };\n\n const focusRefreshTimeout = setTimeout(performRefresh, 100);\n return () => clearTimeout(focusRefreshTimeout);\n }, [refetch]),\n );\n\n // Handle pull-to-refresh\n const handlePullToRefresh = useCallback(() => {\n const now = Date.now();\n focusRefreshRef.current = now;\n\n console.log('🔄 Pull-to-refresh triggered');\n refetch();\n }, [refetch]);\n\n // Load more channels\n const handleLoadMore = useCallback(() => {\n if (isLoadingMore || !data || channels.length < 10) {\n console.log('Skip loading more: already loading or all data loaded');\n return;\n }\n\n console.log('Loading more channels at page:', page + 1);\n setIsLoadingMore(true);\n\n fetchMore({\n variables: {\n skip: page * 15,\n },\n updateQuery: (prev, { fetchMoreResult }) => {\n setIsLoadingMore(false);\n setPage((prevPage) => prevPage + 1);\n\n if (!fetchMoreResult) return prev;\n\n // Combine previous and new results\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n // supportServiceChannels: [\n // ...(prev.supportServiceChannels || []),\n // ...(fetchMoreResult.supportServiceChannels || []),\n // ],\n };\n },\n }).catch((error) => {\n console.error('Error loading more channels:', error);\n setIsLoadingMore(false);\n });\n }, [fetchMore, isLoadingMore, data, channels.length, page]);\n\n return (\n <Box className=\"p-2\">\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{}}\n updateQuery={undefined}\n />\n <FlatList\n data={displayChannels}\n onRefresh={handlePullToRefresh}\n refreshing={loading && !isLoadingMore}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={React.useCallback(\n () => (\n <Box className=\"h-0.5 bg-gray-200\" />\n ),\n [],\n )}\n renderItem={renderItem}\n ListFooterComponent={ListFooterComponent}\n onEndReached={handleLoadMore}\n onEndReachedThreshold={0.5}\n initialNumToRender={5}\n maxToRenderPerBatch={5}\n windowSize={5}\n removeClippedSubviews={true}\n updateCellsBatchingPeriod={100}\n getItemLayout={React.useCallback((data, index) => ({ length: 80, offset: 80 * index, index }), [])}\n keyExtractor={React.useCallback((item) => `channel-${item.id}`, [])}\n ListEmptyComponent={ListEmptyComponent}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["channels","React","data"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,MAAM,gBAAA,GAAmB,CAAC,KAAsB,KAAA;AAC9C,EAAM,MAAA;AAAA,IACJ,cAAgB,EAAA,iBAAA;AAAA,IAChB,WAAA;AAAA,IACA;AAAA,GACE,GAAA,KAAA;AACJ,EAAA,MAAM,iBAAiB,cAClB,CAAA,EAAA,EAAA,iBAAA,CAAA;AAGL,EAAA,cAAA,CAAe,IAAO,GAAA,CAAC,QAAS,CAAA,MAAA,EAAQ,SAAS,OAAO,CAAA;AACxD,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,QAAc,EAAA;AAClB,EAAM,MAAA,IAAA,GAAO,WAAY,CAAA,YAAA,EAAc,YAAY,CAAA;AACnD,EAAA,MAAM,aAAa,aAAmB,EAAA;AAEtC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,iBAAmB,EAAA,oBAAoB,IAAI,QAAwB,CAAA,CAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,cAAa,IAAI,CAAA;AACnG,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,CAAC,CAAA;AAClC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAGxD,EAAM,MAAA,YAAA,GAAe,OAAO,IAAI,CAAA;AAChC,EAAM,MAAA,eAAA,GAAkB,OAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,kBAAqB,GAAA,MAAA,CAAO,IAAK,CAAA,GAAA,EAAK,CAAA;AAC5C,EAAA,MAAM,oBAAuB,GAAA,GAAA;AAG7B,EAAM,MAAA,uBAAA,GAA0B,OAAO,CAAC,CAAA;AAExC,EAAM,MAAA,gBAAA,GAAmB,OAAsB,IAAI,CAAA;AAEnD,EAAM,MAAA,4BAAA,GAA+B,OAA8B,IAAI,CAAA;AAGvE,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,gBAAiB,CAAA;AAAA,IACnB,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,WAAA;AAAA,MACN,QAAU,EAAA,cAAA;AAAA,MACV,eAAiB,EAAA,KAAA;AAAA,MAKjB,KAAO,EAAA,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,2BAA6B,EAAA,IAAA;AAAA,IAC7B,WAAa,EAAA;AAAA,GACd,CAAA;AAGD,EAAA,MAAM,eAAkB,GAAA,WAAA,CAAY,CAAC,WAAA,GAAc,EAAO,KAAA;AACxD,IAAA,IAAI,EAAC,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,MAAA,CAAA;AAAQ,MAAA,OAAO,EAAC;AAClC,IAAO,OAAA,WAAA,CAAY,OAAO,CAAK,CAAA,KAAA;AAC7B,MAAA,IAAI,EAAC,CAAG,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAA,OAAA,CAAA;AAAS,QAAO,OAAA,KAAA;AACxB,MAAA,OAAO,CAAE,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,MAAA,KAAA,CAAU,iCAAQ,IAAQ,KAAA,MAAA,CAAO,IAAK,CAAA,EAAA,MAAO,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,CAAA,IAAM,MAAO,CAAA,IAAA,CAAK,eAAe,aAAa,CAAA;AAAA,KACxH,CAAA;AAAA,GACA,EAAA,CAAC,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAE,CAAC,CAAA;AACb,EAAM,MAAA,YAAA,GAAe,WAAY,CAAA,CAAAA,SAAY,KAAA;AAC3C,IAAI,IAAA,EAACA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAAA,SAAU,CAAA,MAAA,CAAA;AAAQ,MAAA,OAAO,EAAC;AAC/B,IAAOA,OAAAA,SAAAA;AAAA,GAMT,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,mBAAsB,GAAA,WAAA,CAAY,CAAC,EAAA,EAAI,KAAU,KAAA;AACrD,IAAI,IAAA,gBAAA,CAAiB,YAAY,EAAI,EAAA;AACnC,MAAQ,OAAA,CAAA,GAAA,CAAI,+CAAwC,EAAE,CAAA;AACtD,MAAA;AAAA;AAEF,IAAA,gBAAA,CAAiB,OAAU,GAAA,EAAA;AAC3B,IAAA,IAAI,6BAA6B,OAAS,EAAA;AACxC,MAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AAAA;AAEnD,IAA6B,4BAAA,CAAA,OAAA,GAAU,WAAW,MAAM;AACtD,MAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAAA,OAC1B,GAAI,CAAA;AACP,IAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,IAAQ,OAAA,CAAA,GAAA,CAAI,oCAA6B,EAAE,CAAA;AAC3C,IAAW,UAAA,CAAA,QAAA,CAAS,OAAO,kBAAoB,EAAA;AAAA,MAC7C,SAAW,EAAA,EAAA;AAAA,MACX,IAAM,EAAA,WAAA;AAAA,MACN,KAAA;AAAA,MACA,UAAY,EAAA,IAAA;AAAA,MACZ,SAAW,EAAA,IAAI,IAAK,EAAA,CAAE,OAAQ,EAAA;AAAA,MAC9B,SAAS,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA;AAAA,KAClB,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,WAAW,CAAC,CAAA;AAC5B,EAAA,MAAM,0BAA6B,GAAA,WAAA,CAAY,CAAC,EAAA,EAAI,OAAO,YAAiB,KAAA;AAC1E,IAAI,IAAA,gBAAA,CAAiB,YAAY,EAAI,EAAA;AACnC,MAAQ,OAAA,CAAA,GAAA,CAAI,uDAAgD,EAAE,CAAA;AAC9D,MAAA;AAAA;AAEF,IAAA,gBAAA,CAAiB,OAAU,GAAA,EAAA;AAC3B,IAAA,IAAI,6BAA6B,OAAS,EAAA;AACxC,MAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AAAA;AAEnD,IAA6B,4BAAA,CAAA,OAAA,GAAU,WAAW,MAAM;AACtD,MAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAAA,OAC1B,GAAI,CAAA;AACP,IAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,IAAQ,OAAA,CAAA,GAAA,CAAI,4CAAqC,EAAE,CAAA;AACnD,IAAA,UAAA,CAAW,SAAS,YAAgB,IAAA,YAAA,KAAiB,IAAI,MAAO,CAAA,mBAAA,GAAsB,OAAO,YAAc,EAAA;AAAA,MACzG,SAAW,EAAA,EAAA;AAAA,MACX,IAAM,EAAA,WAAA;AAAA,MACN,KAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAY,EAAA,IAAA;AAAA,MACZ,SAAS,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA;AAAA,KAClB,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,WAAW,CAAC,CAAA;AAG5B,EAAM,MAAA,kBAAA,GAAqB,WAAY,CAAA,CAAC,IAAiB,KAAA;AACvD,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,GACrB,EAAG,EAAE,CAAA;AAOL,EAAA,MAAM,WAAc,GAAA,OAAA,CAAQ,MAAM,CAAC,GAAI,CAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,cAAkB,KAAA,EAAG,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAC3E,EAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,MAAM,YAAA,CAAa,eAAgB,CAAA,WAAW,CAAC,CAAA,EAAG,CAAC,WAAA,EAAa,eAAiB,EAAA,YAAY,CAAC,CAAA;AAGvH,EAAM,MAAA,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAI,IAAA,CAAC,YAAY,IAAK,EAAA;AAAG,MAAO,OAAA,QAAA;AAChC,IAAM,MAAA,KAAA,GAAQ,YAAY,WAAY,EAAA;AACtC,IAAO,OAAA,QAAA,CAAS,OAAO,CAAW,OAAA,KAAA;AAChC,MAAA,IAAI,QAAQ,KAAS,IAAA,OAAA,CAAQ,MAAM,WAAY,EAAA,CAAE,SAAS,KAAK,CAAA;AAAG,QAAO,OAAA,IAAA;AACzE,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA;AACpC,UAAA,MAAM,OAAO,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,IAAA;AACrB,UAAA,IAAI,CAAC,IAAA;AAAM,YAAO,OAAA,KAAA;AAClB,UAAM,MAAA,QAAA,GAAW,GAAG,IAAK,CAAA,SAAA,IAAa,MAAM,IAAK,CAAA,UAAA,IAAc,KAAK,WAAY,EAAA;AAChF,UAAO,OAAA,QAAA,CAAS,QAAS,CAAA,KAAK,CAAK,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,QAAS,CAAA,WAAA,EAAc,CAAA,QAAA,CAAS,KAAK,CAAA;AAAA,SAC/F,CAAA;AAAA;AAEH,MAAO,OAAA,KAAA;AAAA,KACR,CAAA;AAAA,GACA,EAAA,CAAC,QAAU,EAAA,WAAW,CAAC,CAAA;AAG1B,EAAM,MAAA,UAAA,GAAa,YAAY,CAAC;AAAA,IAC9B,IAAM,EAAA;AAAA,GACF,KAAA;AACJ,IAAM,MAAA,GAAA,GAAM,GAAG,OAAQ,CAAA,IAAA,KAAS,SAAS,OAAU,GAAA,SAAA,GAAY,YAAY,OAAQ,CAAA,EAAA,CAAA,CAAA;AACnF,IAAA,OAAA,CAAO,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,IAAA,MAAS,QAAS,CAAA,OAAA,mBAAWC,cAAA,CAAA,aAAA,CAAA,sBAAA,EAAA,EAAuB,GAAU,EAAA,MAAA,EAAQ,0BAA4B,EAAA,WAAA,EAAa,IAAM,EAAA,OAAA,EAAkB,UAAY,EAAA,OAAA,EAAS,iBAAsC,EAAA,IAAA,EAAM,WAAa,EAAA,CAAA,mBAAMA,cAAA,CAAA,aAAA,CAAA,eAAA,EAAA,EAAgB,GAAU,EAAA,MAAA,EAAQ,mBAAqB,EAAA,WAAA,EAAa,IAAM,EAAA,OAAA,EAAkB,iBAAsC,EAAA,YAAA,EAAc,IAAM,EAAA,CAAA;AAAA,GACnY,EAAG,CAAC,IAAM,EAAA,WAAA,EAAa,qBAAqB,0BAA4B,EAAA,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAGnG,EAAM,MAAA,mBAAA,GAAsB,QAAQ,MAAM,aAAA,gDAAiB,MAAO,EAAA,EAAA,SAAA,EAAU,0BACzDA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,OAAO,MAAO,CAAA,IAAA,CAAK,MAAM,IAAK,EAAA,OAAA,EAAQ,CACnD,CAAY,GAAA,IAAA,EAAM,CAAC,aAAa,CAAC,CAAA;AAC/C,EAAM,MAAA,kBAAA,GAAqB,QAAQ,MAAM;AACvC,IAAI,IAAA,OAAA,IAAW,eAAgB,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3C,MAAA,uBAAQA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAU,EAAA,oCAAA,EAAqC,KAAO,EAAA;AAAA,QACnE,MAAQ,EAAA;AAAA,OAEI,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA,CAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,mBAC9CA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAU,EAAA,oBAAA,EAAA,EAAqB,0BAAwB,CACjE,CAAA;AAAA;AAEZ,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,KACV,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,MACX,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,SAAA,EAAU,oBAAqB,EAAA,EAAA,iBAAe,CACvD,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,oBAAqB,EAAA,EAAA,wCAAsC,CAC/E,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,SAAU,EAAA,+CAAA,EAAgD,IAAK,EAAA,IAAA,EAAK,KAAO,EAAA;AAAA,MAC1F,eAAiB,EAAA,CAAA;AAAA,MACjB,YAAc,EAAA,EAAA;AAAA,MACd,WAAa,EAAA,SAAA;AAAA,MACb,YAAc,EAAA;AAAA,KAEF,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,WAAA,EAAY,sBAAqB,YAAc,EAAA,kBAAA,EAAoB,KAAO,EAAA,WAAA,EAAa,CACvG,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,SAAA,EAAU,gBAAe,KAAO,EAAA;AAAA,MAChD,eAAiB,EAAA;AAAA,KAEL,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,0EACX,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,qBAAsB,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAM,OAAQ,EAAA,CACjE,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,qCAAsC,EAAA,EAAA,iBAAe,CACrE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,gCAAiC,EAAA,EAAA,2CAAA,EACH,IAAK,EAAA,sBAEnD,CACJ,CACJ,CAAA;AAAA,KACP,CAAC,OAAA,EAAS,gBAAgB,MAAQ,EAAA,kBAAA,EAAoB,WAAW,CAAC,CAAA;AAGrE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAU,GAAA,KAAA;AAEvB,MAAA,IAAI,6BAA6B,OAAS,EAAA;AACxC,QAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AAAA;AACnD,KACF;AAAA,GACF,EAAG,EAAE,CAAA;AAGL,EAAA,cAAA,CAAe,YAAY,MAAM;AAE/B,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAGrB,IAAI,IAAA,GAAA,GAAM,uBAAwB,CAAA,OAAA,GAAU,GAAK,EAAA;AAC/C,MAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAC3B,MAAA,OAAA,CAAQ,IAAI,yCAAyC,CAAA;AAAA;AAEvD,IAAA,OAAO,MAAM;AAEX,MAAwB,uBAAA,CAAA,OAAA,GAAU,KAAK,GAAI,EAAA;AAAA,KAC7C;AAAA,GACF,EAAG,EAAE,CAAC,CAAA;AAGN,EAAA,cAAA,CAAe,YAAY,MAAM;AAC/B,IAAA,OAAA,CAAQ,IAAI,qDAA8C,CAAA;AAG1D,IAAA,MAAM,iBAAiB,MAAM;AAC3B,MAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AACrB,MAAI,IAAA,GAAA,GAAM,kBAAmB,CAAA,OAAA,GAAU,oBAAsB,EAAA;AAC3D,QAAA,OAAA,CAAQ,IAAI,0DAAqD,CAAA;AACjE,QAAA;AAAA;AAEF,MAAA,OAAA,CAAQ,IAAI,8CAAuC,CAAA;AACnD,MAAA,IAAI,aAAa,OAAS,EAAA;AACxB,QAAA,kBAAA,CAAmB,OAAU,GAAA,GAAA;AAC7B,QAAQ,OAAA,EAAA;AAAA;AACV,KACF;AACA,IAAM,MAAA,mBAAA,GAAsB,UAAW,CAAA,cAAA,EAAgB,GAAG,CAAA;AAC1D,IAAO,OAAA,MAAM,aAAa,mBAAmB,CAAA;AAAA,GAC5C,EAAA,CAAC,OAAO,CAAC,CAAC,CAAA;AAGb,EAAM,MAAA,mBAAA,GAAsB,YAAY,MAAM;AAC5C,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AACrB,IAAA,eAAA,CAAgB,OAAU,GAAA,GAAA;AAC1B,IAAA,OAAA,CAAQ,IAAI,qCAA8B,CAAA;AAC1C,IAAQ,OAAA,EAAA;AAAA,GACV,EAAG,CAAC,OAAO,CAAC,CAAA;AAGZ,EAAM,MAAA,cAAA,GAAiB,YAAY,MAAM;AACvC,IAAA,IAAI,aAAiB,IAAA,CAAC,IAAQ,IAAA,QAAA,CAAS,SAAS,EAAI,EAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AACnE,MAAA;AAAA;AAEF,IAAQ,OAAA,CAAA,GAAA,CAAI,gCAAkC,EAAA,IAAA,GAAO,CAAC,CAAA;AACtD,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAU,SAAA,CAAA;AAAA,MACR,SAAW,EAAA;AAAA,QACT,MAAM,IAAO,GAAA;AAAA,OACf;AAAA,MACA,WAAA,EAAa,CAAC,IAAM,EAAA;AAAA,QAClB;AAAA,OACI,KAAA;AACJ,QAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,QAAQ,OAAA,CAAA,CAAA,QAAA,KAAY,WAAW,CAAC,CAAA;AAChC,QAAA,IAAI,CAAC,eAAA;AAAiB,UAAO,OAAA,IAAA;AAG7B,QAAA,OAAO,iCACF,eADE,CAAA,EAAA;AAAA,UAEL,cAAA,EAAgB,CAAC,GAAI,IAAK,CAAA,cAAA,IAAkB,EAAC,EAAI,GAAI,eAAA,CAAgB,cAAkB,IAAA,EAAG;AAAA,SAK5F,CAAA;AAAA;AACF,KACD,CAAE,CAAA,KAAA,CAAM,CAAS,KAAA,KAAA;AAChB,MAAQ,OAAA,CAAA,KAAA,CAAM,gCAAgC,KAAK,CAAA;AACnD,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,KACvB,CAAA;AAAA,GACH,EAAG,CAAC,SAAW,EAAA,aAAA,EAAe,MAAM,QAAS,CAAA,MAAA,EAAQ,IAAI,CAAC,CAAA;AAC1D,EAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,KACZ,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,uBAAoB,eAAkC,EAAA,QAAA,EAAU,kBAAoB,EAAA,SAAA,EAAW,EAAC,EAAG,aAAa,MAAW,EAAA,CAAA,kBAC3HA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAS,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,mBAAA,EAAqB,UAAY,EAAA,OAAA,IAAW,CAAC,aAAA,EAAe,qBAAuB,EAAA;AAAA,IACrI,SAAW,EAAA;AAAA,GACV,EAAA,sBAAA,EAAwBA,cAAM,CAAA,WAAA,CAAY,sBAAOA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,mBAAA,EAAoB,GAAI,EAAE,CAAG,EAAA,UAAA,EAAwB,qBAA0C,YAAc,EAAA,cAAA,EAAgB,qBAAuB,EAAA,GAAA,EAAK,kBAAoB,EAAA,CAAA,EAAG,mBAAqB,EAAA,CAAA,EAAG,YAAY,CAAG,EAAA,qBAAA,EAAuB,IAAM,EAAA,yBAAA,EAA2B,KAAK,aAAe,EAAAA,cAAA,CAAM,WAAY,CAAA,CAACC,OAAM,KAAW,MAAA;AAAA,IACvY,MAAQ,EAAA,EAAA;AAAA,IACR,QAAQ,EAAK,GAAA,KAAA;AAAA,IACb;AAAA,GACE,CAAA,EAAA,EAAE,CAAA,EAAG,cAAcD,cAAM,CAAA,WAAA,CAAY,CAAQ,IAAA,KAAA,CAAA,QAAA,EAAW,KAAK,EAAM,CAAA,CAAA,EAAA,EAAE,CAAA,EAAG,oBAAwC,CAChH,CAAA;AACR,CAAA;AACa,MAAA,OAAA,GAAUA,cAAM,CAAA,IAAA,CAAK,gBAAgB"}
1
+ {"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { FlatList, Box, Heading, Input, InputField, Text, Center, Spinner } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';\nimport { DialogItem } from '../components/DialogItem';\n// import { useChannelsQuery, CHAT_MESSAGE_ADDED } from '../../../queries/inboxQueries';\nimport {\n useGetChannelsByUserQuery,\n useGetChannelsByUserWithLastMessageQuery,\n OnChatMessageAddedDocument,\n} from 'common/graphql';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from '../components/SubscriptionHandler';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n // channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n channelFilters.type = [RoomType.Direct, RoomType.Service];\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector, shallowEqual);\n const navigation = useNavigation<any>();\n // Local state for UI control - only keeping searchQuery as it's needed for local filtering\n const [searchQuery, setSearchQuery] = useState('');\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const focusRefreshRef = useRef<number | null>(null);\n const lastRefreshTimeRef = useRef(Date.now());\n const MIN_REFRESH_INTERVAL = 2000;\n\n // Add lastNavigationTimestamp to track when the user navigates away\n const lastNavigationTimestamp = useRef(0);\n // Track active channel to prevent duplicate clicks on the same channel\n const activeChannelRef = useRef<string | null>(null);\n // Hold a timeout ref to reset active channel status\n const resetActiveChannelTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Apollo query with pagination and optimistic updates\n const { data, loading, refetch, fetchMore, subscribeToMore } = useGetChannelsByUserWithLastMessageQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n // supportServices: false,\n // supportServices: supportServices ? true : false,\n // supportServiceCriteria: {\n // type: RoomType.Service,\n // },\n limit: 15,\n skip: 0,\n },\n notifyOnNetworkStatusChange: true,\n fetchPolicy: 'cache-and-network',\n });\n\n // Subscribe to new messages to update lastMessage in channels\n // useEffect(() => {\n // if (!data?.channelsByUser?.length || !subscribeToMore) return;\n\n // const subscriptions: (() => void)[] = [];\n\n // // Subscribe to each channel for real-time lastMessage updates\n // data.channelsByUser.forEach(channel => {\n // if (!channel?.id) return;\n\n // const unsubscribe = subscribeToMore({\n // document: OnChatMessageAddedDocument,\n // variables: {\n // channelId: channel.id.toString(),\n // },\n // updateQuery: (prev, { subscriptionData }: any) => {\n // if (!subscriptionData?.data?.chatMessageAdded || !isMountedRef.current) {\n // return prev;\n // }\n\n // const newMessage = subscriptionData.data.chatMessageAdded;\n // const channelId = newMessage.channel?.id;\n\n // if (!channelId) return prev;\n\n // // Update the specific channel's lastMessage\n // const updatedChannels = (prev.channelsByUser || []).map(ch => {\n // if (ch?.id === channelId) {\n // return {\n // ...ch,\n // lastMessage: {\n // id: newMessage.id,\n // message: newMessage.message || '',\n // createdAt: newMessage.createdAt,\n // updatedAt: newMessage.updatedAt,\n // author: newMessage.author ? {\n // id: newMessage.author.id,\n // givenName: newMessage.author.givenName,\n // familyName: newMessage.author.familyName,\n // username: newMessage.author.username,\n // } : null,\n // files: newMessage.files ? {\n // totalCount: newMessage.files.totalCount || 0,\n // data: (newMessage.files.data || []).map(file => ({\n // id: file.id,\n // name: file.name,\n // extension: file.extension,\n // mimeType: file.mimeType,\n // }))\n // } : null,\n // },\n // updatedAt: newMessage.createdAt,\n // lastPostAt: newMessage.createdAt,\n // };\n // }\n // return ch;\n // });\n\n // return {\n // ...prev,\n // channelsByUser: updatedChannels,\n // };\n // },\n // onError: (error) => {\n // console.error(`LastMessage subscription error for channel ${channel.id}:`, error);\n // },\n // });\n\n // subscriptions.push(unsubscribe);\n // });\n\n // // Cleanup subscriptions\n // return () => {\n // subscriptions.forEach(unsub => {\n // try {\n // unsub?.();\n // } catch (error) {\n // console.error('Error unsubscribing from lastMessage updates:', error);\n // }\n // });\n // };\n // }, [data?.channelsByUser, subscribeToMore]);\n\n // Memoize processChannels and sortChannels to avoid unnecessary recalculations\n const processChannels = useCallback(\n (rawChannels = []) => {\n if (!rawChannels?.length) return [];\n return rawChannels.filter((c) => {\n if (!c?.members) return false;\n return c.members.some(\n (member) => member?.user && member.user.id !== auth?.id && member.user.__typename === 'UserAccount',\n );\n });\n },\n [auth?.id],\n );\n\n const sortChannels = useCallback((channels) => {\n if (!channels?.length) return [];\n return channels;\n // return [...channels].sort((a, b) => {\n // const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n // const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n // return dateB - dateA;\n // });\n }, []);\n\n // Navigation handlers with debounce to prevent double taps\n const handleSelectChannel = useCallback(\n (id, title) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n console.log('📱 Navigating to channel:', id);\n navigation.navigate(config.INBOX_MESSEGE_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n timestamp: new Date().getTime(),\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id, title, postParentId) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on service channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n console.log('📱 Navigating to service channel:', id);\n navigation.navigate(postParentId || postParentId === 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n // Handle search query changes\n const handleSearchChange = useCallback((text: string) => {\n setSearchQuery(text);\n }, []);\n\n // Memoize allChannels and channels\n // const allChannels = useMemo(\n // () => [...(data?.supportServiceChannels || []), ...(data?.channelsByUser || [])],\n // [data],\n // );\n const allChannels = useMemo(() => [...(data?.channelsByUser || [])], [data]);\n const channels = useMemo(\n () => sortChannels(processChannels(allChannels)),\n [allChannels, processChannels, sortChannels],\n );\n\n // Memoize filteredChannels\n const displayChannels = useMemo(() => {\n if (!searchQuery.trim()) return channels;\n const query = searchQuery.toLowerCase();\n return channels.filter((channel) => {\n if (channel.title && channel.title.toLowerCase().includes(query)) return true;\n if (channel.members) {\n return channel.members.some((member) => {\n const user = member?.user;\n if (!user) return false;\n const fullName = `${user.givenName || ''} ${user.familyName || ''}`.toLowerCase();\n return fullName.includes(query) || (user.username && user.username.toLowerCase().includes(query));\n });\n }\n return false;\n });\n }, [channels, searchQuery]);\n\n // Memoize renderItem to avoid re-renders\n const renderItem = useCallback(\n ({ item: channel }) => {\n const key = `${channel.type === RoomType.Service ? 'service' : 'direct'}-${channel.id}`;\n return (\n <DialogItem\n key={key}\n onOpen={channel?.type === RoomType.Service ? handleSelectServiceChannel : handleSelectChannel}\n currentUser={auth}\n channel={channel}\n />\n );\n },\n [auth, handleSelectChannel, handleSelectServiceChannel],\n );\n\n // Memoize ListFooterComponent and ListEmptyComponent\n const ListFooterComponent = useMemo(\n () =>\n loading ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null,\n [loading],\n );\n\n const ListEmptyComponent = useMemo(() => {\n if (loading && displayChannels.length === 0) {\n return (\n <Center className=\"flex-1 justify-center items-center\" style={{ height: 300 }}>\n <Spinner color={colors.blue[500]} size=\"large\" />\n <Text className=\"mt-4 text-gray-500\">Loading conversations...</Text>\n </Center>\n );\n }\n return (\n <Box className=\"p-6\">\n <Box className=\"mb-6\">\n <Heading className=\"text-2xl font-bold\">Direct Messages</Heading>\n <Text className=\"text-gray-600 mt-1\">Private conversations with other users</Text>\n </Box>\n <Input\n className=\"mb-8 h-[50] rounded-md border-gray-300 border\"\n size=\"md\"\n style={{\n paddingVertical: 8,\n marginBottom: 10,\n borderColor: '#d1d5db',\n borderRadius: 10,\n }}\n >\n <InputField\n placeholder=\"Search messages...\"\n onChangeText={handleSearchChange}\n value={searchQuery}\n />\n </Input>\n <Center className=\"items-center\" style={{ paddingVertical: 5 }}>\n <Box className=\"w-16 h-16 rounded-full bg-blue-500 flex items-center justify-center mb-5\">\n <Ionicons name=\"chatbubble-ellipses\" size={30} color=\"white\" />\n </Box>\n <Text className=\"text-2xl font-bold text-center mb-2\">No messages yet</Text>\n <Text className=\"text-gray-600 text-center mb-8\">\n When you start conversations with others,{'\\n'}\n they'll appear here.\n </Text>\n </Center>\n </Box>\n );\n }, [loading, displayChannels.length, handleSearchChange, searchQuery]);\n\n // Handle component cleanup\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n // Clear any active timeouts\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n };\n }, []);\n\n // Reset activeChannelRef when returning to this screen\n useFocusEffect(\n useCallback(() => {\n // When screen gains focus, check if we're coming back from a detail screen\n const now = Date.now();\n\n // Reset active channel ref if enough time has passed since last navigation\n if (now - lastNavigationTimestamp.current > 300) {\n activeChannelRef.current = null;\n console.log('Reset active channel reference on focus');\n }\n\n return () => {\n // When losing focus, update the timestamp\n lastNavigationTimestamp.current = Date.now();\n };\n }, []),\n );\n\n // Handle refresh on focus\n useFocusEffect(\n useCallback(() => {\n console.log('📱 Focus effect triggered for Dialogs screen');\n\n // Refresh when returning to the screen if enough time has passed\n const performRefresh = () => {\n const now = Date.now();\n if (now - lastRefreshTimeRef.current < MIN_REFRESH_INTERVAL) {\n console.log('⏩ Skipping refresh: too soon after previous refresh');\n return;\n }\n\n console.log('🔄 Performing refresh on screen focus');\n if (isMountedRef.current) {\n lastRefreshTimeRef.current = now;\n refetch();\n }\n };\n\n const focusRefreshTimeout = setTimeout(performRefresh, 100);\n return () => clearTimeout(focusRefreshTimeout);\n }, [refetch]),\n );\n\n // Handle pull-to-refresh\n const handlePullToRefresh = useCallback(() => {\n const now = Date.now();\n focusRefreshRef.current = now;\n\n console.log('🔄 Pull-to-refresh triggered');\n refetch();\n }, [refetch]);\n\n // Load more channels\n const handleLoadMore = useCallback(() => {\n if (loading || !data || channels.length < 10) {\n console.log('Skip loading more: already loading or all data loaded');\n return;\n }\n\n console.log('Loading more channels');\n\n fetchMore({\n variables: {\n skip: channels.length,\n },\n updateQuery: (prev, { fetchMoreResult }) => {\n if (!fetchMoreResult) return prev;\n\n // Combine previous and new results\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n // supportServiceChannels: [\n // ...(prev.supportServiceChannels || []),\n // ...(fetchMoreResult.supportServiceChannels || []),\n // ],\n };\n },\n }).catch((error) => {\n console.error('Error loading more channels:', error);\n });\n }, [fetchMore, loading, data, channels.length]);\n\n return (\n <Box className=\"p-2\">\n <FlatList\n data={displayChannels}\n onRefresh={handlePullToRefresh}\n refreshing={loading}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={React.useCallback(\n () => (\n <Box className=\"h-0.5 bg-gray-200\" />\n ),\n [],\n )}\n renderItem={renderItem}\n ListFooterComponent={ListFooterComponent}\n onEndReached={handleLoadMore}\n onEndReachedThreshold={0.5}\n initialNumToRender={5}\n maxToRenderPerBatch={5}\n windowSize={5}\n removeClippedSubviews={true}\n updateCellsBatchingPeriod={100}\n getItemLayout={React.useCallback((data, index) => ({ length: 80, offset: 80 * index, index }), [])}\n keyExtractor={React.useCallback((item) => `channel-${item.id}`, [])}\n ListEmptyComponent={ListEmptyComponent}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["channels","React","data"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@messenger-box/platform-mobile",
3
- "version": "10.0.3-alpha.47",
3
+ "version": "10.0.3-alpha.48",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -22,8 +22,8 @@
22
22
  "watch-ts": "tsc --watch"
23
23
  },
24
24
  "dependencies": {
25
- "@messenger-box/core": "10.0.3-alpha.47",
26
- "@messenger-box/platform-client": "10.0.3-alpha.47",
25
+ "@messenger-box/core": "10.0.3-alpha.48",
26
+ "@messenger-box/platform-client": "10.0.3-alpha.48",
27
27
  "base-64": "1.0.0",
28
28
  "react-native-gifted-chat": "1.0.4"
29
29
  },
@@ -43,5 +43,5 @@
43
43
  "typescript": {
44
44
  "definition": "lib/index.d.ts"
45
45
  },
46
- "gitHead": "493161f9e7fc123cce6bc90f5c2f2006c7a59645"
46
+ "gitHead": "164356479ddd307a52d0d622fa8447311c017bc2"
47
47
  }