@univerjs/docs-thread-comment-ui 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.js +2 -2
- package/lib/es/index.js +376 -333
- package/lib/types/commands/operations/show-comment-panel.operation.d.ts +1 -0
- package/lib/types/controllers/doc-thread-comment-ui.controller.d.ts +1 -2
- package/lib/types/controllers/menu.d.ts +2 -1
- package/lib/types/plugin.d.ts +2 -3
- package/lib/umd/index.js +2 -2
- package/package.json +19 -21
package/lib/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var re=Object.defineProperty;var ie=(e,t,n)=>t in e?re(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var F=(e,t,n)=>ie(e,typeof t!="symbol"?t+"":t,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@univerjs/core"),C=require("@wendellhu/redi"),S=require("@univerjs/thread-comment-ui"),R=require("@univerjs/engine-render"),p=require("@univerjs/ui"),h=require("@univerjs/docs"),N=require("@univerjs/thread-comment"),b=require("@wendellhu/redi/react-bindings"),_=require("react"),L=require("rxjs"),Y=require("@univerjs/docs-ui"),oe="DOC_THREAD_COMMENT_UI_PLUGIN",M="default_doc";var v=function(){return v=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},v.apply(this,arguments)},ce=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n},J=_.forwardRef(function(e,t){var n=e.icon,r=e.id,i=e.className,o=e.extend,c=ce(e,["icon","id","className","extend"]),d="univerjs-icon univerjs-icon-".concat(r," ").concat(i||"").trim(),l=_.useRef("_".concat(de()));return Q(n,"".concat(r),{defIds:n.defIds,idSuffix:l.current},v({ref:t,className:d},c),o)});function Q(e,t,n,r,i){return _.createElement(e.tag,v(v({key:t},se(e,n,i)),r),(ae(e,n).children||[]).map(function(o,c){return Q(o,"".concat(t,"-").concat(e.tag,"-").concat(c),n,void 0,i)}))}function se(e,t,n){var r=v({},e.attrs);n!=null&&n.colorChannel1&&r.fill==="colorChannel1"&&(r.fill=n.colorChannel1);var i=t.defIds;return!i||i.length===0||(e.tag==="use"&&r["xlink:href"]&&(r["xlink:href"]=r["xlink:href"]+t.idSuffix),Object.entries(r).forEach(function(o){var c=o[0],d=o[1];typeof d=="string"&&(r[c]=d.replace(/url\(#(.*)\)/,"url(#$1".concat(t.idSuffix,")")))})),r}function ae(e,t){var n,r=t.defIds;return!r||r.length===0?e:e.tag==="defs"&&(!((n=e.children)===null||n===void 0)&&n.length)?v(v({},e),{children:e.children.map(function(i){return typeof i.attrs.id=="string"&&r&&r.indexOf(i.attrs.id)>-1?v(v({},i),{attrs:v(v({},i.attrs),{id:i.attrs.id+t.idSuffix})}):i})}):e}function de(){return Math.random().toString(36).substring(2,8)}J.displayName="UniverIcon";var me={tag:"svg",attrs:{fill:"none",viewBox:"0 0 17 17",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521C5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345ZM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521C8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345ZM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521C11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345Z",fillRule:"evenodd",clipRule:"evenodd"}},{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521 5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345zM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521 8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345zM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521 11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345z"}},{tag:"path",attrs:{fill:"currentColor",d:"M1.84351 3.41861C1.84351 3.01861 2.15531 2.69434 2.53993 2.69434H14.9381C15.3228 2.69434 15.6346 3.01861 15.6346 3.41861V12.4611C15.6346 12.8612 15.3228 13.1854 14.9381 13.1854H8.82117L6.06643 14.6179C5.85054 14.7301 5.59416 14.7181 5.38884 14.5862C5.18352 14.4542 5.05855 14.2211 5.05855 13.9701V13.1854H2.53993C2.15531 13.1854 1.84351 12.8612 1.84351 12.4611L1.84351 3.41861ZM6.45141 12.7982L8.34531 12.0135C8.44201 11.9632 8.54864 11.9371 8.65676 11.9371H14.2417C14.3522 11.9371 14.4417 11.8475 14.4417 11.7371V4.14271C14.4417 4.03225 14.3522 3.94271 14.2417 3.94271H3.23636C3.12591 3.94271 3.03636 4.03225 3.03636 4.14271L3.03636 11.7371C3.03636 11.8475 3.12591 11.9371 3.23636 11.9371L5.75498 11.9371C6.1396 11.9371 6.45141 12.0611 6.45141 12.4611V12.7982Z",fillRule:"evenodd",clipRule:"evenodd"}}]},k=_.forwardRef(function(e,t){return _.createElement(J,Object.assign({},e,{id:"comment-single",ref:t,icon:me}))});k.displayName="CommentSingle";const W={id:"docs.command.add-comment",type:s.CommandType.COMMAND,async handler(e,t){if(!t)return!1;const{comment:n,unitId:r}=t,o=await e.get(N.IThreadCommentDataSourceService).addComment(n),c=e.get(s.ICommandService),d=h.addCustomDecorationBySelectionFactory(e,{id:o.id,type:s.CustomDecorationType.COMMENT});if(d){const l={id:N.AddCommentMutation.id,params:{unitId:r,subUnitId:M,comment:o}},m={id:S.SetActiveCommentOperation.id,params:{unitId:r,subUnitId:M,commentId:o.id}};return(await s.sequenceExecuteAsync([l,d,m],c)).result}return!1}};var le=Object.defineProperty,ue=Object.getOwnPropertyDescriptor,Ce=(e,t,n,r)=>{for(var i=r>1?void 0:r?ue(t,n):t,o=e.length-1,c;o>=0;o--)(c=e[o])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&le(t,n,i),i},K=(e,t)=>(n,r)=>t(n,r,e);let y=class extends s.Disposable{constructor(t,n){super();F(this,"_addingComment$",new L.BehaviorSubject(void 0));F(this,"addingComment$",this._addingComment$.asObservable());this._sidebarService=t,this._threadCommentPanelService=n,this.disposeWithMe(()=>{this._addingComment$.complete()})}get addingComment(){return this._addingComment$.getValue()}startAdd(t){this._addingComment$.next(t)}endAdd(){this._addingComment$.next(void 0)}};y=Ce([K(0,p.ISidebarService),K(1,C.Inject(S.ThreadCommentPanelService))],y);const x={id:"docs.operation.show-comment-panel",type:s.CommandType.OPERATION,handler(e,t){const n=e.get(S.ThreadCommentPanelService),r=e.get(p.ISidebarService);return n.panelVisible||(r.open({header:{title:"threadCommentUI.panel.title"},children:{label:Z.componentKey},width:320,onClose:()=>n.setPanelVisible(!1)}),n.setPanelVisible(!0)),t&&n.setActiveComment(t==null?void 0:t.activeComment),!0}},B={id:"docs.operation.start-add-comment",type:s.CommandType.OPERATION,handler(e){var I,A;const t=e.get(S.ThreadCommentPanelService),r=e.get(s.IUniverInstanceService).getCurrentUnitForType(s.UniverInstanceType.UNIVER_DOC),i=e.get(h.TextSelectionManagerService),o=e.get(s.UserManagerService),c=e.get(y),d=e.get(s.ICommandService),l=e.get(p.ISidebarService),m=i.getActiveRange();if(!r||!m)return!1;if(m.collapsed)return t.panelVisible?(t.setPanelVisible(!1),l.close()):d.executeCommand(x.id),!0;t.panelVisible||d.executeCommand(x.id);const f=r.getUnitId(),O=h.getSelectionText((A=(I=r.getBody())==null?void 0:I.dataStream)!=null?A:"",m.startOffset,m.endOffset),g=M,u="",a={unitId:f,subUnitId:g,id:u,ref:O,dT:S.getDT(),personId:o.getCurrentUser().userID,text:{dataStream:`\r
|
|
2
|
-
`},startOffset:m.startOffset,endOffset:m.endOffset,collapsed:!0,threadId:u};return c.startAdd(a),t.setActiveComment({unitId:f,subUnitId:g,commentId:u}),!0}},H={id:"docs.command.delete-comment",type:s.CommandType.COMMAND,async handler(e,t){if(!t)return!1;const{commentId:n,unitId:r}=t,i=e.get(s.ICommandService),o=h.deleteCustomDecorationFactory(e,{id:n,unitId:r});return o?(await s.sequenceExecute([o],i)).result:!1}},Z=()=>{var u;const e=b.useDependency(s.IUniverInstanceService),t=_.useMemo(()=>e.getCurrentTypeOfUnit$(s.UniverInstanceType.UNIVER_DOC),[e]),n=b.useObservable(t),r=_.useMemo(()=>new L.Observable(a=>a.next(M)),[]),i=b.useDependency(h.TextSelectionManagerService),o=(u=b.useObservable(i.textSelection$))==null?void 0:u.textRanges[0],c=b.useDependency(s.ICommandService),d=b.useDependency(y),l=b.useObservable(d.addingComment$),[m,f]=_.useState([]);if(_.useEffect(()=>{var z;const a=new Set,I=n==null?void 0:n.getCustomDecorations();f((z=I==null?void 0:I.map(D=>D.id).filter(D=>{const E=a.has(D);return a.add(D),!E}))!=null?z:[]);const A=c.onCommandExecuted(D=>{var E;if(D.id===h.RichTextEditingMutation.id){const G=new Set,q=n==null?void 0:n.getCustomDecorations();f((E=q==null?void 0:q.map(w=>w.id).filter(w=>{const ne=G.has(w);return G.add(w),!ne}))!=null?E:[])}});return()=>{A.dispose()}},[c,n]),!n)return null;const O=o&&o.endOffset===o.startOffset,g=n.getUnitId();return _.createElement(S.ThreadCommentPanel,{unitId:g,subUnitId$:r,type:s.UniverInstanceType.UNIVER_DOC,onAdd:()=>{c.executeCommand(B.id)},getSubUnitName:()=>"",disableAdd:O,tempComment:l,onAddComment:a=>{if(!a.parentId){const I={unitId:g,range:l,comment:a};return c.executeCommand(W.id,I),d.endAdd(),!1}return!0},onDeleteComment:a=>{if(!a.parentId){const I={unitId:g,commentId:a.id};return c.executeCommand(H.id,I),!1}return!0},showComments:m})};Z.componentKey="univer.doc.thread-comment-panel";const ve=e=>{const n=e.get(R.IRenderManagerService).getCurrent(),r=n==null?void 0:n.with(h.DocSkeletonManagerService).getSkeleton(),i=r==null?void 0:r.getViewModel().getEditArea();return i===R.DocumentEditArea.FOOTER||i===R.DocumentEditArea.HEADER};function fe(e){return{id:B.id,group:p.MenuGroup.TOOLBAR_LAYOUT,type:p.MenuItemType.BUTTON,icon:"CommentSingle",title:"threadCommentUI.panel.addComment",tooltip:"threadCommentUI.panel.addComment",positions:[p.MenuPosition.TOOLBAR_START,p.MenuPosition.CONTEXT_MENU],hidden$:p.getMenuHiddenObservable(e,s.UniverInstanceType.UNIVER_DOC),disabled$:new L.Observable(function(t){const r=e.get(h.TextSelectionManagerService).textSelection$.pipe(L.debounceTime(16)).subscribe(()=>{t.next(ve(e))});return()=>{r.unsubscribe()}})}}var he=Object.defineProperty,ge=Object.getOwnPropertyDescriptor,Ie=(e,t,n,r)=>{for(var i=r>1?void 0:r?ge(t,n):t,o=e.length-1,c;o>=0;o--)(c=e[o])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&he(t,n,i),i},j=(e,t)=>(n,r)=>t(n,r,e);let P=class extends s.Disposable{constructor(e,t,n,r,i){super(),this._config=e,this._commandService=t,this._menuService=n,this._injector=r,this._componentManager=i,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[W,H,x,B].forEach(e=>{this.disposeWithMe(this._commandService.registerCommand(e))})}_initMenus(){[fe].forEach(e=>{this.disposeWithMe(this._menuService.addMenuItem(e(this._injector),this._config.menu))})}_initComponents(){[Z].forEach(e=>{this.disposeWithMe(this._componentManager.register(e.componentKey,e))}),this.disposeWithMe(this._componentManager.register("CommentSingle",k))}};P=Ie([s.OnLifecycle(s.LifecycleStages.Rendered,P),j(1,s.ICommandService),j(2,p.IMenuService),j(3,C.Inject(C.Injector)),j(4,C.Inject(p.ComponentManager))],P);var pe=Object.defineProperty,_e=Object.getOwnPropertyDescriptor,Se=(e,t,n,r)=>{for(var i=r>1?void 0:r?_e(t,n):t,o=e.length-1,c;o>=0;o--)(c=e[o])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&pe(t,n,i),i},T=(e,t)=>(n,r)=>t(n,r,e);let V=class extends s.Disposable{constructor(e,t,n,r,i,o){super(),this._threadCommentPanelService=e,this._univerInstanceService=t,this._commandService=n,this._docThreadCommentService=r,this._renderManagerService=i,this._threadCommentModel=o,this._initSelectionChange(),this._initActiveCommandChange()}_initSelectionChange(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t,n,r,i;if(e.id===h.SetTextSelectionsOperation.id){const o=e.params,{unitId:c,ranges:d}=o,l=this._univerInstanceService.getUnit(c,s.UniverInstanceType.UNIVER_DOC),m=d[0];if(m&&l){const{startOffset:f,endOffset:O,collapsed:g}=m;let u;if(g?u=(n=(t=l.getBody())==null?void 0:t.customDecorations)==null?void 0:n.find(a=>a.startIndex<=f&&a.endIndex>=O-1):u=(i=(r=l.getBody())==null?void 0:r.customDecorations)==null?void 0:i.find(a=>a.startIndex<=f&&a.endIndex>=O-1),u){const a=this._threadCommentModel.getComment(c,M,u.id);a&&!a.resolved&&this._commandService.executeCommand(x.id,{activeComment:{unitId:c,subUnitId:M,commentId:u.id}});return}}this._commandService.executeCommand(S.SetActiveCommentOperation.id)}}))}_initActiveCommandChange(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(e=>{var t,n,r;if(e){const i=this._univerInstanceService.getUnit(e.unitId);if(i){const o=(t=this._renderManagerService.getRenderById(e.unitId))==null?void 0:t.with(Y.DocBackScrollRenderController),c=(n=i.getCustomRanges())==null?void 0:n.find(d=>d.rangeId===e.commentId);c&&o&&o.scrollToRange(e.unitId,{startOffset:c.startIndex,endOffset:c.endIndex,collapsed:!1})}}(!e||e.commentId!==((r=this._docThreadCommentService.addingComment)==null?void 0:r.id))&&this._docThreadCommentService.endAdd()}))}};V=Se([s.OnLifecycle(s.LifecycleStages.Rendered,V),T(0,C.Inject(S.ThreadCommentPanelService)),T(1,s.IUniverInstanceService),T(2,s.ICommandService),T(3,C.Inject(y)),T(4,R.IRenderManagerService),T(5,C.Inject(N.ThreadCommentModel))],V);var Oe=Object.defineProperty,be=Object.getOwnPropertyDescriptor,Me=(e,t,n,r)=>{for(var i=r>1?void 0:r?be(t,n):t,o=e.length-1,c;o>=0;o--)(c=e[o])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&Oe(t,n,i),i},U=(e,t)=>(n,r)=>t(n,r,e);let $=class extends s.Disposable{constructor(e,t,n,r,i,o){super(),this._context=e,this._docInterceptorService=t,this._threadCommentPanelService=n,this._docRenderController=r,this._univerInstanceService=i,this._threadCommentModel=o,this._interceptorViewModel(),this._initReRender()}_initReRender(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(e=>{var n;if(e){this._docRenderController.reRender(e.unitId);return}const t=(n=this._univerInstanceService.getCurrentUnitForType(s.UniverInstanceType.UNIVER_DOC))==null?void 0:n.getUnitId();t&&this._docRenderController.reRender(t)})),this.disposeWithMe(this._threadCommentModel.commentUpdate$.subscribe(e=>{e.type==="resolve"&&this._docRenderController.reRender(e.unitId)}))}_interceptorViewModel(){this._docInterceptorService.intercept(h.DOC_INTERCEPTOR_POINT.CUSTOM_DECORATION,{handler:(e,t,n)=>{if(!e)return n(e);const{unitId:r,index:i,customDecorations:o}=t,c=this._threadCommentPanelService.activeCommentId,{commentId:d,unitId:l}=c||{},m=o.find(u=>u.id===d),f=this._threadCommentModel.getComment(r,M,e.id);if(!f)return n({...e,show:!1});const O=m&&i>=m.startIndex&&i<=m.endIndex,g=l===r&&e.id===d;return n({...e,active:g||O,show:!f.resolved})}})}};$=Me([s.OnLifecycle(s.LifecycleStages.Starting,$),U(1,C.Inject(h.DocInterceptorService)),U(2,C.Inject(S.ThreadCommentPanelService)),U(3,C.Inject(Y.DocRenderController)),U(4,s.IUniverInstanceService),U(5,C.Inject(N.ThreadCommentModel))],$);var ee=Object.defineProperty,De=Object.getOwnPropertyDescriptor,Te=(e,t,n)=>t in e?ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ye=(e,t,n,r)=>{for(var i=r>1?void 0:r?De(t,n):t,o=e.length-1,c;o>=0;o--)(c=e[o])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&ee(t,n,i),i},X=(e,t)=>(n,r)=>t(n,r,e),te=(e,t,n)=>Te(e,typeof t!="symbol"?t+"":t,n);exports.UniverDocsThreadCommentUIPlugin=class extends s.Plugin{constructor(t={menu:{}},n,r){super(),this._config=t,this._injector=n,this._renderManagerSrv=r}onStarting(t){[[P,{useFactory:()=>this._injector.createInstance(P,this._config)}],[V],[y]].forEach(n=>{t.add(n)})}onRendered(){this._initRenderModule()}_initRenderModule(){[$].forEach(t=>{this._renderManagerSrv.registerRenderModule(s.UniverInstanceType.UNIVER_DOC,t)})}};te(exports.UniverDocsThreadCommentUIPlugin,"pluginName",oe);te(exports.UniverDocsThreadCommentUIPlugin,"type",s.UniverInstanceType.UNIVER_DOC);exports.UniverDocsThreadCommentUIPlugin=ye([s.DependentOn(S.UniverThreadCommentUIPlugin),X(1,C.Inject(C.Injector)),X(2,R.IRenderManagerService)],exports.UniverDocsThreadCommentUIPlugin);exports.AddDocCommentComment=W;exports.DeleteDocCommentComment=H;exports.ShowCommentPanelOperation=x;exports.StartAddCommentOperation=B;
|
|
1
|
+
"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const core=require("@univerjs/core"),threadCommentUi=require("@univerjs/thread-comment-ui"),engineRender=require("@univerjs/engine-render"),ui=require("@univerjs/ui"),docs=require("@univerjs/docs"),threadComment=require("@univerjs/thread-comment"),React=require("react"),rxjs=require("rxjs"),docsUi=require("@univerjs/docs-ui"),PLUGIN_NAME="DOC_THREAD_COMMENT_UI_PLUGIN",DEFAULT_DOC_SUBUNIT_ID="default_doc";var __assign=function(){return __assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)Object.prototype.hasOwnProperty.call(s,p)&&(t[p]=s[p])}return t},__assign.apply(this,arguments)},__rest=function(s,e){var t={};for(var p in s)Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0&&(t[p]=s[p]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++)e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i])&&(t[p[i]]=s[p[i]]);return t},IconBase=React.forwardRef(function(props,ref){var icon=props.icon,id=props.id,className=props.className,extend=props.extend,restProps=__rest(props,["icon","id","className","extend"]),cls="univerjs-icon univerjs-icon-".concat(id," ").concat(className||"").trim(),idSuffix=React.useRef("_".concat(generateShortUuid()));return render(icon,"".concat(id),{defIds:icon.defIds,idSuffix:idSuffix.current},__assign({ref,className:cls},restProps),extend)});function render(node,id,runtimeProps,rootProps,extend){return React.createElement(node.tag,__assign(__assign({key:id},replaceRuntimeIdsAndExtInAttrs(node,runtimeProps,extend)),rootProps),(replaceRuntimeIdsInDefs(node,runtimeProps).children||[]).map(function(child,index){return render(child,"".concat(id,"-").concat(node.tag,"-").concat(index),runtimeProps,void 0,extend)}))}__name(render,"render");function replaceRuntimeIdsAndExtInAttrs(node,runtimeProps,extend){var attrs=__assign({},node.attrs);extend!=null&&extend.colorChannel1&&attrs.fill==="colorChannel1"&&(attrs.fill=extend.colorChannel1);var defIds=runtimeProps.defIds;return!defIds||defIds.length===0||(node.tag==="use"&&attrs["xlink:href"]&&(attrs["xlink:href"]=attrs["xlink:href"]+runtimeProps.idSuffix),Object.entries(attrs).forEach(function(_a6){var key=_a6[0],value=_a6[1];typeof value=="string"&&(attrs[key]=value.replace(/url\(#(.*)\)/,"url(#$1".concat(runtimeProps.idSuffix,")")))})),attrs}__name(replaceRuntimeIdsAndExtInAttrs,"replaceRuntimeIdsAndExtInAttrs");function replaceRuntimeIdsInDefs(node,runtimeProps){var _a6,defIds=runtimeProps.defIds;return!defIds||defIds.length===0?node:node.tag==="defs"&&(!((_a6=node.children)===null||_a6===void 0)&&_a6.length)?__assign(__assign({},node),{children:node.children.map(function(child){return typeof child.attrs.id=="string"&&defIds&&defIds.indexOf(child.attrs.id)>-1?__assign(__assign({},child),{attrs:__assign(__assign({},child.attrs),{id:child.attrs.id+runtimeProps.idSuffix})}):child})}):node}__name(replaceRuntimeIdsInDefs,"replaceRuntimeIdsInDefs");function generateShortUuid(){return Math.random().toString(36).substring(2,8)}__name(generateShortUuid,"generateShortUuid");IconBase.displayName="UniverIcon";var element={tag:"svg",attrs:{fill:"none",viewBox:"0 0 17 17",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521C5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345ZM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521C8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345ZM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521C11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345Z",fillRule:"evenodd",clipRule:"evenodd"}},{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521 5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345zM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521 8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345zM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521 11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345z"}},{tag:"path",attrs:{fill:"currentColor",d:"M1.84351 3.41861C1.84351 3.01861 2.15531 2.69434 2.53993 2.69434H14.9381C15.3228 2.69434 15.6346 3.01861 15.6346 3.41861V12.4611C15.6346 12.8612 15.3228 13.1854 14.9381 13.1854H8.82117L6.06643 14.6179C5.85054 14.7301 5.59416 14.7181 5.38884 14.5862C5.18352 14.4542 5.05855 14.2211 5.05855 13.9701V13.1854H2.53993C2.15531 13.1854 1.84351 12.8612 1.84351 12.4611L1.84351 3.41861ZM6.45141 12.7982L8.34531 12.0135C8.44201 11.9632 8.54864 11.9371 8.65676 11.9371H14.2417C14.3522 11.9371 14.4417 11.8475 14.4417 11.7371V4.14271C14.4417 4.03225 14.3522 3.94271 14.2417 3.94271H3.23636C3.12591 3.94271 3.03636 4.03225 3.03636 4.14271L3.03636 11.7371C3.03636 11.8475 3.12591 11.9371 3.23636 11.9371L5.75498 11.9371C6.1396 11.9371 6.45141 12.0611 6.45141 12.4611V12.7982Z",fillRule:"evenodd",clipRule:"evenodd"}}]},CommentSingle=React.forwardRef(function(props,ref){return React.createElement(IconBase,Object.assign({},props,{id:"comment-single",ref,icon:element}))});CommentSingle.displayName="CommentSingle";const AddDocCommentComment={id:"docs.command.add-comment",type:core.CommandType.COMMAND,async handler(accessor,params){if(!params)return!1;const{comment:originComment,unitId}=params,comment=await accessor.get(threadComment.IThreadCommentDataSourceService).addComment(originComment),commandService=accessor.get(core.ICommandService),doMutation=docs.addCustomDecorationBySelectionFactory(accessor,{id:comment.id,type:core.CustomDecorationType.COMMENT});if(doMutation){const addComment={id:threadComment.AddCommentMutation.id,params:{unitId,subUnitId:DEFAULT_DOC_SUBUNIT_ID,comment}},activeOperation={id:threadCommentUi.SetActiveCommentOperation.id,params:{unitId,subUnitId:DEFAULT_DOC_SUBUNIT_ID,commentId:comment.id}};return(await core.sequenceExecuteAsync([addComment,doMutation,activeOperation],commandService)).result}return!1}};var __defProp$4=Object.defineProperty,__getOwnPropDesc$4=Object.getOwnPropertyDescriptor,__decorateClass$4=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$4(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$4(target,key,result),result},"__decorateClass$4"),__decorateParam$4=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$4"),_a;let DocThreadCommentService=(_a=class extends core.Disposable{constructor(_sidebarService,_threadCommentPanelService){super();__publicField(this,"_addingComment$",new rxjs.BehaviorSubject(void 0));__publicField(this,"addingComment$",this._addingComment$.asObservable());this._sidebarService=_sidebarService,this._threadCommentPanelService=_threadCommentPanelService,this.disposeWithMe(()=>{this._addingComment$.complete()})}get addingComment(){return this._addingComment$.getValue()}startAdd(comment){this._addingComment$.next(comment)}endAdd(){this._addingComment$.next(void 0)}},__name(_a,"DocThreadCommentService"),_a);DocThreadCommentService=__decorateClass$4([__decorateParam$4(0,ui.ISidebarService),__decorateParam$4(1,core.Inject(threadCommentUi.ThreadCommentPanelService))],DocThreadCommentService);const ShowCommentPanelOperation={id:"docs.operation.show-comment-panel",type:core.CommandType.OPERATION,handler(accessor,params){const panelService=accessor.get(threadCommentUi.ThreadCommentPanelService),sidebarService=accessor.get(ui.ISidebarService);return panelService.panelVisible||(sidebarService.open({header:{title:"threadCommentUI.panel.title"},children:{label:DocThreadCommentPanel.componentKey},width:320,onClose:__name(()=>panelService.setPanelVisible(!1),"onClose")}),panelService.setPanelVisible(!0)),params&&panelService.setActiveComment(params==null?void 0:params.activeComment),!0}},ToggleCommentPanelOperation={id:"docs.operation.toggle-comment-panel",type:core.CommandType.OPERATION,handler(accessor){const panelService=accessor.get(threadCommentUi.ThreadCommentPanelService),sidebarService=accessor.get(ui.ISidebarService);return panelService.panelVisible?(sidebarService.close(),panelService.setPanelVisible(!1),panelService.setActiveComment(null)):(sidebarService.open({header:{title:"threadCommentUI.panel.title"},children:{label:DocThreadCommentPanel.componentKey},width:320,onClose:__name(()=>panelService.setPanelVisible(!1),"onClose")}),panelService.setPanelVisible(!0)),!0}},StartAddCommentOperation={id:"docs.operation.start-add-comment",type:core.CommandType.OPERATION,handler(accessor){var _a6,_b;const panelService=accessor.get(threadCommentUi.ThreadCommentPanelService),doc=accessor.get(core.IUniverInstanceService).getCurrentUnitForType(core.UniverInstanceType.UNIVER_DOC),textSelectionManagerService=accessor.get(docs.TextSelectionManagerService),textSelectionRenderService=accessor.get(engineRender.ITextSelectionRenderManager),userManagerService=accessor.get(core.UserManagerService),docCommentService=accessor.get(DocThreadCommentService),commandService=accessor.get(core.ICommandService),sidebarService=accessor.get(ui.ISidebarService),textRange=textSelectionManagerService.getActiveRange();if(!doc||!textRange)return!1;if(textRange.collapsed)return panelService.panelVisible?(panelService.setPanelVisible(!1),sidebarService.close()):commandService.executeCommand(ShowCommentPanelOperation.id),!0;panelService.panelVisible||commandService.executeCommand(ShowCommentPanelOperation.id);const unitId=doc.getUnitId(),text=docs.getSelectionText((_b=(_a6=doc.getBody())==null?void 0:_a6.dataStream)!=null?_b:"",textRange.startOffset,textRange.endOffset),subUnitId=DEFAULT_DOC_SUBUNIT_ID,commentId="",comment={unitId,subUnitId,id:commentId,ref:text,dT:threadCommentUi.getDT(),personId:userManagerService.getCurrentUser().userID,text:{dataStream:`\r
|
|
2
|
+
`},startOffset:textRange.startOffset,endOffset:textRange.endOffset,collapsed:!0,threadId:commentId};return textSelectionRenderService.blurEditor(),docCommentService.startAdd(comment),panelService.setActiveComment({unitId,subUnitId,commentId}),!0}},DeleteDocCommentComment={id:"docs.command.delete-comment",type:core.CommandType.COMMAND,async handler(accessor,params){if(!params)return!1;const{commentId,unitId}=params,commandService=accessor.get(core.ICommandService),doMutation=docs.deleteCustomDecorationFactory(accessor,{id:commentId,unitId});return doMutation?(await core.sequenceExecute([doMutation],commandService)).result:!1}},DocThreadCommentPanel=__name(()=>{const univerInstanceService=core.useDependency(core.IUniverInstanceService),doc$=React.useMemo(()=>univerInstanceService.getCurrentTypeOfUnit$(core.UniverInstanceType.UNIVER_DOC),[univerInstanceService]),doc=core.useObservable(doc$),subUnitId$=React.useMemo(()=>new rxjs.Observable(sub=>sub.next(DEFAULT_DOC_SUBUNIT_ID)),[]),textSelectionManagerService=core.useDependency(docs.TextSelectionManagerService),selectionChange$=React.useMemo(()=>textSelectionManagerService.textSelection$.pipe(rxjs.debounceTime(16)),[textSelectionManagerService.textSelection$]);core.useObservable(selectionChange$);const commandService=core.useDependency(core.ICommandService),docCommentService=core.useDependency(DocThreadCommentService),tempComment=core.useObservable(docCommentService.addingComment$),[commentIds,setCommentIds]=React.useState([]);if(React.useEffect(()=>{var _a6;const set=new Set,customRanges=doc==null?void 0:doc.getCustomDecorations();setCommentIds((_a6=customRanges==null?void 0:customRanges.map(r=>r.id).filter(i=>{const hasRepeat=set.has(i);return set.add(i),!hasRepeat}))!=null?_a6:[]);const dispose=commandService.onCommandExecuted(command=>{var _a7;if(command.id===docs.RichTextEditingMutation.id){const set2=new Set,customRanges2=doc==null?void 0:doc.getCustomDecorations();setCommentIds((_a7=customRanges2==null?void 0:customRanges2.map(r=>r.id).filter(i=>{const hasRepeat=set2.has(i);return set2.add(i),!hasRepeat}))!=null?_a7:[])}});return()=>{dispose.dispose()}},[commandService,doc]),!doc)return null;const activeRange=textSelectionManagerService.getActiveRange(),isInValidSelection=!!(activeRange&&(activeRange.endOffset===activeRange.startOffset||activeRange.segmentId)),unitId=doc.getUnitId();return React.createElement(threadCommentUi.ThreadCommentPanel,{unitId,subUnitId$,type:core.UniverInstanceType.UNIVER_DOC,onAdd:__name(()=>{commandService.executeCommand(StartAddCommentOperation.id)},"onAdd"),getSubUnitName:__name(()=>"","getSubUnitName"),disableAdd:isInValidSelection,tempComment,onAddComment:__name(comment=>{if(!comment.parentId){const params={unitId,range:tempComment,comment};return commandService.executeCommand(AddDocCommentComment.id,params),docCommentService.endAdd(),!1}return!0},"onAddComment"),onDeleteComment:__name(comment=>{if(!comment.parentId){const params={unitId,commentId:comment.id};return commandService.executeCommand(DeleteDocCommentComment.id,params),!1}return!0},"onDeleteComment"),showComments:commentIds})},"DocThreadCommentPanel");DocThreadCommentPanel.componentKey="univer.doc.thread-comment-panel";const shouldDisableAddComment=__name(accessor=>{const renderManagerService=accessor.get(engineRender.IRenderManagerService),textSelectionManagerService=accessor.get(docs.TextSelectionManagerService),render2=renderManagerService.getCurrent(),skeleton=render2==null?void 0:render2.with(docs.DocSkeletonManagerService).getSkeleton(),editArea=skeleton==null?void 0:skeleton.getViewModel().getEditArea();if(editArea===engineRender.DocumentEditArea.FOOTER||editArea===engineRender.DocumentEditArea.HEADER)return!0;const range=textSelectionManagerService.getActiveRange();return!!(!range||range.collapsed)},"shouldDisableAddComment");function AddDocCommentMenuItemFactory(accessor){return{id:StartAddCommentOperation.id,group:ui.MenuGroup.CONTEXT_MENU_DATA,type:ui.MenuItemType.BUTTON,icon:"CommentSingle",title:"threadCommentUI.panel.addComment",tooltip:"threadCommentUI.panel.addComment",positions:[ui.MenuPosition.CONTEXT_MENU],hidden$:ui.getMenuHiddenObservable(accessor,core.UniverInstanceType.UNIVER_DOC),disabled$:new rxjs.Observable(function(subscribe){const observer=accessor.get(docs.TextSelectionManagerService).textSelection$.pipe(rxjs.debounceTime(16)).subscribe(()=>{subscribe.next(shouldDisableAddComment(accessor))});return()=>{observer.unsubscribe()}})}}__name(AddDocCommentMenuItemFactory,"AddDocCommentMenuItemFactory");function ToolbarDocCommentMenuItemFactory(accessor){return{id:ToggleCommentPanelOperation.id,group:ui.MenuGroup.CONTEXT_MENU_DATA,type:ui.MenuItemType.BUTTON,icon:"CommentSingle",title:"threadCommentUI.panel.addComment",tooltip:"threadCommentUI.panel.addComment",positions:[ui.MenuPosition.TOOLBAR_START],hidden$:ui.getMenuHiddenObservable(accessor,core.UniverInstanceType.UNIVER_DOC)}}__name(ToolbarDocCommentMenuItemFactory,"ToolbarDocCommentMenuItemFactory");var __defProp$3=Object.defineProperty,__getOwnPropDesc$3=Object.getOwnPropertyDescriptor,__decorateClass$3=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$3(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$3(target,key,result),result},"__decorateClass$3"),__decorateParam$3=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$3"),_a2;let DocThreadCommentUIController=(_a2=class extends core.Disposable{constructor(_config,_commandService,_menuService,_injector,_componentManager){super(),this._config=_config,this._commandService=_commandService,this._menuService=_menuService,this._injector=_injector,this._componentManager=_componentManager,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[AddDocCommentComment,DeleteDocCommentComment,ShowCommentPanelOperation,StartAddCommentOperation,ToggleCommentPanelOperation].forEach(command=>{this.disposeWithMe(this._commandService.registerCommand(command))})}_initMenus(){[AddDocCommentMenuItemFactory,ToolbarDocCommentMenuItemFactory].forEach(menuFactory=>{this.disposeWithMe(this._menuService.addMenuItem(menuFactory(this._injector),this._config.menu))})}_initComponents(){[DocThreadCommentPanel].forEach(comp=>{this.disposeWithMe(this._componentManager.register(comp.componentKey,comp))}),this.disposeWithMe(this._componentManager.register("CommentSingle",CommentSingle))}},__name(_a2,"DocThreadCommentUIController"),_a2);DocThreadCommentUIController=__decorateClass$3([core.OnLifecycle(core.LifecycleStages.Rendered,DocThreadCommentUIController),__decorateParam$3(1,core.ICommandService),__decorateParam$3(2,ui.IMenuService),__decorateParam$3(3,core.Inject(core.Injector)),__decorateParam$3(4,core.Inject(ui.ComponentManager))],DocThreadCommentUIController);var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2"),_a3;let DocThreadCommentSelectionController=(_a3=class extends core.Disposable{constructor(_threadCommentPanelService,_univerInstanceService,_commandService,_docThreadCommentService,_renderManagerService,_threadCommentModel){super(),this._threadCommentPanelService=_threadCommentPanelService,this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._docThreadCommentService=_docThreadCommentService,this._renderManagerService=_renderManagerService,this._threadCommentModel=_threadCommentModel,this._initSelectionChange(),this._initActiveCommandChange()}_initSelectionChange(){let lastSelection;this.disposeWithMe(this._commandService.onCommandExecuted(commandInfo=>{var _a6,_b,_c,_d;if(commandInfo.id===docs.SetTextSelectionsOperation.id){const params=commandInfo.params,{unitId,ranges}=params,doc=this._univerInstanceService.getUnit(unitId,core.UniverInstanceType.UNIVER_DOC),primary=ranges[0];if((lastSelection==null?void 0:lastSelection.startOffset)===(primary==null?void 0:primary.startOffset)&&(lastSelection==null?void 0:lastSelection.endOffset)===(primary==null?void 0:primary.endOffset))return;if(lastSelection=primary,primary&&doc){const{startOffset,endOffset,collapsed}=primary;let customRange;if(collapsed?customRange=(_b=(_a6=doc.getBody())==null?void 0:_a6.customDecorations)==null?void 0:_b.find(value=>value.startIndex<=startOffset&&value.endIndex>=endOffset-1):customRange=(_d=(_c=doc.getBody())==null?void 0:_c.customDecorations)==null?void 0:_d.find(value=>value.startIndex<=startOffset&&value.endIndex>=endOffset-1),customRange){const comment=this._threadCommentModel.getComment(unitId,DEFAULT_DOC_SUBUNIT_ID,customRange.id);comment&&!comment.resolved&&this._commandService.executeCommand(ShowCommentPanelOperation.id,{activeComment:{unitId,subUnitId:DEFAULT_DOC_SUBUNIT_ID,commentId:customRange.id}});return}}this._commandService.executeCommand(threadCommentUi.SetActiveCommentOperation.id)}}))}_initActiveCommandChange(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(activeComment=>{var _a6,_b,_c;if(activeComment){const doc=this._univerInstanceService.getUnit(activeComment.unitId);if(doc){const backScrollController=(_a6=this._renderManagerService.getRenderById(activeComment.unitId))==null?void 0:_a6.with(docsUi.DocBackScrollRenderController),customRange=(_b=doc.getCustomRanges())==null?void 0:_b.find(range=>range.rangeId===activeComment.commentId);customRange&&backScrollController&&backScrollController.scrollToRange(activeComment.unitId,{startOffset:customRange.startIndex,endOffset:customRange.endIndex,collapsed:!1})}}(!activeComment||activeComment.commentId!==((_c=this._docThreadCommentService.addingComment)==null?void 0:_c.id))&&this._docThreadCommentService.endAdd()}))}},__name(_a3,"DocThreadCommentSelectionController"),_a3);DocThreadCommentSelectionController=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Rendered,DocThreadCommentSelectionController),__decorateParam$2(0,core.Inject(threadCommentUi.ThreadCommentPanelService)),__decorateParam$2(1,core.IUniverInstanceService),__decorateParam$2(2,core.ICommandService),__decorateParam$2(3,core.Inject(DocThreadCommentService)),__decorateParam$2(4,engineRender.IRenderManagerService),__decorateParam$2(5,core.Inject(threadComment.ThreadCommentModel))],DocThreadCommentSelectionController);var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1"),_a4;let DocThreadCommentRenderController=(_a4=class extends core.Disposable{constructor(_context,_docInterceptorService,_threadCommentPanelService,_docRenderController,_univerInstanceService,_threadCommentModel){super(),this._context=_context,this._docInterceptorService=_docInterceptorService,this._threadCommentPanelService=_threadCommentPanelService,this._docRenderController=_docRenderController,this._univerInstanceService=_univerInstanceService,this._threadCommentModel=_threadCommentModel,this._interceptorViewModel(),this._initReRender()}_initReRender(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(activeComment=>{var _a6;if(activeComment){this._docRenderController.reRender(activeComment.unitId);return}const unitId=(_a6=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_DOC))==null?void 0:_a6.getUnitId();unitId&&this._docRenderController.reRender(unitId)})),this.disposeWithMe(this._threadCommentModel.commentUpdate$.subscribe(update=>{update.type==="resolve"&&this._docRenderController.reRender(update.unitId)}))}_interceptorViewModel(){this._docInterceptorService.intercept(docs.DOC_INTERCEPTOR_POINT.CUSTOM_DECORATION,{handler:__name((data,pos,next)=>{if(!data)return next(data);const{unitId,index,customDecorations}=pos,activeComment=this._threadCommentPanelService.activeCommentId,{commentId,unitId:commentUnitID}=activeComment||{},activeCustomDecoration=customDecorations.find(i=>i.id===commentId),comment=this._threadCommentModel.getComment(unitId,DEFAULT_DOC_SUBUNIT_ID,data.id);if(!comment)return next({...data,show:!1});const isActiveIndex=activeCustomDecoration&&index>=activeCustomDecoration.startIndex&&index<=activeCustomDecoration.endIndex,isActive=commentUnitID===unitId&&data.id===commentId;return next({...data,active:isActive||isActiveIndex,show:!comment.resolved})},"handler")})}},__name(_a4,"DocThreadCommentRenderController"),_a4);DocThreadCommentRenderController=__decorateClass$1([core.OnLifecycle(core.LifecycleStages.Starting,DocThreadCommentRenderController),__decorateParam$1(1,core.Inject(docs.DocInterceptorService)),__decorateParam$1(2,core.Inject(threadCommentUi.ThreadCommentPanelService)),__decorateParam$1(3,core.Inject(docsUi.DocRenderController)),__decorateParam$1(4,core.IUniverInstanceService),__decorateParam$1(5,core.Inject(threadComment.ThreadCommentModel))],DocThreadCommentRenderController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp2=__name((obj,key,value)=>key in obj?__defProp2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,"__defNormalProp"),__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam"),__publicField2=__name((obj,key,value)=>__defNormalProp2(obj,typeof key!="symbol"?key+"":key,value),"__publicField"),_a5;exports.UniverDocsThreadCommentUIPlugin=(_a5=class extends core.Plugin{constructor(_config={menu:{}},_injector,_renderManagerSrv){super(),this._config=_config,this._injector=_injector,this._renderManagerSrv=_renderManagerSrv}onStarting(){[[DocThreadCommentUIController,{useFactory:__name(()=>this._injector.createInstance(DocThreadCommentUIController,this._config),"useFactory")}],[DocThreadCommentSelectionController],[DocThreadCommentService]].forEach(dep=>{this._injector.add(dep)})}onRendered(){this._initRenderModule()}_initRenderModule(){[DocThreadCommentRenderController].forEach(dep=>{this._renderManagerSrv.registerRenderModule(core.UniverInstanceType.UNIVER_DOC,dep)})}},__name(_a5,"UniverDocsThreadCommentUIPlugin"),_a5);__publicField2(exports.UniverDocsThreadCommentUIPlugin,"pluginName",PLUGIN_NAME);__publicField2(exports.UniverDocsThreadCommentUIPlugin,"type",core.UniverInstanceType.UNIVER_DOC);exports.UniverDocsThreadCommentUIPlugin=__decorateClass([core.DependentOn(threadCommentUi.UniverThreadCommentUIPlugin),__decorateParam(1,core.Inject(core.Injector)),__decorateParam(2,engineRender.IRenderManagerService)],exports.UniverDocsThreadCommentUIPlugin);exports.AddDocCommentComment=AddDocCommentComment;exports.DeleteDocCommentComment=DeleteDocCommentComment;exports.ShowCommentPanelOperation=ShowCommentPanelOperation;exports.StartAddCommentOperation=StartAddCommentOperation;
|
package/lib/es/index.js
CHANGED
|
@@ -1,469 +1,512 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
import { Inject
|
|
6
|
-
import { SetActiveCommentOperation
|
|
7
|
-
import { IRenderManagerService
|
|
8
|
-
import { ISidebarService
|
|
9
|
-
import { addCustomDecorationBySelectionFactory
|
|
10
|
-
import { IThreadCommentDataSourceService
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
t =
|
|
20
|
-
for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
|
|
5
|
+
import { CommandType, ICommandService, CustomDecorationType, sequenceExecuteAsync, Inject, Disposable, IUniverInstanceService, UniverInstanceType, UserManagerService, sequenceExecute, useDependency, useObservable, OnLifecycle, LifecycleStages, Injector, DependentOn, Plugin } from "@univerjs/core";
|
|
6
|
+
import { SetActiveCommentOperation, ThreadCommentPanelService, getDT, ThreadCommentPanel, UniverThreadCommentUIPlugin } from "@univerjs/thread-comment-ui";
|
|
7
|
+
import { ITextSelectionRenderManager, IRenderManagerService, DocumentEditArea } from "@univerjs/engine-render";
|
|
8
|
+
import { ISidebarService, MenuGroup, MenuItemType, MenuPosition, getMenuHiddenObservable, ComponentManager, IMenuService } from "@univerjs/ui";
|
|
9
|
+
import { addCustomDecorationBySelectionFactory, TextSelectionManagerService, getSelectionText, deleteCustomDecorationFactory, RichTextEditingMutation, DocSkeletonManagerService, SetTextSelectionsOperation, DocInterceptorService, DOC_INTERCEPTOR_POINT } from "@univerjs/docs";
|
|
10
|
+
import { IThreadCommentDataSourceService, AddCommentMutation, ThreadCommentModel } from "@univerjs/thread-comment";
|
|
11
|
+
import React, { forwardRef, useRef, createElement, useMemo, useState, useEffect } from "react";
|
|
12
|
+
import { BehaviorSubject, Observable, debounceTime } from "rxjs";
|
|
13
|
+
import { DocBackScrollRenderController, DocRenderController } from "@univerjs/docs-ui";
|
|
14
|
+
const PLUGIN_NAME = "DOC_THREAD_COMMENT_UI_PLUGIN", DEFAULT_DOC_SUBUNIT_ID = "default_doc";
|
|
15
|
+
var __assign = function() {
|
|
16
|
+
return __assign = Object.assign || function(t) {
|
|
17
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
18
|
+
s = arguments[i];
|
|
19
|
+
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && (t[p] = s[p]);
|
|
21
20
|
}
|
|
22
|
-
return
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
var
|
|
26
|
-
for (var
|
|
27
|
-
if (
|
|
28
|
-
for (var i = 0,
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
},
|
|
32
|
-
var
|
|
33
|
-
return
|
|
21
|
+
return t;
|
|
22
|
+
}, __assign.apply(this, arguments);
|
|
23
|
+
}, __rest = function(s, e) {
|
|
24
|
+
var t = {};
|
|
25
|
+
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
|
|
26
|
+
if (s != null && typeof Object.getOwnPropertySymbols == "function")
|
|
27
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++)
|
|
28
|
+
e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
|
|
29
|
+
return t;
|
|
30
|
+
}, IconBase = forwardRef(function(props, ref) {
|
|
31
|
+
var icon = props.icon, id = props.id, className = props.className, extend = props.extend, restProps = __rest(props, ["icon", "id", "className", "extend"]), cls = "univerjs-icon univerjs-icon-".concat(id, " ").concat(className || "").trim(), idSuffix = useRef("_".concat(generateShortUuid()));
|
|
32
|
+
return render(icon, "".concat(id), { defIds: icon.defIds, idSuffix: idSuffix.current }, __assign({ ref, className: cls }, restProps), extend);
|
|
34
33
|
});
|
|
35
|
-
function
|
|
36
|
-
return
|
|
37
|
-
return
|
|
34
|
+
function render(node, id, runtimeProps, rootProps, extend) {
|
|
35
|
+
return createElement(node.tag, __assign(__assign({ key: id }, replaceRuntimeIdsAndExtInAttrs(node, runtimeProps, extend)), rootProps), (replaceRuntimeIdsInDefs(node, runtimeProps).children || []).map(function(child, index) {
|
|
36
|
+
return render(child, "".concat(id, "-").concat(node.tag, "-").concat(index), runtimeProps, void 0, extend);
|
|
38
37
|
}));
|
|
39
38
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
__name(render, "render");
|
|
40
|
+
function replaceRuntimeIdsAndExtInAttrs(node, runtimeProps, extend) {
|
|
41
|
+
var attrs = __assign({}, node.attrs);
|
|
42
|
+
extend != null && extend.colorChannel1 && attrs.fill === "colorChannel1" && (attrs.fill = extend.colorChannel1);
|
|
43
|
+
var defIds = runtimeProps.defIds;
|
|
44
|
+
return !defIds || defIds.length === 0 || (node.tag === "use" && attrs["xlink:href"] && (attrs["xlink:href"] = attrs["xlink:href"] + runtimeProps.idSuffix), Object.entries(attrs).forEach(function(_a6) {
|
|
45
|
+
var key = _a6[0], value = _a6[1];
|
|
46
|
+
typeof value == "string" && (attrs[key] = value.replace(/url\(#(.*)\)/, "url(#$1".concat(runtimeProps.idSuffix, ")")));
|
|
47
|
+
})), attrs;
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
__name(replaceRuntimeIdsAndExtInAttrs, "replaceRuntimeIdsAndExtInAttrs");
|
|
50
|
+
function replaceRuntimeIdsInDefs(node, runtimeProps) {
|
|
51
|
+
var _a6, defIds = runtimeProps.defIds;
|
|
52
|
+
return !defIds || defIds.length === 0 ? node : node.tag === "defs" && (!((_a6 = node.children) === null || _a6 === void 0) && _a6.length) ? __assign(__assign({}, node), { children: node.children.map(function(child) {
|
|
53
|
+
return typeof child.attrs.id == "string" && defIds && defIds.indexOf(child.attrs.id) > -1 ? __assign(__assign({}, child), { attrs: __assign(__assign({}, child.attrs), { id: child.attrs.id + runtimeProps.idSuffix }) }) : child;
|
|
54
|
+
}) }) : node;
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
+
__name(replaceRuntimeIdsInDefs, "replaceRuntimeIdsInDefs");
|
|
57
|
+
function generateShortUuid() {
|
|
56
58
|
return Math.random().toString(36).substring(2, 8);
|
|
57
59
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
__name(generateShortUuid, "generateShortUuid");
|
|
61
|
+
IconBase.displayName = "UniverIcon";
|
|
62
|
+
var element = { tag: "svg", attrs: { fill: "none", viewBox: "0 0 17 17", width: "1em", height: "1em" }, children: [{ tag: "path", attrs: { fill: "currentColor", d: "M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521C5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345ZM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521C8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345ZM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521C11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345Z", fillRule: "evenodd", clipRule: "evenodd" } }, { tag: "path", attrs: { fill: "currentColor", d: "M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521 5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345zM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521 8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345zM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521 11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345z" } }, { tag: "path", attrs: { fill: "currentColor", d: "M1.84351 3.41861C1.84351 3.01861 2.15531 2.69434 2.53993 2.69434H14.9381C15.3228 2.69434 15.6346 3.01861 15.6346 3.41861V12.4611C15.6346 12.8612 15.3228 13.1854 14.9381 13.1854H8.82117L6.06643 14.6179C5.85054 14.7301 5.59416 14.7181 5.38884 14.5862C5.18352 14.4542 5.05855 14.2211 5.05855 13.9701V13.1854H2.53993C2.15531 13.1854 1.84351 12.8612 1.84351 12.4611L1.84351 3.41861ZM6.45141 12.7982L8.34531 12.0135C8.44201 11.9632 8.54864 11.9371 8.65676 11.9371H14.2417C14.3522 11.9371 14.4417 11.8475 14.4417 11.7371V4.14271C14.4417 4.03225 14.3522 3.94271 14.2417 3.94271H3.23636C3.12591 3.94271 3.03636 4.03225 3.03636 4.14271L3.03636 11.7371C3.03636 11.8475 3.12591 11.9371 3.23636 11.9371L5.75498 11.9371C6.1396 11.9371 6.45141 12.0611 6.45141 12.4611V12.7982Z", fillRule: "evenodd", clipRule: "evenodd" } }] }, CommentSingle = forwardRef(function(props, ref) {
|
|
63
|
+
return createElement(IconBase, Object.assign({}, props, {
|
|
61
64
|
id: "comment-single",
|
|
62
|
-
ref
|
|
63
|
-
icon:
|
|
65
|
+
ref,
|
|
66
|
+
icon: element
|
|
64
67
|
}));
|
|
65
68
|
});
|
|
66
|
-
|
|
67
|
-
const
|
|
69
|
+
CommentSingle.displayName = "CommentSingle";
|
|
70
|
+
const AddDocCommentComment = {
|
|
68
71
|
id: "docs.command.add-comment",
|
|
69
|
-
type:
|
|
70
|
-
async handler(
|
|
71
|
-
if (!
|
|
72
|
+
type: CommandType.COMMAND,
|
|
73
|
+
async handler(accessor, params) {
|
|
74
|
+
if (!params)
|
|
72
75
|
return !1;
|
|
73
|
-
const { comment:
|
|
74
|
-
|
|
76
|
+
const { comment: originComment, unitId } = params, comment = await accessor.get(IThreadCommentDataSourceService).addComment(originComment), commandService = accessor.get(ICommandService), doMutation = addCustomDecorationBySelectionFactory(
|
|
77
|
+
accessor,
|
|
75
78
|
{
|
|
76
|
-
id:
|
|
77
|
-
type:
|
|
79
|
+
id: comment.id,
|
|
80
|
+
type: CustomDecorationType.COMMENT
|
|
78
81
|
}
|
|
79
82
|
);
|
|
80
|
-
if (
|
|
81
|
-
const
|
|
82
|
-
id:
|
|
83
|
+
if (doMutation) {
|
|
84
|
+
const addComment = {
|
|
85
|
+
id: AddCommentMutation.id,
|
|
83
86
|
params: {
|
|
84
|
-
unitId
|
|
85
|
-
subUnitId:
|
|
86
|
-
comment
|
|
87
|
+
unitId,
|
|
88
|
+
subUnitId: DEFAULT_DOC_SUBUNIT_ID,
|
|
89
|
+
comment
|
|
87
90
|
}
|
|
88
|
-
},
|
|
89
|
-
id:
|
|
91
|
+
}, activeOperation = {
|
|
92
|
+
id: SetActiveCommentOperation.id,
|
|
90
93
|
params: {
|
|
91
|
-
unitId
|
|
92
|
-
subUnitId:
|
|
93
|
-
commentId:
|
|
94
|
+
unitId,
|
|
95
|
+
subUnitId: DEFAULT_DOC_SUBUNIT_ID,
|
|
96
|
+
commentId: comment.id
|
|
94
97
|
}
|
|
95
98
|
};
|
|
96
|
-
return (await
|
|
99
|
+
return (await sequenceExecuteAsync([addComment, doMutation, activeOperation], commandService)).result;
|
|
97
100
|
}
|
|
98
101
|
return !1;
|
|
99
102
|
}
|
|
100
103
|
};
|
|
101
|
-
var
|
|
102
|
-
for (var
|
|
103
|
-
(
|
|
104
|
-
return
|
|
105
|
-
},
|
|
106
|
-
let
|
|
107
|
-
constructor(
|
|
104
|
+
var __defProp$4 = Object.defineProperty, __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor, __decorateClass$4 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
105
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
106
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
107
|
+
return kind && result && __defProp$4(target, key, result), result;
|
|
108
|
+
}, "__decorateClass$4"), __decorateParam$4 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$4"), _a;
|
|
109
|
+
let DocThreadCommentService = (_a = class extends Disposable {
|
|
110
|
+
constructor(_sidebarService, _threadCommentPanelService) {
|
|
108
111
|
super();
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
this._sidebarService =
|
|
112
|
+
__publicField(this, "_addingComment$", new BehaviorSubject(void 0));
|
|
113
|
+
__publicField(this, "addingComment$", this._addingComment$.asObservable());
|
|
114
|
+
this._sidebarService = _sidebarService, this._threadCommentPanelService = _threadCommentPanelService, this.disposeWithMe(() => {
|
|
112
115
|
this._addingComment$.complete();
|
|
113
116
|
});
|
|
114
117
|
}
|
|
115
118
|
get addingComment() {
|
|
116
119
|
return this._addingComment$.getValue();
|
|
117
120
|
}
|
|
118
|
-
startAdd(
|
|
119
|
-
this._addingComment$.next(
|
|
121
|
+
startAdd(comment) {
|
|
122
|
+
this._addingComment$.next(comment);
|
|
120
123
|
}
|
|
121
124
|
endAdd() {
|
|
122
125
|
this._addingComment$.next(void 0);
|
|
123
126
|
}
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
],
|
|
129
|
-
const
|
|
127
|
+
}, __name(_a, "DocThreadCommentService"), _a);
|
|
128
|
+
DocThreadCommentService = __decorateClass$4([
|
|
129
|
+
__decorateParam$4(0, ISidebarService),
|
|
130
|
+
__decorateParam$4(1, Inject(ThreadCommentPanelService))
|
|
131
|
+
], DocThreadCommentService);
|
|
132
|
+
const ShowCommentPanelOperation = {
|
|
130
133
|
id: "docs.operation.show-comment-panel",
|
|
131
|
-
type:
|
|
132
|
-
handler(
|
|
133
|
-
const
|
|
134
|
-
return
|
|
134
|
+
type: CommandType.OPERATION,
|
|
135
|
+
handler(accessor, params) {
|
|
136
|
+
const panelService = accessor.get(ThreadCommentPanelService), sidebarService = accessor.get(ISidebarService);
|
|
137
|
+
return panelService.panelVisible || (sidebarService.open({
|
|
138
|
+
header: { title: "threadCommentUI.panel.title" },
|
|
139
|
+
children: { label: DocThreadCommentPanel.componentKey },
|
|
140
|
+
width: 320,
|
|
141
|
+
onClose: /* @__PURE__ */ __name(() => panelService.setPanelVisible(!1), "onClose")
|
|
142
|
+
}), panelService.setPanelVisible(!0)), params && panelService.setActiveComment(params == null ? void 0 : params.activeComment), !0;
|
|
143
|
+
}
|
|
144
|
+
}, ToggleCommentPanelOperation = {
|
|
145
|
+
id: "docs.operation.toggle-comment-panel",
|
|
146
|
+
type: CommandType.OPERATION,
|
|
147
|
+
handler(accessor) {
|
|
148
|
+
const panelService = accessor.get(ThreadCommentPanelService), sidebarService = accessor.get(ISidebarService);
|
|
149
|
+
return panelService.panelVisible ? (sidebarService.close(), panelService.setPanelVisible(!1), panelService.setActiveComment(null)) : (sidebarService.open({
|
|
135
150
|
header: { title: "threadCommentUI.panel.title" },
|
|
136
|
-
children: { label:
|
|
151
|
+
children: { label: DocThreadCommentPanel.componentKey },
|
|
137
152
|
width: 320,
|
|
138
|
-
onClose: () =>
|
|
139
|
-
}),
|
|
153
|
+
onClose: /* @__PURE__ */ __name(() => panelService.setPanelVisible(!1), "onClose")
|
|
154
|
+
}), panelService.setPanelVisible(!0)), !0;
|
|
140
155
|
}
|
|
141
|
-
},
|
|
156
|
+
}, StartAddCommentOperation = {
|
|
142
157
|
id: "docs.operation.start-add-comment",
|
|
143
|
-
type:
|
|
144
|
-
handler(
|
|
145
|
-
var
|
|
146
|
-
const
|
|
147
|
-
if (!
|
|
158
|
+
type: CommandType.OPERATION,
|
|
159
|
+
handler(accessor) {
|
|
160
|
+
var _a6, _b;
|
|
161
|
+
const panelService = accessor.get(ThreadCommentPanelService), doc = accessor.get(IUniverInstanceService).getCurrentUnitForType(UniverInstanceType.UNIVER_DOC), textSelectionManagerService = accessor.get(TextSelectionManagerService), textSelectionRenderService = accessor.get(ITextSelectionRenderManager), userManagerService = accessor.get(UserManagerService), docCommentService = accessor.get(DocThreadCommentService), commandService = accessor.get(ICommandService), sidebarService = accessor.get(ISidebarService), textRange = textSelectionManagerService.getActiveRange();
|
|
162
|
+
if (!doc || !textRange)
|
|
148
163
|
return !1;
|
|
149
|
-
if (
|
|
150
|
-
return
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
unitId
|
|
154
|
-
subUnitId
|
|
155
|
-
id:
|
|
156
|
-
ref:
|
|
157
|
-
dT:
|
|
158
|
-
personId:
|
|
164
|
+
if (textRange.collapsed)
|
|
165
|
+
return panelService.panelVisible ? (panelService.setPanelVisible(!1), sidebarService.close()) : commandService.executeCommand(ShowCommentPanelOperation.id), !0;
|
|
166
|
+
panelService.panelVisible || commandService.executeCommand(ShowCommentPanelOperation.id);
|
|
167
|
+
const unitId = doc.getUnitId(), text = getSelectionText((_b = (_a6 = doc.getBody()) == null ? void 0 : _a6.dataStream) != null ? _b : "", textRange.startOffset, textRange.endOffset), subUnitId = DEFAULT_DOC_SUBUNIT_ID, commentId = "", comment = {
|
|
168
|
+
unitId,
|
|
169
|
+
subUnitId,
|
|
170
|
+
id: commentId,
|
|
171
|
+
ref: text,
|
|
172
|
+
dT: getDT(),
|
|
173
|
+
personId: userManagerService.getCurrentUser().userID,
|
|
159
174
|
text: {
|
|
160
175
|
dataStream: `\r
|
|
161
176
|
`
|
|
162
177
|
},
|
|
163
|
-
startOffset:
|
|
164
|
-
endOffset:
|
|
178
|
+
startOffset: textRange.startOffset,
|
|
179
|
+
endOffset: textRange.endOffset,
|
|
165
180
|
collapsed: !0,
|
|
166
|
-
threadId:
|
|
181
|
+
threadId: commentId
|
|
167
182
|
};
|
|
168
|
-
return
|
|
169
|
-
unitId
|
|
170
|
-
subUnitId
|
|
171
|
-
commentId
|
|
183
|
+
return textSelectionRenderService.blurEditor(), docCommentService.startAdd(comment), panelService.setActiveComment({
|
|
184
|
+
unitId,
|
|
185
|
+
subUnitId,
|
|
186
|
+
commentId
|
|
172
187
|
}), !0;
|
|
173
188
|
}
|
|
174
|
-
},
|
|
189
|
+
}, DeleteDocCommentComment = {
|
|
175
190
|
id: "docs.command.delete-comment",
|
|
176
|
-
type:
|
|
177
|
-
async handler(
|
|
178
|
-
if (!
|
|
191
|
+
type: CommandType.COMMAND,
|
|
192
|
+
async handler(accessor, params) {
|
|
193
|
+
if (!params)
|
|
179
194
|
return !1;
|
|
180
|
-
const { commentId
|
|
181
|
-
id:
|
|
182
|
-
unitId
|
|
195
|
+
const { commentId, unitId } = params, commandService = accessor.get(ICommandService), doMutation = deleteCustomDecorationFactory(accessor, {
|
|
196
|
+
id: commentId,
|
|
197
|
+
unitId
|
|
183
198
|
});
|
|
184
|
-
return
|
|
199
|
+
return doMutation ? (await sequenceExecute([doMutation], commandService)).result : !1;
|
|
185
200
|
}
|
|
186
|
-
},
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
201
|
+
}, DocThreadCommentPanel = /* @__PURE__ */ __name(() => {
|
|
202
|
+
const univerInstanceService = useDependency(IUniverInstanceService), doc$ = useMemo(() => univerInstanceService.getCurrentTypeOfUnit$(UniverInstanceType.UNIVER_DOC), [univerInstanceService]), doc = useObservable(doc$), subUnitId$ = useMemo(() => new Observable((sub) => sub.next(DEFAULT_DOC_SUBUNIT_ID)), []), textSelectionManagerService = useDependency(TextSelectionManagerService), selectionChange$ = useMemo(
|
|
203
|
+
() => textSelectionManagerService.textSelection$.pipe(debounceTime(16)),
|
|
204
|
+
[textSelectionManagerService.textSelection$]
|
|
205
|
+
);
|
|
206
|
+
useObservable(selectionChange$);
|
|
207
|
+
const commandService = useDependency(ICommandService), docCommentService = useDependency(DocThreadCommentService), tempComment = useObservable(docCommentService.addingComment$), [commentIds, setCommentIds] = useState([]);
|
|
208
|
+
if (useEffect(() => {
|
|
209
|
+
var _a6;
|
|
210
|
+
const set = /* @__PURE__ */ new Set(), customRanges = doc == null ? void 0 : doc.getCustomDecorations();
|
|
211
|
+
setCommentIds((_a6 = customRanges == null ? void 0 : customRanges.map((r) => r.id).filter((i) => {
|
|
212
|
+
const hasRepeat = set.has(i);
|
|
213
|
+
return set.add(i), !hasRepeat;
|
|
214
|
+
})) != null ? _a6 : []);
|
|
215
|
+
const dispose = commandService.onCommandExecuted((command) => {
|
|
216
|
+
var _a7;
|
|
217
|
+
if (command.id === RichTextEditingMutation.id) {
|
|
218
|
+
const set2 = /* @__PURE__ */ new Set(), customRanges2 = doc == null ? void 0 : doc.getCustomDecorations();
|
|
219
|
+
setCommentIds((_a7 = customRanges2 == null ? void 0 : customRanges2.map((r) => r.id).filter((i) => {
|
|
220
|
+
const hasRepeat = set2.has(i);
|
|
221
|
+
return set2.add(i), !hasRepeat;
|
|
222
|
+
})) != null ? _a7 : []);
|
|
204
223
|
}
|
|
205
224
|
});
|
|
206
225
|
return () => {
|
|
207
|
-
|
|
226
|
+
dispose.dispose();
|
|
208
227
|
};
|
|
209
|
-
}, [
|
|
228
|
+
}, [commandService, doc]), !doc)
|
|
210
229
|
return null;
|
|
211
|
-
const
|
|
212
|
-
return /* @__PURE__ */
|
|
213
|
-
|
|
230
|
+
const activeRange = textSelectionManagerService.getActiveRange(), isInValidSelection = !!(activeRange && (activeRange.endOffset === activeRange.startOffset || activeRange.segmentId)), unitId = doc.getUnitId();
|
|
231
|
+
return /* @__PURE__ */ React.createElement(
|
|
232
|
+
ThreadCommentPanel,
|
|
214
233
|
{
|
|
215
|
-
unitId
|
|
216
|
-
subUnitId
|
|
217
|
-
type:
|
|
218
|
-
onAdd: () => {
|
|
219
|
-
|
|
220
|
-
},
|
|
221
|
-
getSubUnitName: () => "",
|
|
222
|
-
disableAdd:
|
|
223
|
-
tempComment
|
|
224
|
-
onAddComment: (
|
|
225
|
-
if (!
|
|
226
|
-
const
|
|
227
|
-
unitId
|
|
228
|
-
range:
|
|
229
|
-
comment
|
|
234
|
+
unitId,
|
|
235
|
+
subUnitId$,
|
|
236
|
+
type: UniverInstanceType.UNIVER_DOC,
|
|
237
|
+
onAdd: /* @__PURE__ */ __name(() => {
|
|
238
|
+
commandService.executeCommand(StartAddCommentOperation.id);
|
|
239
|
+
}, "onAdd"),
|
|
240
|
+
getSubUnitName: /* @__PURE__ */ __name(() => "", "getSubUnitName"),
|
|
241
|
+
disableAdd: isInValidSelection,
|
|
242
|
+
tempComment,
|
|
243
|
+
onAddComment: /* @__PURE__ */ __name((comment) => {
|
|
244
|
+
if (!comment.parentId) {
|
|
245
|
+
const params = {
|
|
246
|
+
unitId,
|
|
247
|
+
range: tempComment,
|
|
248
|
+
comment
|
|
230
249
|
};
|
|
231
|
-
return
|
|
250
|
+
return commandService.executeCommand(AddDocCommentComment.id, params), docCommentService.endAdd(), !1;
|
|
232
251
|
}
|
|
233
252
|
return !0;
|
|
234
|
-
},
|
|
235
|
-
onDeleteComment: (
|
|
236
|
-
if (!
|
|
237
|
-
const
|
|
238
|
-
unitId
|
|
239
|
-
commentId:
|
|
253
|
+
}, "onAddComment"),
|
|
254
|
+
onDeleteComment: /* @__PURE__ */ __name((comment) => {
|
|
255
|
+
if (!comment.parentId) {
|
|
256
|
+
const params = {
|
|
257
|
+
unitId,
|
|
258
|
+
commentId: comment.id
|
|
240
259
|
};
|
|
241
|
-
return
|
|
260
|
+
return commandService.executeCommand(DeleteDocCommentComment.id, params), !1;
|
|
242
261
|
}
|
|
243
262
|
return !0;
|
|
244
|
-
},
|
|
245
|
-
showComments:
|
|
263
|
+
}, "onDeleteComment"),
|
|
264
|
+
showComments: commentIds
|
|
246
265
|
}
|
|
247
266
|
);
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
const
|
|
251
|
-
const
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
267
|
+
}, "DocThreadCommentPanel");
|
|
268
|
+
DocThreadCommentPanel.componentKey = "univer.doc.thread-comment-panel";
|
|
269
|
+
const shouldDisableAddComment = /* @__PURE__ */ __name((accessor) => {
|
|
270
|
+
const renderManagerService = accessor.get(IRenderManagerService), textSelectionManagerService = accessor.get(TextSelectionManagerService), render2 = renderManagerService.getCurrent(), skeleton = render2 == null ? void 0 : render2.with(DocSkeletonManagerService).getSkeleton(), editArea = skeleton == null ? void 0 : skeleton.getViewModel().getEditArea();
|
|
271
|
+
if (editArea === DocumentEditArea.FOOTER || editArea === DocumentEditArea.HEADER)
|
|
272
|
+
return !0;
|
|
273
|
+
const range = textSelectionManagerService.getActiveRange();
|
|
274
|
+
return !!(!range || range.collapsed);
|
|
275
|
+
}, "shouldDisableAddComment");
|
|
276
|
+
function AddDocCommentMenuItemFactory(accessor) {
|
|
255
277
|
return {
|
|
256
|
-
id:
|
|
257
|
-
group:
|
|
258
|
-
type:
|
|
278
|
+
id: StartAddCommentOperation.id,
|
|
279
|
+
group: MenuGroup.CONTEXT_MENU_DATA,
|
|
280
|
+
type: MenuItemType.BUTTON,
|
|
259
281
|
icon: "CommentSingle",
|
|
260
282
|
title: "threadCommentUI.panel.addComment",
|
|
261
283
|
tooltip: "threadCommentUI.panel.addComment",
|
|
262
|
-
positions: [
|
|
263
|
-
hidden$:
|
|
264
|
-
disabled$: new
|
|
265
|
-
const
|
|
266
|
-
|
|
284
|
+
positions: [MenuPosition.CONTEXT_MENU],
|
|
285
|
+
hidden$: getMenuHiddenObservable(accessor, UniverInstanceType.UNIVER_DOC),
|
|
286
|
+
disabled$: new Observable(function(subscribe) {
|
|
287
|
+
const observer = accessor.get(TextSelectionManagerService).textSelection$.pipe(debounceTime(16)).subscribe(() => {
|
|
288
|
+
subscribe.next(shouldDisableAddComment(accessor));
|
|
267
289
|
});
|
|
268
290
|
return () => {
|
|
269
|
-
|
|
291
|
+
observer.unsubscribe();
|
|
270
292
|
};
|
|
271
293
|
})
|
|
272
294
|
};
|
|
273
295
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
296
|
+
__name(AddDocCommentMenuItemFactory, "AddDocCommentMenuItemFactory");
|
|
297
|
+
function ToolbarDocCommentMenuItemFactory(accessor) {
|
|
298
|
+
return {
|
|
299
|
+
id: ToggleCommentPanelOperation.id,
|
|
300
|
+
group: MenuGroup.CONTEXT_MENU_DATA,
|
|
301
|
+
type: MenuItemType.BUTTON,
|
|
302
|
+
icon: "CommentSingle",
|
|
303
|
+
title: "threadCommentUI.panel.addComment",
|
|
304
|
+
tooltip: "threadCommentUI.panel.addComment",
|
|
305
|
+
positions: [MenuPosition.TOOLBAR_START],
|
|
306
|
+
hidden$: getMenuHiddenObservable(accessor, UniverInstanceType.UNIVER_DOC)
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
__name(ToolbarDocCommentMenuItemFactory, "ToolbarDocCommentMenuItemFactory");
|
|
310
|
+
var __defProp$3 = Object.defineProperty, __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor, __decorateClass$3 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
311
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$3(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
312
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
313
|
+
return kind && result && __defProp$3(target, key, result), result;
|
|
314
|
+
}, "__decorateClass$3"), __decorateParam$3 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$3"), _a2;
|
|
315
|
+
let DocThreadCommentUIController = (_a2 = class extends Disposable {
|
|
316
|
+
constructor(_config, _commandService, _menuService, _injector, _componentManager) {
|
|
317
|
+
super(), this._config = _config, this._commandService = _commandService, this._menuService = _menuService, this._injector = _injector, this._componentManager = _componentManager, this._initCommands(), this._initMenus(), this._initComponents();
|
|
282
318
|
}
|
|
283
319
|
_initCommands() {
|
|
284
320
|
[
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
321
|
+
AddDocCommentComment,
|
|
322
|
+
DeleteDocCommentComment,
|
|
323
|
+
ShowCommentPanelOperation,
|
|
324
|
+
StartAddCommentOperation,
|
|
325
|
+
ToggleCommentPanelOperation
|
|
326
|
+
].forEach((command) => {
|
|
327
|
+
this.disposeWithMe(this._commandService.registerCommand(command));
|
|
291
328
|
});
|
|
292
329
|
}
|
|
293
330
|
_initMenus() {
|
|
294
|
-
[
|
|
295
|
-
|
|
331
|
+
[
|
|
332
|
+
AddDocCommentMenuItemFactory,
|
|
333
|
+
ToolbarDocCommentMenuItemFactory
|
|
334
|
+
].forEach((menuFactory) => {
|
|
335
|
+
this.disposeWithMe(this._menuService.addMenuItem(menuFactory(this._injector), this._config.menu));
|
|
296
336
|
});
|
|
297
337
|
}
|
|
298
338
|
_initComponents() {
|
|
299
|
-
[
|
|
300
|
-
this.disposeWithMe(this._componentManager.register(
|
|
301
|
-
}), this.disposeWithMe(this._componentManager.register("CommentSingle",
|
|
339
|
+
[DocThreadCommentPanel].forEach((comp) => {
|
|
340
|
+
this.disposeWithMe(this._componentManager.register(comp.componentKey, comp));
|
|
341
|
+
}), this.disposeWithMe(this._componentManager.register("CommentSingle", CommentSingle));
|
|
302
342
|
}
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
],
|
|
311
|
-
var
|
|
312
|
-
for (var
|
|
313
|
-
(
|
|
314
|
-
return
|
|
315
|
-
},
|
|
316
|
-
let
|
|
317
|
-
constructor(
|
|
318
|
-
super(), this._threadCommentPanelService =
|
|
343
|
+
}, __name(_a2, "DocThreadCommentUIController"), _a2);
|
|
344
|
+
DocThreadCommentUIController = __decorateClass$3([
|
|
345
|
+
OnLifecycle(LifecycleStages.Rendered, DocThreadCommentUIController),
|
|
346
|
+
__decorateParam$3(1, ICommandService),
|
|
347
|
+
__decorateParam$3(2, IMenuService),
|
|
348
|
+
__decorateParam$3(3, Inject(Injector)),
|
|
349
|
+
__decorateParam$3(4, Inject(ComponentManager))
|
|
350
|
+
], DocThreadCommentUIController);
|
|
351
|
+
var __defProp$2 = Object.defineProperty, __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor, __decorateClass$2 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
352
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
353
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
354
|
+
return kind && result && __defProp$2(target, key, result), result;
|
|
355
|
+
}, "__decorateClass$2"), __decorateParam$2 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$2"), _a3;
|
|
356
|
+
let DocThreadCommentSelectionController = (_a3 = class extends Disposable {
|
|
357
|
+
constructor(_threadCommentPanelService, _univerInstanceService, _commandService, _docThreadCommentService, _renderManagerService, _threadCommentModel) {
|
|
358
|
+
super(), this._threadCommentPanelService = _threadCommentPanelService, this._univerInstanceService = _univerInstanceService, this._commandService = _commandService, this._docThreadCommentService = _docThreadCommentService, this._renderManagerService = _renderManagerService, this._threadCommentModel = _threadCommentModel, this._initSelectionChange(), this._initActiveCommandChange();
|
|
319
359
|
}
|
|
320
360
|
_initSelectionChange() {
|
|
361
|
+
let lastSelection;
|
|
321
362
|
this.disposeWithMe(
|
|
322
|
-
this._commandService.onCommandExecuted((
|
|
323
|
-
var
|
|
324
|
-
if (
|
|
325
|
-
const
|
|
326
|
-
if (
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
363
|
+
this._commandService.onCommandExecuted((commandInfo) => {
|
|
364
|
+
var _a6, _b, _c, _d;
|
|
365
|
+
if (commandInfo.id === SetTextSelectionsOperation.id) {
|
|
366
|
+
const params = commandInfo.params, { unitId, ranges } = params, doc = this._univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC), primary = ranges[0];
|
|
367
|
+
if ((lastSelection == null ? void 0 : lastSelection.startOffset) === (primary == null ? void 0 : primary.startOffset) && (lastSelection == null ? void 0 : lastSelection.endOffset) === (primary == null ? void 0 : primary.endOffset))
|
|
368
|
+
return;
|
|
369
|
+
if (lastSelection = primary, primary && doc) {
|
|
370
|
+
const { startOffset, endOffset, collapsed } = primary;
|
|
371
|
+
let customRange;
|
|
372
|
+
if (collapsed ? customRange = (_b = (_a6 = doc.getBody()) == null ? void 0 : _a6.customDecorations) == null ? void 0 : _b.find((value) => value.startIndex <= startOffset && value.endIndex >= endOffset - 1) : customRange = (_d = (_c = doc.getBody()) == null ? void 0 : _c.customDecorations) == null ? void 0 : _d.find((value) => value.startIndex <= startOffset && value.endIndex >= endOffset - 1), customRange) {
|
|
373
|
+
const comment = this._threadCommentModel.getComment(unitId, DEFAULT_DOC_SUBUNIT_ID, customRange.id);
|
|
374
|
+
comment && !comment.resolved && this._commandService.executeCommand(ShowCommentPanelOperation.id, {
|
|
332
375
|
activeComment: {
|
|
333
|
-
unitId
|
|
334
|
-
subUnitId:
|
|
335
|
-
commentId:
|
|
376
|
+
unitId,
|
|
377
|
+
subUnitId: DEFAULT_DOC_SUBUNIT_ID,
|
|
378
|
+
commentId: customRange.id
|
|
336
379
|
}
|
|
337
380
|
});
|
|
338
381
|
return;
|
|
339
382
|
}
|
|
340
383
|
}
|
|
341
|
-
this._commandService.executeCommand(
|
|
384
|
+
this._commandService.executeCommand(SetActiveCommentOperation.id);
|
|
342
385
|
}
|
|
343
386
|
})
|
|
344
387
|
);
|
|
345
388
|
}
|
|
346
389
|
_initActiveCommandChange() {
|
|
347
|
-
this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe((
|
|
348
|
-
var
|
|
349
|
-
if (
|
|
350
|
-
const
|
|
351
|
-
if (
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
startOffset:
|
|
355
|
-
endOffset:
|
|
390
|
+
this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe((activeComment) => {
|
|
391
|
+
var _a6, _b, _c;
|
|
392
|
+
if (activeComment) {
|
|
393
|
+
const doc = this._univerInstanceService.getUnit(activeComment.unitId);
|
|
394
|
+
if (doc) {
|
|
395
|
+
const backScrollController = (_a6 = this._renderManagerService.getRenderById(activeComment.unitId)) == null ? void 0 : _a6.with(DocBackScrollRenderController), customRange = (_b = doc.getCustomRanges()) == null ? void 0 : _b.find((range) => range.rangeId === activeComment.commentId);
|
|
396
|
+
customRange && backScrollController && backScrollController.scrollToRange(activeComment.unitId, {
|
|
397
|
+
startOffset: customRange.startIndex,
|
|
398
|
+
endOffset: customRange.endIndex,
|
|
356
399
|
collapsed: !1
|
|
357
400
|
});
|
|
358
401
|
}
|
|
359
402
|
}
|
|
360
|
-
(!
|
|
403
|
+
(!activeComment || activeComment.commentId !== ((_c = this._docThreadCommentService.addingComment) == null ? void 0 : _c.id)) && this._docThreadCommentService.endAdd();
|
|
361
404
|
}));
|
|
362
405
|
}
|
|
363
|
-
};
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
],
|
|
373
|
-
var
|
|
374
|
-
for (var
|
|
375
|
-
(
|
|
376
|
-
return
|
|
377
|
-
},
|
|
378
|
-
let
|
|
379
|
-
constructor(
|
|
380
|
-
super(), this._context =
|
|
406
|
+
}, __name(_a3, "DocThreadCommentSelectionController"), _a3);
|
|
407
|
+
DocThreadCommentSelectionController = __decorateClass$2([
|
|
408
|
+
OnLifecycle(LifecycleStages.Rendered, DocThreadCommentSelectionController),
|
|
409
|
+
__decorateParam$2(0, Inject(ThreadCommentPanelService)),
|
|
410
|
+
__decorateParam$2(1, IUniverInstanceService),
|
|
411
|
+
__decorateParam$2(2, ICommandService),
|
|
412
|
+
__decorateParam$2(3, Inject(DocThreadCommentService)),
|
|
413
|
+
__decorateParam$2(4, IRenderManagerService),
|
|
414
|
+
__decorateParam$2(5, Inject(ThreadCommentModel))
|
|
415
|
+
], DocThreadCommentSelectionController);
|
|
416
|
+
var __defProp$1 = Object.defineProperty, __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor, __decorateClass$1 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
417
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
418
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
419
|
+
return kind && result && __defProp$1(target, key, result), result;
|
|
420
|
+
}, "__decorateClass$1"), __decorateParam$1 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$1"), _a4;
|
|
421
|
+
let DocThreadCommentRenderController = (_a4 = class extends Disposable {
|
|
422
|
+
constructor(_context, _docInterceptorService, _threadCommentPanelService, _docRenderController, _univerInstanceService, _threadCommentModel) {
|
|
423
|
+
super(), this._context = _context, this._docInterceptorService = _docInterceptorService, this._threadCommentPanelService = _threadCommentPanelService, this._docRenderController = _docRenderController, this._univerInstanceService = _univerInstanceService, this._threadCommentModel = _threadCommentModel, this._interceptorViewModel(), this._initReRender();
|
|
381
424
|
}
|
|
382
425
|
_initReRender() {
|
|
383
|
-
this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe((
|
|
384
|
-
var
|
|
385
|
-
if (
|
|
386
|
-
this._docRenderController.reRender(
|
|
426
|
+
this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe((activeComment) => {
|
|
427
|
+
var _a6;
|
|
428
|
+
if (activeComment) {
|
|
429
|
+
this._docRenderController.reRender(activeComment.unitId);
|
|
387
430
|
return;
|
|
388
431
|
}
|
|
389
|
-
const
|
|
390
|
-
|
|
391
|
-
})), this.disposeWithMe(this._threadCommentModel.commentUpdate$.subscribe((
|
|
392
|
-
|
|
432
|
+
const unitId = (_a6 = this._univerInstanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_DOC)) == null ? void 0 : _a6.getUnitId();
|
|
433
|
+
unitId && this._docRenderController.reRender(unitId);
|
|
434
|
+
})), this.disposeWithMe(this._threadCommentModel.commentUpdate$.subscribe((update) => {
|
|
435
|
+
update.type === "resolve" && this._docRenderController.reRender(update.unitId);
|
|
393
436
|
}));
|
|
394
437
|
}
|
|
395
438
|
_interceptorViewModel() {
|
|
396
|
-
this._docInterceptorService.intercept(
|
|
397
|
-
handler: (
|
|
398
|
-
if (!
|
|
399
|
-
return
|
|
400
|
-
const { unitId
|
|
401
|
-
if (!
|
|
402
|
-
return
|
|
403
|
-
...
|
|
439
|
+
this._docInterceptorService.intercept(DOC_INTERCEPTOR_POINT.CUSTOM_DECORATION, {
|
|
440
|
+
handler: /* @__PURE__ */ __name((data, pos, next) => {
|
|
441
|
+
if (!data)
|
|
442
|
+
return next(data);
|
|
443
|
+
const { unitId, index, customDecorations } = pos, activeComment = this._threadCommentPanelService.activeCommentId, { commentId, unitId: commentUnitID } = activeComment || {}, activeCustomDecoration = customDecorations.find((i) => i.id === commentId), comment = this._threadCommentModel.getComment(unitId, DEFAULT_DOC_SUBUNIT_ID, data.id);
|
|
444
|
+
if (!comment)
|
|
445
|
+
return next({
|
|
446
|
+
...data,
|
|
404
447
|
show: !1
|
|
405
448
|
});
|
|
406
|
-
const
|
|
407
|
-
return
|
|
408
|
-
...
|
|
409
|
-
active:
|
|
410
|
-
show: !
|
|
449
|
+
const isActiveIndex = activeCustomDecoration && index >= activeCustomDecoration.startIndex && index <= activeCustomDecoration.endIndex, isActive = commentUnitID === unitId && data.id === commentId;
|
|
450
|
+
return next({
|
|
451
|
+
...data,
|
|
452
|
+
active: isActive || isActiveIndex,
|
|
453
|
+
show: !comment.resolved
|
|
411
454
|
});
|
|
412
|
-
}
|
|
455
|
+
}, "handler")
|
|
413
456
|
});
|
|
414
457
|
}
|
|
415
|
-
};
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
],
|
|
424
|
-
var
|
|
425
|
-
for (var
|
|
426
|
-
(
|
|
427
|
-
return
|
|
428
|
-
},
|
|
429
|
-
let
|
|
430
|
-
constructor(
|
|
431
|
-
super(), this._config =
|
|
458
|
+
}, __name(_a4, "DocThreadCommentRenderController"), _a4);
|
|
459
|
+
DocThreadCommentRenderController = __decorateClass$1([
|
|
460
|
+
OnLifecycle(LifecycleStages.Starting, DocThreadCommentRenderController),
|
|
461
|
+
__decorateParam$1(1, Inject(DocInterceptorService)),
|
|
462
|
+
__decorateParam$1(2, Inject(ThreadCommentPanelService)),
|
|
463
|
+
__decorateParam$1(3, Inject(DocRenderController)),
|
|
464
|
+
__decorateParam$1(4, IUniverInstanceService),
|
|
465
|
+
__decorateParam$1(5, Inject(ThreadCommentModel))
|
|
466
|
+
], DocThreadCommentRenderController);
|
|
467
|
+
var __defProp2 = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __defNormalProp2 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, "__defNormalProp"), __decorateClass = /* @__PURE__ */ __name((decorators, target, key, kind) => {
|
|
468
|
+
for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
|
|
469
|
+
(decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
|
|
470
|
+
return kind && result && __defProp2(target, key, result), result;
|
|
471
|
+
}, "__decorateClass"), __decorateParam = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam"), __publicField2 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp2(obj, typeof key != "symbol" ? key + "" : key, value), "__publicField"), _a5;
|
|
472
|
+
let UniverDocsThreadCommentUIPlugin = (_a5 = class extends Plugin {
|
|
473
|
+
constructor(_config = { menu: {} }, _injector, _renderManagerSrv) {
|
|
474
|
+
super(), this._config = _config, this._injector = _injector, this._renderManagerSrv = _renderManagerSrv;
|
|
432
475
|
}
|
|
433
|
-
onStarting(
|
|
476
|
+
onStarting() {
|
|
434
477
|
[
|
|
435
478
|
[
|
|
436
|
-
|
|
479
|
+
DocThreadCommentUIController,
|
|
437
480
|
{
|
|
438
|
-
useFactory: () => this._injector.createInstance(
|
|
481
|
+
useFactory: /* @__PURE__ */ __name(() => this._injector.createInstance(DocThreadCommentUIController, this._config), "useFactory")
|
|
439
482
|
}
|
|
440
483
|
],
|
|
441
|
-
[
|
|
442
|
-
[
|
|
443
|
-
].forEach((
|
|
444
|
-
|
|
484
|
+
[DocThreadCommentSelectionController],
|
|
485
|
+
[DocThreadCommentService]
|
|
486
|
+
].forEach((dep) => {
|
|
487
|
+
this._injector.add(dep);
|
|
445
488
|
});
|
|
446
489
|
}
|
|
447
490
|
onRendered() {
|
|
448
491
|
this._initRenderModule();
|
|
449
492
|
}
|
|
450
493
|
_initRenderModule() {
|
|
451
|
-
[
|
|
452
|
-
this._renderManagerSrv.registerRenderModule(
|
|
494
|
+
[DocThreadCommentRenderController].forEach((dep) => {
|
|
495
|
+
this._renderManagerSrv.registerRenderModule(UniverInstanceType.UNIVER_DOC, dep);
|
|
453
496
|
});
|
|
454
497
|
}
|
|
455
|
-
};
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
],
|
|
498
|
+
}, __name(_a5, "UniverDocsThreadCommentUIPlugin"), _a5);
|
|
499
|
+
__publicField2(UniverDocsThreadCommentUIPlugin, "pluginName", PLUGIN_NAME);
|
|
500
|
+
__publicField2(UniverDocsThreadCommentUIPlugin, "type", UniverInstanceType.UNIVER_DOC);
|
|
501
|
+
UniverDocsThreadCommentUIPlugin = __decorateClass([
|
|
502
|
+
DependentOn(UniverThreadCommentUIPlugin),
|
|
503
|
+
__decorateParam(1, Inject(Injector)),
|
|
504
|
+
__decorateParam(2, IRenderManagerService)
|
|
505
|
+
], UniverDocsThreadCommentUIPlugin);
|
|
463
506
|
export {
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
507
|
+
AddDocCommentComment,
|
|
508
|
+
DeleteDocCommentComment,
|
|
509
|
+
ShowCommentPanelOperation,
|
|
510
|
+
StartAddCommentOperation,
|
|
511
|
+
UniverDocsThreadCommentUIPlugin
|
|
469
512
|
};
|
|
@@ -5,4 +5,5 @@ export interface IShowCommentPanelOperationParams {
|
|
|
5
5
|
activeComment: ActiveCommentInfo;
|
|
6
6
|
}
|
|
7
7
|
export declare const ShowCommentPanelOperation: ICommand<IShowCommentPanelOperationParams>;
|
|
8
|
+
export declare const ToggleCommentPanelOperation: ICommand;
|
|
8
9
|
export declare const StartAddCommentOperation: ICommand;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Disposable, ICommandService } from '@univerjs/core';
|
|
1
|
+
import { Disposable, ICommandService, Injector } from '@univerjs/core';
|
|
2
2
|
import { MenuConfig, ComponentManager, IMenuService } from '@univerjs/ui';
|
|
3
|
-
import { Injector } from '@wendellhu/redi';
|
|
4
3
|
|
|
5
4
|
export interface IDocThreadCommentUIConfig {
|
|
6
5
|
menu: MenuConfig;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { IAccessor } from '@
|
|
1
|
+
import { IAccessor } from '@univerjs/core';
|
|
2
2
|
import { IMenuButtonItem } from '@univerjs/ui';
|
|
3
3
|
|
|
4
4
|
export declare const shouldDisableAddComment: (accessor: IAccessor) => boolean;
|
|
5
5
|
export declare function AddDocCommentMenuItemFactory(accessor: IAccessor): IMenuButtonItem;
|
|
6
|
+
export declare function ToolbarDocCommentMenuItemFactory(accessor: IAccessor): IMenuButtonItem;
|
package/lib/types/plugin.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Plugin, UniverInstanceType } from '@univerjs/core';
|
|
2
|
-
import { Injector } from '@wendellhu/redi';
|
|
1
|
+
import { Injector, Plugin, UniverInstanceType } from '@univerjs/core';
|
|
3
2
|
import { IRenderManagerService } from '@univerjs/engine-render';
|
|
4
3
|
import { IDocThreadCommentUIConfig } from './controllers/doc-thread-comment-ui.controller';
|
|
5
4
|
|
|
@@ -10,7 +9,7 @@ export declare class UniverDocsThreadCommentUIPlugin extends Plugin {
|
|
|
10
9
|
static pluginName: string;
|
|
11
10
|
static type: UniverInstanceType;
|
|
12
11
|
constructor(_config: IDocThreadCommentUIConfig, _injector: Injector, _renderManagerSrv: IRenderManagerService);
|
|
13
|
-
onStarting(
|
|
12
|
+
onStarting(): void;
|
|
14
13
|
onRendered(): void;
|
|
15
14
|
private _initRenderModule;
|
|
16
15
|
}
|
package/lib/umd/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(d,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("@univerjs/core"),require("@wendellhu/redi"),require("@univerjs/thread-comment-ui"),require("@univerjs/engine-render"),require("@univerjs/ui"),require("@univerjs/docs"),require("@univerjs/thread-comment"),require("@wendellhu/redi/react-bindings"),require("react"),require("rxjs"),require("@univerjs/docs-ui")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@wendellhu/redi","@univerjs/thread-comment-ui","@univerjs/engine-render","@univerjs/ui","@univerjs/docs","@univerjs/thread-comment","@wendellhu/redi/react-bindings","react","rxjs","@univerjs/docs-ui"],o):(d=typeof globalThis<"u"?globalThis:d||self,o(d.UniverDocsThreadCommentUi={},d.UniverCore,d["@wendellhu/redi"],d.UniverThreadCommentUi,d.UniverEngineRender,d.UniverUi,d.UniverDocs,d.UniverThreadComment,d["@wendellhu/redi/react-bindings"],d.React,d.rxjs,d.UniverDocsUi))})(this,function(d,o,u,_,P,p,h,w,D,S,A,G){"use strict";var ye=Object.defineProperty;var Ue=(d,o,u)=>o in d?ye(d,o,{enumerable:!0,configurable:!0,writable:!0,value:u}):d[o]=u;var z=(d,o,u)=>Ue(d,typeof o!="symbol"?o+"":o,u);const re="DOC_THREAD_COMMENT_UI_PLUGIN",T="default_doc";var C=function(){return C=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},C.apply(this,arguments)},ie=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n},K=S.forwardRef(function(e,t){var n=e.icon,r=e.id,i=e.className,s=e.extend,c=ie(e,["icon","id","className","extend"]),m="univerjs-icon univerjs-icon-".concat(r," ").concat(i||"").trim(),v=S.useRef("_".concat(ce()));return X(n,"".concat(r),{defIds:n.defIds,idSuffix:v.current},C({ref:t,className:m},c),s)});function X(e,t,n,r,i){return S.createElement(e.tag,C(C({key:t},oe(e,n,i)),r),(se(e,n).children||[]).map(function(s,c){return X(s,"".concat(t,"-").concat(e.tag,"-").concat(c),n,void 0,i)}))}function oe(e,t,n){var r=C({},e.attrs);n!=null&&n.colorChannel1&&r.fill==="colorChannel1"&&(r.fill=n.colorChannel1);var i=t.defIds;return!i||i.length===0||(e.tag==="use"&&r["xlink:href"]&&(r["xlink:href"]=r["xlink:href"]+t.idSuffix),Object.entries(r).forEach(function(s){var c=s[0],m=s[1];typeof m=="string"&&(r[c]=m.replace(/url\(#(.*)\)/,"url(#$1".concat(t.idSuffix,")")))})),r}function se(e,t){var n,r=t.defIds;return!r||r.length===0?e:e.tag==="defs"&&(!((n=e.children)===null||n===void 0)&&n.length)?C(C({},e),{children:e.children.map(function(i){return typeof i.attrs.id=="string"&&r&&r.indexOf(i.attrs.id)>-1?C(C({},i),{attrs:C(C({},i.attrs),{id:i.attrs.id+t.idSuffix})}):i})}):e}function ce(){return Math.random().toString(36).substring(2,8)}K.displayName="UniverIcon";var de={tag:"svg",attrs:{fill:"none",viewBox:"0 0 17 17",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521C5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345ZM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521C8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345ZM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521C11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345Z",fillRule:"evenodd",clipRule:"evenodd"}},{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521 5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345zM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521 8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345zM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521 11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345z"}},{tag:"path",attrs:{fill:"currentColor",d:"M1.84351 3.41861C1.84351 3.01861 2.15531 2.69434 2.53993 2.69434H14.9381C15.3228 2.69434 15.6346 3.01861 15.6346 3.41861V12.4611C15.6346 12.8612 15.3228 13.1854 14.9381 13.1854H8.82117L6.06643 14.6179C5.85054 14.7301 5.59416 14.7181 5.38884 14.5862C5.18352 14.4542 5.05855 14.2211 5.05855 13.9701V13.1854H2.53993C2.15531 13.1854 1.84351 12.8612 1.84351 12.4611L1.84351 3.41861ZM6.45141 12.7982L8.34531 12.0135C8.44201 11.9632 8.54864 11.9371 8.65676 11.9371H14.2417C14.3522 11.9371 14.4417 11.8475 14.4417 11.7371V4.14271C14.4417 4.03225 14.3522 3.94271 14.2417 3.94271H3.23636C3.12591 3.94271 3.03636 4.03225 3.03636 4.14271L3.03636 11.7371C3.03636 11.8475 3.12591 11.9371 3.23636 11.9371L5.75498 11.9371C6.1396 11.9371 6.45141 12.0611 6.45141 12.4611V12.7982Z",fillRule:"evenodd",clipRule:"evenodd"}}]},Y=S.forwardRef(function(e,t){return S.createElement(K,Object.assign({},e,{id:"comment-single",ref:t,icon:de}))});Y.displayName="CommentSingle";const W={id:"docs.command.add-comment",type:o.CommandType.COMMAND,async handler(e,t){if(!t)return!1;const{comment:n,unitId:r}=t,s=await e.get(w.IThreadCommentDataSourceService).addComment(n),c=e.get(o.ICommandService),m=h.addCustomDecorationBySelectionFactory(e,{id:s.id,type:o.CustomDecorationType.COMMENT});if(m){const v={id:w.AddCommentMutation.id,params:{unitId:r,subUnitId:T,comment:s}},l={id:_.SetActiveCommentOperation.id,params:{unitId:r,subUnitId:T,commentId:s.id}};return(await o.sequenceExecuteAsync([v,m,l],c)).result}return!1}};var ae=Object.defineProperty,me=Object.getOwnPropertyDescriptor,ue=(e,t,n,r)=>{for(var i=r>1?void 0:r?me(t,n):t,s=e.length-1,c;s>=0;s--)(c=e[s])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&ae(t,n,i),i},J=(e,t)=>(n,r)=>t(n,r,e);let b=class extends o.Disposable{constructor(t,n){super();z(this,"_addingComment$",new A.BehaviorSubject(void 0));z(this,"addingComment$",this._addingComment$.asObservable());this._sidebarService=t,this._threadCommentPanelService=n,this.disposeWithMe(()=>{this._addingComment$.complete()})}get addingComment(){return this._addingComment$.getValue()}startAdd(t){this._addingComment$.next(t)}endAdd(){this._addingComment$.next(void 0)}};b=ue([J(0,p.ISidebarService),J(1,u.Inject(_.ThreadCommentPanelService))],b);const j={id:"docs.operation.show-comment-panel",type:o.CommandType.OPERATION,handler(e,t){const n=e.get(_.ThreadCommentPanelService),r=e.get(p.ISidebarService);return n.panelVisible||(r.open({header:{title:"threadCommentUI.panel.title"},children:{label:B.componentKey},width:320,onClose:()=>n.setPanelVisible(!1)}),n.setPanelVisible(!0)),t&&n.setActiveComment(t==null?void 0:t.activeComment),!0}},E={id:"docs.operation.start-add-comment",type:o.CommandType.OPERATION,handler(e){var O,L;const t=e.get(_.ThreadCommentPanelService),r=e.get(o.IUniverInstanceService).getCurrentUnitForType(o.UniverInstanceType.UNIVER_DOC),i=e.get(h.TextSelectionManagerService),s=e.get(o.UserManagerService),c=e.get(b),m=e.get(o.ICommandService),v=e.get(p.ISidebarService),l=i.getActiveRange();if(!r||!l)return!1;if(l.collapsed)return t.panelVisible?(t.setPanelVisible(!1),v.close()):m.executeCommand(j.id),!0;t.panelVisible||m.executeCommand(j.id);const I=r.getUnitId(),M=h.getSelectionText((L=(O=r.getBody())==null?void 0:O.dataStream)!=null?L:"",l.startOffset,l.endOffset),g=T,f="",a={unitId:I,subUnitId:g,id:f,ref:M,dT:_.getDT(),personId:s.getCurrentUser().userID,text:{dataStream:`\r
|
|
2
|
-
`},startOffset:l.startOffset,endOffset:l.endOffset,collapsed:!0,threadId:f};return c.startAdd(a),t.setActiveComment({unitId:I,subUnitId:g,commentId:f}),!0}},H={id:"docs.command.delete-comment",type:o.CommandType.COMMAND,async handler(e,t){if(!t)return!1;const{commentId:n,unitId:r}=t,i=e.get(o.ICommandService),s=h.deleteCustomDecorationFactory(e,{id:n,unitId:r});return s?(await o.sequenceExecute([s],i)).result:!1}},B=()=>{var f;const e=D.useDependency(o.IUniverInstanceService),t=S.useMemo(()=>e.getCurrentTypeOfUnit$(o.UniverInstanceType.UNIVER_DOC),[e]),n=D.useObservable(t),r=S.useMemo(()=>new A.Observable(a=>a.next(T)),[]),i=D.useDependency(h.TextSelectionManagerService),s=(f=D.useObservable(i.textSelection$))==null?void 0:f.textRanges[0],c=D.useDependency(o.ICommandService),m=D.useDependency(b),v=D.useObservable(m.addingComment$),[l,I]=S.useState([]);if(S.useEffect(()=>{var te;const a=new Set,O=n==null?void 0:n.getCustomDecorations();I((te=O==null?void 0:O.map(U=>U.id).filter(U=>{const q=a.has(U);return a.add(U),!q}))!=null?te:[]);const L=c.onCommandExecuted(U=>{var q;if(U.id===h.RichTextEditingMutation.id){const ne=new Set,Z=n==null?void 0:n.getCustomDecorations();I((q=Z==null?void 0:Z.map(F=>F.id).filter(F=>{const be=ne.has(F);return ne.add(F),!be}))!=null?q:[])}});return()=>{L.dispose()}},[c,n]),!n)return null;const M=s&&s.endOffset===s.startOffset,g=n.getUnitId();return S.createElement(_.ThreadCommentPanel,{unitId:g,subUnitId$:r,type:o.UniverInstanceType.UNIVER_DOC,onAdd:()=>{c.executeCommand(E.id)},getSubUnitName:()=>"",disableAdd:M,tempComment:v,onAddComment:a=>{if(!a.parentId){const O={unitId:g,range:v,comment:a};return c.executeCommand(W.id,O),m.endAdd(),!1}return!0},onDeleteComment:a=>{if(!a.parentId){const O={unitId:g,commentId:a.id};return c.executeCommand(H.id,O),!1}return!0},showComments:l})};B.componentKey="univer.doc.thread-comment-panel";const le=e=>{const n=e.get(P.IRenderManagerService).getCurrent(),r=n==null?void 0:n.with(h.DocSkeletonManagerService).getSkeleton(),i=r==null?void 0:r.getViewModel().getEditArea();return i===P.DocumentEditArea.FOOTER||i===P.DocumentEditArea.HEADER};function ve(e){return{id:E.id,group:p.MenuGroup.TOOLBAR_LAYOUT,type:p.MenuItemType.BUTTON,icon:"CommentSingle",title:"threadCommentUI.panel.addComment",tooltip:"threadCommentUI.panel.addComment",positions:[p.MenuPosition.TOOLBAR_START,p.MenuPosition.CONTEXT_MENU],hidden$:p.getMenuHiddenObservable(e,o.UniverInstanceType.UNIVER_DOC),disabled$:new A.Observable(function(t){const r=e.get(h.TextSelectionManagerService).textSelection$.pipe(A.debounceTime(16)).subscribe(()=>{t.next(le(e))});return()=>{r.unsubscribe()}})}}var fe=Object.defineProperty,Ce=Object.getOwnPropertyDescriptor,he=(e,t,n,r)=>{for(var i=r>1?void 0:r?Ce(t,n):t,s=e.length-1,c;s>=0;s--)(c=e[s])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&fe(t,n,i),i},V=(e,t)=>(n,r)=>t(n,r,e);let x=class extends o.Disposable{constructor(e,t,n,r,i){super(),this._config=e,this._commandService=t,this._menuService=n,this._injector=r,this._componentManager=i,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[W,H,j,E].forEach(e=>{this.disposeWithMe(this._commandService.registerCommand(e))})}_initMenus(){[ve].forEach(e=>{this.disposeWithMe(this._menuService.addMenuItem(e(this._injector),this._config.menu))})}_initComponents(){[B].forEach(e=>{this.disposeWithMe(this._componentManager.register(e.componentKey,e))}),this.disposeWithMe(this._componentManager.register("CommentSingle",Y))}};x=he([o.OnLifecycle(o.LifecycleStages.Rendered,x),V(1,o.ICommandService),V(2,p.IMenuService),V(3,u.Inject(u.Injector)),V(4,u.Inject(p.ComponentManager))],x);var Ie=Object.defineProperty,_e=Object.getOwnPropertyDescriptor,pe=(e,t,n,r)=>{for(var i=r>1?void 0:r?_e(t,n):t,s=e.length-1,c;s>=0;s--)(c=e[s])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&Ie(t,n,i),i},y=(e,t)=>(n,r)=>t(n,r,e);let $=class extends o.Disposable{constructor(e,t,n,r,i,s){super(),this._threadCommentPanelService=e,this._univerInstanceService=t,this._commandService=n,this._docThreadCommentService=r,this._renderManagerService=i,this._threadCommentModel=s,this._initSelectionChange(),this._initActiveCommandChange()}_initSelectionChange(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t,n,r,i;if(e.id===h.SetTextSelectionsOperation.id){const s=e.params,{unitId:c,ranges:m}=s,v=this._univerInstanceService.getUnit(c,o.UniverInstanceType.UNIVER_DOC),l=m[0];if(l&&v){const{startOffset:I,endOffset:M,collapsed:g}=l;let f;if(g?f=(n=(t=v.getBody())==null?void 0:t.customDecorations)==null?void 0:n.find(a=>a.startIndex<=I&&a.endIndex>=M-1):f=(i=(r=v.getBody())==null?void 0:r.customDecorations)==null?void 0:i.find(a=>a.startIndex<=I&&a.endIndex>=M-1),f){const a=this._threadCommentModel.getComment(c,T,f.id);a&&!a.resolved&&this._commandService.executeCommand(j.id,{activeComment:{unitId:c,subUnitId:T,commentId:f.id}});return}}this._commandService.executeCommand(_.SetActiveCommentOperation.id)}}))}_initActiveCommandChange(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(e=>{var t,n,r;if(e){const i=this._univerInstanceService.getUnit(e.unitId);if(i){const s=(t=this._renderManagerService.getRenderById(e.unitId))==null?void 0:t.with(G.DocBackScrollRenderController),c=(n=i.getCustomRanges())==null?void 0:n.find(m=>m.rangeId===e.commentId);c&&s&&s.scrollToRange(e.unitId,{startOffset:c.startIndex,endOffset:c.endIndex,collapsed:!1})}}(!e||e.commentId!==((r=this._docThreadCommentService.addingComment)==null?void 0:r.id))&&this._docThreadCommentService.endAdd()}))}};$=pe([o.OnLifecycle(o.LifecycleStages.Rendered,$),y(0,u.Inject(_.ThreadCommentPanelService)),y(1,o.IUniverInstanceService),y(2,o.ICommandService),y(3,u.Inject(b)),y(4,P.IRenderManagerService),y(5,u.Inject(w.ThreadCommentModel))],$);var Se=Object.defineProperty,ge=Object.getOwnPropertyDescriptor,Oe=(e,t,n,r)=>{for(var i=r>1?void 0:r?ge(t,n):t,s=e.length-1,c;s>=0;s--)(c=e[s])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&Se(t,n,i),i},R=(e,t)=>(n,r)=>t(n,r,e);let N=class extends o.Disposable{constructor(e,t,n,r,i,s){super(),this._context=e,this._docInterceptorService=t,this._threadCommentPanelService=n,this._docRenderController=r,this._univerInstanceService=i,this._threadCommentModel=s,this._interceptorViewModel(),this._initReRender()}_initReRender(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(e=>{var n;if(e){this._docRenderController.reRender(e.unitId);return}const t=(n=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_DOC))==null?void 0:n.getUnitId();t&&this._docRenderController.reRender(t)})),this.disposeWithMe(this._threadCommentModel.commentUpdate$.subscribe(e=>{e.type==="resolve"&&this._docRenderController.reRender(e.unitId)}))}_interceptorViewModel(){this._docInterceptorService.intercept(h.DOC_INTERCEPTOR_POINT.CUSTOM_DECORATION,{handler:(e,t,n)=>{if(!e)return n(e);const{unitId:r,index:i,customDecorations:s}=t,c=this._threadCommentPanelService.activeCommentId,{commentId:m,unitId:v}=c||{},l=s.find(f=>f.id===m),I=this._threadCommentModel.getComment(r,T,e.id);if(!I)return n({...e,show:!1});const M=l&&i>=l.startIndex&&i<=l.endIndex,g=v===r&&e.id===m;return n({...e,active:g||M,show:!I.resolved})}})}};N=Oe([o.OnLifecycle(o.LifecycleStages.Starting,N),R(1,u.Inject(h.DocInterceptorService)),R(2,u.Inject(_.ThreadCommentPanelService)),R(3,u.Inject(G.DocRenderController)),R(4,o.IUniverInstanceService),R(5,u.Inject(w.ThreadCommentModel))],N);var Q=Object.defineProperty,Me=Object.getOwnPropertyDescriptor,De=(e,t,n)=>t in e?Q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Te=(e,t,n,r)=>{for(var i=r>1?void 0:r?Me(t,n):t,s=e.length-1,c;s>=0;s--)(c=e[s])&&(i=(r?c(t,n,i):c(i))||i);return r&&i&&Q(t,n,i),i},k=(e,t)=>(n,r)=>t(n,r,e),ee=(e,t,n)=>De(e,typeof t!="symbol"?t+"":t,n);d.UniverDocsThreadCommentUIPlugin=class extends o.Plugin{constructor(t={menu:{}},n,r){super(),this._config=t,this._injector=n,this._renderManagerSrv=r}onStarting(t){[[x,{useFactory:()=>this._injector.createInstance(x,this._config)}],[$],[b]].forEach(n=>{t.add(n)})}onRendered(){this._initRenderModule()}_initRenderModule(){[N].forEach(t=>{this._renderManagerSrv.registerRenderModule(o.UniverInstanceType.UNIVER_DOC,t)})}},ee(d.UniverDocsThreadCommentUIPlugin,"pluginName",re),ee(d.UniverDocsThreadCommentUIPlugin,"type",o.UniverInstanceType.UNIVER_DOC),d.UniverDocsThreadCommentUIPlugin=Te([o.DependentOn(_.UniverThreadCommentUIPlugin),k(1,u.Inject(u.Injector)),k(2,P.IRenderManagerService)],d.UniverDocsThreadCommentUIPlugin),d.AddDocCommentComment=W,d.DeleteDocCommentComment=H,d.ShowCommentPanelOperation=j,d.StartAddCommentOperation=E,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports,require("@univerjs/core"),require("@univerjs/thread-comment-ui"),require("@univerjs/engine-render"),require("@univerjs/ui"),require("@univerjs/docs"),require("@univerjs/thread-comment"),require("react"),require("rxjs"),require("@univerjs/docs-ui")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/thread-comment-ui","@univerjs/engine-render","@univerjs/ui","@univerjs/docs","@univerjs/thread-comment","react","rxjs","@univerjs/docs-ui"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global.UniverDocsThreadCommentUi={},global.UniverCore,global.UniverThreadCommentUi,global.UniverEngineRender,global.UniverUi,global.UniverDocs,global.UniverThreadComment,global.React,global.rxjs,global.UniverDocsUi))})(this,function(exports2,core,threadCommentUi,engineRender,ui,docs,threadComment,React,rxjs,docsUi){"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);var _a,_b,_c,_d,_e;const PLUGIN_NAME="DOC_THREAD_COMMENT_UI_PLUGIN",DEFAULT_DOC_SUBUNIT_ID="default_doc";var __assign=function(){return __assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)Object.prototype.hasOwnProperty.call(s,p)&&(t[p]=s[p])}return t},__assign.apply(this,arguments)},__rest=function(s,e){var t={};for(var p in s)Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0&&(t[p]=s[p]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++)e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i])&&(t[p[i]]=s[p[i]]);return t},IconBase=React.forwardRef(function(props,ref){var icon=props.icon,id=props.id,className=props.className,extend=props.extend,restProps=__rest(props,["icon","id","className","extend"]),cls="univerjs-icon univerjs-icon-".concat(id," ").concat(className||"").trim(),idSuffix=React.useRef("_".concat(generateShortUuid()));return render(icon,"".concat(id),{defIds:icon.defIds,idSuffix:idSuffix.current},__assign({ref,className:cls},restProps),extend)});function render(node,id,runtimeProps,rootProps,extend){return React.createElement(node.tag,__assign(__assign({key:id},replaceRuntimeIdsAndExtInAttrs(node,runtimeProps,extend)),rootProps),(replaceRuntimeIdsInDefs(node,runtimeProps).children||[]).map(function(child,index){return render(child,"".concat(id,"-").concat(node.tag,"-").concat(index),runtimeProps,void 0,extend)}))}__name(render,"render");function replaceRuntimeIdsAndExtInAttrs(node,runtimeProps,extend){var attrs=__assign({},node.attrs);extend!=null&&extend.colorChannel1&&attrs.fill==="colorChannel1"&&(attrs.fill=extend.colorChannel1);var defIds=runtimeProps.defIds;return!defIds||defIds.length===0||(node.tag==="use"&&attrs["xlink:href"]&&(attrs["xlink:href"]=attrs["xlink:href"]+runtimeProps.idSuffix),Object.entries(attrs).forEach(function(_a2){var key=_a2[0],value=_a2[1];typeof value=="string"&&(attrs[key]=value.replace(/url\(#(.*)\)/,"url(#$1".concat(runtimeProps.idSuffix,")")))})),attrs}__name(replaceRuntimeIdsAndExtInAttrs,"replaceRuntimeIdsAndExtInAttrs");function replaceRuntimeIdsInDefs(node,runtimeProps){var _a2,defIds=runtimeProps.defIds;return!defIds||defIds.length===0?node:node.tag==="defs"&&(!((_a2=node.children)===null||_a2===void 0)&&_a2.length)?__assign(__assign({},node),{children:node.children.map(function(child){return typeof child.attrs.id=="string"&&defIds&&defIds.indexOf(child.attrs.id)>-1?__assign(__assign({},child),{attrs:__assign(__assign({},child.attrs),{id:child.attrs.id+runtimeProps.idSuffix})}):child})}):node}__name(replaceRuntimeIdsInDefs,"replaceRuntimeIdsInDefs");function generateShortUuid(){return Math.random().toString(36).substring(2,8)}__name(generateShortUuid,"generateShortUuid"),IconBase.displayName="UniverIcon";var element={tag:"svg",attrs:{fill:"none",viewBox:"0 0 17 17",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521C5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345ZM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521C8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345ZM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521C11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345Z",fillRule:"evenodd",clipRule:"evenodd"}},{tag:"path",attrs:{fill:"currentColor",d:"M5.83725 6.78345C6.22188 6.78345 6.53368 7.10742 6.53368 7.50706V8.41159C6.53368 8.81123 6.22188 9.13521 5.83725 9.13521 5.45263 9.13521 5.14082 8.81123 5.14082 8.41159V7.50706C5.14082 7.10742 5.45263 6.78345 5.83725 6.78345zM8.73904 6.78345C9.12366 6.78345 9.43546 7.10742 9.43546 7.50706V8.41159C9.43546 8.81123 9.12366 9.13521 8.73904 9.13521 8.35441 9.13521 8.04261 8.81123 8.04261 8.41159V7.50706C8.04261 7.10742 8.35441 6.78345 8.73904 6.78345zM11.6408 6.78345C12.0254 6.78345 12.3372 7.10742 12.3372 7.50706V8.41159C12.3372 8.81123 12.0254 9.13521 11.6408 9.13521 11.2562 9.13521 10.9444 8.81123 10.9444 8.41159V7.50706C10.9444 7.10742 11.2562 6.78345 11.6408 6.78345z"}},{tag:"path",attrs:{fill:"currentColor",d:"M1.84351 3.41861C1.84351 3.01861 2.15531 2.69434 2.53993 2.69434H14.9381C15.3228 2.69434 15.6346 3.01861 15.6346 3.41861V12.4611C15.6346 12.8612 15.3228 13.1854 14.9381 13.1854H8.82117L6.06643 14.6179C5.85054 14.7301 5.59416 14.7181 5.38884 14.5862C5.18352 14.4542 5.05855 14.2211 5.05855 13.9701V13.1854H2.53993C2.15531 13.1854 1.84351 12.8612 1.84351 12.4611L1.84351 3.41861ZM6.45141 12.7982L8.34531 12.0135C8.44201 11.9632 8.54864 11.9371 8.65676 11.9371H14.2417C14.3522 11.9371 14.4417 11.8475 14.4417 11.7371V4.14271C14.4417 4.03225 14.3522 3.94271 14.2417 3.94271H3.23636C3.12591 3.94271 3.03636 4.03225 3.03636 4.14271L3.03636 11.7371C3.03636 11.8475 3.12591 11.9371 3.23636 11.9371L5.75498 11.9371C6.1396 11.9371 6.45141 12.0611 6.45141 12.4611V12.7982Z",fillRule:"evenodd",clipRule:"evenodd"}}]},CommentSingle=React.forwardRef(function(props,ref){return React.createElement(IconBase,Object.assign({},props,{id:"comment-single",ref,icon:element}))});CommentSingle.displayName="CommentSingle";const AddDocCommentComment={id:"docs.command.add-comment",type:core.CommandType.COMMAND,async handler(accessor,params){if(!params)return!1;const{comment:originComment,unitId}=params,comment=await accessor.get(threadComment.IThreadCommentDataSourceService).addComment(originComment),commandService=accessor.get(core.ICommandService),doMutation=docs.addCustomDecorationBySelectionFactory(accessor,{id:comment.id,type:core.CustomDecorationType.COMMENT});if(doMutation){const addComment={id:threadComment.AddCommentMutation.id,params:{unitId,subUnitId:DEFAULT_DOC_SUBUNIT_ID,comment}},activeOperation={id:threadCommentUi.SetActiveCommentOperation.id,params:{unitId,subUnitId:DEFAULT_DOC_SUBUNIT_ID,commentId:comment.id}};return(await core.sequenceExecuteAsync([addComment,doMutation,activeOperation],commandService)).result}return!1}};var __defProp$4=Object.defineProperty,__getOwnPropDesc$4=Object.getOwnPropertyDescriptor,__decorateClass$4=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$4(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$4(target,key,result),result},"__decorateClass$4"),__decorateParam$4=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$4");let DocThreadCommentService=(_a=class extends core.Disposable{constructor(_sidebarService,_threadCommentPanelService){super();__publicField(this,"_addingComment$",new rxjs.BehaviorSubject(void 0));__publicField(this,"addingComment$",this._addingComment$.asObservable());this._sidebarService=_sidebarService,this._threadCommentPanelService=_threadCommentPanelService,this.disposeWithMe(()=>{this._addingComment$.complete()})}get addingComment(){return this._addingComment$.getValue()}startAdd(comment){this._addingComment$.next(comment)}endAdd(){this._addingComment$.next(void 0)}},__name(_a,"DocThreadCommentService"),_a);DocThreadCommentService=__decorateClass$4([__decorateParam$4(0,ui.ISidebarService),__decorateParam$4(1,core.Inject(threadCommentUi.ThreadCommentPanelService))],DocThreadCommentService);const ShowCommentPanelOperation={id:"docs.operation.show-comment-panel",type:core.CommandType.OPERATION,handler(accessor,params){const panelService=accessor.get(threadCommentUi.ThreadCommentPanelService),sidebarService=accessor.get(ui.ISidebarService);return panelService.panelVisible||(sidebarService.open({header:{title:"threadCommentUI.panel.title"},children:{label:DocThreadCommentPanel.componentKey},width:320,onClose:__name(()=>panelService.setPanelVisible(!1),"onClose")}),panelService.setPanelVisible(!0)),params&&panelService.setActiveComment(params==null?void 0:params.activeComment),!0}},ToggleCommentPanelOperation={id:"docs.operation.toggle-comment-panel",type:core.CommandType.OPERATION,handler(accessor){const panelService=accessor.get(threadCommentUi.ThreadCommentPanelService),sidebarService=accessor.get(ui.ISidebarService);return panelService.panelVisible?(sidebarService.close(),panelService.setPanelVisible(!1),panelService.setActiveComment(null)):(sidebarService.open({header:{title:"threadCommentUI.panel.title"},children:{label:DocThreadCommentPanel.componentKey},width:320,onClose:__name(()=>panelService.setPanelVisible(!1),"onClose")}),panelService.setPanelVisible(!0)),!0}},StartAddCommentOperation={id:"docs.operation.start-add-comment",type:core.CommandType.OPERATION,handler(accessor){var _a2,_b2;const panelService=accessor.get(threadCommentUi.ThreadCommentPanelService),doc=accessor.get(core.IUniverInstanceService).getCurrentUnitForType(core.UniverInstanceType.UNIVER_DOC),textSelectionManagerService=accessor.get(docs.TextSelectionManagerService),textSelectionRenderService=accessor.get(engineRender.ITextSelectionRenderManager),userManagerService=accessor.get(core.UserManagerService),docCommentService=accessor.get(DocThreadCommentService),commandService=accessor.get(core.ICommandService),sidebarService=accessor.get(ui.ISidebarService),textRange=textSelectionManagerService.getActiveRange();if(!doc||!textRange)return!1;if(textRange.collapsed)return panelService.panelVisible?(panelService.setPanelVisible(!1),sidebarService.close()):commandService.executeCommand(ShowCommentPanelOperation.id),!0;panelService.panelVisible||commandService.executeCommand(ShowCommentPanelOperation.id);const unitId=doc.getUnitId(),text=docs.getSelectionText((_b2=(_a2=doc.getBody())==null?void 0:_a2.dataStream)!=null?_b2:"",textRange.startOffset,textRange.endOffset),subUnitId=DEFAULT_DOC_SUBUNIT_ID,commentId="",comment={unitId,subUnitId,id:commentId,ref:text,dT:threadCommentUi.getDT(),personId:userManagerService.getCurrentUser().userID,text:{dataStream:`\r
|
|
2
|
+
`},startOffset:textRange.startOffset,endOffset:textRange.endOffset,collapsed:!0,threadId:commentId};return textSelectionRenderService.blurEditor(),docCommentService.startAdd(comment),panelService.setActiveComment({unitId,subUnitId,commentId}),!0}},DeleteDocCommentComment={id:"docs.command.delete-comment",type:core.CommandType.COMMAND,async handler(accessor,params){if(!params)return!1;const{commentId,unitId}=params,commandService=accessor.get(core.ICommandService),doMutation=docs.deleteCustomDecorationFactory(accessor,{id:commentId,unitId});return doMutation?(await core.sequenceExecute([doMutation],commandService)).result:!1}},DocThreadCommentPanel=__name(()=>{const univerInstanceService=core.useDependency(core.IUniverInstanceService),doc$=React.useMemo(()=>univerInstanceService.getCurrentTypeOfUnit$(core.UniverInstanceType.UNIVER_DOC),[univerInstanceService]),doc=core.useObservable(doc$),subUnitId$=React.useMemo(()=>new rxjs.Observable(sub=>sub.next(DEFAULT_DOC_SUBUNIT_ID)),[]),textSelectionManagerService=core.useDependency(docs.TextSelectionManagerService),selectionChange$=React.useMemo(()=>textSelectionManagerService.textSelection$.pipe(rxjs.debounceTime(16)),[textSelectionManagerService.textSelection$]);core.useObservable(selectionChange$);const commandService=core.useDependency(core.ICommandService),docCommentService=core.useDependency(DocThreadCommentService),tempComment=core.useObservable(docCommentService.addingComment$),[commentIds,setCommentIds]=React.useState([]);if(React.useEffect(()=>{var _a2;const set=new Set,customRanges=doc==null?void 0:doc.getCustomDecorations();setCommentIds((_a2=customRanges==null?void 0:customRanges.map(r=>r.id).filter(i=>{const hasRepeat=set.has(i);return set.add(i),!hasRepeat}))!=null?_a2:[]);const dispose=commandService.onCommandExecuted(command=>{var _a3;if(command.id===docs.RichTextEditingMutation.id){const set2=new Set,customRanges2=doc==null?void 0:doc.getCustomDecorations();setCommentIds((_a3=customRanges2==null?void 0:customRanges2.map(r=>r.id).filter(i=>{const hasRepeat=set2.has(i);return set2.add(i),!hasRepeat}))!=null?_a3:[])}});return()=>{dispose.dispose()}},[commandService,doc]),!doc)return null;const activeRange=textSelectionManagerService.getActiveRange(),isInValidSelection=!!(activeRange&&(activeRange.endOffset===activeRange.startOffset||activeRange.segmentId)),unitId=doc.getUnitId();return React.createElement(threadCommentUi.ThreadCommentPanel,{unitId,subUnitId$,type:core.UniverInstanceType.UNIVER_DOC,onAdd:__name(()=>{commandService.executeCommand(StartAddCommentOperation.id)},"onAdd"),getSubUnitName:__name(()=>"","getSubUnitName"),disableAdd:isInValidSelection,tempComment,onAddComment:__name(comment=>{if(!comment.parentId){const params={unitId,range:tempComment,comment};return commandService.executeCommand(AddDocCommentComment.id,params),docCommentService.endAdd(),!1}return!0},"onAddComment"),onDeleteComment:__name(comment=>{if(!comment.parentId){const params={unitId,commentId:comment.id};return commandService.executeCommand(DeleteDocCommentComment.id,params),!1}return!0},"onDeleteComment"),showComments:commentIds})},"DocThreadCommentPanel");DocThreadCommentPanel.componentKey="univer.doc.thread-comment-panel";const shouldDisableAddComment=__name(accessor=>{const renderManagerService=accessor.get(engineRender.IRenderManagerService),textSelectionManagerService=accessor.get(docs.TextSelectionManagerService),render2=renderManagerService.getCurrent(),skeleton=render2==null?void 0:render2.with(docs.DocSkeletonManagerService).getSkeleton(),editArea=skeleton==null?void 0:skeleton.getViewModel().getEditArea();if(editArea===engineRender.DocumentEditArea.FOOTER||editArea===engineRender.DocumentEditArea.HEADER)return!0;const range=textSelectionManagerService.getActiveRange();return!!(!range||range.collapsed)},"shouldDisableAddComment");function AddDocCommentMenuItemFactory(accessor){return{id:StartAddCommentOperation.id,group:ui.MenuGroup.CONTEXT_MENU_DATA,type:ui.MenuItemType.BUTTON,icon:"CommentSingle",title:"threadCommentUI.panel.addComment",tooltip:"threadCommentUI.panel.addComment",positions:[ui.MenuPosition.CONTEXT_MENU],hidden$:ui.getMenuHiddenObservable(accessor,core.UniverInstanceType.UNIVER_DOC),disabled$:new rxjs.Observable(function(subscribe){const observer=accessor.get(docs.TextSelectionManagerService).textSelection$.pipe(rxjs.debounceTime(16)).subscribe(()=>{subscribe.next(shouldDisableAddComment(accessor))});return()=>{observer.unsubscribe()}})}}__name(AddDocCommentMenuItemFactory,"AddDocCommentMenuItemFactory");function ToolbarDocCommentMenuItemFactory(accessor){return{id:ToggleCommentPanelOperation.id,group:ui.MenuGroup.CONTEXT_MENU_DATA,type:ui.MenuItemType.BUTTON,icon:"CommentSingle",title:"threadCommentUI.panel.addComment",tooltip:"threadCommentUI.panel.addComment",positions:[ui.MenuPosition.TOOLBAR_START],hidden$:ui.getMenuHiddenObservable(accessor,core.UniverInstanceType.UNIVER_DOC)}}__name(ToolbarDocCommentMenuItemFactory,"ToolbarDocCommentMenuItemFactory");var __defProp$3=Object.defineProperty,__getOwnPropDesc$3=Object.getOwnPropertyDescriptor,__decorateClass$3=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$3(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$3(target,key,result),result},"__decorateClass$3"),__decorateParam$3=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$3");let DocThreadCommentUIController=(_b=class extends core.Disposable{constructor(_config,_commandService,_menuService,_injector,_componentManager){super(),this._config=_config,this._commandService=_commandService,this._menuService=_menuService,this._injector=_injector,this._componentManager=_componentManager,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[AddDocCommentComment,DeleteDocCommentComment,ShowCommentPanelOperation,StartAddCommentOperation,ToggleCommentPanelOperation].forEach(command=>{this.disposeWithMe(this._commandService.registerCommand(command))})}_initMenus(){[AddDocCommentMenuItemFactory,ToolbarDocCommentMenuItemFactory].forEach(menuFactory=>{this.disposeWithMe(this._menuService.addMenuItem(menuFactory(this._injector),this._config.menu))})}_initComponents(){[DocThreadCommentPanel].forEach(comp=>{this.disposeWithMe(this._componentManager.register(comp.componentKey,comp))}),this.disposeWithMe(this._componentManager.register("CommentSingle",CommentSingle))}},__name(_b,"DocThreadCommentUIController"),_b);DocThreadCommentUIController=__decorateClass$3([core.OnLifecycle(core.LifecycleStages.Rendered,DocThreadCommentUIController),__decorateParam$3(1,core.ICommandService),__decorateParam$3(2,ui.IMenuService),__decorateParam$3(3,core.Inject(core.Injector)),__decorateParam$3(4,core.Inject(ui.ComponentManager))],DocThreadCommentUIController);var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2");let DocThreadCommentSelectionController=(_c=class extends core.Disposable{constructor(_threadCommentPanelService,_univerInstanceService,_commandService,_docThreadCommentService,_renderManagerService,_threadCommentModel){super(),this._threadCommentPanelService=_threadCommentPanelService,this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._docThreadCommentService=_docThreadCommentService,this._renderManagerService=_renderManagerService,this._threadCommentModel=_threadCommentModel,this._initSelectionChange(),this._initActiveCommandChange()}_initSelectionChange(){let lastSelection;this.disposeWithMe(this._commandService.onCommandExecuted(commandInfo=>{var _a2,_b2,_c2,_d2;if(commandInfo.id===docs.SetTextSelectionsOperation.id){const params=commandInfo.params,{unitId,ranges}=params,doc=this._univerInstanceService.getUnit(unitId,core.UniverInstanceType.UNIVER_DOC),primary=ranges[0];if((lastSelection==null?void 0:lastSelection.startOffset)===(primary==null?void 0:primary.startOffset)&&(lastSelection==null?void 0:lastSelection.endOffset)===(primary==null?void 0:primary.endOffset))return;if(lastSelection=primary,primary&&doc){const{startOffset,endOffset,collapsed}=primary;let customRange;if(collapsed?customRange=(_b2=(_a2=doc.getBody())==null?void 0:_a2.customDecorations)==null?void 0:_b2.find(value=>value.startIndex<=startOffset&&value.endIndex>=endOffset-1):customRange=(_d2=(_c2=doc.getBody())==null?void 0:_c2.customDecorations)==null?void 0:_d2.find(value=>value.startIndex<=startOffset&&value.endIndex>=endOffset-1),customRange){const comment=this._threadCommentModel.getComment(unitId,DEFAULT_DOC_SUBUNIT_ID,customRange.id);comment&&!comment.resolved&&this._commandService.executeCommand(ShowCommentPanelOperation.id,{activeComment:{unitId,subUnitId:DEFAULT_DOC_SUBUNIT_ID,commentId:customRange.id}});return}}this._commandService.executeCommand(threadCommentUi.SetActiveCommentOperation.id)}}))}_initActiveCommandChange(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(activeComment=>{var _a2,_b2,_c2;if(activeComment){const doc=this._univerInstanceService.getUnit(activeComment.unitId);if(doc){const backScrollController=(_a2=this._renderManagerService.getRenderById(activeComment.unitId))==null?void 0:_a2.with(docsUi.DocBackScrollRenderController),customRange=(_b2=doc.getCustomRanges())==null?void 0:_b2.find(range=>range.rangeId===activeComment.commentId);customRange&&backScrollController&&backScrollController.scrollToRange(activeComment.unitId,{startOffset:customRange.startIndex,endOffset:customRange.endIndex,collapsed:!1})}}(!activeComment||activeComment.commentId!==((_c2=this._docThreadCommentService.addingComment)==null?void 0:_c2.id))&&this._docThreadCommentService.endAdd()}))}},__name(_c,"DocThreadCommentSelectionController"),_c);DocThreadCommentSelectionController=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Rendered,DocThreadCommentSelectionController),__decorateParam$2(0,core.Inject(threadCommentUi.ThreadCommentPanelService)),__decorateParam$2(1,core.IUniverInstanceService),__decorateParam$2(2,core.ICommandService),__decorateParam$2(3,core.Inject(DocThreadCommentService)),__decorateParam$2(4,engineRender.IRenderManagerService),__decorateParam$2(5,core.Inject(threadComment.ThreadCommentModel))],DocThreadCommentSelectionController);var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1");let DocThreadCommentRenderController=(_d=class extends core.Disposable{constructor(_context,_docInterceptorService,_threadCommentPanelService,_docRenderController,_univerInstanceService,_threadCommentModel){super(),this._context=_context,this._docInterceptorService=_docInterceptorService,this._threadCommentPanelService=_threadCommentPanelService,this._docRenderController=_docRenderController,this._univerInstanceService=_univerInstanceService,this._threadCommentModel=_threadCommentModel,this._interceptorViewModel(),this._initReRender()}_initReRender(){this.disposeWithMe(this._threadCommentPanelService.activeCommentId$.subscribe(activeComment=>{var _a2;if(activeComment){this._docRenderController.reRender(activeComment.unitId);return}const unitId=(_a2=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_DOC))==null?void 0:_a2.getUnitId();unitId&&this._docRenderController.reRender(unitId)})),this.disposeWithMe(this._threadCommentModel.commentUpdate$.subscribe(update=>{update.type==="resolve"&&this._docRenderController.reRender(update.unitId)}))}_interceptorViewModel(){this._docInterceptorService.intercept(docs.DOC_INTERCEPTOR_POINT.CUSTOM_DECORATION,{handler:__name((data,pos,next)=>{if(!data)return next(data);const{unitId,index,customDecorations}=pos,activeComment=this._threadCommentPanelService.activeCommentId,{commentId,unitId:commentUnitID}=activeComment||{},activeCustomDecoration=customDecorations.find(i=>i.id===commentId),comment=this._threadCommentModel.getComment(unitId,DEFAULT_DOC_SUBUNIT_ID,data.id);if(!comment)return next({...data,show:!1});const isActiveIndex=activeCustomDecoration&&index>=activeCustomDecoration.startIndex&&index<=activeCustomDecoration.endIndex,isActive=commentUnitID===unitId&&data.id===commentId;return next({...data,active:isActive||isActiveIndex,show:!comment.resolved})},"handler")})}},__name(_d,"DocThreadCommentRenderController"),_d);DocThreadCommentRenderController=__decorateClass$1([core.OnLifecycle(core.LifecycleStages.Starting,DocThreadCommentRenderController),__decorateParam$1(1,core.Inject(docs.DocInterceptorService)),__decorateParam$1(2,core.Inject(threadCommentUi.ThreadCommentPanelService)),__decorateParam$1(3,core.Inject(docsUi.DocRenderController)),__decorateParam$1(4,core.IUniverInstanceService),__decorateParam$1(5,core.Inject(threadComment.ThreadCommentModel))],DocThreadCommentRenderController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp2=__name((obj,key,value)=>key in obj?__defProp2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,"__defNormalProp"),__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam"),__publicField2=__name((obj,key,value)=>__defNormalProp2(obj,typeof key!="symbol"?key+"":key,value),"__publicField");exports2.UniverDocsThreadCommentUIPlugin=(_e=class extends core.Plugin{constructor(_config={menu:{}},_injector,_renderManagerSrv){super(),this._config=_config,this._injector=_injector,this._renderManagerSrv=_renderManagerSrv}onStarting(){[[DocThreadCommentUIController,{useFactory:__name(()=>this._injector.createInstance(DocThreadCommentUIController,this._config),"useFactory")}],[DocThreadCommentSelectionController],[DocThreadCommentService]].forEach(dep=>{this._injector.add(dep)})}onRendered(){this._initRenderModule()}_initRenderModule(){[DocThreadCommentRenderController].forEach(dep=>{this._renderManagerSrv.registerRenderModule(core.UniverInstanceType.UNIVER_DOC,dep)})}},__name(_e,"UniverDocsThreadCommentUIPlugin"),_e),__publicField2(exports2.UniverDocsThreadCommentUIPlugin,"pluginName",PLUGIN_NAME),__publicField2(exports2.UniverDocsThreadCommentUIPlugin,"type",core.UniverInstanceType.UNIVER_DOC),exports2.UniverDocsThreadCommentUIPlugin=__decorateClass([core.DependentOn(threadCommentUi.UniverThreadCommentUIPlugin),__decorateParam(1,core.Inject(core.Injector)),__decorateParam(2,engineRender.IRenderManagerService)],exports2.UniverDocsThreadCommentUIPlugin),exports2.AddDocCommentComment=AddDocCommentComment,exports2.DeleteDocCommentComment=DeleteDocCommentComment,exports2.ShowCommentPanelOperation=ShowCommentPanelOperation,exports2.StartAddCommentOperation=StartAddCommentOperation,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs/docs-thread-comment-ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Univer thread comment plugin",
|
|
6
6
|
"author": "DreamNum <developer@univer.ai>",
|
|
@@ -44,35 +44,33 @@
|
|
|
44
44
|
"lib"
|
|
45
45
|
],
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@wendellhu/redi": "0.16.0",
|
|
48
47
|
"react": "^16.9.0 || ^17.0.0 || ^18.0.0",
|
|
49
48
|
"rxjs": ">=7.0.0",
|
|
50
|
-
"@univerjs/core": "0.2.
|
|
51
|
-
"@univerjs/docs": "0.2.
|
|
52
|
-
"@univerjs/
|
|
53
|
-
"@univerjs/
|
|
54
|
-
"@univerjs/thread-comment-ui": "0.2.
|
|
55
|
-
"@univerjs/
|
|
56
|
-
"@univerjs/
|
|
49
|
+
"@univerjs/core": "0.2.6",
|
|
50
|
+
"@univerjs/docs-ui": "0.2.6",
|
|
51
|
+
"@univerjs/engine-render": "0.2.6",
|
|
52
|
+
"@univerjs/thread-comment": "0.2.6",
|
|
53
|
+
"@univerjs/thread-comment-ui": "0.2.6",
|
|
54
|
+
"@univerjs/ui": "0.2.6",
|
|
55
|
+
"@univerjs/docs": "0.2.6"
|
|
57
56
|
},
|
|
58
57
|
"dependencies": {
|
|
59
|
-
"@univerjs/icons": "^0.1.
|
|
58
|
+
"@univerjs/icons": "^0.1.70"
|
|
60
59
|
},
|
|
61
60
|
"devDependencies": {
|
|
62
|
-
"@wendellhu/redi": "0.16.0",
|
|
63
61
|
"clsx": "^2.1.1",
|
|
64
62
|
"react": "18.3.1",
|
|
65
63
|
"rxjs": "^7.8.1",
|
|
66
|
-
"typescript": "^5.5.
|
|
67
|
-
"vite": "^5.3.
|
|
68
|
-
"vitest": "^2.0.
|
|
69
|
-
"@univerjs/core": "0.2.
|
|
70
|
-
"@univerjs/
|
|
71
|
-
"@univerjs/
|
|
72
|
-
"@univerjs/thread-comment": "0.2.
|
|
73
|
-
"@univerjs/
|
|
74
|
-
"@univerjs/
|
|
75
|
-
"@univerjs/ui": "0.2.
|
|
64
|
+
"typescript": "^5.5.4",
|
|
65
|
+
"vite": "^5.3.5",
|
|
66
|
+
"vitest": "^2.0.4",
|
|
67
|
+
"@univerjs/core": "0.2.6",
|
|
68
|
+
"@univerjs/shared": "0.2.6",
|
|
69
|
+
"@univerjs/design": "0.2.6",
|
|
70
|
+
"@univerjs/thread-comment": "0.2.6",
|
|
71
|
+
"@univerjs/engine-formula": "0.2.6",
|
|
72
|
+
"@univerjs/ui": "0.2.6",
|
|
73
|
+
"@univerjs/thread-comment-ui": "0.2.6"
|
|
76
74
|
},
|
|
77
75
|
"univerSpace": {
|
|
78
76
|
".": {
|