@mic-rexjs/usecases-react 2.1.0 → 2.1.3
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.
- package/dist/index.min.js +1 -1
- package/es/configs/defaultUseCaseContext/types.d.ts +1 -4
- package/es/enums/UseCaseModeErrors/index.d.ts +4 -0
- package/es/enums/UseCaseModeErrors/index.js +5 -0
- package/es/hooks/useEntity/index.js +13 -10
- package/es/hooks/useGlobalUseCase/index.js +3 -4
- package/es/hooks/useGlobalUseCase/index.test.js +0 -30
- package/es/hooks/useGlobalUseCase/types.d.ts +3 -7
- package/es/hooks/useProvider/index.js +3 -11
- package/es/hooks/useSafeMode/index.d.ts +3 -0
- package/es/hooks/useSafeMode/index.js +18 -0
- package/es/hooks/useUseCase/index.js +3 -3
- package/es/hooks/useUseCase/index.test.js +48 -19
- package/es/hooks/useUseCase/types.d.ts +12 -4
- package/lib/components/UpdateFragment/index.js +3 -4
- package/lib/components/UseCaseFragment/index.js +2 -3
- package/lib/configs/defaultUseCaseContext/index.js +1 -2
- package/lib/configs/useCaseContextReferenceMap/index.js +1 -2
- package/lib/enums/UseCaseArgumentTypes/index.js +0 -1
- package/lib/enums/UseCaseModeErrors/index.js +11 -0
- package/lib/enums/UseCaseModes/index.js +0 -1
- package/lib/enums/UseCaseStatuses/index.js +0 -1
- package/lib/hooks/useArgumentTypes/index.js +2 -3
- package/lib/hooks/useCompareDeps/index.js +2 -3
- package/lib/hooks/useConstant/index.js +2 -3
- package/lib/hooks/useConstantFn/index.js +2 -3
- package/lib/hooks/useContextualItem/index.js +2 -3
- package/lib/hooks/useEntity/index.js +17 -13
- package/lib/hooks/useGlobalUseCase/index.js +4 -11
- package/lib/hooks/useGlobalUseCase/index.test.js +2 -27
- package/lib/hooks/useIsRenderingRef/index.js +2 -3
- package/lib/hooks/useMemoizedCall/index.js +2 -3
- package/lib/hooks/useProvider/index.js +6 -15
- package/lib/hooks/useSafeMode/index.js +24 -0
- package/lib/hooks/useStatelessUseCase/index.js +2 -3
- package/lib/hooks/useStatelessUseCase/index.test.js +2 -2
- package/lib/hooks/useUseCase/index.js +5 -7
- package/lib/hooks/useUseCase/index.test.js +57 -41
- package/lib/hooks/useUseCaseContext/index.js +2 -3
- package/lib/hooks/useUseCaseStatuses/index.js +2 -3
- package/lib/methods/cacheCall/index.js +2 -3
- package/lib/methods/cacheCalls/index.js +2 -3
- package/lib/methods/compareProperty/index.js +2 -3
- package/lib/methods/fillArguments/index.js +2 -3
- package/lib/methods/getRenderingEntity/index.js +2 -3
- package/lib/methods/hasField/index.js +2 -3
- package/lib/methods/initEntityReducers/index.js +4 -5
- package/lib/methods/isSameArray/index.js +2 -3
- package/lib/methods/triggerCallbacks/index.js +2 -3
- package/lib/methods/triggerWatchers/index.js +2 -3
- package/package.json +14 -14
- package/es/methods/transformGlobalArguments/index.d.ts +0 -3
- package/es/methods/transformGlobalArguments/index.js +0 -8
- package/es/methods/transformGlobalArguments/types.d.ts +0 -2
- package/es/methods/transformGlobalArguments/types.js +0 -1
- package/lib/methods/transformGlobalArguments/index.js +0 -21
- package/lib/methods/transformGlobalArguments/types.js +0 -5
package/dist/index.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see index.min.js.LICENSE.txt */
|
|
2
|
-
!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})()));
|
|
2
|
+
(()=>{var e={20:(e,t,n)=>{"use strict";var r=n(594),o=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),u=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,n){var r,l={},s=null,c=null;for(r in void 0!==n&&(s=""+n),void 0!==t.key&&(s=""+t.key),void 0!==t.ref&&(c=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:s,ref:c,props:l,_owner:u.current}}},848:(e,t,n)=>{"use strict";e.exports=n(20)},594:e=>{"use strict";e.exports=React}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{UseCaseFragment:()=>A,useGlobalUseCase:()=>N,useStatelessUseCase:()=>M,useUseCase:()=>G});var e=n(848),t=n(594),o=n.n(t);function a(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 u(e,t){if(e){if("string"==typeof e)return a(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)?a(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,s=!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){s=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(s)throw o}}return i}}(e,t)||u(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=ahooks;var s,c=function(e){return i((0,t.useState)((function(){return e})),1)[0]};function f(e){return f="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},f(e)}function b(e){var t=function(e,t){if("object"!=f(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=f(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==f(t)?t:String(t)}!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"}(s||(s={}));const d=usecases;var y=["watch","onChange","options"];function v(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(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach((function(t){var r,o,a;r=e,o=t,a=n[t],(o=b(o))in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var p,m,h=function(e){return i((0,t.useState)(e),1)[0]},S=new Map;!function(e){e[e.None=0]="None",e[e.Entity=2]="Entity",e[e.Mode=4]="Mode"}(p||(p={})),function(e){e[e.Normal=2]="Normal",e[e.Stateless=4]="Stateless",e[e.Global=8]="Global",e[e.StatelessGlobal=12]="StatelessGlobal"}(m||(m={}));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},w=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,s=l.parameters,c=l.returnValue;if(i(s,o))return c}var f=e.apply(void 0,o);return t&&(n={parameters:o,returnValue:f}),f}},j=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,l.useLatest)(o),(0,l.useCreation)((function(){return w(u.current,{onCompare:function(){return!0}})}),[a,u]));return(0,l.useCreation)((function(){return(e&s.RootEnabled)!==s.RootEnabled&&n?n:i()}),[e,n,i])};function C(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||u(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 R,P=function(e,t){return"object"===f(e)&&null!==e&&Object.hasOwn(e,t)},_=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),s=l[1],c=void 0===s?r:s,f=l[2],b=void 0===f?"":f,d=P(t,c),y=P(n,c),v=[].concat(C(a),[c]);if(d||y){var E=d?t[c]:u,p=y?n[c]:u;if(b)return void e(E,p,b,o,v);if(E===p)return;o(E,p,v)}else if(!/^\d+^/.test(c))for(var m=Array.isArray(t)?t:[],h=Array.isArray(n)?n:[],S=m.length,g=h.length,O=Math.max(S,g),w=0;w<O;w++)e(m[w],h[w],r,o,[].concat(C(a),["".concat(w)]))},x=function(e,t,n){for(var r=function(){var e=i(a[o],2),r=e[0],u=e[1];_(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(e){e.UnsupportedGlobal='useUseCase does not support "global" mode with entity usecase',e.UnsupportedStateless='useUseCase does not support "stateless" mode with non-entity usecase'}(R||(R={}));var G=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a,u=function(e){return h((function(){var t=p.None,n=i(e,3),r=n[1],o=n[2],a=f(r);switch("function"===a&&(t|=p.Entity),"number"){case a:case f(o):t|=p.Mode}return t}))}(n),b=function(e,t){var n=i(e,5),r=n[0],o=n[1],a=n[2],u=n[3],l=n[4],s=(t&p.Entity)===p.Entity,c=(t&p.Mode)===p.Mode;return s?c?[r,o,a,u||{},l||[]]:[r,o,m.Normal,a||{},u||[]]:c?[null,r,o,a||{},u||[]]:[null,r,m.Normal,o||{},a||[]]}(n,u),v=i(b,5),O=v[0],C=v[1],P=v[2],_=v[3],G=v[4],A=c(C),N=A,M=A,U=((a=(0,t.useRef)(!0)).current=!0,(0,t.useEffect)((function(){a.current=!1})),a),I=function(e,t){return h((function(){if((t&p.Entity)===p.Entity){if((e&m.Global)===m.Global)throw R.UnsupportedGlobal;return e}if((e&m.Stateless)===m.Stateless)throw R.UnsupportedStateless;return e}))}(P,u),k=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p.None,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m.Normal,o=S,a=h((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&m.Global)===m.Global:case(n&p.Entity)===p.Entity:break;default:return g}var l=(0,t.createContext)(null);return o.set(e,{value:l,times:1}),l}));return(0,l.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}(A,u,I),L=(0,t.useContext)(k),T=L,D=function(e,t,n){return(0,l.useCreation)((function(){var r=s.None,o=(n||{}).store;return(e&p.Entity)===p.Entity&&(r|=s.EntityRootEnabled),r|=null===n?s.RootEnabled:s.ContextEnabled,o&&(r|=s.EntityEnabled),(t&m.Stateless)===m.Stateless&&(r|=s.StatelessEnabled),(t&m.Global)===m.Global&&(r|=s.GlobalEnabled),r}),[e,n,t])}(u,I,L),V=(L||{}).reducers,$=void 0===V?null:V,F=(T||{}).store,B=i(function(e,n,r,o){var a=i((0,t.useState)(n),2),u=a[0],c=a[1],f=r?r.value:null,b=function(e,t,n,r){return(e&s.EntityRootEnabled)!==s.EntityRootEnabled?r:(e&s.StatelessEnabled)!==s.StatelessEnabled?t:"function"==typeof n?n():n}(e,u,n,f),y=(0,l.useLatest)(o),v=(e&s.EntityRootEnabled)===s.EntityRootEnabled,E=j(e,r,(function(){if(!v)return new d.EntityStore(null);var t=(e&s.StatelessEnabled)===s.StatelessEnabled;return new d.EntityStore(b,{onChange:function(e){var n=e.newEntity;t||c(n)}})}));return v&&(E.value=b),(0,t.useEffect)((function(){if((e&s.EntityEnabled)===s.EntityEnabled){var t=function(e){var t=e.newEntity,n=e.oldEntity,r=y.current,o=r.onChange,a=r.watch;a&&x(a,t,n),null==o||o(t,n)};return E.addEventListener("change",t),function(){E.removeEventListener("change",t)}}}),[e,E,y]),(0,l.useCreation)((function(){return[b,E]}),[b,E])}(D,O,void 0===F?null:F,_),2),W=B[0],Y=B[1],q=j(D,$,(function(){return(D&s.EntityEnabled)!==s.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,y);return(0,d.createEntityReducers)(t,e,E(E(E({},o),r),{},{onGenerate:function(e,t){return t}}))}(M,Y,_)}),G),z=function(e,n,r,a){var u=r.value,i=(0,t.useMemo)((function(){return(e&s.EntityEnabled)===s.EntityEnabled?{store:r,reducers:a}:{reducers:a}}),[e,u,r,a]),f=(0,l.useLatest)(i);return c((function(e){var t=e.children,r=e.with,a=void 0===r?[]:r,u=n.Provider;return o().createElement(u,{value:f.current},a.reduceRight((function(e,t){return o().createElement(t,{},e)}),t))}))}(D,k,Y,q);return(0,l.useCreation)((function(){if((D&s.ContextEnabled)!==s.ContextEnabled)return q;var e=(D&s.RootEnabled)===s.RootEnabled;if((D&s.EntityEnabled)!==s.EntityEnabled)return e?[q,z]:q;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]=w(a,t)})),n}(q,{onShouldCache:function(){return U.current}});return e?[W,t,z]:[W,t]}),[D,W,q,z,U])},A=function(n){var r=n.usecase,o=n.watch,a=n.onChange;return G(r,{watch:o,onChange:a}),(0,e.jsx)(t.Fragment,{})},N=function(e,t,n){return G(e,m.Global,t,n)},M=function(e,t,n,r){return G(e,t,m.Stateless,n,r)}})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
|
|
@@ -13,8 +13,5 @@ export interface UseCaseContextValue<T extends ReducerMap> {
|
|
|
13
13
|
export interface EntityUseCaseContextValue<T, TEntityReducers extends EntityReducerMap<T>> extends UseCaseContextValue<ContextualEntityReducers<T, TEntityReducers>> {
|
|
14
14
|
store: EntityStore<T>;
|
|
15
15
|
}
|
|
16
|
-
export interface
|
|
17
|
-
(): T;
|
|
18
|
-
}
|
|
19
|
-
export interface UseCaseContext<T> extends React.Context<UseCaseContextValueGetter<T> | null> {
|
|
16
|
+
export interface UseCaseContext<T> extends React.Context<T | null> {
|
|
20
17
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export var UseCaseModeErrors;
|
|
2
|
+
(function (UseCaseModeErrors) {
|
|
3
|
+
UseCaseModeErrors["UnsupportedGlobal"] = "useUseCase does not support \"global\" mode with entity usecase";
|
|
4
|
+
UseCaseModeErrors["UnsupportedStateless"] = "useUseCase does not support \"stateless\" mode with non-entity usecase";
|
|
5
|
+
})(UseCaseModeErrors || (UseCaseModeErrors = {}));
|
|
@@ -7,7 +7,7 @@ import { useCreation, useLatest } from 'ahooks';
|
|
|
7
7
|
import { triggerWatchers } from '../../methods/triggerWatchers';
|
|
8
8
|
export const useEntity = (statuses, rootEntity, contextStore, options) => {
|
|
9
9
|
const [entityState, setEntityState] = useState(rootEntity);
|
|
10
|
-
const contextEntity = (contextStore
|
|
10
|
+
const contextEntity = (contextStore ? contextStore.value : null);
|
|
11
11
|
const renderingEntity = getRenderingEntity(statuses, entityState, rootEntity, contextEntity);
|
|
12
12
|
const optionsRef = useLatest(options);
|
|
13
13
|
const entityRootEnabled = (statuses & UseCaseStatuses.EntityRootEnabled) === UseCaseStatuses.EntityRootEnabled;
|
|
@@ -16,31 +16,34 @@ export const useEntity = (statuses, rootEntity, contextStore, options) => {
|
|
|
16
16
|
return new EntityStore(null);
|
|
17
17
|
}
|
|
18
18
|
const stateless = (statuses & UseCaseStatuses.StatelessEnabled) === UseCaseStatuses.StatelessEnabled;
|
|
19
|
-
return new EntityStore(renderingEntity,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
return new EntityStore(renderingEntity, {
|
|
20
|
+
onChange({ newEntity }) {
|
|
21
|
+
if (stateless) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
setEntityState(newEntity);
|
|
25
|
+
},
|
|
24
26
|
});
|
|
25
27
|
});
|
|
26
28
|
if (entityRootEnabled) {
|
|
27
29
|
// 执行同步操作
|
|
28
|
-
store.
|
|
30
|
+
store.value = renderingEntity;
|
|
29
31
|
}
|
|
30
32
|
useEffect(() => {
|
|
31
33
|
if ((statuses & UseCaseStatuses.EntityEnabled) !== UseCaseStatuses.EntityEnabled) {
|
|
32
34
|
return;
|
|
33
35
|
}
|
|
34
|
-
const
|
|
36
|
+
const onEntityChange = (e) => {
|
|
37
|
+
const { newEntity, oldEntity } = e;
|
|
35
38
|
const { onChange, watch } = optionsRef.current;
|
|
36
39
|
if (watch) {
|
|
37
40
|
triggerWatchers(watch, newEntity, oldEntity);
|
|
38
41
|
}
|
|
39
42
|
onChange?.(newEntity, oldEntity);
|
|
40
43
|
};
|
|
41
|
-
store.
|
|
44
|
+
store.addEventListener('change', onEntityChange);
|
|
42
45
|
return () => {
|
|
43
|
-
store.
|
|
46
|
+
store.removeEventListener('change', onEntityChange);
|
|
44
47
|
};
|
|
45
48
|
}, [statuses, store, optionsRef]);
|
|
46
49
|
return useCreation(() => {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { useUseCase } from '../useUseCase';
|
|
2
|
-
import {
|
|
3
|
-
export const useGlobalUseCase = ((
|
|
4
|
-
|
|
5
|
-
return useUseCase(...transformedArgs);
|
|
2
|
+
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
3
|
+
export const useGlobalUseCase = ((useCase, options, deps) => {
|
|
4
|
+
return useUseCase(useCase, UseCaseModes.Global, options, deps);
|
|
6
5
|
});
|
|
@@ -1,42 +1,12 @@
|
|
|
1
1
|
import { useGlobalUseCase } from '.';
|
|
2
|
-
import { entityUseCase } from '@mic-rexjs/usecases';
|
|
3
2
|
import { describe, expect, jest, test } from '@jest/globals';
|
|
4
3
|
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
5
4
|
import { renderHook } from '@testing-library/react';
|
|
6
5
|
import * as useUseCaseModule from '../useUseCase';
|
|
7
|
-
const numberUseCase = () => {
|
|
8
|
-
return entityUseCase();
|
|
9
|
-
};
|
|
10
6
|
const mathUseCase = () => {
|
|
11
7
|
return {};
|
|
12
8
|
};
|
|
13
9
|
describe('useGlobalUseCase', () => {
|
|
14
|
-
describe('`useGlobalUseCase` should work the same as `RootCoreCollectionHook`', () => {
|
|
15
|
-
test('check `useUseCase` has received correct arguments', () => {
|
|
16
|
-
const useMockedUseCase = jest.fn();
|
|
17
|
-
jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
|
|
18
|
-
renderHook(() => {
|
|
19
|
-
useGlobalUseCase(1, numberUseCase);
|
|
20
|
-
});
|
|
21
|
-
expect(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, UseCaseModes.Global, void 0, void 0);
|
|
22
|
-
jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
|
|
23
|
-
});
|
|
24
|
-
test('should should return `CoreCollection` with Provider', () => {
|
|
25
|
-
const { result } = renderHook(() => {
|
|
26
|
-
return useGlobalUseCase(1, numberUseCase);
|
|
27
|
-
});
|
|
28
|
-
const { current } = result;
|
|
29
|
-
expect(current).toEqual([
|
|
30
|
-
1,
|
|
31
|
-
{
|
|
32
|
-
setEntity: expect.any(Function),
|
|
33
|
-
},
|
|
34
|
-
expect.any(Function),
|
|
35
|
-
void 0,
|
|
36
|
-
void 0,
|
|
37
|
-
]);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
10
|
describe('`useGlobalUseCase` should work the same as `GlobalPseudoCoreCollectionHook`', () => {
|
|
41
11
|
test('check `useUseCase` has received correct arguments', () => {
|
|
42
12
|
const useMockedUseCase = jest.fn();
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { PseudoCoreCollection
|
|
3
|
-
export
|
|
4
|
-
export interface GlobalPseudoCoreCollectionHook {
|
|
1
|
+
import { Reducers, UseCase } from '@mic-rexjs/usecases';
|
|
2
|
+
import { PseudoCoreCollection } from '../useUseCase/types';
|
|
3
|
+
export interface GlobalUseCaseHook {
|
|
5
4
|
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): PseudoCoreCollection<T>;
|
|
6
5
|
}
|
|
7
|
-
export type GlobalUseCaseHookParameters = Parameters<RootCoreCollectionHook> | Parameters<GlobalPseudoCoreCollectionHook>;
|
|
8
|
-
export interface GlobalUseCaseHook extends RootCoreCollectionHook, GlobalPseudoCoreCollectionHook {
|
|
9
|
-
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useLatest } from 'ahooks';
|
|
2
|
-
import React, {
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
3
|
import { useConstantFn } from '../useConstantFn';
|
|
4
4
|
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
5
5
|
export const useProvider = (statuses, context, store, reducers) => {
|
|
6
|
-
const entity = store
|
|
6
|
+
const { value: entity } = store;
|
|
7
7
|
const contextValue = useMemo(() => {
|
|
8
8
|
void entity;
|
|
9
9
|
if ((statuses & UseCaseStatuses.EntityEnabled) === UseCaseStatuses.EntityEnabled) {
|
|
@@ -14,19 +14,11 @@ export const useProvider = (statuses, context, store, reducers) => {
|
|
|
14
14
|
}
|
|
15
15
|
return { reducers };
|
|
16
16
|
}, [statuses, entity, store, reducers]);
|
|
17
|
-
const isGlobal = (statuses & UseCaseStatuses.GlobalEnabled) === UseCaseStatuses.GlobalEnabled;
|
|
18
|
-
const updateDep = isGlobal ? null : contextValue;
|
|
19
17
|
const contextValueRef = useLatest(contextValue);
|
|
20
|
-
// 这里必须使用 `useCallback`,因为要使用在 `Provider` 的 `value` 属性上面,需要可变化的
|
|
21
|
-
const getContextValue = useCallback(() => {
|
|
22
|
-
void updateDep;
|
|
23
|
-
return contextValueRef.current;
|
|
24
|
-
}, [updateDep, contextValueRef]);
|
|
25
|
-
const getterRef = useLatest(getContextValue);
|
|
26
18
|
return useConstantFn(({ children, with: withProviders = [] }) => {
|
|
27
19
|
const { Provider: ContextProvider } = context;
|
|
28
20
|
return React.createElement(ContextProvider, {
|
|
29
|
-
value:
|
|
21
|
+
value: contextValueRef.current,
|
|
30
22
|
}, withProviders.reduceRight((currentChildren, withProvider) => {
|
|
31
23
|
return React.createElement(withProvider, {}, currentChildren);
|
|
32
24
|
}, children));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
2
|
+
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
3
|
+
import { useConstant } from '../useConstant';
|
|
4
|
+
import { UseCaseModeErrors } from '../../enums/UseCaseModeErrors';
|
|
5
|
+
export const useSafeMode = (unsafeMode, argumentTypes) => {
|
|
6
|
+
return useConstant(() => {
|
|
7
|
+
if ((argumentTypes & UseCaseArgumentTypes.Entity) === UseCaseArgumentTypes.Entity) {
|
|
8
|
+
if ((unsafeMode & UseCaseModes.Global) === UseCaseModes.Global) {
|
|
9
|
+
throw UseCaseModeErrors.UnsupportedGlobal;
|
|
10
|
+
}
|
|
11
|
+
return unsafeMode;
|
|
12
|
+
}
|
|
13
|
+
if ((unsafeMode & UseCaseModes.Stateless) === UseCaseModes.Stateless) {
|
|
14
|
+
throw UseCaseModeErrors.UnsupportedStateless;
|
|
15
|
+
}
|
|
16
|
+
return unsafeMode;
|
|
17
|
+
});
|
|
18
|
+
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { useCreation } from 'ahooks';
|
|
2
2
|
import { useContext } from 'react';
|
|
3
|
-
import { useConstant } from '../useConstant';
|
|
4
3
|
import { useConstantFn } from '../useConstantFn';
|
|
5
4
|
import { useProvider } from '../useProvider';
|
|
6
5
|
import { initEntityReducers } from '../../methods/initEntityReducers';
|
|
@@ -13,6 +12,7 @@ import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
|
13
12
|
import { useEntity } from '../useEntity';
|
|
14
13
|
import { useContextualItem } from '../useContextualItem';
|
|
15
14
|
import { cacheCalls } from '../../methods/cacheCalls';
|
|
15
|
+
import { useSafeMode } from '../useSafeMode';
|
|
16
16
|
export const useUseCase = ((...args) => {
|
|
17
17
|
const argumentTypes = useArgumentTypes(args);
|
|
18
18
|
const fullArguments = fillArguments(args, argumentTypes);
|
|
@@ -21,9 +21,9 @@ export const useUseCase = ((...args) => {
|
|
|
21
21
|
const usecase = unkownUsecase;
|
|
22
22
|
const entityUseCase = unkownUsecase;
|
|
23
23
|
const isRenderingRef = useIsRenderingRef();
|
|
24
|
-
const mode =
|
|
24
|
+
const mode = useSafeMode(unsafeMode, argumentTypes);
|
|
25
25
|
const context = useUseCaseContext(unkownUsecase, argumentTypes, mode);
|
|
26
|
-
const contextValue = useContext(context)
|
|
26
|
+
const contextValue = useContext(context);
|
|
27
27
|
const entityContextValue = contextValue;
|
|
28
28
|
const statuses = useUseCaseStatuses(argumentTypes, mode, contextValue);
|
|
29
29
|
const { reducers: contextReducers = null } = contextValue || {};
|
|
@@ -6,6 +6,7 @@ import { useUseCase } from '.';
|
|
|
6
6
|
import { useDeepCompareEffect, useMemoizedFn, useMount, useUpdate, useUpdateEffect } from 'ahooks';
|
|
7
7
|
import { Fragment, useEffect, useRef, useState } from 'react';
|
|
8
8
|
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
9
|
+
import { UseCaseModeErrors } from '../../enums/UseCaseModeErrors';
|
|
9
10
|
const EXT_1 = '.png';
|
|
10
11
|
const EXT_2 = '.jpg';
|
|
11
12
|
const PATH_1 = `hello${EXT_1}`;
|
|
@@ -124,17 +125,17 @@ beforeEach(() => {
|
|
|
124
125
|
subtractionReducer.mockClear();
|
|
125
126
|
});
|
|
126
127
|
describe('useUseCase', () => {
|
|
127
|
-
describe
|
|
128
|
+
describe('`useUseCase` should work the same as `useRootCoreCollection`', () => {
|
|
128
129
|
test('check `context.length`', () => {
|
|
129
130
|
const { result } = renderHook(() => {
|
|
130
|
-
return useUseCase(defaultFile, fileUseCase
|
|
131
|
+
return useUseCase(defaultFile, fileUseCase);
|
|
131
132
|
});
|
|
132
133
|
const { current: cores } = result;
|
|
133
134
|
expect(cores).toHaveLength(3);
|
|
134
135
|
});
|
|
135
136
|
test('`entity` should equal `defaultFile`', () => {
|
|
136
137
|
const { result } = renderHook(() => {
|
|
137
|
-
return useUseCase(defaultFile, fileUseCase
|
|
138
|
+
return useUseCase(defaultFile, fileUseCase);
|
|
138
139
|
});
|
|
139
140
|
const { current: cores } = result;
|
|
140
141
|
const [entity] = cores;
|
|
@@ -412,6 +413,28 @@ describe('useUseCase', () => {
|
|
|
412
413
|
fireEvent.click(screen.getByText(updateButtonText));
|
|
413
414
|
expect(addReducer).toHaveBeenCalledTimes(3);
|
|
414
415
|
});
|
|
416
|
+
test.each([
|
|
417
|
+
{
|
|
418
|
+
mode: UseCaseModes.Normal,
|
|
419
|
+
toThrow: '',
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
mode: UseCaseModes.Global,
|
|
423
|
+
toThrow: UseCaseModeErrors.UnsupportedGlobal,
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
mode: UseCaseModes.Stateless,
|
|
427
|
+
toThrow: '',
|
|
428
|
+
},
|
|
429
|
+
])('does not support global mode', ({ mode, toThrow }) => {
|
|
430
|
+
renderHook(() => {
|
|
431
|
+
expect(() => {
|
|
432
|
+
useUseCase(defaultFile, fileUseCase, mode);
|
|
433
|
+
// 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
|
|
434
|
+
throw '';
|
|
435
|
+
}).toThrow(toThrow);
|
|
436
|
+
});
|
|
437
|
+
});
|
|
415
438
|
test('stateless mode should not generate new reducers when `yeild entity`', () => {
|
|
416
439
|
const onUpdate = jest.fn();
|
|
417
440
|
const { result, rerender } = renderHook((file = defaultFile) => {
|
|
@@ -1186,22 +1209,6 @@ describe('useUseCase', () => {
|
|
|
1186
1209
|
expect(onParentUpdate).toHaveBeenCalledTimes(0);
|
|
1187
1210
|
expect(onChildUpdate).toHaveBeenCalledTimes(0);
|
|
1188
1211
|
});
|
|
1189
|
-
test('global mode should trigger Parent to update, but Child shoud not be updated', () => {
|
|
1190
|
-
const onParentUpdate = jest.fn();
|
|
1191
|
-
const onChildUpdate = jest.fn();
|
|
1192
|
-
const onSetPath = jest.fn(() => {
|
|
1193
|
-
return PATH_1;
|
|
1194
|
-
});
|
|
1195
|
-
render(_jsx("div", { children: _jsx(Parent, { mode: UseCaseModes.Global, onSetPath: onSetPath, onUpdate: onParentUpdate, children: _jsx(Child, { onUpdate: onChildUpdate }) }) }));
|
|
1196
|
-
fireEvent.click(screen.getByText(PARENT_BUTTON_TEXT));
|
|
1197
|
-
expect(onSetPath).toHaveBeenCalledTimes(1);
|
|
1198
|
-
expect(onParentUpdate).toHaveBeenCalledTimes(1);
|
|
1199
|
-
expect(onChildUpdate).toHaveBeenCalledTimes(0);
|
|
1200
|
-
fireEvent.click(screen.getByText(CHILD_BUTTON_TEXT));
|
|
1201
|
-
expect(onSetPath).toHaveBeenCalledTimes(1);
|
|
1202
|
-
expect(onParentUpdate).toHaveBeenCalledTimes(2);
|
|
1203
|
-
expect(onChildUpdate).toHaveBeenCalledTimes(0);
|
|
1204
|
-
});
|
|
1205
1212
|
test('`usecase` should not be called at child component', () => {
|
|
1206
1213
|
const mockUseCase = jest.fn(fileUseCase);
|
|
1207
1214
|
const A = () => {
|
|
@@ -1411,6 +1418,28 @@ describe('useUseCase', () => {
|
|
|
1411
1418
|
const { current } = result;
|
|
1412
1419
|
expect(current).toEqual([expect.any(Object), expect.any(Function)]);
|
|
1413
1420
|
});
|
|
1421
|
+
test.each([
|
|
1422
|
+
{
|
|
1423
|
+
mode: UseCaseModes.Normal,
|
|
1424
|
+
toThrow: '',
|
|
1425
|
+
},
|
|
1426
|
+
{
|
|
1427
|
+
mode: UseCaseModes.Global,
|
|
1428
|
+
toThrow: '',
|
|
1429
|
+
},
|
|
1430
|
+
{
|
|
1431
|
+
mode: UseCaseModes.Stateless,
|
|
1432
|
+
toThrow: UseCaseModeErrors.UnsupportedStateless,
|
|
1433
|
+
},
|
|
1434
|
+
])('does not support stateless mode', ({ mode, toThrow }) => {
|
|
1435
|
+
renderHook(() => {
|
|
1436
|
+
expect(() => {
|
|
1437
|
+
useUseCase(mathUseCase, mode);
|
|
1438
|
+
// 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
|
|
1439
|
+
throw '';
|
|
1440
|
+
}).toThrow(toThrow);
|
|
1441
|
+
});
|
|
1442
|
+
});
|
|
1414
1443
|
test('the return value should be `reducers` object at child component', () => {
|
|
1415
1444
|
const onMountA = jest.fn();
|
|
1416
1445
|
const A = () => {
|
|
@@ -46,13 +46,13 @@ export interface UseCaseHookOwnOptions<T, TUseCaseOptions extends object> extend
|
|
|
46
46
|
}
|
|
47
47
|
export type UseCaseHookOptions<T, TUseCaseOptions extends object = object> = TUseCaseOptions & UseCaseHookOwnOptions<T, TUseCaseOptions>;
|
|
48
48
|
export interface ContextualCoreCollectionHook {
|
|
49
|
-
<T, TEntityReducers extends EntityReducers<T
|
|
49
|
+
<T, TEntityReducers extends EntityReducers<T>>(usecase: EntityUseCase<T, TEntityReducers> &
|
|
50
50
|
/**
|
|
51
51
|
* 如果不使用 `&`,那么很多情况下 `options` 类型无法被正确推导;
|
|
52
52
|
* 因为使用 `&` 是为了让该参数 `usecase` 的泛型 `T` 推导占优先级,
|
|
53
53
|
* 从而保证 `options` 里的泛型 `T` 是根据 `usecase` 来推导的。
|
|
54
54
|
*/
|
|
55
|
-
UseCase<EntityReducerMap<T
|
|
55
|
+
UseCase<EntityReducerMap<T>>, options?: UseCaseHookContextualOptions<T>): ContextualCoreCollection<T, TEntityReducers>;
|
|
56
56
|
}
|
|
57
57
|
export interface RootCoreCollectionHook {
|
|
58
58
|
<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> &
|
|
@@ -70,10 +70,18 @@ export interface ModeCoreCollectionHook {
|
|
|
70
70
|
* 因为使用 `&` 是为了让该参数 `usecase` 的泛型 `T` 推导占优先级,
|
|
71
71
|
* 从而保证 `options` 里的泛型 `T` 是根据 `usecase` 来推导的。
|
|
72
72
|
*/
|
|
73
|
-
UseCase<EntityReducerMap<T>, TUseCaseOptions>,
|
|
73
|
+
UseCase<EntityReducerMap<T>, TUseCaseOptions>,
|
|
74
|
+
/**
|
|
75
|
+
* currently, only support `UseCaseModes.Stateless`
|
|
76
|
+
*/
|
|
77
|
+
mode: UseCaseModes, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
|
|
74
78
|
}
|
|
75
79
|
export interface PseudoCoreCollectionHook {
|
|
76
|
-
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>,
|
|
80
|
+
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>,
|
|
81
|
+
/**
|
|
82
|
+
* currently, only support `UseCaseModes.Global`
|
|
83
|
+
*/
|
|
84
|
+
mode: UseCaseModes, options?: TUseCaseOptions, deps?: unknown[]): PseudoCoreCollection<T>;
|
|
77
85
|
}
|
|
78
86
|
export interface ReducersHook {
|
|
79
87
|
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): T;
|
|
@@ -6,11 +6,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.UpdateFragment = void 0;
|
|
7
7
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
8
|
var _react = require("react");
|
|
9
|
-
var UpdateFragment = function UpdateFragment(_ref) {
|
|
9
|
+
var UpdateFragment = exports.UpdateFragment = function UpdateFragment(_ref) {
|
|
10
10
|
var onUpdate = _ref.onUpdate;
|
|
11
11
|
(0, _react.useEffect)(function () {
|
|
12
|
-
onUpdate === null || onUpdate === void 0
|
|
12
|
+
onUpdate === null || onUpdate === void 0 || onUpdate();
|
|
13
13
|
});
|
|
14
14
|
return (0, _jsxRuntime.jsx)(_react.Fragment, {});
|
|
15
|
-
};
|
|
16
|
-
exports.UpdateFragment = UpdateFragment;
|
|
15
|
+
};
|
|
@@ -7,7 +7,7 @@ exports.UseCaseFragment = void 0;
|
|
|
7
7
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _useUseCase = require("../../hooks/useUseCase");
|
|
10
|
-
var UseCaseFragment = function UseCaseFragment(_ref) {
|
|
10
|
+
var UseCaseFragment = exports.UseCaseFragment = function UseCaseFragment(_ref) {
|
|
11
11
|
var usecase = _ref.usecase,
|
|
12
12
|
watch = _ref.watch,
|
|
13
13
|
onChange = _ref.onChange;
|
|
@@ -16,5 +16,4 @@ var UseCaseFragment = function UseCaseFragment(_ref) {
|
|
|
16
16
|
onChange: onChange
|
|
17
17
|
});
|
|
18
18
|
return (0, _jsxRuntime.jsx)(_react.Fragment, {});
|
|
19
|
-
};
|
|
20
|
-
exports.UseCaseFragment = UseCaseFragment;
|
|
19
|
+
};
|
|
@@ -5,5 +5,4 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.defaultUseCaseContext = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
var defaultUseCaseContext = (0, _react.createContext)(null);
|
|
9
|
-
exports.defaultUseCaseContext = defaultUseCaseContext;
|
|
8
|
+
var defaultUseCaseContext = exports.defaultUseCaseContext = (0, _react.createContext)(null);
|
|
@@ -4,5 +4,4 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.usecaseContextReferenceMap = void 0;
|
|
7
|
-
var usecaseContextReferenceMap = new Map();
|
|
8
|
-
exports.usecaseContextReferenceMap = usecaseContextReferenceMap;
|
|
7
|
+
var usecaseContextReferenceMap = exports.usecaseContextReferenceMap = new Map();
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.UseCaseArgumentTypes = void 0;
|
|
7
7
|
var UseCaseArgumentTypes;
|
|
8
|
-
exports.UseCaseArgumentTypes = UseCaseArgumentTypes;
|
|
9
8
|
(function (UseCaseArgumentTypes) {
|
|
10
9
|
UseCaseArgumentTypes[UseCaseArgumentTypes["None"] = 0] = "None";
|
|
11
10
|
UseCaseArgumentTypes[UseCaseArgumentTypes["Entity"] = 2] = "Entity";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UseCaseModeErrors = void 0;
|
|
7
|
+
var UseCaseModeErrors;
|
|
8
|
+
(function (UseCaseModeErrors) {
|
|
9
|
+
UseCaseModeErrors["UnsupportedGlobal"] = "useUseCase does not support \"global\" mode with entity usecase";
|
|
10
|
+
UseCaseModeErrors["UnsupportedStateless"] = "useUseCase does not support \"stateless\" mode with non-entity usecase";
|
|
11
|
+
})(UseCaseModeErrors || (exports.UseCaseModeErrors = UseCaseModeErrors = {}));
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.UseCaseModes = void 0;
|
|
7
7
|
var UseCaseModes;
|
|
8
|
-
exports.UseCaseModes = UseCaseModes;
|
|
9
8
|
(function (UseCaseModes) {
|
|
10
9
|
UseCaseModes[UseCaseModes["Normal"] = 2] = "Normal";
|
|
11
10
|
UseCaseModes[UseCaseModes["Stateless"] = 4] = "Stateless";
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.UseCaseStatuses = void 0;
|
|
7
7
|
var UseCaseStatuses;
|
|
8
|
-
exports.UseCaseStatuses = UseCaseStatuses;
|
|
9
8
|
(function (UseCaseStatuses) {
|
|
10
9
|
UseCaseStatuses[UseCaseStatuses["None"] = 0] = "None";
|
|
11
10
|
// 是否需要初始化根 `redurcers`
|
|
@@ -9,7 +9,7 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
|
|
11
11
|
var _useConstant = require("../useConstant");
|
|
12
|
-
var useArgumentTypes = function useArgumentTypes(args) {
|
|
12
|
+
var useArgumentTypes = exports.useArgumentTypes = function useArgumentTypes(args) {
|
|
13
13
|
return (0, _useConstant.useConstant)(function () {
|
|
14
14
|
var types = _UseCaseArgumentTypes.UseCaseArgumentTypes.None;
|
|
15
15
|
var _args = (0, _slicedToArray2["default"])(args, 3),
|
|
@@ -27,5 +27,4 @@ var useArgumentTypes = function useArgumentTypes(args) {
|
|
|
27
27
|
}
|
|
28
28
|
return types;
|
|
29
29
|
});
|
|
30
|
-
};
|
|
31
|
-
exports.useArgumentTypes = useArgumentTypes;
|
|
30
|
+
};
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useCompareDeps = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _isSameArray = require("../../methods/isSameArray");
|
|
9
|
-
var useCompareDeps = function useCompareDeps(deps) {
|
|
9
|
+
var useCompareDeps = exports.useCompareDeps = function useCompareDeps(deps) {
|
|
10
10
|
var updateTimesRef = (0, _react.useRef)(0);
|
|
11
11
|
var prevDepsRef = (0, _react.useRef)([]);
|
|
12
12
|
var prevDeps = prevDepsRef.current;
|
|
@@ -14,5 +14,4 @@ var useCompareDeps = function useCompareDeps(deps) {
|
|
|
14
14
|
prevDepsRef.current = deps;
|
|
15
15
|
updateTimesRef.current += isSame ? 0 : 1;
|
|
16
16
|
return updateTimesRef.current;
|
|
17
|
-
};
|
|
18
|
-
exports.useCompareDeps = useCompareDeps;
|
|
17
|
+
};
|
|
@@ -7,10 +7,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useConstant = void 0;
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _react = require("react");
|
|
10
|
-
var useConstant = function useConstant(initialValue) {
|
|
10
|
+
var useConstant = exports.useConstant = function useConstant(initialValue) {
|
|
11
11
|
var _useState = (0, _react.useState)(initialValue),
|
|
12
12
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 1),
|
|
13
13
|
value = _useState2[0];
|
|
14
14
|
return value;
|
|
15
|
-
};
|
|
16
|
-
exports.useConstant = useConstant;
|
|
15
|
+
};
|
|
@@ -7,12 +7,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useConstantFn = void 0;
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _react = require("react");
|
|
10
|
-
var useConstantFn = function useConstantFn(initialValue) {
|
|
10
|
+
var useConstantFn = exports.useConstantFn = function useConstantFn(initialValue) {
|
|
11
11
|
var _useState = (0, _react.useState)(function () {
|
|
12
12
|
return initialValue;
|
|
13
13
|
}),
|
|
14
14
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 1),
|
|
15
15
|
value = _useState2[0];
|
|
16
16
|
return value;
|
|
17
|
-
};
|
|
18
|
-
exports.useConstantFn = useConstantFn;
|
|
17
|
+
};
|
|
@@ -7,7 +7,7 @@ exports.useContextualItem = void 0;
|
|
|
7
7
|
var _ahooks = require("ahooks");
|
|
8
8
|
var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
9
9
|
var _useMemoizedCall = require("../useMemoizedCall");
|
|
10
|
-
var useContextualItem = function useContextualItem(statuses, contextItem, createFactory) {
|
|
10
|
+
var useContextualItem = exports.useContextualItem = function useContextualItem(statuses, contextItem, createFactory) {
|
|
11
11
|
var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
12
12
|
var create = (0, _useMemoizedCall.useMemoizedCall)(createFactory, deps);
|
|
13
13
|
return (0, _ahooks.useCreation)(function () {
|
|
@@ -17,5 +17,4 @@ var useContextualItem = function useContextualItem(statuses, contextItem, create
|
|
|
17
17
|
}
|
|
18
18
|
return create();
|
|
19
19
|
}, [statuses, contextItem, create]);
|
|
20
|
-
};
|
|
21
|
-
exports.useContextualItem = useContextualItem;
|
|
20
|
+
};
|