@mic-rexjs/usecases-react 2.4.0 → 2.5.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 (49) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/enums/UseCaseArgumentTypes/index.d.ts +1 -2
  3. package/es/enums/UseCaseArgumentTypes/index.js +0 -1
  4. package/es/enums/UseCaseStatuses/index.d.ts +1 -3
  5. package/es/enums/UseCaseStatuses/index.js +0 -4
  6. package/es/hooks/useArgumentTypes/index.js +1 -4
  7. package/es/hooks/useEntity/index.js +0 -4
  8. package/es/hooks/useRuntimeEntity/index.js +0 -9
  9. package/es/hooks/useUseCase/index.js +2 -2
  10. package/es/hooks/useUseCase/index.test.js +50 -129
  11. package/es/hooks/useUseCase/types.d.ts +2 -6
  12. package/es/hooks/useUseCaseStatuses/index.d.ts +1 -2
  13. package/es/hooks/useUseCaseStatuses/index.js +2 -11
  14. package/es/index.d.ts +0 -2
  15. package/es/index.js +0 -2
  16. package/es/methods/fillArguments/index.js +2 -20
  17. package/es/methods/fillArguments/types.d.ts +0 -2
  18. package/lib/enums/UseCaseArgumentTypes/index.js +0 -1
  19. package/lib/enums/UseCaseStatuses/index.js +0 -4
  20. package/lib/hooks/useArgumentTypes/index.js +2 -6
  21. package/lib/hooks/useEntity/index.js +0 -4
  22. package/lib/hooks/useRuntimeEntity/index.js +0 -9
  23. package/lib/hooks/useUseCase/index.js +4 -5
  24. package/lib/hooks/useUseCase/index.test.js +142 -248
  25. package/lib/hooks/useUseCaseStatuses/index.js +2 -11
  26. package/lib/index.js +1 -15
  27. package/lib/methods/fillArguments/index.js +4 -10
  28. package/package.json +2 -2
  29. package/es/enums/UseCaseModes/index.d.ts +0 -5
  30. package/es/enums/UseCaseModes/index.js +0 -6
  31. package/es/hooks/useStateControllableUseCase/index.d.ts +0 -2
  32. package/es/hooks/useStateControllableUseCase/index.js +0 -5
  33. package/es/hooks/useStateControllableUseCase/index.test.d.ts +0 -1
  34. package/es/hooks/useStateControllableUseCase/index.test.js +0 -37
  35. package/es/hooks/useStateControllableUseCase/types.d.ts +0 -3
  36. package/es/hooks/useStateControllableUseCase/types.js +0 -1
  37. package/es/hooks/useStatelessUseCase/index.d.ts +0 -2
  38. package/es/hooks/useStatelessUseCase/index.js +0 -5
  39. package/es/hooks/useStatelessUseCase/index.test.d.ts +0 -1
  40. package/es/hooks/useStatelessUseCase/index.test.js +0 -37
  41. package/es/hooks/useStatelessUseCase/types.d.ts +0 -3
  42. package/es/hooks/useStatelessUseCase/types.js +0 -1
  43. package/lib/enums/UseCaseModes/index.js +0 -12
  44. package/lib/hooks/useStateControllableUseCase/index.js +0 -11
  45. package/lib/hooks/useStateControllableUseCase/index.test.js +0 -37
  46. package/lib/hooks/useStateControllableUseCase/types.js +0 -5
  47. package/lib/hooks/useStatelessUseCase/index.js +0 -11
  48. package/lib/hooks/useStatelessUseCase/index.test.js +0 -37
  49. package/lib/hooks/useStatelessUseCase/types.js +0 -5
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"),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})})();
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,c={},l=null,f=null;for(r in void 0!==n&&(l=""+n),void 0!==e.key&&(l=""+e.key),void 0!==e.ref&&(f=e.ref),e)u.call(e,r)&&!i.hasOwnProperty(r)&&(c[r]=e[r]);if(t&&t.defaultProps)for(r in e=t.defaultProps)void 0===c[r]&&(c[r]=e[r]);return{$$typeof:o,type:t,key:l,ref:f,props:c,_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:()=>x,useUseCase:()=>_});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 c(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=[],c=!0,l=!1;try{if(u=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=u.call(n)).done)&&(i.push(r.value),i.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)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 l=ahooks;var f,s=function(t){return c((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 v(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"}(f||(f={}));const d=usecases;var b=["watch","onChange","options"];function p(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 E(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?p(Object(n),!0).forEach((function(e){var r,o,u;r=t,o=e,u=n[e],(o=v(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)):p(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var h,m=function(t){return c((0,e.useState)(t),1)[0]},g=new Map;!function(t){t[t.None=0]="None",t[t.Entity=2]="Entity"}(h||(h={}));var O=(0,e.createContext)(null),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 c=n,l=c.parameters,f=c.returnValue;if(i(l,o))return f}var s=t.apply(void 0,o);return e&&(n={parameters:o,returnValue:s}),s}},S=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=(0,l.useLatest)(n),u=(0,l.useCreation)((function(){return j(o.current,{onCompare:function(){return!0}})}),[r,o]);return(0,l.useCreation)((function(){return(e&f.RootEnabled)!==f.RootEnabled&&t?t:u()}),[e,t,u])},C=function(t,e){return"object"===y(t)&&null!==t&&Object.hasOwn(t,e)},R=function t(e,n,r,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],a=void 0,l=c(r.match(/^([^.]+)\.(.+)$/)||[],3),f=l[1],s=void 0===f?r:f,y=l[2],v=void 0===y?"":y,d=C(e,s),b=C(n,s),p=[].concat(i(u),[s]);if(d||b){var E=d?e[s]:a,h=b?n[s]:a;if(v)return void t(E,h,v,o,p);if(E===h)return;o(E,h,p)}else if(!/^\d+^/.test(s))for(var m=Array.isArray(e)?e:[],g=Array.isArray(n)?n:[],O=m.length,w=g.length,j=Math.max(O,w),S=0;S<j;S++)t(m[S],g[S],r,o,[].concat(i(u),["".concat(S)]))},P=function(t,e,n){for(var r=function(){var t=c(u[o],2),r=t[0],a=t[1];R(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()},_=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 v=function(t){return m((function(){var e=h.None;return"function"===y(c(t,2)[1])&&(e|=h.Entity),e}))}(u),p=function(t,e){var n=c(t,4),r=n[0],o=n[1],u=n[2],a=n[3];return(e&h.Entity)===h.Entity?[r,o,u||{},a||[]]:[null,r,o||{},u||[]]}(u,v),C=c(p,4),R=C[0],_=C[1],x=C[2],A=C[3],N=s(_),I=N,M=N,k=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:h.None,r=g,o=m((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&h.Entity)!==h.Entity)return O;var i=(0,e.createContext)(null);return r.set(t,{value:i,times:1}),i}));return(0,l.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}(N,v),T=(0,e.useContext)(k),L=T,D=function(t,e){return(0,l.useCreation)((function(){var n=f.None,r=(e||{}).store;return(t&h.Entity)===h.Entity&&(n|=f.EntityRootEnabled),n|=e?f.ContextEnabled:f.RootEnabled,r&&(n|=f.EntityEnabled),n}),[t,e])}(v,T),U=(0,l.useLatest)(x),V=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}(A),$=(T||{}).reducers,F=void 0===$?null:$,B=(L||{}).store,G=c(function(t,n,r,o,u){var a=c((0,e.useState)(n),2),i=a[0],s=a[1],y=function(t,n,r,o){var u=(0,e.useRef)(r);if((t&f.EntityRootEnabled)!==f.EntityRootEnabled)return o;var a="function"==typeof r,i=u.current;switch(!0){case a:case i===r:return n}return u.current=r,r}(t,i,n,r?r.value:null),v=(t&f.EntityEnabled)===f.EntityEnabled,b=(t&f.EntityRootEnabled)===f.EntityRootEnabled,p=(0,l.useLatest)(o),E=S(r,t,(function(){return b?new d.EntityStore(y,{onChange:function(t){s(t)}}):new d.EntityStore(null)}));return b&&(E.value=y),(0,e.useEffect)((function(){if(v){var t=function(t,e){var n=p.current,r=n.onChange,o=n.watch;o&&P(o,t,e),null==r||r(t,e)};return E.watch(t),function(){E.unwatch(t)}}}),[v,E,u,p]),(0,l.useCreation)((function(){return[y,E]}),[y,E])}(D,R,void 0===B?null:B,x,V),2),W=G[0],Y=G[1],q=S(F,D,(function(){var t,e,n,r=(t=x,e=function(t,e){var n,r;return null===(n=(r=U.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(D&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={},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,d.createEntityReducers)(e,t,E(E(E({},o),r),{},{onGenerate:function(t,e){return e}}))}(M,Y,r)}),V),z=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]),c=(0,l.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:c.current},u.reduceRight((function(t,e){return o().createElement(e,{},t)}),e))}))}(D,k,Y,q);return(0,l.useCreation)((function(){if((D&f.EntityEnabled)!==f.EntityEnabled)return q;var t=(D&f.RootEnabled)===f.RootEnabled,e=function(t,e){var n={};return Object.entries(t).forEach((function(t){var r=c(t,2),o=r[0],u=r[1];n[o]=j(u,e)})),n}(q,{onShouldCache:function(){return n.current}});return t?[W,e,z]:[W,e]}),[D,W,q,z,n])},x=function(n){var r=n.usecase,o=n.watch,u=n.onChange;return _(r,{watch:o,onChange:u}),(0,t.jsx)(e.Fragment,{})}})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var u in r)o[u]=r[u];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
@@ -1,5 +1,4 @@
1
1
  export declare enum UseCaseArgumentTypes {
2
2
  None = 0,
3
- Entity = 2,
4
- Mode = 4
3
+ Entity = 2
5
4
  }
@@ -2,5 +2,4 @@ export var UseCaseArgumentTypes;
2
2
  (function (UseCaseArgumentTypes) {
3
3
  UseCaseArgumentTypes[UseCaseArgumentTypes["None"] = 0] = "None";
4
4
  UseCaseArgumentTypes[UseCaseArgumentTypes["Entity"] = 2] = "Entity";
5
- UseCaseArgumentTypes[UseCaseArgumentTypes["Mode"] = 4] = "Mode";
6
5
  })(UseCaseArgumentTypes || (UseCaseArgumentTypes = {}));
@@ -4,7 +4,5 @@ export declare enum UseCaseStatuses {
4
4
  ContextEnabled = 4,
5
5
  EntityEnabled = 8,
6
6
  ContextRootEnabled = 22,
7
- EntityRootEnabled = 62,
8
- StateControllableEnabled = 72,
9
- StatelessEnabled = 136
7
+ EntityRootEnabled = 62
10
8
  }
@@ -11,8 +11,4 @@ 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";
16
- // 是否不需要 `entity` 状态管理
17
- UseCaseStatuses[UseCaseStatuses["StatelessEnabled"] = 136] = "StatelessEnabled";
18
14
  })(UseCaseStatuses || (UseCaseStatuses = {}));
@@ -3,13 +3,10 @@ import { useConstant } from '../useConstant';
3
3
  export const useArgumentTypes = (args) => {
4
4
  return useConstant(() => {
5
5
  let types = UseCaseArgumentTypes.None;
6
- const [, arg2, arg3] = args;
6
+ const [, arg2] = args;
7
7
  const type2 = typeof arg2;
8
8
  if (type2 === 'function') {
9
9
  types |= UseCaseArgumentTypes.Entity;
10
- if (typeof arg3 === 'number') {
11
- types |= UseCaseArgumentTypes.Mode;
12
- }
13
10
  }
14
11
  return types;
15
12
  });
@@ -16,12 +16,8 @@ export const useEntity = (statuses, rootEntity, contextStore, options, depsKey)
16
16
  if (!entityRootEnabled) {
17
17
  return new EntityStore(null);
18
18
  }
19
- const stateless = (statuses & UseCaseStatuses.StatelessEnabled) === UseCaseStatuses.StatelessEnabled;
20
19
  return new EntityStore(runtimeEntity, {
21
20
  onChange(newEntity) {
22
- if (stateless) {
23
- return;
24
- }
25
21
  setEntityState(newEntity);
26
22
  },
27
23
  });
@@ -7,17 +7,8 @@ export const useRuntimeEntity = (statuses, entityState, rootEntity, contextEntit
7
7
  return contextEntity;
8
8
  }
9
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
10
  const { current: prevRootEntity } = prevRootEntityRef;
18
- const stateControllableDisabled = (statuses & UseCaseStatuses.StateControllableEnabled) !== UseCaseStatuses.StateControllableEnabled;
19
11
  switch (true) {
20
- case stateControllableDisabled:
21
12
  case isFunction:
22
13
  case prevRootEntity === rootEntity:
23
14
  return entityState;
@@ -18,14 +18,14 @@ export const useUseCase = ((...args) => {
18
18
  const isRenderingRef = useIsRenderingRef();
19
19
  const argumentTypes = useArgumentTypes(args);
20
20
  const fullArguments = fillArguments(args, argumentTypes);
21
- const [unsafeEntity, unsafeUsecase, mode, options, deps] = fullArguments;
21
+ const [unsafeEntity, unsafeUsecase, options, deps] = fullArguments;
22
22
  const unkownUsecase = useConstantFn(unsafeUsecase);
23
23
  const usecase = unkownUsecase;
24
24
  const entityUseCase = unkownUsecase;
25
25
  const context = useUseCaseContext(unkownUsecase, argumentTypes);
26
26
  const contextValue = useContext(context);
27
27
  const entityContextValue = contextValue;
28
- const statuses = useUseCaseStatuses(argumentTypes, mode, contextValue);
28
+ const statuses = useUseCaseStatuses(argumentTypes, contextValue);
29
29
  const optionsRef = useLatest(options);
30
30
  const depsKey = useCompareDeps(deps);
31
31
  const { reducers: contextReducers = null } = contextValue || {};
@@ -5,14 +5,12 @@ import { renderHook, act, render, fireEvent, screen } from '@testing-library/rea
5
5
  import { useUseCase } from '.';
6
6
  import { useDeepCompareEffect, useMemoizedFn, useMount, useUpdate, useUpdateEffect } from 'ahooks';
7
7
  import { Fragment, useEffect, useRef, useState } from 'react';
8
- import { UseCaseModes } from '../../enums/UseCaseModes';
9
8
  const EXT_1 = '.png';
10
9
  const EXT_2 = '.jpg';
11
10
  const PATH_1 = `hello${EXT_1}`;
12
11
  const PATH_2 = `hello${EXT_2}`;
13
12
  const PARENT_BUTTON_TEXT = 'parent button';
14
13
  const CHILD_BUTTON_TEXT = 'child button';
15
- const allModes = [UseCaseModes.Normal, UseCaseModes.StateControllable, UseCaseModes.Stateless];
16
14
  const defaultFile = {
17
15
  path: '',
18
16
  ext: '',
@@ -90,8 +88,8 @@ const Child = ({ textPrefix = '', onUpdate, onPathChange, onUndefinedEntity }) =
90
88
  useUpdateEffect(pathChange, [path, pathChange]);
91
89
  return (_jsxs("div", { children: [_jsxs("main", { children: ["child path: ", path, _jsx("br", {}), "child ext: ", ext] }), _jsx("footer", { children: _jsx("button", { onClick: onClick, children: textPrefix + CHILD_BUTTON_TEXT }) })] }));
92
90
  };
93
- const Parent = ({ children, mode = UseCaseModes.Normal, onUpdate, onSetPath }) => {
94
- const [{ path, ext }, { setPath }, Provider] = useUseCase(defaultFile, fileUseCase, mode);
91
+ const Parent = ({ children, onUpdate, onSetPath }) => {
92
+ const [{ path, ext }, { setPath }, Provider] = useUseCase(defaultFile, fileUseCase);
95
93
  const onClick = () => {
96
94
  setPath(onSetPath?.() || '');
97
95
  };
@@ -145,6 +143,39 @@ describe('useUseCase', () => {
145
143
  const [entity] = cores;
146
144
  expect(entity).toBe(defaultFile);
147
145
  });
146
+ test('Should return the entity state if initial entity has not changed', () => {
147
+ const { result } = renderHook(() => {
148
+ return useUseCase(defaultFile, fileUseCase);
149
+ });
150
+ const { current: collection } = result;
151
+ const [, { setPath }] = collection;
152
+ act(() => {
153
+ setPath(PATH_1);
154
+ });
155
+ expect(result.current[0]).toEqual({ ...defaultFile, path: PATH_1, ext: EXT_1 });
156
+ });
157
+ test('Should return the initial entity if initial entity has changed', () => {
158
+ let file = defaultFile;
159
+ const { result, rerender } = renderHook(() => {
160
+ return useUseCase(file, fileUseCase);
161
+ });
162
+ file = { ...defaultFile, path: PATH_1 };
163
+ rerender();
164
+ expect(result.current[0]).toEqual({ ...defaultFile, path: PATH_1 });
165
+ });
166
+ test('Should return the initial entity if initial entity has changed even with entity state changed', () => {
167
+ let file = defaultFile;
168
+ const { result } = renderHook(() => {
169
+ return useUseCase(file, fileUseCase);
170
+ });
171
+ const { current: collection } = result;
172
+ const [, { setPath }] = collection;
173
+ act(() => {
174
+ file = { ...defaultFile, path: PATH_2 };
175
+ setPath(PATH_1);
176
+ });
177
+ expect(result.current[0]).toEqual({ ...defaultFile, path: PATH_2 });
178
+ });
148
179
  test('`reducers` should be returned as an object', () => {
149
180
  const { result } = renderHook(() => {
150
181
  return useUseCase(defaultFile, fileUseCase);
@@ -630,10 +661,11 @@ describe('useUseCase', () => {
630
661
  });
631
662
  });
632
663
  test('`options.watch` should work with array field path of array', () => {
664
+ const initialData = {};
633
665
  const onExtChange = jest.fn();
634
666
  const onSizeChange = jest.fn();
635
667
  const { result } = renderHook(() => {
636
- return useUseCase({}, fieldPathUseCase, {
668
+ return useUseCase(initialData, fieldPathUseCase, {
637
669
  watch: {
638
670
  'list.ext': onExtChange,
639
671
  'list.size': onSizeChange,
@@ -884,9 +916,10 @@ describe('useUseCase', () => {
884
916
  });
885
917
  });
886
918
  test('`options.watch` should work with field path of nested array', () => {
919
+ const initialData = {};
887
920
  const onChange = jest.fn();
888
921
  const { result } = renderHook(() => {
889
- return useUseCase({}, fieldPathUseCase, {
922
+ return useUseCase(initialData, fieldPathUseCase, {
890
923
  watch: {
891
924
  'nestedList.size': onChange,
892
925
  },
@@ -973,10 +1006,11 @@ describe('useUseCase', () => {
973
1006
  });
974
1007
  });
975
1008
  test('`options.watch` should work with field path of object', () => {
1009
+ const initialData = {};
976
1010
  const onExtChange = jest.fn();
977
1011
  const onSizeChange = jest.fn();
978
1012
  const { result } = renderHook(() => {
979
- return useUseCase({}, fieldPathUseCase, {
1013
+ return useUseCase(initialData, fieldPathUseCase, {
980
1014
  watch: {
981
1015
  'obj.file.ext': onExtChange,
982
1016
  'obj.file.size': onSizeChange,
@@ -1036,13 +1070,13 @@ describe('useUseCase', () => {
1036
1070
  const onStringMount = jest.fn();
1037
1071
  const onBooleanMount = jest.fn();
1038
1072
  const numberUseCase = () => {
1039
- return objectUseCase();
1073
+ return entityUseCase();
1040
1074
  };
1041
1075
  const stringUseCase = () => {
1042
- return objectUseCase();
1076
+ return entityUseCase();
1043
1077
  };
1044
1078
  const booleanUseCase = () => {
1045
- return objectUseCase();
1079
+ return entityUseCase();
1046
1080
  };
1047
1081
  const TestChildComponent = () => {
1048
1082
  const [numberValue] = useUseCase(numberUseCase);
@@ -1067,87 +1101,8 @@ describe('useUseCase', () => {
1067
1101
  expect(onBooleanMount).toHaveBeenCalledWith(true);
1068
1102
  });
1069
1103
  });
1070
- describe('`useUseCase` should work the same as `ModeCoreCollectionHook`', () => {
1071
- test.each(allModes)('[mode=%s]: check context type', (mode) => {
1072
- const { result } = renderHook(() => {
1073
- return useUseCase(defaultFile, fileUseCase, mode);
1074
- });
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 });
1111
- });
1112
- test('stateless mode should not generate new reducers when `yeild entity`', () => {
1113
- const onUpdate = jest.fn();
1114
- const { result, rerender } = renderHook((file = defaultFile) => {
1115
- useUpdateEffect(() => {
1116
- onUpdate();
1117
- });
1118
- return useUseCase(file, fileUseCase, UseCaseModes.Stateless);
1119
- });
1120
- const { current: cores } = result;
1121
- const [, { setPath }] = cores;
1122
- setPath(PATH_1);
1123
- expect(onUpdate).toHaveBeenCalledTimes(0);
1124
- expect(result.current[0].path).toBe('');
1125
- expect(result.current[1].setPath).toBe(setPath);
1126
- rerender({ ...defaultFile, path: PATH_1 });
1127
- expect(result.current[0].path).toBe(PATH_1);
1128
- expect(result.current[1].setPath).not.toBe(setPath);
1129
- });
1130
- test('stateless mode should not trigger update when after `yield entity`', () => {
1131
- const onUpdate = jest.fn();
1132
- const { result } = renderHook(() => {
1133
- useUpdateEffect(() => {
1134
- onUpdate();
1135
- });
1136
- return useUseCase(defaultFile, fileUseCase, UseCaseModes.Stateless);
1137
- });
1138
- const { current: cores } = result;
1139
- const [, reducers] = cores;
1140
- const { setPath } = reducers;
1141
- act(() => {
1142
- setPath(PATH_1);
1143
- });
1144
- expect(result.current).toBe(cores);
1145
- expect(result.current).toEqual(cores);
1146
- expect(onUpdate).toHaveBeenCalledTimes(0);
1147
- });
1148
- });
1149
1104
  describe('`useUseCase` should work the same as useContextualCoreCollection', () => {
1150
- test.each([void 0, UseCaseModes.Normal])('[mode=%s]: normal mode should trigger Parent & Child to update', (mode) => {
1105
+ test('Should trigger Parent & Child to update', () => {
1151
1106
  const onParentUpdate = jest.fn();
1152
1107
  const onChildUpdate = jest.fn();
1153
1108
  const onPathChange = jest.fn();
@@ -1155,7 +1110,7 @@ describe('useUseCase', () => {
1155
1110
  const onSetPath = jest.fn(() => {
1156
1111
  return PATH_1;
1157
1112
  });
1158
- render(_jsx("div", { children: _jsx(Parent, { mode: mode, onSetPath: onSetPath, onUpdate: onParentUpdate, children: _jsx(Child, { onUpdate: onChildUpdate, onPathChange: onPathChange, onUndefinedEntity: onUndefinedEntity }) }) }));
1113
+ render(_jsx("div", { children: _jsx(Parent, { onSetPath: onSetPath, onUpdate: onParentUpdate, children: _jsx(Child, { onUpdate: onChildUpdate, onPathChange: onPathChange, onUndefinedEntity: onUndefinedEntity }) }) }));
1159
1114
  fireEvent.click(screen.getByText(PARENT_BUTTON_TEXT));
1160
1115
  expect(onSetPath).toHaveBeenCalledTimes(1);
1161
1116
  expect(onParentUpdate).toHaveBeenCalledTimes(1);
@@ -1168,22 +1123,6 @@ describe('useUseCase', () => {
1168
1123
  expect(onPathChange).toHaveBeenCalledWith(PATH_2);
1169
1124
  expect(onUndefinedEntity).toHaveBeenCalledTimes(0);
1170
1125
  });
1171
- test.each([UseCaseModes.Stateless])('[mode=%s]: stateless mode should not trigger Parent & Child to update', () => {
1172
- const onParentUpdate = jest.fn();
1173
- const onChildUpdate = jest.fn();
1174
- const onSetPath = jest.fn(() => {
1175
- return PATH_1;
1176
- });
1177
- render(_jsx("div", { children: _jsx(Parent, { mode: UseCaseModes.Stateless, onSetPath: onSetPath, onUpdate: onParentUpdate, children: _jsx(Child, { onUpdate: onChildUpdate }) }) }));
1178
- fireEvent.click(screen.getByText(PARENT_BUTTON_TEXT));
1179
- expect(onSetPath).toHaveBeenCalledTimes(1);
1180
- expect(onParentUpdate).toHaveBeenCalledTimes(0);
1181
- expect(onChildUpdate).toHaveBeenCalledTimes(0);
1182
- fireEvent.click(screen.getByText(CHILD_BUTTON_TEXT));
1183
- expect(onSetPath).toHaveBeenCalledTimes(1);
1184
- expect(onParentUpdate).toHaveBeenCalledTimes(0);
1185
- expect(onChildUpdate).toHaveBeenCalledTimes(0);
1186
- });
1187
1126
  test('`usecase` should not be called at child component', () => {
1188
1127
  const mockUseCase = jest.fn(fileUseCase);
1189
1128
  const A = () => {
@@ -1343,7 +1282,7 @@ describe('useUseCase', () => {
1343
1282
  expect(onChangeB).toHaveReturnedWith(1);
1344
1283
  expect(onChangeC).toHaveReturnedWith(3);
1345
1284
  });
1346
- test.each(allModes)('[mode=%s]: `options.onChange` should always trigger the latest one in child components', (mode) => {
1285
+ test('`options.onChange` should always trigger the latest one in child components', () => {
1347
1286
  const onFirstChange = jest.fn();
1348
1287
  const onSecondChange = jest.fn();
1349
1288
  let onChange = onFirstChange;
@@ -1363,16 +1302,7 @@ describe('useUseCase', () => {
1363
1302
  return (_jsxs(Fragment, { children: [_jsx("button", { onClick: onFirstClick, children: firstButtonText }), _jsx("button", { onClick: onSecondClick, children: secondButtonText })] }));
1364
1303
  };
1365
1304
  const B = () => {
1366
- const [file, setFile] = useState(defaultFile);
1367
- const [, , Provider] = useUseCase(file, fileUseCase, mode, {
1368
- onChange(newFile) {
1369
- if (mode !== UseCaseModes.Stateless) {
1370
- return;
1371
- }
1372
- // `stateless` 不会保存状态,所以需要手动保存
1373
- setFile(newFile);
1374
- },
1375
- });
1305
+ const [, , Provider] = useUseCase(defaultFile, fileUseCase);
1376
1306
  return (_jsx(Provider, { children: _jsx(A, {}) }));
1377
1307
  };
1378
1308
  render(_jsx(B, {}));
@@ -1459,7 +1389,7 @@ describe('useUseCase', () => {
1459
1389
  expect(onChangeB).toHaveReturnedWith(1);
1460
1390
  expect(onChangeC).toHaveReturnedWith(3);
1461
1391
  });
1462
- test.each(allModes)('[mode=%s]: `options.watch` should trigger the latest one in child components', (mode) => {
1392
+ test('`options.watch` should trigger the latest one in child components', () => {
1463
1393
  const onFirstExtChange = jest.fn();
1464
1394
  const onSecondExtChange = jest.fn();
1465
1395
  let onExtChange = onFirstExtChange;
@@ -1481,16 +1411,7 @@ describe('useUseCase', () => {
1481
1411
  return (_jsxs(Fragment, { children: [_jsx("button", { onClick: onFirstClick, children: firstButtonText }), _jsx("button", { onClick: onSecondClick, children: secondButtonText })] }));
1482
1412
  };
1483
1413
  const B = () => {
1484
- const [file, setFile] = useState(defaultFile);
1485
- const [, , Provider] = useUseCase(file, fileUseCase, mode, {
1486
- onChange(newFile) {
1487
- if (mode !== UseCaseModes.Stateless) {
1488
- return;
1489
- }
1490
- // `stateless` 不会保存状态,所以需要手动保存
1491
- setFile(newFile);
1492
- },
1493
- });
1414
+ const [, , Provider] = useUseCase(defaultFile, fileUseCase);
1494
1415
  return (_jsx(Provider, { children: _jsx(A, {}) }));
1495
1416
  };
1496
1417
  render(_jsx(B, {}));
@@ -1,6 +1,5 @@
1
1
  import { EntityReducers, EntityUseCase, Reducers, UseCase } from '@mic-rexjs/usecases';
2
2
  import { UseCaseProvider } from '../useProvider/types';
3
- import { UseCaseModes } from '../../enums/UseCaseModes';
4
3
  import { ContextualEntityReducers } from '../../configs/defaultUseCaseContext/types';
5
4
  import { SymbolSet, SymbolSetTarget } from '@mic-rexjs/usecases/es/types';
6
5
  export interface NonEntitySymbolSet extends SymbolSet {
@@ -54,11 +53,8 @@ export interface ContextualCoreCollectionHook {
54
53
  export interface RootCoreCollectionHook {
55
54
  <T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> & UseCase<EntityReducers<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
56
55
  }
57
- export interface ModeCoreCollectionHook {
58
- <T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> & UseCase<EntityReducers<T>, TUseCaseOptions>, mode: UseCaseModes, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
56
+ export interface CoreCollectionHook extends ContextualCoreCollectionHook, RootCoreCollectionHook {
59
57
  }
60
- export interface CoreCollectionHook extends ContextualCoreCollectionHook, RootCoreCollectionHook, ModeCoreCollectionHook {
61
- }
62
- export type UseCaseHookParameters = Parameters<ReducersHook> | Parameters<ContextualCoreCollectionHook> | Parameters<RootCoreCollectionHook> | Parameters<ModeCoreCollectionHook>;
58
+ export type UseCaseHookParameters = Parameters<ReducersHook> | Parameters<ContextualCoreCollectionHook> | Parameters<RootCoreCollectionHook>;
63
59
  export interface UseCaseHook extends ReducersHook, CoreCollectionHook {
64
60
  }
@@ -1,6 +1,5 @@
1
1
  import { UseCaseContextValue } from '../../configs/defaultUseCaseContext/types';
2
2
  import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
3
- import { UseCaseModes } from '../../enums/UseCaseModes';
4
3
  import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
5
4
  import { Reducers } from '@mic-rexjs/usecases';
6
- export declare const useUseCaseStatuses: <T extends Reducers>(argumentTypes: UseCaseArgumentTypes, mode: UseCaseModes, contextValue: UseCaseContextValue<T> | null) => UseCaseStatuses;
5
+ export declare const useUseCaseStatuses: <T extends Reducers>(argumentTypes: UseCaseArgumentTypes, contextValue: UseCaseContextValue<T> | null) => UseCaseStatuses;
@@ -1,8 +1,7 @@
1
1
  import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
2
- import { UseCaseModes } from '../../enums/UseCaseModes';
3
2
  import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
4
3
  import { useCreation } from 'ahooks';
5
- export const useUseCaseStatuses = (argumentTypes, mode, contextValue) => {
4
+ export const useUseCaseStatuses = (argumentTypes, contextValue) => {
6
5
  return useCreation(() => {
7
6
  let statuses = UseCaseStatuses.None;
8
7
  const { store } = (contextValue || {});
@@ -18,14 +17,6 @@ export const useUseCaseStatuses = (argumentTypes, mode, contextValue) => {
18
17
  if (store) {
19
18
  statuses |= UseCaseStatuses.EntityEnabled;
20
19
  }
21
- switch (mode) {
22
- case UseCaseModes.StateControllable:
23
- statuses |= UseCaseStatuses.StateControllableEnabled;
24
- break;
25
- case UseCaseModes.Stateless:
26
- statuses |= UseCaseStatuses.StatelessEnabled;
27
- break;
28
- }
29
20
  return statuses;
30
- }, [argumentTypes, contextValue, mode]);
21
+ }, [argumentTypes, contextValue]);
31
22
  };
package/es/index.d.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  export { UseCaseFragment } from './components/UseCaseFragment';
2
2
  export { useUseCase } from './hooks/useUseCase';
3
- export { useStateControllableUseCase } from './hooks/useStateControllableUseCase';
4
- export { useStatelessUseCase } from './hooks/useStatelessUseCase';
5
3
  export type { EntityWatchEvent, RootCoreCollection, ContextualCoreCollection, CoreCollection, } from './hooks/useUseCase/types';
6
4
  export type { UseCaseHookOptions } from './hooks/useUseCase/types';
7
5
  export type { UseCaseProvider } from './hooks/useProvider/types';
package/es/index.js CHANGED
@@ -1,4 +1,2 @@
1
1
  export { UseCaseFragment } from './components/UseCaseFragment';
2
2
  export { useUseCase } from './hooks/useUseCase';
3
- export { useStateControllableUseCase } from './hooks/useStateControllableUseCase';
4
- export { useStatelessUseCase } from './hooks/useStatelessUseCase';
@@ -1,32 +1,14 @@
1
- import { UseCaseModes } from '../../enums/UseCaseModes';
2
1
  import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
3
2
  export const fillArguments = (args, argumentTypes) => {
4
- const [arg1, arg2, arg3, arg4, arg5] = args;
3
+ const [arg1, arg2, arg3, arg4] = args;
5
4
  const hasEntity = (argumentTypes & UseCaseArgumentTypes.Entity) === UseCaseArgumentTypes.Entity;
6
- const hasMode = (argumentTypes & UseCaseArgumentTypes.Mode) === UseCaseArgumentTypes.Mode;
7
5
  if (hasEntity) {
8
- if (hasMode) {
9
- return [
10
- arg1,
11
- arg2,
12
- arg3,
13
- (arg4 || {}),
14
- arg5 || [],
15
- ];
16
- }
17
6
  return [
18
7
  arg1,
19
8
  arg2,
20
- UseCaseModes.Normal,
21
9
  (arg3 || {}),
22
10
  (arg4 || []),
23
11
  ];
24
12
  }
25
- return [
26
- null,
27
- arg1,
28
- UseCaseModes.Normal,
29
- (arg2 || {}),
30
- (arg3 || []),
31
- ];
13
+ return [null, arg1, (arg2 || {}), (arg3 || [])];
32
14
  };
@@ -1,10 +1,8 @@
1
- import { UseCaseModes } from '../../enums/UseCaseModes';
2
1
  import { EntityGetter, UseCaseHookContextualOptions, UseCaseHookOptions } from '../../hooks/useUseCase/types';
3
2
  import { EntityReducers, EntityUseCase, Reducers, UseCase } from '@mic-rexjs/usecases';
4
3
  export type UseCaseHookFullParameters<T, TReducers extends Reducers, TUseCaseOptions extends object> = [
5
4
  entity: T | EntityGetter<T>,
6
5
  usecase: UseCase<TReducers, TUseCaseOptions> | EntityUseCase<T, TReducers & EntityReducers<T>, TUseCaseOptions>,
7
- mode: UseCaseModes,
8
6
  options: TUseCaseOptions | UseCaseHookOptions<T, TUseCaseOptions> | UseCaseHookContextualOptions<T>,
9
7
  deps: unknown[]
10
8
  ];
@@ -8,5 +8,4 @@ var UseCaseArgumentTypes;
8
8
  (function (UseCaseArgumentTypes) {
9
9
  UseCaseArgumentTypes[UseCaseArgumentTypes["None"] = 0] = "None";
10
10
  UseCaseArgumentTypes[UseCaseArgumentTypes["Entity"] = 2] = "Entity";
11
- UseCaseArgumentTypes[UseCaseArgumentTypes["Mode"] = 4] = "Mode";
12
11
  })(UseCaseArgumentTypes || (exports.UseCaseArgumentTypes = UseCaseArgumentTypes = {}));
@@ -17,8 +17,4 @@ 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";
22
- // 是否不需要 `entity` 状态管理
23
- UseCaseStatuses[UseCaseStatuses["StatelessEnabled"] = 136] = "StatelessEnabled";
24
20
  })(UseCaseStatuses || (exports.UseCaseStatuses = UseCaseStatuses = {}));
@@ -12,15 +12,11 @@ var _useConstant = require("../useConstant");
12
12
  var useArgumentTypes = exports.useArgumentTypes = function useArgumentTypes(args) {
13
13
  return (0, _useConstant.useConstant)(function () {
14
14
  var types = _UseCaseArgumentTypes.UseCaseArgumentTypes.None;
15
- var _args = (0, _slicedToArray2["default"])(args, 3),
16
- arg2 = _args[1],
17
- arg3 = _args[2];
15
+ var _args = (0, _slicedToArray2["default"])(args, 2),
16
+ arg2 = _args[1];
18
17
  var type2 = (0, _typeof2["default"])(arg2);
19
18
  if (type2 === 'function') {
20
19
  types |= _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity;
21
- if (typeof arg3 === 'number') {
22
- types |= _UseCaseArgumentTypes.UseCaseArgumentTypes.Mode;
23
- }
24
20
  }
25
21
  return types;
26
22
  });
@@ -27,12 +27,8 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
27
27
  if (!entityRootEnabled) {
28
28
  return new _usecases.EntityStore(null);
29
29
  }
30
- var stateless = (statuses & _UseCaseStatuses.UseCaseStatuses.StatelessEnabled) === _UseCaseStatuses.UseCaseStatuses.StatelessEnabled;
31
30
  return new _usecases.EntityStore(runtimeEntity, {
32
31
  onChange: function onChange(newEntity) {
33
- if (stateless) {
34
- return;
35
- }
36
32
  setEntityState(newEntity);
37
33
  }
38
34
  });
@@ -13,17 +13,8 @@ var useRuntimeEntity = exports.useRuntimeEntity = function useRuntimeEntity(stat
13
13
  return contextEntity;
14
14
  }
15
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
16
  var prevRootEntity = prevRootEntityRef.current;
24
- var stateControllableDisabled = (statuses & _UseCaseStatuses.UseCaseStatuses.StateControllableEnabled) !== _UseCaseStatuses.UseCaseStatuses.StateControllableEnabled;
25
17
  switch (true) {
26
- case stateControllableDisabled:
27
18
  case isFunction:
28
19
  case prevRootEntity === rootEntity:
29
20
  return entityState;