@nocobase/plugin-form-drafts 2.2.0-beta.7 → 2.2.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client-v2.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './dist/client-v2';
2
+ export { default } from './dist/client-v2';
package/client-v2.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./dist/client-v2/index.js');
@@ -1 +1,10 @@
1
- export { default } from './plugin';
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
+ */
9
+ export * from '../client-v2';
10
+ export { default } from '../client-v2';
@@ -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("antd"),require("@nocobase/client"),require("@nocobase/flow-engine")):"function"==typeof define&&define.amd?define("@nocobase/plugin-form-drafts",["react","antd","@nocobase/client","@nocobase/flow-engine"],t):"object"==typeof exports?exports["@nocobase/plugin-form-drafts"]=t(require("react"),require("antd"),require("@nocobase/client"),require("@nocobase/flow-engine")):e["@nocobase/plugin-form-drafts"]=t(e.react,e.antd,e["@nocobase/client"],e["@nocobase/flow-engine"])}(self,function(e,t,r,n){return function(){"use strict";var o={342:function(e){e.exports=r},694:function(e){e.exports=n},59:function(e){e.exports=t},155:function(t){t.exports=e}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return o[e](r,r.exports,a),r.exports}a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.g.importScripts&&(u=a.g.location+"");var u,c=a.g.document;if(!u&&c&&(c.currentScript&&"SCRIPT"===c.currentScript.tagName.toUpperCase()&&(u=c.currentScript.src),!u)){var s=c.getElementsByTagName("script");if(s.length)for(var l=s.length-1;l>-1&&(!u||!/^http(s?):/.test(u));)u=s[l--].src}if(!u)throw Error("Automatic publicPath is not supported in this browser");a.p=u.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");var f={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var r=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");r.indexOf("/static/plugins/@nocobase/plugin-form-drafts/dist/client/")>=0&&(e=r.replace(/\/[^\/]+$/,"/"))}if(!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/@nocobase/plugin-form-drafts/dist/client/")}if(!e){var o=window.__nocobase_modern_client_prefix__||"v",i="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var u=window.location.pathname||"/",c=u.indexOf(i);e=c>=0?u.slice(0,c+1):"/"}e&&(e=e.replace(RegExp("/"+o+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/@nocobase/plugin-form-drafts/dist/client/"}a.p=e}(),!function(){let e,t,r;a.r(f),a.d(f,{default:function(){return $}});var n=a(342),o=a(59);let i=new WeakMap,u=new WeakMap,c=new WeakMap,s=new WeakMap,l=new WeakMap,d={get(e,t,r){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||c.get(e);if("store"===t)return r.objectStoreNames[1]?void 0:r.objectStore(r.objectStoreNames[0])}return p(e[t])},set:(e,t,r)=>(e[t]=r,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function p(r){if(r instanceof IDBRequest){let e;return(e=new Promise((e,t)=>{let n=()=>{r.removeEventListener("success",o),r.removeEventListener("error",i)},o=()=>{e(p(r.result)),n()},i=()=>{t(r.error),n()};r.addEventListener("success",o),r.addEventListener("error",i)})).then(e=>{e instanceof IDBCursor&&i.set(e,r)}).catch(()=>{}),l.set(e,r),e}if(s.has(r))return s.get(r);let n=function(r){if("function"==typeof r)return r!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(t||(t=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(r)?function(...e){return r.apply(b(this),e),p(i.get(this))}:function(...e){return p(r.apply(b(this),e))}:function(e,...t){let n=r.call(b(this),e,...t);return c.set(n,e.sort?e.sort():[e]),p(n)};return r instanceof IDBTransaction&&function(e){if(u.has(e))return;let t=new Promise((t,r)=>{let n=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),n()},i=()=>{r(e.error||new DOMException("AbortError","AbortError")),n()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(r),(e||(e=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>r instanceof e)?new Proxy(r,d):r}(r);return n!==r&&(s.set(r,n),l.set(n,r)),n}let b=e=>l.get(e),h=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],y=new Map;function g(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t))return;if(y.get(t))return y.get(t);let r=t.replace(/FromIndex$/,""),n=t!==r,o=v.includes(r);if(!(r in(n?IDBIndex:IDBObjectStore).prototype)||!(o||h.includes(r)))return;let i=async function(e,...t){let i=this.transaction(e,o?"readwrite":"readonly"),a=i.store;return n&&(a=a.index(t.shift())),(await Promise.all([a[r](...t),o&&i.done]))[0]};return y.set(t,i),i}d={...r=d,get:(e,t,n)=>g(e,t)||r.get(e,t,n),has:(e,t)=>!!g(e,t)||r.has(e,t)};var m=a(155),w=a.n(m),D=a(694),x=JSON.parse('{"UU":"@nocobase/plugin-form-drafts"}').UU;function _(e){return(0,D.tExpr)(e,{ns:[x,"client"]})}var S={};function k(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){r(e);return}u.done?t(c):Promise.resolve(c).then(n,o)}function E(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){k(i,n,o,a,u,"next",e)}function u(e){k(i,n,o,a,u,"throw",e)}a(void 0)})}}function j(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}function O(e,t,r){if(!t.has(e))throw TypeError("attempted to "+r+" private field on non-instance");return t.get(e)}function B(e,t){var r=O(e,t,"get");return r.get?r.get.call(e):r.value}function P(e,t,r){var n=O(e,t,"set");if(n.set)n.set.call(e,r);else{if(!n.writable)throw TypeError("attempted to set read only private field");n.value=r}return r}function I(e,t,r){return(I=A()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&C(o,r.prototype),o}).apply(null,arguments)}function T(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function F(e,t,r){return t&&T(e.prototype,t),r&&T(e,r),e}function M(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function R(e){return(R=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function C(e,t){return(C=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function L(e){var t="function"==typeof Map?new Map:void 0;return(L=function(e){if(null===e||-1===Function.toString.call(e).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 I(e,arguments,R(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),C(r,e)})(e)}function A(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(A=function(){return!!e})()}function N(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var s=[u,c];if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}n.FormBlockModel.registerFlow({key:"draftCreateFlow",title:_("Draft settings"),on:"beforeRender",sort:1e4,steps:{createDraft:{title:_("Enable drafts"),uiMode:{type:"switch",key:"enabled"},uiSchema:{enabled:{"x-component":"Switch","x-decorator":"FormItem"}},defaultParams:{enabled:!1},handler:function(e,t){return E(function(){var r;return N(this,function(n){switch(n.label){case 0:if(e.model.context.defineProperty("draftRepository",{get:function(){return new V(e)}}),e.model.context.defineMethod("showDraftAlert",function(t){console.log("showDraftAlert",t),e.model.decoratorProps.beforeContent=w().createElement(o.Alert,{style:{marginBottom:"1em"},type:"warning",action:w().createElement(o.Button,{ghost:!0,size:"small",danger:!0,onClick:function(){e.draftRepository.delete(),e.form.resetFields(),e.model.decoratorProps.beforeContent=null}},e.t("Delete draft",{ns:x})),description:e.t(t,{ns:x})})}),t.enabled)return[3,2];return[4,e.draftRepository.disable()];case 1:case 5:return n.sent(),[2];case 2:return[4,e.draftRepository.connect()];case 3:return n.sent(),[4,e.draftRepository.get()];case 4:if(!(!(null==(r=n.sent())?void 0:r.values)||0===Object.keys(r.values).length))return[3,6];return[4,e.draftRepository.create()];case 6:return[4,e.setFormValues(r.values)];case 7:return n.sent(),e.showDraftAlert("This is an unsubmitted draft. You can continue editing and submit it, or click “Delete draft” to start over."),[2]}})})()}}}}),n.FormBlockModel.registerFlow({key:"draftSaveFlow",on:"formValuesChange",steps:{saveDraft:{handler:function(e){return E(function(){return N(this,function(t){switch(t.label){case 0:if(e.draftRepository.disabled)return[2];return[4,e.draftRepository.save(e.form.getFieldsValue())];case 1:return t.sent(),e.showDraftAlert("Your draft has been saved. You can continue editing and submit it, or click “Delete Draft” to start over."),[2]}})})()}}}}),n.FormBlockModel.registerFlow({key:"deleteDraftFlow",on:"formSubmitSuccess",steps:{deleteDraft:{handler:function(e){return E(function(){return N(this,function(t){switch(t.label){case 0:if(e.draftRepository.disabled)return[2];return[4,e.draftRepository.delete()];case 1:return t.sent(),e.model.decoratorProps.beforeContent=null,[2]}})})()}}}});var q=new WeakMap,V=function(){function e(t){var r;j(this,e),M(this,"ctx",void 0),M(this,"uid",void 0),M(this,"db",void 0),function(e,t,r){if(t.has(e))throw TypeError("Cannot initialize the same private elements twice on an object");t.set(e,r)}(this,q,{writable:!0,value:void 0}),this.ctx=t,P(this,q,!1),this.uid=t.model.uid+":"+((null==t||null==(r=t.resource)?void 0:r.getFilterByTk())||"__new_record__")}return F(e,[{key:"disable",value:function(){P(this,q,!0)}},{key:"disabled",get:function(){return B(this,q)}},{key:"connect",value:function(){return E(function(){var e;return N(this,function(t){switch(t.label){case 0:if(B(this,q))return[2];return e=this,[4,function(e,{blocked:t,upgrade:r,blocking:n,terminated:o}={}){let i=indexedDB.open(e,1),a=p(i);return r&&i.addEventListener("upgradeneeded",e=>{r(p(i.result),e.oldVersion,e.newVersion,p(i.transaction),e)}),t&&i.addEventListener("blocked",e=>t(e.oldVersion,e.newVersion,e)),a.then(e=>{o&&e.addEventListener("close",()=>o()),n&&e.addEventListener("versionchange",e=>n(e.oldVersion,e.newVersion,e))}).catch(()=>{}),a}("FormDraftsDB",{upgrade:function(e){e.createObjectStore("drafts",{keyPath:"uid"})}})];case 1:return e.db=t.sent(),[2]}})}).call(this)}},{key:"create",value:function(){return E(function(){var e;return N(this,function(t){switch(t.label){case 0:if(B(this,q))return[2];return e={uid:this.uid,values:{}},[4,this.db.put("drafts",e)];case 1:return t.sent(),[2]}})}).call(this)}},{key:"get",value:function(){return E(function(){return N(this,function(e){return B(this,q)?[2]:[2,this.db.get("drafts",this.uid)]})}).call(this)}},{key:"save",value:function(e){return E(function(){var t;return N(this,function(r){switch(r.label){case 0:if(B(this,q))return[2];return t=JSON.parse(JSON.stringify(e)),[4,this.db.put("drafts",{uid:this.uid,values:t})];case 1:return r.sent(),[2]}})}).call(this)}},{key:"delete",value:function(){return E(function(){return N(this,function(e){switch(e.label){case 0:if(B(this,q))return[2];return[4,this.db.delete("drafts",this.uid)];case 1:return e.sent(),[2]}})}).call(this)}}]),e}(),$=function(e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function t(){var e,r;return j(this,t),e=t,r=arguments,e=R(e),function(e,t){var r;if(t&&("object"==((r=t)&&"u">typeof Symbol&&r.constructor===Symbol?"symbol":typeof r)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,A()?Reflect.construct(e,r||[],R(this).constructor):e.apply(this,r))}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&C(t,e),F(t,[{key:"load",value:function(){return E(function(){return N(this,function(e){return this.flowEngine.registerModels(S),[2]})}).call(this)}}]),t}(L(n.Plugin))}(),f}()});
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("antd"),require("@nocobase/client-v2"),require("@nocobase/flow-engine")):"function"==typeof define&&define.amd?define("@nocobase/plugin-form-drafts",["react","antd","@nocobase/client-v2","@nocobase/flow-engine"],t):"object"==typeof exports?exports["@nocobase/plugin-form-drafts"]=t(require("react"),require("antd"),require("@nocobase/client-v2"),require("@nocobase/flow-engine")):e["@nocobase/plugin-form-drafts"]=t(e.react,e.antd,e["@nocobase/client-v2"],e["@nocobase/flow-engine"])}(self,function(e,t,r,n){return function(){"use strict";var o={485:function(e){e.exports=r},694:function(e){e.exports=n},59:function(e){e.exports=t},155:function(t){t.exports=e}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return o[e](r,r.exports,a),r.exports}a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.g.importScripts&&(u=a.g.location+"");var u,c=a.g.document;if(!u&&c&&(c.currentScript&&"SCRIPT"===c.currentScript.tagName.toUpperCase()&&(u=c.currentScript.src),!u)){var s=c.getElementsByTagName("script");if(s.length)for(var l=s.length-1;l>-1&&(!u||!/^http(s?):/.test(u));)u=s[l--].src}if(!u)throw Error("Automatic publicPath is not supported in this browser");a.p=u.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");var f={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var r=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");r.indexOf("/static/plugins/@nocobase/plugin-form-drafts/dist/client/")>=0&&(e=r.replace(/\/[^\/]+$/,"/"))}if(!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/@nocobase/plugin-form-drafts/dist/client/")}if(!e){var o=window.__nocobase_modern_client_prefix__||"v",i="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var u=window.location.pathname||"/",c=u.indexOf(i);e=c>=0?u.slice(0,c+1):"/"}e&&(e=e.replace(RegExp("/"+o+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/@nocobase/plugin-form-drafts/dist/client/"}a.p=e}(),!function(){let e,t,r;a.r(f),a.d(f,{PluginFormDraftsClient:function(){return H},default:function(){return Q}});var n=a(485),o=a(59),i=a(155),u=a.n(i);let c=new WeakMap,s=new WeakMap,l=new WeakMap,p=new WeakMap,d=new WeakMap,h={get(e,t,r){if(e instanceof IDBTransaction){if("done"===t)return s.get(e);if("objectStoreNames"===t)return e.objectStoreNames||l.get(e);if("store"===t)return r.objectStoreNames[1]?void 0:r.objectStore(r.objectStoreNames[0])}return b(e[t])},set:(e,t,r)=>(e[t]=r,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function b(r){if(r instanceof IDBRequest){let e;return(e=new Promise((e,t)=>{let n=()=>{r.removeEventListener("success",o),r.removeEventListener("error",i)},o=()=>{e(b(r.result)),n()},i=()=>{t(r.error),n()};r.addEventListener("success",o),r.addEventListener("error",i)})).then(e=>{e instanceof IDBCursor&&c.set(e,r)}).catch(()=>{}),d.set(e,r),e}if(p.has(r))return p.get(r);let n=function(r){if("function"==typeof r)return r!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(t||(t=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(r)?function(...e){return r.apply(v(this),e),b(c.get(this))}:function(...e){return b(r.apply(v(this),e))}:function(e,...t){let n=r.call(v(this),e,...t);return l.set(n,e.sort?e.sort():[e]),b(n)};return r instanceof IDBTransaction&&function(e){if(s.has(e))return;let t=new Promise((t,r)=>{let n=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),n()},i=()=>{r(e.error||new DOMException("AbortError","AbortError")),n()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});s.set(e,t)}(r),(e||(e=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>r instanceof e)?new Proxy(r,h):r}(r);return n!==r&&(p.set(r,n),d.set(n,r)),n}let v=e=>d.get(e),y=["get","getKey","getAll","getAllKeys","count"],m=["put","add","delete","clear"],g=new Map;function w(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t))return;if(g.get(t))return g.get(t);let r=t.replace(/FromIndex$/,""),n=t!==r,o=m.includes(r);if(!(r in(n?IDBIndex:IDBObjectStore).prototype)||!(o||y.includes(r)))return;let i=async function(e,...t){let i=this.transaction(e,o?"readwrite":"readonly"),a=i.store;return n&&(a=a.index(t.shift())),(await Promise.all([a[r](...t),o&&i.done]))[0]};return g.set(t,i),i}function D(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){r(e);return}u.done?t(c):Promise.resolve(c).then(n,o)}function S(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){D(i,n,o,a,u,"next",e)}function u(e){D(i,n,o,a,u,"throw",e)}a(void 0)})}}function E(e,t,r){if(!t.has(e))throw TypeError("attempted to "+r+" private field on non-instance");return t.get(e)}function j(e,t){var r=E(e,t,"get");return r.get?r.get.call(e):r.value}function k(e,t,r){if(t.has(e))throw TypeError("Cannot initialize the same private elements twice on an object");t.set(e,r)}function O(e,t,r){var n=E(e,t,"set");if(n.set)n.set.call(e,r);else{if(!n.writable)throw TypeError("attempted to set read only private field");n.value=r}return r}h={...r=h,get:(e,t,n)=>w(e,t)||r.get(e,t,n),has:(e,t)=>!!w(e,t)||r.has(e,t)};function x(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var s=[u,c];if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}var _="drafts",P=new WeakMap,I=new WeakMap,B=function(){var e;function t(e){var r,n,o;if(!(this instanceof t))throw TypeError("Cannot call a class as a function");r=void 0,"uid"in this?Object.defineProperty(this,"uid",{value:r,enumerable:!0,configurable:!0,writable:!0}):this.uid=r,k(this,P,{writable:!0,value:void 0}),k(this,I,{writable:!0,value:!1}),this.uid="".concat(e.model.uid,":").concat((null==(o=e.resource)||null==(n=o.getFilterByTk)?void 0:n.call(o))||"__new_record__")}return e=[{key:"disable",value:function(){O(this,I,!0)}},{key:"disabled",get:function(){return j(this,I)}},{key:"connect",value:function(){return S(function(){var e;return x(this,function(t){switch(t.label){case 0:if(j(this,I))return[2];return e=[this,P],[4,function(e,{blocked:t,upgrade:r,blocking:n,terminated:o}={}){let i=indexedDB.open(e,1),a=b(i);return r&&i.addEventListener("upgradeneeded",e=>{r(b(i.result),e.oldVersion,e.newVersion,b(i.transaction),e)}),t&&i.addEventListener("blocked",e=>t(e.oldVersion,e.newVersion,e)),a.then(e=>{o&&e.addEventListener("close",()=>o()),n&&e.addEventListener("versionchange",e=>n(e.oldVersion,e.newVersion,e))}).catch(()=>{}),a}("FormDraftsDB",{upgrade:function(e){e.createObjectStore(_,{keyPath:"uid"})}})];case 1:return O.apply(void 0,e.concat([t.sent()])),[2]}})}).call(this)}},{key:"create",value:function(){return S(function(){return x(this,function(e){switch(e.label){case 0:if(j(this,I))return[2];return[4,this.getDb().put(_,{uid:this.uid,values:{}})];case 1:return e.sent(),[2]}})}).call(this)}},{key:"get",value:function(){return S(function(){return x(this,function(e){return j(this,I)?[2]:[2,this.getDb().get(_,this.uid)]})}).call(this)}},{key:"save",value:function(e,t){return S(function(){var r,n;return x(this,function(o){switch(o.label){case 0:if(j(this,I))return[2];return r=JSON.parse(JSON.stringify(e)),n={uid:this.uid,values:r},t&&(n.patches=JSON.parse(JSON.stringify(t))),[4,this.getDb().put(_,n)];case 1:return o.sent(),[2]}})}).call(this)}},{key:"delete",value:function(){return S(function(){return x(this,function(e){switch(e.label){case 0:if(j(this,I))return[2];return[4,this.getDb().delete(_,this.uid)];case 1:return e.sent(),[2]}})}).call(this)}},{key:"getDb",value:function(){if(!j(this,P))throw Error("Form draft database is not connected.");return j(this,P)}}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(t.prototype,e),t}(),T=a(694),A="@nocobase/plugin-form-drafts";function F(e){return(0,T.tExpr)(e,{ns:[A,"form-drafts","client"]})}function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function M(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){r(e);return}u.done?t(c):Promise.resolve(c).then(n,o)}function C(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){M(i,n,o,a,u,"next",e)}function u(e){M(i,n,o,a,u,"throw",e)}a(void 0)})}}function L(e,t,r){return(L=U()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&N(o,r.prototype),o}).apply(null,arguments)}function V(e){return(V=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function N(e,t){return(N=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function $(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(r=o.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){u=!0,n=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw n}}return i}}(e,t)||J(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 q(e){return function(e){if(Array.isArray(e))return R(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||J(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function W(e){return e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function J(e,t){if(e){if("string"==typeof e)return R(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return R(e,t)}}function K(e){var t="function"==typeof Map?new Map:void 0;return(K=function(e){if(null===e||-1===Function.toString.call(e).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 L(e,arguments,V(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),N(r,e)})(e)}function U(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(U=function(){return!!e})()}function Y(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var s=[u,c];if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}function z(e,t){"function"==typeof e.setDecoratorProps?e.setDecoratorProps({beforeContent:t}):e.decoratorProps&&(e.decoratorProps.beforeContent=t)}function G(e){var t=e.message,r=e.onDelete,n=e.t,i=o.theme.useToken().token;return u().createElement(o.Alert,{style:{marginBlockEnd:i.margin},type:"warning",action:u().createElement(o.Button,{ghost:!0,size:"small",danger:!0,onClick:function(){return C(function(){return Y(this,function(e){switch(e.label){case 0:return[4,r()];case 1:return e.sent(),[2]}})})()}},n("Delete draft",{ns:A})),description:n(t,{ns:A})})}n.FormBlockModel.registerFlow({key:"draftCreateFlow",title:F("Draft settings"),on:"beforeRender",sort:1e4,steps:{createDraft:{title:F("Enable drafts"),uiMode:{type:"switch",key:"enabled"},uiSchema:{enabled:{"x-component":"Switch","x-decorator":"FormItem"}},defaultParams:{enabled:!1},handler:function(e,t){return C(function(){var r,n,o,i;return Y(this,function(a){switch(a.label){case 0:if((n=e).model.context.defineProperty("draftRepository",{get:function(){return new B(n)}}),n.model.context.defineMethod("showDraftAlert",function(e){z(n.model,u().createElement(G,{message:e,t:n.t,onDelete:function(){return C(function(){var e,t;return Y(this,function(r){switch(r.label){case 0:return[4,n.draftRepository.delete()];case 1:return r.sent(),n.form.resetFields(),null==(t=n.model.formValueRuntime)||null==(e=t.resetAfterFormReset)||e.call(t),z(n.model,null),[2]}})})()}}))}),!t.enabled)return n.draftRepository.disable(),[2];return[4,n.draftRepository.connect()];case 1:return a.sent(),[4,n.draftRepository.get()];case 2:if(!(!(null==(i=(null==(o=a.sent())||null==(r=o.patches)?void 0:r.length)?o.patches:void 0)?void 0:i.length)&&(!(null==o?void 0:o.values)||0===Object.keys(o.values).length)))return[3,4];return[4,n.draftRepository.create()];case 3:return a.sent(),[2];case 4:var c,s,l;return[4,n.setFormValues(null!=i?i:(c=o.values,s=[],l=function(e,t){if(!e||(void 0===e?"undefined":W(e))!=="object")return void s.push({path:t,value:e});if(Array.isArray(e))return 0===e.length?void s.push({path:t,value:e}):void e.forEach(function(e,r){return l(e,q(t).concat([r]))});var r=Object.entries(e);0===r.length?s.push({path:t,value:e}):r.forEach(function(e){var r=$(e,2),n=r[0];return l(r[1],q(t).concat([n]))})},Object.entries(c).forEach(function(e){var t=$(e,2),r=t[0];return l(t[1],[r])}),s),{source:"user",triggerEvent:!1})];case 5:return a.sent(),n.showDraftAlert("This is an unsubmitted draft. You can continue editing and submit it, or click “Delete draft” to start over."),[2]}})})()}}}}),n.FormBlockModel.registerFlow({key:"draftSaveFlow",on:"formValuesChange",steps:{saveDraft:{handler:function(e){return C(function(){var t,r,n,o,i;return Y(this,function(a){switch(a.label){case 0:var u;if((n=e).draftRepository.disabled)return[2];return i=(o=null==(r=n.model.formValueRuntime)||null==(t=r.getUserEditedValuePatches)?void 0:t.call(r))?(u={},o.forEach(function(e){var t,r,n,o;t=u,r=e.path,n=e.value,o=t,r.forEach(function(e,t){if(t===r.length-1){o[e]=n;return}var i=r[t+1],a=o[e];a&&(void 0===a?"undefined":W(a))==="object"||(o[e]="number"==typeof i?[]:{}),o=o[e]})}),u):n.form.getFieldsValue(),[4,n.draftRepository.save(i,o)];case 1:if(a.sent(),o?0===o.length:0===Object.keys(i).length)return[2];return n.showDraftAlert("Your draft has been saved. You can continue editing and submit it, or click “Delete Draft” to start over."),[2]}})})()}}}}),n.FormBlockModel.registerFlow({key:"deleteDraftFlow",on:"formSubmitSuccess",steps:{deleteDraft:{handler:function(e){return C(function(){var t;return Y(this,function(r){switch(r.label){case 0:if((t=e).draftRepository.disabled)return[2];return[4,t.draftRepository.delete()];case 1:return r.sent(),z(t.model,null),[2]}})})()}}}});var H=function(e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function t(){var e,r;if(!(this instanceof t))throw TypeError("Cannot call a class as a function");return e=t,r=arguments,e=V(e),function(e,t){if(t&&("object"===W(t)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,U()?Reflect.construct(e,r||[],V(this).constructor):e.apply(this,r))}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&N(t,e),t}(K(n.Plugin)),Q=H}(),f}()});
@@ -6,6 +6,4 @@
6
6
  * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
- export declare const NAMESPACE: string;
10
- export declare function useT(): (str: string) => string;
11
- export declare function tExpr(key: string): string;
9
+ export * from '../client-v2/locale';
@@ -6,8 +6,5 @@
6
6
  * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
- import { Plugin } from '@nocobase/client';
10
- export declare class PluginFormDraftsClient extends Plugin {
11
- load(): Promise<void>;
12
- }
13
- export default PluginFormDraftsClient;
9
+ export * from '../client-v2/plugin';
10
+ export { default } from '../client-v2/plugin';
@@ -0,0 +1,40 @@
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
+ */
9
+ export type FormDraftValues = Record<string, unknown>;
10
+ export type FormDraftValuePatch = {
11
+ path: Array<string | number>;
12
+ value: unknown;
13
+ };
14
+ export type FormDraft = {
15
+ uid: string;
16
+ values: FormDraftValues;
17
+ patches?: FormDraftValuePatch[];
18
+ };
19
+ export type FormDraftContext = {
20
+ model: {
21
+ uid: string;
22
+ };
23
+ resource?: {
24
+ getFilterByTk?: () => unknown;
25
+ };
26
+ };
27
+ export declare function buildFormDraftUid(ctx: FormDraftContext): string;
28
+ export declare class FormDraftRepository {
29
+ #private;
30
+ readonly uid: string;
31
+ constructor(ctx: FormDraftContext);
32
+ disable(): void;
33
+ get disabled(): boolean;
34
+ connect(): Promise<void>;
35
+ create(): Promise<void>;
36
+ get(): Promise<FormDraft | undefined>;
37
+ save(values: FormDraftValues, patches?: FormDraftValuePatch[]): Promise<void>;
38
+ delete(): Promise<void>;
39
+ private getDb;
40
+ }
@@ -6,6 +6,5 @@
6
6
  * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
- import { ModelConstructor } from '@nocobase/flow-engine';
10
- declare const _default: Record<string, ModelConstructor>;
11
- export default _default;
9
+ export { PluginFormDraftsClient } from './plugin';
10
+ export { default } from './plugin';
@@ -0,0 +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
+ */
9
+
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("antd"),require("@nocobase/client-v2"),require("@nocobase/flow-engine")):"function"==typeof define&&define.amd?define("@nocobase/plugin-form-drafts/client-v2",["react","antd","@nocobase/client-v2","@nocobase/flow-engine"],t):"object"==typeof exports?exports["@nocobase/plugin-form-drafts/client-v2"]=t(require("react"),require("antd"),require("@nocobase/client-v2"),require("@nocobase/flow-engine")):e["@nocobase/plugin-form-drafts/client-v2"]=t(e.react,e.antd,e["@nocobase/client-v2"],e["@nocobase/flow-engine"])}(self,function(e,t,r,n){return function(){"use strict";var o={485:function(e){e.exports=r},694:function(e){e.exports=n},59:function(e){e.exports=t},155:function(t){t.exports=e}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return o[e](r,r.exports,a),r.exports}a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.g.importScripts&&(u=a.g.location+"");var u,c=a.g.document;if(!u&&c&&(c.currentScript&&"SCRIPT"===c.currentScript.tagName.toUpperCase()&&(u=c.currentScript.src),!u)){var l=c.getElementsByTagName("script");if(l.length)for(var s=l.length-1;s>-1&&(!u||!/^http(s?):/.test(u));)u=l[s--].src}if(!u)throw Error("Automatic publicPath is not supported in this browser");a.p=u.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");var f={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var r=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");r.indexOf("/static/plugins/@nocobase/plugin-form-drafts/dist/client-v2/")>=0&&(e=r.replace(/\/[^\/]+$/,"/"))}if(!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/@nocobase/plugin-form-drafts/dist/client-v2/")}if(!e){var o=window.__nocobase_modern_client_prefix__||"v",i="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var u=window.location.pathname||"/",c=u.indexOf(i);e=c>=0?u.slice(0,c+1):"/"}e&&(e=e.replace(RegExp("/"+o+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/@nocobase/plugin-form-drafts/dist/client-v2/"}a.p=e}(),!function(){let e,t,r;a.r(f),a.d(f,{PluginFormDraftsClient:function(){return H},default:function(){return Q}});var n=a(485),o=a(59),i=a(155),u=a.n(i);let c=new WeakMap,l=new WeakMap,s=new WeakMap,p=new WeakMap,d=new WeakMap,h={get(e,t,r){if(e instanceof IDBTransaction){if("done"===t)return l.get(e);if("objectStoreNames"===t)return e.objectStoreNames||s.get(e);if("store"===t)return r.objectStoreNames[1]?void 0:r.objectStore(r.objectStoreNames[0])}return b(e[t])},set:(e,t,r)=>(e[t]=r,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function b(r){if(r instanceof IDBRequest){let e;return(e=new Promise((e,t)=>{let n=()=>{r.removeEventListener("success",o),r.removeEventListener("error",i)},o=()=>{e(b(r.result)),n()},i=()=>{t(r.error),n()};r.addEventListener("success",o),r.addEventListener("error",i)})).then(e=>{e instanceof IDBCursor&&c.set(e,r)}).catch(()=>{}),d.set(e,r),e}if(p.has(r))return p.get(r);let n=function(r){if("function"==typeof r)return r!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(t||(t=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(r)?function(...e){return r.apply(v(this),e),b(c.get(this))}:function(...e){return b(r.apply(v(this),e))}:function(e,...t){let n=r.call(v(this),e,...t);return s.set(n,e.sort?e.sort():[e]),b(n)};return r instanceof IDBTransaction&&function(e){if(l.has(e))return;let t=new Promise((t,r)=>{let n=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),n()},i=()=>{r(e.error||new DOMException("AbortError","AbortError")),n()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});l.set(e,t)}(r),(e||(e=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>r instanceof e)?new Proxy(r,h):r}(r);return n!==r&&(p.set(r,n),d.set(n,r)),n}let v=e=>d.get(e),y=["get","getKey","getAll","getAllKeys","count"],m=["put","add","delete","clear"],g=new Map;function w(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t))return;if(g.get(t))return g.get(t);let r=t.replace(/FromIndex$/,""),n=t!==r,o=m.includes(r);if(!(r in(n?IDBIndex:IDBObjectStore).prototype)||!(o||y.includes(r)))return;let i=async function(e,...t){let i=this.transaction(e,o?"readwrite":"readonly"),a=i.store;return n&&(a=a.index(t.shift())),(await Promise.all([a[r](...t),o&&i.done]))[0]};return g.set(t,i),i}function D(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){r(e);return}u.done?t(c):Promise.resolve(c).then(n,o)}function S(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){D(i,n,o,a,u,"next",e)}function u(e){D(i,n,o,a,u,"throw",e)}a(void 0)})}}function E(e,t,r){if(!t.has(e))throw TypeError("attempted to "+r+" private field on non-instance");return t.get(e)}function j(e,t){var r=E(e,t,"get");return r.get?r.get.call(e):r.value}function k(e,t,r){if(t.has(e))throw TypeError("Cannot initialize the same private elements twice on an object");t.set(e,r)}function O(e,t,r){var n=E(e,t,"set");if(n.set)n.set.call(e,r);else{if(!n.writable)throw TypeError("attempted to set read only private field");n.value=r}return r}h={...r=h,get:(e,t,n)=>w(e,t)||r.get(e,t,n),has:(e,t)=>!!w(e,t)||r.has(e,t)};function x(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var l=[u,c];if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&l[0]?n.return:l[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,l[1])).done)return o;switch(n=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,n=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],n=0}finally{r=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var _="drafts",P=new WeakMap,I=new WeakMap,B=function(){var e;function t(e){var r,n,o;if(!(this instanceof t))throw TypeError("Cannot call a class as a function");r=void 0,"uid"in this?Object.defineProperty(this,"uid",{value:r,enumerable:!0,configurable:!0,writable:!0}):this.uid=r,k(this,P,{writable:!0,value:void 0}),k(this,I,{writable:!0,value:!1}),this.uid="".concat(e.model.uid,":").concat((null==(o=e.resource)||null==(n=o.getFilterByTk)?void 0:n.call(o))||"__new_record__")}return e=[{key:"disable",value:function(){O(this,I,!0)}},{key:"disabled",get:function(){return j(this,I)}},{key:"connect",value:function(){return S(function(){var e;return x(this,function(t){switch(t.label){case 0:if(j(this,I))return[2];return e=[this,P],[4,function(e,{blocked:t,upgrade:r,blocking:n,terminated:o}={}){let i=indexedDB.open(e,1),a=b(i);return r&&i.addEventListener("upgradeneeded",e=>{r(b(i.result),e.oldVersion,e.newVersion,b(i.transaction),e)}),t&&i.addEventListener("blocked",e=>t(e.oldVersion,e.newVersion,e)),a.then(e=>{o&&e.addEventListener("close",()=>o()),n&&e.addEventListener("versionchange",e=>n(e.oldVersion,e.newVersion,e))}).catch(()=>{}),a}("FormDraftsDB",{upgrade:function(e){e.createObjectStore(_,{keyPath:"uid"})}})];case 1:return O.apply(void 0,e.concat([t.sent()])),[2]}})}).call(this)}},{key:"create",value:function(){return S(function(){return x(this,function(e){switch(e.label){case 0:if(j(this,I))return[2];return[4,this.getDb().put(_,{uid:this.uid,values:{}})];case 1:return e.sent(),[2]}})}).call(this)}},{key:"get",value:function(){return S(function(){return x(this,function(e){return j(this,I)?[2]:[2,this.getDb().get(_,this.uid)]})}).call(this)}},{key:"save",value:function(e,t){return S(function(){var r,n;return x(this,function(o){switch(o.label){case 0:if(j(this,I))return[2];return r=JSON.parse(JSON.stringify(e)),n={uid:this.uid,values:r},t&&(n.patches=JSON.parse(JSON.stringify(t))),[4,this.getDb().put(_,n)];case 1:return o.sent(),[2]}})}).call(this)}},{key:"delete",value:function(){return S(function(){return x(this,function(e){switch(e.label){case 0:if(j(this,I))return[2];return[4,this.getDb().delete(_,this.uid)];case 1:return e.sent(),[2]}})}).call(this)}},{key:"getDb",value:function(){if(!j(this,P))throw Error("Form draft database is not connected.");return j(this,P)}}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(t.prototype,e),t}(),T=a(694),A="@nocobase/plugin-form-drafts";function F(e){return(0,T.tExpr)(e,{ns:[A,"form-drafts","client"]})}function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function M(e,t,r,n,o,i,a){try{var u=e[i](a),c=u.value}catch(e){r(e);return}u.done?t(c):Promise.resolve(c).then(n,o)}function C(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){M(i,n,o,a,u,"next",e)}function u(e){M(i,n,o,a,u,"throw",e)}a(void 0)})}}function L(e,t,r){return(L=U()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&N(o,r.prototype),o}).apply(null,arguments)}function V(e){return(V=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function N(e,t){return(N=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function $(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(r=o.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){u=!0,n=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw n}}return i}}(e,t)||J(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 q(e){return function(e){if(Array.isArray(e))return R(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||J(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function W(e){return e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function J(e,t){if(e){if("string"==typeof e)return R(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return R(e,t)}}function K(e){var t="function"==typeof Map?new Map:void 0;return(K=function(e){if(null===e||-1===Function.toString.call(e).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 L(e,arguments,V(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),N(r,e)})(e)}function U(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(U=function(){return!!e})()}function Y(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var l=[u,c];if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&l[0]?n.return:l[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,l[1])).done)return o;switch(n=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,n=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],n=0}finally{r=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}function z(e,t){"function"==typeof e.setDecoratorProps?e.setDecoratorProps({beforeContent:t}):e.decoratorProps&&(e.decoratorProps.beforeContent=t)}function G(e){var t=e.message,r=e.onDelete,n=e.t,i=o.theme.useToken().token;return u().createElement(o.Alert,{style:{marginBlockEnd:i.margin},type:"warning",action:u().createElement(o.Button,{ghost:!0,size:"small",danger:!0,onClick:function(){return C(function(){return Y(this,function(e){switch(e.label){case 0:return[4,r()];case 1:return e.sent(),[2]}})})()}},n("Delete draft",{ns:A})),description:n(t,{ns:A})})}n.FormBlockModel.registerFlow({key:"draftCreateFlow",title:F("Draft settings"),on:"beforeRender",sort:1e4,steps:{createDraft:{title:F("Enable drafts"),uiMode:{type:"switch",key:"enabled"},uiSchema:{enabled:{"x-component":"Switch","x-decorator":"FormItem"}},defaultParams:{enabled:!1},handler:function(e,t){return C(function(){var r,n,o,i;return Y(this,function(a){switch(a.label){case 0:if((n=e).model.context.defineProperty("draftRepository",{get:function(){return new B(n)}}),n.model.context.defineMethod("showDraftAlert",function(e){z(n.model,u().createElement(G,{message:e,t:n.t,onDelete:function(){return C(function(){var e,t;return Y(this,function(r){switch(r.label){case 0:return[4,n.draftRepository.delete()];case 1:return r.sent(),n.form.resetFields(),null==(t=n.model.formValueRuntime)||null==(e=t.resetAfterFormReset)||e.call(t),z(n.model,null),[2]}})})()}}))}),!t.enabled)return n.draftRepository.disable(),[2];return[4,n.draftRepository.connect()];case 1:return a.sent(),[4,n.draftRepository.get()];case 2:if(!(!(null==(i=(null==(o=a.sent())||null==(r=o.patches)?void 0:r.length)?o.patches:void 0)?void 0:i.length)&&(!(null==o?void 0:o.values)||0===Object.keys(o.values).length)))return[3,4];return[4,n.draftRepository.create()];case 3:return a.sent(),[2];case 4:var c,l,s;return[4,n.setFormValues(null!=i?i:(c=o.values,l=[],s=function(e,t){if(!e||(void 0===e?"undefined":W(e))!=="object")return void l.push({path:t,value:e});if(Array.isArray(e))return 0===e.length?void l.push({path:t,value:e}):void e.forEach(function(e,r){return s(e,q(t).concat([r]))});var r=Object.entries(e);0===r.length?l.push({path:t,value:e}):r.forEach(function(e){var r=$(e,2),n=r[0];return s(r[1],q(t).concat([n]))})},Object.entries(c).forEach(function(e){var t=$(e,2),r=t[0];return s(t[1],[r])}),l),{source:"user",triggerEvent:!1})];case 5:return a.sent(),n.showDraftAlert("This is an unsubmitted draft. You can continue editing and submit it, or click “Delete draft” to start over."),[2]}})})()}}}}),n.FormBlockModel.registerFlow({key:"draftSaveFlow",on:"formValuesChange",steps:{saveDraft:{handler:function(e){return C(function(){var t,r,n,o,i;return Y(this,function(a){switch(a.label){case 0:var u;if((n=e).draftRepository.disabled)return[2];return i=(o=null==(r=n.model.formValueRuntime)||null==(t=r.getUserEditedValuePatches)?void 0:t.call(r))?(u={},o.forEach(function(e){var t,r,n,o;t=u,r=e.path,n=e.value,o=t,r.forEach(function(e,t){if(t===r.length-1){o[e]=n;return}var i=r[t+1],a=o[e];a&&(void 0===a?"undefined":W(a))==="object"||(o[e]="number"==typeof i?[]:{}),o=o[e]})}),u):n.form.getFieldsValue(),[4,n.draftRepository.save(i,o)];case 1:if(a.sent(),o?0===o.length:0===Object.keys(i).length)return[2];return n.showDraftAlert("Your draft has been saved. You can continue editing and submit it, or click “Delete Draft” to start over."),[2]}})})()}}}}),n.FormBlockModel.registerFlow({key:"deleteDraftFlow",on:"formSubmitSuccess",steps:{deleteDraft:{handler:function(e){return C(function(){var t;return Y(this,function(r){switch(r.label){case 0:if((t=e).draftRepository.disabled)return[2];return[4,t.draftRepository.delete()];case 1:return r.sent(),z(t.model,null),[2]}})})()}}}});var H=function(e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function t(){var e,r;if(!(this instanceof t))throw TypeError("Cannot call a class as a function");return e=t,r=arguments,e=V(e),function(e,t){if(t&&("object"===W(t)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,U()?Reflect.construct(e,r||[],V(this).constructor):e.apply(this,r))}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&N(t,e),t}(K(n.Plugin)),Q=H}(),f}()});
@@ -0,0 +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
+ */
9
+ export declare const NAMESPACE = "@nocobase/plugin-form-drafts";
10
+ export declare function useT(): (key: string, options?: Record<string, unknown>) => string;
11
+ export declare function tExpr(key: string): string;
@@ -0,0 +1,13 @@
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
+ */
9
+ import type { Application } from '@nocobase/client-v2';
10
+ import { Plugin } from '@nocobase/client-v2';
11
+ export declare class PluginFormDraftsClient extends Plugin<Record<string, never>, Application> {
12
+ }
13
+ export default PluginFormDraftsClient;
@@ -8,9 +8,9 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/flow-engine": "2.2.0-beta.7",
12
- "@nocobase/client": "2.2.0-beta.7",
11
+ "@nocobase/flow-engine": "2.2.0-beta.8",
12
+ "@nocobase/client-v2": "2.2.0-beta.8",
13
13
  "antd": "5.24.2",
14
14
  "react": "18.2.0",
15
- "@nocobase/server": "2.2.0-beta.7"
15
+ "@nocobase/server": "2.2.0-beta.8"
16
16
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-form-drafts",
3
- "version": "2.2.0-beta.7",
3
+ "version": "2.2.0-beta.8",
4
4
  "main": "dist/server/index.js",
5
5
  "displayName": "Form drafts",
6
6
  "displayName.zh-CN": "表单草稿",
@@ -17,9 +17,10 @@
17
17
  },
18
18
  "peerDependencies": {
19
19
  "@nocobase/client": "2.x",
20
+ "@nocobase/client-v2": "2.x",
20
21
  "@nocobase/server": "2.x",
21
22
  "@nocobase/test": "2.x"
22
23
  },
23
24
  "license": "Apache-2.0",
24
- "gitHead": "e6a3fa8963a73cd9ddfc1273d71b0012483e1ad8"
25
+ "gitHead": "fa2502c1e9faf6d74b3f51b42dbc6546638d46af"
25
26
  }