@mic-rexjs/usecases-react 2.3.5 → 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.
Files changed (32) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/enums/UseCaseModes/index.d.ts +3 -2
  3. package/es/enums/UseCaseModes/index.js +3 -2
  4. package/es/enums/UseCaseStatuses/index.d.ts +2 -1
  5. package/es/enums/UseCaseStatuses/index.js +3 -1
  6. package/es/hooks/useEntity/index.js +6 -6
  7. package/es/hooks/useRuntimeEntity/index.d.ts +3 -0
  8. package/es/hooks/useRuntimeEntity/index.js +27 -0
  9. package/es/hooks/useStateControllableUseCase/index.d.ts +2 -0
  10. package/es/hooks/useStateControllableUseCase/index.js +5 -0
  11. package/es/hooks/useStateControllableUseCase/index.test.d.ts +1 -0
  12. package/es/hooks/useStateControllableUseCase/index.test.js +37 -0
  13. package/es/hooks/useStateControllableUseCase/types.d.ts +3 -0
  14. package/es/hooks/useStateControllableUseCase/types.js +1 -0
  15. package/es/hooks/useUseCase/index.test.js +42 -8
  16. package/es/hooks/useUseCaseStatuses/index.js +7 -2
  17. package/es/index.d.ts +2 -1
  18. package/es/index.js +1 -0
  19. package/lib/enums/UseCaseModes/index.js +3 -2
  20. package/lib/enums/UseCaseStatuses/index.js +3 -1
  21. package/lib/hooks/useEntity/index.js +6 -6
  22. package/lib/hooks/useRuntimeEntity/index.js +33 -0
  23. package/lib/hooks/useStateControllableUseCase/index.js +11 -0
  24. package/lib/hooks/useStateControllableUseCase/index.test.js +37 -0
  25. package/lib/hooks/useStateControllableUseCase/types.js +5 -0
  26. package/lib/hooks/useUseCase/index.test.js +82 -31
  27. package/lib/hooks/useUseCaseStatuses/index.js +7 -2
  28. package/lib/index.js +7 -0
  29. package/package.json +1 -1
  30. package/es/methods/getRenderingEntity/index.d.ts +0 -3
  31. package/es/methods/getRenderingEntity/index.js +0 -13
  32. 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,4 +1,5 @@
1
1
  export declare enum UseCaseModes {
2
- Normal = 2,
3
- Stateless = 4
2
+ Normal = 0,
3
+ StateControllable = 1,
4
+ Stateless = 2
4
5
  }
@@ -1,5 +1,6 @@
1
1
  export var UseCaseModes;
2
2
  (function (UseCaseModes) {
3
- UseCaseModes[UseCaseModes["Normal"] = 2] = "Normal";
4
- UseCaseModes[UseCaseModes["Stateless"] = 4] = "Stateless";
3
+ UseCaseModes[UseCaseModes["Normal"] = 0] = "Normal";
4
+ UseCaseModes[UseCaseModes["StateControllable"] = 1] = "StateControllable";
5
+ UseCaseModes[UseCaseModes["Stateless"] = 2] = "Stateless";
5
6
  })(UseCaseModes || (UseCaseModes = {}));
@@ -5,5 +5,6 @@ export declare enum UseCaseStatuses {
5
5
  EntityEnabled = 8,
6
6
  ContextRootEnabled = 22,
7
7
  EntityRootEnabled = 62,
8
- StatelessEnabled = 72
8
+ StateControllableEnabled = 72,
9
+ StatelessEnabled = 136
9
10
  }
@@ -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"] = 72] = "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 renderingEntity = getRenderingEntity(statuses, entityState, rootEntity, contextEntity);
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(renderingEntity, {
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 = renderingEntity;
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 [renderingEntity, store];
51
- }, [renderingEntity, store]);
50
+ return [runtimeEntity, store];
51
+ }, [runtimeEntity, store]);
52
52
  };
@@ -0,0 +1,3 @@
1
+ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
2
+ import { EntityGetter } from '../../hooks/useUseCase/types';
3
+ export declare const useRuntimeEntity: <T>(statuses: UseCaseStatuses, entityState: T, rootEntity: T | EntityGetter<T>, contextEntity: T) => T;
@@ -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,2 @@
1
+ import { StateControllableUseCaseHook } from './types';
2
+ export declare const useStateControllableUseCase: StateControllableUseCaseHook;
@@ -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,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,3 @@
1
+ import { RootCoreCollectionHook } from '../useUseCase/types';
2
+ export interface StateControllableUseCaseHook extends RootCoreCollectionHook {
3
+ }
@@ -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([UseCaseModes.Normal, UseCaseModes.Stateless])('[mode=%s]: check context type', (mode) => {
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: cores } = result;
1075
- expect(Array.isArray(cores)).toBe(true);
1076
- expect(cores).toHaveLength(3);
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([UseCaseModes.Normal, UseCaseModes.Stateless])('[mode=%s]: `options.onChange` should always trigger the latest one in child components', (mode) => {
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 ((mode & UseCaseModes.Stateless) !== UseCaseModes.Stateless) {
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([UseCaseModes.Normal, UseCaseModes.Stateless])('[mode=%s]: `options.watch` should trigger the latest one in child components', (mode) => {
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 ((mode & UseCaseModes.Stateless) !== UseCaseModes.Stateless) {
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
- if ((mode & UseCaseModes.Stateless) === UseCaseModes.Stateless) {
22
- statuses |= UseCaseStatuses.StatelessEnabled;
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,7 +1,8 @@
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
- export type { RootCoreCollection, ContextualCoreCollection, CoreCollection } from './hooks/useUseCase/types';
5
+ export type { EntityWatchEvent, RootCoreCollection, ContextualCoreCollection, CoreCollection, } from './hooks/useUseCase/types';
5
6
  export type { UseCaseHookOptions } from './hooks/useUseCase/types';
6
7
  export type { UseCaseProvider } from './hooks/useProvider/types';
7
8
  export type { UseCaseFragmentProps } from './components/UseCaseFragment/types';
package/es/index.js CHANGED
@@ -1,3 +1,4 @@
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';
@@ -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"] = 2] = "Normal";
10
- UseCaseModes[UseCaseModes["Stateless"] = 4] = "Stateless";
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"] = 72] = "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 renderingEntity = (0, _getRenderingEntity.getRenderingEntity)(statuses, entityState, rootEntity, contextEntity);
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(renderingEntity, {
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 = renderingEntity;
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 [renderingEntity, store];
64
- }, [renderingEntity, store]);
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
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -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([_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Stateless])('[mode=%s]: check context type', function (mode) {
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 cores = result.current;
1423
- (0, _globals.expect)(Array.isArray(cores)).toBe(true);
1424
- (0, _globals.expect)(cores).toHaveLength(3);
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 _renderHook26 = (0, _react.renderHook)(function () {
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 = _renderHook26.result,
1436
- rerender = _renderHook26.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 _renderHook27 = (0, _react.renderHook)(function () {
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 = _renderHook27.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([_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Stateless])('[mode=%s]: `options.onChange` should always trigger the latest one in child components', function (mode) {
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 ((mode & _UseCaseModes.UseCaseModes.Stateless) !== _UseCaseModes.UseCaseModes.Stateless) {
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([_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Stateless])('[mode=%s]: `options.watch` should trigger the latest one in child components', function (mode) {
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 ((mode & _UseCaseModes.UseCaseModes.Stateless) !== _UseCaseModes.UseCaseModes.Stateless) {
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 _renderHook28 = (0, _react.renderHook)(function () {
2025
+ var _renderHook31 = (0, _react.renderHook)(function () {
1975
2026
  return (0, _.useUseCase)(mathUseCase);
1976
2027
  }),
1977
- result = _renderHook28.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 _renderHook29 = (0, _react.renderHook)(function () {
2033
+ var _renderHook32 = (0, _react.renderHook)(function () {
1983
2034
  return (0, _.useUseCase)(mathUseCase);
1984
2035
  }),
1985
- result = _renderHook29.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 _renderHook30 = (0, _react.renderHook)(function () {
2043
+ var _renderHook33 = (0, _react.renderHook)(function () {
1993
2044
  return (0, _.useUseCase)(mockUseCase);
1994
2045
  }),
1995
- rerender = _renderHook30.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 _renderHook31 = (0, _react.renderHook)(function () {
2053
+ var _renderHook34 = (0, _react.renderHook)(function () {
2003
2054
  return (0, _.useUseCase)(mockUseCase, {}, [1, 'x']);
2004
2055
  }),
2005
- rerender = _renderHook31.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 _renderHook32 = (0, _react.renderHook)(function () {
2064
+ var _renderHook35 = (0, _react.renderHook)(function () {
2014
2065
  return (0, _.useUseCase)(mockUseCase, {}, [i++, 'x']);
2015
2066
  }),
2016
- rerender = _renderHook32.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 _renderHook33 = (0, _react.renderHook)(function () {
2151
+ var _renderHook36 = (0, _react.renderHook)(function () {
2101
2152
  return (0, _.useUseCase)(mathUseCase, {
2102
2153
  extraValue: 5
2103
2154
  });
2104
2155
  }),
2105
- result = _renderHook33.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 _renderHook34 = (0, _react.renderHook)(function () {
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 = _renderHook34.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 _renderHook35 = (0, _react.renderHook)(function () {
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 = _renderHook35.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 _renderHook36 = (0, _react.renderHook)(function () {
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 = _renderHook36.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
- if ((mode & _UseCaseModes.UseCaseModes.Stateless) === _UseCaseModes.UseCaseModes.Stateless) {
28
- statuses |= _UseCaseStatuses.UseCaseStatuses.StatelessEnabled;
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@mic-rexjs/usecases-react",
3
- "version": "2.3.5",
3
+ "version": "2.4.0",
4
4
  "description": "React-based solution for use usecases of Clean Architecture",
5
5
  "private": false,
6
6
  "keywords": [
@@ -1,3 +0,0 @@
1
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
2
- import { EntityGetter } from '../../hooks/useUseCase/types';
3
- export declare const getRenderingEntity: <T>(statuses: UseCaseStatuses, entityState: T, rootEntity: T | EntityGetter<T>, contextEntity: T) => T;
@@ -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
- };