@mic-rexjs/usecases-react 3.7.0 → 4.0.0-beta.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 (65) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/classes/OptionsSet/index.d.ts +6 -0
  3. package/es/classes/OptionsSet/index.js +44 -0
  4. package/es/classes/OptionsSet/types.d.ts +8 -0
  5. package/es/hooks/useContextValue/index.d.ts +6 -0
  6. package/es/hooks/useContextValue/index.js +20 -0
  7. package/es/hooks/useContextualItem/index.d.ts +2 -2
  8. package/es/hooks/useContextualItem/index.js +8 -28
  9. package/es/hooks/useEntity/index.d.ts +1 -1
  10. package/es/hooks/useEntity/index.js +10 -12
  11. package/es/hooks/useExec/index.d.ts +2 -2
  12. package/es/hooks/useExec/index.js +19 -6
  13. package/es/hooks/useExec/types.d.ts +3 -0
  14. package/es/hooks/useFullArguments/types.d.ts +2 -2
  15. package/es/hooks/useOptions/index.d.ts +5 -0
  16. package/es/hooks/useOptions/index.js +54 -0
  17. package/es/hooks/useOptions/types.d.ts +5 -0
  18. package/es/hooks/useOptionsSet/index.d.ts +5 -0
  19. package/es/hooks/useOptionsSet/index.js +16 -0
  20. package/es/hooks/useProvider/index.d.ts +1 -3
  21. package/es/hooks/useProvider/index.js +2 -10
  22. package/es/hooks/useReducers/index.d.ts +1 -1
  23. package/es/hooks/useReducers/index.js +6 -25
  24. package/es/hooks/useRootCreation/index.d.ts +4 -0
  25. package/es/hooks/useRootCreation/index.js +20 -0
  26. package/es/hooks/useRootCreation/types.d.ts +3 -0
  27. package/es/hooks/useRootCreation/types.js +1 -0
  28. package/es/hooks/useStore/index.js +7 -12
  29. package/es/hooks/useUseCase/index.js +12 -6
  30. package/es/hooks/useUseCase/index.test.js +263 -161
  31. package/es/hooks/useUseCase/types.d.ts +4 -5
  32. package/es/methods/cacheCall/index.d.ts +2 -0
  33. package/es/methods/cacheCall/index.js +38 -0
  34. package/es/methods/cacheCall/types.d.ts +12 -0
  35. package/es/methods/cacheCall/types.js +1 -0
  36. package/es/methods/cacheCalls/index.d.ts +2 -0
  37. package/es/methods/cacheCalls/index.js +12 -0
  38. package/es/usecases/contextUseCase/types.d.ts +3 -1
  39. package/lib/classes/OptionsSet/index.js +94 -0
  40. package/lib/hooks/useContextValue/index.js +26 -0
  41. package/lib/hooks/useContextualItem/index.js +8 -28
  42. package/lib/hooks/useEntity/index.js +9 -11
  43. package/lib/hooks/useExec/index.js +18 -5
  44. package/lib/hooks/useOptions/index.js +61 -0
  45. package/lib/hooks/useOptionsSet/index.js +22 -0
  46. package/lib/hooks/useProvider/index.js +1 -9
  47. package/lib/hooks/useReducers/index.js +8 -31
  48. package/lib/hooks/useRootCreation/index.js +26 -0
  49. package/lib/hooks/useRootCreation/types.js +5 -0
  50. package/lib/hooks/useStore/index.js +7 -12
  51. package/lib/hooks/useUseCase/index.js +13 -7
  52. package/lib/hooks/useUseCase/index.test.js +301 -160
  53. package/lib/methods/cacheCall/index.js +44 -0
  54. package/lib/methods/cacheCall/types.js +5 -0
  55. package/lib/methods/cacheCalls/index.js +19 -0
  56. package/package.json +3 -3
  57. package/es/hooks/useContextualItem/types.d.ts +0 -3
  58. package/es/usecases/methodUseCase/index.d.ts +0 -2
  59. package/es/usecases/methodUseCase/index.js +0 -72
  60. package/es/usecases/methodUseCase/types.d.ts +0 -21
  61. package/lib/usecases/methodUseCase/index.js +0 -79
  62. /package/es/{hooks/useContextualItem → classes/OptionsSet}/types.js +0 -0
  63. /package/es/{usecases/methodUseCase → hooks/useOptions}/types.js +0 -0
  64. /package/lib/{hooks/useContextualItem → classes/OptionsSet}/types.js +0 -0
  65. /package/lib/{usecases/methodUseCase → hooks/useOptions}/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 e={698(e,t){"use strict";var n=Symbol.for("react.transitional.element");Symbol.for("react.fragment"),t.jsx=function(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var u in r={},t)"key"!==u&&(r[u]=t[u]);else r=t;return t=r.ref,{$$typeof:n,type:e,key:o,ref:void 0!==t?t:null,props:r}}},848(e,t,n){"use strict";e.exports=n(698)}},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";function e(t){return e="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},e(t)}function t(t,n,r){return(n=function(t){var n=function(t){if("object"!=e(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=e(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==e(n)?n:n+""}(n))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,t}function o(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(r=0;r<u.length;r++)n=u[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}n.r(r),n.d(r,{UseCaseFragment:()=>N,lifecycleUseCase:()=>q,useProviders:()=>$,useUseCase:()=>L});var u=n(848);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t){if(e){if("string"==typeof e)return i(e,t);var n={}.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)?i(e,t):void 0}}function c(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,i,a=[],c=!0,l=!1;try{if(u=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=u.call(n)).done)&&(a.push(r.value),a.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return a}}(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 l=React;var f,s=n.n(l),y=function(e){return c((0,l.useState)(e),1)[0]};!function(e){e[e.None=0]="None",e[e.Entity=2]="Entity"}(f||(f={}));var v=function(e){return c((0,l.useState)(function(){return e}),1)[0]};const b=ahooks,d=usecases;var p;!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=6]="ContextRootEnabled",e[e.EntityRootEnabled=14]="EntityRootEnabled"}(p||(p={}));var O=(0,d.createUseCase)(function(){var e=new Map,t=(0,l.createContext)(null);return function(){return{createContextValue:function(e,t,n){return(n&p.EntityEnabled)===p.EntityEnabled?{store:e,reducers:t,statuses:n}:{reducers:t,statuses:n}},getUseCaseContext:function(n){return e.has(n)?e.get(n).value:t},registerUseCase:function(n,r){if(e.has(n)){var o=e.get(n),u=o.value,i=o.times;return e.set(n,{value:u,times:i+1}),u}if((r&f.Entity)!==f.Entity)return t;var a=(0,l.createContext)(null);return e.set(n,{value:a,times:1}),a},unregisterUseCase:function(t,n){if((n&f.Entity)!==f.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}}}}),E=function(e,t){return y(function(){return e(t)})};function h(e){return function(e){if(Array.isArray(e))return i(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.")}()}var g=function(){var t=function(t){return"object"===e(t)&&null!==t},n=function(e,n){return!!t(e)&&Object.hasOwn(e,n)};return{hasField:n,isObject:t,isEqual:function(e,r,o){if(e===r)return!0;var u=t(e),i=t(r),a=u?Object.keys(e):[],c=i?Object.keys(r):[],l="function"==typeof o;if(!u&&!i)return!1;for(var f=!0,s=a.length,y=[].concat(h(a),h(c)),v=0,b=y.length;v<b;v++){var d=y[v],p=a.includes(d);if(!(v>=s&&p)){var O=n(e,d),E=n(r,d),g=O?e[d]:void 0,j=E?r[d]:void 0;if(!O||!E||g!==j){if(f=!1,!l)break;o(d,j,g)}}}return f},matchProperty:function(e,t,r,o){var u=!0,i=r,a=[{fieldPaths:[],newEntity:t,newValue:t,oldEntity:e,oldValue:e}];do{var l=a.shift(),f=l.oldValue,s=l.newValue,y=l.fieldPaths,v=c(i.match(/^([^.]+)\.(.+)$/)||[],3),b=v[1],d=void 0===b?i:b,p=v[2],O=void 0===p?"":p,E=n(f,d),g=n(s,d);if(E||g){var j=c(E?[f[d]]:[],1)[0],m=c(g?[s[d]]:[],1)[0],w={fieldPaths:[].concat(h(y),[d]),newEntity:t,newValue:m,oldEntity:e,oldValue:j};if(O){i=O,a.push(w);continue}if(m===j)continue;u=!1,null==o||o(w)}else if(!/^\d+^/.test(d))for(var P=Array.isArray(f)?f:[],C=Array.isArray(s)?s:[],S=P.length,x=C.length,A=Math.max(S,x),R=0;R<A;R++)a.push({fieldPaths:[].concat(h(y),["".concat(R)]),newEntity:t,newValue:C[R],oldEntity:e,oldValue:P[R]})}while(a.length>0);return u}}},j=function(e){var t=(0,l.useRef)(0),n=(0,b.usePrevious)(e),r=(0,E(g).isEqual)(e,n);return(0,b.useMemoizedFn)(function(){var e=t.current;if(r)return e;var n=e+1;return t.current=n,n})()},m=function(e){var t=j(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[e]),n=(0,b.useMemoizedFn)(function(){return e()});return(0,b.useCreation)(function(){return n()},[t,n])},w=function(e){var t=(0,l.useRef)(!0),n=(e&p.EntityRootEnabled)===p.EntityRootEnabled;return m(function(){if(!n)return t.current=!0,!1;var e=t.current;return t.current=!1,e})},P=(0,d.createUseCase)(function(){var e=new Map,t=null;return function(){return{deleteLifecycleEvents:function(t){return e.delete(t)},setLifecycleEvents:function(e){t=e},getLifecycleEvents:function(t){return e.get(t)||{}},bindLifecycleEventsKey:function(n){if(null===t)return{};var r=t;return t=null,e.set(n,r),r}}}}),C=function(){var e=g().isEqual,t=function(t,n){var r,o=n||{},u=o.onShouldCache,i=void 0===u?function(){return!0}:u,a=o.onCompare,c=void 0===a?function(t,n){return e(t,n)}:a;return function(){for(var e=i(),n=arguments.length,o=new Array(n),u=0;u<n;u++)o[u]=arguments[u];if(r&&e){var a=r,l=a.parameters,f=a.returnValue;if(c(l,o))return f}var s=t.apply(void 0,o);return e&&(r={parameters:o,returnValue:s}),s}};return{cacheCall:t,cacheCalls:function(e,n){var r={};return Object.entries(e).forEach(function(e){var o=c(e,2),u=o[0],i=o[1];r[u]=t(i,n)}),r},captureCalls:function(e,t){var n={};return 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}}},S=function(e,t,n){var r=j(arguments.length>3&&void 0!==arguments[3]?arguments[3]:[]),o=(0,b.useLatest)(n),u=(0,b.useMemoizedFn)(function(){return(0,C().cacheCall)(o.current,{onCompare:function(){return!0}})}),i=(0,b.useCreation)(function(){return u()},[r,u]);return(0,b.useCreation)(function(){return(t&p.RootEnabled)!==p.RootEnabled&&e?e:i()},[t,e,i])};function x(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 A(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?x(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):x(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var R=["watch","onChange","options"];function U(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 D(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?U(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):U(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var M=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,d.entityUseCase)(),n=e.onInit;return D(D({},t),{},{initEntity:function(e){return"function"!=typeof n?e:n(e)}})},V=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o="function"==typeof e,u=w(n),i=(0,l.useRef)([]),a=((0,l.useContext)(t)||{}).store,f=void 0===a?null:a,s=(n&p.EntityRootEnabled)===p.EntityRootEnabled,y=c((0,l.useState)(function(){return new d.EntityStore(void 0)}),1)[0],v=(0,b.usePrevious)(e,function(){return!0});return m(function(){switch(!0){case!s:case o:return}u?y.initValue(e):e!==v&&y.setValue(e)}),S(f,n,function(){return s&&o&&(t=i.current,i.current=function(e,t,n,r){var o=!1,u=0,i=[],a=g(),c=a.isObject,l=a.isEqual,f=function(t){return!r||o?t:e.initValue(t)},s=(0,d.createEntityReducers)(e,M,{onInit:function(e){return t(e)},onCreate:function(e,t){var r=u,o=c(t),a=o&&Array.isArray(t);if(u++,i[r]=e,!o||a)return(0,d.createEntity)(t,e);var f={},s=n[r];return l(s,e,function(t){var n=Object.getOwnPropertyDescriptor(e,t)||null;null!==n&&(f[t]=n)}),(0,d.createEntity)(t,Object.defineProperties({},f))},onGenerate:function(t,n){if(void 0===n)return[t,n];var r=(0,d.createEntity)(t,n);return e.setValue(r),[r,n]},onYield:function(e){return f(e)},onReturn:function(t){var n=f(t);return e.setValue(n),n}}).initEntity;return e.disableWatchers(),s(),e.enableWatchers(),o=!0,i}(y,e,t,u)),y;var t},r)};function k(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}var L=function(){for(var n,r=(n=(0,b.useLatest)(!0),(0,l.useEffect)(function(){n.current=!1}),n),u=arguments.length,i=new Array(u),a=0;a<u;a++)i[a]=arguments[a];var j=function(t){return y(function(){return"function"===e(c(t,2)[1])?f.Entity:f.None})}(i),x=function(e,t){var n=c(e,4),r=n[0],o=n[1],u=n[2],i=n[3];return(t&f.Entity)!==f.Entity?[null,r,o||{},u||[]]:[r,o,u||{},i||[]]}(i,j),U=c(x,4),D=U[0],M=U[1],L=U[2],F=U[3],I=v(M),_=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f.None,n=y(function(){return(0,O().registerUseCase)(e,t)});return(0,b.useUnmount)(function(){(0,O().unregisterUseCase)(e,t)}),n}(I,j),z=_,N=function(e,t){var n=(0,l.useContext)(e);return(0,b.useCreation)(function(){var e=p.None,r=(n||{}).store;return(t&f.Entity)===f.Entity&&(e|=p.EntityRootEnabled),e|=n?p.ContextEnabled:p.RootEnabled,r&&(e|=p.EntityEnabled),e},[t,n])}(_,j),T=V(D,z,N,F),q=function(e,t,n,r,u){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:[],a=(0,b.useLatest)(u),c=((0,l.useContext)(t)||{}).reducers,f=void 0===c?null:c,s=(r&p.EntityRootEnabled)===p.EntityRootEnabled;return S(f,r,function(){return function(){var t=(0,C().captureCalls)(u,function(e,t){var n,r,o;return null===(r=(o=a.current)[e])||void 0===r?void 0:(n=r).call.apply(n,[o].concat(h(t)))});if(!s)return e(t);var r=t,i=(r.watch,r.onChange,r.options),c=o(r,R);return(0,d.createEntityReducers)(n,e,A(A(A({},c),i),{},{onGenerate:function(e,t){return t}}))}()},i)}(I,_,T,N,L,F),$=function(e,t,n){var r=e.value,o=(0,b.useUpdate)(),u=w(t),i=(0,b.useLatest)(n),a=(0,l.useRef)(r),f=(t&p.EntityEnabled)===p.EntityEnabled,s=(t&p.EntityRootEnabled)===p.EntityRootEnabled,v=E(function(){return P()}),O=v.bindLifecycleEventsKey,h=v.getLifecycleEvents,j=v.deleteLifecycleEvents,C=y(function(){return(0,(0,d.utilsUseCase)().createKey)()}),S=(0,b.useMemoizedFn)(function(e,t){var n=i.current.watch;n&&function(e,t,n){for(var r,o=g().matchProperty,u=function(){var e=a[i],u=(r=c(e,2))[0],l=r[1];o(n,t,u,function(e){l(e)})},i=0,a=Object.entries(e);i<a.length;i++)u()}(n,e,t)}),x=(0,b.useMemoizedFn)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.current;if(f&&a.current!==e){var n=h(C),o=n.onUpdate,u=n.onAdopt,i=n.onDiscard;a.current=e,S(e,t),null==i||i(t),null==u||u(e,t),null==o||o(e,t)}}),A=(0,b.useMemoizedFn)(function(e,t){var n=i.current.onChange,r=h(C).onChange;x(e,t),null==n||n(e,t),null==r||r(e,t),s&&o()});return m(function(){if(s){var e=O(C),t=e.onBind,n=e.onAdopt;u&&(null==t||t(r),null==n||n(r))}}),(0,b.useUnmount)(function(){if(s){var t=e.value,n=h(C),r=n.onUnbind,o=n.onDiscard;j(C),null==r||r(t),null==o||o(t)}}),m(function(){f&&e.watch(A)},[e,f,A]),(0,l.useEffect)(function(){return function(){e.unwatch(A)}},[e,f,A]),(0,b.useUpdateEffect)(function(){x()},[r,x]),r}(T,N,L),B=function(e,t,n,r){var o=n.value,u=(0,b.useCreation)(function(){return(0,O().createContextValue)(n,r,e)},[e,o,n,r]),i=(0,b.useLatest)(u);return v(function(e){var n=e.children,r=e.with,o=void 0===r?[]:r,u=t.Provider,a=i.current,c=Array.isArray(o)?o:[o];return s().createElement(u,{value:a},c.reduceRight(function(e,t){return s().createElement(t,{},e)},n))})}(N,_,T,q);return(0,b.useCreation)(function(){if((N&p.EntityEnabled)!==p.EntityEnabled)return q;var n=(0,C().cacheCalls)(q,{onShouldCache:function(){return r.current}}),o=null===$,u=Array.isArray($),i="object"!==e($)||o||u?$:function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?k(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):k(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},$);return[i,n,B]},[N,$,q,B,r])},F=function(e){var t=e.usecase,n=e.watch,r=e.onMount,o=e.onUpdate,i=e.onChange,a=c(L(t,{watch:n,onChange:i}),1)[0],f=(0,b.useMemoizedFn)(function(){null==o||o(a)});return(0,b.useMount)(function(){null==r||r(a)}),(0,b.useUpdateEffect)(function(){f()},[a,f]),(0,u.jsx)(l.Fragment,{})};function I(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 _(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?I(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):I(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var z=["usecase"],N=function(e){var t=e.usecase,n=o(e,z),r=(0,L(O).getUseCaseContext)(t),i=(0,l.useContext)(r);return(0,u.jsx)(l.Fragment,{children:null===i?null:(0,u.jsx)(F,_({usecase:t},n))})};function T(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}var q=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.onAdopt,r=e.onDiscard,o=e.onBind,u=e.onUnbind,i=e.onChange,a=e.onUpdate,c=P().setLifecycleEvents,l=(0,d.entityUseCase)();return c({onAdopt:n,onDiscard:r,onBind:o,onUnbind:u,onChange:i,onUpdate:a}),function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?T(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):T(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},l)},$=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=j(t),o=(0,b.useLatest)(t);return(0,b.useCreation)(function(){return o.current},[r,o])}})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var u in r)o[u]=r[u];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
2
+ (()=>{var t={698(t,e){"use strict";var n=Symbol.for("react.transitional.element");Symbol.for("react.fragment"),e.jsx=function(t,e,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==e.key&&(o=""+e.key),"key"in e)for(var u in r={},e)"key"!==u&&(r[u]=e[u]);else r=e;return e=r.ref,{$$typeof:n,type:t,key:o,ref:void 0!==e?e:null,props:r}}},848(t,e,n){"use strict";t.exports=n(698)}},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";function t(e){return t="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},t(e)}function e(e){var n=function(e){if("object"!=t(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=t(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==t(n)?n:n+""}function o(t,n,r){return(n=e(n))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,t}function u(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(t);for(r=0;r<u.length;r++)n=u[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}n.r(r),n.d(r,{UseCaseFragment:()=>H,lifecycleUseCase:()=>Q,useProviders:()=>X,useUseCase:()=>K});var i=n(848);function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function c(t,e){if(t){if("string"==typeof t)return a(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,u,i,a=[],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)&&(a.push(r.value),a.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return a}}(t,e)||c(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 f=React;var s,y=n.n(f),p=function(t){return l((0,f.useState)(t),1)[0]};!function(t){t[t.None=0]="None",t[t.Entity=2]="Entity"}(s||(s={}));var v=function(t){return l((0,f.useState)(function(){return t}),1)[0]};const d=ahooks,b=usecases;var h;!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=6]="ContextRootEnabled",t[t.EntityRootEnabled=14]="EntityRootEnabled"}(h||(h={}));var E=(0,b.createUseCase)(function(){var t=new Map,e=(0,f.createContext)(null);return function(){return{createContextValue:function(t,e,n){return(n&h.EntityEnabled)===h.EntityEnabled?{store:t,reducers:e,statuses:n}:{reducers:e,statuses:n}},getUseCaseContext:function(n){return t.has(n)?t.get(n).value:e},registerUseCase:function(n,r){if(t.has(n)){var o=t.get(n),u=o.value,i=o.times;return t.set(n,{value:u,times:i+1}),u}if((r&s.Entity)!==s.Entity)return e;var a=(0,f.createContext)(null);return t.set(n,{value:a,times:1}),a},unregisterUseCase:function(e,n){if((n&s.Entity)!==s.Entity)return!1;if(!t.has(e))return!1;var r=t.get(e),o=r.value,u=r.times;return 1===u?t.delete(e):t.set(e,{value:o,times:u-1}),!0}}}}),O=function(t,e){return p(function(){return t(e)})};function g(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||c(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.")}()}var m=function(){var e=function(e){return"object"===t(e)&&null!==e},n=function(t,n){return!!e(t)&&Object.hasOwn(t,n)};return{hasField:n,isObject:e,isEqual:function(t,r,o){if(t===r)return!0;var u=e(t),i=e(r),a=u?Object.keys(t):[],c=i?Object.keys(r):[],l="function"==typeof o;if(!u&&!i)return!1;for(var f=!0,s=a.length,y=[].concat(g(a),g(c)),p=0,v=y.length;p<v;p++){var d=y[p],b=a.includes(d);if(!(p>=s&&b)){var h=n(t,d),E=n(r,d),O=h?t[d]:void 0,m=E?r[d]:void 0;if(!h||!E||O!==m){if(f=!1,!l)break;o(d,m,O)}}}return f},matchProperty:function(t,e,r,o){var u=!0,i=r,a=[{fieldPaths:[],newEntity:e,newValue:e,oldEntity:t,oldValue:t}];do{var c=a.shift(),f=c.oldValue,s=c.newValue,y=c.fieldPaths,p=l(i.match(/^([^.]+)\.(.+)$/)||[],3),v=p[1],d=void 0===v?i:v,b=p[2],h=void 0===b?"":b,E=n(f,d),O=n(s,d);if(E||O){var m=l(E?[f[d]]:[],1)[0],w=l(O?[s[d]]:[],1)[0],j={fieldPaths:[].concat(g(y),[d]),newEntity:e,newValue:w,oldEntity:t,oldValue:m};if(h){i=h,a.push(j);continue}if(w===m)continue;u=!1,null==o||o(j)}else if(!/^\d+^/.test(d))for(var P=Array.isArray(f)?f:[],C=Array.isArray(s)?s:[],S=P.length,R=C.length,x=Math.max(S,R),A=0;A<x;A++)a.push({fieldPaths:[].concat(g(y),["".concat(A)]),newEntity:e,newValue:C[A],oldEntity:t,oldValue:P[A]})}while(a.length>0);return u}}},w=function(t){var e=(0,f.useRef)(0),n=(0,d.usePrevious)(t),r=(0,O(m).isEqual)(t,n);return(0,d.useMemoizedFn)(function(){var t=e.current;if(r)return t;var n=t+1;return e.current=n,n})()},j=function(t,e){var n=w(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[t]),r=(0,f.useRef)(null),o=function(){var t,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];null===(t=r.current)||void 0===t||t.call(r,e)},u=(0,d.useMemoizedFn)(function(){return o(),r.current=e||null,t()});return(0,d.useUnmount)(function(){o(!0)}),(0,d.useCreation)(function(){return u()},[n,u])},P=function(t){var e=(0,f.useRef)(!0),n=(t&h.EntityRootEnabled)===h.EntityRootEnabled;return j(function(){if(!n)return e.current=!0,!1;var t=e.current;return e.current=!1,t})},C=(0,b.createUseCase)(function(){var t=new Map,e=null;return function(){return{deleteLifecycleEvents:function(e){return t.delete(e)},setLifecycleEvents:function(t){e=t},getLifecycleEvents:function(e){return t.get(e)||{}},bindLifecycleEventsKey:function(n){if(null===e)return{};var r=e;return e=null,t.set(n,r),r}}}}),S=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=w(arguments.length>3&&void 0!==arguments[3]?arguments[3]:[]),o=n?h.EntityRootEnabled:h.RootEnabled,u=(t&o)===o,i=(0,d.useMemoizedFn)(function(){return e()});return(0,d.useCreation)(function(){return u?i():null},[u,r,i])},R=["watch","onChange"];function x(t,n){for(var r=0;r<n.length;r++){var o=n[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,e(o.key),o)}}function A(t){return A=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},A(t)}function U(){return U="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var r=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=A(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(arguments.length<3?t:n):o.value}},U.apply(null,arguments)}function D(t,e){return D=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},D(t,e)}function M(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(M=function(){return!!t})()}function k(t){var e="function"==typeof Map?new Map:void 0;return k=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return function(t,e,n){if(M())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,e);var o=new(t.bind.apply(t,r));return n&&D(o,n.prototype),o}(t,arguments,A(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),D(n,t)},k(t)}function V(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function _(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_=function(){return!!t})()}function F(t,e,n){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:n;throw new TypeError("Private element is not present on this object")}var L=new WeakMap,T=function(e){function n(){var e,r,o,u;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),r=this,u=arguments,o=A(o=n),function(t,e,n){(function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")})(t,e),e.set(t,n)}(e=function(e,n){if(n&&("object"==t(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(e)}(r,_()?Reflect.construct(o,u||[],A(r).constructor):o.apply(r,u)),L,null),e}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&D(t,e)}(n,e),r=n,o=[{key:"add",value:function(e,r){return"object"!==t(e)||(r&&(u=e,(o=L).set(F(o,this),u)),function(t,e,n){var r=U(A(t.prototype),"add",n);return"function"==typeof r?function(t){return r.apply(n,t)}:r}(n,0,this)([e])),this;var o,u}},{key:"apply",value:function(t,e,n){var r,o,u=(o=L).get(F(o,this)),i=(u||{})[t];"function"==typeof i&&(r=Reflect.apply(i,e,n));var a,c=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return V(t,e);var n={}.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)?V(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,o=function(){};return{s:o,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u,i=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return i=t.done,t},e:function(t){a=!0,u=t},f:function(){try{i||null==n.return||n.return()}finally{if(a)throw u}}}}(this);try{for(c.s();!(a=c.n()).done;){var l=a.value;if(l!==u){var f=l[t];"function"==typeof f&&Reflect.apply(f,e,n)}}}catch(t){c.e(t)}finally{c.f()}return r}}],o&&x(r.prototype,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o}(k(Set)),I=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o=(e&h.RootEnabled)===h.RootEnabled,u=S(e,n,!1,r);return o?u:t};function z(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 B(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?z(Object(n),!0).forEach(function(e){o(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):z(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var N=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(0,b.entityUseCase)(),n=t.onInit;return B(B({},e),{},{initEntity:function(t){return"function"!=typeof n?t:n(t)}})},$=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o="function"==typeof t,u=P(n),i=(0,f.useRef)([]),a=((0,f.useContext)(e)||{}).store,c=void 0===a?null:a,s=(n&h.EntityRootEnabled)===h.EntityRootEnabled,y=l((0,f.useState)(function(){return new b.EntityStore(void 0)}),1)[0],p=(0,d.usePrevious)(t,function(){return!0});return j(function(){switch(!0){case!s:case o:return;case u:return void y.initValue(t);case t===p:return}y.setValue(t)}),I(c,n,function(){return s&&o&&(e=i.current,i.current=function(t,e,n,r){var o=!1,u=0,i=[],a=m(),c=a.isObject,l=a.isEqual,f=function(e){return!r||o?e:t.initValue(e)},s=(0,b.createEntityReducers)(t,N,{onInit:function(t){return e(t)},onCreate:function(t,e){var r=u,o=c(e),a=o&&Array.isArray(e);if(u++,i[r]=t,!o||a)return(0,b.createEntity)(e,t);var f={},s=n[r];return l(s,t,function(e){var n=Object.getOwnPropertyDescriptor(t,e)||null;null!==n&&(f[e]=n)}),(0,b.createEntity)(e,Object.defineProperties({},f))},onGenerate:function(e,n){if(void 0===n)return[e,n];var r=(0,b.createEntity)(e,n);return t.setValue(r),[r,n]},onYield:function(t){return f(t)},onReturn:function(e){var n=f(e);return t.setValue(n),n}}).initEntity;return t.disableWatchers(),s(),t.enableWatchers(),o=!0,i}(y,t,e,u)),y;var e},r)};function q(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}var K=function(){for(var e,n=(e=(0,d.useLatest)(!0),(0,f.useEffect)(function(){e.current=!1}),e),r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];var c=function(e){return p(function(){return"function"===t(l(e,2)[1])?s.Entity:s.None})}(i),g=function(t,e){var n=l(t,4),r=n[0],o=n[1],u=n[2],i=n[3];return(e&s.Entity)!==s.Entity?[null,r,o||{},u||[]]:[r,o,u||{},i||[]]}(i,c),w=l(g,4),x=w[0],A=w[1],U=w[2],D=w[3],M=v(A),k=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s.None,n=p(function(){return(0,E().registerUseCase)(t,e)});return(0,d.useUnmount)(function(){(0,E().unregisterUseCase)(t,e)}),n}(M,c),V=k,_=function(t,e){var n=(0,f.useContext)(t);return(0,d.useCreation)(function(){var t=h.None,r=(n||{}).store;return(e&s.Entity)===s.Entity&&(t|=h.EntityRootEnabled),t|=n?h.ContextEnabled:h.RootEnabled,r&&(t|=h.EntityEnabled),t},[e,n])}(k,c),F=$(x,V,_,D),L=function(t,e){var n=((0,f.useContext)(t)||{}).optionsSet;return S(e,function(){return new T})||n}(V,_),z=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o=(n&h.EntityEnabled)===h.EntityEnabled,i=(n&h.EntityRootEnabled)===h.EntityRootEnabled,a=t.watch,c=t.onChange,l=u(t,R),f=t.options,s=void 0===f?l:f,y=o?{watch:a,onChange:c}:{},p=function(t,n,r){return"string"==typeof n&&/^on[A-Z]/.test(n)?function(t){return new Proxy(function(){},{apply:function(n,r,o){return e.apply(t,r,o)}})}(n):Reflect.get(t,n,r)},v=S(n,function(){return new Proxy(s,{get:p})},!0,r),d=o?v||s:t;return j(function(){o&&e.add(s,i)},function(){e.delete(s)}),{hookOptions:y,usecaseOptions:d}}(U,L,_,D),B=z.hookOptions,N=z.usecaseOptions,K=function(t,e,n,r,o){var u=arguments.length>5&&void 0!==arguments[5]?arguments[5]:[],i=((0,f.useContext)(n)||{}).reducers,a=void 0===i?null:i,c=(r&h.EntityEnabled)===h.EntityEnabled;return I(a,r,function(){return c?(0,b.createEntityReducers)(e,t,{options:o,onGenerate:function(t,e){return e}}):t(o)},u)}(M,F,k,_,N,D),W=function(t,e,n){var r=t.value,o=(0,d.useUpdate)(),u=P(e),i=(0,d.useLatest)(n),a=(0,f.useRef)(r),c=(e&h.EntityEnabled)===h.EntityEnabled,s=(e&h.EntityRootEnabled)===h.EntityRootEnabled,y=O(function(){return C()}),v=y.bindLifecycleEventsKey,E=y.getLifecycleEvents,g=y.deleteLifecycleEvents,w=p(function(){return(0,(0,b.utilsUseCase)().createKey)()}),S=(0,d.useMemoizedFn)(function(t,e){var n=i.current.watch;n&&function(t,e,n){for(var r,o=m().matchProperty,u=function(){var t=a[i],u=(r=l(t,2))[0],c=r[1];o(n,e,u,function(t){c(t)})},i=0,a=Object.entries(t);i<a.length;i++)u()}(n,t,e)}),R=(0,d.useMemoizedFn)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.current;if(c&&a.current!==t){var n=E(w),o=n.onUpdate,u=n.onAdopt,i=n.onDiscard;a.current=t,S(t,e),null==i||i(e),null==u||u(t,e),null==o||o(t,e)}}),x=(0,d.useMemoizedFn)(function(t,e){var n=i.current.onChange,r=E(w).onChange;R(t,e),null==n||n(t,e),null==r||r(t,e),s&&o()});return j(function(){if(s){var t=v(w),e=t.onBind,n=t.onAdopt;u&&(null==e||e(r),null==n||n(r))}},null,[]),(0,d.useUnmount)(function(){if(s){var e=t.value,n=E(w),r=n.onUnbind,o=n.onDiscard;g(w),null==r||r(e),null==o||o(e)}}),j(function(){c&&t.watch(x)},function(){t.unwatch(x)},[t,c,x]),(0,d.useUpdateEffect)(function(){R()},[r,R]),r}(F,_,B),G=function(t,e,n,r){var o=t.value;return(0,d.useCreation)(function(){return(r&h.EntityEnabled)===h.EntityEnabled?{store:t,reducers:e,optionsSet:n,statuses:r}:{reducers:e,statuses:r}},[o,t,e,n,r])}(F,K,L,_),Y=function(t,e){var n=(0,d.useLatest)(e);return v(function(e){var r=e.children,o=e.with,u=void 0===o?[]:o,i=t.Provider,a=n.current,c=Array.isArray(u)?u:[u];return y().createElement(i,{value:a},c.reduceRight(function(t,e){return y().createElement(e,{},t)},r))})}(k,G);return(0,d.useCreation)(function(){if((_&h.EntityEnabled)!==h.EntityEnabled)return K;var e=function(t,e){var n={};return Object.entries(t).forEach(function(t){var r=l(t,2),o=r[0],u=r[1];n[o]=function(t,e){var n,r=m().isEqual,o=e||{},u=o.onShouldCache,i=void 0===u?function(){return!0}:u,a=o.onCompare,c=void 0===a?function(t,e){return r(t,e)}:a;return new Proxy(t,{apply:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=i();if(n&&o){var u=n,a=u.parameters,l=u.returnValue;if(c(a,r))return l}var f=Reflect.apply(t,e,r);return o&&(n={parameters:r,returnValue:f}),f}})}(u,e)}),n}(K,{onShouldCache:function(){return n.current}}),r=null===W,u=Array.isArray(W),i="object"!==t(W)||r||u?W:function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?q(Object(n),!0).forEach(function(e){o(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):q(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}({},W);return[i,e,Y]},[_,W,K,Y,n])},W=function(t){var e=t.usecase,n=t.watch,r=t.onMount,o=t.onUpdate,u=t.onChange,a=l(K(e,{watch:n,onChange:u}),1)[0],c=(0,d.useMemoizedFn)(function(){null==o||o(a)});return(0,d.useMount)(function(){null==r||r(a)}),(0,d.useUpdateEffect)(function(){c()},[a,c]),(0,i.jsx)(f.Fragment,{})};function G(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 Y(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?G(Object(n),!0).forEach(function(e){o(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):G(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Z=["usecase"],H=function(t){var e=t.usecase,n=u(t,Z),r=(0,K(E).getUseCaseContext)(e),o=(0,f.useContext)(r);return(0,i.jsx)(f.Fragment,{children:null===o?null:(0,i.jsx)(W,Y({usecase:e},n))})};function J(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}var Q=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.onAdopt,n=t.onDiscard,r=t.onBind,u=t.onUnbind,i=t.onChange,a=t.onUpdate,c=C().setLifecycleEvents,l=(0,b.entityUseCase)();return c({onAdopt:e,onDiscard:n,onBind:r,onUnbind:u,onChange:i,onUpdate:a}),function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?J(Object(n),!0).forEach(function(e){o(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):J(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}({},l)},X=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var r=w(e),o=(0,d.useLatest)(e);return(0,d.useCreation)(function(){return o.current},[r,o])}})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var u in r)o[u]=r[u];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
@@ -0,0 +1,6 @@
1
+ import { EventParameters, EventReturnType } from './types';
2
+ export declare class OptionsSet<T = object> extends Set<T> {
3
+ #private;
4
+ add(options: T, root?: boolean): this;
5
+ apply<K extends keyof T, TThis>(type: K, thisArgument: TThis, argumentsList: EventParameters<T[K]>): EventReturnType<T[K]>;
6
+ }
@@ -0,0 +1,44 @@
1
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
2
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
3
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
4
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
5
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
6
+ var _rootOptions = /*#__PURE__*/new WeakMap();
7
+ export class OptionsSet extends Set {
8
+ constructor() {
9
+ super(...arguments);
10
+ _classPrivateFieldInitSpec(this, _rootOptions, null);
11
+ }
12
+ add(options, root) {
13
+ if (typeof options !== 'object') {
14
+ return this;
15
+ }
16
+ if (root) {
17
+ _classPrivateFieldSet(_rootOptions, this, options);
18
+ }
19
+ super.add(options);
20
+ return this;
21
+ }
22
+ apply(type, thisArgument, argumentsList) {
23
+ let returnValue;
24
+ const rootOptions = _classPrivateFieldGet(_rootOptions, this);
25
+ const _ref = rootOptions || {},
26
+ rootEvent = _ref[type];
27
+ if (typeof rootEvent === 'function') {
28
+ // 最先调用根节点的事件
29
+ returnValue = Reflect.apply(rootEvent, thisArgument, argumentsList);
30
+ }
31
+ for (const options of this) {
32
+ if (options === rootOptions) {
33
+ continue;
34
+ }
35
+ const event = options[type];
36
+ if (typeof event !== 'function') {
37
+ continue;
38
+ }
39
+ // 非根节点事件,不处理返回值
40
+ Reflect.apply(event, thisArgument, argumentsList);
41
+ }
42
+ return returnValue;
43
+ }
44
+ }
@@ -0,0 +1,8 @@
1
+ import { RestArguments } from '@mic-rexjs/usecases/es/types';
2
+ export type EventParameters<T> = T extends (...args: infer TArgs) => unknown ? TArgs : [];
3
+ export type EventReturnType<T> = T extends (...args: infer TArgs) => infer TTReturnType ? TTReturnType : void;
4
+ export type EventOptionKeys<T, K extends keyof T = keyof T> = K extends `on${Capitalize<string>}` ? NonNullable<T[K]> extends (...args: RestArguments) => unknown ? K : never : never;
5
+ export type VoidifyEventOption<T> = T extends (...args: infer TArgs) => unknown ? (...args: TArgs) => void : never;
6
+ export type VoidifyEventOptions<T> = {
7
+ [K in keyof T as K extends EventOptionKeys<T> ? K : never]: VoidifyEventOption<T[K]>;
8
+ };
@@ -0,0 +1,6 @@
1
+ import { EntityStore } from '@mic-rexjs/usecases';
2
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
3
+ import { OptionsSet } from '../../classes/OptionsSet';
4
+ import { Statuses } from '../../enums/Statuses';
5
+ import { UseCaseContextValue } from '../../usecases/contextUseCase/types';
6
+ export declare const useContextValue: <T, TReducers extends ReducerMap>(store: EntityStore<T>, reducers: TReducers, optionsSet: OptionsSet, statuses: Statuses) => UseCaseContextValue<TReducers>;
@@ -0,0 +1,20 @@
1
+ import { useCreation } from 'ahooks';
2
+ import { Statuses } from '../../enums/Statuses';
3
+ export const useContextValue = (store, reducers, optionsSet, statuses) => {
4
+ const entity = store.value;
5
+ return useCreation(() => {
6
+ void entity;
7
+ if ((statuses & Statuses.EntityEnabled) === Statuses.EntityEnabled) {
8
+ return {
9
+ store,
10
+ reducers,
11
+ optionsSet,
12
+ statuses
13
+ };
14
+ }
15
+ return {
16
+ reducers,
17
+ statuses
18
+ };
19
+ }, [entity, store, reducers, optionsSet, statuses]);
20
+ };
@@ -1,4 +1,4 @@
1
- import { CreateContextualItemFactory } from './types';
1
+ import { RootCreationCallback } from '../useRootCreation/types';
2
2
  import { Statuses } from '../../enums/Statuses';
3
3
  import { Dependencies } from '../../types';
4
- export declare const useContextualItem: <T>(contextItem: T | null, statuses: Statuses, createFactory: CreateContextualItemFactory<T>, deps?: Dependencies) => T;
4
+ export declare const useContextualItem: <T>(contextItem: T | null, statuses: Statuses, callback: RootCreationCallback<T>, deps?: Dependencies) => T;
@@ -1,31 +1,11 @@
1
- import { useDepsKey } from '../useDepsKey';
2
- import { useCreation, useLatest, useMemoizedFn } from 'ahooks';
1
+ import { useRootCreation } from '../useRootCreation';
3
2
  import { Statuses } from '../../enums/Statuses';
4
- import { methodUseCase } from '../../usecases/methodUseCase';
5
- export const useContextualItem = function (contextItem, statuses, createFactory) {
3
+ export const useContextualItem = function (contextItem, statuses, callback) {
6
4
  let deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
7
- const depsKey = useDepsKey(deps);
8
- const factoryRef = useLatest(createFactory);
9
- const onCache = useMemoizedFn(() => {
10
- const _methodUseCase = methodUseCase(),
11
- cacheCall = _methodUseCase.cacheCall;
12
- const currentFactory = factoryRef.current;
13
- // 防止在以下 `onCreate()` 多次调用实际 `factory`
14
- return cacheCall(currentFactory, {
15
- onCompare() {
16
- return true;
17
- }
18
- });
19
- });
20
- const onCreate = useCreation(() => {
21
- void depsKey;
22
- return onCache();
23
- }, [depsKey, onCache]);
24
- return useCreation(() => {
25
- const rootEnabled = (statuses & Statuses.RootEnabled) === Statuses.RootEnabled;
26
- if (!rootEnabled && contextItem) {
27
- return contextItem;
28
- }
29
- return onCreate();
30
- }, [statuses, contextItem, onCreate]);
5
+ const rootEnabled = (statuses & Statuses.RootEnabled) === Statuses.RootEnabled;
6
+ const rootItem = useRootCreation(statuses, callback, false, deps);
7
+ if (rootEnabled) {
8
+ return rootItem;
9
+ }
10
+ return contextItem;
31
11
  };
@@ -1,4 +1,4 @@
1
1
  import { UseCaseHookOptions } from '../useUseCase/types';
2
2
  import { EntityStore } from '@mic-rexjs/usecases';
3
3
  import { Statuses } from '../../enums/Statuses';
4
- export declare const useEntity: <T, TUseCaseOptions extends object, TOptions extends UseCaseHookOptions<T, TUseCaseOptions> = UseCaseHookOptions<T, TUseCaseOptions>>(store: EntityStore<T>, statuses: Statuses, options: TOptions) => T;
4
+ export declare const useEntity: <T>(store: EntityStore<T>, statuses: Statuses, hookOptions: UseCaseHookOptions<T>) => T;
@@ -4,15 +4,15 @@ import { useEntityInitializing } from '../useEntityInitializing';
4
4
  import { useExec } from '../useExec';
5
5
  import { utilsUseCase } from '@mic-rexjs/usecases';
6
6
  import { useLatest, useMemoizedFn, useUnmount, useUpdate, useUpdateEffect } from 'ahooks';
7
- import { useEffect, useRef } from 'react';
7
+ import { useRef } from 'react';
8
8
  import { Statuses } from '../../enums/Statuses';
9
9
  import { triggerWatchers } from '../../methods/triggerWatchers';
10
10
  import { lifecycleEventUseCase } from '../../usecases/lifecycleEventUseCase';
11
- export const useEntity = (store, statuses, options) => {
11
+ export const useEntity = (store, statuses, hookOptions) => {
12
12
  const entity = store.value;
13
13
  const update = useUpdate();
14
14
  const isInitializing = useEntityInitializing(statuses);
15
- const optionsRef = useLatest(options);
15
+ const hookOptionsRef = useLatest(hookOptions);
16
16
  const prevEntityRef = useRef(entity);
17
17
  const entityEnabled = (statuses & Statuses.EntityEnabled) === Statuses.EntityEnabled;
18
18
  const entityRootEnabled = (statuses & Statuses.EntityRootEnabled) === Statuses.EntityRootEnabled;
@@ -28,7 +28,7 @@ export const useEntity = (store, statuses, options) => {
28
28
  return createKey();
29
29
  });
30
30
  const onTriggerWatchers = useMemoizedFn((newEntity, oldEntity) => {
31
- const watch = optionsRef.current.watch;
31
+ const watch = hookOptionsRef.current.watch;
32
32
  if (!watch) {
33
33
  return;
34
34
  }
@@ -55,8 +55,8 @@ export const useEntity = (store, statuses, options) => {
55
55
  onUpdate === null || onUpdate === void 0 || onUpdate(newEntity, oldEntity);
56
56
  });
57
57
  const onEntityChange = useMemoizedFn((newEntity, oldEntity) => {
58
- const currentOptions = optionsRef.current;
59
- const onChange1 = currentOptions.onChange;
58
+ const currentHookOptions = hookOptionsRef.current;
59
+ const onChange1 = currentHookOptions.onChange;
60
60
  const _getLifecycleEvents2 = getLifecycleEvents(lifecycleKey),
61
61
  onChange2 = _getLifecycleEvents2.onChange;
62
62
  onEntityUpdate(newEntity, oldEntity);
@@ -79,7 +79,7 @@ export const useEntity = (store, statuses, options) => {
79
79
  }
80
80
  onBind === null || onBind === void 0 || onBind(entity);
81
81
  onAdopt === null || onAdopt === void 0 || onAdopt(entity);
82
- });
82
+ }, null, []);
83
83
  useUnmount(() => {
84
84
  if (!entityRootEnabled) {
85
85
  return;
@@ -102,14 +102,12 @@ export const useEntity = (store, statuses, options) => {
102
102
  return;
103
103
  }
104
104
  store.watch(onEntityChange);
105
- }, [store, entityEnabled, onEntityChange]);
105
+ },
106
106
  /**
107
107
  * 在变化时候,组件更新前,使用 `unwatch`
108
108
  */
109
- useEffect(() => {
110
- return () => {
111
- store.unwatch(onEntityChange);
112
- };
109
+ () => {
110
+ store.unwatch(onEntityChange);
113
111
  }, [store, entityEnabled, onEntityChange]);
114
112
  useUpdateEffect(() => {
115
113
  onEntityUpdate();
@@ -1,3 +1,3 @@
1
- import { ExecCallback } from './types';
1
+ import { ExecCallback, ExecDestructor } from './types';
2
2
  import { RestArguments } from '@mic-rexjs/usecases/es/types';
3
- export declare const useExec: <T>(callback: ExecCallback<T>, deps?: RestArguments) => T;
3
+ export declare const useExec: <T>(callback: ExecCallback<T>, destructor?: ExecDestructor | null, deps?: RestArguments) => T;
@@ -1,13 +1,26 @@
1
1
  import { useDepsKey } from '../useDepsKey';
2
- import { useCreation, useMemoizedFn } from 'ahooks';
3
- export const useExec = function (callback) {
4
- let deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [callback];
2
+ import { useCreation, useMemoizedFn, useUnmount } from 'ahooks';
3
+ import { useRef } from 'react';
4
+ export const useExec = function (callback, destructor) {
5
+ let deps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [callback];
5
6
  const depsKey = useDepsKey(deps);
6
- const execCallback = useMemoizedFn(() => {
7
+ const destructorRef = useRef(null);
8
+ const onDestruct = function () {
9
+ var _destructorRef$curren;
10
+ let isUnmount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
11
+ (_destructorRef$curren = destructorRef.current) === null || _destructorRef$curren === void 0 || _destructorRef$curren.call(destructorRef, isUnmount);
12
+ };
13
+ const onExec = useMemoizedFn(() => {
14
+ onDestruct();
15
+ // `destructor` 一定是在执行回调的时候,同步绑定的,保持两个回调内的闭包变量一致
16
+ destructorRef.current = destructor || null;
7
17
  return callback();
8
18
  });
19
+ useUnmount(() => {
20
+ onDestruct(true);
21
+ });
9
22
  return useCreation(() => {
10
23
  void depsKey;
11
- return execCallback();
12
- }, [depsKey, execCallback]);
24
+ return onExec();
25
+ }, [depsKey, onExec]);
13
26
  };
@@ -1,3 +1,6 @@
1
1
  export interface ExecCallback<T> {
2
2
  (): T;
3
3
  }
4
+ export interface ExecDestructor {
5
+ (isUnmount: boolean): void;
6
+ }
@@ -1,10 +1,10 @@
1
1
  import { EntityReducers, EntityUseCase, UseCase } from '@mic-rexjs/usecases';
2
2
  import { ReducerMap } from '@mic-rexjs/usecases/es/types';
3
- import { UseCaseHookContextualOptions, UseCaseHookOptions } from '../../hooks/useUseCase/types';
3
+ import { ContextualUseCaseHookOptions, UseCaseHookOptions } from '../../hooks/useUseCase/types';
4
4
  import { Dependencies, EntityInitializer } from '../../types';
5
5
  export type FullParameters<T, TReducers extends ReducerMap, TUseCaseOptions extends object> = [
6
6
  entity: T | EntityInitializer<T>,
7
7
  usecase: UseCase<TReducers, TUseCaseOptions> | EntityUseCase<T, TReducers & EntityReducers<T>, TUseCaseOptions>,
8
- options: TUseCaseOptions | UseCaseHookOptions<T, TUseCaseOptions> | UseCaseHookContextualOptions<T>,
8
+ options: TUseCaseOptions | UseCaseHookOptions<T, TUseCaseOptions> | ContextualUseCaseHookOptions<T>,
9
9
  deps: Dependencies
10
10
  ];
@@ -0,0 +1,5 @@
1
+ import { OptionsHookResult } from './types';
2
+ import { OptionsSet } from '../../classes/OptionsSet';
3
+ import { Statuses } from '../../enums/Statuses';
4
+ import { Dependencies } from '../../types';
5
+ export declare const useOptions: <T, TOptions extends object>(options: TOptions, optionsSet: OptionsSet<TOptions>, statuses: Statuses, deps?: Dependencies) => OptionsHookResult<T, TOptions>;
@@ -0,0 +1,54 @@
1
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
+ const _excluded = ["watch", "onChange"];
3
+ import { useExec } from '../useExec';
4
+ import { useRootCreation } from '../useRootCreation';
5
+ import { Statuses } from '../../enums/Statuses';
6
+ export const useOptions = function (options, optionsSet, statuses) {
7
+ let deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
8
+ const entityEnabled = (statuses & Statuses.EntityEnabled) === Statuses.EntityEnabled;
9
+ const entityRootEnabled = (statuses & Statuses.EntityRootEnabled) === Statuses.EntityRootEnabled;
10
+ const watch = options.watch,
11
+ onChange = options.onChange,
12
+ restOptions = _objectWithoutProperties(options, _excluded);
13
+ const _options$options = options.options,
14
+ propertyOptions = _options$options === void 0 ? restOptions : _options$options;
15
+ const contextualOptions = propertyOptions;
16
+ const hookOptions = entityEnabled ? {
17
+ watch,
18
+ onChange
19
+ } : {};
20
+ const onProxyEvent = propertyName => {
21
+ return new Proxy(() => {}, {
22
+ apply(fn, thisArgument, argumentList) {
23
+ return optionsSet.apply(propertyName, thisArgument, argumentList);
24
+ }
25
+ });
26
+ };
27
+ const onGet = (target, propertyName, receiver) => {
28
+ const isStringProperty = typeof propertyName === 'string';
29
+ const isEvent = isStringProperty && /^on[A-Z]/.test(propertyName);
30
+ if (!isEvent) {
31
+ return Reflect.get(target, propertyName, receiver);
32
+ }
33
+ return onProxyEvent(propertyName);
34
+ };
35
+ const rootOptions = useRootCreation(statuses, () => {
36
+ return new Proxy(contextualOptions, {
37
+ get: onGet
38
+ });
39
+ }, true, deps);
40
+ const entityUseCaseOptions = rootOptions || contextualOptions;
41
+ const usecaseOptions = entityEnabled ? entityUseCaseOptions : options;
42
+ useExec(() => {
43
+ if (!entityEnabled) {
44
+ return;
45
+ }
46
+ optionsSet.add(contextualOptions, entityRootEnabled);
47
+ }, () => {
48
+ optionsSet.delete(contextualOptions);
49
+ });
50
+ return {
51
+ hookOptions,
52
+ usecaseOptions
53
+ };
54
+ };
@@ -0,0 +1,5 @@
1
+ import { ContextualUseCaseHookOptions } from '../useUseCase/types';
2
+ export interface OptionsHookResult<T, TOptions extends object> {
3
+ hookOptions: ContextualUseCaseHookOptions<T>;
4
+ usecaseOptions: TOptions;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { ReducerMap } from '@mic-rexjs/usecases/es/types';
2
+ import { OptionsSet } from '../../classes/OptionsSet';
3
+ import { Statuses } from '../../enums/Statuses';
4
+ import { EntityUseCaseContextValue, UseCaseContext } from '../../usecases/contextUseCase/types';
5
+ export declare const useOptionsSet: <T, TReducers extends ReducerMap, TOptions extends object>(context: UseCaseContext<EntityUseCaseContextValue<T, TReducers, TOptions>>, statuses: Statuses) => OptionsSet<TOptions>;
@@ -0,0 +1,16 @@
1
+ import { useRootCreation } from '../useRootCreation';
2
+ import { useContext } from 'react';
3
+ import { OptionsSet } from '../../classes/OptionsSet';
4
+ export const useOptionsSet = (context, statuses) => {
5
+ // 过滤掉三个特殊属性
6
+ const contextValue = useContext(context);
7
+ const _ref = contextValue || {},
8
+ contextOptionsSet = _ref.optionsSet;
9
+ const rootEventsSet = useRootCreation(statuses, () => {
10
+ return new OptionsSet();
11
+ });
12
+ if (rootEventsSet) {
13
+ return rootEventsSet;
14
+ }
15
+ return contextOptionsSet;
16
+ };
@@ -1,6 +1,4 @@
1
1
  import { UseCaseProvider } from './types';
2
- import { EntityStore } from '@mic-rexjs/usecases';
3
2
  import { ReducerMap } from '@mic-rexjs/usecases/es/types';
4
- import { Statuses } from '../../enums/Statuses';
5
3
  import { UseCaseContext, UseCaseContextValue } from '../../usecases/contextUseCase/types';
6
- export declare const useProvider: <T, TReducers extends ReducerMap>(statuses: Statuses, context: UseCaseContext<UseCaseContextValue<TReducers>>, store: EntityStore<T>, reducers: TReducers) => UseCaseProvider;
4
+ export declare const useProvider: <T extends ReducerMap, TContextValue extends UseCaseContextValue<T>>(context: UseCaseContext<TContextValue>, contextValue: TContextValue) => UseCaseProvider;
@@ -1,15 +1,7 @@
1
1
  import { useConstantFn } from '../useConstantFn';
2
- import { useCreation, useLatest } from 'ahooks';
2
+ import { useLatest } from 'ahooks';
3
3
  import React from 'react';
4
- import { contextUseCase } from '../../usecases/contextUseCase';
5
- export const useProvider = (statuses, context, store, reducers) => {
6
- const entity = store.value;
7
- const contextValue = useCreation(() => {
8
- const _contextUseCase = contextUseCase(),
9
- createContextValue = _contextUseCase.createContextValue;
10
- void entity;
11
- return createContextValue(store, reducers, statuses);
12
- }, [statuses, entity, store, reducers]);
4
+ export const useProvider = (context, contextValue) => {
13
5
  const contextValueRef = useLatest(contextValue);
14
6
  return useConstantFn(_ref => {
15
7
  let children = _ref.children,
@@ -3,4 +3,4 @@ import { EntityReducers, EntityUseCase, ReducerMap, UseCase } from '@mic-rexjs/u
3
3
  import { Statuses } from '../../enums/Statuses';
4
4
  import { Dependencies } from '../../types';
5
5
  import { UseCaseContext, UseCaseContextValue } from '../../usecases/contextUseCase/types';
6
- export declare const useReducers: <T, TReducers extends ReducerMap, TUseCaseOptions extends object>(usecase: UseCase<TReducers, TUseCaseOptions> | EntityUseCase<T, TReducers & EntityReducers<T>, TUseCaseOptions>, context: UseCaseContext<UseCaseContextValue<TReducers>>, store: EntityStore<T>, statuses: Statuses, options: TUseCaseOptions, deps?: Dependencies) => TReducers;
6
+ export declare const useReducers: <T, TReducers extends ReducerMap, TOptions extends object>(usecase: UseCase<TReducers, TOptions> | EntityUseCase<T, TReducers & EntityReducers<T>, TOptions>, store: EntityStore<T>, context: UseCaseContext<UseCaseContextValue<TReducers>>, statuses: Statuses, usecaseOptions: TOptions, deps?: Dependencies) => TReducers;
@@ -1,43 +1,24 @@
1
- import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
- const _excluded = ["watch", "onChange", "options"];
3
1
  import { useContextualItem } from '../useContextualItem';
4
2
  import { createEntityReducers } from '@mic-rexjs/usecases';
5
- import { useLatest } from 'ahooks';
6
3
  import { useContext } from 'react';
7
4
  import { Statuses } from '../../enums/Statuses';
8
- import { methodUseCase } from '../../usecases/methodUseCase';
9
- export const useReducers = function (usecase, context, store, statuses, options) {
5
+ export const useReducers = function (usecase, store, context, statuses, usecaseOptions) {
10
6
  let deps = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
11
- const optionsRef = useLatest(options);
12
7
  const contextValue = useContext(context);
13
8
  const _ref = contextValue || {},
14
9
  _ref$reducers = _ref.reducers,
15
10
  contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
16
- const entityRootEnabled = (statuses & Statuses.EntityRootEnabled) === Statuses.EntityRootEnabled;
11
+ const entityEnabled = (statuses & Statuses.EntityEnabled) === Statuses.EntityEnabled;
17
12
  const onCreate = () => {
18
- const _methodUseCase = methodUseCase(),
19
- captureCalls = _methodUseCase.captureCalls;
20
- const opts = captureCalls(options, (key, callArgs) => {
21
- var _optionsRef$current$k, _optionsRef$current;
22
- return (_optionsRef$current$k = (_optionsRef$current = optionsRef.current)[key]) === null || _optionsRef$current$k === void 0 ? void 0 : _optionsRef$current$k.call(_optionsRef$current, ...callArgs);
23
- });
24
- if (!entityRootEnabled) {
25
- return usecase(opts);
13
+ if (!entityEnabled) {
14
+ return usecase(usecaseOptions);
26
15
  }
27
- const hookOptions = opts;
28
- const watch = hookOptions.watch,
29
- onChange = hookOptions.onChange,
30
- usecaseOptions = hookOptions.options,
31
- restUseCaseOptions = _objectWithoutProperties(hookOptions, _excluded);
32
16
  return createEntityReducers(store, usecase, {
33
- ...restUseCaseOptions,
34
- ...usecaseOptions,
17
+ options: usecaseOptions,
35
18
  onGenerate(newEntity, result) {
36
19
  return result;
37
20
  }
38
21
  });
39
22
  };
40
- return useContextualItem(contextReducers, statuses, () => {
41
- return onCreate();
42
- }, deps);
23
+ return useContextualItem(contextReducers, statuses, onCreate, deps);
43
24
  };
@@ -0,0 +1,4 @@
1
+ import { RootCreationCallback } from './types';
2
+ import { Statuses } from '../../enums/Statuses';
3
+ import { Dependencies } from '../../types';
4
+ export declare const useRootCreation: <T>(statuses: Statuses, callback: RootCreationCallback<T>, shouldCheckEntity?: boolean, deps?: Dependencies) => T | null;
@@ -0,0 +1,20 @@
1
+ import { useDepsKey } from '../useDepsKey';
2
+ import { useCreation, useMemoizedFn } from 'ahooks';
3
+ import { Statuses } from '../../enums/Statuses';
4
+ export const useRootCreation = function (statuses, callback) {
5
+ let shouldCheckEntity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
6
+ let deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
7
+ const depsKey = useDepsKey(deps);
8
+ const targetStatuses = shouldCheckEntity ? Statuses.EntityRootEnabled : Statuses.RootEnabled;
9
+ const rootEnabled = (statuses & targetStatuses) === targetStatuses;
10
+ const onInit = useMemoizedFn(() => {
11
+ return callback();
12
+ });
13
+ return useCreation(() => {
14
+ void depsKey;
15
+ if (!rootEnabled) {
16
+ return null;
17
+ }
18
+ return onInit();
19
+ }, [rootEnabled, depsKey, onInit]);
20
+ };
@@ -0,0 +1,3 @@
1
+ export interface RootCreationCallback<T> {
2
+ (): T;
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -34,17 +34,6 @@ export const useStore = function (entityArg, context, statuses) {
34
34
  const createEntityList = createEntityListRef.current;
35
35
  createEntityListRef.current = runEntityInitializer(store, entityArg, createEntityList, isInitializing);
36
36
  };
37
- const onSetEntity = () => {
38
- if (isInitializing) {
39
- store.initValue(entityArg);
40
- return;
41
- }
42
- if (entityArg === prevEntityArg) {
43
- return;
44
- }
45
- // 执行同步操作
46
- store.setValue(entityArg);
47
- };
48
37
  /**
49
38
  * 这里仅仅是将非函数的 `entity` 同步;
50
39
  *
@@ -56,8 +45,14 @@ export const useStore = function (entityArg, context, statuses) {
56
45
  case !entityRootEnabled:
57
46
  case isFunction:
58
47
  return;
48
+ case isInitializing:
49
+ store.initValue(entityArg);
50
+ return;
51
+ case entityArg === prevEntityArg:
52
+ return;
59
53
  }
60
- onSetEntity();
54
+ // 执行同步操作
55
+ store.setValue(entityArg);
61
56
  });
62
57
  return useContextualItem(contextStore, statuses, () => {
63
58
  if (entityRootEnabled && isFunction) {