@mic-rexjs/usecases-react 2.6.3 → 2.7.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 (91) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/components/UseCaseFragment/index.d.ts +2 -2
  3. package/es/components/UseCaseFragment/types.d.ts +3 -3
  4. package/es/enums/ArgumentTypes/index.d.ts +6 -0
  5. package/es/enums/ArgumentTypes/index.js +7 -0
  6. package/es/enums/Statuses/index.d.ts +27 -0
  7. package/es/enums/Statuses/index.js +28 -0
  8. package/es/hooks/useArgumentTypes/index.d.ts +2 -2
  9. package/es/hooks/useArgumentTypes/index.js +9 -4
  10. package/es/hooks/useContext/index.d.ts +5 -0
  11. package/es/hooks/useContext/index.js +14 -0
  12. package/es/hooks/useContext/index.test.js +52 -0
  13. package/es/hooks/useContextUseCase/index.d.ts +2 -0
  14. package/es/hooks/useContextUseCase/index.js +7 -0
  15. package/es/hooks/useContextValue/index.d.ts +4 -0
  16. package/es/hooks/useContextValue/index.js +13 -0
  17. package/es/hooks/useContextualItem/index.d.ts +2 -2
  18. package/es/hooks/useContextualItem/index.js +2 -2
  19. package/es/hooks/useEntity/index.d.ts +2 -2
  20. package/es/hooks/useEntity/index.js +20 -20
  21. package/es/hooks/useFullArguments/index.d.ts +5 -0
  22. package/es/hooks/useFullArguments/index.js +22 -0
  23. package/es/{methods/fillArguments → hooks/useFullArguments}/types.d.ts +3 -2
  24. package/es/hooks/useProvider/index.d.ts +5 -4
  25. package/es/hooks/useProvider/index.js +7 -14
  26. package/es/hooks/useRuntimeEntity/index.d.ts +2 -2
  27. package/es/hooks/useRuntimeEntity/index.js +9 -9
  28. package/es/hooks/useStatuses/index.d.ts +5 -0
  29. package/es/hooks/useStatuses/index.js +27 -0
  30. package/es/hooks/useUseCase/index.js +13 -13
  31. package/es/hooks/useUseCase/index.test.js +106 -1
  32. package/es/hooks/useUseCase/types.d.ts +9 -9
  33. package/es/index.d.ts +1 -0
  34. package/es/index.js +1 -0
  35. package/es/methods/initEntityReducers/index.d.ts +4 -3
  36. package/es/methods/registerGlobalUseCase/index.d.ts +1 -0
  37. package/es/methods/registerGlobalUseCase/index.js +2 -0
  38. package/es/usecases/contextUseCase/index.d.ts +2 -2
  39. package/es/usecases/contextUseCase/index.js +99 -18
  40. package/es/usecases/contextUseCase/types.d.ts +33 -2
  41. package/lib/enums/ArgumentTypes/index.js +13 -0
  42. package/lib/enums/Statuses/index.js +34 -0
  43. package/lib/hooks/useArgumentTypes/index.js +9 -3
  44. package/lib/hooks/useContext/index.js +23 -0
  45. package/lib/hooks/useContext/index.test.js +62 -0
  46. package/lib/hooks/useContextUseCase/index.js +13 -0
  47. package/lib/hooks/useContextValue/index.js +20 -0
  48. package/lib/hooks/useContextualItem/index.js +2 -2
  49. package/lib/hooks/useEntity/index.js +21 -21
  50. package/lib/hooks/useFullArguments/index.js +25 -0
  51. package/lib/hooks/useProvider/index.js +8 -15
  52. package/lib/hooks/useRuntimeEntity/index.js +9 -9
  53. package/lib/hooks/useStatuses/index.js +33 -0
  54. package/lib/hooks/useUseCase/index.js +13 -13
  55. package/lib/hooks/useUseCase/index.test.js +152 -7
  56. package/lib/index.js +8 -1
  57. package/lib/methods/registerGlobalUseCase/index.js +9 -0
  58. package/lib/usecases/contextUseCase/index.js +103 -20
  59. package/package.json +3 -3
  60. package/es/configs/defaultUseCaseContext/index.d.ts +0 -4
  61. package/es/configs/defaultUseCaseContext/index.js +0 -2
  62. package/es/configs/defaultUseCaseContext/types.d.ts +0 -19
  63. package/es/configs/useCaseContextReferenceMap/index.d.ts +0 -1
  64. package/es/configs/useCaseContextReferenceMap/index.js +0 -1
  65. package/es/configs/useCaseContextReferenceMap/types.d.ts +0 -8
  66. package/es/configs/useCaseContextReferenceMap/types.js +0 -1
  67. package/es/enums/UseCaseArgumentTypes/index.d.ts +0 -4
  68. package/es/enums/UseCaseArgumentTypes/index.js +0 -5
  69. package/es/enums/UseCaseStatuses/index.d.ts +0 -8
  70. package/es/enums/UseCaseStatuses/index.js +0 -14
  71. package/es/hooks/useUseCaseContext/index.d.ts +0 -4
  72. package/es/hooks/useUseCaseContext/index.js +0 -48
  73. package/es/hooks/useUseCaseContext/index.test.js +0 -59
  74. package/es/hooks/useUseCaseStatuses/index.d.ts +0 -5
  75. package/es/hooks/useUseCaseStatuses/index.js +0 -22
  76. package/es/methods/fillArguments/index.d.ts +0 -5
  77. package/es/methods/fillArguments/index.js +0 -14
  78. package/es/methods/fillArguments/types.js +0 -1
  79. package/lib/configs/defaultUseCaseContext/index.js +0 -8
  80. package/lib/configs/useCaseContextReferenceMap/index.js +0 -7
  81. package/lib/configs/useCaseContextReferenceMap/types.js +0 -5
  82. package/lib/enums/UseCaseArgumentTypes/index.js +0 -11
  83. package/lib/enums/UseCaseStatuses/index.js +0 -20
  84. package/lib/hooks/useUseCaseContext/index.js +0 -57
  85. package/lib/hooks/useUseCaseContext/index.test.js +0 -73
  86. package/lib/hooks/useUseCaseStatuses/index.js +0 -28
  87. package/lib/methods/fillArguments/index.js +0 -21
  88. package/lib/methods/fillArguments/types.js +0 -5
  89. /package/es/hooks/{useUseCaseContext → useContext}/index.test.d.ts +0 -0
  90. /package/es/{configs/defaultUseCaseContext → hooks/useFullArguments}/types.js +0 -0
  91. /package/lib/{configs/defaultUseCaseContext → hooks/useFullArguments}/types.js +0 -0
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,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,U=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),D=(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=(0,l.useUpdate)(),i=(0,l.useLatest)(o),c=r?r.value:null,s=(t&f.EntityEnabled)===f.EntityEnabled,y=(t&f.EntityRootEnabled)===f.EntityRootEnabled,v=S(r,t,(function(){if(!y)return new d.EntityStore(null);var t="function"==typeof n;return new d.EntityStore(t?n():n,{onChange:function(){a()}})})),b=function(t,n,r,o){var u=(0,e.useRef)(n);if((o&f.EntityRootEnabled)!==f.EntityRootEnabled)return r;var a="function"==typeof n,i=u.current;switch(!0){case a:case i===n:return t.value}return u.current=n,n}(v,n,c,t);return y&&(v.value=b),(0,e.useEffect)((function(){if(s){var t=function(t,e){var n=i.current,r=n.onChange,o=n.watch;o&&P(o,t,e),null==r||r(t,e)};return v.watch(t),function(){v.unwatch(t)}}}),[s,v,u,i]),(0,l.useCreation)((function(){return[b,v]}),[b,v])}(U,R,void 0===B?null:B,x,V),2),W=G[0],Y=G[1],q=S(F,U,(function(){var t,e,n,r=(t=x,e=function(t,e){var n,r;return null===(n=(r=D.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(U&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))}))}(U,k,Y,q);return(0,l.useCreation)((function(){if((U&f.EntityEnabled)!==f.EntityEnabled)return q;var t=(U&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]}),[U,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})})();
2
+ (()=>{var e={20:(e,t,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};t.jsx=function(e,t,n){var r,l={},c=null,f=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(f=t.ref),t)u.call(t,r)&&!i.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===l[r]&&(l[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:f,props:l,_owner:a.current}}},848:(e,t,n)=>{"use strict";e.exports=n(20)},594:e=>{"use strict";e.exports=React}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var u=t[r]={exports:{}};return e[r](u,u.exports,n),u.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{UseCaseFragment:()=>_,registerGlobalUseCase:()=>A,useUseCase:()=>P});var e=n(848),t=n(594),o=n.n(t);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}function i(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||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(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,u,a,i=[],l=!0,c=!1;try{if(u=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=u.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw o}}return i}}(e,t)||a(e,t)||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=function(e){return l((0,t.useState)((function(){return e})),1)[0]},s=function(e){return l((0,t.useState)(e),1)[0]};const y=usecases;var b,v;function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function E(e){var t=function(e,t){if("object"!=d(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:String(t)}!function(e){e[e.None=0]="None",e[e.Entity=2]="Entity",e[e.Global=4]="Global",e[e.GlobalEntity=6]="GlobalEntity"}(b||(b={})),function(e){e[e.None=0]="None",e[e.RootEnabled=2]="RootEnabled",e[e.ContextEnabled=4]="ContextEnabled",e[e.EntityEnabled=8]="EntityEnabled",e[e.GlobalEnabled=28]="GlobalEnabled",e[e.ContextRootEnabled=6]="ContextRootEnabled",e[e.EntityRootEnabled=14]="EntityRootEnabled"}(v||(v={}));var p=["watch","onChange","options"];function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?h(Object(n),!0).forEach((function(t){var r,o,u;r=e,o=t,u=n[t],(o=E(o))in r?Object.defineProperty(r,o,{value:u,enumerable:!0,configurable:!0,writable:!0}):r[o]=u})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var g=function(e,t,n){n.watch,n.onChange;var r=n.options,o=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},u=Object.keys(e);for(r=0;r<u.length;r++)n=u[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(r=0;r<u.length;r++)n=u[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(n,p);return(0,y.createEntityReducers)(t,e,m(m(m({},o),r),{},{onGenerate:function(e,t){return t}}))},O=(0,y.createUseCase)((function(){var e=new Map,n=new Map,r=new Map,o=(0,t.createContext)(null);return function(){var u=function(e,t,n){return(n&v.EntityEnabled)===v.EntityEnabled?{store:e,reducers:t,statuses:n}:{reducers:t,statuses:n}},a=function(n,r){if(e.has(n)){var u=e.get(n),a=u.value,i=u.times;return e.set(n,{value:a,times:i+1}),a}if((r&b.Entity)!==b.Entity)return o;var l=(0,t.createContext)(null);return e.set(n,{value:l,times:1}),l};return{createContextValue:u,getGlobalContextValue:function(e){var t="function"==typeof e?n.get(e):e;return r.get(t)||null},isGlobal:function(e){return n.has(e)},registerUseCase:a,registerGlobalUseCase:function(e,t){if(!n.has(t)){var o=new y.EntityStore(e),i=g(t,o,{}),l=u(o,i,v.GlobalEnabled),c=a(t,b.GlobalEntity);n.set(t,c),r.set(c,l)}},unregisterUseCase:function(t,n){if((n&b.Entity)!==b.Entity)return!1;if(!e.has(t))return!1;var r=e.get(t),o=r.value,u=r.times;return 1===u?e.delete(t):e.set(t,{value:o,times:u-1}),!0},unregisterGlobalUseCase:function(t){if(!n.has(t))return!1;var o=n.get(t);return n.delete(t),r.delete(o),e.delete(t),!0}}}})),w=function(){return s((function(){return O()}))},C=function(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0},j=function(e,t){var n,r=t||{},o=r.onShouldCache,u=void 0===o?function(){return!0}:o,a=r.onCompare,i=void 0===a?function(e,t){return C(e,t)}:a;return function(){for(var t=u(),r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];if(n&&t){var l=n,c=l.parameters,f=l.returnValue;if(i(c,o))return f}var s=e.apply(void 0,o);return t&&(n={parameters:o,returnValue:s}),s}},S=function(e,t,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(t&v.RootEnabled)!==v.RootEnabled&&e?e:u()}),[t,e,u])},R=function(e,t){return"object"===d(e)&&null!==e&&Object.hasOwn(e,t)},G=function e(t,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],b=void 0===y?"":y,v=R(t,s),d=R(n,s),E=[].concat(i(u),[s]);if(v||d){var p=v?t[s]:a,h=d?n[s]:a;if(b)return void e(p,h,b,o,E);if(p===h)return;o(p,h,E)}else if(!/^\d+^/.test(s))for(var m=Array.isArray(t)?t:[],g=Array.isArray(n)?n:[],O=m.length,w=g.length,C=Math.max(O,w),j=0;j<C;j++)e(m[j],g[j],r,o,[].concat(i(u),["".concat(j)]))},x=function(e,t,n){for(var r=function(){var e=l(u[o],2),r=e[0],a=e[1];G(n,t,r,(function(e,r,o){a({fieldPaths:o,newEntity:t,oldEntity:n,newValue:r,oldValue:e})}))},o=0,u=Object.entries(e);o<u.length;o++)r()},P=function(){for(var e,n=((e=(0,t.useRef)(!0)).current=!0,(0,t.useEffect)((function(){e.current=!1})),e),r=arguments.length,u=new Array(r),a=0;a<r;a++)u[a]=arguments[a];var E=function(e){var t=w().isGlobal;return s((function(){var n=b.None,r=l(e,2),o=r[0];return"function"===d(r[1])?n|=b.Entity:t(o)&&(n|=b.Global),n}))}(u),p=function(e,t){var n=l(e,4),r=n[0],o=n[1],u=n[2],a=n[3],i=(t&b.Entity)!==b.Entity,c=(0,w().isGlobal)(r);return i||c?[null,r,o||{},u||[]]:[r,o,u||{},a||[]]}(u,E),h=l(p,4),m=h[0],O=h[1],R=h[2],G=h[3],P=f(O),_=P,A=P,U=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b.None,n=w(),r=n.registerUseCase,o=n.unregisterUseCase,u=s((function(){return r(e,t)}));return(0,c.useUnmount)((function(){o(e,t)})),u}(P,E),M=function(e,n){var r=w().getGlobalContextValue,o=(0,t.useContext)(e),u=r(e);return(n&b.Global)===b.Global?u:o}(U,E),N=M,I=function(e,t){return(0,c.useCreation)((function(){var n=v.None,r=(t||{}).store,o=(e&b.Entity)===b.Entity,u=(e&b.Global)===b.Global;return o&&!u&&(n|=v.EntityRootEnabled),n|=t||u?v.ContextEnabled:v.RootEnabled,(r||u)&&(n|=v.EntityEnabled),u&&(n|=v.GlobalEnabled),n}),[e,t])}(E,M),k=(0,c.useLatest)(R),T=function(e){var n=(0,t.useRef)(0),r=(0,t.useRef)([]),o=r.current,u=C(e,o);return r.current=e,n.current+=u?0:1,n.current}(G),V=(M||{}).reducers,L=void 0===V?null:V,D=(N||{}).store,F=l(function(e,n,r,o){var u=(0,c.useUpdate)(),a=(0,c.useLatest)(o),i=r?r.value:null,l=(e&v.EntityEnabled)===v.EntityEnabled,f=(e&v.EntityRootEnabled)===v.EntityRootEnabled,s=S(r,e,(function(){if(!f)return new y.EntityStore(null);var e="function"==typeof n;return new y.EntityStore(e?n():n)})),b=function(e,n,r,o){var u=(0,t.useRef)(n);if((o&v.EntityRootEnabled)!==v.EntityRootEnabled)return r;var a="function"==typeof n,i=u.current;switch(!0){case a:case i===n:return e.value}return u.current=n,n}(s,n,i,e),d=(0,c.useMemoizedFn)((function(t,n){var r=a.current,o=r.onChange,i=r.watch,l=(e&v.GlobalEnabled)===v.GlobalEnabled;i&&x(i,t,n),null==o||o(t,n),(f||l)&&u()}));return f&&(s.value=b),(0,t.useEffect)((function(){if(l)return s.watch(d),function(){s.unwatch(d)}}),[l,s,d]),(0,c.useCreation)((function(){return[b,s]}),[b,s])}(I,m,void 0===D?null:D,R),2),$=F[0],z=F[1],B=S(L,I,(function(){var e,t,n,r=(e=R,t=function(e,t){var n,r;return null===(n=(r=k.current)[e])||void 0===n?void 0:n.call.apply(n,[r].concat(i(t)))},n={},Object.keys(e).forEach((function(r){var o=e[r];n[r]="function"!=typeof o?o:function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];return t(r,n)}})),n);return(I&v.EntityEnabled)!==v.EntityEnabled?_(r):g(A,z,r)}),T),W=function(e,n,r,u){var a=r.value,i=w().createContextValue,l=(0,t.useMemo)((function(){return i(r,u,e)}),[e,a,r,u,i]),s=(0,c.useLatest)(l);return f((function(e){var t=e.children,r=e.with,u=void 0===r?[]:r,a=n.Provider,i=s.current;return o().createElement(a,{value:i},u.reduceRight((function(e,t){return o().createElement(t,{},e)}),t))}))}(I,U,z,B);return(0,c.useCreation)((function(){if((I&v.EntityEnabled)!==v.EntityEnabled)return B;var e=(I&v.RootEnabled)===v.RootEnabled,t=function(e,t){var n={};return Object.entries(e).forEach((function(e){var r=l(e,2),o=r[0],u=r[1];n[o]=j(u,t)})),n}(B,{onShouldCache:function(){return n.current}});return e?[$,t,W]:[$,t]}),[I,$,B,W,n])},_=function(n){var r=n.usecase,o=n.watch,u=n.onChange;return P(r,{watch:o,onChange:u}),(0,e.jsx)(t.Fragment,{})},A=O().registerGlobalUseCase})();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,3 +1,3 @@
1
1
  import { UseCaseFragmentProps } from './types';
2
- import { EntityReducers } from '@mic-rexjs/usecases';
3
- export declare const UseCaseFragment: <T, TEntityReducers extends EntityReducers<T>>({ usecase, watch, onChange, }: UseCaseFragmentProps<T, TEntityReducers>) => React.ReactElement;
2
+ import { EntityReducerMap } from '@mic-rexjs/usecases/es/types';
3
+ export declare const UseCaseFragment: <T, TEntityReducers extends EntityReducerMap<T>>({ usecase, watch, onChange, }: UseCaseFragmentProps<T, TEntityReducers>) => React.ReactElement;
@@ -1,7 +1,7 @@
1
- import { EntityReducers, EntityUseCase, UseCase } from '@mic-rexjs/usecases';
2
1
  import { EntityWatchMap } from '../../hooks/useUseCase/types';
3
- export interface UseCaseFragmentProps<T, TEntityReducers extends EntityReducers<T>> {
4
- usecase: EntityUseCase<T, TEntityReducers> & UseCase<EntityReducers<T>>;
2
+ import { EntityReducerMap, InferableEntityUseCase } from '@mic-rexjs/usecases/es/types';
3
+ export interface UseCaseFragmentProps<T, TEntityReducers extends EntityReducerMap<T>> {
4
+ usecase: InferableEntityUseCase<T, TEntityReducers>;
5
5
  watch?: EntityWatchMap<T>;
6
6
  onChange?(newEntity: T, oldEntity: T): void;
7
7
  }
@@ -0,0 +1,6 @@
1
+ export declare enum ArgumentTypes {
2
+ None = 0,
3
+ Entity = 2,
4
+ Global = 4,
5
+ GlobalEntity = 6
6
+ }
@@ -0,0 +1,7 @@
1
+ export var ArgumentTypes;
2
+ (function (ArgumentTypes) {
3
+ ArgumentTypes[ArgumentTypes["None"] = 0] = "None";
4
+ ArgumentTypes[ArgumentTypes["Entity"] = 2] = "Entity";
5
+ ArgumentTypes[ArgumentTypes["Global"] = 4] = "Global";
6
+ ArgumentTypes[ArgumentTypes["GlobalEntity"] = 6] = "GlobalEntity";
7
+ })(ArgumentTypes || (ArgumentTypes = {}));
@@ -0,0 +1,27 @@
1
+ export declare enum Statuses {
2
+ None = 0,
3
+ /**
4
+ * 是否需要初始化根 `redurcers`
5
+ */
6
+ RootEnabled = 2,
7
+ /**
8
+ * 是否为上下文模式
9
+ */
10
+ ContextEnabled = 4,
11
+ /**
12
+ * 是否有 `entity`
13
+ */
14
+ EntityEnabled = 8,
15
+ /**
16
+ * 是否为全局模式
17
+ */
18
+ GlobalEnabled = 28,
19
+ /**
20
+ * 是否为需要提供 `Provider` 去挂载根 `context`
21
+ */
22
+ ContextRootEnabled = 6,
23
+ /**
24
+ * 是否初始化与 `entity` 相关的 `reducers`
25
+ */
26
+ EntityRootEnabled = 14
27
+ }
@@ -0,0 +1,28 @@
1
+ export var Statuses;
2
+ (function (Statuses) {
3
+ Statuses[Statuses["None"] = 0] = "None";
4
+ /**
5
+ * 是否需要初始化根 `redurcers`
6
+ */
7
+ Statuses[Statuses["RootEnabled"] = 2] = "RootEnabled";
8
+ /**
9
+ * 是否为上下文模式
10
+ */
11
+ Statuses[Statuses["ContextEnabled"] = 4] = "ContextEnabled";
12
+ /**
13
+ * 是否有 `entity`
14
+ */
15
+ Statuses[Statuses["EntityEnabled"] = 8] = "EntityEnabled";
16
+ /**
17
+ * 是否为全局模式
18
+ */
19
+ Statuses[Statuses["GlobalEnabled"] = 28] = "GlobalEnabled";
20
+ /**
21
+ * 是否为需要提供 `Provider` 去挂载根 `context`
22
+ */
23
+ Statuses[Statuses["ContextRootEnabled"] = 6] = "ContextRootEnabled";
24
+ /**
25
+ * 是否初始化与 `entity` 相关的 `reducers`
26
+ */
27
+ Statuses[Statuses["EntityRootEnabled"] = 14] = "EntityRootEnabled";
28
+ })(Statuses || (Statuses = {}));
@@ -1,3 +1,3 @@
1
- import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
1
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
2
2
  import { UseCaseHookParameters } from '../useUseCase/types';
3
- export declare const useArgumentTypes: (args: UseCaseHookParameters) => UseCaseArgumentTypes;
3
+ export declare const useArgumentTypes: (args: UseCaseHookParameters) => ArgumentTypes;
@@ -1,12 +1,17 @@
1
- import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
1
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
2
2
  import { useConstant } from '../useConstant';
3
+ import { useContextUseCase } from '../useContextUseCase';
3
4
  export const useArgumentTypes = (args) => {
5
+ const { isGlobal } = useContextUseCase();
4
6
  return useConstant(() => {
5
- let types = UseCaseArgumentTypes.None;
6
- const [, arg2] = args;
7
+ let types = ArgumentTypes.None;
8
+ const [arg1, arg2] = args;
7
9
  const type2 = typeof arg2;
8
10
  if (type2 === 'function') {
9
- types |= UseCaseArgumentTypes.Entity;
11
+ types |= ArgumentTypes.Entity;
12
+ }
13
+ else if (isGlobal(arg1)) {
14
+ types |= ArgumentTypes.Global;
10
15
  }
11
16
  return types;
12
17
  });
@@ -0,0 +1,5 @@
1
+ import { UseCase } from '@mic-rexjs/usecases';
2
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
3
+ import { Context, ContextValue } from '../../usecases/contextUseCase/types';
4
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
5
+ export declare const useContext: <T extends ReducerMap<import("@mic-rexjs/usecases").Reducer<unknown>>, TUseCaseOptions extends object>(usecase: UseCase<T, TUseCaseOptions>, argumentTypes?: ArgumentTypes) => Context<ContextValue<T>>;
@@ -0,0 +1,14 @@
1
+ import { useConstant } from '../useConstant';
2
+ import { useUnmount } from 'ahooks';
3
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
4
+ import { useContextUseCase } from '../useContextUseCase';
5
+ export const useContext = (usecase, argumentTypes = ArgumentTypes.None) => {
6
+ const { registerUseCase, unregisterUseCase } = useContextUseCase();
7
+ const context = useConstant(() => {
8
+ return registerUseCase(usecase, argumentTypes);
9
+ });
10
+ useUnmount(() => {
11
+ unregisterUseCase(usecase, argumentTypes);
12
+ });
13
+ return context;
14
+ };
@@ -0,0 +1,52 @@
1
+ import { describe, expect, test } from '@jest/globals';
2
+ import { renderHook } from '@testing-library/react';
3
+ import { useContext } from '.';
4
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
5
+ import { useContext as useReactContext } from 'react';
6
+ const testUseCase = () => {
7
+ return {};
8
+ };
9
+ describe('useContext', () => {
10
+ test('should return the default context with value `null` if map has not saved a usecase with default args', () => {
11
+ const { result } = renderHook(() => {
12
+ const context = useContext(testUseCase);
13
+ const value = useReactContext(context);
14
+ return value;
15
+ });
16
+ const { current } = result;
17
+ expect(current).toBe(null);
18
+ });
19
+ test('should return the default context with value `null` if map has not saved a usecase with `ArgumentTypes.None` & `UseCaseModes.Normal`', () => {
20
+ const { result } = renderHook(() => {
21
+ const context = useContext(testUseCase, ArgumentTypes.None);
22
+ const value = useReactContext(context);
23
+ return value;
24
+ });
25
+ const { current } = result;
26
+ expect(current).toBe(null);
27
+ });
28
+ test('should return the default context with value `null` as unmount this hook', () => {
29
+ const { result: result1, unmount: unmount1 } = renderHook(() => {
30
+ const context = useContext(testUseCase, ArgumentTypes.None);
31
+ const value = useReactContext(context);
32
+ return value;
33
+ });
34
+ const { current: current1 } = result1;
35
+ expect(typeof current1).toBe('object');
36
+ unmount1();
37
+ const { result: result2 } = renderHook(() => {
38
+ const context = useContext(testUseCase, ArgumentTypes.None);
39
+ const value = useReactContext(context);
40
+ return value;
41
+ });
42
+ const { current: current2 } = result2;
43
+ expect(current2).toBe(null);
44
+ });
45
+ test('should return a new context if map has not saved a usecase with `ArgumentTypes.Entity` & `UseCaseModes.Normal`', () => {
46
+ const { result } = renderHook(() => {
47
+ return useContext(testUseCase, ArgumentTypes.Entity);
48
+ });
49
+ const { current } = result;
50
+ expect(typeof current).toBe('object');
51
+ });
52
+ });
@@ -0,0 +1,2 @@
1
+ import { ContextReducers } from '../../usecases/contextUseCase/types';
2
+ export declare const useContextUseCase: () => ContextReducers;
@@ -0,0 +1,7 @@
1
+ import { useConstant } from '../useConstant';
2
+ import { contextUseCase } from '../../usecases/contextUseCase';
3
+ export const useContextUseCase = () => {
4
+ return useConstant(() => {
5
+ return contextUseCase();
6
+ });
7
+ };
@@ -0,0 +1,4 @@
1
+ import { Context, ContextValue } from '../../usecases/contextUseCase/types';
2
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
3
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
4
+ export declare const useContextValue: <T extends ReducerMap<import("@mic-rexjs/usecases/es/types").Reducer<unknown>>, TContextValue extends ContextValue<T>>(context: Context<TContextValue>, argumentType: ArgumentTypes) => TContextValue | null;
@@ -0,0 +1,13 @@
1
+ import { useContextUseCase } from '../useContextUseCase';
2
+ import { useContext } from 'react';
3
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
4
+ export const useContextValue = (context, argumentType) => {
5
+ const { getGlobalContextValue } = useContextUseCase();
6
+ const contextValue = useContext(context);
7
+ const globalContextValue = getGlobalContextValue(context);
8
+ const isGlobal = (argumentType & ArgumentTypes.Global) === ArgumentTypes.Global;
9
+ if (isGlobal) {
10
+ return globalContextValue;
11
+ }
12
+ return contextValue;
13
+ };
@@ -1,3 +1,3 @@
1
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
1
+ import { Statuses } from '../../enums/Statuses';
2
2
  import { CreateContextualItemFactory } from './types';
3
- export declare const useContextualItem: <T>(contextItem: T | null, statuses: UseCaseStatuses, createFactory: CreateContextualItemFactory<T>, depsKey?: number) => T;
3
+ export declare const useContextualItem: <T>(contextItem: T | null, statuses: Statuses, createFactory: CreateContextualItemFactory<T>, depsKey?: number) => T;
@@ -1,5 +1,5 @@
1
1
  import { useCreation, useLatest } from 'ahooks';
2
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
2
+ import { Statuses } from '../../enums/Statuses';
3
3
  import { cacheCall } from '../../methods/cacheCall';
4
4
  export const useContextualItem = (contextItem, statuses, createFactory, depsKey = 0) => {
5
5
  const factoryRef = useLatest(createFactory);
@@ -12,7 +12,7 @@ export const useContextualItem = (contextItem, statuses, createFactory, depsKey
12
12
  });
13
13
  }, [depsKey, factoryRef]);
14
14
  return useCreation(() => {
15
- const rootEnabled = (statuses & UseCaseStatuses.RootEnabled) === UseCaseStatuses.RootEnabled;
15
+ const rootEnabled = (statuses & Statuses.RootEnabled) === Statuses.RootEnabled;
16
16
  if (!rootEnabled && contextItem) {
17
17
  return contextItem;
18
18
  }
@@ -1,4 +1,4 @@
1
1
  import { EntityStore } from '@mic-rexjs/usecases';
2
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
2
+ import { Statuses } from '../../enums/Statuses';
3
3
  import { EntityGetter, UseCaseHookOptions } from '../useUseCase/types';
4
- export declare const useEntity: <T, TUseCaseOptions extends object, TOptions extends UseCaseHookOptions<T, TUseCaseOptions> = UseCaseHookOptions<T, TUseCaseOptions>>(statuses: UseCaseStatuses, rootEntity: T | EntityGetter<T>, contextStore: EntityStore<T> | null, options: TOptions, depsKey: number) => [entity: T, store: EntityStore<T>];
4
+ export declare const useEntity: <T, TUseCaseOptions extends object, TOptions extends UseCaseHookOptions<T, TUseCaseOptions> = UseCaseHookOptions<T, TUseCaseOptions>>(statuses: Statuses, entityArg: T | EntityGetter<T>, contextStore: EntityStore<T> | null, options: TOptions) => [entity: T, store: EntityStore<T>];
@@ -1,28 +1,35 @@
1
1
  import { useEffect } from 'react';
2
2
  import { EntityStore } from '@mic-rexjs/usecases';
3
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
3
+ import { Statuses } from '../../enums/Statuses';
4
4
  import { useContextualItem } from '../useContextualItem';
5
- import { useCreation, useLatest, useUpdate } from 'ahooks';
5
+ import { useCreation, useLatest, useMemoizedFn, useUpdate } from 'ahooks';
6
6
  import { triggerWatchers } from '../../methods/triggerWatchers';
7
7
  import { useRuntimeEntity } from '../useRuntimeEntity';
8
- export const useEntity = (statuses, rootEntity, contextStore, options, depsKey) => {
8
+ export const useEntity = (statuses, entityArg, contextStore, options) => {
9
9
  const update = useUpdate();
10
10
  const optionsRef = useLatest(options);
11
11
  const contextEntity = (contextStore ? contextStore.value : null);
12
- const entityEnabled = (statuses & UseCaseStatuses.EntityEnabled) === UseCaseStatuses.EntityEnabled;
13
- const entityRootEnabled = (statuses & UseCaseStatuses.EntityRootEnabled) === UseCaseStatuses.EntityRootEnabled;
12
+ const entityEnabled = (statuses & Statuses.EntityEnabled) === Statuses.EntityEnabled;
13
+ const entityRootEnabled = (statuses & Statuses.EntityRootEnabled) === Statuses.EntityRootEnabled;
14
14
  const store = useContextualItem(contextStore, statuses, () => {
15
15
  if (!entityRootEnabled) {
16
16
  return new EntityStore(null);
17
17
  }
18
- const isFunction = typeof rootEntity === 'function';
19
- return new EntityStore(isFunction ? rootEntity() : rootEntity, {
20
- onChange() {
21
- update();
22
- },
23
- });
18
+ const isFunction = typeof entityArg === 'function';
19
+ return new EntityStore(isFunction ? entityArg() : entityArg);
20
+ });
21
+ const runtimeEntity = useRuntimeEntity(store, entityArg, contextEntity, statuses);
22
+ const onEntityChange = useMemoizedFn((newEntity, oldEntity) => {
23
+ const { onChange, watch } = optionsRef.current;
24
+ const globalEnabled = (statuses & Statuses.GlobalEnabled) === Statuses.GlobalEnabled;
25
+ if (watch) {
26
+ triggerWatchers(watch, newEntity, oldEntity);
27
+ }
28
+ onChange?.(newEntity, oldEntity);
29
+ if (entityRootEnabled || globalEnabled) {
30
+ update();
31
+ }
24
32
  });
25
- const runtimeEntity = useRuntimeEntity(store, rootEntity, contextEntity, statuses);
26
33
  if (entityRootEnabled) {
27
34
  // 执行同步操作
28
35
  store.value = runtimeEntity;
@@ -31,18 +38,11 @@ export const useEntity = (statuses, rootEntity, contextStore, options, depsKey)
31
38
  if (!entityEnabled) {
32
39
  return;
33
40
  }
34
- const onEntityChange = (newEntity, oldEntity) => {
35
- const { onChange, watch } = optionsRef.current;
36
- if (watch) {
37
- triggerWatchers(watch, newEntity, oldEntity);
38
- }
39
- onChange?.(newEntity, oldEntity);
40
- };
41
41
  store.watch(onEntityChange);
42
42
  return () => {
43
43
  store.unwatch(onEntityChange);
44
44
  };
45
- }, [entityEnabled, store, depsKey, optionsRef]);
45
+ }, [entityEnabled, store, onEntityChange]);
46
46
  return useCreation(() => {
47
47
  return [runtimeEntity, store];
48
48
  }, [runtimeEntity, store]);
@@ -0,0 +1,5 @@
1
+ import { UseCaseHookParameters } from '../../hooks/useUseCase/types';
2
+ import { FullParameters } from './types';
3
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
4
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
5
+ export declare const useFullArguments: <T, TReducers extends ReducerMap<import("@mic-rexjs/usecases").Reducer<unknown>>, TUseCaseOptions extends object>(args: UseCaseHookParameters, argumentTypes: ArgumentTypes) => FullParameters<T, TReducers, TUseCaseOptions>;
@@ -0,0 +1,22 @@
1
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
2
+ import { useContextUseCase } from '../useContextUseCase';
3
+ export const useFullArguments = (args, argumentTypes) => {
4
+ const [arg1, arg2, arg3, arg4] = args;
5
+ const withoutEntity = (argumentTypes & ArgumentTypes.Entity) !== ArgumentTypes.Entity;
6
+ const { isGlobal } = useContextUseCase();
7
+ const global = isGlobal(arg1);
8
+ if (withoutEntity || global) {
9
+ return [
10
+ null,
11
+ arg1,
12
+ (arg2 || {}),
13
+ (arg3 || []),
14
+ ];
15
+ }
16
+ return [
17
+ arg1,
18
+ arg2,
19
+ (arg3 || {}),
20
+ (arg4 || []),
21
+ ];
22
+ };
@@ -1,6 +1,7 @@
1
1
  import { EntityGetter, UseCaseHookContextualOptions, UseCaseHookOptions } from '../../hooks/useUseCase/types';
2
- import { EntityReducers, EntityUseCase, Reducers, UseCase } from '@mic-rexjs/usecases';
3
- export type UseCaseHookFullParameters<T, TReducers extends Reducers, TUseCaseOptions extends object> = [
2
+ import { EntityReducers, EntityUseCase, UseCase } from '@mic-rexjs/usecases';
3
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
4
+ export type FullParameters<T, TReducers extends ReducerMap, TUseCaseOptions extends object> = [
4
5
  entity: T | EntityGetter<T>,
5
6
  usecase: UseCase<TReducers, TUseCaseOptions> | EntityUseCase<T, TReducers & EntityReducers<T>, TUseCaseOptions>,
6
7
  options: TUseCaseOptions | UseCaseHookOptions<T, TUseCaseOptions> | UseCaseHookContextualOptions<T>,
@@ -1,5 +1,6 @@
1
- import { EntityStore, Reducers } from '@mic-rexjs/usecases';
2
- import { UseCaseContext, UseCaseContextValue } from '../../configs/defaultUseCaseContext/types';
1
+ import { EntityStore } from '@mic-rexjs/usecases';
3
2
  import { UseCaseProvider } from './types';
4
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
5
- export declare const useProvider: <T, TReducers extends Reducers>(statuses: UseCaseStatuses, context: UseCaseContext<UseCaseContextValue<TReducers>>, store: EntityStore<T>, reducers: TReducers) => UseCaseProvider;
3
+ import { Statuses } from '../../enums/Statuses';
4
+ import { Context, ContextValue } from '../../usecases/contextUseCase/types';
5
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
6
+ export declare const useProvider: <T, TReducers extends ReducerMap<import("@mic-rexjs/usecases").Reducer<unknown>>>(statuses: Statuses, context: Context<ContextValue<TReducers>>, store: EntityStore<T>, reducers: TReducers) => UseCaseProvider;
@@ -1,26 +1,19 @@
1
- import { useLatest } from 'ahooks';
2
1
  import React, { useMemo } from 'react';
2
+ import { useLatest } from 'ahooks';
3
3
  import { useConstantFn } from '../useConstantFn';
4
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
4
+ import { useContextUseCase } from '../useContextUseCase';
5
5
  export const useProvider = (statuses, context, store, reducers) => {
6
6
  const { value: entity } = store;
7
+ const { createContextValue } = useContextUseCase();
7
8
  const contextValue = useMemo(() => {
8
9
  void entity;
9
- if ((statuses & UseCaseStatuses.EntityEnabled) === UseCaseStatuses.EntityEnabled) {
10
- return {
11
- store,
12
- reducers,
13
- statuses,
14
- };
15
- }
16
- return { reducers, statuses };
17
- }, [statuses, entity, store, reducers]);
10
+ return createContextValue(store, reducers, statuses);
11
+ }, [statuses, entity, store, reducers, createContextValue]);
18
12
  const contextValueRef = useLatest(contextValue);
19
13
  return useConstantFn(({ children, with: withProviders = [] }) => {
20
14
  const { Provider: ContextProvider } = context;
21
- return React.createElement(ContextProvider, {
22
- value: contextValueRef.current,
23
- }, withProviders.reduceRight((currentChildren, withProvider) => {
15
+ const { current: value } = contextValueRef;
16
+ return React.createElement(ContextProvider, { value }, withProviders.reduceRight((currentChildren, withProvider) => {
24
17
  return React.createElement(withProvider, {}, currentChildren);
25
18
  }, children));
26
19
  });
@@ -1,4 +1,4 @@
1
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
1
+ import { Statuses } from '../../enums/Statuses';
2
2
  import { EntityGetter } from '../../hooks/useUseCase/types';
3
3
  import { EntityStore } from '@mic-rexjs/usecases';
4
- export declare const useRuntimeEntity: <T>(store: EntityStore<T>, rootEntity: T | EntityGetter<T>, contextEntity: T, statuses: UseCaseStatuses) => T;
4
+ export declare const useRuntimeEntity: <T>(store: EntityStore<T>, entityArg: T | EntityGetter<T>, contextEntity: T, statuses: Statuses) => T;
@@ -1,18 +1,18 @@
1
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
1
+ import { Statuses } from '../../enums/Statuses';
2
2
  import { useRef } from 'react';
3
- export const useRuntimeEntity = (store, rootEntity, contextEntity, statuses) => {
4
- const prevRootEntityRef = useRef(rootEntity);
5
- const entityRootDisabled = (statuses & UseCaseStatuses.EntityRootEnabled) !== UseCaseStatuses.EntityRootEnabled;
3
+ export const useRuntimeEntity = (store, entityArg, contextEntity, statuses) => {
4
+ const prevEntityArgRef = useRef(entityArg);
5
+ const entityRootDisabled = (statuses & Statuses.EntityRootEnabled) !== Statuses.EntityRootEnabled;
6
6
  if (entityRootDisabled) {
7
7
  return contextEntity;
8
8
  }
9
- const isFunction = typeof rootEntity === 'function';
10
- const { current: prevRootEntity } = prevRootEntityRef;
9
+ const isFunction = typeof entityArg === 'function';
10
+ const { current: prevEntityArg } = prevEntityArgRef;
11
11
  switch (true) {
12
12
  case isFunction:
13
- case prevRootEntity === rootEntity:
13
+ case prevEntityArg === entityArg:
14
14
  return store.value;
15
15
  }
16
- prevRootEntityRef.current = rootEntity;
17
- return rootEntity;
16
+ prevEntityArgRef.current = entityArg;
17
+ return entityArg;
18
18
  };
@@ -0,0 +1,5 @@
1
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
2
+ import { Statuses } from '../../enums/Statuses';
3
+ import { ContextValue } from '../../usecases/contextUseCase/types';
4
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
5
+ export declare const useStatuses: <T extends ReducerMap<import("@mic-rexjs/usecases").Reducer<unknown>>>(argumentTypes: ArgumentTypes, contextValue: ContextValue<T> | null) => Statuses;
@@ -0,0 +1,27 @@
1
+ import { ArgumentTypes } from '../../enums/ArgumentTypes';
2
+ import { Statuses } from '../../enums/Statuses';
3
+ import { useCreation } from 'ahooks';
4
+ export const useStatuses = (argumentTypes, contextValue) => {
5
+ return useCreation(() => {
6
+ let statuses = Statuses.None;
7
+ const { store } = (contextValue || {});
8
+ const hasEntity = (argumentTypes & ArgumentTypes.Entity) === ArgumentTypes.Entity;
9
+ const isGlobal = (argumentTypes & ArgumentTypes.Global) === ArgumentTypes.Global;
10
+ if (hasEntity && !isGlobal) {
11
+ statuses |= Statuses.EntityRootEnabled;
12
+ }
13
+ if (contextValue || isGlobal) {
14
+ statuses |= Statuses.ContextEnabled;
15
+ }
16
+ else {
17
+ statuses |= Statuses.RootEnabled;
18
+ }
19
+ if (store || isGlobal) {
20
+ statuses |= Statuses.EntityEnabled;
21
+ }
22
+ if (isGlobal) {
23
+ statuses |= Statuses.GlobalEnabled;
24
+ }
25
+ return statuses;
26
+ }, [argumentTypes, contextValue]);
27
+ };
@@ -1,41 +1,41 @@
1
1
  import { useCreation, useLatest } from 'ahooks';
2
- import { useContext } from 'react';
3
2
  import { useConstantFn } from '../useConstantFn';
4
3
  import { useProvider } from '../useProvider';
5
4
  import { initEntityReducers } from '../../methods/initEntityReducers';
6
- import { useUseCaseContext } from '../useUseCaseContext';
5
+ import { useContext } from '../useContext';
7
6
  import { useIsRenderingRef } from '../useIsRenderingRef';
8
- import { fillArguments } from '../../methods/fillArguments';
9
7
  import { useArgumentTypes } from '../useArgumentTypes';
10
- import { useUseCaseStatuses } from '../useUseCaseStatuses';
11
- import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
8
+ import { useStatuses } from '../useStatuses';
9
+ import { Statuses } from '../../enums/Statuses';
12
10
  import { useEntity } from '../useEntity';
13
11
  import { useContextualItem } from '../useContextualItem';
14
12
  import { cacheCalls } from '../../methods/cacheCalls';
15
13
  import { useCompareDeps } from '../useCompareDeps';
16
14
  import { captureCalls } from '../../methods/captureCalls';
15
+ import { useFullArguments } from '../useFullArguments';
16
+ import { useContextValue } from '../useContextValue';
17
17
  export const useUseCase = ((...args) => {
18
18
  const isRenderingRef = useIsRenderingRef();
19
19
  const argumentTypes = useArgumentTypes(args);
20
- const fullArguments = fillArguments(args, argumentTypes);
20
+ const fullArguments = useFullArguments(args, argumentTypes);
21
21
  const [unsafeEntity, unsafeUsecase, options, deps] = fullArguments;
22
22
  const unkownUsecase = useConstantFn(unsafeUsecase);
23
23
  const usecase = unkownUsecase;
24
24
  const entityUseCase = unkownUsecase;
25
- const context = useUseCaseContext(unkownUsecase, argumentTypes);
26
- const contextValue = useContext(context);
25
+ const context = useContext(unkownUsecase, argumentTypes);
26
+ const contextValue = useContextValue(context, argumentTypes);
27
27
  const entityContextValue = contextValue;
28
- const statuses = useUseCaseStatuses(argumentTypes, contextValue);
28
+ const statuses = useStatuses(argumentTypes, contextValue);
29
29
  const optionsRef = useLatest(options);
30
30
  const depsKey = useCompareDeps(deps);
31
31
  const { reducers: contextReducers = null } = contextValue || {};
32
32
  const { store: contextStore = null } = entityContextValue || {};
33
- const [entity, store] = useEntity(statuses, unsafeEntity, contextStore, options, depsKey);
33
+ const [entity, store] = useEntity(statuses, unsafeEntity, contextStore, options);
34
34
  const reducers = useContextualItem(contextReducers, statuses, () => {
35
35
  const opts = captureCalls(options, (key, callArgs) => {
36
36
  return optionsRef.current[key]?.(...callArgs);
37
37
  });
38
- if ((statuses & UseCaseStatuses.EntityEnabled) !== UseCaseStatuses.EntityEnabled) {
38
+ if ((statuses & Statuses.EntityEnabled) !== Statuses.EntityEnabled) {
39
39
  return usecase(opts);
40
40
  }
41
41
  const hookOptions = opts;
@@ -43,10 +43,10 @@ export const useUseCase = ((...args) => {
43
43
  }, depsKey);
44
44
  const Provider = useProvider(statuses, context, store, reducers);
45
45
  return useCreation(() => {
46
- if ((statuses & UseCaseStatuses.EntityEnabled) !== UseCaseStatuses.EntityEnabled) {
46
+ if ((statuses & Statuses.EntityEnabled) !== Statuses.EntityEnabled) {
47
47
  return reducers;
48
48
  }
49
- const rootEnabled = (statuses & UseCaseStatuses.RootEnabled) === UseCaseStatuses.RootEnabled;
49
+ const rootEnabled = (statuses & Statuses.RootEnabled) === Statuses.RootEnabled;
50
50
  const cachedReducers = cacheCalls(reducers, {
51
51
  onShouldCache() {
52
52
  return isRenderingRef.current;