@corva/ui 3.79.0-7 → 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.
Files changed (27) hide show
  1. package/cjs-bundle/components/CommentComposer/CommentReplyInput.js +1 -1
  2. package/cjs-bundle/components/CommentComposer/CommentReplyInput.js.map +1 -1
  3. package/cjs-bundle/components/CommentComposer/replyDrafts.js +2 -0
  4. package/cjs-bundle/components/CommentComposer/replyDrafts.js.map +1 -0
  5. package/cjs-bundle/components/FeedCard/useActivityInteractions.js +1 -1
  6. package/cjs-bundle/components/FeedCard/useActivityInteractions.js.map +1 -1
  7. package/cjs-bundle/components/FeedCard/useFeedActivity.js +1 -1
  8. package/cjs-bundle/components/FeedCard/useFeedActivity.js.map +1 -1
  9. package/components/CommentComposer/CommentReplyInput.d.ts +3 -1
  10. package/components/CommentComposer/CommentReplyInput.d.ts.map +1 -1
  11. package/components/CommentComposer/CommentReplyInput.js +1 -1
  12. package/components/CommentComposer/CommentReplyInput.js.map +1 -1
  13. package/components/CommentComposer/__tests__/CommentReplyInput.draft.test.d.ts +2 -0
  14. package/components/CommentComposer/__tests__/CommentReplyInput.draft.test.d.ts.map +1 -0
  15. package/components/CommentComposer/replyDrafts.d.ts +12 -0
  16. package/components/CommentComposer/replyDrafts.d.ts.map +1 -0
  17. package/components/CommentComposer/replyDrafts.js +2 -0
  18. package/components/CommentComposer/replyDrafts.js.map +1 -0
  19. package/components/FeedCard/useActivityInteractions.d.ts.map +1 -1
  20. package/components/FeedCard/useActivityInteractions.js +1 -1
  21. package/components/FeedCard/useActivityInteractions.js.map +1 -1
  22. package/components/FeedCard/useFeedActivity.d.ts.map +1 -1
  23. package/components/FeedCard/useFeedActivity.js +1 -1
  24. package/components/FeedCard/useFeedActivity.js.map +1 -1
  25. package/mcp-server/server.mjs +1 -1
  26. package/package.json +1 -1
  27. package/tsconfig.tsbuildinfo +1 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/asyncToGenerator"),t=require("@babel/runtime/helpers/slicedToArray"),a=require("@babel/runtime/regenerator"),n=require("react"),r=require("../../componentsV2/Avatar/Avatar.js"),i=require("../AttachFileButton/AttachFileButton.js"),l=require("../CommentInputNext/CommentInputNext.js"),o=require("../FailedFileUploading.js"),u=require("./useAttachmentUpload.js"),s=require("react/jsx-runtime");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=c(e),m=c(t),p=c(a),h=[];exports.CommentReplyInput=function(e){var t=e.onSubmit,a=e.author,c=e.disabled,f=e.placeholder,v=void 0===f?"Reply":f,b=e.autoFocus,A=void 0===b||b,F=e.maxAttachments,x=e.initialBody,g=void 0===x?"":x,j=e.initialAttachments,q=void 0===j?h:j,y=e.onCancel,S=e.testId,C=n.useState(g),I=m.default(C,2),R=I[0],U=I[1],k=n.useState(q),B=m.default(k,2),w=B[0],D=B[1],L=n.useState(null),M=m.default(L,2),N=M[0],P=M[1],T=u.useAttachmentUpload({value:w,onChange:D,onError:P,maxFiles:F}),_=function(){var e=d.default(p.default.mark((function e(a){return p.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t(a,w);case 2:if(e.t0=e.sent,!1!==e.t0){e.next=5;break}return e.abrupt("return");case 5:U(""),D([]),T.clearAttachments();case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return s.jsx(l.CommentInput,{bare:!0,autoFocus:A,placeholder:v,value:R,onChange:U,canSubmit:!(!R.trim()&&!w.length||T.isUploading),onSubmit:_,onCancel:y,disabled:c,attachments:T.items,onAttachmentRemove:T.removeAttachment,onAttachmentRetry:T.handleRetry,onAttachmentReorder:T.reorderAttachments,onFilesDrop:T.addFiles,onImageLinkPaste:T.addLinkedImage,testId:S,attachmentSlot:N?s.jsx(o,{errorMessage:N}):void 0,toolbar:s.jsx(i.AttachFileButton,{inputRef:T.fileInputRef,onClick:T.openFileDialog,onFileSelect:T.handleFileSelect,multiple:!0,disabled:T.isFull,tooltip:T.isFull?"Up to ".concat(T.maxFiles," files can be attached"):"Attach file"}),leading:s.jsx(r.Avatar,{size:32,name:null==a?void 0:a.name,imageSrc:null==a?void 0:a.avatarUrl})})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/asyncToGenerator"),t=require("@babel/runtime/helpers/slicedToArray"),a=require("@babel/runtime/regenerator"),n=require("react"),r=require("../../componentsV2/Avatar/Avatar.js"),l=require("../AttachFileButton/AttachFileButton.js"),i=require("../CommentInputNext/CommentInputNext.js"),o=require("../FailedFileUploading.js"),u=require("./replyDrafts.js"),s=require("./useAttachmentUpload.js"),c=require("react/jsx-runtime");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=d(e),f=d(t),p=d(a),v=[];exports.CommentReplyInput=function(e){var t=e.onSubmit,a=e.author,d=e.disabled,h=e.placeholder,b=void 0===h?"Reply":h,y=e.autoFocus,A=void 0===y||y,F=e.maxAttachments,g=e.initialBody,x=void 0===g?"":g,R=e.initialAttachments,j=void 0===R?v:R,q=e.onCancel,S=e.draftKey,C=e.testId,D=n.useState((function(){var e,t;return S&&null!==(e=null===(t=u.getReplyDraft(S))||void 0===t?void 0:t.body)&&void 0!==e?e:x})),I=f.default(D,2),U=I[0],k=I[1],B=n.useState((function(){var e,t;return S&&null!==(e=null===(t=u.getReplyDraft(S))||void 0===t?void 0:t.attachments)&&void 0!==e?e:j})),w=f.default(B,2),E=w[0],L=w[1],M=n.useState(null),N=f.default(M,2),P=N[0],T=N[1],_=n.useState(S),z=f.default(_,2),G=z[0],K=z[1];if(G!==S){var O,V,H=S?u.getReplyDraft(S):void 0;K(S),k(null!==(O=null==H?void 0:H.body)&&void 0!==O?O:x),L(null!==(V=null==H?void 0:H.attachments)&&void 0!==V?V:j),T(null)}var J=s.useAttachmentUpload({value:E,onChange:L,onError:T,maxFiles:F});n.useEffect((function(){S&&u.saveReplyDraft(S,{body:U,attachments:E})}),[S,U,E]);var Q=function(){var e=m.default(p.default.mark((function e(a){return p.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t(a,E);case 2:if(e.t0=e.sent,!1!==e.t0){e.next=5;break}return e.abrupt("return");case 5:S&&u.clearReplyDraft(S),k(""),L([]),J.clearAttachments();case 9:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return c.jsx(i.CommentInput,{bare:!0,autoFocus:A,placeholder:b,value:U,onChange:k,canSubmit:!(!U.trim()&&!E.length||J.isUploading),onSubmit:Q,onCancel:q&&function(){S&&u.clearReplyDraft(S),q()},disabled:d,attachments:J.items,onAttachmentRemove:J.removeAttachment,onAttachmentRetry:J.handleRetry,onAttachmentReorder:J.reorderAttachments,onFilesDrop:J.addFiles,onImageLinkPaste:J.addLinkedImage,testId:C,attachmentSlot:P?c.jsx(o,{errorMessage:P}):void 0,toolbar:c.jsx(l.AttachFileButton,{inputRef:J.fileInputRef,onClick:J.openFileDialog,onFileSelect:J.handleFileSelect,multiple:!0,disabled:J.isFull,tooltip:J.isFull?"Up to ".concat(J.maxFiles," files can be attached"):"Attach file"}),leading:c.jsx(r.Avatar,{size:32,name:null==a?void 0:a.name,imageSrc:null==a?void 0:a.avatarUrl})})};
2
2
  //# sourceMappingURL=CommentReplyInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentReplyInput.js","sources":["../../../../src/components/CommentComposer/CommentReplyInput.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Avatar } from '../../componentsV2/Avatar';\nimport { AttachFileButton } from '../AttachFileButton';\nimport { CommentInput } from '../CommentInputNext/CommentInputNext';\nimport FailedFileUploading from '../FailedFileUploading';\n\nimport { useAttachmentUpload, UploadedAttachment } from './useAttachmentUpload';\n\nconst EMPTY_ATTACHMENTS: UploadedAttachment[] = [];\n\nexport type CommentReplyInputProps = {\n /** Resolving to `false` keeps the draft, so a failed post can be retried. */\n onSubmit: (\n body: string,\n attachments: UploadedAttachment[]\n ) => void | boolean | Promise<void | boolean>;\n author?: { name?: string; avatarUrl?: string };\n disabled?: boolean;\n placeholder?: string;\n autoFocus?: boolean;\n maxAttachments?: number;\n initialBody?: string;\n initialAttachments?: UploadedAttachment[];\n onCancel?: () => void;\n testId?: string;\n};\n\nexport const CommentReplyInput = ({\n onSubmit,\n author,\n disabled,\n placeholder = 'Reply',\n autoFocus = true,\n maxAttachments,\n initialBody = '',\n initialAttachments = EMPTY_ATTACHMENTS,\n onCancel,\n testId,\n}: CommentReplyInputProps) => {\n const [body, setBody] = useState(initialBody);\n const [attachments, setAttachments] = useState<UploadedAttachment[]>(initialAttachments);\n const [attachmentError, setAttachmentError] = useState<string | null>(null);\n\n const upload = useAttachmentUpload({\n value: attachments,\n onChange: setAttachments,\n onError: setAttachmentError,\n maxFiles: maxAttachments,\n });\n\n const handleSubmit = async (value: string) => {\n if ((await onSubmit(value, attachments)) === false) return;\n\n setBody('');\n setAttachments([]);\n upload.clearAttachments();\n };\n\n return (\n <CommentInput\n bare\n autoFocus={autoFocus}\n placeholder={placeholder}\n value={body}\n onChange={setBody}\n // An attachment only lands once S3 confirms, so posting mid-upload would drop it.\n canSubmit={(!!body.trim() || !!attachments.length) && !upload.isUploading}\n onSubmit={handleSubmit}\n onCancel={onCancel}\n disabled={disabled}\n attachments={upload.items}\n onAttachmentRemove={upload.removeAttachment}\n onAttachmentRetry={upload.handleRetry}\n onAttachmentReorder={upload.reorderAttachments}\n onFilesDrop={upload.addFiles}\n onImageLinkPaste={upload.addLinkedImage}\n testId={testId}\n attachmentSlot={\n attachmentError ? <FailedFileUploading errorMessage={attachmentError} /> : undefined\n }\n toolbar={\n <AttachFileButton\n inputRef={upload.fileInputRef}\n onClick={upload.openFileDialog}\n onFileSelect={upload.handleFileSelect}\n multiple\n disabled={upload.isFull}\n tooltip={upload.isFull ? `Up to ${upload.maxFiles} files can be attached` : 'Attach file'}\n />\n }\n leading={<Avatar size={32} name={author?.name} imageSrc={author?.avatarUrl} />}\n />\n );\n};\n"],"names":["EMPTY_ATTACHMENTS","_ref","onSubmit","author","disabled","_ref$placeholder","placeholder","_ref$autoFocus","autoFocus","maxAttachments","_ref$initialBody","initialBody","_ref$initialAttachmen","initialAttachments","onCancel","testId","useState","_useState2","_slicedToArray","_useState","body","setBody","_useState4","_useState3","attachments","setAttachments","_useState6","_useState5","attachmentError","setAttachmentError","upload","useAttachmentUpload","value","onChange","onError","maxFiles","handleSubmit","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","wrap","_context","prev","next","t0","sent","abrupt","clearAttachments","stop","_callee","_x","apply","this","arguments","_jsx","CommentInput","bare","canSubmit","trim","length","isUploading","items","onAttachmentRemove","removeAttachment","onAttachmentRetry","handleRetry","onAttachmentReorder","reorderAttachments","onFilesDrop","addFiles","onImageLinkPaste","addLinkedImage","attachmentSlot","jsx","FailedFileUploading","errorMessage","undefined","toolbar","AttachFileButton","inputRef","fileInputRef","onClick","openFileDialog","onFileSelect","handleFileSelect","multiple","isFull","tooltip","leading","Avatar","size","name","imageSrc","avatarUrl"],"mappings":"klBASMA,EAA0C,6BAmBf,SAWHC,GAAA,IAV5BC,IAAAA,SACAC,IAAAA,OACAC,IAAAA,SAAQC,EAAAJ,EACRK,YAAAA,aAAc,QAAOD,EAAAE,EAAAN,EACrBO,UAAAA,cAAgBD,EAChBE,IAAAA,eAAcC,EAAAT,EACdU,YAAAA,aAAc,GAAED,EAAAE,EAAAX,EAChBY,mBAAAA,aAAqBb,EAAiBY,EACtCE,IAAAA,SACAC,IAAAA,OAEwBC,EAAAA,EAAQA,SAACL,GAAYM,EAAAC,EAAAA,QAAAC,EAAA,GAAtCC,EAAIH,EAAA,GAAEI,EAAOJ,EAAA,GACkBD,EAAAA,EAAQA,SAAuBH,GAAmBS,EAAAJ,EAAAA,QAAAK,EAAA,GAAjFC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GACYN,EAAAA,EAAQA,SAAgB,MAAKU,EAAAR,EAAAA,QAAAS,EAAA,GAApEC,EAAeF,EAAA,GAAEG,EAAkBH,EAAA,GAEpCI,EAASC,EAAAA,oBAAoB,CACjCC,MAAOR,EACPS,SAAUR,EACVS,QAASL,EACTM,SAAU1B,IAGN2B,EAAY,WAAA,IAAAC,EAAAC,EAAAA,QAAAC,EAAAA,QAAAC,MAAG,WAAOR,GAAa,OAAAO,UAAAE,MAAA,SAAAC,GAAA,OAAA,OAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAAA,OAAAF,EAAAE,KAAA,EAC5B1C,EAAS8B,EAAOR,GAAY,KAAA,EAAA,GAAAkB,EAAAG,GAAAH,EAAAI,MAAM,IAANJ,EAAAG,GAAW,CAAAH,EAAAE,KAAA,EAAA,KAAA,CAAA,OAAAF,EAAAK,OAAA,UAAA,KAAA,EAElD1B,EAAQ,IACRI,EAAe,IACfK,EAAOkB,mBAAmB,KAAA,EAAA,IAAA,MAAA,OAAAN,EAAAO,OAAA,GAAAC,EAC3B,KAAA,OAAA,SANiBC,GAAA,OAAAd,EAAAe,MAAAC,KAAAC,UAAA,EAAA,GAQlB,OACEC,EAAAA,IAACC,EAAAA,aAAY,CACXC,MAAI,EACJjD,UAAWA,EACXF,YAAaA,EACb0B,MAAOZ,EACPa,SAAUZ,EAEVqC,aAActC,EAAKuC,SAAYnC,EAAYoC,QAAY9B,EAAO+B,aAC9D3D,SAAUkC,EACVtB,SAAUA,EACVV,SAAUA,EACVoB,YAAaM,EAAOgC,MACpBC,mBAAoBjC,EAAOkC,iBAC3BC,kBAAmBnC,EAAOoC,YAC1BC,oBAAqBrC,EAAOsC,mBAC5BC,YAAavC,EAAOwC,SACpBC,iBAAkBzC,EAAO0C,eACzBzD,OAAQA,EACR0D,eACE7C,EAAkB2B,EAAAmB,IAACC,EAAmB,CAACC,aAAchD,SAAsBiD,EAE7EC,QACEvB,MAACwB,mBAAgB,CACfC,SAAUlD,EAAOmD,aACjBC,QAASpD,EAAOqD,eAChBC,aAActD,EAAOuD,iBACrBC,UAAQ,EACRlF,SAAU0B,EAAOyD,OACjBC,QAAS1D,EAAOyD,uBAAkBzD,EAAOK,SAAmC,0BAAA,gBAGhFsD,QAASlC,MAACmC,SAAM,CAACC,KAAM,GAAIC,KAAMzF,aAAAA,EAAAA,EAAQyF,KAAMC,SAAU1F,aAAM,EAANA,EAAQ2F,aAGvE"}
1
+ {"version":3,"file":"CommentReplyInput.js","sources":["../../../../src/components/CommentComposer/CommentReplyInput.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { Avatar } from '../../componentsV2/Avatar';\nimport { AttachFileButton } from '../AttachFileButton';\nimport { CommentInput } from '../CommentInputNext/CommentInputNext';\nimport FailedFileUploading from '../FailedFileUploading';\n\nimport { clearReplyDraft, getReplyDraft, saveReplyDraft } from './replyDrafts';\nimport { useAttachmentUpload, UploadedAttachment } from './useAttachmentUpload';\n\nconst EMPTY_ATTACHMENTS: UploadedAttachment[] = [];\n\nexport type CommentReplyInputProps = {\n /** Resolving to `false` keeps the draft, so a failed post can be retried. */\n onSubmit: (\n body: string,\n attachments: UploadedAttachment[]\n ) => void | boolean | Promise<void | boolean>;\n author?: { name?: string; avatarUrl?: string };\n disabled?: boolean;\n placeholder?: string;\n autoFocus?: boolean;\n maxAttachments?: number;\n initialBody?: string;\n initialAttachments?: UploadedAttachment[];\n onCancel?: () => void;\n /** Keeps the unsent text and attachments across unmounts, e.g. a hover popover closing. */\n draftKey?: string;\n testId?: string;\n};\n\nexport const CommentReplyInput = ({\n onSubmit,\n author,\n disabled,\n placeholder = 'Reply',\n autoFocus = true,\n maxAttachments,\n initialBody = '',\n initialAttachments = EMPTY_ATTACHMENTS,\n onCancel,\n draftKey,\n testId,\n}: CommentReplyInputProps) => {\n const [body, setBody] = useState(() =>\n draftKey ? getReplyDraft(draftKey)?.body ?? initialBody : initialBody\n );\n const [attachments, setAttachments] = useState<UploadedAttachment[]>(() =>\n draftKey ? getReplyDraft(draftKey)?.attachments ?? initialAttachments : initialAttachments\n );\n const [attachmentError, setAttachmentError] = useState<string | null>(null);\n\n // A reused composer (new activity or user) must load that key's draft instead of carrying\n // the previous text over, or the save effect below would file it under the wrong key.\n const [loadedDraftKey, setLoadedDraftKey] = useState(draftKey);\n if (loadedDraftKey !== draftKey) {\n const draft = draftKey ? getReplyDraft(draftKey) : undefined;\n setLoadedDraftKey(draftKey);\n setBody(draft?.body ?? initialBody);\n setAttachments(draft?.attachments ?? initialAttachments);\n setAttachmentError(null);\n }\n\n const upload = useAttachmentUpload({\n value: attachments,\n onChange: setAttachments,\n onError: setAttachmentError,\n maxFiles: maxAttachments,\n });\n\n useEffect(() => {\n if (draftKey) saveReplyDraft(draftKey, { body, attachments });\n }, [draftKey, body, attachments]);\n\n const handleSubmit = async (value: string) => {\n if ((await onSubmit(value, attachments)) === false) return;\n\n if (draftKey) clearReplyDraft(draftKey);\n setBody('');\n setAttachments([]);\n upload.clearAttachments();\n };\n\n return (\n <CommentInput\n bare\n autoFocus={autoFocus}\n placeholder={placeholder}\n value={body}\n onChange={setBody}\n // An attachment only lands once S3 confirms, so posting mid-upload would drop it.\n canSubmit={(!!body.trim() || !!attachments.length) && !upload.isUploading}\n onSubmit={handleSubmit}\n onCancel={\n onCancel &&\n (() => {\n if (draftKey) clearReplyDraft(draftKey);\n onCancel();\n })\n }\n disabled={disabled}\n attachments={upload.items}\n onAttachmentRemove={upload.removeAttachment}\n onAttachmentRetry={upload.handleRetry}\n onAttachmentReorder={upload.reorderAttachments}\n onFilesDrop={upload.addFiles}\n onImageLinkPaste={upload.addLinkedImage}\n testId={testId}\n attachmentSlot={\n attachmentError ? <FailedFileUploading errorMessage={attachmentError} /> : undefined\n }\n toolbar={\n <AttachFileButton\n inputRef={upload.fileInputRef}\n onClick={upload.openFileDialog}\n onFileSelect={upload.handleFileSelect}\n multiple\n disabled={upload.isFull}\n tooltip={upload.isFull ? `Up to ${upload.maxFiles} files can be attached` : 'Attach file'}\n />\n }\n leading={<Avatar size={32} name={author?.name} imageSrc={author?.avatarUrl} />}\n />\n );\n};\n"],"names":["EMPTY_ATTACHMENTS","_ref","onSubmit","author","disabled","_ref$placeholder","placeholder","_ref$autoFocus","autoFocus","maxAttachments","_ref$initialBody","initialBody","_ref$initialAttachmen","initialAttachments","onCancel","draftKey","testId","_useState","useState","_getReplyDraft$body","_getReplyDraft","getReplyDraft","body","_useState2","_slicedToArray","setBody","_useState3","_getReplyDraft$attach","_getReplyDraft2","attachments","_useState4","setAttachments","_useState6","_useState5","attachmentError","setAttachmentError","_useState8","_useState7","loadedDraftKey","setLoadedDraftKey","_draft$body","_draft$attachments","draft","undefined","upload","useAttachmentUpload","value","onChange","onError","maxFiles","useEffect","saveReplyDraft","handleSubmit","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","wrap","_context","prev","next","t0","sent","abrupt","clearReplyDraft","clearAttachments","stop","_callee","_x","apply","this","arguments","_jsx","CommentInput","bare","canSubmit","trim","length","isUploading","items","onAttachmentRemove","removeAttachment","onAttachmentRetry","handleRetry","onAttachmentReorder","reorderAttachments","onFilesDrop","addFiles","onImageLinkPaste","addLinkedImage","attachmentSlot","jsx","FailedFileUploading","errorMessage","toolbar","AttachFileButton","inputRef","fileInputRef","onClick","openFileDialog","onFileSelect","handleFileSelect","multiple","isFull","tooltip","leading","Avatar","size","name","imageSrc","avatarUrl"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=new Map;exports.clearReplyDraft=function(e){t.delete(e)},exports.getActivityReplyDraftKey=function(t,e){return"activity-reply:".concat(null!=e?e:"anonymous",":").concat(t)},exports.getReplyDraft=function(e){return t.get(e)},exports.hasReplyDraft=function(e){return t.has(e)},exports.saveReplyDraft=function(e,r){r.body.trim()||r.attachments.length?t.set(e,r):t.delete(e)};
2
+ //# sourceMappingURL=replyDrafts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replyDrafts.js","sources":["../../../../src/components/CommentComposer/replyDrafts.ts"],"sourcesContent":["import type { UploadedAttachment } from './useAttachmentUpload';\n\nexport type ReplyDraft = {\n body: string;\n attachments: UploadedAttachment[];\n};\n\n// Module scope so a draft outlives the hover popover that unmounts its composer.\nconst drafts = new Map<string, ReplyDraft>();\n\nexport const getReplyDraft = (key: string): ReplyDraft | undefined => drafts.get(key);\n\nexport const hasReplyDraft = (key: string): boolean => drafts.has(key);\n\nexport const saveReplyDraft = (key: string, draft: ReplyDraft): void => {\n if (draft.body.trim() || draft.attachments.length) {\n drafts.set(key, draft);\n } else {\n drafts.delete(key);\n }\n};\n\nexport const clearReplyDraft = (key: string): void => {\n drafts.delete(key);\n};\n\nexport const clearAllReplyDrafts = (): void => {\n drafts.clear();\n};\n\n// Scoped by user: logout and impersonation switch users without a page reload.\nexport const getActivityReplyDraftKey = (\n activityId: string | number,\n userId: string | number | undefined\n): string => `activity-reply:${userId ?? 'anonymous'}:${activityId}`;\n"],"names":["drafts","Map","key","delete","activityId","userId","get","has","draft","body","trim","attachments","length","set"],"mappings":"oEAQA,IAAMA,EAAS,IAAIC,4BAcY,SAACC,GAC9BF,EAAOG,OAAOD,EAChB,mCAOwC,SACtCE,EACAC,GAAmC,MACNA,kBAAAA,OAAAA,QAAAA,EAAU,wBAAeD,EAAU,wBAxBrC,SAACF,GAAW,OAA6BF,EAAOM,IAAIJ,EAAI,wBAExD,SAACA,GAAW,OAAcF,EAAOO,IAAIL,EAAI,yBAExC,SAACA,EAAaM,GACtCA,EAAMC,KAAKC,QAAUF,EAAMG,YAAYC,OACzCZ,EAAOa,IAAIX,EAAKM,GAEhBR,EAAOG,OAAOD,EAElB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/asyncToGenerator"),t=require("@babel/runtime/helpers/defineProperty"),n=require("@babel/runtime/helpers/toConsumableArray"),r=require("@babel/runtime/helpers/slicedToArray"),u=require("@babel/runtime/regenerator"),i=require("react"),l=require("moment-timezone"),a=require("../CommentCard/buildCommentReply.js"),o=require("../../clients/jsonApi/index.js"),c=require("../../utils/notificationToasts.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=s(e),d=s(t),p=s(n),m=s(r),v=s(u),h=s(l);function b(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function g(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?b(Object(n),!0).forEach((function(t){d.default(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}exports.useActivityInteractions=function(e){var t,n,r,u=e.activity,l=e.currentUser,s=e.onChanged,b=e.loadingState,y=i.useRef(s);y.current=s;var S=i.useCallback((function(){var e;return null===(e=y.current)||void 0===e?void 0:e.call(y)}),[]),w=i.useState(!1),k=m.default(w,2),x=k[0],O=k[1],j=b?b.isLoading:x,C=b?b.setIsLoading:O,R=i.useState(!1),E=m.default(R,2),q=E[0],P=E[1],F=i.useState(null),M=m.default(F,2),A=M[0],I=M[1],N=i.useState(3),L=m.default(N,2),_=L[0],z=L[1],D=i.useState([]),T=m.default(D,2),U=T[0],G=T[1],B=i.useState({}),H=m.default(B,2),J=H[0],K=H[1],Q=i.useRef(U);Q.current=U;var V=i.useState([]),W=m.default(V,2),X=W[0],Y=W[1],Z=i.useState(null),$=m.default(Z,2),ee=$[0],te=$[1],ne=i.useMemo((function(){var e;return null!==(e=null==u?void 0:u.comments)&&void 0!==e?e:[]}),[null==u?void 0:u.comments]),re=i.useMemo((function(){var e=new Set(ne.map((function(e){return String(e.id)}))),t=[].concat(p.default(ne.map((function(e){return g(g({},e),J[String(e.id)])}))),p.default(U.filter((function(t){return!e.has(String(t.id))}))));return X.length?t.filter((function(e){return!X.some((function(t){return String(t)===String(e.id)}))})):t}),[ne,U,J,X]);i.useEffect((function(){if(U.length){var e=new Set(ne.map((function(e){return String(e.id)}))),t=U.filter((function(t){return!e.has(String(t.id))}));t.length!==U.length&&G(t)}}),[ne,U]),i.useEffect((function(){if(X.length){var e=new Set(ne.map((function(e){return String(e.id)}))),t=X.filter((function(t){return e.has(String(t))}));t.length!==X.length&&Y(t)}}),[ne,X]);var ue=(null!==(t=null==u?void 0:u.likes)&&void 0!==t?t:[]).some((function(e){var t;return Number(null===(t=e.user)||void 0===t?void 0:t.id)===Number(null==l?void 0:l.id)})),ie=null!=ee?ee:ue,le=null!==(n=null==u?void 0:u.likes_count)&&void 0!==n?n:0,ae=null===ee||ee===ue?le:Math.max(0,le+(ee?1:-1));i.useEffect((function(){null!==ee&&ee===ue&&te(null)}),[ue,ee]);var oe=function(){var e=f.default(v.default.mark((function e(){return v.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(null==u?void 0:u.id)){e.next=2;break}return e.abrupt("return");case 2:return te(!ie),C(!0),e.prev=5,e.next=8,o.toggleFeedItemLike(u.id);case 8:S(),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(5),te(null),c.showErrorNotification("Failed to update the like");case 15:return e.prev=15,C(!1),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[5,11,15,18]])})));return function(){return e.apply(this,arguments)}}(),ce=function(){var e=f.default(v.default.mark((function e(t){var n,r,i,l,a=arguments;return v.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=a.length>1&&void 0!==a[1]?a[1]:[],null!=(null==u?void 0:u.id)){e.next=3;break}return e.abrupt("return",!1);case 3:return C(!0),e.prev=4,r=n.map((function(e){return{url:e.url,size:e.size,file_name:e.name}})),i=g({body:t},r.length?{attachments:r,attachment:r[0]}:{}),e.next=9,o.postFeedItemComment(u.id,{comment:i});case 9:return null!=(l=e.sent)&&l.id&&G((function(e){return[].concat(p.default(e),[l])})),S(),e.abrupt("return",!0);case 15:return e.prev=15,e.t0=e.catch(4),c.showErrorNotification("Failed to post the reply"),e.abrupt("return",!1);case 19:return e.prev=19,C(!1),e.finish(19);case 22:case"end":return e.stop()}}),e,null,[[4,15,19,22]])})));return function(t){return e.apply(this,arguments)}}(),se=i.useCallback(function(){var e=f.default(v.default.mark((function e(t,n,r){var i,l,a;return v.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(null==u?void 0:u.id)){e.next=2;break}return e.abrupt("return",!1);case 2:return C(!0),e.prev=3,l=r.map((function(e){return{url:e.url,size:e.size,file_name:e.name}})),a={body:n,attachments:l,attachment:null!==(i=l[0])&&void 0!==i?i:null},e.next=8,o.patchFeedItemComment(u.id,t,{comment:a});case 8:return K((function(e){var r;return g(g({},e),{},d.default({},String(t),{body:n,attachments:l,attachment:null!==(r=l[0])&&void 0!==r?r:null}))})),I(null),S(),e.abrupt("return",!0);case 14:return e.prev=14,e.t0=e.catch(3),c.showErrorNotification("Failed to update the reply"),e.abrupt("return",!1);case 18:return e.prev=18,C(!1),e.finish(18);case 21:case"end":return e.stop()}}),e,null,[[3,14,18,21]])})));return function(t,n,r){return e.apply(this,arguments)}}(),[null==u?void 0:u.id,S,C]),fe=i.useCallback(function(){var e=f.default(v.default.mark((function e(t){var n;return v.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(null==u?void 0:u.id)){e.next=2;break}return e.abrupt("return");case 2:return C(!0),n=Q.current.find((function(e){return String(e.id)===String(t)})),G((function(e){return e.filter((function(e){return String(e.id)!==String(t)}))})),Y((function(e){return[].concat(p.default(e),[t])})),e.prev=6,e.next=9,o.deleteFeedItemComment(u.id,t);case 9:S(),c.showSuccessNotification("Reply was deleted"),e.next=18;break;case 13:e.prev=13,e.t0=e.catch(6),Y((function(e){return e.filter((function(e){return String(e)!==String(t)}))})),n&&G((function(e){return[].concat(p.default(e),[n])})),c.showErrorNotification("Failed to delete the reply");case 18:return e.prev=18,C(!1),e.finish(18);case 21:case"end":return e.stop()}}),e,null,[[6,13,18,21]])})));return function(t){return e.apply(this,arguments)}}(),[null==u?void 0:u.id,S,C]),de=i.useMemo((function(){return re.length?re.map((function(e){return{reply:e,sortAt:h.default(e.created_at).unix()}})).sort((function(e,t){return t.sortAt-e.sortAt})).slice(0,_).map((function(e){var t=e.reply;return a.buildCommentReply(t,{currentUserId:null==l?void 0:l.id,onDelete:fe,onEdit:I})})):[]}),[re,_,fe,null==l?void 0:l.id]);return{isLoading:j,isLiked:ie,likesCount:ae,commentsCount:re.length,isReplyOpen:q,toggleReplyOpen:function(){return P((function(e){return!e}))},replies:de,editingReply:null!==(r=re.find((function(e){return String(e.id)===String(A)})))&&void 0!==r?r:null,cancelReplyEdit:function(){return I(null)},hasMoreReplies:re.length>_,moreRepliesCount:Math.max(0,re.length-_),showMoreReplies:function(){return z((function(e){return e+10}))},toggleLike:oe,postReply:ce,updateReply:se}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/asyncToGenerator"),t=require("@babel/runtime/helpers/defineProperty"),n=require("@babel/runtime/helpers/toConsumableArray"),r=require("@babel/runtime/helpers/slicedToArray"),u=require("@babel/runtime/regenerator"),i=require("react"),a=require("moment-timezone"),l=require("../CommentComposer/replyDrafts.js"),o=require("../CommentCard/buildCommentReply.js"),c=require("../../clients/jsonApi/index.js"),s=require("../../utils/notificationToasts.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=f(e),p=f(t),v=f(n),m=f(r),h=f(u),g=f(a);function b(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?b(Object(n),!0).forEach((function(t){p.default(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}exports.useActivityInteractions=function(e){var t,n,r,u=e.activity,a=e.currentUser,f=e.onChanged,b=e.loadingState,S=i.useRef(f);S.current=f;var w=i.useCallback((function(){var e;return null===(e=S.current)||void 0===e?void 0:e.call(S)}),[]),k=i.useState(!1),x=m.default(k,2),O=x[0],j=x[1],C=b?b.isLoading:O,R=b?b.setIsLoading:j,q=void 0!==u.id?l.getActivityReplyDraftKey(u.id,null==a?void 0:a.id):void 0,E=i.useState((function(){return!!q&&l.hasReplyDraft(q)})),P=m.default(E,2),D=P[0],A=P[1],F=i.useState(q),M=m.default(F,2),I=M[0],N=M[1];I!==q&&(N(q),A(!!q&&l.hasReplyDraft(q)));var L=i.useState(null),_=m.default(L,2),z=_[0],T=_[1],U=i.useState(3),G=m.default(U,2),K=G[0],B=G[1],H=i.useState([]),J=m.default(H,2),Q=J[0],V=J[1],W=i.useState({}),X=m.default(W,2),Y=X[0],Z=X[1],$=i.useRef(Q);$.current=Q;var ee=i.useState([]),te=m.default(ee,2),ne=te[0],re=te[1],ue=i.useState(null),ie=m.default(ue,2),ae=ie[0],le=ie[1],oe=i.useMemo((function(){var e;return null!==(e=null==u?void 0:u.comments)&&void 0!==e?e:[]}),[null==u?void 0:u.comments]),ce=i.useMemo((function(){var e=new Set(oe.map((function(e){return String(e.id)}))),t=[].concat(v.default(oe.map((function(e){return y(y({},e),Y[String(e.id)])}))),v.default(Q.filter((function(t){return!e.has(String(t.id))}))));return ne.length?t.filter((function(e){return!ne.some((function(t){return String(t)===String(e.id)}))})):t}),[oe,Q,Y,ne]);i.useEffect((function(){if(Q.length){var e=new Set(oe.map((function(e){return String(e.id)}))),t=Q.filter((function(t){return!e.has(String(t.id))}));t.length!==Q.length&&V(t)}}),[oe,Q]),i.useEffect((function(){if(ne.length){var e=new Set(oe.map((function(e){return String(e.id)}))),t=ne.filter((function(t){return e.has(String(t))}));t.length!==ne.length&&re(t)}}),[oe,ne]);var se=(null!==(t=null==u?void 0:u.likes)&&void 0!==t?t:[]).some((function(e){var t;return Number(null===(t=e.user)||void 0===t?void 0:t.id)===Number(null==a?void 0:a.id)})),fe=null!=ae?ae:se,de=null!==(n=null==u?void 0:u.likes_count)&&void 0!==n?n:0,pe=null===ae||ae===se?de:Math.max(0,de+(ae?1:-1));i.useEffect((function(){null!==ae&&ae===se&&le(null)}),[se,ae]);var ve=function(){var e=d.default(h.default.mark((function e(){return h.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(null==u?void 0:u.id)){e.next=2;break}return e.abrupt("return");case 2:return le(!fe),R(!0),e.prev=5,e.next=8,c.toggleFeedItemLike(u.id);case 8:w(),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(5),le(null),s.showErrorNotification("Failed to update the like");case 15:return e.prev=15,R(!1),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[5,11,15,18]])})));return function(){return e.apply(this,arguments)}}(),me=function(){var e=d.default(h.default.mark((function e(t){var n,r,i,a,l=arguments;return h.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=l.length>1&&void 0!==l[1]?l[1]:[],null!=(null==u?void 0:u.id)){e.next=3;break}return e.abrupt("return",!1);case 3:return R(!0),e.prev=4,r=n.map((function(e){return{url:e.url,size:e.size,file_name:e.name}})),i=y({body:t},r.length?{attachments:r,attachment:r[0]}:{}),e.next=9,c.postFeedItemComment(u.id,{comment:i});case 9:return null!=(a=e.sent)&&a.id&&V((function(e){return[].concat(v.default(e),[a])})),w(),e.abrupt("return",!0);case 15:return e.prev=15,e.t0=e.catch(4),s.showErrorNotification("Failed to post the reply"),e.abrupt("return",!1);case 19:return e.prev=19,R(!1),e.finish(19);case 22:case"end":return e.stop()}}),e,null,[[4,15,19,22]])})));return function(t){return e.apply(this,arguments)}}(),he=i.useCallback(function(){var e=d.default(h.default.mark((function e(t,n,r){var i,a,l;return h.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(null==u?void 0:u.id)){e.next=2;break}return e.abrupt("return",!1);case 2:return R(!0),e.prev=3,a=r.map((function(e){return{url:e.url,size:e.size,file_name:e.name}})),l={body:n,attachments:a,attachment:null!==(i=a[0])&&void 0!==i?i:null},e.next=8,c.patchFeedItemComment(u.id,t,{comment:l});case 8:return Z((function(e){var r;return y(y({},e),{},p.default({},String(t),{body:n,attachments:a,attachment:null!==(r=a[0])&&void 0!==r?r:null}))})),T(null),w(),e.abrupt("return",!0);case 14:return e.prev=14,e.t0=e.catch(3),s.showErrorNotification("Failed to update the reply"),e.abrupt("return",!1);case 18:return e.prev=18,R(!1),e.finish(18);case 21:case"end":return e.stop()}}),e,null,[[3,14,18,21]])})));return function(t,n,r){return e.apply(this,arguments)}}(),[null==u?void 0:u.id,w,R]),ge=i.useCallback(function(){var e=d.default(h.default.mark((function e(t){var n;return h.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!=(null==u?void 0:u.id)){e.next=2;break}return e.abrupt("return");case 2:return R(!0),n=$.current.find((function(e){return String(e.id)===String(t)})),V((function(e){return e.filter((function(e){return String(e.id)!==String(t)}))})),re((function(e){return[].concat(v.default(e),[t])})),e.prev=6,e.next=9,c.deleteFeedItemComment(u.id,t);case 9:w(),s.showSuccessNotification("Reply was deleted"),e.next=18;break;case 13:e.prev=13,e.t0=e.catch(6),re((function(e){return e.filter((function(e){return String(e)!==String(t)}))})),n&&V((function(e){return[].concat(v.default(e),[n])})),s.showErrorNotification("Failed to delete the reply");case 18:return e.prev=18,R(!1),e.finish(18);case 21:case"end":return e.stop()}}),e,null,[[6,13,18,21]])})));return function(t){return e.apply(this,arguments)}}(),[null==u?void 0:u.id,w,R]),be=i.useMemo((function(){return ce.length?ce.map((function(e){return{reply:e,sortAt:g.default(e.created_at).unix()}})).sort((function(e,t){return t.sortAt-e.sortAt})).slice(0,K).map((function(e){var t=e.reply;return o.buildCommentReply(t,{currentUserId:null==a?void 0:a.id,onDelete:ge,onEdit:T})})):[]}),[ce,K,ge,null==a?void 0:a.id]);return{isLoading:C,isLiked:fe,likesCount:pe,commentsCount:ce.length,isReplyOpen:D,toggleReplyOpen:function(){return A((function(e){return!e}))},replies:be,editingReply:null!==(r=ce.find((function(e){return String(e.id)===String(z)})))&&void 0!==r?r:null,cancelReplyEdit:function(){return T(null)},hasMoreReplies:ce.length>K,moreRepliesCount:Math.max(0,ce.length-K),showMoreReplies:function(){return B((function(e){return e+10}))},toggleLike:ve,postReply:me,updateReply:he}};
2
2
  //# sourceMappingURL=useActivityInteractions.js.map
@@ -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":["_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":["_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":"wwCA8DuC,SAK8BA,GAAA,IAAAC,EAAAC,EAAAC,EAJnEC,IAAAA,SACAC,IAAAA,YACAC,IAAAA,UACAC,IAAAA,aAGMC,EAAeC,SAAOH,GAC5BE,EAAaE,QAAUJ,EACvB,IAAMK,EAAgBC,EAAAA,aAAY,WAAA,IAAAC,EAAA,OAAM,QAANA,EAAML,EAAaE,eAAb,IAAAG,OAAA,EAAAA,EAAAC,KAAAN,EAAwB,GAAE,IAEtBO,EAAAA,EAAQA,UAAC,GAAMC,EAAAC,EAAAA,QAAAC,EAAA,GAApDC,EAAcH,EAAA,GAAEI,EAAiBJ,EAAA,GAClCK,EAAYd,EAAeA,EAAac,UAAYF,EACpDG,EAAef,EAAeA,EAAae,aAAeF,EAG1DG,OACYC,IAAhBpB,EAASqB,GAAmBC,EAAwBA,yBAACtB,EAASqB,GAAIpB,aAAW,EAAXA,EAAaoB,SAAMD,EACvFG,EAAsCZ,EAAAA,UACpC,WAAA,QAAQQ,GAAiBK,EAAaA,cAACL,MACxCM,EAAAZ,EAAAA,QAAAU,EAAA,GAFMG,EAAWD,EAAA,GAAEE,EAAcF,EAAA,GAIMd,EAAAA,EAAQA,SAACQ,GAAcS,EAAAf,EAAAA,QAAAgB,EAAA,GAAxDC,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAChCE,IAAiBX,IACnBY,EAAgBZ,GAChBQ,IAAiBR,GAAiBK,EAAAA,cAAcL,KAElD,IAA4CR,EAAAA,EAAQA,SAAyB,MAAKqB,EAAAnB,EAAAA,QAAAoB,EAAA,GAA3EC,EAAcF,EAAA,GAAEG,EAAiBH,EAAA,GACIrB,EAAAA,EAAQA,SA1EtB,GA0E+CyB,EAAAvB,EAAAA,QAAAwB,EAAA,GAAtEC,EAAcF,EAAA,GAAEG,EAAiBH,EAAA,GACUzB,EAAAA,EAAQA,SAAkB,IAAG6B,EAAA3B,EAAAA,QAAA4B,EAAA,GAAxEC,EAAiBF,EAAA,GAAEG,EAAoBH,EAAA,GAC9CI,EAA4CjC,EAAQA,SAAyC,IAAGkC,EAAAhC,EAAAA,QAAA+B,EAAA,GAAzFE,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAElCG,EAAuB3C,SAAOqC,GACpCM,EAAqB1C,QAAUoC,EAC/B,IAA8C/B,GAAAA,EAAQA,SAAsB,IAAGsC,GAAApC,EAAAA,QAAAqC,GAAA,GAAxEC,GAAeF,GAAA,GAAEG,GAAkBH,GAAA,GACItC,GAAAA,EAAQA,SAAiB,MAAK0C,GAAAxC,EAAAA,QAAAyC,GAAA,GAArEC,GAAeF,GAAA,GAAEG,GAAkBH,GAAA,GAEpCI,GAAgBC,EAAAA,SAAQ,WAAA,IAAAC,EAAA,eAAM3D,EAAAA,aAAQ,EAARA,EAAU4D,wBAAY,KAAI,CAAC5D,eAAAA,EAAU4D,WACnEC,GAAUH,EAAAA,SAAQ,WAEtB,IAAMI,EAAY,IAAIC,IAAIN,GAAcO,KAAI,SAAAC,GAAK,OAAIC,OAAOD,EAAM5C,GAAG,KAC/D8C,EACDV,GAAAA,OAAAA,EAAAA,QAAAA,GAAcO,KAAI,SAAAC,GAAK,OAAUA,EAAAA,EAAAA,CAAAA,EAAAA,GAAUnB,EAAeoB,OAAOD,EAAM5C,KAAO,KAC9EqB,EAAAA,QAAAA,EAAkB0B,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,EAAmBI,EAAgBK,KAEtDqB,EAAAA,WAAU,WACR,GAAK9B,EAAkB4B,OAAvB,CACA,IAAMR,EAAY,IAAIC,IAAIN,GAAcO,KAAI,SAAAC,GAAK,OAAIC,OAAOD,EAAM5C,GAAG,KAC/DoD,EAAe/B,EAAkB0B,QAAO,SAAAH,GAAK,OAAKH,EAAUO,IAAIH,OAAOD,EAAM5C,QAC/EoD,EAAaH,SAAW5B,EAAkB4B,QAAQ3B,EAAqB8B,EAH5C,CAIjC,GAAG,CAAChB,GAAef,IAGnB8B,EAAAA,WAAU,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,EAAAA,WAAU,WACgB,OAApBjB,IAA4BA,KAAoBoB,IAAanB,GAAmB,KACtF,GAAG,CAACmB,GAAapB,KAEjB,IAAMgC,GAAU,WAAA,IAAGC,EAAAC,EAAA,QAAAC,EAAA,QAAAC,MAAA,SAAAC,IAAA,OAAAF,UAAAG,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,EAAkBA,mBAAClG,EAASqB,IAAG,KAAA,EACrCd,IAAgBuF,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAAK,GAAAL,EAAA,MAAA,GAEhBtC,GAAmB,MACnB4C,EAAqBA,sBAAC,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,EAAAA,QAAAC,EAAAA,QAAAC,MAAG,WAChBiB,GAAY,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAR,UAAA,OAAAf,UAAAG,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,EAAmBA,oBAAC1H,EAASqB,GAAI,CAAE0F,QAAAA,IAAU,KAAA,EAEnD,OADZC,OADEA,EAAOE,EAAAS,OACTX,EAAS3F,IAAIsB,GAAqB,SAAAoD,GAAI,MAAQA,GAAAA,OAAAA,EAAAA,QAAAA,IAAMiB,GAAO,IAC/DzG,IAAgB2G,EAAAjB,OAAA,UAET,GAAI,KAAA,GAEuC,OAFvCiB,EAAAnB,KAAA,GAAAmB,EAAAf,GAAAe,EAAA,MAAA,GAEXd,EAAqBA,sBAAC,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,EAAAA,YAAW,WAAA,IAAAuH,EAAAtC,EAAA,QAAAC,UAAAC,MAC7B,SACEqC,EAAAA,EACApB,EACAC,GAA2D,IAAAoB,EAAAnB,EAAAC,EAAA,OAAArB,UAAAG,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,uBAAqBnI,EAASqB,GAAI2G,EAAS,CAAEjB,QAAAA,IAAU,KAAA,EAU7C,OAThBhE,GAAkB,SAAAgD,GAAI,IAAAqC,EAAA,OAAAZ,EAAAA,EAAA,CAAA,EACjBzB,GACF7B,GAAAA,EAAAA,QAAAA,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,EAAqBA,sBAAC,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,EAAAA,YAAW,WAAA,IAAAkI,EAAAjD,EAAAA,QAAAC,EAAAA,QAAAC,MAC7B,WAAOqC,GAAwB,IAAAW,EAAA,OAAAjD,UAAAG,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,EAAqB1C,QAAQuI,MAC/C,SAAA5E,GAAK,OAAIC,OAAOD,EAAM5C,MAAQ6C,OAAO8D,MAEvCrF,GAAqB,SAAAoD,GAAI,OAAIA,EAAK3B,QAAO,SAAAH,GAAK,OAAIC,OAAOD,EAAM5C,MAAQ6C,OAAO8D,SAC9E5E,IAAmB,SAAA2C,GAAI,MAAQA,GAAAA,OAAAA,EAAAA,QAAAA,IAAMiC,OAAWY,EAAA7C,KAAA,EAAA6C,EAAA5C,KAAA,EAExC8C,wBAAsB9I,EAASqB,GAAI2G,GAAQ,KAAA,EACjDzH,IACAwI,EAAuBA,wBAAC,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,GAAqB,SAAAoD,GAAI,MAAQA,GAAAA,OAAAA,EAAAA,QAAAA,IAAM4C,GAAW,IACnEvC,EAAqBA,sBAAC,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,EAAAA,SAAwB,WAC5C,OAAKG,GAAQS,OAENT,GACJG,KAAI,SAAAC,GAAK,MAAK,CAAEA,MAAAA,EAAOkF,OAAQC,EAAAA,QAAOnF,EAAMoF,YAAYC,OAAS,IACjEC,MAAK,SAACC,EAAGC,GAAC,OAAKA,EAAEN,OAASK,EAAEL,UAC5BO,MAAM,EAAGpH,GACT0B,KAAI,SAAA2F,GAAA,IAAG1F,IAAAA,MAAK,OACX2F,EAAAA,kBAAkB3F,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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),s=require("../CommentCard/buildCommentReply.js"),o=require("../CommentComposer/CommentReplyInput.js"),i=require("../ConfirmationDialog.js"),n=require("../../icons/iconParkIcons.js");require("../../icons/customIcons/icons/AddMessage.js"),require("../../icons/customIcons/icons/DragOne.js"),require("../../icons/customIcons/icons/Attention.js"),require("../../icons/customIcons/icons/Collapse.js"),require("../../icons/customIcons/icons/Dashboard.js"),require("../../icons/customIcons/icons/Expand.js"),require("../../icons/customIcons/icons/FolderClosed.js"),require("../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../icons/customIcons/icons/FolderOpened.js"),require("../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../icons/customIcons/icons/LessOrEqual.js"),require("../../icons/customIcons/icons/Search.js"),require("../../icons/customIcons/icons/SearchOne.js"),require("../../icons/customIcons/icons/Wellhub.js"),require("../../icons/customIcons/icons/MultiRuler.js"),require("../../icons/customIcons/icons/Checkbox.js"),require("../../icons/customIcons/icons/CheckboxChecked.js"),require("../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../icons/customIcons/icons/Radio.js"),require("../../icons/customIcons/icons/RadioChecked.js"),require("../../icons/customIcons/icons/SimulFrac.js"),require("../../icons/customIcons/icons/ZipperFrac.js"),require("../../icons/customIcons/icons/CautionFilled.js"),require("../../icons/customIcons/icons/InfoRounded.js"),require("../../icons/customIcons/icons/FlameFilled.js"),require("../../icons/customIcons/icons/MoreApp.js"),require("../../icons/customIcons/icons/Pad.js"),require("../../icons/customIcons/icons/DrilloutUnit.js"),require("../../icons/customIcons/icons/FracFleet.js"),require("../../icons/customIcons/icons/Global.js"),require("../../icons/customIcons/icons/Program.js"),require("../../icons/customIcons/icons/Rig.js"),require("../../icons/customIcons/icons/Well.js"),require("../../icons/customIcons/icons/Gap.js"),require("../../icons/customIcons/icons/Pin.js"),require("../../icons/customIcons/icons/PinOne.js"),require("../../icons/customIcons/icons/PinOneCrossed.js"),require("../../icons/customIcons/icons/CloseOneFilled.js"),require("../../icons/customIcons/icons/AttentionFilled.js"),require("../../icons/customIcons/icons/CheckOneFilled.js"),require("../../icons/customIcons/icons/Archive.js"),require("../../icons/customIcons/icons/ArchiveCancel.js"),require("../../icons/customIcons/icons/Unarchive.js"),require("../../icons/customIcons/icons/Archived.js"),require("../../icons/customIcons/icons/InterventionUnit.js"),require("../../icons/customIcons/icons/CloudDelete.js"),require("../../icons/customIcons/icons/Lasso.js"),require("../../icons/customIcons/icons/Radius.js"),require("../../icons/customIcons/icons/ErrorOps.js"),require("../../icons/customIcons/icons/DataTypeOps.js"),require("../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../icons/customIcons/icons/CalibrationOps.js"),require("../../icons/customIcons/icons/CriticalOps.js"),require("../../icons/customIcons/icons/Company.js"),require("../../icons/customIcons/icons/ArchiveOne.js"),require("../../icons/customIcons/icons/ParseBotFusion.js"),require("../../icons/customIcons/icons/Connect.js"),require("../../icons/customIcons/icons/PuzzleOne.js"),require("../../icons/customIcons/icons/Feed.js"),require("../../icons/customIcons/icons/Prompt.js"),require("../../icons/customIcons/icons/Companies.js"),require("../../icons/customIcons/icons/ClipboardAi.js"),require("../../icons/customIcons/icons/Key.js"),require("../../icons/customIcons/icons/AtSignCrossed.js"),require("../../icons/customIcons/icons/MappingManual.js"),require("../../icons/customIcons/icons/Mapping.js"),require("../../icons/customIcons/icons/Metrics.js"),require("../../icons/customIcons/icons/Drops.js"),require("../../icons/customIcons/icons/ClipboardSearch.js"),require("../../icons/customIcons/icons/Template.js"),require("../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../icons/customIcons/icons/UnitConversion.js"),require("../../icons/customIcons/icons/NPT.js"),require("../../icons/customIcons/icons/GuidedFrac.js");var c=require("./useActivityInteractions.js"),r=require("./useDeleteFeedItem.js"),t=require("react/jsx-runtime");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=u(e);function a(e,s){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),o.push.apply(o,i)}return o}function m(e){for(var s=1;s<arguments.length;s++){var o=null!=arguments[s]?arguments[s]:{};s%2?a(Object(o),!0).forEach((function(s){l.default(e,s,o[s])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(o,s))}))}return e}var d=i,j=function(e){var s,o;return"".concat(null!==(s=null==e?void 0:e.first_name)&&void 0!==s?s:""," ").concat(null!==(o=null==e?void 0:e.last_name)&&void 0!==o?o:"").trim()};exports.useFeedActivity=function(e,i){var u,l,a,p,I=c.useActivityInteractions({activity:null!==(u=null==e?void 0:e.data)&&void 0!==u?u:{},currentUser:null!==(l=null==e?void 0:e.currentUser)&&void 0!==l?l:{},onChanged:null==e?void 0:e.onChanged,loadingState:null==e?void 0:e.loadingState}),q=r.useDeleteFeedItem({id:null==e||null===(a=e.data)||void 0===a?void 0:a.id,successMessage:"".concat(i[0].toUpperCase()).concat(i.slice(1)," was deleted"),errorMessage:"Failed to delete the ".concat(i),onDeleted:function(){var s,o;null==e||null===(s=e.onChanged)||void 0===s||s.call(e),null==e||null===(o=e.onDeleted)||void 0===o||o.call(e)}});if(!e)return null;var v=I.replies.map((function(e){var i,n;return I.editingReply&&String(e.id)===String(I.editingReply.id)?m(m({},e),{},{editForm:t.jsx(o.CommentReplyInput,{onSubmit:function(s,o){var i,n;return I.updateReply(null!==(i=null===(n=I.editingReply)||void 0===n?void 0:n.id)&&void 0!==i?i:e.id,s,o)},onCancel:I.cancelReplyEdit,disabled:I.isLoading,initialBody:null!==(i=I.editingReply.body)&&void 0!==i?i:"",initialAttachments:s.getReplyAttachments(I.editingReply),author:{name:j(I.editingReply.user),avatarUrl:null===(n=I.editingReply.user)||void 0===n?void 0:n.profile_photo}})}):e}));return{isDeleted:q.isDeleted,isLiked:I.isLiked,likesCount:I.likesCount,commentsCount:I.commentsCount,isReplyOpen:I.isReplyOpen,replies:v,hasMoreReplies:I.hasMoreReplies,moreRepliesCount:I.moreRepliesCount,onLike:I.toggleLike,onReplyToggle:I.toggleReplyOpen,onShowMoreReplies:I.showMoreReplies,replyInput:t.jsx(o.CommentReplyInput,{onSubmit:I.postReply,disabled:I.isLoading,author:{name:j(e.currentUser),avatarUrl:null===(p=e.currentUser)||void 0===p?void 0:p.profile_photo}}),menuItems:e.canDelete?[{label:"Delete",icon:t.jsx(n.DeleteFourIcon,{size:16}),onClick:q.openDeleteDialog}]:[],deleteDialog:t.jsx(d,{open:q.isDialogOpen,title:"Delete ".concat(i),text:"Are you sure you want to delete this ".concat(i,"?"),okText:"Delete",disableOk:q.isDeleting,handleOk:q.confirmDelete,handleClose:q.closeDeleteDialog})}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),s=require("../CommentCard/buildCommentReply.js"),o=require("../CommentComposer/CommentReplyInput.js"),i=require("../CommentComposer/replyDrafts.js"),n=require("../ConfirmationDialog.js"),c=require("../../icons/iconParkIcons.js");require("../../icons/customIcons/icons/AddMessage.js"),require("../../icons/customIcons/icons/DragOne.js"),require("../../icons/customIcons/icons/Attention.js"),require("../../icons/customIcons/icons/Collapse.js"),require("../../icons/customIcons/icons/Dashboard.js"),require("../../icons/customIcons/icons/Expand.js"),require("../../icons/customIcons/icons/FolderClosed.js"),require("../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../icons/customIcons/icons/FolderOpened.js"),require("../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../icons/customIcons/icons/LessOrEqual.js"),require("../../icons/customIcons/icons/Search.js"),require("../../icons/customIcons/icons/SearchOne.js"),require("../../icons/customIcons/icons/Wellhub.js"),require("../../icons/customIcons/icons/MultiRuler.js"),require("../../icons/customIcons/icons/Checkbox.js"),require("../../icons/customIcons/icons/CheckboxChecked.js"),require("../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../icons/customIcons/icons/Radio.js"),require("../../icons/customIcons/icons/RadioChecked.js"),require("../../icons/customIcons/icons/SimulFrac.js"),require("../../icons/customIcons/icons/ZipperFrac.js"),require("../../icons/customIcons/icons/CautionFilled.js"),require("../../icons/customIcons/icons/InfoRounded.js"),require("../../icons/customIcons/icons/FlameFilled.js"),require("../../icons/customIcons/icons/MoreApp.js"),require("../../icons/customIcons/icons/Pad.js"),require("../../icons/customIcons/icons/DrilloutUnit.js"),require("../../icons/customIcons/icons/FracFleet.js"),require("../../icons/customIcons/icons/Global.js"),require("../../icons/customIcons/icons/Program.js"),require("../../icons/customIcons/icons/Rig.js"),require("../../icons/customIcons/icons/Well.js"),require("../../icons/customIcons/icons/Gap.js"),require("../../icons/customIcons/icons/Pin.js"),require("../../icons/customIcons/icons/PinOne.js"),require("../../icons/customIcons/icons/PinOneCrossed.js"),require("../../icons/customIcons/icons/CloseOneFilled.js"),require("../../icons/customIcons/icons/AttentionFilled.js"),require("../../icons/customIcons/icons/CheckOneFilled.js"),require("../../icons/customIcons/icons/Archive.js"),require("../../icons/customIcons/icons/ArchiveCancel.js"),require("../../icons/customIcons/icons/Unarchive.js"),require("../../icons/customIcons/icons/Archived.js"),require("../../icons/customIcons/icons/InterventionUnit.js"),require("../../icons/customIcons/icons/CloudDelete.js"),require("../../icons/customIcons/icons/Lasso.js"),require("../../icons/customIcons/icons/Radius.js"),require("../../icons/customIcons/icons/ErrorOps.js"),require("../../icons/customIcons/icons/DataTypeOps.js"),require("../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../icons/customIcons/icons/CalibrationOps.js"),require("../../icons/customIcons/icons/CriticalOps.js"),require("../../icons/customIcons/icons/Company.js"),require("../../icons/customIcons/icons/ArchiveOne.js"),require("../../icons/customIcons/icons/ParseBotFusion.js"),require("../../icons/customIcons/icons/Connect.js"),require("../../icons/customIcons/icons/PuzzleOne.js"),require("../../icons/customIcons/icons/Feed.js"),require("../../icons/customIcons/icons/Prompt.js"),require("../../icons/customIcons/icons/Companies.js"),require("../../icons/customIcons/icons/ClipboardAi.js"),require("../../icons/customIcons/icons/Key.js"),require("../../icons/customIcons/icons/AtSignCrossed.js"),require("../../icons/customIcons/icons/MappingManual.js"),require("../../icons/customIcons/icons/Mapping.js"),require("../../icons/customIcons/icons/Metrics.js"),require("../../icons/customIcons/icons/Drops.js"),require("../../icons/customIcons/icons/ClipboardSearch.js"),require("../../icons/customIcons/icons/Template.js"),require("../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../icons/customIcons/icons/UnitConversion.js"),require("../../icons/customIcons/icons/NPT.js"),require("../../icons/customIcons/icons/GuidedFrac.js");var r=require("./useActivityInteractions.js"),t=require("./useDeleteFeedItem.js"),u=require("react/jsx-runtime");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=l(e);function d(e,s){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),o.push.apply(o,i)}return o}function m(e){for(var s=1;s<arguments.length;s++){var o=null!=arguments[s]?arguments[s]:{};s%2?d(Object(o),!0).forEach((function(s){a.default(e,s,o[s])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):d(Object(o)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(o,s))}))}return e}var j=n,p=function(e){var s,o;return"".concat(null!==(s=null==e?void 0:e.first_name)&&void 0!==s?s:""," ").concat(null!==(o=null==e?void 0:e.last_name)&&void 0!==o?o:"").trim()};exports.useFeedActivity=function(e,n){var l,a,d,I,q,v=r.useActivityInteractions({activity:null!==(l=null==e?void 0:e.data)&&void 0!==l?l:{},currentUser:null!==(a=null==e?void 0:e.currentUser)&&void 0!==a?a:{},onChanged:null==e?void 0:e.onChanged,loadingState:null==e?void 0:e.loadingState}),y=t.useDeleteFeedItem({id:null==e||null===(d=e.data)||void 0===d?void 0:d.id,successMessage:"".concat(n[0].toUpperCase()).concat(n.slice(1)," was deleted"),errorMessage:"Failed to delete the ".concat(n),onDeleted:function(){var s,o;null==e||null===(s=e.onChanged)||void 0===s||s.call(e),null==e||null===(o=e.onDeleted)||void 0===o||o.call(e)}});if(!e)return null;var C=v.replies.map((function(e){var i,n;return v.editingReply&&String(e.id)===String(v.editingReply.id)?m(m({},e),{},{editForm:u.jsx(o.CommentReplyInput,{onSubmit:function(s,o){var i,n;return v.updateReply(null!==(i=null===(n=v.editingReply)||void 0===n?void 0:n.id)&&void 0!==i?i:e.id,s,o)},onCancel:v.cancelReplyEdit,disabled:v.isLoading,initialBody:null!==(i=v.editingReply.body)&&void 0!==i?i:"",initialAttachments:s.getReplyAttachments(v.editingReply),author:{name:p(v.editingReply.user),avatarUrl:null===(n=v.editingReply.user)||void 0===n?void 0:n.profile_photo}})}):e}));return{isDeleted:y.isDeleted,isLiked:v.isLiked,likesCount:v.likesCount,commentsCount:v.commentsCount,isReplyOpen:v.isReplyOpen,replies:C,hasMoreReplies:v.hasMoreReplies,moreRepliesCount:v.moreRepliesCount,onLike:v.toggleLike,onReplyToggle:v.toggleReplyOpen,onShowMoreReplies:v.showMoreReplies,replyInput:u.jsx(o.CommentReplyInput,{onSubmit:v.postReply,disabled:v.isLoading,draftKey:void 0!==e.data.id?i.getActivityReplyDraftKey(e.data.id,null===(I=e.currentUser)||void 0===I?void 0:I.id):void 0,author:{name:p(e.currentUser),avatarUrl:null===(q=e.currentUser)||void 0===q?void 0:q.profile_photo}}),menuItems:e.canDelete?[{label:"Delete",icon:u.jsx(c.DeleteFourIcon,{size:16}),onClick:y.openDeleteDialog}]:[],deleteDialog:u.jsx(j,{open:y.isDialogOpen,title:"Delete ".concat(n),text:"Are you sure you want to delete this ".concat(n,"?"),okText:"Delete",disableOk:y.isDeleting,handleOk:y.confirmDelete,handleClose:y.closeDeleteDialog})}};
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","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":"+jKA8BA,IAAMA,EAAqBC,EAUrBC,EAAc,SAACC,GAAuB,IAAAC,EAAAC,EAAA,MAC1C,GAAAC,OAAmB,QAAnBF,EAAGD,eAAAA,EAAMI,kBAAU,IAAAH,EAAAA,EAAI,GAAE,KAAAE,OAAuB,QAAvBD,EAAIF,eAAAA,EAAMK,iBAAa,IAAAH,EAAAA,EAAA,IAAKI,MAAM,0BAoB9B,SAC7BC,EAEAC,GAC+B,IAAAC,EAAAC,EAAAC,EAAAC,EACzBC,EAAeC,EAAAA,wBAAwB,CAC3CP,SAA4B,QAApBE,EAAEF,aAAQ,EAARA,EAAUQ,YAAQ,IAAAN,EAAAA,EAAA,CAAE,EAC9BO,YAAsC,QAA3BN,EAAEH,aAAQ,EAARA,EAAUS,mBAAe,IAAAN,EAAAA,EAAA,CAAE,EACxCO,UAAWV,aAAAA,EAAAA,EAAUU,UACrBC,aAAcX,aAAQ,EAARA,EAAUW,eAGpBC,EAAWC,EAAAA,kBAAkB,CACjCC,GAAId,SAAA,QAAQI,EAARJ,EAAUQ,YAAV,IAAAJ,OAAQ,EAARA,EAAgBU,GACpBC,eAAmBd,GAAAA,OAAAA,EAAQ,GAAGe,eAAapB,OAAGK,EAAQgB,MAAM,GAAgB,gBAC5EC,aAAY,wBAAAtB,OAA0BK,GACtCkB,UAAW,WAAM,IAAAC,EAAAC,EACfrB,SAAmB,QAAnBA,EAAAA,EAAUU,iBAAS,IAAAU,GAAnBA,EAAApB,KAAAA,GACAA,SAAmB,QAAnBA,EAAAA,EAAUmB,iBAAS,IAAAE,GAAnBA,EAAArB,KAAAA,EACF,IAGF,IAAKA,EAAU,OAAO,KAEtB,IAAMsB,EAAUhB,EAAagB,QAAQC,KAAI,SAAAC,GAAK,IAAAC,EAAAC,EAAA,OAC5CpB,EAAaqB,cAAgBC,OAAOJ,EAAMV,MAAQc,OAAOtB,EAAaqB,aAAab,WAE1EU,GAAK,GAAA,CACRK,SACEC,MAACC,oBAAiB,CAChBC,SAAU,SAACC,EAAMC,GAAW,IAAAC,EAAAC,EAAA,OAC1B9B,EAAa+B,YACkB,UAA7B,UAAA/B,EAAaqB,oBAAb,IAAAS,OAAA,EAAAA,EAA2BtB,UAAE,IAAAqB,EAAAA,EAAIX,EAAMV,GACvCmB,EACAC,EAEH,EACDI,SAAUhC,EAAaiC,gBACvBC,SAAUlC,EAAamC,UACvBC,sBAAapC,EAAaqB,aAAaM,oBAAQ,GAC/CU,mBAAoBC,EAAAA,oBAAoBtC,EAAaqB,cACrDkB,OAAQ,CACNC,KAAMtD,EAAYc,EAAaqB,aAAalC,MAC5CsD,oBAAWzC,EAAaqB,aAAalC,yBAA1BiC,EAAgCsB,mBAKnDxB,KAGN,MAAO,CACLyB,UAAWrC,EAASqC,UACpBC,QAAS5C,EAAa4C,QACtBC,WAAY7C,EAAa6C,WACzBC,cAAe9C,EAAa8C,cAC5BC,YAAa/C,EAAa+C,YAC1B/B,QAAAA,EACAgC,eAAgBhD,EAAagD,eAC7BC,iBAAkBjD,EAAaiD,iBAC/BC,OAAQlD,EAAamD,WACrBC,cAAepD,EAAaqD,gBAC5BC,kBAAmBtD,EAAauD,gBAChCC,WACEhC,MAACC,oBAAiB,CAChBC,SAAU1B,EAAayD,UACvBvB,SAAUlC,EAAamC,UACvBI,OAAQ,CACNC,KAAMtD,EAAYQ,EAASS,aAC3BsC,kBAAW/C,EAAAA,EAASS,gCAATJ,EAAsB2C,iBAIvCgB,UAAWhE,EAASiE,UAChB,CACE,CACEC,MAAO,SACPC,KAAMrC,MAACsC,iBAAc,CAACC,KAAM,KAC5BC,QAAS1D,EAAS2D,mBAGtB,GACJC,aACE1C,MAACxC,EAAkB,CACjBmF,KAAM7D,EAAS8D,aACfC,MAAK,UAAA/E,OAAYK,GACjB2E,KAAI,wCAAAhF,OAA0CK,EAAW,KACzD4E,OAAO,SACPC,UAAWlE,EAASmE,WACpBC,SAAUpE,EAASqE,cACnBC,YAAatE,EAASuE,oBAI9B"}
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","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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"}
@@ -13,7 +13,9 @@ export type CommentReplyInputProps = {
13
13
  initialBody?: string;
14
14
  initialAttachments?: UploadedAttachment[];
15
15
  onCancel?: () => void;
16
+ /** Keeps the unsent text and attachments across unmounts, e.g. a hover popover closing. */
17
+ draftKey?: string;
16
18
  testId?: string;
17
19
  };
18
- export declare const CommentReplyInput: ({ onSubmit, author, disabled, placeholder, autoFocus, maxAttachments, initialBody, initialAttachments, onCancel, testId, }: CommentReplyInputProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const CommentReplyInput: ({ onSubmit, author, disabled, placeholder, autoFocus, maxAttachments, initialBody, initialAttachments, onCancel, draftKey, testId, }: CommentReplyInputProps) => import("react/jsx-runtime").JSX.Element;
19
21
  //# sourceMappingURL=CommentReplyInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentReplyInput.d.ts","sourceRoot":"","sources":["../../../src/components/CommentComposer/CommentReplyInput.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAuB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhF,MAAM,MAAM,sBAAsB,GAAG;IACnC,6EAA6E;IAC7E,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,kBAAkB,EAAE,KAC9B,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,+HAW3B,sBAAsB,4CAuDxB,CAAC"}
1
+ {"version":3,"file":"CommentReplyInput.d.ts","sourceRoot":"","sources":["../../../src/components/CommentComposer/CommentReplyInput.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAuB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhF,MAAM,MAAM,sBAAsB,GAAG;IACnC,6EAA6E;IAC7E,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,kBAAkB,EAAE,KAC9B,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,yIAY3B,sBAAsB,4CAiFxB,CAAC"}
@@ -1,2 +1,2 @@
1
- import t from"@babel/runtime/helpers/asyncToGenerator";import e from"@babel/runtime/helpers/slicedToArray";import a from"@babel/runtime/regenerator";import{useState as n}from"react";import{Avatar as r}from"../../componentsV2/Avatar/Avatar.js";import{AttachFileButton as o}from"../AttachFileButton/AttachFileButton.js";import{CommentInput as i}from"../CommentInputNext/CommentInputNext.js";import l from"../FailedFileUploading.js";import{useAttachmentUpload as m}from"./useAttachmentUpload.js";import{jsx as c}from"react/jsx-runtime";var s=[],u=function(u){var d=u.onSubmit,p=u.author,h=u.disabled,f=u.placeholder,v=void 0===f?"Reply":f,b=u.autoFocus,A=void 0===b||b,F=u.maxAttachments,g=u.initialBody,x=void 0===g?"":g,y=u.initialAttachments,C=void 0===y?s:y,I=u.onCancel,R=u.testId,S=n(x),j=e(S,2),k=j[0],U=j[1],B=n(C),w=e(B,2),D=w[0],L=w[1],N=n(null),T=e(N,2),z=T[0],E=T[1],G=m({value:D,onChange:L,onError:E,maxFiles:F}),M=function(){var e=t(a.mark((function t(e){return a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,d(e,D);case 2:if(t.t0=t.sent,!1!==t.t0){t.next=5;break}return t.abrupt("return");case 5:U(""),L([]),G.clearAttachments();case 8:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}();return c(i,{bare:!0,autoFocus:A,placeholder:v,value:k,onChange:U,canSubmit:!(!k.trim()&&!D.length||G.isUploading),onSubmit:M,onCancel:I,disabled:h,attachments:G.items,onAttachmentRemove:G.removeAttachment,onAttachmentRetry:G.handleRetry,onAttachmentReorder:G.reorderAttachments,onFilesDrop:G.addFiles,onImageLinkPaste:G.addLinkedImage,testId:R,attachmentSlot:z?c(l,{errorMessage:z}):void 0,toolbar:c(o,{inputRef:G.fileInputRef,onClick:G.openFileDialog,onFileSelect:G.handleFileSelect,multiple:!0,disabled:G.isFull,tooltip:G.isFull?"Up to ".concat(G.maxFiles," files can be attached"):"Attach file"}),leading:c(r,{size:32,name:null==p?void 0:p.name,imageSrc:null==p?void 0:p.avatarUrl})})};export{u as CommentReplyInput};
1
+ import t from"@babel/runtime/helpers/asyncToGenerator";import e from"@babel/runtime/helpers/slicedToArray";import n from"@babel/runtime/regenerator";import{useState as o,useEffect as a}from"react";import{Avatar as r}from"../../componentsV2/Avatar/Avatar.js";import{AttachFileButton as i}from"../AttachFileButton/AttachFileButton.js";import{CommentInput as l}from"../CommentInputNext/CommentInputNext.js";import m from"../FailedFileUploading.js";import{getReplyDraft as u,saveReplyDraft as c,clearReplyDraft as s}from"./replyDrafts.js";import{useAttachmentUpload as d}from"./useAttachmentUpload.js";import{jsx as p}from"react/jsx-runtime";var v=[],f=function(f){var h=f.onSubmit,b=f.author,A=f.disabled,F=f.placeholder,g=void 0===F?"Reply":F,y=f.autoFocus,x=void 0===y||y,j=f.maxAttachments,C=f.initialBody,I=void 0===C?"":C,R=f.initialAttachments,S=void 0===R?v:R,k=f.onCancel,U=f.draftKey,B=f.testId,D=o((function(){var t,e;return U&&null!==(t=null===(e=u(U))||void 0===e?void 0:e.body)&&void 0!==t?t:I})),w=e(D,2),L=w[0],N=w[1],T=o((function(){var t,e;return U&&null!==(t=null===(e=u(U))||void 0===e?void 0:e.attachments)&&void 0!==t?t:S})),z=e(T,2),E=z[0],G=z[1],K=o(null),M=e(K,2),P=M[0],V=M[1],q=o(U),H=e(q,2),J=H[0],O=H[1];if(J!==U){var Q,W,X=U?u(U):void 0;O(U),N(null!==(Q=null==X?void 0:X.body)&&void 0!==Q?Q:I),G(null!==(W=null==X?void 0:X.attachments)&&void 0!==W?W:S),V(null)}var Y=d({value:E,onChange:G,onError:V,maxFiles:j});a((function(){U&&c(U,{body:L,attachments:E})}),[U,L,E]);var Z=function(){var e=t(n.mark((function t(e){return n.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,h(e,E);case 2:if(t.t0=t.sent,!1!==t.t0){t.next=5;break}return t.abrupt("return");case 5:U&&s(U),N(""),G([]),Y.clearAttachments();case 9:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}();return p(l,{bare:!0,autoFocus:x,placeholder:g,value:L,onChange:N,canSubmit:!(!L.trim()&&!E.length||Y.isUploading),onSubmit:Z,onCancel:k&&function(){U&&s(U),k()},disabled:A,attachments:Y.items,onAttachmentRemove:Y.removeAttachment,onAttachmentRetry:Y.handleRetry,onAttachmentReorder:Y.reorderAttachments,onFilesDrop:Y.addFiles,onImageLinkPaste:Y.addLinkedImage,testId:B,attachmentSlot:P?p(m,{errorMessage:P}):void 0,toolbar:p(i,{inputRef:Y.fileInputRef,onClick:Y.openFileDialog,onFileSelect:Y.handleFileSelect,multiple:!0,disabled:Y.isFull,tooltip:Y.isFull?"Up to ".concat(Y.maxFiles," files can be attached"):"Attach file"}),leading:p(r,{size:32,name:null==b?void 0:b.name,imageSrc:null==b?void 0:b.avatarUrl})})};export{f as CommentReplyInput};
2
2
  //# sourceMappingURL=CommentReplyInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentReplyInput.js","sources":["../../../src/components/CommentComposer/CommentReplyInput.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Avatar } from '../../componentsV2/Avatar';\nimport { AttachFileButton } from '../AttachFileButton';\nimport { CommentInput } from '../CommentInputNext/CommentInputNext';\nimport FailedFileUploading from '../FailedFileUploading';\n\nimport { useAttachmentUpload, UploadedAttachment } from './useAttachmentUpload';\n\nconst EMPTY_ATTACHMENTS: UploadedAttachment[] = [];\n\nexport type CommentReplyInputProps = {\n /** Resolving to `false` keeps the draft, so a failed post can be retried. */\n onSubmit: (\n body: string,\n attachments: UploadedAttachment[]\n ) => void | boolean | Promise<void | boolean>;\n author?: { name?: string; avatarUrl?: string };\n disabled?: boolean;\n placeholder?: string;\n autoFocus?: boolean;\n maxAttachments?: number;\n initialBody?: string;\n initialAttachments?: UploadedAttachment[];\n onCancel?: () => void;\n testId?: string;\n};\n\nexport const CommentReplyInput = ({\n onSubmit,\n author,\n disabled,\n placeholder = 'Reply',\n autoFocus = true,\n maxAttachments,\n initialBody = '',\n initialAttachments = EMPTY_ATTACHMENTS,\n onCancel,\n testId,\n}: CommentReplyInputProps) => {\n const [body, setBody] = useState(initialBody);\n const [attachments, setAttachments] = useState<UploadedAttachment[]>(initialAttachments);\n const [attachmentError, setAttachmentError] = useState<string | null>(null);\n\n const upload = useAttachmentUpload({\n value: attachments,\n onChange: setAttachments,\n onError: setAttachmentError,\n maxFiles: maxAttachments,\n });\n\n const handleSubmit = async (value: string) => {\n if ((await onSubmit(value, attachments)) === false) return;\n\n setBody('');\n setAttachments([]);\n upload.clearAttachments();\n };\n\n return (\n <CommentInput\n bare\n autoFocus={autoFocus}\n placeholder={placeholder}\n value={body}\n onChange={setBody}\n // An attachment only lands once S3 confirms, so posting mid-upload would drop it.\n canSubmit={(!!body.trim() || !!attachments.length) && !upload.isUploading}\n onSubmit={handleSubmit}\n onCancel={onCancel}\n disabled={disabled}\n attachments={upload.items}\n onAttachmentRemove={upload.removeAttachment}\n onAttachmentRetry={upload.handleRetry}\n onAttachmentReorder={upload.reorderAttachments}\n onFilesDrop={upload.addFiles}\n onImageLinkPaste={upload.addLinkedImage}\n testId={testId}\n attachmentSlot={\n attachmentError ? <FailedFileUploading errorMessage={attachmentError} /> : undefined\n }\n toolbar={\n <AttachFileButton\n inputRef={upload.fileInputRef}\n onClick={upload.openFileDialog}\n onFileSelect={upload.handleFileSelect}\n multiple\n disabled={upload.isFull}\n tooltip={upload.isFull ? `Up to ${upload.maxFiles} files can be attached` : 'Attach file'}\n />\n }\n leading={<Avatar size={32} name={author?.name} imageSrc={author?.avatarUrl} />}\n />\n );\n};\n"],"names":["EMPTY_ATTACHMENTS","CommentReplyInput","_ref","onSubmit","author","disabled","_ref$placeholder","placeholder","_ref$autoFocus","autoFocus","maxAttachments","_ref$initialBody","initialBody","_ref$initialAttachmen","initialAttachments","onCancel","testId","useState","_useState2","_slicedToArray","_useState","body","setBody","_useState4","_useState3","attachments","setAttachments","_useState6","_useState5","attachmentError","setAttachmentError","upload","useAttachmentUpload","value","onChange","onError","maxFiles","handleSubmit","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","wrap","_context","prev","next","t0","sent","abrupt","clearAttachments","stop","_callee","_x","apply","this","arguments","_jsx","CommentInput","bare","canSubmit","trim","length","isUploading","items","onAttachmentRemove","removeAttachment","onAttachmentRetry","handleRetry","onAttachmentReorder","reorderAttachments","onFilesDrop","addFiles","onImageLinkPaste","addLinkedImage","attachmentSlot","FailedFileUploading","errorMessage","undefined","toolbar","AttachFileButton","inputRef","fileInputRef","onClick","openFileDialog","onFileSelect","handleFileSelect","multiple","isFull","tooltip","leading","Avatar","size","name","imageSrc","avatarUrl"],"mappings":"qhBASA,IAAMA,EAA0C,GAmBnCC,EAAoB,SAWHC,GAAA,IAV5BC,IAAAA,SACAC,IAAAA,OACAC,IAAAA,SAAQC,EAAAJ,EACRK,YAAAA,aAAc,QAAOD,EAAAE,EAAAN,EACrBO,UAAAA,cAAgBD,EAChBE,IAAAA,eAAcC,EAAAT,EACdU,YAAAA,aAAc,GAAED,EAAAE,EAAAX,EAChBY,mBAAAA,aAAqBd,EAAiBa,EACtCE,IAAAA,SACAC,IAAAA,OAEwBC,EAAAA,EAASL,GAAYM,EAAAC,EAAAC,EAAA,GAAtCC,EAAIH,EAAA,GAAEI,EAAOJ,EAAA,GACkBD,EAAAA,EAA+BH,GAAmBS,EAAAJ,EAAAK,EAAA,GAAjFC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GACYN,EAAAA,EAAwB,MAAKU,EAAAR,EAAAS,EAAA,GAApEC,EAAeF,EAAA,GAAEG,EAAkBH,EAAA,GAEpCI,EAASC,EAAoB,CACjCC,MAAOR,EACPS,SAAUR,EACVS,QAASL,EACTM,SAAU1B,IAGN2B,EAAY,WAAA,IAAAC,EAAAC,EAAAC,EAAAC,MAAG,WAAOR,GAAa,OAAAO,EAAAE,MAAA,SAAAC,GAAA,OAAA,OAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAAA,OAAAF,EAAAE,KAAA,EAC5B1C,EAAS8B,EAAOR,GAAY,KAAA,EAAA,GAAAkB,EAAAG,GAAAH,EAAAI,MAAM,IAANJ,EAAAG,GAAW,CAAAH,EAAAE,KAAA,EAAA,KAAA,CAAA,OAAAF,EAAAK,OAAA,UAAA,KAAA,EAElD1B,EAAQ,IACRI,EAAe,IACfK,EAAOkB,mBAAmB,KAAA,EAAA,IAAA,MAAA,OAAAN,EAAAO,OAAA,GAAAC,EAC3B,KAAA,OAAA,SANiBC,GAAA,OAAAd,EAAAe,MAAAC,KAAAC,UAAA,EAAA,GAQlB,OACEC,EAACC,EAAY,CACXC,MAAI,EACJjD,UAAWA,EACXF,YAAaA,EACb0B,MAAOZ,EACPa,SAAUZ,EAEVqC,aAActC,EAAKuC,SAAYnC,EAAYoC,QAAY9B,EAAO+B,aAC9D3D,SAAUkC,EACVtB,SAAUA,EACVV,SAAUA,EACVoB,YAAaM,EAAOgC,MACpBC,mBAAoBjC,EAAOkC,iBAC3BC,kBAAmBnC,EAAOoC,YAC1BC,oBAAqBrC,EAAOsC,mBAC5BC,YAAavC,EAAOwC,SACpBC,iBAAkBzC,EAAO0C,eACzBzD,OAAQA,EACR0D,eACE7C,EAAkB2B,EAACmB,EAAmB,CAACC,aAAc/C,SAAsBgD,EAE7EC,QACEtB,EAACuB,EAAgB,CACfC,SAAUjD,EAAOkD,aACjBC,QAASnD,EAAOoD,eAChBC,aAAcrD,EAAOsD,iBACrBC,UAAQ,EACRjF,SAAU0B,EAAOwD,OACjBC,QAASzD,EAAOwD,uBAAkBxD,EAAOK,SAAmC,0BAAA,gBAGhFqD,QAASjC,EAACkC,EAAM,CAACC,KAAM,GAAIC,KAAMxF,aAAAA,EAAAA,EAAQwF,KAAMC,SAAUzF,aAAM,EAANA,EAAQ0F,aAGvE"}
1
+ {"version":3,"file":"CommentReplyInput.js","sources":["../../../src/components/CommentComposer/CommentReplyInput.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { Avatar } from '../../componentsV2/Avatar';\nimport { AttachFileButton } from '../AttachFileButton';\nimport { CommentInput } from '../CommentInputNext/CommentInputNext';\nimport FailedFileUploading from '../FailedFileUploading';\n\nimport { clearReplyDraft, getReplyDraft, saveReplyDraft } from './replyDrafts';\nimport { useAttachmentUpload, UploadedAttachment } from './useAttachmentUpload';\n\nconst EMPTY_ATTACHMENTS: UploadedAttachment[] = [];\n\nexport type CommentReplyInputProps = {\n /** Resolving to `false` keeps the draft, so a failed post can be retried. */\n onSubmit: (\n body: string,\n attachments: UploadedAttachment[]\n ) => void | boolean | Promise<void | boolean>;\n author?: { name?: string; avatarUrl?: string };\n disabled?: boolean;\n placeholder?: string;\n autoFocus?: boolean;\n maxAttachments?: number;\n initialBody?: string;\n initialAttachments?: UploadedAttachment[];\n onCancel?: () => void;\n /** Keeps the unsent text and attachments across unmounts, e.g. a hover popover closing. */\n draftKey?: string;\n testId?: string;\n};\n\nexport const CommentReplyInput = ({\n onSubmit,\n author,\n disabled,\n placeholder = 'Reply',\n autoFocus = true,\n maxAttachments,\n initialBody = '',\n initialAttachments = EMPTY_ATTACHMENTS,\n onCancel,\n draftKey,\n testId,\n}: CommentReplyInputProps) => {\n const [body, setBody] = useState(() =>\n draftKey ? getReplyDraft(draftKey)?.body ?? initialBody : initialBody\n );\n const [attachments, setAttachments] = useState<UploadedAttachment[]>(() =>\n draftKey ? getReplyDraft(draftKey)?.attachments ?? initialAttachments : initialAttachments\n );\n const [attachmentError, setAttachmentError] = useState<string | null>(null);\n\n // A reused composer (new activity or user) must load that key's draft instead of carrying\n // the previous text over, or the save effect below would file it under the wrong key.\n const [loadedDraftKey, setLoadedDraftKey] = useState(draftKey);\n if (loadedDraftKey !== draftKey) {\n const draft = draftKey ? getReplyDraft(draftKey) : undefined;\n setLoadedDraftKey(draftKey);\n setBody(draft?.body ?? initialBody);\n setAttachments(draft?.attachments ?? initialAttachments);\n setAttachmentError(null);\n }\n\n const upload = useAttachmentUpload({\n value: attachments,\n onChange: setAttachments,\n onError: setAttachmentError,\n maxFiles: maxAttachments,\n });\n\n useEffect(() => {\n if (draftKey) saveReplyDraft(draftKey, { body, attachments });\n }, [draftKey, body, attachments]);\n\n const handleSubmit = async (value: string) => {\n if ((await onSubmit(value, attachments)) === false) return;\n\n if (draftKey) clearReplyDraft(draftKey);\n setBody('');\n setAttachments([]);\n upload.clearAttachments();\n };\n\n return (\n <CommentInput\n bare\n autoFocus={autoFocus}\n placeholder={placeholder}\n value={body}\n onChange={setBody}\n // An attachment only lands once S3 confirms, so posting mid-upload would drop it.\n canSubmit={(!!body.trim() || !!attachments.length) && !upload.isUploading}\n onSubmit={handleSubmit}\n onCancel={\n onCancel &&\n (() => {\n if (draftKey) clearReplyDraft(draftKey);\n onCancel();\n })\n }\n disabled={disabled}\n attachments={upload.items}\n onAttachmentRemove={upload.removeAttachment}\n onAttachmentRetry={upload.handleRetry}\n onAttachmentReorder={upload.reorderAttachments}\n onFilesDrop={upload.addFiles}\n onImageLinkPaste={upload.addLinkedImage}\n testId={testId}\n attachmentSlot={\n attachmentError ? <FailedFileUploading errorMessage={attachmentError} /> : undefined\n }\n toolbar={\n <AttachFileButton\n inputRef={upload.fileInputRef}\n onClick={upload.openFileDialog}\n onFileSelect={upload.handleFileSelect}\n multiple\n disabled={upload.isFull}\n tooltip={upload.isFull ? `Up to ${upload.maxFiles} files can be attached` : 'Attach file'}\n />\n }\n leading={<Avatar size={32} name={author?.name} imageSrc={author?.avatarUrl} />}\n />\n );\n};\n"],"names":["EMPTY_ATTACHMENTS","CommentReplyInput","_ref","onSubmit","author","disabled","_ref$placeholder","placeholder","_ref$autoFocus","autoFocus","maxAttachments","_ref$initialBody","initialBody","_ref$initialAttachmen","initialAttachments","onCancel","draftKey","testId","_useState","useState","_getReplyDraft$body","_getReplyDraft","getReplyDraft","body","_useState2","_slicedToArray","setBody","_useState3","_getReplyDraft$attach","_getReplyDraft2","attachments","_useState4","setAttachments","_useState6","_useState5","attachmentError","setAttachmentError","_useState8","_useState7","loadedDraftKey","setLoadedDraftKey","_draft$body","_draft$attachments","draft","undefined","upload","useAttachmentUpload","value","onChange","onError","maxFiles","useEffect","saveReplyDraft","handleSubmit","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","wrap","_context","prev","next","t0","sent","abrupt","clearReplyDraft","clearAttachments","stop","_callee","_x","apply","this","arguments","_jsx","CommentInput","bare","canSubmit","trim","length","isUploading","items","onAttachmentRemove","removeAttachment","onAttachmentRetry","handleRetry","onAttachmentReorder","reorderAttachments","onFilesDrop","addFiles","onImageLinkPaste","addLinkedImage","attachmentSlot","FailedFileUploading","errorMessage","toolbar","AttachFileButton","inputRef","fileInputRef","onClick","openFileDialog","onFileSelect","handleFileSelect","multiple","isFull","tooltip","leading","Avatar","size","name","imageSrc","avatarUrl"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CommentReplyInput.draft.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentReplyInput.draft.test.d.ts","sourceRoot":"","sources":["../../../../src/components/CommentComposer/__tests__/CommentReplyInput.draft.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import type { UploadedAttachment } from './useAttachmentUpload';
2
+ export type ReplyDraft = {
3
+ body: string;
4
+ attachments: UploadedAttachment[];
5
+ };
6
+ export declare const getReplyDraft: (key: string) => ReplyDraft | undefined;
7
+ export declare const hasReplyDraft: (key: string) => boolean;
8
+ export declare const saveReplyDraft: (key: string, draft: ReplyDraft) => void;
9
+ export declare const clearReplyDraft: (key: string) => void;
10
+ export declare const clearAllReplyDrafts: () => void;
11
+ export declare const getActivityReplyDraftKey: (activityId: string | number, userId: string | number | undefined) => string;
12
+ //# sourceMappingURL=replyDrafts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replyDrafts.d.ts","sourceRoot":"","sources":["../../../src/components/CommentComposer/replyDrafts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC,CAAC;AAKF,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,UAAU,GAAG,SAA4B,CAAC;AAEtF,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OAA0B,CAAC;AAEvE,eAAO,MAAM,cAAc,QAAS,MAAM,SAAS,UAAU,KAAG,IAM/D,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,KAAG,IAE7C,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,IAEtC,CAAC;AAGF,eAAO,MAAM,wBAAwB,eACvB,MAAM,GAAG,MAAM,UACnB,MAAM,GAAG,MAAM,GAAG,SAAS,KAClC,MAAiE,CAAC"}
@@ -0,0 +1,2 @@
1
+ var t=new Map,n=function(n){return t.get(n)},e=function(n){return t.has(n)},c=function(n,e){e.body.trim()||e.attachments.length?t.set(n,e):t.delete(n)},o=function(n){t.delete(n)},r=function(t,n){return"activity-reply:".concat(null!=n?n:"anonymous",":").concat(t)};export{o as clearReplyDraft,r as getActivityReplyDraftKey,n as getReplyDraft,e as hasReplyDraft,c as saveReplyDraft};
2
+ //# sourceMappingURL=replyDrafts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replyDrafts.js","sources":["../../../src/components/CommentComposer/replyDrafts.ts"],"sourcesContent":["import type { UploadedAttachment } from './useAttachmentUpload';\n\nexport type ReplyDraft = {\n body: string;\n attachments: UploadedAttachment[];\n};\n\n// Module scope so a draft outlives the hover popover that unmounts its composer.\nconst drafts = new Map<string, ReplyDraft>();\n\nexport const getReplyDraft = (key: string): ReplyDraft | undefined => drafts.get(key);\n\nexport const hasReplyDraft = (key: string): boolean => drafts.has(key);\n\nexport const saveReplyDraft = (key: string, draft: ReplyDraft): void => {\n if (draft.body.trim() || draft.attachments.length) {\n drafts.set(key, draft);\n } else {\n drafts.delete(key);\n }\n};\n\nexport const clearReplyDraft = (key: string): void => {\n drafts.delete(key);\n};\n\nexport const clearAllReplyDrafts = (): void => {\n drafts.clear();\n};\n\n// Scoped by user: logout and impersonation switch users without a page reload.\nexport const getActivityReplyDraftKey = (\n activityId: string | number,\n userId: string | number | undefined\n): string => `activity-reply:${userId ?? 'anonymous'}:${activityId}`;\n"],"names":["drafts","Map","getReplyDraft","key","get","hasReplyDraft","has","saveReplyDraft","draft","body","trim","attachments","length","set","delete","clearReplyDraft","getActivityReplyDraftKey","activityId","userId"],"mappings":"AAQA,IAAMA,EAAS,IAAIC,IAENC,EAAgB,SAACC,GAAW,OAA6BH,EAAOI,IAAID,EAAI,EAExEE,EAAgB,SAACF,GAAW,OAAcH,EAAOM,IAAIH,EAAI,EAEzDI,EAAiB,SAACJ,EAAaK,GACtCA,EAAMC,KAAKC,QAAUF,EAAMG,YAAYC,OACzCZ,EAAOa,IAAIV,EAAKK,GAEhBR,EAAOc,OAAOX,EAElB,EAEaY,EAAkB,SAACZ,GAC9BH,EAAOc,OAAOX,EAChB,EAOaa,EAA2B,SACtCC,EACAC,GAAmC,MACNA,kBAAAA,OAAAA,QAAAA,EAAU,wBAAeD,EAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"useActivityInteractions.d.ts","sourceRoot":"","sources":["../../../src/components/FeedCard/useActivityInteractions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAcrE,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC;AAGF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACtC,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;CACnF,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,iFAAiF;IACjF,SAAS,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,KACzD,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB,CAAC;AAGF,eAAO,MAAM,uBAAuB,wDAKjC,8BAA8B,KAAG,6BAsNnC,CAAC"}
1
+ {"version":3,"file":"useActivityInteractions.d.ts","sourceRoot":"","sources":["../../../src/components/FeedCard/useActivityInteractions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAcrE,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC;AAGF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACtC,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;CACnF,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,iFAAiF;IACjF,SAAS,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,KACzD,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB,CAAC;AAGF,eAAO,MAAM,uBAAuB,wDAKjC,8BAA8B,KAAG,6BAiOnC,CAAC"}
@@ -1,2 +1,2 @@
1
- import n from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/defineProperty";import r from"@babel/runtime/helpers/toConsumableArray";import e from"@babel/runtime/helpers/slicedToArray";import i from"@babel/runtime/regenerator";import{useRef as u,useCallback as o,useState as l,useMemo as a,useEffect as c}from"react";import s from"moment-timezone";import{buildCommentReply as p}from"../CommentCard/buildCommentReply.js";import{patchFeedItemComment as f,deleteFeedItemComment as d,toggleFeedItemLike as m,postFeedItemComment as v}from"../../clients/jsonApi/index.js";import{showErrorNotification as h,showSuccessNotification as g}from"../../utils/notificationToasts.js";function b(n,t){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(n);t&&(e=e.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),r.push.apply(r,e)}return r}function y(n){for(var r=1;r<arguments.length;r++){var e=null!=arguments[r]?arguments[r]:{};r%2?b(Object(e),!0).forEach((function(r){t(n,r,e[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):b(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}var S=function(b){var S,w,x,O=b.activity,k=b.currentUser,j=b.onChanged,R=b.loadingState,P=u(j);P.current=j;var C=o((function(){var n;return null===(n=P.current)||void 0===n?void 0:n.call(P)}),[]),A=l(!1),z=e(A,2),D=z[0],L=z[1],E=R?R.isLoading:D,F=R?R.setIsLoading:L,M=l(!1),_=e(M,2),T=_[0],I=_[1],N=l(null),U=e(N,2),G=U[0],q=U[1],B=l(3),H=e(B,2),J=H[0],K=H[1],Q=l([]),V=e(Q,2),W=V[0],X=V[1],Y=l({}),Z=e(Y,2),$=Z[0],nn=Z[1],tn=u(W);tn.current=W;var rn=l([]),en=e(rn,2),un=en[0],on=en[1],ln=l(null),an=e(ln,2),cn=an[0],sn=an[1],pn=a((function(){var n;return null!==(n=null==O?void 0:O.comments)&&void 0!==n?n:[]}),[null==O?void 0:O.comments]),fn=a((function(){var n=new Set(pn.map((function(n){return String(n.id)}))),t=[].concat(r(pn.map((function(n){return y(y({},n),$[String(n.id)])}))),r(W.filter((function(t){return!n.has(String(t.id))}))));return un.length?t.filter((function(n){return!un.some((function(t){return String(t)===String(n.id)}))})):t}),[pn,W,$,un]);c((function(){if(W.length){var n=new Set(pn.map((function(n){return String(n.id)}))),t=W.filter((function(t){return!n.has(String(t.id))}));t.length!==W.length&&X(t)}}),[pn,W]),c((function(){if(un.length){var n=new Set(pn.map((function(n){return String(n.id)}))),t=un.filter((function(t){return n.has(String(t))}));t.length!==un.length&&on(t)}}),[pn,un]);var dn=(null!==(S=null==O?void 0:O.likes)&&void 0!==S?S:[]).some((function(n){var t;return Number(null===(t=n.user)||void 0===t?void 0:t.id)===Number(null==k?void 0:k.id)})),mn=null!=cn?cn:dn,vn=null!==(w=null==O?void 0:O.likes_count)&&void 0!==w?w:0,hn=null===cn||cn===dn?vn:Math.max(0,vn+(cn?1:-1));c((function(){null!==cn&&cn===dn&&sn(null)}),[dn,cn]);var gn=function(){var t=n(i.mark((function n(){return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=(null==O?void 0:O.id)){n.next=2;break}return n.abrupt("return");case 2:return sn(!mn),F(!0),n.prev=5,n.next=8,m(O.id);case 8:C(),n.next=15;break;case 11:n.prev=11,n.t0=n.catch(5),sn(null),h("Failed to update the like");case 15:return n.prev=15,F(!1),n.finish(15);case 18:case"end":return n.stop()}}),n,null,[[5,11,15,18]])})));return function(){return t.apply(this,arguments)}}(),bn=function(){var t=n(i.mark((function n(t){var e,u,o,l,a=arguments;return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(e=a.length>1&&void 0!==a[1]?a[1]:[],null!=(null==O?void 0:O.id)){n.next=3;break}return n.abrupt("return",!1);case 3:return F(!0),n.prev=4,u=e.map((function(n){return{url:n.url,size:n.size,file_name:n.name}})),o=y({body:t},u.length?{attachments:u,attachment:u[0]}:{}),n.next=9,v(O.id,{comment:o});case 9:return null!=(l=n.sent)&&l.id&&X((function(n){return[].concat(r(n),[l])})),C(),n.abrupt("return",!0);case 15:return n.prev=15,n.t0=n.catch(4),h("Failed to post the reply"),n.abrupt("return",!1);case 19:return n.prev=19,F(!1),n.finish(19);case 22:case"end":return n.stop()}}),n,null,[[4,15,19,22]])})));return function(n){return t.apply(this,arguments)}}(),yn=o(function(){var r=n(i.mark((function n(r,e,u){var o,l,a;return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=(null==O?void 0:O.id)){n.next=2;break}return n.abrupt("return",!1);case 2:return F(!0),n.prev=3,l=u.map((function(n){return{url:n.url,size:n.size,file_name:n.name}})),a={body:e,attachments:l,attachment:null!==(o=l[0])&&void 0!==o?o:null},n.next=8,f(O.id,r,{comment:a});case 8:return nn((function(n){var i;return y(y({},n),{},t({},String(r),{body:e,attachments:l,attachment:null!==(i=l[0])&&void 0!==i?i:null}))})),q(null),C(),n.abrupt("return",!0);case 14:return n.prev=14,n.t0=n.catch(3),h("Failed to update the reply"),n.abrupt("return",!1);case 18:return n.prev=18,F(!1),n.finish(18);case 21:case"end":return n.stop()}}),n,null,[[3,14,18,21]])})));return function(n,t,e){return r.apply(this,arguments)}}(),[null==O?void 0:O.id,C,F]),Sn=o(function(){var t=n(i.mark((function n(t){var e;return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=(null==O?void 0:O.id)){n.next=2;break}return n.abrupt("return");case 2:return F(!0),e=tn.current.find((function(n){return String(n.id)===String(t)})),X((function(n){return n.filter((function(n){return String(n.id)!==String(t)}))})),on((function(n){return[].concat(r(n),[t])})),n.prev=6,n.next=9,d(O.id,t);case 9:C(),g("Reply was deleted"),n.next=18;break;case 13:n.prev=13,n.t0=n.catch(6),on((function(n){return n.filter((function(n){return String(n)!==String(t)}))})),e&&X((function(n){return[].concat(r(n),[e])})),h("Failed to delete the reply");case 18:return n.prev=18,F(!1),n.finish(18);case 21:case"end":return n.stop()}}),n,null,[[6,13,18,21]])})));return function(n){return t.apply(this,arguments)}}(),[null==O?void 0:O.id,C,F]),wn=a((function(){return fn.length?fn.map((function(n){return{reply:n,sortAt:s(n.created_at).unix()}})).sort((function(n,t){return t.sortAt-n.sortAt})).slice(0,J).map((function(n){var t=n.reply;return p(t,{currentUserId:null==k?void 0:k.id,onDelete:Sn,onEdit:q})})):[]}),[fn,J,Sn,null==k?void 0:k.id]);return{isLoading:E,isLiked:mn,likesCount:hn,commentsCount:fn.length,isReplyOpen:T,toggleReplyOpen:function(){return I((function(n){return!n}))},replies:wn,editingReply:null!==(x=fn.find((function(n){return String(n.id)===String(G)})))&&void 0!==x?x:null,cancelReplyEdit:function(){return q(null)},hasMoreReplies:fn.length>J,moreRepliesCount:Math.max(0,fn.length-J),showMoreReplies:function(){return K((function(n){return n+10}))},toggleLike:gn,postReply:bn,updateReply:yn}};export{S as useActivityInteractions};
1
+ import n from"@babel/runtime/helpers/asyncToGenerator";import r from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/toConsumableArray";import e from"@babel/runtime/helpers/slicedToArray";import i from"@babel/runtime/regenerator";import{useRef as u,useCallback as o,useState as l,useMemo as a,useEffect as c}from"react";import s from"moment-timezone";import{getActivityReplyDraftKey as p,hasReplyDraft as f}from"../CommentComposer/replyDrafts.js";import{buildCommentReply as d}from"../CommentCard/buildCommentReply.js";import{patchFeedItemComment as m,deleteFeedItemComment as v,toggleFeedItemLike as h,postFeedItemComment as g}from"../../clients/jsonApi/index.js";import{showErrorNotification as b,showSuccessNotification as y}from"../../utils/notificationToasts.js";function S(n,r){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(n);r&&(e=e.filter((function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable}))),t.push.apply(t,e)}return t}function w(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?S(Object(e),!0).forEach((function(t){r(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):S(Object(e)).forEach((function(r){Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(e,r))}))}return n}var x=function(S){var x,O,k,j=S.activity,R=S.currentUser,C=S.onChanged,P=S.loadingState,A=u(C);A.current=C;var D=o((function(){var n;return null===(n=A.current)||void 0===n?void 0:n.call(A)}),[]),z=l(!1),L=e(z,2),E=L[0],F=L[1],M=P?P.isLoading:E,_=P?P.setIsLoading:F,T=void 0!==j.id?p(j.id,null==R?void 0:R.id):void 0,I=l((function(){return!!T&&f(T)})),N=e(I,2),U=N[0],G=N[1],q=l(T),B=e(q,2),H=B[0],J=B[1];H!==T&&(J(T),G(!!T&&f(T)));var K=l(null),Q=e(K,2),V=Q[0],W=Q[1],X=l(3),Y=e(X,2),Z=Y[0],$=Y[1],nn=l([]),rn=e(nn,2),tn=rn[0],en=rn[1],un=l({}),on=e(un,2),ln=on[0],an=on[1],cn=u(tn);cn.current=tn;var sn=l([]),pn=e(sn,2),fn=pn[0],dn=pn[1],mn=l(null),vn=e(mn,2),hn=vn[0],gn=vn[1],bn=a((function(){var n;return null!==(n=null==j?void 0:j.comments)&&void 0!==n?n:[]}),[null==j?void 0:j.comments]),yn=a((function(){var n=new Set(bn.map((function(n){return String(n.id)}))),r=[].concat(t(bn.map((function(n){return w(w({},n),ln[String(n.id)])}))),t(tn.filter((function(r){return!n.has(String(r.id))}))));return fn.length?r.filter((function(n){return!fn.some((function(r){return String(r)===String(n.id)}))})):r}),[bn,tn,ln,fn]);c((function(){if(tn.length){var n=new Set(bn.map((function(n){return String(n.id)}))),r=tn.filter((function(r){return!n.has(String(r.id))}));r.length!==tn.length&&en(r)}}),[bn,tn]),c((function(){if(fn.length){var n=new Set(bn.map((function(n){return String(n.id)}))),r=fn.filter((function(r){return n.has(String(r))}));r.length!==fn.length&&dn(r)}}),[bn,fn]);var Sn=(null!==(x=null==j?void 0:j.likes)&&void 0!==x?x:[]).some((function(n){var r;return Number(null===(r=n.user)||void 0===r?void 0:r.id)===Number(null==R?void 0:R.id)})),wn=null!=hn?hn:Sn,xn=null!==(O=null==j?void 0:j.likes_count)&&void 0!==O?O:0,On=null===hn||hn===Sn?xn:Math.max(0,xn+(hn?1:-1));c((function(){null!==hn&&hn===Sn&&gn(null)}),[Sn,hn]);var kn=function(){var r=n(i.mark((function n(){return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=(null==j?void 0:j.id)){n.next=2;break}return n.abrupt("return");case 2:return gn(!wn),_(!0),n.prev=5,n.next=8,h(j.id);case 8:D(),n.next=15;break;case 11:n.prev=11,n.t0=n.catch(5),gn(null),b("Failed to update the like");case 15:return n.prev=15,_(!1),n.finish(15);case 18:case"end":return n.stop()}}),n,null,[[5,11,15,18]])})));return function(){return r.apply(this,arguments)}}(),jn=function(){var r=n(i.mark((function n(r){var e,u,o,l,a=arguments;return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(e=a.length>1&&void 0!==a[1]?a[1]:[],null!=(null==j?void 0:j.id)){n.next=3;break}return n.abrupt("return",!1);case 3:return _(!0),n.prev=4,u=e.map((function(n){return{url:n.url,size:n.size,file_name:n.name}})),o=w({body:r},u.length?{attachments:u,attachment:u[0]}:{}),n.next=9,g(j.id,{comment:o});case 9:return null!=(l=n.sent)&&l.id&&en((function(n){return[].concat(t(n),[l])})),D(),n.abrupt("return",!0);case 15:return n.prev=15,n.t0=n.catch(4),b("Failed to post the reply"),n.abrupt("return",!1);case 19:return n.prev=19,_(!1),n.finish(19);case 22:case"end":return n.stop()}}),n,null,[[4,15,19,22]])})));return function(n){return r.apply(this,arguments)}}(),Rn=o(function(){var t=n(i.mark((function n(t,e,u){var o,l,a;return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=(null==j?void 0:j.id)){n.next=2;break}return n.abrupt("return",!1);case 2:return _(!0),n.prev=3,l=u.map((function(n){return{url:n.url,size:n.size,file_name:n.name}})),a={body:e,attachments:l,attachment:null!==(o=l[0])&&void 0!==o?o:null},n.next=8,m(j.id,t,{comment:a});case 8:return an((function(n){var i;return w(w({},n),{},r({},String(t),{body:e,attachments:l,attachment:null!==(i=l[0])&&void 0!==i?i:null}))})),W(null),D(),n.abrupt("return",!0);case 14:return n.prev=14,n.t0=n.catch(3),b("Failed to update the reply"),n.abrupt("return",!1);case 18:return n.prev=18,_(!1),n.finish(18);case 21:case"end":return n.stop()}}),n,null,[[3,14,18,21]])})));return function(n,r,e){return t.apply(this,arguments)}}(),[null==j?void 0:j.id,D,_]),Cn=o(function(){var r=n(i.mark((function n(r){var e;return i.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(null!=(null==j?void 0:j.id)){n.next=2;break}return n.abrupt("return");case 2:return _(!0),e=cn.current.find((function(n){return String(n.id)===String(r)})),en((function(n){return n.filter((function(n){return String(n.id)!==String(r)}))})),dn((function(n){return[].concat(t(n),[r])})),n.prev=6,n.next=9,v(j.id,r);case 9:D(),y("Reply was deleted"),n.next=18;break;case 13:n.prev=13,n.t0=n.catch(6),dn((function(n){return n.filter((function(n){return String(n)!==String(r)}))})),e&&en((function(n){return[].concat(t(n),[e])})),b("Failed to delete the reply");case 18:return n.prev=18,_(!1),n.finish(18);case 21:case"end":return n.stop()}}),n,null,[[6,13,18,21]])})));return function(n){return r.apply(this,arguments)}}(),[null==j?void 0:j.id,D,_]),Pn=a((function(){return yn.length?yn.map((function(n){return{reply:n,sortAt:s(n.created_at).unix()}})).sort((function(n,r){return r.sortAt-n.sortAt})).slice(0,Z).map((function(n){var r=n.reply;return d(r,{currentUserId:null==R?void 0:R.id,onDelete:Cn,onEdit:W})})):[]}),[yn,Z,Cn,null==R?void 0:R.id]);return{isLoading:M,isLiked:wn,likesCount:On,commentsCount:yn.length,isReplyOpen:U,toggleReplyOpen:function(){return G((function(n){return!n}))},replies:Pn,editingReply:null!==(k=yn.find((function(n){return String(n.id)===String(V)})))&&void 0!==k?k:null,cancelReplyEdit:function(){return W(null)},hasMoreReplies:yn.length>Z,moreRepliesCount:Math.max(0,yn.length-Z),showMoreReplies:function(){return $((function(n){return n+10}))},toggleLike:kn,postReply:jn,updateReply:Rn}};export{x as useActivityInteractions};
2
2
  //# sourceMappingURL=useActivityInteractions.js.map