@corva/ui 3.79.0-6 → 3.79.0-8
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/cjs-bundle/components/CommentComposer/CommentReplyInput.js +1 -1
- package/cjs-bundle/components/CommentComposer/CommentReplyInput.js.map +1 -1
- package/cjs-bundle/components/CommentComposer/replyDrafts.js +2 -0
- package/cjs-bundle/components/CommentComposer/replyDrafts.js.map +1 -0
- package/cjs-bundle/components/FeedCard/useActivityInteractions.js +1 -1
- package/cjs-bundle/components/FeedCard/useActivityInteractions.js.map +1 -1
- package/cjs-bundle/components/FeedCard/useFeedActivity.js +1 -1
- package/cjs-bundle/components/FeedCard/useFeedActivity.js.map +1 -1
- package/components/CommentComposer/CommentReplyInput.d.ts +3 -1
- package/components/CommentComposer/CommentReplyInput.d.ts.map +1 -1
- package/components/CommentComposer/CommentReplyInput.js +1 -1
- package/components/CommentComposer/CommentReplyInput.js.map +1 -1
- package/components/CommentComposer/__tests__/CommentReplyInput.draft.test.d.ts +2 -0
- package/components/CommentComposer/__tests__/CommentReplyInput.draft.test.d.ts.map +1 -0
- package/components/CommentComposer/replyDrafts.d.ts +12 -0
- package/components/CommentComposer/replyDrafts.d.ts.map +1 -0
- package/components/CommentComposer/replyDrafts.js +2 -0
- package/components/CommentComposer/replyDrafts.js.map +1 -0
- package/components/FeedCard/useActivityInteractions.d.ts.map +1 -1
- package/components/FeedCard/useActivityInteractions.js +1 -1
- package/components/FeedCard/useActivityInteractions.js.map +1 -1
- package/components/FeedCard/useFeedActivity.d.ts.map +1 -1
- package/components/FeedCard/useFeedActivity.js +1 -1
- package/components/FeedCard/useFeedActivity.js.map +1 -1
- package/mcp-server/server.mjs +1 -1
- package/package.json +1 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActivityInteractions.js","sources":["../../../src/components/FeedCard/useActivityInteractions.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport moment from 'moment-timezone';\n\nimport type { ActivityReply } from '../CommentCard/buildCommentReply';\nimport { buildCommentReply } from '../CommentCard/buildCommentReply';\nimport type { CommentReply } from '../CommentCard/CommentCard.types';\n\nimport {\n deleteFeedItemComment,\n patchFeedItemComment,\n postFeedItemComment,\n toggleFeedItemLike,\n} from '~/clients/jsonApi';\nimport { showErrorNotification, showSuccessNotification } from '~/utils/notificationToasts';\n\nconst INITIAL_VISIBLE_REPLIES = 3;\nconst MORE_REPLIES_INCREMENT = 10;\n\n/* eslint-disable camelcase -- mirrors the platform's snake_case activity payload. */\nexport type InteractionActivity = {\n id?: string | number;\n likes_count?: number;\n likes?: { user?: { id?: string | number } }[];\n comments?: ActivityReply[];\n};\n/* eslint-enable camelcase */\n\nexport type UseActivityInteractionsOptions = {\n activity: InteractionActivity;\n currentUser: { id?: string | number };\n onChanged?: () => void;\n loadingState?: { isLoading: boolean; setIsLoading: (isLoading: boolean) => void };\n};\n\nexport type UseActivityInteractionsResult = {\n isLoading: boolean;\n isLiked: boolean;\n likesCount: number;\n commentsCount: number;\n isReplyOpen: boolean;\n toggleReplyOpen: () => void;\n replies: CommentReply[];\n editingReply: ActivityReply | null;\n cancelReplyEdit: () => void;\n updateReply: (\n replyId: string | number,\n body: string,\n attachments: { url: string; name: string; size?: number }[]\n ) => Promise<boolean>;\n hasMoreReplies: boolean;\n moreRepliesCount: number;\n showMoreReplies: () => void;\n toggleLike: () => Promise<void>;\n /** Resolves `false` when the post failed, so the composer can keep the draft. */\n postReply: (\n body: string,\n attachments?: { url: string; name: string; size?: number }[]\n ) => Promise<boolean>;\n};\n\n// Optimistic like / reply / reply-delete, reconciled once the host's refetch lands.\nexport const useActivityInteractions = ({\n activity,\n currentUser,\n onChanged,\n loadingState,\n}: UseActivityInteractionsOptions): UseActivityInteractionsResult => {\n // Read through a ref so an inline callback doesn't invalidate the memoized replies.\n const onChangedRef = useRef(onChanged);\n onChangedRef.current = onChanged;\n const notifyChanged = useCallback(() => onChangedRef.current?.(), []);\n\n const [localIsLoading, setLocalIsLoading] = useState(false);\n const isLoading = loadingState ? loadingState.isLoading : localIsLoading;\n const setIsLoading = loadingState ? loadingState.setIsLoading : setLocalIsLoading;\n\n const [isReplyOpen, setIsReplyOpen] = useState(false);\n const [editingReplyId, setEditingReplyId] = useState<string | number | null>(null);\n const [visibleReplies, setVisibleReplies] = useState(INITIAL_VISIBLE_REPLIES);\n const [optimisticReplies, setOptimisticReplies] = useState<ActivityReply[]>([]);\n const [updatedReplies, setUpdatedReplies] = useState<Record<string, Partial<ActivityReply>>>({});\n // Read through a ref so deleting a reply doesn't have to re-create its memoized handler.\n const optimisticRepliesRef = useRef(optimisticReplies);\n optimisticRepliesRef.current = optimisticReplies;\n const [deletedReplyIds, setDeletedReplyIds] = useState<(string | number)[]>([]);\n const [optimisticLiked, setOptimisticLiked] = useState<boolean | null>(null);\n\n const serverReplies = useMemo(() => activity?.comments ?? [], [activity?.comments]);\n const replies = useMemo(() => {\n // Ids arrive as string or number, so compare them as strings.\n const serverIds = new Set(serverReplies.map(reply => String(reply.id)));\n const merged = [\n ...serverReplies.map(reply => ({ ...reply, ...updatedReplies[String(reply.id)] })),\n ...optimisticReplies.filter(reply => !serverIds.has(String(reply.id))),\n ];\n\n if (!deletedReplyIds.length) return merged;\n\n return merged.filter(reply => !deletedReplyIds.some(id => String(id) === String(reply.id)));\n }, [serverReplies, optimisticReplies, updatedReplies, deletedReplyIds]);\n\n useEffect(() => {\n if (!optimisticReplies.length) return;\n const serverIds = new Set(serverReplies.map(reply => String(reply.id)));\n const stillPending = optimisticReplies.filter(reply => !serverIds.has(String(reply.id)));\n if (stillPending.length !== optimisticReplies.length) setOptimisticReplies(stillPending);\n }, [serverReplies, optimisticReplies]);\n\n // Drop a deleted id once the refetch has removed it server-side.\n useEffect(() => {\n if (!deletedReplyIds.length) return;\n const serverIds = new Set(serverReplies.map(reply => String(reply.id)));\n const stillPresent = deletedReplyIds.filter(id => serverIds.has(String(id)));\n if (stillPresent.length !== deletedReplyIds.length) setDeletedReplyIds(stillPresent);\n }, [serverReplies, deletedReplyIds]);\n\n const serverLiked = (activity?.likes ?? []).some(\n like => Number(like.user?.id) === Number(currentUser?.id)\n );\n const isLiked = optimisticLiked ?? serverLiked;\n const serverLikesCount = activity?.likes_count ?? 0;\n // Clamp: a stale likes array (count 0 while already liked) would render < 0.\n const likesCount =\n optimisticLiked === null || optimisticLiked === serverLiked\n ? serverLikesCount\n : Math.max(0, serverLikesCount + (optimisticLiked ? 1 : -1));\n\n useEffect(() => {\n if (optimisticLiked !== null && optimisticLiked === serverLiked) setOptimisticLiked(null);\n }, [serverLiked, optimisticLiked]);\n\n const toggleLike = async () => {\n if (activity?.id == null) return;\n const next = !isLiked;\n setOptimisticLiked(next);\n setIsLoading(true);\n try {\n await toggleFeedItemLike(activity.id);\n notifyChanged();\n } catch (err) {\n setOptimisticLiked(null);\n showErrorNotification('Failed to update the like');\n } finally {\n setIsLoading(false);\n }\n };\n\n const postReply = async (\n body: string,\n attachments: { url: string; name: string; size?: number }[] = []\n ) => {\n if (activity?.id == null) return false;\n setIsLoading(true);\n try {\n const files = attachments.map(file => ({\n url: file.url,\n size: file.size,\n file_name: file.name,\n }));\n // `attachment` mirrors the first file for clients still reading the legacy field.\n const comment = {\n body,\n ...(files.length ? { attachments: files, attachment: files[0] } : {}),\n };\n const created = await postFeedItemComment(activity.id, { comment });\n if (created?.id) setOptimisticReplies(prev => [...prev, created]);\n notifyChanged();\n\n return true;\n } catch (err) {\n showErrorNotification('Failed to post the reply');\n\n return false;\n } finally {\n setIsLoading(false);\n }\n };\n\n const updateReply = useCallback(\n async (\n replyId: string | number,\n body: string,\n attachments: { url: string; name: string; size?: number }[]\n ) => {\n if (activity?.id == null) return false;\n setIsLoading(true);\n try {\n const files = attachments.map(file => ({\n url: file.url,\n size: file.size,\n file_name: file.name,\n }));\n const comment = {\n body,\n attachments: files,\n attachment: files[0] ?? null,\n };\n await patchFeedItemComment(activity.id, replyId, { comment });\n setUpdatedReplies(prev => ({\n ...prev,\n [String(replyId)]: {\n body,\n attachments: files,\n attachment: files[0] ?? null,\n },\n }));\n setEditingReplyId(null);\n notifyChanged();\n\n return true;\n } catch (err) {\n showErrorNotification('Failed to update the reply');\n\n return false;\n } finally {\n setIsLoading(false);\n }\n },\n [activity?.id, notifyChanged, setIsLoading]\n );\n\n const deleteReply = useCallback(\n async (replyId: string | number) => {\n if (activity?.id == null) return;\n setIsLoading(true);\n // A reply posted in this session is not in the server list yet, so hiding it by id alone\n // would be undone by the reconciliation above: drop the local copy as well.\n const pendingCopy = optimisticRepliesRef.current.find(\n reply => String(reply.id) === String(replyId)\n );\n setOptimisticReplies(prev => prev.filter(reply => String(reply.id) !== String(replyId)));\n setDeletedReplyIds(prev => [...prev, replyId]); // hide immediately; the refetch drops it a moment later\n try {\n await deleteFeedItemComment(activity.id, replyId);\n notifyChanged();\n showSuccessNotification('Reply was deleted');\n } catch (err) {\n setDeletedReplyIds(prev => prev.filter(id => String(id) !== String(replyId)));\n if (pendingCopy) setOptimisticReplies(prev => [...prev, pendingCopy]);\n showErrorNotification('Failed to delete the reply');\n } finally {\n setIsLoading(false);\n }\n },\n [activity?.id, notifyChanged, setIsLoading]\n );\n\n const mappedReplies = useMemo<CommentReply[]>(() => {\n if (!replies.length) return [];\n\n return replies\n .map(reply => ({ reply, sortAt: moment(reply.created_at).unix() }))\n .sort((a, b) => b.sortAt - a.sortAt)\n .slice(0, visibleReplies)\n .map(({ reply }) =>\n buildCommentReply(reply, {\n currentUserId: currentUser?.id,\n onDelete: deleteReply,\n onEdit: setEditingReplyId,\n })\n );\n }, [replies, visibleReplies, deleteReply, currentUser?.id]);\n\n return {\n isLoading,\n isLiked,\n likesCount,\n commentsCount: replies.length,\n isReplyOpen,\n toggleReplyOpen: () => setIsReplyOpen(open => !open),\n replies: mappedReplies,\n editingReply: replies.find(reply => String(reply.id) === String(editingReplyId)) ?? null,\n cancelReplyEdit: () => setEditingReplyId(null),\n hasMoreReplies: replies.length > visibleReplies,\n moreRepliesCount: Math.max(0, replies.length - visibleReplies),\n showMoreReplies: () => setVisibleReplies(prev => prev + MORE_REPLIES_INCREMENT),\n toggleLike,\n postReply,\n updateReply,\n };\n};\n"],"names":["useActivityInteractions","_ref","_activity$likes","_activity$likes_count","_replies$find","activity","currentUser","onChanged","loadingState","onChangedRef","useRef","current","notifyChanged","useCallback","_onChangedRef$current","call","useState","_useState2","_slicedToArray","_useState","localIsLoading","setLocalIsLoading","isLoading","setIsLoading","_useState4","_useState3","isReplyOpen","setIsReplyOpen","_useState6","_useState5","editingReplyId","setEditingReplyId","_useState8","_useState7","visibleReplies","setVisibleReplies","_useState10","_useState9","optimisticReplies","setOptimisticReplies","_useState11","_useState12","updatedReplies","setUpdatedReplies","optimisticRepliesRef","_useState14","_useState13","deletedReplyIds","setDeletedReplyIds","_useState16","_useState15","optimisticLiked","setOptimisticLiked","serverReplies","useMemo","_activity$comments","comments","replies","serverIds","Set","map","reply","String","id","merged","filter","has","length","some","useEffect","stillPending","stillPresent","serverLiked","likes","like","_like$user","Number","user","isLiked","serverLikesCount","likes_count","likesCount","Math","max","toggleLike","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","abrupt","toggleFeedItemLike","t0","showErrorNotification","finish","stop","apply","this","arguments","postReply","_ref3","body","attachments","files","comment","created","_args2","_context2","file","url","size","file_name","name","_objectSpread","attachment","postFeedItemComment","sent","_callee2","_x","updateReply","_ref4","replyId","_files$","_context3","patchFeedItemComment","_files$2","_callee3","_x2","_x3","_x4","deleteReply","_ref5","pendingCopy","_context4","find","deleteFeedItemComment","showSuccessNotification","_callee4","_x5","mappedReplies","sortAt","moment","created_at","unix","sort","a","b","slice","_ref6","buildCommentReply","currentUserId","onDelete","onEdit","commentsCount","toggleReplyOpen","open","editingReply","cancelReplyEdit","hasMoreReplies","moreRepliesCount","showMoreReplies"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useActivityInteractions.js","sources":["../../../src/components/FeedCard/useActivityInteractions.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport moment from 'moment-timezone';\n\nimport { getActivityReplyDraftKey, hasReplyDraft } from '../CommentComposer/replyDrafts';\nimport type { ActivityReply } from '../CommentCard/buildCommentReply';\nimport { buildCommentReply } from '../CommentCard/buildCommentReply';\nimport type { CommentReply } from '../CommentCard/CommentCard.types';\n\nimport {\n deleteFeedItemComment,\n patchFeedItemComment,\n postFeedItemComment,\n toggleFeedItemLike,\n} from '~/clients/jsonApi';\nimport { showErrorNotification, showSuccessNotification } from '~/utils/notificationToasts';\n\nconst INITIAL_VISIBLE_REPLIES = 3;\nconst MORE_REPLIES_INCREMENT = 10;\n\n/* eslint-disable camelcase -- mirrors the platform's snake_case activity payload. */\nexport type InteractionActivity = {\n id?: string | number;\n likes_count?: number;\n likes?: { user?: { id?: string | number } }[];\n comments?: ActivityReply[];\n};\n/* eslint-enable camelcase */\n\nexport type UseActivityInteractionsOptions = {\n activity: InteractionActivity;\n currentUser: { id?: string | number };\n onChanged?: () => void;\n loadingState?: { isLoading: boolean; setIsLoading: (isLoading: boolean) => void };\n};\n\nexport type UseActivityInteractionsResult = {\n isLoading: boolean;\n isLiked: boolean;\n likesCount: number;\n commentsCount: number;\n isReplyOpen: boolean;\n toggleReplyOpen: () => void;\n replies: CommentReply[];\n editingReply: ActivityReply | null;\n cancelReplyEdit: () => void;\n updateReply: (\n replyId: string | number,\n body: string,\n attachments: { url: string; name: string; size?: number }[]\n ) => Promise<boolean>;\n hasMoreReplies: boolean;\n moreRepliesCount: number;\n showMoreReplies: () => void;\n toggleLike: () => Promise<void>;\n /** Resolves `false` when the post failed, so the composer can keep the draft. */\n postReply: (\n body: string,\n attachments?: { url: string; name: string; size?: number }[]\n ) => Promise<boolean>;\n};\n\n// Optimistic like / reply / reply-delete, reconciled once the host's refetch lands.\nexport const useActivityInteractions = ({\n activity,\n currentUser,\n onChanged,\n loadingState,\n}: UseActivityInteractionsOptions): UseActivityInteractionsResult => {\n // Read through a ref so an inline callback doesn't invalidate the memoized replies.\n const onChangedRef = useRef(onChanged);\n onChangedRef.current = onChanged;\n const notifyChanged = useCallback(() => onChangedRef.current?.(), []);\n\n const [localIsLoading, setLocalIsLoading] = useState(false);\n const isLoading = loadingState ? loadingState.isLoading : localIsLoading;\n const setIsLoading = loadingState ? loadingState.setIsLoading : setLocalIsLoading;\n\n // Reopen a reply left unsent when the card last unmounted, so the restored draft is visible.\n const replyDraftKey =\n activity.id !== undefined ? getActivityReplyDraftKey(activity.id, currentUser?.id) : undefined;\n const [isReplyOpen, setIsReplyOpen] = useState(\n () => !!replyDraftKey && hasReplyDraft(replyDraftKey)\n );\n // Re-derive for a reused card, so the open state tracks the activity it now shows.\n const [replyOpenKey, setReplyOpenKey] = useState(replyDraftKey);\n if (replyOpenKey !== replyDraftKey) {\n setReplyOpenKey(replyDraftKey);\n setIsReplyOpen(!!replyDraftKey && hasReplyDraft(replyDraftKey));\n }\n const [editingReplyId, setEditingReplyId] = useState<string | number | null>(null);\n const [visibleReplies, setVisibleReplies] = useState(INITIAL_VISIBLE_REPLIES);\n const [optimisticReplies, setOptimisticReplies] = useState<ActivityReply[]>([]);\n const [updatedReplies, setUpdatedReplies] = useState<Record<string, Partial<ActivityReply>>>({});\n // Read through a ref so deleting a reply doesn't have to re-create its memoized handler.\n const optimisticRepliesRef = useRef(optimisticReplies);\n optimisticRepliesRef.current = optimisticReplies;\n const [deletedReplyIds, setDeletedReplyIds] = useState<(string | number)[]>([]);\n const [optimisticLiked, setOptimisticLiked] = useState<boolean | null>(null);\n\n const serverReplies = useMemo(() => activity?.comments ?? [], [activity?.comments]);\n const replies = useMemo(() => {\n // Ids arrive as string or number, so compare them as strings.\n const serverIds = new Set(serverReplies.map(reply => String(reply.id)));\n const merged = [\n ...serverReplies.map(reply => ({ ...reply, ...updatedReplies[String(reply.id)] })),\n ...optimisticReplies.filter(reply => !serverIds.has(String(reply.id))),\n ];\n\n if (!deletedReplyIds.length) return merged;\n\n return merged.filter(reply => !deletedReplyIds.some(id => String(id) === String(reply.id)));\n }, [serverReplies, optimisticReplies, updatedReplies, deletedReplyIds]);\n\n useEffect(() => {\n if (!optimisticReplies.length) return;\n const serverIds = new Set(serverReplies.map(reply => String(reply.id)));\n const stillPending = optimisticReplies.filter(reply => !serverIds.has(String(reply.id)));\n if (stillPending.length !== optimisticReplies.length) setOptimisticReplies(stillPending);\n }, [serverReplies, optimisticReplies]);\n\n // Drop a deleted id once the refetch has removed it server-side.\n useEffect(() => {\n if (!deletedReplyIds.length) return;\n const serverIds = new Set(serverReplies.map(reply => String(reply.id)));\n const stillPresent = deletedReplyIds.filter(id => serverIds.has(String(id)));\n if (stillPresent.length !== deletedReplyIds.length) setDeletedReplyIds(stillPresent);\n }, [serverReplies, deletedReplyIds]);\n\n const serverLiked = (activity?.likes ?? []).some(\n like => Number(like.user?.id) === Number(currentUser?.id)\n );\n const isLiked = optimisticLiked ?? serverLiked;\n const serverLikesCount = activity?.likes_count ?? 0;\n // Clamp: a stale likes array (count 0 while already liked) would render < 0.\n const likesCount =\n optimisticLiked === null || optimisticLiked === serverLiked\n ? serverLikesCount\n : Math.max(0, serverLikesCount + (optimisticLiked ? 1 : -1));\n\n useEffect(() => {\n if (optimisticLiked !== null && optimisticLiked === serverLiked) setOptimisticLiked(null);\n }, [serverLiked, optimisticLiked]);\n\n const toggleLike = async () => {\n if (activity?.id == null) return;\n const next = !isLiked;\n setOptimisticLiked(next);\n setIsLoading(true);\n try {\n await toggleFeedItemLike(activity.id);\n notifyChanged();\n } catch (err) {\n setOptimisticLiked(null);\n showErrorNotification('Failed to update the like');\n } finally {\n setIsLoading(false);\n }\n };\n\n const postReply = async (\n body: string,\n attachments: { url: string; name: string; size?: number }[] = []\n ) => {\n if (activity?.id == null) return false;\n setIsLoading(true);\n try {\n const files = attachments.map(file => ({\n url: file.url,\n size: file.size,\n file_name: file.name,\n }));\n // `attachment` mirrors the first file for clients still reading the legacy field.\n const comment = {\n body,\n ...(files.length ? { attachments: files, attachment: files[0] } : {}),\n };\n const created = await postFeedItemComment(activity.id, { comment });\n if (created?.id) setOptimisticReplies(prev => [...prev, created]);\n notifyChanged();\n\n return true;\n } catch (err) {\n showErrorNotification('Failed to post the reply');\n\n return false;\n } finally {\n setIsLoading(false);\n }\n };\n\n const updateReply = useCallback(\n async (\n replyId: string | number,\n body: string,\n attachments: { url: string; name: string; size?: number }[]\n ) => {\n if (activity?.id == null) return false;\n setIsLoading(true);\n try {\n const files = attachments.map(file => ({\n url: file.url,\n size: file.size,\n file_name: file.name,\n }));\n const comment = {\n body,\n attachments: files,\n attachment: files[0] ?? null,\n };\n await patchFeedItemComment(activity.id, replyId, { comment });\n setUpdatedReplies(prev => ({\n ...prev,\n [String(replyId)]: {\n body,\n attachments: files,\n attachment: files[0] ?? null,\n },\n }));\n setEditingReplyId(null);\n notifyChanged();\n\n return true;\n } catch (err) {\n showErrorNotification('Failed to update the reply');\n\n return false;\n } finally {\n setIsLoading(false);\n }\n },\n [activity?.id, notifyChanged, setIsLoading]\n );\n\n const deleteReply = useCallback(\n async (replyId: string | number) => {\n if (activity?.id == null) return;\n setIsLoading(true);\n // A reply posted in this session is not in the server list yet, so hiding it by id alone\n // would be undone by the reconciliation above: drop the local copy as well.\n const pendingCopy = optimisticRepliesRef.current.find(\n reply => String(reply.id) === String(replyId)\n );\n setOptimisticReplies(prev => prev.filter(reply => String(reply.id) !== String(replyId)));\n setDeletedReplyIds(prev => [...prev, replyId]); // hide immediately; the refetch drops it a moment later\n try {\n await deleteFeedItemComment(activity.id, replyId);\n notifyChanged();\n showSuccessNotification('Reply was deleted');\n } catch (err) {\n setDeletedReplyIds(prev => prev.filter(id => String(id) !== String(replyId)));\n if (pendingCopy) setOptimisticReplies(prev => [...prev, pendingCopy]);\n showErrorNotification('Failed to delete the reply');\n } finally {\n setIsLoading(false);\n }\n },\n [activity?.id, notifyChanged, setIsLoading]\n );\n\n const mappedReplies = useMemo<CommentReply[]>(() => {\n if (!replies.length) return [];\n\n return replies\n .map(reply => ({ reply, sortAt: moment(reply.created_at).unix() }))\n .sort((a, b) => b.sortAt - a.sortAt)\n .slice(0, visibleReplies)\n .map(({ reply }) =>\n buildCommentReply(reply, {\n currentUserId: currentUser?.id,\n onDelete: deleteReply,\n onEdit: setEditingReplyId,\n })\n );\n }, [replies, visibleReplies, deleteReply, currentUser?.id]);\n\n return {\n isLoading,\n isLiked,\n likesCount,\n commentsCount: replies.length,\n isReplyOpen,\n toggleReplyOpen: () => setIsReplyOpen(open => !open),\n replies: mappedReplies,\n editingReply: replies.find(reply => String(reply.id) === String(editingReplyId)) ?? null,\n cancelReplyEdit: () => setEditingReplyId(null),\n hasMoreReplies: replies.length > visibleReplies,\n moreRepliesCount: Math.max(0, replies.length - visibleReplies),\n showMoreReplies: () => setVisibleReplies(prev => prev + MORE_REPLIES_INCREMENT),\n toggleLike,\n postReply,\n updateReply,\n };\n};\n"],"names":["useActivityInteractions","_ref","_activity$likes","_activity$likes_count","_replies$find","activity","currentUser","onChanged","loadingState","onChangedRef","useRef","current","notifyChanged","useCallback","_onChangedRef$current","call","useState","_useState2","_slicedToArray","_useState","localIsLoading","setLocalIsLoading","isLoading","setIsLoading","replyDraftKey","undefined","id","getActivityReplyDraftKey","_useState3","hasReplyDraft","_useState4","isReplyOpen","setIsReplyOpen","_useState6","_useState5","replyOpenKey","setReplyOpenKey","_useState8","_useState7","editingReplyId","setEditingReplyId","_useState10","_useState9","visibleReplies","setVisibleReplies","_useState12","_useState11","optimisticReplies","setOptimisticReplies","_useState13","_useState14","updatedReplies","setUpdatedReplies","optimisticRepliesRef","_useState16","_useState15","deletedReplyIds","setDeletedReplyIds","_useState18","_useState17","optimisticLiked","setOptimisticLiked","serverReplies","useMemo","_activity$comments","comments","replies","serverIds","Set","map","reply","String","merged","filter","has","length","some","useEffect","stillPending","stillPresent","serverLiked","likes","like","_like$user","Number","user","isLiked","serverLikesCount","likes_count","likesCount","Math","max","toggleLike","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","abrupt","toggleFeedItemLike","t0","showErrorNotification","finish","stop","apply","this","arguments","postReply","_ref3","body","attachments","files","comment","created","_args2","_context2","file","url","size","file_name","name","_objectSpread","attachment","postFeedItemComment","sent","_callee2","_x","updateReply","_ref4","replyId","_files$","_context3","patchFeedItemComment","_files$2","_callee3","_x2","_x3","_x4","deleteReply","_ref5","pendingCopy","_context4","find","deleteFeedItemComment","showSuccessNotification","_callee4","_x5","mappedReplies","sortAt","moment","created_at","unix","sort","a","b","slice","_ref6","buildCommentReply","currentUserId","onDelete","onEdit","commentsCount","toggleReplyOpen","open","editingReply","cancelReplyEdit","hasMoreReplies","moreRepliesCount","showMoreReplies"],"mappings":"21CAgBA,IA8CaA,EAA0B,SAK8BC,GAAA,IAAAC,EAAAC,EAAAC,EAJnEC,IAAAA,SACAC,IAAAA,YACAC,IAAAA,UACAC,IAAAA,aAGMC,EAAeC,EAAOH,GAC5BE,EAAaE,QAAUJ,EACvB,IAAMK,EAAgBC,GAAY,WAAA,IAAAC,EAAA,OAAM,QAANA,EAAML,EAAaE,eAAb,IAAAG,OAAA,EAAAA,EAAAC,KAAAN,EAAwB,GAAE,IAEtBO,EAAAA,GAAS,GAAMC,EAAAC,EAAAC,EAAA,GAApDC,EAAcH,EAAA,GAAEI,EAAiBJ,EAAA,GAClCK,EAAYd,EAAeA,EAAac,UAAYF,EACpDG,EAAef,EAAeA,EAAae,aAAeF,EAG1DG,OACYC,IAAhBpB,EAASqB,GAAmBC,EAAyBtB,EAASqB,GAAIpB,aAAW,EAAXA,EAAaoB,SAAMD,EACvFG,EAAsCZ,GACpC,WAAA,QAAQQ,GAAiBK,EAAcL,MACxCM,EAAAZ,EAAAU,EAAA,GAFMG,EAAWD,EAAA,GAAEE,EAAcF,EAAA,GAIMd,EAAAA,EAASQ,GAAcS,EAAAf,EAAAgB,EAAA,GAAxDC,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAChCE,IAAiBX,IACnBY,EAAgBZ,GAChBQ,IAAiBR,GAAiBK,EAAcL,KAElD,IAA4CR,EAAAA,EAAiC,MAAKqB,EAAAnB,EAAAoB,EAAA,GAA3EC,EAAcF,EAAA,GAAEG,EAAiBH,EAAA,GACIrB,EAAAA,EA1Ed,GA0E+CyB,EAAAvB,EAAAwB,EAAA,GAAtEC,EAAcF,EAAA,GAAEG,EAAiBH,EAAA,GACUzB,GAAAA,EAA0B,IAAG6B,GAAA3B,EAAA4B,GAAA,GAAxEC,GAAiBF,GAAA,GAAEG,GAAoBH,GAAA,GAC9CI,GAA4CjC,EAAiD,IAAGkC,GAAAhC,EAAA+B,GAAA,GAAzFE,GAAcD,GAAA,GAAEE,GAAiBF,GAAA,GAElCG,GAAuB3C,EAAOqC,IACpCM,GAAqB1C,QAAUoC,GAC/B,IAA8C/B,GAAAA,EAA8B,IAAGsC,GAAApC,EAAAqC,GAAA,GAAxEC,GAAeF,GAAA,GAAEG,GAAkBH,GAAA,GACItC,GAAAA,EAAyB,MAAK0C,GAAAxC,EAAAyC,GAAA,GAArEC,GAAeF,GAAA,GAAEG,GAAkBH,GAAA,GAEpCI,GAAgBC,GAAQ,WAAA,IAAAC,EAAA,eAAM3D,EAAAA,aAAQ,EAARA,EAAU4D,wBAAY,KAAI,CAAC5D,eAAAA,EAAU4D,WACnEC,GAAUH,GAAQ,WAEtB,IAAMI,EAAY,IAAIC,IAAIN,GAAcO,KAAI,SAAAC,GAAK,OAAIC,OAAOD,EAAM5C,GAAG,KAC/D8C,EACDV,GAAAA,OAAAA,EAAAA,GAAcO,KAAI,SAAAC,GAAK,OAAUA,EAAAA,EAAAA,CAAAA,EAAAA,GAAUnB,GAAeoB,OAAOD,EAAM5C,KAAO,KAC9EqB,EAAAA,GAAkB0B,QAAO,SAAAH,GAAK,OAAKH,EAAUO,IAAIH,OAAOD,EAAM5C,IAAI,MAGvE,OAAK8B,GAAgBmB,OAEdH,EAAOC,QAAO,SAAAH,GAAK,OAAKd,GAAgBoB,MAAK,SAAAlD,GAAE,OAAI6C,OAAO7C,KAAQ6C,OAAOD,EAAM5C,UAFlD8C,CAGrC,GAAE,CAACV,GAAef,GAAmBI,GAAgBK,KAEtDqB,GAAU,WACR,GAAK9B,GAAkB4B,OAAvB,CACA,IAAMR,EAAY,IAAIC,IAAIN,GAAcO,KAAI,SAAAC,GAAK,OAAIC,OAAOD,EAAM5C,GAAG,KAC/DoD,EAAe/B,GAAkB0B,QAAO,SAAAH,GAAK,OAAKH,EAAUO,IAAIH,OAAOD,EAAM5C,QAC/EoD,EAAaH,SAAW5B,GAAkB4B,QAAQ3B,GAAqB8B,EAH5C,CAIjC,GAAG,CAAChB,GAAef,KAGnB8B,GAAU,WACR,GAAKrB,GAAgBmB,OAArB,CACA,IAAMR,EAAY,IAAIC,IAAIN,GAAcO,KAAI,SAAAC,GAAK,OAAIC,OAAOD,EAAM5C,GAAG,KAC/DqD,EAAevB,GAAgBiB,QAAO,SAAA/C,GAAE,OAAIyC,EAAUO,IAAIH,OAAO7C,OACnEqD,EAAaJ,SAAWnB,GAAgBmB,QAAQlB,GAAmBsB,EAH1C,CAI/B,GAAG,CAACjB,GAAeN,KAEnB,IAAMwB,YAAc9E,EAACG,aAAAA,EAAAA,EAAU4E,qBAAS,IAAIL,MAC1C,SAAAM,GAAI,IAAAC,EAAA,OAAIC,OAAgB,QAATF,EAAAA,EAAKG,YAAI,IAAAF,OAAA,EAATA,EAAWzD,MAAQ0D,OAAO9E,eAAAA,EAAaoB,OAElD4D,GAAU1B,SAAAA,GAAmBoB,GAC7BO,GAAwC,QAArBlF,EAAAA,eAAAA,EAAUmF,mBAAW,IAAArF,EAAAA,EAAI,EAE5CsF,GACgB,OAApB7B,IAA4BA,KAAoBoB,GAC5CO,GACAG,KAAKC,IAAI,EAAGJ,IAAoB3B,GAAkB,GAAK,IAE7DiB,GAAU,WACgB,OAApBjB,IAA4BA,KAAoBoB,IAAanB,GAAmB,KACtF,GAAG,CAACmB,GAAapB,KAEjB,IAAMgC,GAAU,WAAA,IAAGC,EAAAC,EAAAC,EAAAC,MAAA,SAAAC,IAAA,OAAAF,EAAAG,MAAA,SAAAC,GAAA,OAAA,OAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAAA,GACG,OAAhBhG,eAAAA,EAAUqB,IAAU,CAAAyE,EAAAE,KAAA,EAAA,KAAA,CAAA,OAAAF,EAAAG,OAAA,UAAA,KAAA,EAGL,OADnBzC,IADcyB,IAEd/D,GAAa,GAAM4E,EAAAC,KAAA,EAAAD,EAAAE,KAAA,EAEXE,EAAmBlG,EAASqB,IAAG,KAAA,EACrCd,IAAgBuF,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAAK,GAAAL,EAAA,MAAA,GAEhBtC,GAAmB,MACnB4C,EAAsB,6BAA6B,KAAA,GAE/B,OAF+BN,EAAAC,KAAA,GAEnD7E,GAAa,GAAO4E,EAAAO,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAP,EAAAQ,OAAA,GAAAV,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KAEvB,KAAA,OAAA,WAde,OAAAJ,EAAAe,MAAAC,KAAAC,UAAA,EAAA,GAgBVC,GAAS,WAAA,IAAAC,EAAAlB,EAAAC,EAAAC,MAAG,WAChBiB,GAAY,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAR,UAAA,OAAAf,EAAAG,MAAA,SAAAqB,GAAA,OAAA,OAAAA,EAAAnB,KAAAmB,EAAAlB,MAAA,KAAA,EACoD,GAAhEa,iCAA8D,GAE1C,OAAhB7G,eAAAA,EAAUqB,IAAU,CAAA6F,EAAAlB,KAAA,EAAA,KAAA,CAAA,OAAAkB,EAAAjB,OAAA,UAAS,GAAK,KAAA,EAWkC,OAVxE/E,GAAa,GAAMgG,EAAAnB,KAAA,EAEXe,EAAQD,EAAY7C,KAAI,SAAAmD,GAAI,MAAK,CACrCC,IAAKD,EAAKC,IACVC,KAAMF,EAAKE,KACXC,UAAWH,EAAKI,KACjB,IAEKR,EAAOS,EAAA,CACXZ,KAAAA,GACIE,EAAMxC,OAAS,CAAEuC,YAAaC,EAAOW,WAAYX,EAAM,IAAO,CAAE,GAAAI,EAAAlB,KAAA,EAEhD0B,EAAoB1H,EAASqB,GAAI,CAAE0F,QAAAA,IAAU,KAAA,EAEnD,OADZC,OADEA,EAAOE,EAAAS,OACTX,EAAS3F,IAAIsB,IAAqB,SAAAoD,GAAI,MAAQA,GAAAA,OAAAA,EAAAA,IAAMiB,GAAO,IAC/DzG,IAAgB2G,EAAAjB,OAAA,UAET,GAAI,KAAA,GAEuC,OAFvCiB,EAAAnB,KAAA,GAAAmB,EAAAf,GAAAe,EAAA,MAAA,GAEXd,EAAsB,4BAA4Bc,EAAAjB,OAAA,UAE3C,GAAK,KAAA,GAEQ,OAFRiB,EAAAnB,KAAA,GAEZ7E,GAAa,GAAOgG,EAAAb,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAa,EAAAZ,OAAA,GAAAsB,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KAEvB,KAAA,OAAA,SA7BcC,GAAA,OAAAlB,EAAAJ,MAAAC,KAAAC,UAAA,EAAA,GA+BTqB,GAActH,EAAW,WAAA,IAAAuH,EAAAtC,EAAAC,EAAAC,MAC7B,SACEqC,EAAAA,EACApB,EACAC,GAA2D,IAAAoB,EAAAnB,EAAAC,EAAA,OAAArB,EAAAG,MAAA,SAAAqC,GAAA,OAAA,OAAAA,EAAAnC,KAAAmC,EAAAlC,MAAA,KAAA,EAAA,GAEvC,OAAhBhG,eAAAA,EAAUqB,IAAU,CAAA6G,EAAAlC,KAAA,EAAA,KAAA,CAAA,OAAAkC,EAAAjC,OAAA,UAAS,GAAK,KAAA,EAYnC,OAXH/E,GAAa,GAAMgH,EAAAnC,KAAA,EAEXe,EAAQD,EAAY7C,KAAI,SAAAmD,GAAI,MAAK,CACrCC,IAAKD,EAAKC,IACVC,KAAMF,EAAKE,KACXC,UAAWH,EAAKI,KACjB,IACKR,EAAU,CACdH,KAAAA,EACAC,YAAaC,EACbW,WAAwB,QAAZX,EAAAA,EAAM,UAAM,IAAAmB,EAAAA,EAAA,MACzBC,EAAAlC,KAAA,EACKmC,EAAqBnI,EAASqB,GAAI2G,EAAS,CAAEjB,QAAAA,IAAU,KAAA,EAU7C,OAThBhE,IAAkB,SAAAgD,GAAI,IAAAqC,EAAA,OAAAZ,EAAAA,EAAA,CAAA,EACjBzB,GACF7B,GAAAA,EAAAA,CAAAA,EAAAA,OAAO8D,GAAW,CACjBpB,KAAAA,EACAC,YAAaC,EACbW,WAAwB,QAAZX,EAAAA,EAAM,UAAM,IAAAsB,EAAAA,EAAA,OACzB,IAEHjG,EAAkB,MAClB5B,IAAgB2H,EAAAjC,OAAA,UAET,GAAI,KAAA,GAEyC,OAFzCiC,EAAAnC,KAAA,GAAAmC,EAAA/B,GAAA+B,EAAA,MAAA,GAEX9B,EAAsB,8BAA8B8B,EAAAjC,OAAA,UAE7C,GAAK,KAAA,GAEQ,OAFRiC,EAAAnC,KAAA,GAEZ7E,GAAa,GAAOgH,EAAA7B,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAA6B,EAAA5B,OAAA,GAAA+B,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KAEvB,KAAA,OAAA,SAAAC,EAAAC,EAAAC,GAAA,OAAAT,EAAAxB,MAAAC,KAAAC,UAAA,CAAA,CAvC4B,GAwC7B,CAACzG,aAAAA,EAAAA,EAAUqB,GAAId,EAAeW,IAG1BuH,GAAcjI,EAAW,WAAA,IAAAkI,EAAAjD,EAAAC,EAAAC,MAC7B,WAAOqC,GAAwB,IAAAW,EAAA,OAAAjD,EAAAG,MAAA,SAAA+C,GAAA,OAAA,OAAAA,EAAA7C,KAAA6C,EAAA5C,MAAA,KAAA,EAAA,GACT,OAAhBhG,eAAAA,EAAUqB,IAAU,CAAAuH,EAAA5C,KAAA,EAAA,KAAA,CAAA,OAAA4C,EAAA3C,OAAA,UAAA,KAAA,EAQwB,OAPhD/E,GAAa,GAGPyH,EAAc3F,GAAqB1C,QAAQuI,MAC/C,SAAA5E,GAAK,OAAIC,OAAOD,EAAM5C,MAAQ6C,OAAO8D,MAEvCrF,IAAqB,SAAAoD,GAAI,OAAIA,EAAK3B,QAAO,SAAAH,GAAK,OAAIC,OAAOD,EAAM5C,MAAQ6C,OAAO8D,SAC9E5E,IAAmB,SAAA2C,GAAI,MAAQA,GAAAA,OAAAA,EAAAA,IAAMiC,OAAWY,EAAA7C,KAAA,EAAA6C,EAAA5C,KAAA,EAExC8C,EAAsB9I,EAASqB,GAAI2G,GAAQ,KAAA,EACjDzH,IACAwI,EAAwB,qBAAqBH,EAAA5C,KAAA,GAAA,MAAA,KAAA,GAAA4C,EAAA7C,KAAA,GAAA6C,EAAAzC,GAAAyC,EAAA,MAAA,GAE7CxF,IAAmB,SAAA2C,GAAI,OAAIA,EAAK3B,QAAO,SAAA/C,GAAE,OAAI6C,OAAO7C,KAAQ6C,OAAO8D,SAC/DW,GAAahG,IAAqB,SAAAoD,GAAI,MAAQA,GAAAA,OAAAA,EAAAA,IAAM4C,GAAW,IACnEvC,EAAsB,8BAA8B,KAAA,GAEhC,OAFgCwC,EAAA7C,KAAA,GAEpD7E,GAAa,GAAO0H,EAAAvC,OAAA,IAAA,KAAA,GAAA,IAAA,MAAA,OAAAuC,EAAAtC,OAAA,GAAA0C,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,KAEvB,KAAA,OAAA,SAAAC,GAAA,OAAAP,EAAAnC,MAAAC,KAAAC,UAAA,CAAA,CAtB4B,GAuB7B,CAACzG,aAAAA,EAAAA,EAAUqB,GAAId,EAAeW,IAG1BgI,GAAgBxF,GAAwB,WAC5C,OAAKG,GAAQS,OAENT,GACJG,KAAI,SAAAC,GAAK,MAAK,CAAEA,MAAAA,EAAOkF,OAAQC,EAAOnF,EAAMoF,YAAYC,OAAS,IACjEC,MAAK,SAACC,EAAGC,GAAC,OAAKA,EAAEN,OAASK,EAAEL,UAC5BO,MAAM,EAAGpH,GACT0B,KAAI,SAAA2F,GAAA,IAAG1F,IAAAA,MAAK,OACX2F,EAAkB3F,EAAO,CACvB4F,cAAe5J,aAAAA,EAAAA,EAAaoB,GAC5ByI,SAAUrB,GACVsB,OAAQ5H,OAVc,EAa7B,GAAE,CAAC0B,GAASvB,EAAgBmG,GAAaxI,aAAAA,EAAAA,EAAaoB,KAEvD,MAAO,CACLJ,UAAAA,EACAgE,QAAAA,GACAG,WAAAA,GACA4E,cAAenG,GAAQS,OACvB5C,YAAAA,EACAuI,gBAAiB,WAAA,OAAMtI,GAAe,SAAAuI,GAAI,OAAKA,IAAK,EACpDrG,QAASqF,GACTiB,uBAActG,GAAQgF,MAAK,SAAA5E,GAAK,OAAIC,OAAOD,EAAM5C,MAAQ6C,OAAOhC,EAAe,mBAAK,KACpFkI,gBAAiB,WAAA,OAAMjI,EAAkB,KAAK,EAC9CkI,eAAgBxG,GAAQS,OAAShC,EACjCgI,iBAAkBjF,KAAKC,IAAI,EAAGzB,GAAQS,OAAShC,GAC/CiI,gBAAiB,WAAA,OAAMhI,GAAkB,SAAAwD,GAAI,OAAIA,EA9QtB,KA8QoD,EAC/ER,WAAAA,GACAmB,UAAAA,GACAoB,YAAAA,GAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFeedActivity.d.ts","sourceRoot":"","sources":["../../../src/components/FeedCard/useFeedActivity.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"useFeedActivity.d.ts","sourceRoot":"","sources":["../../../src/components/FeedCard/useFeedActivity.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAQjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAeF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,SAAS,CAAC;CACzB,CAAC;AAGF,eAAO,MAAM,eAAe,aAChB,iBAAiB,GAAG,SAAS,WAE9B,MAAM,KACd,mBAAmB,GAAG,IA+FxB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"@babel/runtime/helpers/defineProperty";import{getReplyAttachments as s}from"../CommentCard/buildCommentReply.js";import{CommentReplyInput as i}from"../CommentComposer/CommentReplyInput.js";import n from"../ConfirmationDialog.js";import{DeleteFourIcon as
|
|
1
|
+
import o from"@babel/runtime/helpers/defineProperty";import{getReplyAttachments as s}from"../CommentCard/buildCommentReply.js";import{CommentReplyInput as i}from"../CommentComposer/CommentReplyInput.js";import{getActivityReplyDraftKey as n}from"../CommentComposer/replyDrafts.js";import c from"../ConfirmationDialog.js";import{DeleteFourIcon as t}from"../../icons/iconParkIcons.js";import"../../icons/customIcons/icons/AddMessage.js";import"../../icons/customIcons/icons/DragOne.js";import"../../icons/customIcons/icons/Attention.js";import"../../icons/customIcons/icons/Collapse.js";import"../../icons/customIcons/icons/Dashboard.js";import"../../icons/customIcons/icons/Expand.js";import"../../icons/customIcons/icons/FolderClosed.js";import"../../icons/customIcons/icons/FolderClosedFilled.js";import"../../icons/customIcons/icons/FolderOpened.js";import"../../icons/customIcons/icons/GreaterOrEqual.js";import"../../icons/customIcons/icons/LessOrEqual.js";import"../../icons/customIcons/icons/Search.js";import"../../icons/customIcons/icons/SearchOne.js";import"../../icons/customIcons/icons/Wellhub.js";import"../../icons/customIcons/icons/MultiRuler.js";import"../../icons/customIcons/icons/Checkbox.js";import"../../icons/customIcons/icons/CheckboxChecked.js";import"../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../icons/customIcons/icons/Radio.js";import"../../icons/customIcons/icons/RadioChecked.js";import"../../icons/customIcons/icons/SimulFrac.js";import"../../icons/customIcons/icons/ZipperFrac.js";import"../../icons/customIcons/icons/CautionFilled.js";import"../../icons/customIcons/icons/InfoRounded.js";import"../../icons/customIcons/icons/FlameFilled.js";import"../../icons/customIcons/icons/MoreApp.js";import"../../icons/customIcons/icons/Pad.js";import"../../icons/customIcons/icons/DrilloutUnit.js";import"../../icons/customIcons/icons/FracFleet.js";import"../../icons/customIcons/icons/Global.js";import"../../icons/customIcons/icons/Program.js";import"../../icons/customIcons/icons/Rig.js";import"../../icons/customIcons/icons/Well.js";import"../../icons/customIcons/icons/Gap.js";import"../../icons/customIcons/icons/Pin.js";import"../../icons/customIcons/icons/PinOne.js";import"../../icons/customIcons/icons/PinOneCrossed.js";import"../../icons/customIcons/icons/CloseOneFilled.js";import"../../icons/customIcons/icons/AttentionFilled.js";import"../../icons/customIcons/icons/CheckOneFilled.js";import"../../icons/customIcons/icons/Archive.js";import"../../icons/customIcons/icons/ArchiveCancel.js";import"../../icons/customIcons/icons/Unarchive.js";import"../../icons/customIcons/icons/Archived.js";import"../../icons/customIcons/icons/InterventionUnit.js";import"../../icons/customIcons/icons/CloudDelete.js";import"../../icons/customIcons/icons/Lasso.js";import"../../icons/customIcons/icons/Radius.js";import"../../icons/customIcons/icons/ErrorOps.js";import"../../icons/customIcons/icons/DataTypeOps.js";import"../../icons/customIcons/icons/FalsePositiveOps.js";import"../../icons/customIcons/icons/CalibrationOps.js";import"../../icons/customIcons/icons/CriticalOps.js";import"../../icons/customIcons/icons/Company.js";import"../../icons/customIcons/icons/ArchiveOne.js";import"../../icons/customIcons/icons/ParseBotFusion.js";import"../../icons/customIcons/icons/Connect.js";import"../../icons/customIcons/icons/PuzzleOne.js";import"../../icons/customIcons/icons/Feed.js";import"../../icons/customIcons/icons/Prompt.js";import"../../icons/customIcons/icons/Companies.js";import"../../icons/customIcons/icons/ClipboardAi.js";import"../../icons/customIcons/icons/Key.js";import"../../icons/customIcons/icons/AtSignCrossed.js";import"../../icons/customIcons/icons/MappingManual.js";import"../../icons/customIcons/icons/Mapping.js";import"../../icons/customIcons/icons/Metrics.js";import"../../icons/customIcons/icons/Drops.js";import"../../icons/customIcons/icons/ClipboardSearch.js";import"../../icons/customIcons/icons/Template.js";import"../../icons/customIcons/icons/ClipboardMetrics.js";import"../../icons/customIcons/icons/ClipboardBuilder.js";import"../../icons/customIcons/icons/UnitConversion.js";import"../../icons/customIcons/icons/NPT.js";import"../../icons/customIcons/icons/GuidedFrac.js";import{useActivityInteractions as e}from"./useActivityInteractions.js";import{useDeleteFeedItem as r}from"./useDeleteFeedItem.js";import{jsx as m}from"react/jsx-runtime";function l(o,s){var i=Object.keys(o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(o);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),i.push.apply(i,n)}return i}function p(s){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?l(Object(n),!0).forEach((function(i){o(s,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(n,o))}))}return s}var u=c,a=function(o){var s,i;return"".concat(null!==(s=null==o?void 0:o.first_name)&&void 0!==s?s:""," ").concat(null!==(i=null==o?void 0:o.last_name)&&void 0!==i?i:"").trim()},d=function(o,c){var l,d,j,I,v,C=e({activity:null!==(l=null==o?void 0:o.data)&&void 0!==l?l:{},currentUser:null!==(d=null==o?void 0:o.currentUser)&&void 0!==d?d:{},onChanged:null==o?void 0:o.onChanged,loadingState:null==o?void 0:o.loadingState}),g=r({id:null==o||null===(j=o.data)||void 0===j?void 0:j.id,successMessage:"".concat(c[0].toUpperCase()).concat(c.slice(1)," was deleted"),errorMessage:"Failed to delete the ".concat(c),onDeleted:function(){var s,i;null==o||null===(s=o.onChanged)||void 0===s||s.call(o),null==o||null===(i=o.onDeleted)||void 0===i||i.call(o)}});if(!o)return null;var y=C.replies.map((function(o){var n,c;return C.editingReply&&String(o.id)===String(C.editingReply.id)?p(p({},o),{},{editForm:m(i,{onSubmit:function(s,i){var n,c;return C.updateReply(null!==(n=null===(c=C.editingReply)||void 0===c?void 0:c.id)&&void 0!==n?n:o.id,s,i)},onCancel:C.cancelReplyEdit,disabled:C.isLoading,initialBody:null!==(n=C.editingReply.body)&&void 0!==n?n:"",initialAttachments:s(C.editingReply),author:{name:a(C.editingReply.user),avatarUrl:null===(c=C.editingReply.user)||void 0===c?void 0:c.profile_photo}})}):o}));return{isDeleted:g.isDeleted,isLiked:C.isLiked,likesCount:C.likesCount,commentsCount:C.commentsCount,isReplyOpen:C.isReplyOpen,replies:y,hasMoreReplies:C.hasMoreReplies,moreRepliesCount:C.moreRepliesCount,onLike:C.toggleLike,onReplyToggle:C.toggleReplyOpen,onShowMoreReplies:C.showMoreReplies,replyInput:m(i,{onSubmit:C.postReply,disabled:C.isLoading,draftKey:void 0!==o.data.id?n(o.data.id,null===(I=o.currentUser)||void 0===I?void 0:I.id):void 0,author:{name:a(o.currentUser),avatarUrl:null===(v=o.currentUser)||void 0===v?void 0:v.profile_photo}}),menuItems:o.canDelete?[{label:"Delete",icon:m(t,{size:16}),onClick:g.openDeleteDialog}]:[],deleteDialog:m(u,{open:g.isDialogOpen,title:"Delete ".concat(c),text:"Are you sure you want to delete this ".concat(c,"?"),okText:"Delete",disableOk:g.isDeleting,handleOk:g.confirmDelete,handleClose:g.closeDeleteDialog})}};export{d as useFeedActivity};
|
|
2
2
|
//# sourceMappingURL=useFeedActivity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFeedActivity.js","sources":["../../../src/components/FeedCard/useFeedActivity.tsx"],"sourcesContent":["import { ComponentType, ReactNode } from 'react';\n\nimport { CommentMenuItem, CommentReply } from '../CommentCard/CommentCard.types';\nimport { getReplyAttachments } from '../CommentCard/buildCommentReply';\nimport { CommentReplyInput } from '../CommentComposer/CommentReplyInput';\nimport ConfirmationDialogJs from '../ConfirmationDialog';\nimport { DeleteFourIcon } from '../../icons';\n\nimport { useActivityInteractions } from './useActivityInteractions';\nimport type { InteractionActivity } from './useActivityInteractions';\nimport { useDeleteFeedItem } from './useDeleteFeedItem';\n\n/* eslint-disable camelcase -- mirrors the platform's snake_case user payload. */\nexport type FeedActivityUser = {\n id?: string | number;\n first_name?: string;\n last_name?: string;\n profile_photo?: string;\n};\n/* eslint-enable camelcase */\n\nexport type FeedActivityProps = {\n data: InteractionActivity;\n currentUser: FeedActivityUser;\n onChanged?: () => void;\n loadingState?: { isLoading: boolean; setIsLoading: (isLoading: boolean) => void };\n canDelete?: boolean;\n onDeleted?: () => void;\n};\n\nconst ConfirmationDialog = ConfirmationDialogJs as unknown as ComponentType<{\n open: boolean;\n title: string;\n text: string;\n okText: string;\n disableOk: boolean;\n handleOk: () => void;\n handleClose: () => void;\n}>;\n\nconst getUserName = (user?: FeedActivityUser) =>\n `${user?.first_name ?? ''} ${user?.last_name ?? ''}`.trim();\n\nexport type FeedActivityBinding = {\n isDeleted: boolean;\n isLiked?: boolean;\n likesCount?: number;\n commentsCount?: number;\n isReplyOpen?: boolean;\n replies?: CommentReply[];\n hasMoreReplies?: boolean;\n moreRepliesCount?: number;\n onLike?: () => void;\n onReplyToggle?: () => void;\n onShowMoreReplies?: () => void;\n replyInput?: ReactNode;\n menuItems: CommentMenuItem[];\n deleteDialog: ReactNode;\n};\n\n// Returns `null` without an `activity`, so the card falls back to its presentational props.\nexport const useFeedActivity = (\n activity: FeedActivityProps | undefined,\n // What the delete dialog and its notifications call the item: \"comment\", \"item\".\n subject: string\n): FeedActivityBinding | null => {\n const interactions = useActivityInteractions({\n activity: activity?.data ?? {},\n currentUser: activity?.currentUser ?? {},\n onChanged: activity?.onChanged,\n loadingState: activity?.loadingState,\n });\n\n const deletion = useDeleteFeedItem({\n id: activity?.data?.id,\n successMessage: `${subject[0].toUpperCase()}${subject.slice(1)} was deleted`,\n errorMessage: `Failed to delete the ${subject}`,\n onDeleted: () => {\n activity?.onChanged?.();\n activity?.onDeleted?.();\n },\n });\n\n if (!activity) return null;\n\n const replies = interactions.replies.map(reply =>\n interactions.editingReply && String(reply.id) === String(interactions.editingReply.id)\n ? {\n ...reply,\n editForm: (\n <CommentReplyInput\n onSubmit={(body, attachments) =>\n interactions.updateReply(\n interactions.editingReply?.id ?? reply.id,\n body,\n attachments\n )\n }\n onCancel={interactions.cancelReplyEdit}\n disabled={interactions.isLoading}\n initialBody={interactions.editingReply.body ?? ''}\n initialAttachments={getReplyAttachments(interactions.editingReply)}\n author={{\n name: getUserName(interactions.editingReply.user),\n avatarUrl: interactions.editingReply.user?.profile_photo,\n }}\n />\n ),\n }\n : reply\n );\n\n return {\n isDeleted: deletion.isDeleted,\n isLiked: interactions.isLiked,\n likesCount: interactions.likesCount,\n commentsCount: interactions.commentsCount,\n isReplyOpen: interactions.isReplyOpen,\n replies,\n hasMoreReplies: interactions.hasMoreReplies,\n moreRepliesCount: interactions.moreRepliesCount,\n onLike: interactions.toggleLike,\n onReplyToggle: interactions.toggleReplyOpen,\n onShowMoreReplies: interactions.showMoreReplies,\n replyInput: (\n <CommentReplyInput\n onSubmit={interactions.postReply}\n disabled={interactions.isLoading}\n author={{\n name: getUserName(activity.currentUser),\n avatarUrl: activity.currentUser?.profile_photo,\n }}\n />\n ),\n menuItems: activity.canDelete\n ? [\n {\n label: 'Delete',\n icon: <DeleteFourIcon size={16} />,\n onClick: deletion.openDeleteDialog,\n },\n ]\n : [],\n deleteDialog: (\n <ConfirmationDialog\n open={deletion.isDialogOpen}\n title={`Delete ${subject}`}\n text={`Are you sure you want to delete this ${subject}?`}\n okText=\"Delete\"\n disableOk={deletion.isDeleting}\n handleOk={deletion.confirmDelete}\n handleClose={deletion.closeDeleteDialog}\n />\n ),\n };\n};\n"],"names":["ConfirmationDialog","ConfirmationDialogJs","getUserName","user","_user$first_name","_user$last_name","concat","first_name","last_name","trim","useFeedActivity","activity","subject","_activity$data","_activity$currentUser","_activity$data2","_activity$currentUser2","interactions","useActivityInteractions","data","currentUser","onChanged","loadingState","deletion","useDeleteFeedItem","id","successMessage","toUpperCase","slice","errorMessage","onDeleted","_activity$onChanged","_activity$onDeleted","replies","map","reply","_interactions$editing3","_interactions$editing4","editingReply","String","editForm","_jsx","CommentReplyInput","onSubmit","body","attachments","_interactions$editing","_interactions$editing2","updateReply","onCancel","cancelReplyEdit","disabled","isLoading","initialBody","initialAttachments","getReplyAttachments","author","name","avatarUrl","profile_photo","isDeleted","isLiked","likesCount","commentsCount","isReplyOpen","hasMoreReplies","moreRepliesCount","onLike","toggleLike","onReplyToggle","toggleReplyOpen","onShowMoreReplies","showMoreReplies","replyInput","postReply","menuItems","canDelete","label","icon","DeleteFourIcon","size","onClick","openDeleteDialog","deleteDialog","open","isDialogOpen","title","text","okText","disableOk","isDeleting","handleOk","confirmDelete","handleClose","closeDeleteDialog"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useFeedActivity.js","sources":["../../../src/components/FeedCard/useFeedActivity.tsx"],"sourcesContent":["import { ComponentType, ReactNode } from 'react';\n\nimport { CommentMenuItem, CommentReply } from '../CommentCard/CommentCard.types';\nimport { getReplyAttachments } from '../CommentCard/buildCommentReply';\nimport { CommentReplyInput } from '../CommentComposer/CommentReplyInput';\nimport { getActivityReplyDraftKey } from '../CommentComposer/replyDrafts';\nimport ConfirmationDialogJs from '../ConfirmationDialog';\nimport { DeleteFourIcon } from '../../icons';\n\nimport { useActivityInteractions } from './useActivityInteractions';\nimport type { InteractionActivity } from './useActivityInteractions';\nimport { useDeleteFeedItem } from './useDeleteFeedItem';\n\n/* eslint-disable camelcase -- mirrors the platform's snake_case user payload. */\nexport type FeedActivityUser = {\n id?: string | number;\n first_name?: string;\n last_name?: string;\n profile_photo?: string;\n};\n/* eslint-enable camelcase */\n\nexport type FeedActivityProps = {\n data: InteractionActivity;\n currentUser: FeedActivityUser;\n onChanged?: () => void;\n loadingState?: { isLoading: boolean; setIsLoading: (isLoading: boolean) => void };\n canDelete?: boolean;\n onDeleted?: () => void;\n};\n\nconst ConfirmationDialog = ConfirmationDialogJs as unknown as ComponentType<{\n open: boolean;\n title: string;\n text: string;\n okText: string;\n disableOk: boolean;\n handleOk: () => void;\n handleClose: () => void;\n}>;\n\nconst getUserName = (user?: FeedActivityUser) =>\n `${user?.first_name ?? ''} ${user?.last_name ?? ''}`.trim();\n\nexport type FeedActivityBinding = {\n isDeleted: boolean;\n isLiked?: boolean;\n likesCount?: number;\n commentsCount?: number;\n isReplyOpen?: boolean;\n replies?: CommentReply[];\n hasMoreReplies?: boolean;\n moreRepliesCount?: number;\n onLike?: () => void;\n onReplyToggle?: () => void;\n onShowMoreReplies?: () => void;\n replyInput?: ReactNode;\n menuItems: CommentMenuItem[];\n deleteDialog: ReactNode;\n};\n\n// Returns `null` without an `activity`, so the card falls back to its presentational props.\nexport const useFeedActivity = (\n activity: FeedActivityProps | undefined,\n // What the delete dialog and its notifications call the item: \"comment\", \"item\".\n subject: string\n): FeedActivityBinding | null => {\n const interactions = useActivityInteractions({\n activity: activity?.data ?? {},\n currentUser: activity?.currentUser ?? {},\n onChanged: activity?.onChanged,\n loadingState: activity?.loadingState,\n });\n\n const deletion = useDeleteFeedItem({\n id: activity?.data?.id,\n successMessage: `${subject[0].toUpperCase()}${subject.slice(1)} was deleted`,\n errorMessage: `Failed to delete the ${subject}`,\n onDeleted: () => {\n activity?.onChanged?.();\n activity?.onDeleted?.();\n },\n });\n\n if (!activity) return null;\n\n const replies = interactions.replies.map(reply =>\n interactions.editingReply && String(reply.id) === String(interactions.editingReply.id)\n ? {\n ...reply,\n editForm: (\n <CommentReplyInput\n onSubmit={(body, attachments) =>\n interactions.updateReply(\n interactions.editingReply?.id ?? reply.id,\n body,\n attachments\n )\n }\n onCancel={interactions.cancelReplyEdit}\n disabled={interactions.isLoading}\n initialBody={interactions.editingReply.body ?? ''}\n initialAttachments={getReplyAttachments(interactions.editingReply)}\n author={{\n name: getUserName(interactions.editingReply.user),\n avatarUrl: interactions.editingReply.user?.profile_photo,\n }}\n />\n ),\n }\n : reply\n );\n\n return {\n isDeleted: deletion.isDeleted,\n isLiked: interactions.isLiked,\n likesCount: interactions.likesCount,\n commentsCount: interactions.commentsCount,\n isReplyOpen: interactions.isReplyOpen,\n replies,\n hasMoreReplies: interactions.hasMoreReplies,\n moreRepliesCount: interactions.moreRepliesCount,\n onLike: interactions.toggleLike,\n onReplyToggle: interactions.toggleReplyOpen,\n onShowMoreReplies: interactions.showMoreReplies,\n replyInput: (\n <CommentReplyInput\n onSubmit={interactions.postReply}\n disabled={interactions.isLoading}\n draftKey={\n activity.data.id !== undefined\n ? getActivityReplyDraftKey(activity.data.id, activity.currentUser?.id)\n : undefined\n }\n author={{\n name: getUserName(activity.currentUser),\n avatarUrl: activity.currentUser?.profile_photo,\n }}\n />\n ),\n menuItems: activity.canDelete\n ? [\n {\n label: 'Delete',\n icon: <DeleteFourIcon size={16} />,\n onClick: deletion.openDeleteDialog,\n },\n ]\n : [],\n deleteDialog: (\n <ConfirmationDialog\n open={deletion.isDialogOpen}\n title={`Delete ${subject}`}\n text={`Are you sure you want to delete this ${subject}?`}\n okText=\"Delete\"\n disableOk={deletion.isDeleting}\n handleOk={deletion.confirmDelete}\n handleClose={deletion.closeDeleteDialog}\n />\n ),\n };\n};\n"],"names":["ConfirmationDialog","ConfirmationDialogJs","getUserName","user","_user$first_name","_user$last_name","concat","first_name","last_name","trim","useFeedActivity","activity","subject","_activity$data","_activity$currentUser","_activity$data2","_activity$currentUser2","_activity$currentUser3","interactions","useActivityInteractions","data","currentUser","onChanged","loadingState","deletion","useDeleteFeedItem","id","successMessage","toUpperCase","slice","errorMessage","onDeleted","_activity$onChanged","_activity$onDeleted","replies","map","reply","_interactions$editing3","_interactions$editing4","editingReply","String","editForm","_jsx","CommentReplyInput","onSubmit","body","attachments","_interactions$editing","_interactions$editing2","updateReply","onCancel","cancelReplyEdit","disabled","isLoading","initialBody","initialAttachments","getReplyAttachments","author","name","avatarUrl","profile_photo","isDeleted","isLiked","likesCount","commentsCount","isReplyOpen","hasMoreReplies","moreRepliesCount","onLike","toggleLike","onReplyToggle","toggleReplyOpen","onShowMoreReplies","showMoreReplies","replyInput","postReply","draftKey","undefined","getActivityReplyDraftKey","menuItems","canDelete","label","icon","DeleteFourIcon","size","onClick","openDeleteDialog","deleteDialog","open","isDialogOpen","title","text","okText","disableOk","isDeleting","handleOk","confirmDelete","handleClose","closeDeleteDialog"],"mappings":"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"}
|
package/mcp-server/server.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@corva/ui",
|
|
3
|
-
"version": "3.79.0-
|
|
3
|
+
"version": "3.79.0-8",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"description": "Shared components/utils for Corva ui projects",
|
|
6
6
|
"repository": {
|
|
@@ -215,7 +215,6 @@
|
|
|
215
215
|
"slate": "0.66.5",
|
|
216
216
|
"slate-react": "0.66.7",
|
|
217
217
|
"socket.io-client": "^4.8.1",
|
|
218
|
-
"sql-parser": "0.5.0",
|
|
219
218
|
"tinygradient": "1.1.5",
|
|
220
219
|
"ts-morph": "^25.0.1",
|
|
221
220
|
"uuid": "3.4.0",
|