@mic-rexjs/usecases-react 2.3.6 → 2.4.0
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/dist/index.min.js +1 -1
- package/es/enums/UseCaseModes/index.d.ts +3 -2
- package/es/enums/UseCaseModes/index.js +3 -2
- package/es/enums/UseCaseStatuses/index.d.ts +2 -1
- package/es/enums/UseCaseStatuses/index.js +3 -1
- package/es/hooks/useEntity/index.js +6 -6
- package/es/hooks/useRuntimeEntity/index.d.ts +3 -0
- package/es/hooks/useRuntimeEntity/index.js +27 -0
- package/es/hooks/useStateControllableUseCase/index.d.ts +2 -0
- package/es/hooks/useStateControllableUseCase/index.js +5 -0
- package/es/hooks/useStateControllableUseCase/index.test.d.ts +1 -0
- package/es/hooks/useStateControllableUseCase/index.test.js +37 -0
- package/es/hooks/useStateControllableUseCase/types.d.ts +3 -0
- package/es/hooks/useStateControllableUseCase/types.js +1 -0
- package/es/hooks/useUseCase/index.test.js +42 -8
- package/es/hooks/useUseCaseStatuses/index.js +7 -2
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/lib/enums/UseCaseModes/index.js +3 -2
- package/lib/enums/UseCaseStatuses/index.js +3 -1
- package/lib/hooks/useEntity/index.js +6 -6
- package/lib/hooks/useRuntimeEntity/index.js +33 -0
- package/lib/hooks/useStateControllableUseCase/index.js +11 -0
- package/lib/hooks/useStateControllableUseCase/index.test.js +37 -0
- package/lib/hooks/useStateControllableUseCase/types.js +5 -0
- package/lib/hooks/useUseCase/index.test.js +82 -31
- package/lib/hooks/useUseCaseStatuses/index.js +7 -2
- package/lib/index.js +7 -0
- package/package.json +1 -1
- package/es/methods/getRenderingEntity/index.d.ts +0 -3
- package/es/methods/getRenderingEntity/index.js +0 -13
- package/lib/methods/getRenderingEntity/index.js +0 -19
package/dist/index.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see index.min.js.LICENSE.txt */
|
|
2
|
-
(()=>{var t={20:(t,e,n)=>{"use strict";var r=n(594),o=Symbol.for("react.element"),u=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};e.jsx=function(t,e,n){var r,l={},c=null,f=null;for(r in void 0!==n&&(c=""+n),void 0!==e.key&&(c=""+e.key),void 0!==e.ref&&(f=e.ref),e)u.call(e,r)&&!i.hasOwnProperty(r)&&(l[r]=e[r]);if(t&&t.defaultProps)for(r in e=t.defaultProps)void 0===l[r]&&(l[r]=e[r]);return{$$typeof:o,type:t,key:c,ref:f,props:l,_owner:a.current}}},848:(t,e,n)=>{"use strict";t.exports=n(20)},594:t=>{"use strict";t.exports=React}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var u=e[r]={exports:{}};return t[r](u,u.exports,n),u.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{UseCaseFragment:()=>A,useStatelessUseCase:()=>M,useUseCase:()=>x});var t=n(848),e=n(594),o=n.n(e);function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function a(t,e){if(t){if("string"==typeof t)return u(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(t,e):void 0}}function i(t){return function(t){if(Array.isArray(t))return u(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||a(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,u,a,i=[],l=!0,c=!1;try{if(u=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=u.call(n)).done)&&(i.push(r.value),i.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw o}}return i}}(t,e)||a(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const c=ahooks;var f,s=function(t){return l((0,e.useState)((function(){return t})),1)[0]};function y(t){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y(t)}function d(t){var e=function(t,e){if("object"!=y(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==y(e)?e:String(e)}!function(t){t[t.None=0]="None",t[t.RootEnabled=2]="RootEnabled",t[t.ContextEnabled=4]="ContextEnabled",t[t.EntityEnabled=8]="EntityEnabled",t[t.ContextRootEnabled=22]="ContextRootEnabled",t[t.EntityRootEnabled=62]="EntityRootEnabled",t[t.StatelessEnabled=72]="StatelessEnabled"}(f||(f={}));const v=usecases;var b=["watch","onChange","options"];function E(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function p(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?E(Object(n),!0).forEach((function(e){var r,o,u;r=t,o=e,u=n[e],(o=d(o))in r?Object.defineProperty(r,o,{value:u,enumerable:!0,configurable:!0,writable:!0}):r[o]=u})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var m,h=function(t){return l((0,e.useState)(t),1)[0]},S=new Map;!function(t){t[t.None=0]="None",t[t.Entity=2]="Entity",t[t.Mode=4]="Mode"}(m||(m={}));var g,O=(0,e.createContext)(null);!function(t){t[t.Normal=2]="Normal",t[t.Stateless=4]="Stateless"}(g||(g={}));var w=function(t,e){var n=t.length;if(n!==e.length)return!1;for(var r=0;r<n;r++)if(t[r]!==e[r])return!1;return!0},j=function(t,e){var n,r=e||{},o=r.onShouldCache,u=void 0===o?function(){return!0}:o,a=r.onCompare,i=void 0===a?function(t,e){return w(t,e)}:a;return function(){for(var e=u(),r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];if(n&&e){var l=n,c=l.parameters,f=l.returnValue;if(i(c,o))return f}var s=t.apply(void 0,o);return e&&(n={parameters:o,returnValue:s}),s}},C=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=(0,c.useLatest)(n),u=(0,c.useCreation)((function(){return j(o.current,{onCompare:function(){return!0}})}),[r,o]);return(0,c.useCreation)((function(){return(e&f.RootEnabled)!==f.RootEnabled&&t?t:u()}),[e,t,u])},R=function(t,e){return"object"===y(t)&&null!==t&&Object.hasOwn(t,e)},P=function t(e,n,r,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],a=void 0,c=l(r.match(/^([^.]+)\.(.+)$/)||[],3),f=c[1],s=void 0===f?r:f,y=c[2],d=void 0===y?"":y,v=R(e,s),b=R(n,s),E=[].concat(i(u),[s]);if(v||b){var p=v?e[s]:a,m=b?n[s]:a;if(d)return void t(p,m,d,o,E);if(p===m)return;o(p,m,E)}else if(!/^\d+^/.test(s))for(var h=Array.isArray(e)?e:[],S=Array.isArray(n)?n:[],g=h.length,O=S.length,w=Math.max(g,O),j=0;j<w;j++)t(h[j],S[j],r,o,[].concat(i(u),["".concat(j)]))},_=function(t,e,n){for(var r=function(){var t=l(u[o],2),r=t[0],a=t[1];P(n,e,r,(function(t,r,o){a({fieldPaths:o,newEntity:e,oldEntity:n,newValue:r,oldValue:t})}))},o=0,u=Object.entries(t);o<u.length;o++)r()},x=function(){for(var t,n=((t=(0,e.useRef)(!0)).current=!0,(0,e.useEffect)((function(){t.current=!1})),t),r=arguments.length,u=new Array(r),a=0;a<r;a++)u[a]=arguments[a];var d=function(t){return h((function(){var e=m.None,n=l(t,3),r=n[1],o=n[2];return"function"===y(r)&&(e|=m.Entity,"number"==typeof o&&(e|=m.Mode)),e}))}(u),E=function(t,e){var n=l(t,5),r=n[0],o=n[1],u=n[2],a=n[3],i=n[4],c=(e&m.Entity)===m.Entity,f=(e&m.Mode)===m.Mode;return c?f?[r,o,u,a||{},i||[]]:[r,o,g.Normal,u||{},a||[]]:[null,r,g.Normal,o||{},u||[]]}(u,d),R=l(E,5),P=R[0],x=R[1],A=R[2],M=R[3],N=R[4],I=s(x),k=I,T=I,L=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m.None,r=S,o=h((function(){if(r.has(t)){var o=r.get(t),u=o.value,a=o.times;return r.set(t,{value:u,times:a+1}),u}if((n&m.Entity)!==m.Entity)return O;var i=(0,e.createContext)(null);return r.set(t,{value:i,times:1}),i}));return(0,c.useUnmount)((function(){if(r.has(t)){var e=r.get(t),n=e.value,u=e.times;o===n&&(1!==u?r.set(t,{value:n,times:u-1}):r.delete(t))}})),o}(I,d),U=(0,e.useContext)(L),D=U,V=function(t,e,n){return(0,c.useCreation)((function(){var r=f.None,o=(n||{}).store;return(t&m.Entity)===m.Entity&&(r|=f.EntityRootEnabled),r|=n?f.ContextEnabled:f.RootEnabled,o&&(r|=f.EntityEnabled),(e&g.Stateless)===g.Stateless&&(r|=f.StatelessEnabled),r}),[t,n,e])}(d,A,U),$=(0,c.useLatest)(M),F=function(t){var n=(0,e.useRef)(0),r=(0,e.useRef)([]),o=r.current,u=w(t,o);return r.current=t,n.current+=u?0:1,n.current}(N),B=(U||{}).reducers,G=void 0===B?null:B,W=(D||{}).store,Y=l(function(t,n,r,o,u){var a=l((0,e.useState)(n),2),i=a[0],s=a[1],y=r?r.value:null,d=function(t,e,n,r){return(t&f.EntityRootEnabled)!==f.EntityRootEnabled?r:(t&f.StatelessEnabled)!==f.StatelessEnabled?e:"function"==typeof n?n():n}(t,i,n,y),b=(t&f.EntityEnabled)===f.EntityEnabled,E=(t&f.EntityRootEnabled)===f.EntityRootEnabled,p=(0,c.useLatest)(o),m=C(r,t,(function(){if(!E)return new v.EntityStore(null);var e=(t&f.StatelessEnabled)===f.StatelessEnabled;return new v.EntityStore(d,{onChange:function(t){e||s(t)}})}));return E&&(m.value=d),(0,e.useEffect)((function(){if(b){var t=function(t,e){var n=p.current,r=n.onChange,o=n.watch;o&&_(o,t,e),null==r||r(t,e)};return m.watch(t),function(){m.unwatch(t)}}}),[b,m,u,p]),(0,c.useCreation)((function(){return[d,m]}),[d,m])}(V,P,void 0===W?null:W,M,F),2),q=Y[0],z=Y[1],H=C(G,V,(function(){var t,e,n,r=(t=M,e=function(t,e){var n,r;return null===(n=(r=$.current)[t])||void 0===n?void 0:n.call.apply(n,[r].concat(i(e)))},n={},Object.keys(t).forEach((function(r){var o=t[r];n[r]="function"!=typeof o?o:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e(r,n)}})),n);return(V&f.EntityEnabled)!==f.EntityEnabled?k(r):function(t,e,n){n.watch,n.onChange;var r=n.options,o=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n,r,o={},u=Object.keys(t);for(r=0;r<u.length;r++)n=u[r],e.indexOf(n)>=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(t);for(r=0;r<u.length;r++)n=u[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(n,b);return(0,v.createEntityReducers)(e,t,p(p(p({},o),r),{},{onGenerate:function(t,e){return e}}))}(T,z,r)}),F),J=function(t,n,r,u){var a=r.value,i=(0,e.useMemo)((function(){return(t&f.EntityEnabled)===f.EntityEnabled?{store:r,reducers:u,statuses:t}:{reducers:u,statuses:t}}),[t,a,r,u]),l=(0,c.useLatest)(i);return s((function(t){var e=t.children,r=t.with,u=void 0===r?[]:r,a=n.Provider;return o().createElement(a,{value:l.current},u.reduceRight((function(t,e){return o().createElement(e,{},t)}),e))}))}(V,L,z,H);return(0,c.useCreation)((function(){if((V&f.EntityEnabled)!==f.EntityEnabled)return H;var t=(V&f.RootEnabled)===f.RootEnabled,e=function(t,e){var n={};return Object.entries(t).forEach((function(t){var r=l(t,2),o=r[0],u=r[1];n[o]=j(u,e)})),n}(H,{onShouldCache:function(){return n.current}});return t?[q,e,J]:[q,e]}),[V,q,H,J,n])},A=function(n){var r=n.usecase,o=n.watch,u=n.onChange;return x(r,{watch:o,onChange:u}),(0,t.jsx)(e.Fragment,{})},M=function(t,e,n,r){return x(t,e,g.Stateless,n,r)}})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var u in r)o[u]=r[u];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
|
|
2
|
+
(()=>{var t={20:(t,e,n)=>{"use strict";var r=n(594),o=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),u=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};e.jsx=function(t,e,n){var r,l={},c=null,f=null;for(r in void 0!==n&&(c=""+n),void 0!==e.key&&(c=""+e.key),void 0!==e.ref&&(f=e.ref),e)a.call(e,r)&&!i.hasOwnProperty(r)&&(l[r]=e[r]);if(t&&t.defaultProps)for(r in e=t.defaultProps)void 0===l[r]&&(l[r]=e[r]);return{$$typeof:o,type:t,key:c,ref:f,props:l,_owner:u.current}}},848:(t,e,n)=>{"use strict";t.exports=n(20)},594:t=>{"use strict";t.exports=React}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var a=e[r]={exports:{}};return t[r](a,a.exports,n),a.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{UseCaseFragment:()=>A,useStateControllableUseCase:()=>M,useStatelessUseCase:()=>N,useUseCase:()=>x});var t=n(848),e=n(594),o=n.n(e);function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function u(t,e){if(t){if("string"==typeof t)return a(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}function i(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||u(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,u,i=[],l=!0,c=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(i.push(r.value),i.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return i}}(t,e)||u(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const c=ahooks;var f,s=function(t){return l((0,e.useState)((function(){return t})),1)[0]};function y(t){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y(t)}function b(t){var e=function(t,e){if("object"!=y(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==y(e)?e:String(e)}!function(t){t[t.None=0]="None",t[t.RootEnabled=2]="RootEnabled",t[t.ContextEnabled=4]="ContextEnabled",t[t.EntityEnabled=8]="EntityEnabled",t[t.ContextRootEnabled=22]="ContextRootEnabled",t[t.EntityRootEnabled=62]="EntityRootEnabled",t[t.StateControllableEnabled=72]="StateControllableEnabled",t[t.StatelessEnabled=136]="StatelessEnabled"}(f||(f={}));const d=usecases;var v=["watch","onChange","options"];function E(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function p(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?E(Object(n),!0).forEach((function(e){var r,o,a;r=t,o=e,a=n[e],(o=b(o))in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var m,h=function(t){return l((0,e.useState)(t),1)[0]},S=new Map;!function(t){t[t.None=0]="None",t[t.Entity=2]="Entity",t[t.Mode=4]="Mode"}(m||(m={}));var g,O=(0,e.createContext)(null);!function(t){t[t.Normal=0]="Normal",t[t.StateControllable=1]="StateControllable",t[t.Stateless=2]="Stateless"}(g||(g={}));var w=function(t,e){var n=t.length;if(n!==e.length)return!1;for(var r=0;r<n;r++)if(t[r]!==e[r])return!1;return!0},C=function(t,e){var n,r=e||{},o=r.onShouldCache,a=void 0===o?function(){return!0}:o,u=r.onCompare,i=void 0===u?function(t,e){return w(t,e)}:u;return function(){for(var e=a(),r=arguments.length,o=new Array(r),u=0;u<r;u++)o[u]=arguments[u];if(n&&e){var l=n,c=l.parameters,f=l.returnValue;if(i(c,o))return f}var s=t.apply(void 0,o);return e&&(n={parameters:o,returnValue:s}),s}},j=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=(0,c.useLatest)(n),a=(0,c.useCreation)((function(){return C(o.current,{onCompare:function(){return!0}})}),[r,o]);return(0,c.useCreation)((function(){return(e&f.RootEnabled)!==f.RootEnabled&&t?t:a()}),[e,t,a])},R=function(t,e){return"object"===y(t)&&null!==t&&Object.hasOwn(t,e)},P=function t(e,n,r,o){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],u=void 0,c=l(r.match(/^([^.]+)\.(.+)$/)||[],3),f=c[1],s=void 0===f?r:f,y=c[2],b=void 0===y?"":y,d=R(e,s),v=R(n,s),E=[].concat(i(a),[s]);if(d||v){var p=d?e[s]:u,m=v?n[s]:u;if(b)return void t(p,m,b,o,E);if(p===m)return;o(p,m,E)}else if(!/^\d+^/.test(s))for(var h=Array.isArray(e)?e:[],S=Array.isArray(n)?n:[],g=h.length,O=S.length,w=Math.max(g,O),C=0;C<w;C++)t(h[C],S[C],r,o,[].concat(i(a),["".concat(C)]))},_=function(t,e,n){for(var r=function(){var t=l(a[o],2),r=t[0],u=t[1];P(n,e,r,(function(t,r,o){u({fieldPaths:o,newEntity:e,oldEntity:n,newValue:r,oldValue:t})}))},o=0,a=Object.entries(t);o<a.length;o++)r()},x=function(){for(var t,n=((t=(0,e.useRef)(!0)).current=!0,(0,e.useEffect)((function(){t.current=!1})),t),r=arguments.length,a=new Array(r),u=0;u<r;u++)a[u]=arguments[u];var b=function(t){return h((function(){var e=m.None,n=l(t,3),r=n[1],o=n[2];return"function"===y(r)&&(e|=m.Entity,"number"==typeof o&&(e|=m.Mode)),e}))}(a),E=function(t,e){var n=l(t,5),r=n[0],o=n[1],a=n[2],u=n[3],i=n[4],c=(e&m.Entity)===m.Entity,f=(e&m.Mode)===m.Mode;return c?f?[r,o,a,u||{},i||[]]:[r,o,g.Normal,a||{},u||[]]:[null,r,g.Normal,o||{},a||[]]}(a,b),R=l(E,5),P=R[0],x=R[1],A=R[2],M=R[3],N=R[4],k=s(x),I=k,T=k,U=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m.None,r=S,o=h((function(){if(r.has(t)){var o=r.get(t),a=o.value,u=o.times;return r.set(t,{value:a,times:u+1}),a}if((n&m.Entity)!==m.Entity)return O;var i=(0,e.createContext)(null);return r.set(t,{value:i,times:1}),i}));return(0,c.useUnmount)((function(){if(r.has(t)){var e=r.get(t),n=e.value,a=e.times;o===n&&(1!==a?r.set(t,{value:n,times:a-1}):r.delete(t))}})),o}(k,b),L=(0,e.useContext)(U),D=L,V=function(t,e,n){return(0,c.useCreation)((function(){var r=f.None,o=(n||{}).store;switch((t&m.Entity)===m.Entity&&(r|=f.EntityRootEnabled),r|=n?f.ContextEnabled:f.RootEnabled,o&&(r|=f.EntityEnabled),e){case g.StateControllable:r|=f.StateControllableEnabled;break;case g.Stateless:r|=f.StatelessEnabled}return r}),[t,n,e])}(b,A,L),$=(0,c.useLatest)(M),F=function(t){var n=(0,e.useRef)(0),r=(0,e.useRef)([]),o=r.current,a=w(t,o);return r.current=t,n.current+=a?0:1,n.current}(N),B=(L||{}).reducers,G=void 0===B?null:B,W=(D||{}).store,Y=l(function(t,n,r,o,a){var u=l((0,e.useState)(n),2),i=u[0],s=u[1],y=r?r.value:null,b=function(t,n,r,o){var a=(0,e.useRef)(r);if((t&f.EntityRootEnabled)!==f.EntityRootEnabled)return o;var u="function"==typeof r;if((t&f.StatelessEnabled)===f.StatelessEnabled)return u?r():r;var i=a.current;switch(!0){case(t&f.StateControllableEnabled)!==f.StateControllableEnabled:case u:case i===r:return n}return a.current=r,r}(t,i,n,y),v=(t&f.EntityEnabled)===f.EntityEnabled,E=(t&f.EntityRootEnabled)===f.EntityRootEnabled,p=(0,c.useLatest)(o),m=j(r,t,(function(){if(!E)return new d.EntityStore(null);var e=(t&f.StatelessEnabled)===f.StatelessEnabled;return new d.EntityStore(b,{onChange:function(t){e||s(t)}})}));return E&&(m.value=b),(0,e.useEffect)((function(){if(v){var t=function(t,e){var n=p.current,r=n.onChange,o=n.watch;o&&_(o,t,e),null==r||r(t,e)};return m.watch(t),function(){m.unwatch(t)}}}),[v,m,a,p]),(0,c.useCreation)((function(){return[b,m]}),[b,m])}(V,P,void 0===W?null:W,M,F),2),q=Y[0],z=Y[1],H=j(G,V,(function(){var t,e,n,r=(t=M,e=function(t,e){var n,r;return null===(n=(r=$.current)[t])||void 0===n?void 0:n.call.apply(n,[r].concat(i(e)))},n={},Object.keys(t).forEach((function(r){var o=t[r];n[r]="function"!=typeof o?o:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e(r,n)}})),n);return(V&f.EntityEnabled)!==f.EntityEnabled?I(r):function(t,e,n){n.watch,n.onChange;var r=n.options,o=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n,r,o={},a=Object.keys(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(n,v);return(0,d.createEntityReducers)(e,t,p(p(p({},o),r),{},{onGenerate:function(t,e){return e}}))}(T,z,r)}),F),J=function(t,n,r,a){var u=r.value,i=(0,e.useMemo)((function(){return(t&f.EntityEnabled)===f.EntityEnabled?{store:r,reducers:a,statuses:t}:{reducers:a,statuses:t}}),[t,u,r,a]),l=(0,c.useLatest)(i);return s((function(t){var e=t.children,r=t.with,a=void 0===r?[]:r,u=n.Provider;return o().createElement(u,{value:l.current},a.reduceRight((function(t,e){return o().createElement(e,{},t)}),e))}))}(V,U,z,H);return(0,c.useCreation)((function(){if((V&f.EntityEnabled)!==f.EntityEnabled)return H;var t=(V&f.RootEnabled)===f.RootEnabled,e=function(t,e){var n={};return Object.entries(t).forEach((function(t){var r=l(t,2),o=r[0],a=r[1];n[o]=C(a,e)})),n}(H,{onShouldCache:function(){return n.current}});return t?[q,e,J]:[q,e]}),[V,q,H,J,n])},A=function(n){var r=n.usecase,o=n.watch,a=n.onChange;return x(r,{watch:o,onChange:a}),(0,t.jsx)(e.Fragment,{})},M=function(t,e,n,r){return x(t,e,g.StateControllable,n,r)},N=function(t,e,n,r){return x(t,e,g.Stateless,n,r)}})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export var UseCaseModes;
|
|
2
2
|
(function (UseCaseModes) {
|
|
3
|
-
UseCaseModes[UseCaseModes["Normal"] =
|
|
4
|
-
UseCaseModes[UseCaseModes["
|
|
3
|
+
UseCaseModes[UseCaseModes["Normal"] = 0] = "Normal";
|
|
4
|
+
UseCaseModes[UseCaseModes["StateControllable"] = 1] = "StateControllable";
|
|
5
|
+
UseCaseModes[UseCaseModes["Stateless"] = 2] = "Stateless";
|
|
5
6
|
})(UseCaseModes || (UseCaseModes = {}));
|
|
@@ -11,6 +11,8 @@ export var UseCaseStatuses;
|
|
|
11
11
|
UseCaseStatuses[UseCaseStatuses["ContextRootEnabled"] = 22] = "ContextRootEnabled";
|
|
12
12
|
// 是否初始化与 `entity` 相关的 `reducers`
|
|
13
13
|
UseCaseStatuses[UseCaseStatuses["EntityRootEnabled"] = 62] = "EntityRootEnabled";
|
|
14
|
+
// 是否为 `entity` 状态可控
|
|
15
|
+
UseCaseStatuses[UseCaseStatuses["StateControllableEnabled"] = 72] = "StateControllableEnabled";
|
|
14
16
|
// 是否不需要 `entity` 状态管理
|
|
15
|
-
UseCaseStatuses[UseCaseStatuses["StatelessEnabled"] =
|
|
17
|
+
UseCaseStatuses[UseCaseStatuses["StatelessEnabled"] = 136] = "StatelessEnabled";
|
|
16
18
|
})(UseCaseStatuses || (UseCaseStatuses = {}));
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import { EntityStore } from '@mic-rexjs/usecases';
|
|
3
3
|
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
4
|
-
import { getRenderingEntity } from '../../methods/getRenderingEntity';
|
|
5
4
|
import { useContextualItem } from '../useContextualItem';
|
|
6
5
|
import { useCreation, useLatest } from 'ahooks';
|
|
7
6
|
import { triggerWatchers } from '../../methods/triggerWatchers';
|
|
7
|
+
import { useRuntimeEntity } from '../useRuntimeEntity';
|
|
8
8
|
export const useEntity = (statuses, rootEntity, contextStore, options, depsKey) => {
|
|
9
9
|
const [entityState, setEntityState] = useState(rootEntity);
|
|
10
10
|
const contextEntity = (contextStore ? contextStore.value : null);
|
|
11
|
-
const
|
|
11
|
+
const runtimeEntity = useRuntimeEntity(statuses, entityState, rootEntity, contextEntity);
|
|
12
12
|
const entityEnabled = (statuses & UseCaseStatuses.EntityEnabled) === UseCaseStatuses.EntityEnabled;
|
|
13
13
|
const entityRootEnabled = (statuses & UseCaseStatuses.EntityRootEnabled) === UseCaseStatuses.EntityRootEnabled;
|
|
14
14
|
const optionsRef = useLatest(options);
|
|
@@ -17,7 +17,7 @@ export const useEntity = (statuses, rootEntity, contextStore, options, depsKey)
|
|
|
17
17
|
return new EntityStore(null);
|
|
18
18
|
}
|
|
19
19
|
const stateless = (statuses & UseCaseStatuses.StatelessEnabled) === UseCaseStatuses.StatelessEnabled;
|
|
20
|
-
return new EntityStore(
|
|
20
|
+
return new EntityStore(runtimeEntity, {
|
|
21
21
|
onChange(newEntity) {
|
|
22
22
|
if (stateless) {
|
|
23
23
|
return;
|
|
@@ -28,7 +28,7 @@ export const useEntity = (statuses, rootEntity, contextStore, options, depsKey)
|
|
|
28
28
|
});
|
|
29
29
|
if (entityRootEnabled) {
|
|
30
30
|
// 执行同步操作
|
|
31
|
-
store.value =
|
|
31
|
+
store.value = runtimeEntity;
|
|
32
32
|
}
|
|
33
33
|
useEffect(() => {
|
|
34
34
|
if (!entityEnabled) {
|
|
@@ -47,6 +47,6 @@ export const useEntity = (statuses, rootEntity, contextStore, options, depsKey)
|
|
|
47
47
|
};
|
|
48
48
|
}, [entityEnabled, store, depsKey, optionsRef]);
|
|
49
49
|
return useCreation(() => {
|
|
50
|
-
return [
|
|
51
|
-
}, [
|
|
50
|
+
return [runtimeEntity, store];
|
|
51
|
+
}, [runtimeEntity, store]);
|
|
52
52
|
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
export const useRuntimeEntity = (statuses, entityState, rootEntity, contextEntity) => {
|
|
4
|
+
const prevRootEntityRef = useRef(rootEntity);
|
|
5
|
+
const entityRootDisabled = (statuses & UseCaseStatuses.EntityRootEnabled) !== UseCaseStatuses.EntityRootEnabled;
|
|
6
|
+
if (entityRootDisabled) {
|
|
7
|
+
return contextEntity;
|
|
8
|
+
}
|
|
9
|
+
const isFunction = typeof rootEntity === 'function';
|
|
10
|
+
const statelessEnable = (statuses & UseCaseStatuses.StatelessEnabled) === UseCaseStatuses.StatelessEnabled;
|
|
11
|
+
if (statelessEnable) {
|
|
12
|
+
if (isFunction) {
|
|
13
|
+
return rootEntity();
|
|
14
|
+
}
|
|
15
|
+
return rootEntity;
|
|
16
|
+
}
|
|
17
|
+
const { current: prevRootEntity } = prevRootEntityRef;
|
|
18
|
+
const stateControllableDisabled = (statuses & UseCaseStatuses.StateControllableEnabled) !== UseCaseStatuses.StateControllableEnabled;
|
|
19
|
+
switch (true) {
|
|
20
|
+
case stateControllableDisabled:
|
|
21
|
+
case isFunction:
|
|
22
|
+
case prevRootEntity === rootEntity:
|
|
23
|
+
return entityState;
|
|
24
|
+
}
|
|
25
|
+
prevRootEntityRef.current = rootEntity;
|
|
26
|
+
return rootEntity;
|
|
27
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { useUseCase } from '../useUseCase';
|
|
2
|
+
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
3
|
+
export const useStateControllableUseCase = ((entity, useCase, options, deps) => {
|
|
4
|
+
return useUseCase(entity, useCase, UseCaseModes.StateControllable, options, deps);
|
|
5
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { entityUseCase } from '@mic-rexjs/usecases';
|
|
2
|
+
import { describe, expect, jest, test } from '@jest/globals';
|
|
3
|
+
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
4
|
+
import { renderHook } from '@testing-library/react';
|
|
5
|
+
import * as useUseCaseModule from '../useUseCase';
|
|
6
|
+
import { useStateControllableUseCase } from '.';
|
|
7
|
+
const numberUseCase = () => {
|
|
8
|
+
return entityUseCase();
|
|
9
|
+
};
|
|
10
|
+
describe('useStateControllableUseCase', () => {
|
|
11
|
+
describe('`useStateControllableUseCase` should work the same as `RootCoreCollectionHook`', () => {
|
|
12
|
+
test('should pass `UseCaseModes.StateControllable` to `useUseCase`', () => {
|
|
13
|
+
const useMockedUseCase = jest.fn();
|
|
14
|
+
jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
|
|
15
|
+
renderHook(() => {
|
|
16
|
+
useStateControllableUseCase(1, numberUseCase);
|
|
17
|
+
});
|
|
18
|
+
expect(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, UseCaseModes.StateControllable, void 0, void 0);
|
|
19
|
+
jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
|
|
20
|
+
});
|
|
21
|
+
test('should should return `CoreCollection` with Provider', () => {
|
|
22
|
+
const { result } = renderHook(() => {
|
|
23
|
+
return useStateControllableUseCase(1, numberUseCase);
|
|
24
|
+
});
|
|
25
|
+
const { current } = result;
|
|
26
|
+
expect(current).toEqual([
|
|
27
|
+
1,
|
|
28
|
+
{
|
|
29
|
+
setEntity: expect.any(Function),
|
|
30
|
+
},
|
|
31
|
+
expect.any(Function),
|
|
32
|
+
void 0,
|
|
33
|
+
void 0,
|
|
34
|
+
]);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -12,6 +12,7 @@ const PATH_1 = `hello${EXT_1}`;
|
|
|
12
12
|
const PATH_2 = `hello${EXT_2}`;
|
|
13
13
|
const PARENT_BUTTON_TEXT = 'parent button';
|
|
14
14
|
const CHILD_BUTTON_TEXT = 'child button';
|
|
15
|
+
const allModes = [UseCaseModes.Normal, UseCaseModes.StateControllable, UseCaseModes.Stateless];
|
|
15
16
|
const defaultFile = {
|
|
16
17
|
path: '',
|
|
17
18
|
ext: '',
|
|
@@ -1067,13 +1068,46 @@ describe('useUseCase', () => {
|
|
|
1067
1068
|
});
|
|
1068
1069
|
});
|
|
1069
1070
|
describe('`useUseCase` should work the same as `ModeCoreCollectionHook`', () => {
|
|
1070
|
-
test.each(
|
|
1071
|
+
test.each(allModes)('[mode=%s]: check context type', (mode) => {
|
|
1071
1072
|
const { result } = renderHook(() => {
|
|
1072
1073
|
return useUseCase(defaultFile, fileUseCase, mode);
|
|
1073
1074
|
});
|
|
1074
|
-
const { current:
|
|
1075
|
-
expect(Array.isArray(
|
|
1076
|
-
expect(
|
|
1075
|
+
const { current: collection } = result;
|
|
1076
|
+
expect(Array.isArray(collection)).toBe(true);
|
|
1077
|
+
expect(collection).toHaveLength(3);
|
|
1078
|
+
});
|
|
1079
|
+
test('state controllable mode should return the entity state if initial entity has not changed', () => {
|
|
1080
|
+
const { result } = renderHook(() => {
|
|
1081
|
+
return useUseCase(defaultFile, fileUseCase, UseCaseModes.StateControllable);
|
|
1082
|
+
});
|
|
1083
|
+
const { current: collection } = result;
|
|
1084
|
+
const [, { setPath }] = collection;
|
|
1085
|
+
act(() => {
|
|
1086
|
+
setPath(PATH_1);
|
|
1087
|
+
});
|
|
1088
|
+
expect(result.current[0]).toEqual({ ...defaultFile, path: PATH_1, ext: EXT_1 });
|
|
1089
|
+
});
|
|
1090
|
+
test('state controllable mode should return the initial entity if initial entity has changed', () => {
|
|
1091
|
+
let file = defaultFile;
|
|
1092
|
+
const { result, rerender } = renderHook(() => {
|
|
1093
|
+
return useUseCase(file, fileUseCase, UseCaseModes.StateControllable);
|
|
1094
|
+
});
|
|
1095
|
+
file = { ...defaultFile, path: PATH_1 };
|
|
1096
|
+
rerender();
|
|
1097
|
+
expect(result.current[0]).toEqual({ ...defaultFile, path: PATH_1 });
|
|
1098
|
+
});
|
|
1099
|
+
test('state controllable mode should return the initial entity if initial entity has changed even with entity state changed', () => {
|
|
1100
|
+
let file = defaultFile;
|
|
1101
|
+
const { result } = renderHook(() => {
|
|
1102
|
+
return useUseCase(file, fileUseCase, UseCaseModes.StateControllable);
|
|
1103
|
+
});
|
|
1104
|
+
const { current: collection } = result;
|
|
1105
|
+
const [, { setPath }] = collection;
|
|
1106
|
+
act(() => {
|
|
1107
|
+
file = { ...defaultFile, path: PATH_2 };
|
|
1108
|
+
setPath(PATH_1);
|
|
1109
|
+
});
|
|
1110
|
+
expect(result.current[0]).toEqual({ ...defaultFile, path: PATH_2 });
|
|
1077
1111
|
});
|
|
1078
1112
|
test('stateless mode should not generate new reducers when `yeild entity`', () => {
|
|
1079
1113
|
const onUpdate = jest.fn();
|
|
@@ -1309,7 +1343,7 @@ describe('useUseCase', () => {
|
|
|
1309
1343
|
expect(onChangeB).toHaveReturnedWith(1);
|
|
1310
1344
|
expect(onChangeC).toHaveReturnedWith(3);
|
|
1311
1345
|
});
|
|
1312
|
-
test.each(
|
|
1346
|
+
test.each(allModes)('[mode=%s]: `options.onChange` should always trigger the latest one in child components', (mode) => {
|
|
1313
1347
|
const onFirstChange = jest.fn();
|
|
1314
1348
|
const onSecondChange = jest.fn();
|
|
1315
1349
|
let onChange = onFirstChange;
|
|
@@ -1332,7 +1366,7 @@ describe('useUseCase', () => {
|
|
|
1332
1366
|
const [file, setFile] = useState(defaultFile);
|
|
1333
1367
|
const [, , Provider] = useUseCase(file, fileUseCase, mode, {
|
|
1334
1368
|
onChange(newFile) {
|
|
1335
|
-
if (
|
|
1369
|
+
if (mode !== UseCaseModes.Stateless) {
|
|
1336
1370
|
return;
|
|
1337
1371
|
}
|
|
1338
1372
|
// `stateless` 不会保存状态,所以需要手动保存
|
|
@@ -1425,7 +1459,7 @@ describe('useUseCase', () => {
|
|
|
1425
1459
|
expect(onChangeB).toHaveReturnedWith(1);
|
|
1426
1460
|
expect(onChangeC).toHaveReturnedWith(3);
|
|
1427
1461
|
});
|
|
1428
|
-
test.each(
|
|
1462
|
+
test.each(allModes)('[mode=%s]: `options.watch` should trigger the latest one in child components', (mode) => {
|
|
1429
1463
|
const onFirstExtChange = jest.fn();
|
|
1430
1464
|
const onSecondExtChange = jest.fn();
|
|
1431
1465
|
let onExtChange = onFirstExtChange;
|
|
@@ -1450,7 +1484,7 @@ describe('useUseCase', () => {
|
|
|
1450
1484
|
const [file, setFile] = useState(defaultFile);
|
|
1451
1485
|
const [, , Provider] = useUseCase(file, fileUseCase, mode, {
|
|
1452
1486
|
onChange(newFile) {
|
|
1453
|
-
if (
|
|
1487
|
+
if (mode !== UseCaseModes.Stateless) {
|
|
1454
1488
|
return;
|
|
1455
1489
|
}
|
|
1456
1490
|
// `stateless` 不会保存状态,所以需要手动保存
|
|
@@ -18,8 +18,13 @@ export const useUseCaseStatuses = (argumentTypes, mode, contextValue) => {
|
|
|
18
18
|
if (store) {
|
|
19
19
|
statuses |= UseCaseStatuses.EntityEnabled;
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
switch (mode) {
|
|
22
|
+
case UseCaseModes.StateControllable:
|
|
23
|
+
statuses |= UseCaseStatuses.StateControllableEnabled;
|
|
24
|
+
break;
|
|
25
|
+
case UseCaseModes.Stateless:
|
|
26
|
+
statuses |= UseCaseStatuses.StatelessEnabled;
|
|
27
|
+
break;
|
|
23
28
|
}
|
|
24
29
|
return statuses;
|
|
25
30
|
}, [argumentTypes, contextValue, mode]);
|
package/es/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { UseCaseFragment } from './components/UseCaseFragment';
|
|
2
2
|
export { useUseCase } from './hooks/useUseCase';
|
|
3
|
+
export { useStateControllableUseCase } from './hooks/useStateControllableUseCase';
|
|
3
4
|
export { useStatelessUseCase } from './hooks/useStatelessUseCase';
|
|
4
5
|
export type { EntityWatchEvent, RootCoreCollection, ContextualCoreCollection, CoreCollection, } from './hooks/useUseCase/types';
|
|
5
6
|
export type { UseCaseHookOptions } from './hooks/useUseCase/types';
|
package/es/index.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.UseCaseModes = void 0;
|
|
7
7
|
var UseCaseModes;
|
|
8
8
|
(function (UseCaseModes) {
|
|
9
|
-
UseCaseModes[UseCaseModes["Normal"] =
|
|
10
|
-
UseCaseModes[UseCaseModes["
|
|
9
|
+
UseCaseModes[UseCaseModes["Normal"] = 0] = "Normal";
|
|
10
|
+
UseCaseModes[UseCaseModes["StateControllable"] = 1] = "StateControllable";
|
|
11
|
+
UseCaseModes[UseCaseModes["Stateless"] = 2] = "Stateless";
|
|
11
12
|
})(UseCaseModes || (exports.UseCaseModes = UseCaseModes = {}));
|
|
@@ -17,6 +17,8 @@ var UseCaseStatuses;
|
|
|
17
17
|
UseCaseStatuses[UseCaseStatuses["ContextRootEnabled"] = 22] = "ContextRootEnabled";
|
|
18
18
|
// 是否初始化与 `entity` 相关的 `reducers`
|
|
19
19
|
UseCaseStatuses[UseCaseStatuses["EntityRootEnabled"] = 62] = "EntityRootEnabled";
|
|
20
|
+
// 是否为 `entity` 状态可控
|
|
21
|
+
UseCaseStatuses[UseCaseStatuses["StateControllableEnabled"] = 72] = "StateControllableEnabled";
|
|
20
22
|
// 是否不需要 `entity` 状态管理
|
|
21
|
-
UseCaseStatuses[UseCaseStatuses["StatelessEnabled"] =
|
|
23
|
+
UseCaseStatuses[UseCaseStatuses["StatelessEnabled"] = 136] = "StatelessEnabled";
|
|
22
24
|
})(UseCaseStatuses || (exports.UseCaseStatuses = UseCaseStatuses = {}));
|
|
@@ -9,17 +9,17 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
9
9
|
var _react = require("react");
|
|
10
10
|
var _usecases = require("@mic-rexjs/usecases");
|
|
11
11
|
var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
12
|
-
var _getRenderingEntity = require("../../methods/getRenderingEntity");
|
|
13
12
|
var _useContextualItem = require("../useContextualItem");
|
|
14
13
|
var _ahooks = require("ahooks");
|
|
15
14
|
var _triggerWatchers = require("../../methods/triggerWatchers");
|
|
15
|
+
var _useRuntimeEntity = require("../useRuntimeEntity");
|
|
16
16
|
var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, contextStore, options, depsKey) {
|
|
17
17
|
var _useState = (0, _react.useState)(rootEntity),
|
|
18
18
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
19
19
|
entityState = _useState2[0],
|
|
20
20
|
setEntityState = _useState2[1];
|
|
21
21
|
var contextEntity = contextStore ? contextStore.value : null;
|
|
22
|
-
var
|
|
22
|
+
var runtimeEntity = (0, _useRuntimeEntity.useRuntimeEntity)(statuses, entityState, rootEntity, contextEntity);
|
|
23
23
|
var entityEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityEnabled;
|
|
24
24
|
var entityRootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled;
|
|
25
25
|
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
@@ -28,7 +28,7 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
|
|
|
28
28
|
return new _usecases.EntityStore(null);
|
|
29
29
|
}
|
|
30
30
|
var stateless = (statuses & _UseCaseStatuses.UseCaseStatuses.StatelessEnabled) === _UseCaseStatuses.UseCaseStatuses.StatelessEnabled;
|
|
31
|
-
return new _usecases.EntityStore(
|
|
31
|
+
return new _usecases.EntityStore(runtimeEntity, {
|
|
32
32
|
onChange: function onChange(newEntity) {
|
|
33
33
|
if (stateless) {
|
|
34
34
|
return;
|
|
@@ -39,7 +39,7 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
|
|
|
39
39
|
});
|
|
40
40
|
if (entityRootEnabled) {
|
|
41
41
|
// 执行同步操作
|
|
42
|
-
store.value =
|
|
42
|
+
store.value = runtimeEntity;
|
|
43
43
|
}
|
|
44
44
|
(0, _react.useEffect)(function () {
|
|
45
45
|
if (!entityEnabled) {
|
|
@@ -60,6 +60,6 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
|
|
|
60
60
|
};
|
|
61
61
|
}, [entityEnabled, store, depsKey, optionsRef]);
|
|
62
62
|
return (0, _ahooks.useCreation)(function () {
|
|
63
|
-
return [
|
|
64
|
-
}, [
|
|
63
|
+
return [runtimeEntity, store];
|
|
64
|
+
}, [runtimeEntity, store]);
|
|
65
65
|
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useRuntimeEntity = void 0;
|
|
7
|
+
var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var useRuntimeEntity = exports.useRuntimeEntity = function useRuntimeEntity(statuses, entityState, rootEntity, contextEntity) {
|
|
10
|
+
var prevRootEntityRef = (0, _react.useRef)(rootEntity);
|
|
11
|
+
var entityRootDisabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled;
|
|
12
|
+
if (entityRootDisabled) {
|
|
13
|
+
return contextEntity;
|
|
14
|
+
}
|
|
15
|
+
var isFunction = typeof rootEntity === 'function';
|
|
16
|
+
var statelessEnable = (statuses & _UseCaseStatuses.UseCaseStatuses.StatelessEnabled) === _UseCaseStatuses.UseCaseStatuses.StatelessEnabled;
|
|
17
|
+
if (statelessEnable) {
|
|
18
|
+
if (isFunction) {
|
|
19
|
+
return rootEntity();
|
|
20
|
+
}
|
|
21
|
+
return rootEntity;
|
|
22
|
+
}
|
|
23
|
+
var prevRootEntity = prevRootEntityRef.current;
|
|
24
|
+
var stateControllableDisabled = (statuses & _UseCaseStatuses.UseCaseStatuses.StateControllableEnabled) !== _UseCaseStatuses.UseCaseStatuses.StateControllableEnabled;
|
|
25
|
+
switch (true) {
|
|
26
|
+
case stateControllableDisabled:
|
|
27
|
+
case isFunction:
|
|
28
|
+
case prevRootEntity === rootEntity:
|
|
29
|
+
return entityState;
|
|
30
|
+
}
|
|
31
|
+
prevRootEntityRef.current = rootEntity;
|
|
32
|
+
return rootEntity;
|
|
33
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useStateControllableUseCase = void 0;
|
|
7
|
+
var _useUseCase = require("../useUseCase");
|
|
8
|
+
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
9
|
+
var useStateControllableUseCase = exports.useStateControllableUseCase = function useStateControllableUseCase(entity, useCase, options, deps) {
|
|
10
|
+
return (0, _useUseCase.useUseCase)(entity, useCase, _UseCaseModes.UseCaseModes.StateControllable, options, deps);
|
|
11
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
var _usecases = require("@mic-rexjs/usecases");
|
|
5
|
+
var _globals = require("@jest/globals");
|
|
6
|
+
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
7
|
+
var _react = require("@testing-library/react");
|
|
8
|
+
var useUseCaseModule = _interopRequireWildcard(require("../useUseCase"));
|
|
9
|
+
var _ = require(".");
|
|
10
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
11
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
12
|
+
var numberUseCase = function numberUseCase() {
|
|
13
|
+
return (0, _usecases.entityUseCase)();
|
|
14
|
+
};
|
|
15
|
+
(0, _globals.describe)('useStateControllableUseCase', function () {
|
|
16
|
+
(0, _globals.describe)('`useStateControllableUseCase` should work the same as `RootCoreCollectionHook`', function () {
|
|
17
|
+
(0, _globals.test)('should pass `UseCaseModes.StateControllable` to `useUseCase`', function () {
|
|
18
|
+
var useMockedUseCase = _globals.jest.fn();
|
|
19
|
+
_globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
|
|
20
|
+
(0, _react.renderHook)(function () {
|
|
21
|
+
(0, _.useStateControllableUseCase)(1, numberUseCase);
|
|
22
|
+
});
|
|
23
|
+
(0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, _UseCaseModes.UseCaseModes.StateControllable, void 0, void 0);
|
|
24
|
+
_globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
|
|
25
|
+
});
|
|
26
|
+
(0, _globals.test)('should should return `CoreCollection` with Provider', function () {
|
|
27
|
+
var _renderHook = (0, _react.renderHook)(function () {
|
|
28
|
+
return (0, _.useStateControllableUseCase)(1, numberUseCase);
|
|
29
|
+
}),
|
|
30
|
+
result = _renderHook.result;
|
|
31
|
+
var current = result.current;
|
|
32
|
+
(0, _globals.expect)(current).toEqual([1, {
|
|
33
|
+
setEntity: _globals.expect.any(Function)
|
|
34
|
+
}, _globals.expect.any(Function), void 0, void 0]);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -27,6 +27,7 @@ var PATH_1 = "hello".concat(EXT_1);
|
|
|
27
27
|
var PATH_2 = "hello".concat(EXT_2);
|
|
28
28
|
var PARENT_BUTTON_TEXT = 'parent button';
|
|
29
29
|
var CHILD_BUTTON_TEXT = 'child button';
|
|
30
|
+
var allModes = [_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.StateControllable, _UseCaseModes.UseCaseModes.Stateless];
|
|
30
31
|
var defaultFile = {
|
|
31
32
|
path: '',
|
|
32
33
|
ext: '',
|
|
@@ -1414,26 +1415,76 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1414
1415
|
});
|
|
1415
1416
|
});
|
|
1416
1417
|
(0, _globals.describe)('`useUseCase` should work the same as `ModeCoreCollectionHook`', function () {
|
|
1417
|
-
_globals.test.each(
|
|
1418
|
+
_globals.test.each(allModes)('[mode=%s]: check context type', function (mode) {
|
|
1418
1419
|
var _renderHook25 = (0, _react.renderHook)(function () {
|
|
1419
1420
|
return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
|
|
1420
1421
|
}),
|
|
1421
1422
|
result = _renderHook25.result;
|
|
1422
|
-
var
|
|
1423
|
-
(0, _globals.expect)(Array.isArray(
|
|
1424
|
-
(0, _globals.expect)(
|
|
1423
|
+
var collection = result.current;
|
|
1424
|
+
(0, _globals.expect)(Array.isArray(collection)).toBe(true);
|
|
1425
|
+
(0, _globals.expect)(collection).toHaveLength(3);
|
|
1426
|
+
});
|
|
1427
|
+
(0, _globals.test)('state controllable mode should return the entity state if initial entity has not changed', function () {
|
|
1428
|
+
var _renderHook26 = (0, _react.renderHook)(function () {
|
|
1429
|
+
return (0, _.useUseCase)(defaultFile, fileUseCase, _UseCaseModes.UseCaseModes.StateControllable);
|
|
1430
|
+
}),
|
|
1431
|
+
result = _renderHook26.result;
|
|
1432
|
+
var collection = result.current;
|
|
1433
|
+
var _collection = (0, _slicedToArray2["default"])(collection, 2),
|
|
1434
|
+
setPath = _collection[1].setPath;
|
|
1435
|
+
(0, _react.act)(function () {
|
|
1436
|
+
setPath(PATH_1);
|
|
1437
|
+
});
|
|
1438
|
+
(0, _globals.expect)(result.current[0]).toEqual(_objectSpread(_objectSpread({}, defaultFile), {}, {
|
|
1439
|
+
path: PATH_1,
|
|
1440
|
+
ext: EXT_1
|
|
1441
|
+
}));
|
|
1442
|
+
});
|
|
1443
|
+
(0, _globals.test)('state controllable mode should return the initial entity if initial entity has changed', function () {
|
|
1444
|
+
var file = defaultFile;
|
|
1445
|
+
var _renderHook27 = (0, _react.renderHook)(function () {
|
|
1446
|
+
return (0, _.useUseCase)(file, fileUseCase, _UseCaseModes.UseCaseModes.StateControllable);
|
|
1447
|
+
}),
|
|
1448
|
+
result = _renderHook27.result,
|
|
1449
|
+
rerender = _renderHook27.rerender;
|
|
1450
|
+
file = _objectSpread(_objectSpread({}, defaultFile), {}, {
|
|
1451
|
+
path: PATH_1
|
|
1452
|
+
});
|
|
1453
|
+
rerender();
|
|
1454
|
+
(0, _globals.expect)(result.current[0]).toEqual(_objectSpread(_objectSpread({}, defaultFile), {}, {
|
|
1455
|
+
path: PATH_1
|
|
1456
|
+
}));
|
|
1457
|
+
});
|
|
1458
|
+
(0, _globals.test)('state controllable mode should return the initial entity if initial entity has changed even with entity state changed', function () {
|
|
1459
|
+
var file = defaultFile;
|
|
1460
|
+
var _renderHook28 = (0, _react.renderHook)(function () {
|
|
1461
|
+
return (0, _.useUseCase)(file, fileUseCase, _UseCaseModes.UseCaseModes.StateControllable);
|
|
1462
|
+
}),
|
|
1463
|
+
result = _renderHook28.result;
|
|
1464
|
+
var collection = result.current;
|
|
1465
|
+
var _collection2 = (0, _slicedToArray2["default"])(collection, 2),
|
|
1466
|
+
setPath = _collection2[1].setPath;
|
|
1467
|
+
(0, _react.act)(function () {
|
|
1468
|
+
file = _objectSpread(_objectSpread({}, defaultFile), {}, {
|
|
1469
|
+
path: PATH_2
|
|
1470
|
+
});
|
|
1471
|
+
setPath(PATH_1);
|
|
1472
|
+
});
|
|
1473
|
+
(0, _globals.expect)(result.current[0]).toEqual(_objectSpread(_objectSpread({}, defaultFile), {}, {
|
|
1474
|
+
path: PATH_2
|
|
1475
|
+
}));
|
|
1425
1476
|
});
|
|
1426
1477
|
(0, _globals.test)('stateless mode should not generate new reducers when `yeild entity`', function () {
|
|
1427
1478
|
var onUpdate = _globals.jest.fn();
|
|
1428
|
-
var
|
|
1479
|
+
var _renderHook29 = (0, _react.renderHook)(function () {
|
|
1429
1480
|
var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultFile;
|
|
1430
1481
|
(0, _ahooks.useUpdateEffect)(function () {
|
|
1431
1482
|
onUpdate();
|
|
1432
1483
|
});
|
|
1433
1484
|
return (0, _.useUseCase)(file, fileUseCase, _UseCaseModes.UseCaseModes.Stateless);
|
|
1434
1485
|
}),
|
|
1435
|
-
result =
|
|
1436
|
-
rerender =
|
|
1486
|
+
result = _renderHook29.result,
|
|
1487
|
+
rerender = _renderHook29.rerender;
|
|
1437
1488
|
var cores = result.current;
|
|
1438
1489
|
var _cores19 = (0, _slicedToArray2["default"])(cores, 2),
|
|
1439
1490
|
setPath = _cores19[1].setPath;
|
|
@@ -1449,13 +1500,13 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1449
1500
|
});
|
|
1450
1501
|
(0, _globals.test)('stateless mode should not trigger update when after `yield entity`', function () {
|
|
1451
1502
|
var onUpdate = _globals.jest.fn();
|
|
1452
|
-
var
|
|
1503
|
+
var _renderHook30 = (0, _react.renderHook)(function () {
|
|
1453
1504
|
(0, _ahooks.useUpdateEffect)(function () {
|
|
1454
1505
|
onUpdate();
|
|
1455
1506
|
});
|
|
1456
1507
|
return (0, _.useUseCase)(defaultFile, fileUseCase, _UseCaseModes.UseCaseModes.Stateless);
|
|
1457
1508
|
}),
|
|
1458
|
-
result =
|
|
1509
|
+
result = _renderHook30.result;
|
|
1459
1510
|
var cores = result.current;
|
|
1460
1511
|
var _cores20 = (0, _slicedToArray2["default"])(cores, 2),
|
|
1461
1512
|
reducers = _cores20[1];
|
|
@@ -1737,7 +1788,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1737
1788
|
(0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
|
|
1738
1789
|
(0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
|
|
1739
1790
|
});
|
|
1740
|
-
_globals.test.each(
|
|
1791
|
+
_globals.test.each(allModes)('[mode=%s]: `options.onChange` should always trigger the latest one in child components', function (mode) {
|
|
1741
1792
|
var onFirstChange = _globals.jest.fn();
|
|
1742
1793
|
var onSecondChange = _globals.jest.fn();
|
|
1743
1794
|
var onChange = onFirstChange;
|
|
@@ -1773,7 +1824,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1773
1824
|
setFile = _useState8[1];
|
|
1774
1825
|
var _useUseCase42 = (0, _.useUseCase)(file, fileUseCase, mode, {
|
|
1775
1826
|
onChange: function onChange(newFile) {
|
|
1776
|
-
if (
|
|
1827
|
+
if (mode !== _UseCaseModes.UseCaseModes.Stateless) {
|
|
1777
1828
|
return;
|
|
1778
1829
|
}
|
|
1779
1830
|
// `stateless` 不会保存状态,所以需要手动保存
|
|
@@ -1898,7 +1949,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1898
1949
|
(0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
|
|
1899
1950
|
(0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
|
|
1900
1951
|
});
|
|
1901
|
-
_globals.test.each(
|
|
1952
|
+
_globals.test.each(allModes)('[mode=%s]: `options.watch` should trigger the latest one in child components', function (mode) {
|
|
1902
1953
|
var onFirstExtChange = _globals.jest.fn();
|
|
1903
1954
|
var onSecondExtChange = _globals.jest.fn();
|
|
1904
1955
|
var onExtChange = onFirstExtChange;
|
|
@@ -1936,7 +1987,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1936
1987
|
setFile = _useState10[1];
|
|
1937
1988
|
var _useUseCase52 = (0, _.useUseCase)(file, fileUseCase, mode, {
|
|
1938
1989
|
onChange: function onChange(newFile) {
|
|
1939
|
-
if (
|
|
1990
|
+
if (mode !== _UseCaseModes.UseCaseModes.Stateless) {
|
|
1940
1991
|
return;
|
|
1941
1992
|
}
|
|
1942
1993
|
// `stateless` 不会保存状态,所以需要手动保存
|
|
@@ -1971,38 +2022,38 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1971
2022
|
});
|
|
1972
2023
|
(0, _globals.describe)('`useUseCase` should work the same as `useReducers`', function () {
|
|
1973
2024
|
(0, _globals.test)('`entity` should equal `defaultFile`', function () {
|
|
1974
|
-
var
|
|
2025
|
+
var _renderHook31 = (0, _react.renderHook)(function () {
|
|
1975
2026
|
return (0, _.useUseCase)(mathUseCase);
|
|
1976
2027
|
}),
|
|
1977
|
-
result =
|
|
2028
|
+
result = _renderHook31.result;
|
|
1978
2029
|
var reducers = result.current;
|
|
1979
2030
|
(0, _globals.expect)(Array.isArray(reducers)).toBe(false);
|
|
1980
2031
|
});
|
|
1981
2032
|
(0, _globals.test)('returned reducer should work', function () {
|
|
1982
|
-
var
|
|
2033
|
+
var _renderHook32 = (0, _react.renderHook)(function () {
|
|
1983
2034
|
return (0, _.useUseCase)(mathUseCase);
|
|
1984
2035
|
}),
|
|
1985
|
-
result =
|
|
2036
|
+
result = _renderHook32.result;
|
|
1986
2037
|
var reducers = result.current;
|
|
1987
2038
|
var add = reducers.add;
|
|
1988
2039
|
(0, _globals.expect)(add(1, 2)).toBe(3);
|
|
1989
2040
|
});
|
|
1990
2041
|
(0, _globals.test)('`usecase` should be called only once if deps has not provided', function () {
|
|
1991
2042
|
var mockUseCase = _globals.jest.fn(mathUseCase);
|
|
1992
|
-
var
|
|
2043
|
+
var _renderHook33 = (0, _react.renderHook)(function () {
|
|
1993
2044
|
return (0, _.useUseCase)(mockUseCase);
|
|
1994
2045
|
}),
|
|
1995
|
-
rerender =
|
|
2046
|
+
rerender = _renderHook33.rerender;
|
|
1996
2047
|
(0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
|
|
1997
2048
|
rerender();
|
|
1998
2049
|
(0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
|
|
1999
2050
|
});
|
|
2000
2051
|
(0, _globals.test)('`usecase` should be called only once if deps has not changed', function () {
|
|
2001
2052
|
var mockUseCase = _globals.jest.fn(mathUseCase);
|
|
2002
|
-
var
|
|
2053
|
+
var _renderHook34 = (0, _react.renderHook)(function () {
|
|
2003
2054
|
return (0, _.useUseCase)(mockUseCase, {}, [1, 'x']);
|
|
2004
2055
|
}),
|
|
2005
|
-
rerender =
|
|
2056
|
+
rerender = _renderHook34.rerender;
|
|
2006
2057
|
(0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
|
|
2007
2058
|
rerender();
|
|
2008
2059
|
(0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
|
|
@@ -2010,10 +2061,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2010
2061
|
(0, _globals.test)('`usecase` should be called if deps has changed', function () {
|
|
2011
2062
|
var i = 0;
|
|
2012
2063
|
var mockUseCase = _globals.jest.fn(mathUseCase);
|
|
2013
|
-
var
|
|
2064
|
+
var _renderHook35 = (0, _react.renderHook)(function () {
|
|
2014
2065
|
return (0, _.useUseCase)(mockUseCase, {}, [i++, 'x']);
|
|
2015
2066
|
}),
|
|
2016
|
-
rerender =
|
|
2067
|
+
rerender = _renderHook35.rerender;
|
|
2017
2068
|
(0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
|
|
2018
2069
|
rerender();
|
|
2019
2070
|
(0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(2);
|
|
@@ -2097,12 +2148,12 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2097
2148
|
(0, _globals.expect)(subtractionReducer).toHaveReturnedWith(4);
|
|
2098
2149
|
});
|
|
2099
2150
|
(0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
|
|
2100
|
-
var
|
|
2151
|
+
var _renderHook36 = (0, _react.renderHook)(function () {
|
|
2101
2152
|
return (0, _.useUseCase)(mathUseCase, {
|
|
2102
2153
|
extraValue: 5
|
|
2103
2154
|
});
|
|
2104
2155
|
}),
|
|
2105
|
-
result =
|
|
2156
|
+
result = _renderHook36.result;
|
|
2106
2157
|
var reducers = result.current;
|
|
2107
2158
|
var add = reducers.add;
|
|
2108
2159
|
(0, _globals.expect)(add(1, 2)).toBe(8);
|
|
@@ -2110,7 +2161,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2110
2161
|
(0, _globals.test)('when `options` has changed, it should not trigger update', function () {
|
|
2111
2162
|
var onUpdate = _globals.jest.fn();
|
|
2112
2163
|
var onDeepUpdate = _globals.jest.fn();
|
|
2113
|
-
var
|
|
2164
|
+
var _renderHook37 = (0, _react.renderHook)(function () {
|
|
2114
2165
|
var _useState11 = (0, _react2.useState)(0),
|
|
2115
2166
|
_useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
|
|
2116
2167
|
extraValue = _useState12[0],
|
|
@@ -2126,7 +2177,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2126
2177
|
}, [reducers]);
|
|
2127
2178
|
return setExtraValue;
|
|
2128
2179
|
}),
|
|
2129
|
-
result =
|
|
2180
|
+
result = _renderHook37.result;
|
|
2130
2181
|
(0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
|
|
2131
2182
|
(0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
|
|
2132
2183
|
(0, _react.act)(function () {
|
|
@@ -2138,7 +2189,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2138
2189
|
(0, _globals.test)('when `deps` change, it should update reducers', function () {
|
|
2139
2190
|
var onUpdate = _globals.jest.fn();
|
|
2140
2191
|
var onDeepUpdate = _globals.jest.fn();
|
|
2141
|
-
var
|
|
2192
|
+
var _renderHook38 = (0, _react.renderHook)(function () {
|
|
2142
2193
|
var _useState13 = (0, _react2.useState)(0),
|
|
2143
2194
|
_useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
|
|
2144
2195
|
extraValue = _useState14[0],
|
|
@@ -2154,7 +2205,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2154
2205
|
}, [reducers]);
|
|
2155
2206
|
return setExtraValue;
|
|
2156
2207
|
}),
|
|
2157
|
-
result =
|
|
2208
|
+
result = _renderHook38.result;
|
|
2158
2209
|
(0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
|
|
2159
2210
|
(0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
|
|
2160
2211
|
(0, _react.act)(function () {
|
|
@@ -2166,7 +2217,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2166
2217
|
(0, _globals.test)('empty `deps` should not update reducers', function () {
|
|
2167
2218
|
var onUpdate = _globals.jest.fn();
|
|
2168
2219
|
var onDeepUpdate = _globals.jest.fn();
|
|
2169
|
-
var
|
|
2220
|
+
var _renderHook39 = (0, _react.renderHook)(function () {
|
|
2170
2221
|
var _useState15 = (0, _react2.useState)(0),
|
|
2171
2222
|
_useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
|
|
2172
2223
|
extraValue = _useState16[0],
|
|
@@ -2182,7 +2233,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2182
2233
|
}, [reducers]);
|
|
2183
2234
|
return setExtraValue;
|
|
2184
2235
|
}),
|
|
2185
|
-
result =
|
|
2236
|
+
result = _renderHook39.result;
|
|
2186
2237
|
(0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
|
|
2187
2238
|
(0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
|
|
2188
2239
|
(0, _react.act)(function () {
|
|
@@ -24,8 +24,13 @@ var useUseCaseStatuses = exports.useUseCaseStatuses = function useUseCaseStatuse
|
|
|
24
24
|
if (store) {
|
|
25
25
|
statuses |= _UseCaseStatuses.UseCaseStatuses.EntityEnabled;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
switch (mode) {
|
|
28
|
+
case _UseCaseModes.UseCaseModes.StateControllable:
|
|
29
|
+
statuses |= _UseCaseStatuses.UseCaseStatuses.StateControllableEnabled;
|
|
30
|
+
break;
|
|
31
|
+
case _UseCaseModes.UseCaseModes.Stateless:
|
|
32
|
+
statuses |= _UseCaseStatuses.UseCaseStatuses.StatelessEnabled;
|
|
33
|
+
break;
|
|
29
34
|
}
|
|
30
35
|
return statuses;
|
|
31
36
|
}, [argumentTypes, contextValue, mode]);
|
package/lib/index.js
CHANGED
|
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "UseCaseFragment", {
|
|
|
9
9
|
return _UseCaseFragment.UseCaseFragment;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "useStateControllableUseCase", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _useStateControllableUseCase.useStateControllableUseCase;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "useStatelessUseCase", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function get() {
|
|
@@ -23,4 +29,5 @@ Object.defineProperty(exports, "useUseCase", {
|
|
|
23
29
|
});
|
|
24
30
|
var _UseCaseFragment = require("./components/UseCaseFragment");
|
|
25
31
|
var _useUseCase = require("./hooks/useUseCase");
|
|
32
|
+
var _useStateControllableUseCase = require("./hooks/useStateControllableUseCase");
|
|
26
33
|
var _useStatelessUseCase = require("./hooks/useStatelessUseCase");
|
package/package.json
CHANGED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
2
|
-
export const getRenderingEntity = (statuses, entityState, rootEntity, contextEntity) => {
|
|
3
|
-
if ((statuses & UseCaseStatuses.EntityRootEnabled) !== UseCaseStatuses.EntityRootEnabled) {
|
|
4
|
-
return contextEntity;
|
|
5
|
-
}
|
|
6
|
-
if ((statuses & UseCaseStatuses.StatelessEnabled) !== UseCaseStatuses.StatelessEnabled) {
|
|
7
|
-
return entityState;
|
|
8
|
-
}
|
|
9
|
-
if (typeof rootEntity === 'function') {
|
|
10
|
-
return rootEntity();
|
|
11
|
-
}
|
|
12
|
-
return rootEntity;
|
|
13
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getRenderingEntity = void 0;
|
|
7
|
-
var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
8
|
-
var getRenderingEntity = exports.getRenderingEntity = function getRenderingEntity(statuses, entityState, rootEntity, contextEntity) {
|
|
9
|
-
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) {
|
|
10
|
-
return contextEntity;
|
|
11
|
-
}
|
|
12
|
-
if ((statuses & _UseCaseStatuses.UseCaseStatuses.StatelessEnabled) !== _UseCaseStatuses.UseCaseStatuses.StatelessEnabled) {
|
|
13
|
-
return entityState;
|
|
14
|
-
}
|
|
15
|
-
if (typeof rootEntity === 'function') {
|
|
16
|
-
return rootEntity();
|
|
17
|
-
}
|
|
18
|
-
return rootEntity;
|
|
19
|
-
};
|