@mic-rexjs/usecases-react 2.0.2 → 2.1.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 (102) 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/configs/defaultUseCaseContext/index.d.ts +2 -3
  5. package/es/configs/defaultUseCaseContext/types.d.ts +13 -12
  6. package/es/configs/useCaseContextReferenceMap/types.d.ts +5 -5
  7. package/es/enums/UseCaseArgumentTypes/index.d.ts +5 -0
  8. package/es/enums/UseCaseArgumentTypes/index.js +6 -0
  9. package/es/enums/UseCaseStatuses/index.d.ts +10 -0
  10. package/es/enums/UseCaseStatuses/index.js +18 -0
  11. package/es/hooks/useArgumentTypes/index.d.ts +3 -0
  12. package/es/hooks/useArgumentTypes/index.js +19 -0
  13. package/es/hooks/useContextualItem/index.d.ts +3 -0
  14. package/es/hooks/useContextualItem/index.js +13 -0
  15. package/es/hooks/useContextualItem/types.d.ts +3 -0
  16. package/es/hooks/useEntity/index.d.ts +4 -0
  17. package/es/hooks/useEntity/index.js +49 -0
  18. package/es/hooks/useGlobalUseCase/index.js +3 -8
  19. package/es/hooks/useGlobalUseCase/index.test.js +10 -30
  20. package/es/hooks/useGlobalUseCase/types.d.ts +7 -10
  21. package/es/hooks/useMemoizedCall/index.d.ts +2 -0
  22. package/es/hooks/useMemoizedCall/index.js +15 -0
  23. package/es/hooks/useProvider/index.d.ts +4 -4
  24. package/es/hooks/useProvider/index.js +22 -15
  25. package/es/hooks/useStatelessUseCase/index.js +2 -5
  26. package/es/hooks/useStatelessUseCase/index.test.js +4 -42
  27. package/es/hooks/useStatelessUseCase/types.d.ts +2 -4
  28. package/es/hooks/useUseCase/index.js +44 -74
  29. package/es/hooks/useUseCase/index.test.js +26 -1
  30. package/es/hooks/useUseCase/types.d.ts +32 -45
  31. package/es/hooks/useUseCaseContext/index.d.ts +5 -3
  32. package/es/hooks/useUseCaseContext/index.js +10 -3
  33. package/es/hooks/useUseCaseContext/index.test.js +39 -12
  34. package/es/hooks/useUseCaseStatuses/index.d.ts +6 -0
  35. package/es/hooks/useUseCaseStatuses/index.js +29 -0
  36. package/es/index.d.ts +1 -1
  37. package/es/methods/cacheCall/index.d.ts +2 -0
  38. package/es/methods/cacheCall/index.js +26 -0
  39. package/es/methods/cacheCall/types.d.ts +13 -0
  40. package/es/methods/cacheCalls/index.d.ts +2 -0
  41. package/es/methods/cacheCalls/index.js +8 -0
  42. package/es/methods/fillArguments/index.d.ts +5 -0
  43. package/es/methods/fillArguments/index.js +41 -0
  44. package/es/methods/fillArguments/types.d.ts +10 -0
  45. package/es/methods/fillArguments/types.js +1 -0
  46. package/es/methods/getRenderingEntity/index.d.ts +3 -0
  47. package/es/methods/getRenderingEntity/index.js +13 -0
  48. package/es/methods/initEntityReducers/index.d.ts +2 -3
  49. package/es/methods/initEntityReducers/index.js +2 -3
  50. package/es/methods/transformGlobalArguments/index.d.ts +3 -0
  51. package/es/methods/transformGlobalArguments/index.js +8 -0
  52. package/es/methods/transformGlobalArguments/types.d.ts +2 -0
  53. package/es/methods/transformGlobalArguments/types.js +1 -0
  54. package/es/methods/triggerCallbacks/index.d.ts +1 -1
  55. package/es/methods/triggerCallbacks/index.js +3 -3
  56. package/lib/enums/UseCaseArgumentTypes/index.js +13 -0
  57. package/lib/enums/UseCaseStatuses/index.js +25 -0
  58. package/lib/hooks/useArgumentTypes/index.js +31 -0
  59. package/lib/hooks/useContextualItem/index.js +21 -0
  60. package/lib/hooks/useEntity/index.js +63 -0
  61. package/lib/hooks/useGlobalUseCase/index.js +3 -10
  62. package/lib/hooks/useGlobalUseCase/index.test.js +8 -35
  63. package/lib/hooks/useMemoizedCall/index.js +22 -0
  64. package/lib/hooks/useProvider/index.js +24 -15
  65. package/lib/hooks/useStatelessUseCase/index.js +2 -12
  66. package/lib/hooks/useStatelessUseCase/index.test.js +2 -43
  67. package/lib/hooks/useUseCase/index.js +55 -82
  68. package/lib/hooks/useUseCase/index.test.js +56 -25
  69. package/lib/hooks/useUseCaseContext/index.js +12 -3
  70. package/lib/hooks/useUseCaseContext/index.test.js +45 -19
  71. package/lib/hooks/useUseCaseStatuses/index.js +36 -0
  72. package/lib/methods/cacheCall/index.js +42 -0
  73. package/lib/methods/cacheCalls/index.js +20 -0
  74. package/lib/methods/fillArguments/index.js +31 -0
  75. package/lib/methods/fillArguments/types.js +5 -0
  76. package/lib/methods/getRenderingEntity/index.js +20 -0
  77. package/lib/methods/initEntityReducers/index.js +2 -3
  78. package/lib/methods/transformGlobalArguments/index.js +21 -0
  79. package/lib/methods/transformGlobalArguments/types.js +5 -0
  80. package/lib/methods/triggerCallbacks/index.js +3 -3
  81. package/package.json +3 -3
  82. package/es/hooks/useChangeCallbackCollection/index.d.ts +0 -3
  83. package/es/hooks/useChangeCallbackCollection/index.js +0 -29
  84. package/es/methods/cacheReducerCalls/index.d.ts +0 -3
  85. package/es/methods/cacheReducerCalls/index.js +0 -26
  86. package/es/methods/cacheReducerCalls/types.d.ts +0 -11
  87. package/es/methods/getRootEntity/index.d.ts +0 -3
  88. package/es/methods/getRootEntity/index.js +0 -10
  89. package/es/methods/initEntityReducers/types.d.ts +0 -3
  90. package/es/methods/removeItem/index.d.ts +0 -1
  91. package/es/methods/removeItem/index.js +0 -7
  92. package/es/methods/toMaxArguments/index.d.ts +0 -3
  93. package/es/methods/toMaxArguments/index.js +0 -28
  94. package/lib/hooks/useChangeCallbackCollection/index.js +0 -37
  95. package/lib/methods/cacheReducerCalls/index.js +0 -45
  96. package/lib/methods/getRootEntity/index.js +0 -17
  97. package/lib/methods/removeItem/index.js +0 -14
  98. package/lib/methods/toMaxArguments/index.js +0 -25
  99. /package/es/{methods/cacheReducerCalls → hooks/useContextualItem}/types.js +0 -0
  100. /package/es/methods/{initEntityReducers → cacheCall}/types.js +0 -0
  101. /package/lib/{methods/cacheReducerCalls → hooks/useContextualItem}/types.js +0 -0
  102. /package/lib/methods/{initEntityReducers → cacheCall}/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
- !function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("react"),require("ahooks"),require("@mic-rexjs/usecases"));else if("function"==typeof define&&define.amd)define(["react","ahooks","@mic-rexjs/usecases"],r);else{var t="object"==typeof exports?r(require("react"),require("ahooks"),require("@mic-rexjs/usecases")):r(e.react,e.ahooks,e["@mic-rexjs/usecases"]);for(var n in t)("object"==typeof exports?exports:e)[n]=t[n]}}(this,((e,r,t)=>(()=>{"use strict";var n={251:(e,r,t)=>{var n=t(156),o=Symbol.for("react.element"),u=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),a=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};r.jsx=function(e,r,t){var n,c={},l=null,f=null;for(n in void 0!==t&&(l=""+t),void 0!==r.key&&(l=""+r.key),void 0!==r.ref&&(f=r.ref),r)u.call(r,n)&&!i.hasOwnProperty(n)&&(c[n]=r[n]);if(e&&e.defaultProps)for(n in r=e.defaultProps)void 0===c[n]&&(c[n]=r[n]);return{$$typeof:o,type:e,key:l,ref:f,props:c,_owner:a.current}}},521:(e,r,t)=>{e.exports=t(251)},112:e=>{e.exports=t},749:e=>{e.exports=r},156:r=>{r.exports=e}},o={};function u(e){var r=o[e];if(void 0!==r)return r.exports;var t=o[e]={exports:{}};return n[e](t,t.exports,u),t.exports}u.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return u.d(r,{a:r}),r},u.d=(e,r)=>{for(var t in r)u.o(r,t)&&!u.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},u.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),u.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{u.r(a),u.d(a,{UseCaseFragment:()=>E,useGlobalUseCase:()=>k,useStatelessUseCase:()=>M,useUseCase:()=>A});var e=u(521),r=u(156),t=u.n(r);function n(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}function o(e,r){if(e){if("string"==typeof e)return n(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,r):void 0}}function i(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,o,u,a,i=[],c=!0,l=!1;try{if(u=(t=t.call(e)).next,0===r){if(Object(t)!==t)return;c=!1}else for(;!(c=(n=u.call(t)).done)&&(i.push(n.value),i.length!==r);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=t.return&&(a=t.return(),Object(a)!==a))return}finally{if(l)throw o}}return i}}(e,r)||o(e,r)||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.")}()}var c,l=u(749),f=function(e){return i((0,r.useState)(e),1)[0]},s=function(e){return i((0,r.useState)((function(){return e})),1)[0]};!function(e){e[e.Normal=2]="Normal",e[e.Stateless=4]="Stateless",e[e.Global=8]="Global",e[e.StatelessGlobal=12]="StatelessGlobal"}(c||(c={}));var y=function(e,r){var t=e.length;if(t!==r.length)return!1;for(var n=0;n<t;n++)if(e[n]!==r[n])return!1;return!0},v=function(e){var t=(0,r.useRef)(0),n=(0,r.useRef)([]),o=n.current,u=y(e,o);return n.current=e,t.current+=u?0:1,t.current};function p(e){return p="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},p(e)}function b(e,r,t){return(r=function(e){var r=function(e,r){if("object"!==p(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!==p(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===p(r)?r:String(r)}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var m=u(112),d=["watch","onChange","options"];function h(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function g(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?h(Object(t),!0).forEach((function(r){b(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):h(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var O=new Map,j=(0,r.createContext)(null),S=function(e,r){for(var t={},n={},o=function(){var e=i(a[u],2),o=e[0],c=e[1];n[o]=function(){for(var e=t[o],n=r(),u=arguments.length,a=new Array(u),i=0;i<u;i++)a[i]=arguments[i];if(e&&n){var l=e.parameters,f=e.returnValue;if(y(l,a))return f}var s=c.apply(void 0,a);return n&&(t[o]={parameters:a,returnValue:s}),s}},u=0,a=Object.entries(e);u<a.length;u++)o();return n},w=function(e,r){var t=e.indexOf(r);-1!==t&&e.splice(t,1)};function C(e){return function(e){if(Array.isArray(e))return n(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(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.")}()}var x=function(e,r){return"object"===p(e)&&null!==e&&Object.hasOwn(e,r)},P=function e(r,t,n,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],a=void 0,c=i(n.match(/^([^.]+)\.(.+)$/)||[],3),l=c[1],f=void 0===l?n:l,s=c[2],y=void 0===s?"":s,v=x(r,f),p=x(t,f),b=[].concat(C(u),[f]);if(v||p){var m=v?r[f]:a,d=p?t[f]:a;if(y)return void e(m,d,y,o,b);if(m===d)return;o(m,d,b)}else if(!/^\d+^/.test(f))for(var h=Array.isArray(r)?r:[],g=Array.isArray(t)?t:[],O=h.length,j=g.length,S=Math.max(O,j),w=0;w<S;w++)e(h[w],g[w],n,o,[].concat(C(u),["".concat(w)]))},_=function(e,r,t){for(var n=function(){var e=i(u[o],2),n=e[0],a=e[1];P(t,r,n,(function(e,n,o){a({fieldPaths:o,newEntity:r,oldEntity:t,newValue:n,oldValue:e})}))},o=0,u=Object.entries(e);o<u.length;o++)n()},A=function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];var u,a=function(e){var r=i(e,5),t=r[0],n=r[1],o=r[2],u=r[3],a=r[4];return"function"!=typeof n?[null,t,c.Normal,n||{},o||[]]:"number"==typeof o?[t,n,o,u||{},a||[]]:[t,n,c.Normal,o||{},u||[]]}(n),y=i(a,5),p=y[0],b=y[1],h=y[2],C=y[3],x=y[4],P=i((0,r.useState)(p),2),A=P[0],E=P[1],k=s(b),M=k,R=f(h),G=v(x),I=((u=(0,r.useRef)(!0)).current=!0,(0,r.useEffect)((function(){u.current=!1})),u),U=f("function"==typeof n[1]),F=function(e,t){var n=O,o=f((function(){if(n.has(e)){var o=n.get(e),u=o.value,a=o.times;return n.set(e,{value:u,times:a+1}),u}if(t)return t;var i=(0,r.createContext)(null);return n.set(e,{value:i,times:1}),i}));return(0,l.useUnmount)((function(){if(n.has(e)){var r=n.get(e),t=r.value,u=r.times;o===t&&(1!==u?n.set(e,{value:t,times:u-1}):n.delete(e))}})),o}(M,U?null:j),T=(0,r.useContext)(F),N=null!==T,q=(null==T?void 0:T())||{},D=q.entity,z=q.reducers,L=void 0===z?null:z,V=q.changeCallbackCollection,$=U||N,B=function(e,r,t){var n=(0,l.useCreation)((function(){return e?[]:r}),[r,e]),o=(0,l.useMemoizedFn)((function(e,r){var n=t.onChange,o=t.watch;o&&_(o,e,r),null==n||n(e,r)})),u=(0,l.usePrevious)(n);return(0,l.useCreation)((function(){u&&w(u,o),n.push(o)}),[o,n,u]),(0,l.useUnmount)((function(){w(n,o)})),n}(U||!N,void 0===V?null:V,C),W=(0,l.useCreation)((function(){return U?function(e,r,t){return(t&c.Stateless)!==c.Stateless?e:"function"==typeof r?r():r}(A,p,R):D}),[U,D,R,A,p]),Y=(0,l.useMemoizedFn)((function(e,r){(R&c.Stateless)!==c.Stateless&&E(e),function(e,r,t){for(var n=e.length;n>0;n--)e[n-1](r,t)}(B,e,r)})),H=(0,l.useMemoizedFn)((function(){return function(e,r,t,n){t.watch,t.onChange;var o=t.options,u=function(e,r){if(null==e)return{};var t,n,o=function(e,r){if(null==e)return{};var t,n,o={},u=Object.keys(e);for(n=0;n<u.length;n++)t=u[n],r.indexOf(t)>=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(n=0;n<u.length;n++)t=u[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(t,d);return(0,m.createEntityReducers)(e,r,g(g(g({},u),o),{},{onChange:n,onGenerate:function(e,r){return r}}))}(W,M,C,Y)})),J=(0,l.useMemoizedFn)((function(){return k(C)})),K=(0,l.useCreation)((function(){return U?H():null}),[U,G,H]),Q=(0,l.useCreation)((function(){return K||L||{}}),[K,L]),X=(0,l.useCreation)((function(){return $?{}:J()}),[$,G,J]),Z=function(e,n,o,u,a){var i=(n&c.Global)===c.Global,f=(0,l.useLatest)({entity:o,reducers:u,changeCallbackCollection:a}),y=v(i?[]:[o,u,a]),p=(0,r.useCallback)((function(){return f.current}),[y,f]),b=(0,l.useLatest)(p);return s((function(r){var n=r.children,o=r.with,u=void 0===o?[]:o,a=e.Provider;return t().createElement(a,{value:b.current},u.reduceRight((function(e,r){return t().createElement(r,{},e)}),n))}))}(F,R,W,Q,B),ee=(0,l.useMemoizedFn)((function(e,r){return[e,S(r,(function(){return I.current})),U?Z:null]}));return(0,l.useCreation)((function(){return $?ee(W,Q):X}),[$,W,Q,X,ee])},E=function(t){var n=t.usecase,o=t.watch,u=t.onChange;return A(n,{watch:o,onChange:u}),(0,e.jsx)(r.Fragment,{})},k=function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];var n=r[0],o=r[1],u=r.slice(2),a="function"==typeof o,i=A.apply(void 0,C(a?[n,o,c.Global].concat(C(u)):r));return a?i:i[1]},M=function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];var n=r[0],o=r[1],u=r.slice(2),a="function"==typeof o;return A.apply(void 0,C(a?[n,o,c.Stateless].concat(C(u)):r))}})(),a})()));
2
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("react"),require("ahooks"),require("@mic-rexjs/usecases"));else if("function"==typeof define&&define.amd)define(["react","ahooks","@mic-rexjs/usecases"],t);else{var n="object"==typeof exports?t(require("react"),require("ahooks"),require("@mic-rexjs/usecases")):t(e.react,e.ahooks,e["@mic-rexjs/usecases"]);for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(this,((e,t,n)=>(()=>{"use strict";var r={251:(e,t,n)=>{var r=n(156),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};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)a.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:u.current}}},893:(e,t,n)=>{e.exports=n(251)},112:e=>{e.exports=n},749:e=>{e.exports=t},156:t=>{t.exports=e}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var u={};return(()=>{a.r(u),a.d(u,{UseCaseFragment:()=>A,useGlobalUseCase:()=>G,useStatelessUseCase:()=>N,useUseCase:()=>_});var e=a(893),t=a(156),n=a.n(t);function r(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 o(e,t){if(e){if("string"==typeof e)return r(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)?r(e,t):void 0}}function i(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,a,u,i=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.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&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return i}}(e,t)||o(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.")}()}var l,c=a(749),f=function(e){return i((0,t.useState)(e),1)[0]},s=function(e){return i((0,t.useState)((function(){return e})),1)[0]};function b(e){return b="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},b(e)}function y(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==b(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==b(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===b(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}!function(e){e[e.None=0]="None",e[e.RootEnabled=2]="RootEnabled",e[e.ContextEnabled=4]="ContextEnabled",e[e.EntityEnabled=8]="EntityEnabled",e[e.ContextRootEnabled=22]="ContextRootEnabled",e[e.EntityRootEnabled=62]="EntityRootEnabled",e[e.StatelessEnabled=72]="StatelessEnabled",e[e.GlobalEnabled=150]="GlobalEnabled"}(l||(l={}));var d=a(112),v=["watch","onChange","options"];function E(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 p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?E(Object(n),!0).forEach((function(t){y(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var m,h,S=new Map;!function(e){e[e.None=0]="None",e[e.Entity=2]="Entity",e[e.Mode=4]="Mode"}(m||(m={})),function(e){e[e.Normal=2]="Normal",e[e.Stateless=4]="Stateless",e[e.Global=8]="Global",e[e.StatelessGlobal=12]="StatelessGlobal"}(h||(h={}));var g=(0,t.createContext)(null),O=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,a=void 0===o?function(){return!0}:o,u=r.onCompare,i=void 0===u?function(e,t){return O(e,t)}:u;return function(){for(var t=a(),r=arguments.length,o=new Array(r),u=0;u<r;u++)o[u]=arguments[u];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}},w=function(e,n,r){var o,a,u,i=(o=r,a=function(e){var n=(0,t.useRef)(0),r=(0,t.useRef)([]),o=r.current,a=O(e,o);return r.current=e,n.current+=a?0:1,n.current}(arguments.length>3&&void 0!==arguments[3]?arguments[3]:[]),u=(0,c.useLatest)(o),(0,c.useCreation)((function(){return j(u.current,{onCompare:function(){return!0}})}),[a,u]));return(0,c.useCreation)((function(){return(e&l.RootEnabled)!==l.RootEnabled&&n?n:i()}),[e,n,i])};function x(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||o(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.")}()}var C=function(e,t){return"object"===b(e)&&null!==e&&Object.hasOwn(e,t)},R=function e(t,n,r,o){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],u=void 0,l=i(r.match(/^([^.]+)\.(.+)$/)||[],3),c=l[1],f=void 0===c?r:c,s=l[2],b=void 0===s?"":s,y=C(t,f),d=C(n,f),v=[].concat(x(a),[f]);if(y||d){var E=y?t[f]:u,p=d?n[f]:u;if(b)return void e(E,p,b,o,v);if(E===p)return;o(E,p,v)}else if(!/^\d+^/.test(f))for(var m=Array.isArray(t)?t:[],h=Array.isArray(n)?n:[],S=m.length,g=h.length,O=Math.max(S,g),j=0;j<O;j++)e(m[j],h[j],r,o,[].concat(x(a),["".concat(j)]))},P=function(e,t,n){for(var r=function(){var e=i(a[o],2),r=e[0],u=e[1];R(n,t,r,(function(e,r,o){u({fieldPaths:o,newEntity:t,oldEntity:n,newValue:r,oldValue:e})}))},o=0,a=Object.entries(e);o<a.length;o++)r()},_=function(){for(var e,r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];var u,y=function(e){return f((function(){var t=m.None,n=i(e,3),r=n[1],o=n[2],a=b(r);switch("function"===a&&(t|=m.Entity),"number"){case a:case b(o):t|=m.Mode}return t}))}(o),E=function(e,t){var n=i(e,5),r=n[0],o=n[1],a=n[2],u=n[3],l=n[4],c=(t&m.Entity)===m.Entity,f=(t&m.Mode)===m.Mode;return c?f?[r,o,a,u||{},l||[]]:[r,o,h.Normal,a||{},u||[]]:f?[null,r,o,a||{},u||[]]:[null,r,h.Normal,o||{},a||[]]}(o,y),O=i(E,5),x=O[0],C=O[1],R=O[2],_=O[3],A=O[4],G=s(C),N=G,k=G,M=((u=(0,t.useRef)(!0)).current=!0,(0,t.useEffect)((function(){u.current=!1})),u),I=f(R),T=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m.None,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.Normal,o=S,a=f((function(){if(o.has(e)){var a=o.get(e),u=a.value,i=a.times;return o.set(e,{value:u,times:i+1}),u}switch(!0){case(r&h.Global)===h.Global:case(n&m.Entity)===m.Entity:break;default:return g}var l=(0,t.createContext)(null);return o.set(e,{value:l,times:1}),l}));return(0,c.useUnmount)((function(){if(o.has(e)){var t=o.get(e),n=t.value,r=t.times;a===n&&(1!==r?o.set(e,{value:n,times:r-1}):o.delete(e))}})),a}(G,y,I),U=(null===(e=(0,t.useContext)(T))||void 0===e?void 0:e())||null,L=U,V=function(e,t,n){return(0,c.useCreation)((function(){var r=l.None,o=(n||{}).store;return(e&m.Entity)===m.Entity&&(r|=l.EntityRootEnabled),r|=null===n?l.RootEnabled:l.ContextEnabled,o&&(r|=l.EntityEnabled),(t&h.Stateless)===h.Stateless&&(r|=l.StatelessEnabled),(t&h.Global)===h.Global&&(r|=l.GlobalEnabled),r}),[e,n,t])}(y,I,U),q=(U||{}).reducers,D=void 0===q?null:q,$=(L||{}).store,F=i(function(e,n,r,o){var a=i((0,t.useState)(n),2),u=a[0],f=a[1],s=(null==r?void 0:r.getValue())||null,b=function(e,t,n,r){return(e&l.EntityRootEnabled)!==l.EntityRootEnabled?r:(e&l.StatelessEnabled)!==l.StatelessEnabled?t:"function"==typeof n?n():n}(e,u,n,s),y=(0,c.useLatest)(o),v=(e&l.EntityRootEnabled)===l.EntityRootEnabled,E=w(e,r,(function(){if(!v)return new d.EntityStore(null);var t=(e&l.StatelessEnabled)===l.StatelessEnabled;return new d.EntityStore(b,(function(e){t||f(e)}))}));return v&&E.setValue(b),(0,t.useEffect)((function(){if((e&l.EntityEnabled)===l.EntityEnabled){var t=function(e,t){var n=y.current,r=n.onChange,o=n.watch;o&&P(o,e,t),null==r||r(e,t)};return E.watch(t),function(){E.unwatch(t)}}}),[e,E,y]),(0,c.useCreation)((function(){return[b,E]}),[b,E])}(V,x,void 0===$?null:$,_),2),B=F[0],W=F[1],Y=w(V,D,(function(){return(V&l.EntityEnabled)!==l.EntityEnabled?N(_):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={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(n,v);return(0,d.createEntityReducers)(t,e,p(p(p({},o),r),{},{onGenerate:function(e,t){return t}}))}(k,W,_)}),A),z=function(e,r,o,a){var u=o.getValue(),i=(0,t.useMemo)((function(){return(e&l.EntityEnabled)===l.EntityEnabled?{store:o,reducers:a}:{reducers:a}}),[e,u,o,a]),f=(e&l.GlobalEnabled)===l.GlobalEnabled?null:i,b=(0,c.useLatest)(i),y=(0,t.useCallback)((function(){return b.current}),[f,b]),d=(0,c.useLatest)(y);return s((function(e){var t=e.children,o=e.with,a=void 0===o?[]:o,u=r.Provider;return n().createElement(u,{value:d.current},a.reduceRight((function(e,t){return n().createElement(t,{},e)}),t))}))}(V,T,W,Y);return(0,c.useCreation)((function(){if((V&l.ContextEnabled)!==l.ContextEnabled)return Y;var e=(V&l.RootEnabled)===l.RootEnabled;if((V&l.EntityEnabled)!==l.EntityEnabled)return e?[Y,z]:Y;var t=function(e,t){var n={};return Object.entries(e).forEach((function(e){var r=i(e,2),o=r[0],a=r[1];n[o]=j(a,t)})),n}(Y,{onShouldCache:function(){return M.current}});return e?[B,t,z]:[B,t]}),[V,B,Y,z,M])},A=function(n){var r=n.usecase,o=n.watch,a=n.onChange;return _(r,{watch:o,onChange:a}),(0,e.jsx)(t.Fragment,{})},G=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=function(e){var t=i(e,4),n=t[0],r=t[1],o=t[2],a=t[3];return"function"==typeof r?[n,r,h.Global,o,a]:[n,h.Global,r,o]}(t);return _.apply(void 0,x(r))},N=function(e,t,n,r){return _(e,t,h.Stateless,n,r)}})(),u})()));
@@ -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';
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';
1
+ import { EntityReducerMap, EntityUseCase, UseCase } from '@mic-rexjs/usecases';
2
2
  import { EntityWatchMap } from '../../hooks/useUseCase/types';
3
- export interface UseCaseFragmentProps<T, TEntityReducers extends EntityReducers<T>> {
4
- usecase: EntityUseCase<T, TEntityReducers> & UseCase<EntityReducers<T>>;
3
+ export interface UseCaseFragmentProps<T, TEntityReducers extends EntityReducerMap<T>> {
4
+ usecase: EntityUseCase<T, TEntityReducers> & UseCase<EntityReducerMap<T>>;
5
5
  watch?: EntityWatchMap<T>;
6
6
  onChange?(newEntity: T, oldEntity: T): void;
7
7
  }
@@ -1,3 +1,2 @@
1
- import { EntityReducers } from '@mic-rexjs/usecases';
2
- import { UseCaseContext } from './types';
3
- export declare const defaultUseCaseContext: UseCaseContext<unknown, EntityReducers<unknown>>;
1
+ /// <reference types="react" />
2
+ export declare const defaultUseCaseContext: import("react").Context<null>;
@@ -1,19 +1,20 @@
1
1
  /// <reference types="react" />
2
- import { AsyncEntityGenerator, EntityGenerator, EntityReducer, EntityReducers } from '@mic-rexjs/usecases';
3
- export type ContextualEntityReducer<T, TReducer extends EntityReducer<T>> = TReducer extends (entity: T, ...args: infer TArgs) => infer TReturn ? (...args: TArgs) => TReturn extends AsyncEntityGenerator<T, infer TResult> ? Promise<TResult> : TReturn extends EntityGenerator<T, infer TResult> ? TResult : TReturn : never;
4
- export type ContextualEntityReducers<T, TEntityReducers extends EntityReducers<T>> = {
5
- [K in keyof TEntityReducers]: ContextualEntityReducer<T, TEntityReducers[K]>;
6
- };
2
+ import { AsyncEntityGenerator, EntityGenerator, EntityReducer, EntityReducerMap, EntityStore, ReducerMap } from '@mic-rexjs/usecases';
7
3
  export interface ChangeCallback<T> {
8
4
  (newEntity: T, oldEntity: T): void;
9
5
  }
10
- export interface UseCaseContextValue<T, TEntityReducers extends EntityReducers<T>> {
11
- entity?: T;
12
- reducers?: ContextualEntityReducers<T, TEntityReducers>;
13
- changeCallbackCollection?: ChangeCallback<T>[];
6
+ export type ContextualEntityReducer<T, TEntityReducer extends EntityReducer<T>> = TEntityReducer extends (entity: infer TEntity, ...args: infer TArgs) => infer TReturn ? (...args: TArgs) => TReturn extends AsyncEntityGenerator<TEntity, infer TResult> ? Promise<TResult> : TReturn extends EntityGenerator<TEntity, infer TResult> ? TResult : TReturn : never;
7
+ export type ContextualEntityReducers<T, TEntityReducers extends EntityReducerMap<T>> = {
8
+ [K in keyof TEntityReducers]: ContextualEntityReducer<T, TEntityReducers[K]>;
9
+ };
10
+ export interface UseCaseContextValue<T extends ReducerMap> {
11
+ reducers: T;
12
+ }
13
+ export interface EntityUseCaseContextValue<T, TEntityReducers extends EntityReducerMap<T>> extends UseCaseContextValue<ContextualEntityReducers<T, TEntityReducers>> {
14
+ store: EntityStore<T>;
14
15
  }
15
- export interface UseCaseContextValueGetter<T, TEntityReducers extends EntityReducers<T>> {
16
- (): UseCaseContextValue<T, TEntityReducers>;
16
+ export interface UseCaseContextValueGetter<T> {
17
+ (): T;
17
18
  }
18
- export interface UseCaseContext<T, TEntityReducers extends EntityReducers<T>> extends React.Context<UseCaseContextValueGetter<T, TEntityReducers> | null> {
19
+ export interface UseCaseContext<T> extends React.Context<UseCaseContextValueGetter<T> | null> {
19
20
  }
@@ -1,8 +1,8 @@
1
- import { EntityReducers, EntityUseCase } from '@mic-rexjs/usecases';
2
- import { UseCaseContext } from '../defaultUseCaseContext/types';
3
- export interface UseCaseContextReference<T, TEntityReducers extends EntityReducers<T>, TContext extends UseCaseContext<T, TEntityReducers> = UseCaseContext<T, TEntityReducers>> {
4
- value: TContext;
1
+ import { ReducerMap, UseCase } from '@mic-rexjs/usecases';
2
+ import { UseCaseContext, UseCaseContextValue } from '../defaultUseCaseContext/types';
3
+ export interface UseCaseContextReference<T> {
4
+ value: UseCaseContext<T>;
5
5
  times: number;
6
6
  }
7
- export interface UseCaseContextReferenceMap<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object, TContext extends UseCaseContext<T, TEntityReducers> = UseCaseContext<T, TEntityReducers>> extends Map<EntityUseCase<T, TEntityReducers, TUseCaseOptions>, UseCaseContextReference<T, TEntityReducers, TContext>> {
7
+ export interface UseCaseContextReferenceMap<T extends ReducerMap, TUseCaseOptions extends object, TContextValue extends UseCaseContextValue<T> = UseCaseContextValue<T>, TKey extends UseCase<T, TUseCaseOptions> = UseCase<T, TUseCaseOptions>, TValue extends UseCaseContextReference<TContextValue> = UseCaseContextReference<TContextValue>> extends Map<TKey, TValue> {
8
8
  }
@@ -0,0 +1,5 @@
1
+ export declare enum UseCaseArgumentTypes {
2
+ None = 0,
3
+ Entity = 2,
4
+ Mode = 4
5
+ }
@@ -0,0 +1,6 @@
1
+ export var UseCaseArgumentTypes;
2
+ (function (UseCaseArgumentTypes) {
3
+ UseCaseArgumentTypes[UseCaseArgumentTypes["None"] = 0] = "None";
4
+ UseCaseArgumentTypes[UseCaseArgumentTypes["Entity"] = 2] = "Entity";
5
+ UseCaseArgumentTypes[UseCaseArgumentTypes["Mode"] = 4] = "Mode";
6
+ })(UseCaseArgumentTypes || (UseCaseArgumentTypes = {}));
@@ -0,0 +1,10 @@
1
+ export declare enum UseCaseStatuses {
2
+ None = 0,
3
+ RootEnabled = 2,
4
+ ContextEnabled = 4,
5
+ EntityEnabled = 8,
6
+ ContextRootEnabled = 22,
7
+ EntityRootEnabled = 62,
8
+ StatelessEnabled = 72,
9
+ GlobalEnabled = 150
10
+ }
@@ -0,0 +1,18 @@
1
+ export var UseCaseStatuses;
2
+ (function (UseCaseStatuses) {
3
+ UseCaseStatuses[UseCaseStatuses["None"] = 0] = "None";
4
+ // 是否需要初始化根 `redurcers`
5
+ UseCaseStatuses[UseCaseStatuses["RootEnabled"] = 2] = "RootEnabled";
6
+ // 是否为上下文模式
7
+ UseCaseStatuses[UseCaseStatuses["ContextEnabled"] = 4] = "ContextEnabled";
8
+ // 是否有 `entity`
9
+ UseCaseStatuses[UseCaseStatuses["EntityEnabled"] = 8] = "EntityEnabled";
10
+ // 是否为需要提供 `Provider` 去挂载根 `context`
11
+ UseCaseStatuses[UseCaseStatuses["ContextRootEnabled"] = 22] = "ContextRootEnabled";
12
+ // 是否初始化与 `entity` 相关的 `reducers`
13
+ UseCaseStatuses[UseCaseStatuses["EntityRootEnabled"] = 62] = "EntityRootEnabled";
14
+ // 是否不需要 `entity` 状态管理
15
+ UseCaseStatuses[UseCaseStatuses["StatelessEnabled"] = 72] = "StatelessEnabled";
16
+ // 是否为全局模式
17
+ UseCaseStatuses[UseCaseStatuses["GlobalEnabled"] = 150] = "GlobalEnabled";
18
+ })(UseCaseStatuses || (UseCaseStatuses = {}));
@@ -0,0 +1,3 @@
1
+ import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
2
+ import { UseCaseHookParameters } from '../useUseCase/types';
3
+ export declare const useArgumentTypes: (args: UseCaseHookParameters) => UseCaseArgumentTypes;
@@ -0,0 +1,19 @@
1
+ import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
2
+ import { useConstant } from '../useConstant';
3
+ export const useArgumentTypes = (args) => {
4
+ return useConstant(() => {
5
+ let types = UseCaseArgumentTypes.None;
6
+ const [, arg2, arg3] = args;
7
+ const type2 = typeof arg2;
8
+ if (type2 === 'function') {
9
+ types |= UseCaseArgumentTypes.Entity;
10
+ }
11
+ switch ('number') {
12
+ case type2:
13
+ case typeof arg3:
14
+ types |= UseCaseArgumentTypes.Mode;
15
+ break;
16
+ }
17
+ return types;
18
+ });
19
+ };
@@ -0,0 +1,3 @@
1
+ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
2
+ import { CreateContextualItemFactory } from './types';
3
+ export declare const useContextualItem: <T>(statuses: UseCaseStatuses, contextItem: T | null, createFactory: CreateContextualItemFactory<T>, deps?: unknown[]) => T;
@@ -0,0 +1,13 @@
1
+ import { useCreation } from 'ahooks';
2
+ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
3
+ import { useMemoizedCall } from '../useMemoizedCall';
4
+ export const useContextualItem = (statuses, contextItem, createFactory, deps = []) => {
5
+ const create = useMemoizedCall(createFactory, deps);
6
+ return useCreation(() => {
7
+ const rootEnabled = (statuses & UseCaseStatuses.RootEnabled) === UseCaseStatuses.RootEnabled;
8
+ if (!rootEnabled && contextItem) {
9
+ return contextItem;
10
+ }
11
+ return create();
12
+ }, [statuses, contextItem, create]);
13
+ };
@@ -0,0 +1,3 @@
1
+ export interface CreateContextualItemFactory<T> {
2
+ (): T;
3
+ }
@@ -0,0 +1,4 @@
1
+ import { EntityStore } from '@mic-rexjs/usecases';
2
+ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
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) => [entity: T, store: EntityStore<T>];
@@ -0,0 +1,49 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { EntityStore } from '@mic-rexjs/usecases';
3
+ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
4
+ import { getRenderingEntity } from '../../methods/getRenderingEntity';
5
+ import { useContextualItem } from '../useContextualItem';
6
+ import { useCreation, useLatest } from 'ahooks';
7
+ import { triggerWatchers } from '../../methods/triggerWatchers';
8
+ export const useEntity = (statuses, rootEntity, contextStore, options) => {
9
+ const [entityState, setEntityState] = useState(rootEntity);
10
+ const contextEntity = (contextStore?.getValue() || null);
11
+ const renderingEntity = getRenderingEntity(statuses, entityState, rootEntity, contextEntity);
12
+ const optionsRef = useLatest(options);
13
+ const entityRootEnabled = (statuses & UseCaseStatuses.EntityRootEnabled) === UseCaseStatuses.EntityRootEnabled;
14
+ const store = useContextualItem(statuses, contextStore, () => {
15
+ if (!entityRootEnabled) {
16
+ return new EntityStore(null);
17
+ }
18
+ const stateless = (statuses & UseCaseStatuses.StatelessEnabled) === UseCaseStatuses.StatelessEnabled;
19
+ return new EntityStore(renderingEntity, (newEntity) => {
20
+ if (stateless) {
21
+ return;
22
+ }
23
+ setEntityState(newEntity);
24
+ });
25
+ });
26
+ if (entityRootEnabled) {
27
+ // 执行同步操作
28
+ store.setValue(renderingEntity);
29
+ }
30
+ useEffect(() => {
31
+ if ((statuses & UseCaseStatuses.EntityEnabled) !== UseCaseStatuses.EntityEnabled) {
32
+ return;
33
+ }
34
+ const watcher = (newEntity, oldEntity) => {
35
+ const { onChange, watch } = optionsRef.current;
36
+ if (watch) {
37
+ triggerWatchers(watch, newEntity, oldEntity);
38
+ }
39
+ onChange?.(newEntity, oldEntity);
40
+ };
41
+ store.watch(watcher);
42
+ return () => {
43
+ store.unwatch(watcher);
44
+ };
45
+ }, [statuses, store, optionsRef]);
46
+ return useCreation(() => {
47
+ return [renderingEntity, store];
48
+ }, [renderingEntity, store]);
49
+ };
@@ -1,11 +1,6 @@
1
1
  import { useUseCase } from '../useUseCase';
2
- import { UseCaseModes } from '../../enums/UseCaseModes';
2
+ import { transformGlobalArguments } from '../../methods/transformGlobalArguments';
3
3
  export const useGlobalUseCase = ((...args) => {
4
- const [arg1, arg2, ...rest] = args;
5
- const isContextRoot = typeof arg2 === 'function';
6
- const coreCollection = useUseCase(...(isContextRoot ? [arg1, arg2, UseCaseModes.Global, ...rest] : args));
7
- if (isContextRoot) {
8
- return coreCollection;
9
- }
10
- return coreCollection[1];
4
+ const transformedArgs = transformGlobalArguments(args);
5
+ return useUseCase(...transformedArgs);
11
6
  });
@@ -1,14 +1,15 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
1
  import { useGlobalUseCase } from '.';
3
2
  import { entityUseCase } from '@mic-rexjs/usecases';
4
3
  import { describe, expect, jest, test } from '@jest/globals';
5
4
  import { UseCaseModes } from '../../enums/UseCaseModes';
6
- import { render, renderHook } from '@testing-library/react';
7
- import { useMount } from 'ahooks';
5
+ import { renderHook } from '@testing-library/react';
8
6
  import * as useUseCaseModule from '../useUseCase';
9
7
  const numberUseCase = () => {
10
8
  return entityUseCase();
11
9
  };
10
+ const mathUseCase = () => {
11
+ return {};
12
+ };
12
13
  describe('useGlobalUseCase', () => {
13
14
  describe('`useGlobalUseCase` should work the same as `RootCoreCollectionHook`', () => {
14
15
  test('check `useUseCase` has received correct arguments', () => {
@@ -17,7 +18,7 @@ describe('useGlobalUseCase', () => {
17
18
  renderHook(() => {
18
19
  useGlobalUseCase(1, numberUseCase);
19
20
  });
20
- expect(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, UseCaseModes.Global);
21
+ expect(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, UseCaseModes.Global, void 0, void 0);
21
22
  jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
22
23
  });
23
24
  test('should should return `CoreCollection` with Provider', () => {
@@ -31,41 +32,20 @@ describe('useGlobalUseCase', () => {
31
32
  setEntity: expect.any(Function),
32
33
  },
33
34
  expect.any(Function),
35
+ void 0,
36
+ void 0,
34
37
  ]);
35
38
  });
36
39
  });
37
- describe('`useGlobalUseCase` should work the same as `GlobalReducersHook`', () => {
40
+ describe('`useGlobalUseCase` should work the same as `GlobalPseudoCoreCollectionHook`', () => {
38
41
  test('check `useUseCase` has received correct arguments', () => {
39
42
  const useMockedUseCase = jest.fn();
40
43
  jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
41
44
  renderHook(() => {
42
- try {
43
- useGlobalUseCase(numberUseCase);
44
- }
45
- catch (e) {
46
- //
47
- }
45
+ useGlobalUseCase(mathUseCase);
48
46
  });
49
- expect(useMockedUseCase).toHaveBeenCalledWith(numberUseCase);
47
+ expect(useMockedUseCase).toHaveBeenCalledWith(mathUseCase, UseCaseModes.Global, void 0, void 0);
50
48
  jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
51
49
  });
52
- test('should should only return reducers', () => {
53
- const onChildMount = jest.fn();
54
- const Child = () => {
55
- const reducers = useGlobalUseCase(numberUseCase);
56
- useMount(() => {
57
- onChildMount(reducers);
58
- });
59
- return null;
60
- };
61
- const Parent = () => {
62
- const [, , Provider] = useGlobalUseCase(1, numberUseCase);
63
- return (_jsx(Provider, { children: _jsx(Child, {}) }));
64
- };
65
- render(_jsx(Parent, {}));
66
- expect(onChildMount).toHaveBeenCalledWith({
67
- setEntity: expect.any(Function),
68
- });
69
- });
70
50
  });
71
51
  });
@@ -1,12 +1,9 @@
1
- import { EntityReducers } from '@mic-rexjs/usecases';
2
- import { ContextualCoreCollectionHookParameters, RootCoreCollectionHook, RootCoreCollectionHookParameters } from '../useUseCase/types';
3
- import { ContextualEntityReducers } from '../../configs/defaultUseCaseContext/types';
4
- export interface GlobalReducersHookParameters<T, TEntityReducers extends EntityReducers<T>> extends ContextualCoreCollectionHookParameters<T, TEntityReducers> {
1
+ import { EntityReducers, ReducerMap, Reducers, UseCase } from '@mic-rexjs/usecases';
2
+ import { PseudoCoreCollection, RootCoreCollection, RootCoreCollectionHook } from '../useUseCase/types';
3
+ export type GlobalCoreCollection<T, TReducers extends ReducerMap> = TReducers extends EntityReducers<T> ? RootCoreCollection<T, TReducers> : PseudoCoreCollection<TReducers>;
4
+ export interface GlobalPseudoCoreCollectionHook {
5
+ <T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): PseudoCoreCollection<T>;
5
6
  }
6
- export type GlobalReducers<T, TEntityReducers extends EntityReducers<T>> = ContextualEntityReducers<T, TEntityReducers>;
7
- export interface GlobalReducersHook {
8
- <T, TEntityReducers extends EntityReducers<T>>(...args: GlobalReducersHookParameters<T, TEntityReducers>): GlobalReducers<T, TEntityReducers>;
9
- }
10
- export type GlobalUseCaseHookParameters<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object> = RootCoreCollectionHookParameters<T, TEntityReducers, TUseCaseOptions> | GlobalReducersHookParameters<T, TEntityReducers>;
11
- export interface GlobalUseCaseHook extends RootCoreCollectionHook, GlobalReducersHook {
7
+ export type GlobalUseCaseHookParameters = Parameters<RootCoreCollectionHook> | Parameters<GlobalPseudoCoreCollectionHook>;
8
+ export interface GlobalUseCaseHook extends RootCoreCollectionHook, GlobalPseudoCoreCollectionHook {
12
9
  }
@@ -0,0 +1,2 @@
1
+ import { CacheableFactory } from '../../methods/cacheCall/types';
2
+ export declare const useMemoizedCall: <T extends CacheableFactory>(factory: T, deps: unknown[]) => T;
@@ -0,0 +1,15 @@
1
+ import { useCreation, useLatest } from 'ahooks';
2
+ import { useCompareDeps } from '../useCompareDeps';
3
+ import { cacheCall } from '../../methods/cacheCall';
4
+ export const useMemoizedCall = (factory, deps) => {
5
+ const depsKey = useCompareDeps(deps);
6
+ const factoryRef = useLatest(factory);
7
+ return useCreation(() => {
8
+ void depsKey;
9
+ return cacheCall(factoryRef.current, {
10
+ onCompare() {
11
+ return true;
12
+ },
13
+ });
14
+ }, [depsKey, factoryRef]);
15
+ };
@@ -1,5 +1,5 @@
1
- import { EntityReducers } from '@mic-rexjs/usecases';
2
- import { ChangeCallback, ContextualEntityReducers, UseCaseContext } from '../../configs/defaultUseCaseContext/types';
1
+ import { EntityStore, ReducerMap } from '@mic-rexjs/usecases';
2
+ import { UseCaseContext, UseCaseContextValue } from '../../configs/defaultUseCaseContext/types';
3
3
  import { UseCaseProvider } from './types';
4
- import { UseCaseModes } from '../../enums/UseCaseModes';
5
- export declare const useProvider: <T, TEntityReducers extends EntityReducers<T>>(context: UseCaseContext<T, TEntityReducers>, mode: UseCaseModes, entity: T, reducers: ContextualEntityReducers<T, TEntityReducers>, changeCallbackCollection: ChangeCallback<T>[]) => UseCaseProvider;
4
+ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
5
+ export declare const useProvider: <T, TReducers extends ReducerMap<import("@mic-rexjs/usecases").Reducer<unknown>>>(statuses: UseCaseStatuses, context: UseCaseContext<UseCaseContextValue<TReducers>>, store: EntityStore<T>, reducers: TReducers) => UseCaseProvider;
@@ -1,25 +1,32 @@
1
- import React, { useCallback } from 'react';
2
1
  import { useLatest } from 'ahooks';
3
- import { UseCaseModes } from '../../enums/UseCaseModes';
4
- import { useCompareDeps } from '../useCompareDeps';
2
+ import React, { useCallback, useMemo } from 'react';
5
3
  import { useConstantFn } from '../useConstantFn';
6
- export const useProvider = (context, mode, entity, reducers, changeCallbackCollection) => {
7
- const isGlobal = (mode & UseCaseModes.Global) === UseCaseModes.Global;
8
- const contextValueRef = useLatest({
9
- entity,
10
- reducers,
11
- changeCallbackCollection,
12
- });
13
- const key = useCompareDeps(isGlobal ? [] : [entity, reducers, changeCallbackCollection]);
4
+ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
5
+ export const useProvider = (statuses, context, store, reducers) => {
6
+ const entity = store.getValue();
7
+ const contextValue = useMemo(() => {
8
+ void entity;
9
+ if ((statuses & UseCaseStatuses.EntityEnabled) === UseCaseStatuses.EntityEnabled) {
10
+ return {
11
+ store,
12
+ reducers,
13
+ };
14
+ }
15
+ return { reducers };
16
+ }, [statuses, entity, store, reducers]);
17
+ const isGlobal = (statuses & UseCaseStatuses.GlobalEnabled) === UseCaseStatuses.GlobalEnabled;
18
+ const updateDep = isGlobal ? null : contextValue;
19
+ const contextValueRef = useLatest(contextValue);
20
+ // 这里必须使用 `useCallback`,因为要使用在 `Provider` 的 `value` 属性上面,需要可变化的
14
21
  const getContextValue = useCallback(() => {
15
- void key;
22
+ void updateDep;
16
23
  return contextValueRef.current;
17
- }, [key, contextValueRef]);
18
- const getContextValueRef = useLatest(getContextValue);
24
+ }, [updateDep, contextValueRef]);
25
+ const getterRef = useLatest(getContextValue);
19
26
  return useConstantFn(({ children, with: withProviders = [] }) => {
20
27
  const { Provider: ContextProvider } = context;
21
28
  return React.createElement(ContextProvider, {
22
- value: getContextValueRef.current,
29
+ value: getterRef.current,
23
30
  }, withProviders.reduceRight((currentChildren, withProvider) => {
24
31
  return React.createElement(withProvider, {}, currentChildren);
25
32
  }, children));
@@ -1,8 +1,5 @@
1
1
  import { useUseCase } from '../useUseCase';
2
2
  import { UseCaseModes } from '../../enums/UseCaseModes';
3
- export const useStatelessUseCase = ((...args) => {
4
- const [arg1, arg2, ...rest] = args;
5
- const isContextRoot = typeof arg2 === 'function';
6
- const coreCollection = useUseCase(...(isContextRoot ? [arg1, arg2, UseCaseModes.Stateless, ...rest] : args));
7
- return coreCollection;
3
+ export const useStatelessUseCase = ((entity, useCase, options, deps) => {
4
+ return useUseCase(entity, useCase, UseCaseModes.Stateless, options, deps);
8
5
  });
@@ -1,9 +1,7 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
1
  import { entityUseCase } from '@mic-rexjs/usecases';
3
2
  import { describe, expect, jest, test } from '@jest/globals';
4
3
  import { UseCaseModes } from '../../enums/UseCaseModes';
5
- import { render, renderHook } from '@testing-library/react';
6
- import { useMount } from 'ahooks';
4
+ import { renderHook } from '@testing-library/react';
7
5
  import * as useUseCaseModule from '../useUseCase';
8
6
  import { useStatelessUseCase } from '.';
9
7
  const numberUseCase = () => {
@@ -17,7 +15,7 @@ describe('useStatelessUseCase', () => {
17
15
  renderHook(() => {
18
16
  useStatelessUseCase(1, numberUseCase);
19
17
  });
20
- expect(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, UseCaseModes.Stateless);
18
+ expect(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, UseCaseModes.Stateless, void 0, void 0);
21
19
  jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
22
20
  });
23
21
  test('should should return `CoreCollection` with Provider', () => {
@@ -31,44 +29,8 @@ describe('useStatelessUseCase', () => {
31
29
  setEntity: expect.any(Function),
32
30
  },
33
31
  expect.any(Function),
34
- ]);
35
- });
36
- });
37
- describe('`useStatelessUseCase` should work the same as `ContextualCoreCollectionHook`', () => {
38
- test('check `useUseCase` has received correct arguments', () => {
39
- const useMockedUseCase = jest.fn();
40
- jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
41
- renderHook(() => {
42
- try {
43
- useStatelessUseCase(numberUseCase);
44
- }
45
- catch (e) {
46
- //
47
- }
48
- });
49
- expect(useMockedUseCase).toHaveBeenCalledWith(numberUseCase);
50
- jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
51
- });
52
- test('should should only return reducers', () => {
53
- const onChildMount = jest.fn();
54
- const Child = () => {
55
- const coreCollection = useStatelessUseCase(numberUseCase);
56
- useMount(() => {
57
- onChildMount(coreCollection);
58
- });
59
- return null;
60
- };
61
- const Parent = () => {
62
- const [, , Provider] = useStatelessUseCase(1, numberUseCase);
63
- return (_jsx(Provider, { children: _jsx(Child, {}) }));
64
- };
65
- render(_jsx(Parent, {}));
66
- expect(onChildMount).toHaveBeenCalledWith([
67
- 1,
68
- {
69
- setEntity: expect.any(Function),
70
- },
71
- null,
32
+ void 0,
33
+ void 0,
72
34
  ]);
73
35
  });
74
36
  });
@@ -1,5 +1,3 @@
1
- import { EntityReducers } from '@mic-rexjs/usecases';
2
- import { ContextualCoreCollectionHook, ContextualCoreCollectionHookParameters, RootCoreCollectionHook, RootCoreCollectionHookParameters } from '../useUseCase/types';
3
- export type StatelessUseCaseHookParameters<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object> = RootCoreCollectionHookParameters<T, TEntityReducers, TUseCaseOptions> | ContextualCoreCollectionHookParameters<T, TEntityReducers>;
4
- export interface StatelessUseCaseHook extends RootCoreCollectionHook, ContextualCoreCollectionHook {
1
+ import { RootCoreCollectionHook } from '../useUseCase/types';
2
+ export interface StatelessUseCaseHook extends RootCoreCollectionHook {
5
3
  }