@nocobase/plugin-async-task-manager 1.7.0-beta.11 → 1.7.0-beta.13

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/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Updated Date: February 20, 2025
1
+ Updated Date: April 1, 2025
2
2
 
3
3
  NocoBase License Agreement
4
4
 
@@ -88,7 +88,7 @@ Except for Third-Party Open Source Software, the Company owns all copyrights, tr
88
88
 
89
89
  6.6 Can sell plugins developed for Software in the Marketplace.
90
90
 
91
- 6.7 The User with an Enterprise Edition License can sell Upper Layer Application to their clients.
91
+ 6.7 The User with a Professional or Enterprise Edition License can sell Upper Layer Application to their clients.
92
92
 
93
93
  6.8 Not restricted by the AGPL-3.0 agreement.
94
94
 
@@ -106,9 +106,9 @@ Except for Third-Party Open Source Software, the Company owns all copyrights, tr
106
106
 
107
107
  7.4 It is not allowed to provide any form of no-code, zero-code, low-code platform SaaS products to the public using the original or modified Software.
108
108
 
109
- 7.5 It is not allowed for the User withot an Enterprise Edition license to sell Upper Layer Application to clients without a Commercial license.
109
+ 7.5 It is not allowed for the User withot a Professional or Enterprise Edition license to sell Upper Layer Application to clients without a Commercial license.
110
110
 
111
- 7.6 It is not allowed for the User with an Enterprise Edition license to sell Upper Layer Application to clients without a Commercial license with access to further development and configuration.
111
+ 7.6 It is not allowed for the User with a Professional or Enterprise Edition license to sell Upper Layer Application to clients without a Commercial license with access to further development and configuration.
112
112
 
113
113
  7.7 It is not allowed to publicly sell plugins developed for Software outside of the Marketplace.
114
114
 
@@ -1,4 +1,10 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
1
9
  import React from 'react';
2
- export declare const AsyncTaskContext: React.Context<any>;
3
- export declare const useAsyncTask: () => any;
4
10
  export declare const AsyncTaskManagerProvider: (props: any) => React.JSX.Element;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
1
9
  import React from 'react';
2
10
  import 'dayjs/locale/zh-cn';
3
11
  export declare const AsyncTasks: () => React.JSX.Element;
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("@nocobase/client"),require("dayjs"),require("antd")):"function"==typeof define&&define.amd?define("@nocobase/plugin-async-task-manager",["react","@nocobase/client","dayjs","antd"],t):"object"==typeof exports?exports["@nocobase/plugin-async-task-manager"]=t(require("react"),require("@nocobase/client"),require("dayjs"),require("antd")):e["@nocobase/plugin-async-task-manager"]=t(e.react,e["@nocobase/client"],e.dayjs,e.antd)}(self,function(e,t,n,r){return function(){var o={379:function(e,t,n){var r,o;r=0,o=function(e){"use strict";var t,n=(t=e)&&"object"==typeof t&&"default"in t?t:{default:t},r={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e,t){return"W"===t?e+"周":e+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(e,t){var n=100*e+t;return n<600?"凌晨":n<900?"早上":n<1100?"上午":n<1300?"中午":n<1800?"下午":"晚上"}};return n.default.locale(r,null,!0),r},e.exports=o(n(760))},809:function(e){var t,n;t=0,n=function(){return function(e,t,n){e=e||{};var r=t.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function a(e,t,n,o){return r.fromToBase(e,t,n,o)}n.en.relativeTime=o,r.fromToBase=function(t,r,a,s,i){for(var c,u,l,f=a.$locale().relativeTime||o,d=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],p=d.length,y=0;y<p;y+=1){var m=d[y];m.d&&(c=s?n(t).diff(a,m.d,!0):a.diff(t,m.d,!0));var v=(e.rounding||Math.round)(Math.abs(c));if(l=c>0,v<=m.r||!m.r){v<=1&&y>0&&(m=d[y-1]);var b=f[m.l];i&&(v=i(""+v)),u="string"==typeof b?b.replace("%d",v):b(v,r,m.l,l);break}}if(r)return u;var h=l?f.future:f.past;return"function"==typeof h?h(u):h.replace("%s",u)},r.to=function(e,t){return a(e,t,this,!0)},r.from=function(e,t){return a(e,t,this)};var s=function(e){return e.$u?n.utc():n()};r.toNow=function(e){return this.to(s(this),e)},r.fromNow=function(e){return this.from(s(this),e)}}},e.exports=n()},772:function(e){"use strict";e.exports=t},721:function(e){"use strict";e.exports=r},760:function(e){"use strict";e.exports=n},156:function(t){"use strict";t.exports=e}},a={};function s(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return o[e].call(n.exports,n,n.exports,s),n.exports}s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return!function(){"use strict";s.r(i),s.d(i,{default:function(){return A},PluginAsyncExportClient:function(){return I}});var e=s("772"),t=s("156"),n=s.n(t),r=s("721"),o=s("760"),a=s.n(o);s("379");var c=s("809"),u=s.n(c),l=JSON.parse('{"u2":"@nocobase/plugin-async-task-manager"}');function f(){var t=(0,e.useApp)();return function(e){return t.i18n.t(e,{ns:[l.u2,"client"]})}}var d=(0,e.createStyles)(function(e){return{button:{color:e.token.colorTextHeaderMenu+" !important"}}});a().extend(u());var p=function(e,t){if("success"!==e.type||!(null===(a=e.payload)||void 0===a?void 0:null===(o=a.message)||void 0===o?void 0:o.messageId))return null;var o,a,s=e.payload.message,i=s.messageId,c=s.messageValues;return n().createElement("div",{style:{marginLeft:8}},n().createElement(r.Tag,{color:"success"},t(i,c)))},y=function(){var o=E(),s=o.tasks,i=o.popoverVisible,c=o.setPopoverVisible,u=o.hasProcessingTasks,l=o.cancellingTasks,y=o.modalVisible,m=o.setModalVisible,v=o.currentError,b=o.setCurrentError,h=o.resultModalVisible,g=o.setResultModalVisible,k=o.currentTask,w=o.setCurrentTask,O=o.handleCancelTask,_=(0,e.usePlugin)("async-task-manager"),x=(0,e.useApp)(),S=(0,e.useCurrentAppInfo)(),T=f(),C=d().styles;(0,t.useEffect)(function(){var e=function(e){if(i){var t=document.querySelectorAll(".ant-popover"),n=document.querySelector(".sync-task-button"),r=!1;t.forEach(function(t){t.contains(e.target)&&(r=!0)}),(null==n?void 0:n.contains(e.target))&&(r=!0),!r&&c(!1)}};return document.addEventListener("click",e),function(){document.removeEventListener("click",e)}},[i,c]);var P=function(e){w(e),g(!0),c(!1)},M=[{title:T("Created at"),dataIndex:"createdAt",key:"createdAt",width:180,render:function(e){return n().createElement(r.Tooltip,{title:a()(e).format("YYYY-MM-DD HH:mm:ss")},a()(e).fromNow())}},{title:T("Task"),dataIndex:"title",key:"title",render:function(e,t){var n=t.title;if(!n)return"-";var r={export:T("Export"),import:T("Import"),"export-attachments":T("Export attachments")}[n.actionType]||n.actionType;return(({"export-attachments":T("Export {collection} attachments"),export:T("Export {collection} data"),import:T("Import {collection} data")})[n.actionType]||"".concat(r)).replace("{collection}",n.collection)}},{title:T("Status"),dataIndex:"status",key:"status",width:160,render:function(t,o){var a,s={pending:{color:"default",text:T("Waiting"),icon:"ClockCircleOutlined"},running:{color:"processing",text:T("Processing"),icon:"LoadingOutlined"},success:{color:"success",text:T("Completed"),icon:"CheckCircleOutlined"},failed:{color:"error",text:T("Failed"),icon:"CloseCircleOutlined"},cancelled:{color:"warning",text:T("Cancelled"),icon:"StopOutlined"}},i=s[t.type]||{},c=i.color;return i.text,n().createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},n().createElement("div",{style:{flex:1}},function(){var e,a,s={width:100,margin:0};switch(t.indicator){case"spinner":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:100,status:"active",showInfo:!1,style:s});case"progress":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:Number(((null===(e=o.progress)||void 0===e?void 0:e.current)/(null===(a=o.progress)||void 0===a?void 0:a.total)*100).toFixed(2)),status:"active",style:s,format:function(e){return"".concat(e.toFixed(1),"%")}});case"success":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:100,status:"success",style:s,format:function(){return""}});case"error":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:100,status:"exception",style:s,format:function(){return""}});default:return null}}()),n().createElement(r.Tag,{color:c,icon:(null===(a=s[t.type])||void 0===a?void 0:a.icon)?n().createElement(e.Icon,{type:s[t.type].icon}):null,style:{margin:0,padding:"0 4px",height:22,width:22}}),p(t,T))}},{title:T("Actions"),key:"actions",width:180,render:function(t,o){var a=[],s=l.has(o.taskId);return("running"===o.status.type||"pending"===o.status.type)&&o.cancelable&&a.push(n().createElement(r.Popconfirm,{key:"cancel",title:T("Confirm cancel"),description:T("Confirm cancel description"),onConfirm:function(){return O(o.taskId)},okText:T("Confirm"),cancelText:T("Cancel"),disabled:s},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(e.Icon,{type:s?"LoadingOutlined":"StopOutlined"}),disabled:s},s?T("Cancelling"):T("Cancel")))),"success"===o.status.type&&("file"===o.status.resultType?a.push(n().createElement(r.Button,{key:"download",type:"link",size:"small",icon:n().createElement(e.Icon,{type:"DownloadOutlined"}),onClick:function(){var e,t=x.apiClient.auth.token,n=x.getApiUrl("asyncTasks:fetchFile/".concat(o.taskId,"?token=").concat(t,"&__appName=").concat((null==S?void 0:null===(e=S.data)||void 0===e?void 0:e.name)||x.name));window.open(n)}},T("Download"))):o.status.payload&&a.push(n().createElement(r.Button,{key:"view",type:"link",size:"small",icon:n().createElement(e.Icon,{type:"EyeOutlined"}),onClick:function(){return P(o)}},T("View result")))),"failed"===o.status.type&&a.push(n().createElement(r.Button,{key:"error",type:"link",size:"small",icon:n().createElement(e.Icon,{type:"ExclamationCircleOutlined"}),onClick:function(){b(o.status.errors),m(!0),c(!1)}},T("Error details"))),n().createElement(r.Space,{size:"middle"},a)}}],j=n().createElement("div",{style:{width:s.length>0?800:200}},s.length>0?n().createElement(r.Table,{columns:M,dataSource:s,size:"small",pagination:!1,rowKey:"taskId"}):n().createElement("div",{style:{padding:"24px 0",display:"flex",justifyContent:"center"}},n().createElement(r.Empty,{description:T("No tasks"),image:r.Empty.PRESENTED_IMAGE_SIMPLE})));return n().createElement(n().Fragment,null,n().createElement(r.Popover,{content:j,trigger:"hover",placement:"bottom",open:i,onOpenChange:c},n().createElement(r.Button,{className:["sync-task-button",C.button].join(" "),icon:n().createElement(e.Icon,{type:"SyncOutlined",spin:u}),onClick:function(){return c(!i)}})),function(){if(!!k){var e=k.status.payload,t=_.taskResultRendererManager.get(k.title.actionType);return n().createElement(r.Modal,{title:T("Task result"),open:h,footer:[n().createElement(r.Button,{key:"close",onClick:function(){return g(!1)}},T("Close"))],onCancel:function(){return g(!1)}},t?n().createElement(t,{payload:e,task:k}):n().createElement("div",null,T("No renderer available for this task type, payload: ".concat(e))))}}(),n().createElement(r.Modal,{title:T("Error Details"),open:y,onCancel:function(){return m(!1)},footer:[n().createElement(r.Button,{key:"ok",type:"primary",onClick:function(){return m(!1)}},T("OK"))],width:400},null==v?void 0:v.map(function(e,t){return n().createElement("div",{key:t,style:{marginBottom:16}},n().createElement("div",{style:{color:"#ff4d4f",marginBottom:8}},e.message),e.code&&n().createElement("div",{style:{color:"#999",fontSize:12}},T("Error code"),": ",e.code))})))};function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function v(e,t,n,r,o,a,s){try{var i=e[a](s),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,o)}function b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],s=!0,i=!1;try{for(o=o.call(e);!(s=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{!s&&null!=o.return&&o.return()}finally{if(i)throw r}}return a}}(e,t)||k(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){if(e){if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m(e,t)}}var w=(0,t.createContext)(null),E=function(){var e=(0,t.useContext)(w);if(!e)throw Error("useAsyncTask must be used within AsyncTaskManagerProvider");return e},O=function(o){var a,s,i=(0,e.useApp)(),c=f(),u=g((0,t.useState)([]),2),l=u[0],d=u[1],p=g((0,t.useState)(!1),2),E=p[0],O=p[1],_=g((0,t.useState)(!1),2),x=_[0],S=_[1],T=g((0,t.useState)(new Set),2),C=T[0],P=T[1],M=g((0,t.useState)(!1),2),j=M[0],Y=M[1],I=g((0,t.useState)(null),2),A=I[0],L=I[1],B=g((0,t.useState)(!1),2),D=B[0],z=B[1],V=g((0,t.useState)(null),2),q=V[0],N=V[1],H=g((0,t.useState)(function(){return i.isWsAuthorized}),2),R=H[0],F=H[1];(0,t.useEffect)(function(){S(l.some(function(e){return"success"!==e.status.type&&"failed"!==e.status.type}))},[l]);var W=(0,t.useCallback)(function(e){var t=e.detail;d(t?t.sort(function(e,t){return new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()}):[])},[]),G=(0,t.useCallback)(function(e){var t=e.detail;d(function(e){var n;return[t].concat(function(e){if(Array.isArray(e))return m(e)}(n=e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||k(n)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort(function(e,t){return new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()})}),O(!0)},[]),J=(0,t.useCallback)(function(e){var t=e.detail,n=t.taskId,r=t.progress;d(function(e){return e.map(function(e){return e.taskId===n?h(b({},e),{progress:r}):e})})},[]),$=(0,t.useCallback)(function(e){var t=e.detail,n=t.taskId,o=t.status;"cancelled"===o.type?d(function(e){return e.filter(function(e){return e.taskId!==n})}):d(function(e){return e.map(function(e){return e.taskId===n?("success"===o.type&&"success"!==e.status.type&&r.message.success(c("Task completed")),"failed"===o.type&&"failed"!==e.status.type&&r.message.error(c("Task failed")),h(b({},e),{status:o})):e})})},[]),K=(0,t.useCallback)(function(){F(!0)},[]),U=(0,t.useCallback)(function(e){var t=e.detail.taskId;P(function(e){var n=new Set(e);return n.delete(t),n}),r.message.success(c("Task cancelled"))},[]);(0,t.useEffect)(function(){return i.eventBus.addEventListener("ws:message:async-tasks",W),i.eventBus.addEventListener("ws:message:async-tasks:created",G),i.eventBus.addEventListener("ws:message:async-tasks:progress",J),i.eventBus.addEventListener("ws:message:async-tasks:status",$),i.eventBus.addEventListener("ws:message:authorized",K),i.eventBus.addEventListener("ws:message:async-tasks:cancelled",U),R&&i.ws.send(JSON.stringify({type:"request:async-tasks:list"})),function(){i.eventBus.removeEventListener("ws:message:async-tasks",W),i.eventBus.removeEventListener("ws:message:async-tasks:created",G),i.eventBus.removeEventListener("ws:message:async-tasks:progress",J),i.eventBus.removeEventListener("ws:message:async-tasks:status",$),i.eventBus.removeEventListener("ws:message:authorized",K),i.eventBus.removeEventListener("ws:message:async-tasks:cancelled",U)}},[i,W,G,J,$,K,U,R]);var Q=(s=(a=function(e){return function(e,t){var n,r,o,a,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){return function(a){if(n)throw TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=(o=s.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,i])}}}(this,function(t){P(function(t){return new Set(t).add(e)});try{i.ws.send(JSON.stringify({type:"request:async-tasks:cancel",payload:{taskId:e}}))}catch(t){console.error("Failed to cancel task:",t),P(function(t){var n=new Set(t);return n.delete(e),n})}return[2]})},function(){var e=this,t=arguments;return new Promise(function(n,r){var o=a.apply(e,t);function s(e){v(o,n,r,s,i,"next",e)}function i(e){v(o,n,r,s,i,"throw",e)}s(void 0)})}),function(e){return s.apply(this,arguments)});return n().createElement(w.Provider,{value:{tasks:l,popoverVisible:E,setPopoverVisible:O,hasProcessingTasks:x,cancellingTasks:C,modalVisible:j,setModalVisible:Y,currentError:A,setCurrentError:L,resultModalVisible:D,setResultModalVisible:z,currentTask:q,setCurrentTask:N,handleCancelTask:Q}},n().createElement(e.PinnedPluginListProvider,{items:l.length>0?{asyncTasks:{order:300,component:"AsyncTasks",pin:!0,snippet:"*"}}:{}},n().createElement(e.SchemaComponentOptions,{components:{AsyncTasks:y}},o.children)))};function _(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var x=function(){var e,t,n;function r(){var e,t,n;!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,r),e=this,t="renderers",n=new Map,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}return e=r,t=[{key:"register",value:function(e,t){this.renderers.set(e,t)}},{key:"get",value:function(e){return this.renderers.get(e)}}],_(e.prototype,t),r}();function S(e,t,n,r,o,a,s){try{var i=e[a](s),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,o)}function T(e,t,n){return(T=Y()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&M(o,n.prototype),o}).apply(null,arguments)}function C(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function P(e){return(P=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function M(e,t){return(M=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function j(e){var t="function"==typeof Map?new Map:void 0;return(j=function(e){var n;if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return T(e,arguments,P(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),M(r,e)})(e)}function Y(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Y=function(){return!!e})()}var I=function(e){var t,n,r;function o(){var e,t,n,r,a,s,i;return!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,o),t=this,n=o,r=arguments,n=P(n),a=e=function(e,t){return t&&("object"===function(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}(t)||"function"==typeof t)?t:function(e){if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(t,Y()?Reflect.construct(n,r||[],P(t).constructor):n.apply(t,r)),s="taskResultRendererManager",i=new x,s in a?Object.defineProperty(a,s,{value:i,enumerable:!0,configurable:!0,writable:!0}):a[s]=i,e}return!function(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&M(e,t)}(o,e),t=o,n=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,o,a,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){return function(a){if(n)throw TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=(o=s.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,i])}}}(this,function(e){return t.app.use(O),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function s(e){S(a,r,o,s,i,"next",e)}function i(e){S(a,r,o,s,i,"throw",e)}s(void 0)})})()}}],C(t.prototype,n),o}(j(e.Plugin)),A=I}(),i}()});
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client"),require("dayjs"),require("react"),require("antd")):"function"==typeof define&&define.amd?define("@nocobase/plugin-async-task-manager",["@nocobase/client","dayjs","react","antd"],t):"object"==typeof exports?exports["@nocobase/plugin-async-task-manager"]=t(require("@nocobase/client"),require("dayjs"),require("react"),require("antd")):e["@nocobase/plugin-async-task-manager"]=t(e["@nocobase/client"],e.dayjs,e.react,e.antd)}(self,function(e,t,n,r){return function(){var o={379:function(e,t,n){var r,o;r=0,o=function(e){"use strict";var t,n=(t=e)&&"object"==typeof t&&"default"in t?t:{default:t},r={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e,t){return"W"===t?e+"周":e+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(e,t){var n=100*e+t;return n<600?"凌晨":n<900?"早上":n<1100?"上午":n<1300?"中午":n<1800?"下午":"晚上"}};return n.default.locale(r,null,!0),r},e.exports=o(n(760))},809:function(e){var t,n;t=0,n=function(){return function(e,t,n){e=e||{};var r=t.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function a(e,t,n,o){return r.fromToBase(e,t,n,o)}n.en.relativeTime=o,r.fromToBase=function(t,r,a,i,l){for(var s,c,u,f=a.$locale().relativeTime||o,d=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],p=d.length,y=0;y<p;y+=1){var m=d[y];m.d&&(s=i?n(t).diff(a,m.d,!0):a.diff(t,m.d,!0));var v=(e.rounding||Math.round)(Math.abs(s));if(u=s>0,v<=m.r||!m.r){v<=1&&y>0&&(m=d[y-1]);var h=f[m.l];l&&(v=l(""+v)),c="string"==typeof h?h.replace("%d",v):h(v,r,m.l,u);break}}if(r)return c;var b=u?f.future:f.past;return"function"==typeof b?b(c):b.replace("%s",c)},r.to=function(e,t){return a(e,t,this,!0)},r.from=function(e,t){return a(e,t,this)};var i=function(e){return e.$u?n.utc():n()};r.toNow=function(e){return this.to(i(this),e)},r.fromNow=function(e){return this.from(i(this),e)}}},e.exports=n()},772:function(t){"use strict";t.exports=e},721:function(e){"use strict";e.exports=r},760:function(e){"use strict";e.exports=t},156:function(e){"use strict";e.exports=n}},a={};function i(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return o[e].call(n.exports,n,n.exports,i),n.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var l={};return!function(){"use strict";i.r(l),i.d(l,{default:function(){return Y},PluginAsyncExportClient:function(){return j}});var e=i("772"),t=i("156"),n=i.n(t),r=i("721"),o=i("760"),a=i.n(o);i("379");var s=i("809"),c=i.n(s),u=JSON.parse('{"u2":"@nocobase/plugin-async-task-manager"}');function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function d(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){n(e);return}l.done?t(s):Promise.resolve(s).then(r,o)}function p(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){d(a,r,o,i,l,"next",e)}function l(e){d(a,r,o,i,l,"throw",e)}i(void 0)})}}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{!i&&null!=o.return&&o.return()}finally{if(l)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(n)throw TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}var v=(0,e.createStyles)(function(e){return{button:{color:e.token.colorTextHeaderMenu+" !important"}}});a().extend(c());var h=function(e,t){if("success"!==e.type||!(null===(a=e.payload)||void 0===a?void 0:null===(o=a.message)||void 0===o?void 0:o.messageId))return null;var o,a,i=e.payload.message,l=i.messageId,s=i.messageValues;return n().createElement("div",{style:{marginLeft:8}},n().createElement(r.Tag,{color:"success"},t(l,s)))},b=function(){var t=(0,e.useRequest)({url:"asyncTasks:list"}),n=t.data,r=t.refreshAsync;return{loading:t.loading,tasks:(null==n?void 0:n.data)||[],refresh:r}},g=function(t){var o,i=t.popoverVisible,l=t.setPopoverVisible,s=t.tasks,c=t.refresh,f=t.loading,d=t.hasProcessingTasks,y=(0,e.useApp)(),b=(0,e.useAPIClient)(),g=(0,e.useCurrentAppInfo)();var k=(o=(0,e.useApp)(),function(e){return o.i18n.t(e,{ns:[u.u2,"client"]})}),w=v().styles,E=(0,e.usePlugin)("async-task-manager"),x=(0,e.useCollectionManager)(),_=(0,e.useCompile)(),O=function(e){l(!1)},T=[{title:k("Created at"),dataIndex:"createdAt",key:"createdAt",width:180,render:function(e){return n().createElement(r.Tooltip,{title:a()(e).format("YYYY-MM-DD HH:mm:ss")},a()(e).fromNow())}},{title:k("Task"),dataIndex:"title",key:"title",render:function(e,t){var n=t.title;if(!n)return"-";var r=x.getCollection(n.collection),o={export:k("Export"),import:k("Import"),"export-attachments":k("Export attachments")}[n.actionType]||n.actionType;return(({"export-attachments":k("Export {collection} attachments"),export:k("Export {collection} data"),import:k("Import {collection} data")})[n.actionType]||"".concat(o)).replace("{collection}",_((null==r?void 0:r.title)||n.collection))}},{title:k("Status"),dataIndex:"status",key:"status",width:160,render:function(t,o){var a,i={pending:{color:"default",text:k("Waiting"),icon:"ClockCircleOutlined"},running:{color:"processing",text:k("Processing"),icon:"LoadingOutlined"},success:{color:"success",text:k("Completed"),icon:"CheckCircleOutlined"},failed:{color:"error",text:k("Failed"),icon:"CloseCircleOutlined"},cancelled:{color:"warning",text:k("Cancelled"),icon:"StopOutlined"}},l=i[t.type]||{},s=l.color;return l.text,n().createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},n().createElement("div",{style:{flex:1}},function(){var e,a,i={width:100,margin:0};switch(t.indicator){case"spinner":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:100,status:"active",showInfo:!1,style:i});case"progress":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:Number(((null===(e=o.progress)||void 0===e?void 0:e.current)/(null===(a=o.progress)||void 0===a?void 0:a.total)*100).toFixed(2)),status:"active",style:i,format:function(e){return"".concat(e.toFixed(1),"%")}});case"success":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:100,status:"success",style:i,format:function(){return""}});case"error":return n().createElement(r.Progress,{type:"line",size:"small",strokeWidth:4,percent:100,status:"exception",style:i,format:function(){return""}});default:return null}}()),n().createElement(r.Tag,{color:s,icon:(null===(a=i[t.type])||void 0===a?void 0:a.icon)?n().createElement(e.Icon,{type:i[t.type].icon}):null,style:{margin:0,padding:"0 4px",height:22,width:22}}),h(t,k))}},{title:k("Actions"),key:"actions",width:180,render:function(t,o){var a=[];return("running"===o.status.type||"pending"===o.status.type)&&o.cancelable&&a.push(n().createElement(r.Popconfirm,{key:"cancel",title:k("Confirm cancel"),description:k("Confirm cancel description"),onConfirm:p(function(){return m(this,function(e){switch(e.label){case 0:return[4,b.request({url:"asyncTasks:cancel",params:{filterByTk:o.taskId}})];case 1:return e.sent(),c(),[2]}})}),okText:k("Confirm"),cancelText:k("Cancel"),disabled:!1},n().createElement(r.Button,{type:"link",size:"small",icon:n().createElement(e.Icon,{type:"StopOutlined"}),disabled:!1},k("Cancel")))),"success"===o.status.type&&("file"===o.status.resultType?a.push(n().createElement(r.Button,{key:"download",type:"link",size:"small",icon:n().createElement(e.Icon,{type:"DownloadOutlined"}),onClick:function(){var e,t,n,r=y.apiClient.auth.token,a=x.getCollection(o.title.collection),i=_(null==a?void 0:a.title),l=(null==o?void 0:null===(e=o.title)||void 0===e?void 0:e.actionType)==="export-attachments"?"-attachments.zip":".xlsx",s="".concat(i).concat(l),c=(null==o?void 0:null===(t=o.title)||void 0===t?void 0:t.actionType)!=="create migration"?encodeURIComponent(s):null,u=y.getApiUrl("asyncTasks:fetchFile/".concat(o.taskId,"?token=").concat(r,"&__appName=").concat(encodeURIComponent((null==g?void 0:null===(n=g.data)||void 0===n?void 0:n.name)||y.name)).concat(c?"&filename=".concat(c):""));window.open(u)}},k("Download"))):o.status.payload&&a.push(n().createElement(r.Button,{key:"view",type:"link",size:"small",icon:n().createElement(e.Icon,{type:"EyeOutlined"}),onClick:function(){O(o);var e=o.status.payload,t=E.taskResultRendererManager.get(o.title.actionType);r.Modal.info({title:k("Task result"),content:t?n().createElement(t,{payload:e,task:o}):n().createElement("div",null,k("No renderer available for this task type, payload: ".concat(e)))})}},k("View result")))),"failed"===o.status.type&&a.push(n().createElement(r.Button,{key:"error",type:"link",size:"small",icon:n().createElement(e.Icon,{type:"ExclamationCircleOutlined"}),onClick:function(){var e;l(!1),r.Modal.info({title:k("Error Details"),content:null===(e=o.status.errors)||void 0===e?void 0:e.map(function(e,t){return n().createElement("div",{key:t,style:{marginBottom:16}},n().createElement("div",{style:{color:"#ff4d4f",marginBottom:8}},e.message),e.code&&n().createElement("div",{style:{color:"#999",fontSize:12}},k("Error code"),": ",e.code))}),closable:!0,width:400})}},k("Error details"))),n().createElement(r.Space,{size:"middle"},a)}}],P=n().createElement("div",{style:{maxHeight:"70vh",overflow:"auto",width:s.length>0?800:200}},s.length>0?n().createElement(r.Table,{loading:f,columns:T,dataSource:s,size:"small",pagination:!1,rowKey:"taskId"}):n().createElement("div",{style:{padding:"24px 0",display:"flex",justifyContent:"center"}},n().createElement(r.Empty,{description:k("No tasks"),image:r.Empty.PRESENTED_IMAGE_SIMPLE})));return n().createElement(n().Fragment,null,n().createElement(r.Popover,{content:P,trigger:"hover",placement:"bottom",open:i,onOpenChange:l},n().createElement(r.Button,{className:["sync-task-button",w.button].join(" "),icon:n().createElement(e.Icon,{type:"SyncOutlined",spin:d}),onClick:function(){return l(!i)}})))},k=function(){var r=b(),o=r.tasks,a=r.refresh,i=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}(r,["tasks","refresh"]),l=(0,e.useApp)(),s=y((0,t.useState)(!1),2),c=s[0],u=s[1],f=y((0,t.useState)(!1),2),d=f[0],v=f[1];(0,t.useEffect)(function(){v(o.some(function(e){return"success"!==e.status.type&&"failed"!==e.status.type}))},[o]);var h=(0,t.useCallback)(p(function(){return m(this,function(e){return u(!0),[2]})}),[]),k=(0,t.useCallback)(function(){a(),console.log("handleTaskProgress")},[]),w=(0,t.useCallback)(function(){a(),console.log("handleTaskStatus")},[]),E=(0,t.useCallback)(function(){a(),console.log("handleTaskCancelled")},[]);return(0,t.useEffect)(function(){return l.eventBus.addEventListener("ws:message:async-tasks:created",h),l.eventBus.addEventListener("ws:message:async-tasks:progress",k),l.eventBus.addEventListener("ws:message:async-tasks:status",w),l.eventBus.addEventListener("ws:message:async-tasks:cancelled",E),function(){l.eventBus.removeEventListener("ws:message:async-tasks:created",h),l.eventBus.removeEventListener("ws:message:async-tasks:progress",k),l.eventBus.removeEventListener("ws:message:async-tasks:status",w),l.eventBus.removeEventListener("ws:message:async-tasks:cancelled",E)}},[l,E,h,k,w]),(null==o?void 0:o.length)>0&&n().createElement(g,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,a;r=e,o=t,a=n[t],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({tasks:o,refresh:a,popoverVisible:c,setPopoverVisible:u,hasProcessingTasks:d},i))},w=function(t){return n().createElement(e.PinnedPluginListProvider,{items:{asyncTasks:{order:300,component:"AsyncTasks",pin:!0,snippet:"*"}}},n().createElement(e.SchemaComponentOptions,{components:{AsyncTasks:k}},t.children))};function E(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var x=function(){var e,t,n;function r(){var e,t,n;!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,r),e=this,t="renderers",n=new Map,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}return e=r,t=[{key:"register",value:function(e,t){this.renderers.set(e,t)}},{key:"get",value:function(e){return this.renderers.get(e)}}],E(e.prototype,t),r}();function _(e,t,n,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){n(e);return}l.done?t(s):Promise.resolve(s).then(r,o)}function O(e,t,n){return(O=M()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&S(o,n.prototype),o}).apply(null,arguments)}function T(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function P(e){return(P=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function S(e,t){return(S=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function C(e){var t="function"==typeof Map?new Map:void 0;return(C=function(e){var n;if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return O(e,arguments,P(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),S(r,e)})(e)}function M(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(M=function(){return!!e})()}var j=function(e){var t,n,r;function o(){var e,t,n,r,a,i,l;return!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,o),t=this,n=o,r=arguments,n=P(n),a=e=function(e,t){return t&&("object"===function(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}(t)||"function"==typeof t)?t:function(e){if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(t,M()?Reflect.construct(n,r||[],P(t).constructor):n.apply(t,r)),i="taskResultRendererManager",l=new x,i in a?Object.defineProperty(a,i,{value:l,enumerable:!0,configurable:!0,writable:!0}):a[i]=l,e}return!function(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&S(e,t)}(o,e),t=o,n=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(n)throw TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}(this,function(e){return t.app.use(w),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){_(a,r,o,i,l,"next",e)}function l(e){_(a,r,o,i,l,"throw",e)}i(void 0)})})()}}],T(t.prototype,n),o}(C(e.Plugin)),Y=j}(),l}()});
@@ -8,12 +8,12 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/client": "1.7.0-beta.11",
11
+ "@nocobase/client": "1.7.0-beta.13",
12
12
  "react": "18.2.0",
13
- "antd": "5.24.2",
14
- "@nocobase/logger": "1.7.0-beta.11",
15
- "@nocobase/server": "1.7.0-beta.11",
13
+ "@nocobase/logger": "1.7.0-beta.13",
14
+ "@nocobase/server": "1.7.0-beta.13",
16
15
  "lodash": "4.17.21",
17
- "@nocobase/plugin-error-handler": "1.7.0-beta.11",
16
+ "@nocobase/plugin-error-handler": "1.7.0-beta.13",
17
+ "antd": "5.24.2",
18
18
  "dayjs": "1.11.13"
19
19
  };
@@ -1 +1 @@
1
- {"name":"uuid","version":"3.4.0","description":"RFC4122 (v1, v4, and v5) UUIDs","commitlint":{"extends":["@commitlint/config-conventional"]},"keywords":["uuid","guid","rfc4122"],"license":"MIT","bin":{"uuid":"./bin/uuid"},"devDependencies":{"@commitlint/cli":"~8.2.0","@commitlint/config-conventional":"~8.2.0","eslint":"~6.4.0","husky":"~3.0.5","mocha":"6.2.0","runmd":"1.2.1","standard-version":"7.0.0"},"scripts":{"lint":"eslint .","test":"npm run lint && mocha test/test.js","md":"runmd --watch --output=README.md README_js.md","release":"standard-version","prepare":"runmd --output=README.md README_js.md"},"browser":{"./lib/rng.js":"./lib/rng-browser.js","./lib/sha1.js":"./lib/sha1-browser.js","./lib/md5.js":"./lib/md5-browser.js"},"repository":{"type":"git","url":"https://github.com/uuidjs/uuid.git"},"husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"_lastModified":"2025-03-27T10:28:58.206Z"}
1
+ {"name":"uuid","version":"3.4.0","description":"RFC4122 (v1, v4, and v5) UUIDs","commitlint":{"extends":["@commitlint/config-conventional"]},"keywords":["uuid","guid","rfc4122"],"license":"MIT","bin":{"uuid":"./bin/uuid"},"devDependencies":{"@commitlint/cli":"~8.2.0","@commitlint/config-conventional":"~8.2.0","eslint":"~6.4.0","husky":"~3.0.5","mocha":"6.2.0","runmd":"1.2.1","standard-version":"7.0.0"},"scripts":{"lint":"eslint .","test":"npm run lint && mocha test/test.js","md":"runmd --watch --output=README.md README_js.md","release":"standard-version","prepare":"runmd --output=README.md README_js.md"},"browser":{"./lib/rng.js":"./lib/rng-browser.js","./lib/sha1.js":"./lib/sha1-browser.js","./lib/md5.js":"./lib/md5-browser.js"},"repository":{"type":"git","url":"https://github.com/uuidjs/uuid.git"},"husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"_lastModified":"2025-04-02T01:42:41.720Z"}
@@ -1,3 +1,11 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
1
9
  import { Plugin } from '@nocobase/server';
2
10
  export declare class PluginAsyncExportServer extends Plugin {
3
11
  private progressThrottles;
@@ -41,10 +41,10 @@ __export(plugin_exports, {
41
41
  });
42
42
  module.exports = __toCommonJS(plugin_exports);
43
43
  var import_server = require("@nocobase/server");
44
+ var import_lodash = require("lodash");
44
45
  var import_base_task_manager = require("./base-task-manager");
45
46
  var import_command_task_type = require("./command-task-type");
46
47
  var import_async_tasks = __toESM(require("./resourcers/async-tasks"));
47
- var import_lodash = require("lodash");
48
48
  class PluginAsyncExportServer extends import_server.Plugin {
49
49
  progressThrottles = /* @__PURE__ */ new Map();
50
50
  async afterAdd() {
@@ -57,7 +57,7 @@ class PluginAsyncExportServer extends import_server.Plugin {
57
57
  return manager;
58
58
  });
59
59
  this.app.container.get("AsyncTaskManager").registerTaskType(import_command_task_type.CommandTaskType);
60
- this.app.acl.allow("asyncTasks", ["get", "fetchFile"], "loggedIn");
60
+ this.app.acl.allow("asyncTasks", ["list", "get", "fetchFile", "cancel"], "loggedIn");
61
61
  }
62
62
  getThrottledProgressEmitter(taskId, userId) {
63
63
  if (!this.progressThrottles.has(taskId)) {
@@ -1,7 +1,17 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
1
9
  declare const _default: {
2
10
  name: string;
3
11
  actions: {
12
+ list(ctx: any, next: any): Promise<void>;
4
13
  get(ctx: any, next: any): Promise<void>;
14
+ cancel(ctx: any, next: any): Promise<void>;
5
15
  fetchFile(ctx: any, next: any): Promise<void>;
6
16
  };
7
17
  };
@@ -40,10 +40,18 @@ __export(async_tasks_exports, {
40
40
  });
41
41
  module.exports = __toCommonJS(async_tasks_exports);
42
42
  var import_fs = __toESM(require("fs"));
43
+ var import_lodash = __toESM(require("lodash"));
43
44
  var import_path = require("path");
44
45
  var async_tasks_default = {
45
46
  name: "asyncTasks",
46
47
  actions: {
48
+ async list(ctx, next) {
49
+ const userId = ctx.auth.user.id;
50
+ const asyncTaskManager = ctx.app.container.get("AsyncTaskManager");
51
+ const tasks = await asyncTaskManager.getTasksByTag("userId", userId);
52
+ ctx.body = import_lodash.default.orderBy(tasks, "createdAt", "desc");
53
+ await next();
54
+ },
47
55
  async get(ctx, next) {
48
56
  const { filterByTk } = ctx.action.params;
49
57
  const taskManager = ctx.app.container.get("AsyncTaskManager");
@@ -51,8 +59,25 @@ var async_tasks_default = {
51
59
  ctx.body = taskStatus;
52
60
  await next();
53
61
  },
54
- async fetchFile(ctx, next) {
62
+ async cancel(ctx, next) {
55
63
  const { filterByTk } = ctx.action.params;
64
+ const userId = ctx.auth.user.id;
65
+ const asyncTaskManager = ctx.app.container.get("AsyncTaskManager");
66
+ const task = asyncTaskManager.getTask(filterByTk);
67
+ if (!task) {
68
+ ctx.body = "ok";
69
+ await next();
70
+ return;
71
+ }
72
+ if (task.tags["userId"] != userId) {
73
+ ctx.throw(403);
74
+ }
75
+ const cancelled = await asyncTaskManager.cancelTask(filterByTk);
76
+ ctx.body = cancelled;
77
+ await next();
78
+ },
79
+ async fetchFile(ctx, next) {
80
+ const { filterByTk, filename } = ctx.action.params;
56
81
  const taskManager = ctx.app.container.get("AsyncTaskManager");
57
82
  const taskStatus = await taskManager.getTaskStatus(filterByTk);
58
83
  if (taskStatus.type !== "success") {
@@ -63,9 +88,11 @@ var async_tasks_default = {
63
88
  throw new Error("not a file task");
64
89
  }
65
90
  ctx.body = import_fs.default.createReadStream(filePath);
91
+ let finalFileName = filename ? filename : (0, import_path.basename)(filePath);
92
+ finalFileName = encodeURIComponent(finalFileName);
66
93
  ctx.set({
67
94
  "Content-Type": "application/octet-stream",
68
- "Content-Disposition": `attachment; filename=${(0, import_path.basename)(filePath)}`
95
+ "Content-Disposition": `attachment; filename=${finalFileName}`
69
96
  });
70
97
  await next();
71
98
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "displayName.zh-CN": "异步任务管理器",
5
5
  "description": "Manage and monitor asynchronous tasks such as data import/export. Support task progress tracking and notification.",
6
6
  "description.zh-CN": "管理和监控数据导入导出等异步任务。支持任务进度跟踪和通知。",
7
- "version": "1.7.0-beta.11",
7
+ "version": "1.7.0-beta.13",
8
8
  "main": "dist/server/index.js",
9
9
  "peerDependencies": {
10
10
  "@nocobase/client": "1.x",
@@ -12,5 +12,5 @@
12
12
  "@nocobase/server": "1.x",
13
13
  "@nocobase/test": "1.x"
14
14
  },
15
- "gitHead": "a5227915c2ef65501965dbff8be0e0f51039296e"
15
+ "gitHead": "e5c152b727dbedd54b67e450b11523df5acc51c6"
16
16
  }