@mic-rexjs/usecases-react 2.1.0 → 2.1.1
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/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 +2 -10
- 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/enums/UseCaseModeErrors/index.js +12 -0
- package/lib/hooks/useGlobalUseCase/index.js +3 -9
- package/lib/hooks/useGlobalUseCase/index.test.js +0 -25
- package/lib/hooks/useProvider/index.js +1 -9
- package/lib/hooks/useSafeMode/index.js +25 -0
- package/lib/hooks/useUseCase/index.js +3 -4
- package/lib/hooks/useUseCase/index.test.js +48 -32
- package/package.json +1 -1
- 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
|
+
!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={},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}}},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:()=>N,useStatelessUseCase:()=>U,useUseCase:()=>G});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,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)||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,s=a(749),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,t,n){return(t=function(e){var t=function(e,t){if("object"!==f(e)||null===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)}(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),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 p(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){b(e,t,n[t])})):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 E,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"}(E||(E={})),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,s.useLatest)(o),(0,s.useCreation)((function(){return w(u.current,{onCompare:function(){return!0}})}),[a,u]));return(0,s.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,R=function(e,t){return"object"===f(e)&&null!==e&&Object.hasOwn(e,t)},P=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=R(t,c),y=R(n,c),v=[].concat(x(a),[c]);if(d||y){var p=d?t[c]:u,E=y?n[c]:u;if(b)return void e(p,E,b,o,v);if(p===E)return;o(p,E,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(x(a),["".concat(w)]))},_=function(e,t,n){for(var r=function(){var e=i(a[o],2),r=e[0],u=e[1];P(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'}(C||(C={}));var G=function(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];var a,u=function(e){return h((function(){var t=E.None,n=i(e,3),r=n[1],o=n[2],a=f(r);switch("function"===a&&(t|=E.Entity),"number"){case a:case f(o):t|=E.Mode}return t}))}(r),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&E.Entity)===E.Entity,c=(t&E.Mode)===E.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||[]]}(r,u),v=i(b,5),O=v[0],x=v[1],R=v[2],P=v[3],G=v[4],A=c(x),N=A,U=A,M=((a=(0,t.useRef)(!0)).current=!0,(0,t.useEffect)((function(){a.current=!1})),a),k=function(e,t){return h((function(){if((t&E.Entity)===E.Entity){if((e&m.Global)===m.Global)throw C.UnsupportedGlobal;return e}if((e&m.Stateless)===m.Stateless)throw C.UnsupportedStateless;return e}))}(R,u),I=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:E.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&E.Entity)===E.Entity:break;default:return g}var l=(0,t.createContext)(null);return o.set(e,{value:l,times:1}),l}));return(0,s.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,k),T=(0,t.useContext)(I),V=T,q=function(e,t,n){return(0,s.useCreation)((function(){var r=l.None,o=(n||{}).store;return(e&E.Entity)===E.Entity&&(r|=l.EntityRootEnabled),r|=null===n?l.RootEnabled:l.ContextEnabled,o&&(r|=l.EntityEnabled),(t&m.Stateless)===m.Stateless&&(r|=l.StatelessEnabled),(t&m.Global)===m.Global&&(r|=l.GlobalEnabled),r}),[e,n,t])}(u,k,T),D=(T||{}).reducers,L=void 0===D?null:D,$=(V||{}).store,F=i(function(e,n,r,o){var a=i((0,t.useState)(n),2),u=a[0],c=a[1],f=(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,f),y=(0,s.useLatest)(o),v=(e&l.EntityRootEnabled)===l.EntityRootEnabled,p=j(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||c(e)}))}));return v&&p.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&&_(o,e,t),null==r||r(e,t)};return p.watch(t),function(){p.unwatch(t)}}}),[e,p,y]),(0,s.useCreation)((function(){return[b,p]}),[b,p])}(q,O,void 0===$?null:$,P),2),B=F[0],W=F[1],Y=j(q,L,(function(){return(q&l.EntityEnabled)!==l.EntityEnabled?N(P):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,p(p(p({},o),r),{},{onGenerate:function(e,t){return t}}))}(U,W,P)}),G),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=(0,s.useLatest)(i);return c((function(e){var t=e.children,o=e.with,a=void 0===o?[]:o,u=r.Provider;return n().createElement(u,{value:f.current},a.reduceRight((function(e,t){return n().createElement(t,{},e)}),t))}))}(q,I,W,Y);return(0,s.useCreation)((function(){if((q&l.ContextEnabled)!==l.ContextEnabled)return Y;var e=(q&l.RootEnabled)===l.RootEnabled;if((q&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]=w(a,t)})),n}(Y,{onShouldCache:function(){return M.current}});return e?[B,t,z]:[B,t]}),[q,B,Y,z,M])},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)},U=function(e,t,n,r){return G(e,t,m.Stateless,n,r)}})(),u})()));
|
|
@@ -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 = {}));
|
|
@@ -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,5 +1,5 @@
|
|
|
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) => {
|
|
@@ -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
|
+
expect(() => {
|
|
431
|
+
renderHook(() => {
|
|
432
|
+
useUseCase(defaultFile, fileUseCase, mode);
|
|
433
|
+
});
|
|
434
|
+
// 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
|
|
435
|
+
throw '';
|
|
436
|
+
}).toThrow(toThrow);
|
|
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
|
+
expect(() => {
|
|
1436
|
+
renderHook(() => {
|
|
1437
|
+
useUseCase(mathUseCase, mode);
|
|
1438
|
+
});
|
|
1439
|
+
// 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
|
|
1440
|
+
throw '';
|
|
1441
|
+
}).toThrow(toThrow);
|
|
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;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UseCaseModeErrors = void 0;
|
|
7
|
+
var UseCaseModeErrors;
|
|
8
|
+
exports.UseCaseModeErrors = UseCaseModeErrors;
|
|
9
|
+
(function (UseCaseModeErrors) {
|
|
10
|
+
UseCaseModeErrors["UnsupportedGlobal"] = "useUseCase does not support \"global\" mode with entity usecase";
|
|
11
|
+
UseCaseModeErrors["UnsupportedStateless"] = "useUseCase does not support \"stateless\" mode with non-entity usecase";
|
|
12
|
+
})(UseCaseModeErrors || (exports.UseCaseModeErrors = UseCaseModeErrors = {}));
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.useGlobalUseCase = void 0;
|
|
8
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
7
|
var _useUseCase = require("../useUseCase");
|
|
10
|
-
var
|
|
11
|
-
var useGlobalUseCase = function useGlobalUseCase() {
|
|
12
|
-
|
|
13
|
-
args[_key] = arguments[_key];
|
|
14
|
-
}
|
|
15
|
-
var transformedArgs = (0, _transformGlobalArguments.transformGlobalArguments)(args);
|
|
16
|
-
return _useUseCase.useUseCase.apply(void 0, (0, _toConsumableArray2["default"])(transformedArgs));
|
|
8
|
+
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
9
|
+
var useGlobalUseCase = function useGlobalUseCase(useCase, options, deps) {
|
|
10
|
+
return (0, _useUseCase.useUseCase)(useCase, _UseCaseModes.UseCaseModes.Global, options, deps);
|
|
17
11
|
};
|
|
18
12
|
exports.useGlobalUseCase = useGlobalUseCase;
|
|
@@ -2,41 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
4
|
var _ = require(".");
|
|
5
|
-
var _usecases = require("@mic-rexjs/usecases");
|
|
6
5
|
var _globals = require("@jest/globals");
|
|
7
6
|
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
8
7
|
var _react = require("@testing-library/react");
|
|
9
8
|
var useUseCaseModule = _interopRequireWildcard(require("../useUseCase"));
|
|
10
9
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
10
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
|
-
var numberUseCase = function numberUseCase() {
|
|
13
|
-
return (0, _usecases.entityUseCase)();
|
|
14
|
-
};
|
|
15
11
|
var mathUseCase = function mathUseCase() {
|
|
16
12
|
return {};
|
|
17
13
|
};
|
|
18
14
|
(0, _globals.describe)('useGlobalUseCase', function () {
|
|
19
|
-
(0, _globals.describe)('`useGlobalUseCase` should work the same as `RootCoreCollectionHook`', function () {
|
|
20
|
-
(0, _globals.test)('check `useUseCase` has received correct arguments', function () {
|
|
21
|
-
var useMockedUseCase = _globals.jest.fn();
|
|
22
|
-
_globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
|
|
23
|
-
(0, _react.renderHook)(function () {
|
|
24
|
-
(0, _.useGlobalUseCase)(1, numberUseCase);
|
|
25
|
-
});
|
|
26
|
-
(0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, _UseCaseModes.UseCaseModes.Global, void 0, void 0);
|
|
27
|
-
_globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
|
|
28
|
-
});
|
|
29
|
-
(0, _globals.test)('should should return `CoreCollection` with Provider', function () {
|
|
30
|
-
var _renderHook = (0, _react.renderHook)(function () {
|
|
31
|
-
return (0, _.useGlobalUseCase)(1, numberUseCase);
|
|
32
|
-
}),
|
|
33
|
-
result = _renderHook.result;
|
|
34
|
-
var current = result.current;
|
|
35
|
-
(0, _globals.expect)(current).toEqual([1, {
|
|
36
|
-
setEntity: _globals.expect.any(Function)
|
|
37
|
-
}, _globals.expect.any(Function), void 0, void 0]);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
15
|
(0, _globals.describe)('`useGlobalUseCase` should work the same as `GlobalPseudoCoreCollectionHook`', function () {
|
|
41
16
|
(0, _globals.test)('check `useUseCase` has received correct arguments', function () {
|
|
42
17
|
var useMockedUseCase = _globals.jest.fn();
|
|
@@ -25,22 +25,14 @@ var useProvider = function useProvider(statuses, context, store, reducers) {
|
|
|
25
25
|
reducers: reducers
|
|
26
26
|
};
|
|
27
27
|
}, [statuses, entity, store, reducers]);
|
|
28
|
-
var isGlobal = (statuses & _UseCaseStatuses.UseCaseStatuses.GlobalEnabled) === _UseCaseStatuses.UseCaseStatuses.GlobalEnabled;
|
|
29
|
-
var updateDep = isGlobal ? null : contextValue;
|
|
30
28
|
var contextValueRef = (0, _ahooks.useLatest)(contextValue);
|
|
31
|
-
// 这里必须使用 `useCallback`,因为要使用在 `Provider` 的 `value` 属性上面,需要可变化的
|
|
32
|
-
var getContextValue = (0, _react.useCallback)(function () {
|
|
33
|
-
void updateDep;
|
|
34
|
-
return contextValueRef.current;
|
|
35
|
-
}, [updateDep, contextValueRef]);
|
|
36
|
-
var getterRef = (0, _ahooks.useLatest)(getContextValue);
|
|
37
29
|
return (0, _useConstantFn.useConstantFn)(function (_ref) {
|
|
38
30
|
var children = _ref.children,
|
|
39
31
|
_ref$with = _ref["with"],
|
|
40
32
|
withProviders = _ref$with === void 0 ? [] : _ref$with;
|
|
41
33
|
var ContextProvider = context.Provider;
|
|
42
34
|
return _react["default"].createElement(ContextProvider, {
|
|
43
|
-
value:
|
|
35
|
+
value: contextValueRef.current
|
|
44
36
|
}, withProviders.reduceRight(function (currentChildren, withProvider) {
|
|
45
37
|
return _react["default"].createElement(withProvider, {}, currentChildren);
|
|
46
38
|
}, children));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSafeMode = void 0;
|
|
7
|
+
var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
|
|
8
|
+
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
9
|
+
var _useConstant = require("../useConstant");
|
|
10
|
+
var _UseCaseModeErrors = require("../../enums/UseCaseModeErrors");
|
|
11
|
+
var useSafeMode = function useSafeMode(unsafeMode, argumentTypes) {
|
|
12
|
+
return (0, _useConstant.useConstant)(function () {
|
|
13
|
+
if ((argumentTypes & _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) === _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) {
|
|
14
|
+
if ((unsafeMode & _UseCaseModes.UseCaseModes.Global) === _UseCaseModes.UseCaseModes.Global) {
|
|
15
|
+
throw _UseCaseModeErrors.UseCaseModeErrors.UnsupportedGlobal;
|
|
16
|
+
}
|
|
17
|
+
return unsafeMode;
|
|
18
|
+
}
|
|
19
|
+
if ((unsafeMode & _UseCaseModes.UseCaseModes.Stateless) === _UseCaseModes.UseCaseModes.Stateless) {
|
|
20
|
+
throw _UseCaseModeErrors.UseCaseModeErrors.UnsupportedStateless;
|
|
21
|
+
}
|
|
22
|
+
return unsafeMode;
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
exports.useSafeMode = useSafeMode;
|
|
@@ -8,7 +8,6 @@ exports.useUseCase = void 0;
|
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _ahooks = require("ahooks");
|
|
10
10
|
var _react = require("react");
|
|
11
|
-
var _useConstant = require("../useConstant");
|
|
12
11
|
var _useConstantFn = require("../useConstantFn");
|
|
13
12
|
var _useProvider = require("../useProvider");
|
|
14
13
|
var _initEntityReducers = require("../../methods/initEntityReducers");
|
|
@@ -21,8 +20,8 @@ var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
|
21
20
|
var _useEntity3 = require("../useEntity");
|
|
22
21
|
var _useContextualItem = require("../useContextualItem");
|
|
23
22
|
var _cacheCalls = require("../../methods/cacheCalls");
|
|
23
|
+
var _useSafeMode = require("../useSafeMode");
|
|
24
24
|
var useUseCase = function useUseCase() {
|
|
25
|
-
var _useContext;
|
|
26
25
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
27
26
|
args[_key] = arguments[_key];
|
|
28
27
|
}
|
|
@@ -38,9 +37,9 @@ var useUseCase = function useUseCase() {
|
|
|
38
37
|
var usecase = unkownUsecase;
|
|
39
38
|
var entityUseCase = unkownUsecase;
|
|
40
39
|
var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
|
|
41
|
-
var mode = (0,
|
|
40
|
+
var mode = (0, _useSafeMode.useSafeMode)(unsafeMode, argumentTypes);
|
|
42
41
|
var context = (0, _useUseCaseContext.useUseCaseContext)(unkownUsecase, argumentTypes, mode);
|
|
43
|
-
var contextValue = (
|
|
42
|
+
var contextValue = (0, _react.useContext)(context);
|
|
44
43
|
var entityContextValue = contextValue;
|
|
45
44
|
var statuses = (0, _useUseCaseStatuses.useUseCaseStatuses)(argumentTypes, mode, contextValue);
|
|
46
45
|
var _ref = contextValue || {},
|
|
@@ -17,6 +17,7 @@ var _ = require(".");
|
|
|
17
17
|
var _ahooks = require("ahooks");
|
|
18
18
|
var _react2 = require("react");
|
|
19
19
|
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
20
|
+
var _UseCaseModeErrors = require("../../enums/UseCaseModeErrors");
|
|
20
21
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
21
22
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
22
23
|
function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
|
|
@@ -244,10 +245,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
244
245
|
subtractionReducer.mockClear();
|
|
245
246
|
});
|
|
246
247
|
(0, _globals.describe)('useUseCase', function () {
|
|
247
|
-
|
|
248
|
+
(0, _globals.describe)('`useUseCase` should work the same as `useRootCoreCollection`', function () {
|
|
248
249
|
(0, _globals.test)('check `context.length`', function () {
|
|
249
250
|
var _renderHook = (0, _react.renderHook)(function () {
|
|
250
|
-
return (0, _.useUseCase)(defaultFile, fileUseCase
|
|
251
|
+
return (0, _.useUseCase)(defaultFile, fileUseCase);
|
|
251
252
|
}),
|
|
252
253
|
result = _renderHook.result;
|
|
253
254
|
var cores = result.current;
|
|
@@ -255,7 +256,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
255
256
|
});
|
|
256
257
|
(0, _globals.test)('`entity` should equal `defaultFile`', function () {
|
|
257
258
|
var _renderHook2 = (0, _react.renderHook)(function () {
|
|
258
|
-
return (0, _.useUseCase)(defaultFile, fileUseCase
|
|
259
|
+
return (0, _.useUseCase)(defaultFile, fileUseCase);
|
|
259
260
|
}),
|
|
260
261
|
result = _renderHook2.result;
|
|
261
262
|
var cores = result.current;
|
|
@@ -583,6 +584,26 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
583
584
|
_react.fireEvent.click(_react.screen.getByText(updateButtonText));
|
|
584
585
|
(0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
|
|
585
586
|
});
|
|
587
|
+
_globals.test.each([{
|
|
588
|
+
mode: _UseCaseModes.UseCaseModes.Normal,
|
|
589
|
+
toThrow: ''
|
|
590
|
+
}, {
|
|
591
|
+
mode: _UseCaseModes.UseCaseModes.Global,
|
|
592
|
+
toThrow: _UseCaseModeErrors.UseCaseModeErrors.UnsupportedGlobal
|
|
593
|
+
}, {
|
|
594
|
+
mode: _UseCaseModes.UseCaseModes.Stateless,
|
|
595
|
+
toThrow: ''
|
|
596
|
+
}])('does not support global mode', function (_ref7) {
|
|
597
|
+
var mode = _ref7.mode,
|
|
598
|
+
toThrow = _ref7.toThrow;
|
|
599
|
+
(0, _globals.expect)(function () {
|
|
600
|
+
(0, _react.renderHook)(function () {
|
|
601
|
+
(0, _.useUseCase)(defaultFile, fileUseCase, mode);
|
|
602
|
+
});
|
|
603
|
+
// 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
|
|
604
|
+
throw '';
|
|
605
|
+
}).toThrow(toThrow);
|
|
606
|
+
});
|
|
586
607
|
(0, _globals.test)('stateless mode should not generate new reducers when `yeild entity`', function () {
|
|
587
608
|
var onUpdate = _globals.jest.fn();
|
|
588
609
|
var _renderHook12 = (0, _react.renderHook)(function () {
|
|
@@ -922,8 +943,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
922
943
|
var onChangeB = _globals.jest.fn(updateChangeTimes);
|
|
923
944
|
var onChangeC = _globals.jest.fn(updateChangeTimes);
|
|
924
945
|
var buttonText = 'my button';
|
|
925
|
-
var A = function A(
|
|
926
|
-
var children =
|
|
946
|
+
var A = function A(_ref8) {
|
|
947
|
+
var children = _ref8.children;
|
|
927
948
|
(0, _.useUseCase)(fileUseCase, {
|
|
928
949
|
watch: {
|
|
929
950
|
ext: onChangeA
|
|
@@ -1571,31 +1592,6 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1571
1592
|
(0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(0);
|
|
1572
1593
|
(0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
|
|
1573
1594
|
});
|
|
1574
|
-
(0, _globals.test)('global mode should trigger Parent to update, but Child shoud not be updated', function () {
|
|
1575
|
-
var onParentUpdate = _globals.jest.fn();
|
|
1576
|
-
var onChildUpdate = _globals.jest.fn();
|
|
1577
|
-
var onSetPath = _globals.jest.fn(function () {
|
|
1578
|
-
return PATH_1;
|
|
1579
|
-
});
|
|
1580
|
-
(0, _react.render)((0, _jsxRuntime.jsx)("div", {
|
|
1581
|
-
children: (0, _jsxRuntime.jsx)(Parent, {
|
|
1582
|
-
mode: _UseCaseModes.UseCaseModes.Global,
|
|
1583
|
-
onSetPath: onSetPath,
|
|
1584
|
-
onUpdate: onParentUpdate,
|
|
1585
|
-
children: (0, _jsxRuntime.jsx)(Child, {
|
|
1586
|
-
onUpdate: onChildUpdate
|
|
1587
|
-
})
|
|
1588
|
-
})
|
|
1589
|
-
}));
|
|
1590
|
-
_react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
|
|
1591
|
-
(0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
|
|
1592
|
-
(0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(1);
|
|
1593
|
-
(0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
|
|
1594
|
-
_react.fireEvent.click(_react.screen.getByText(CHILD_BUTTON_TEXT));
|
|
1595
|
-
(0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
|
|
1596
|
-
(0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(2);
|
|
1597
|
-
(0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
|
|
1598
|
-
});
|
|
1599
1595
|
(0, _globals.test)('`usecase` should not be called at child component', function () {
|
|
1600
1596
|
var mockUseCase = _globals.jest.fn(fileUseCase);
|
|
1601
1597
|
var A = function A() {
|
|
@@ -1822,8 +1818,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1822
1818
|
var onChangeB = _globals.jest.fn(updateChangeTimes);
|
|
1823
1819
|
var onChangeC = _globals.jest.fn(updateChangeTimes);
|
|
1824
1820
|
var buttonText = 'my button';
|
|
1825
|
-
var A = function A(
|
|
1826
|
-
var children =
|
|
1821
|
+
var A = function A(_ref9) {
|
|
1822
|
+
var children = _ref9.children;
|
|
1827
1823
|
(0, _.useUseCase)(fileUseCase, {
|
|
1828
1824
|
onChange: onChangeA
|
|
1829
1825
|
});
|
|
@@ -1873,6 +1869,26 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1873
1869
|
var current = result.current;
|
|
1874
1870
|
(0, _globals.expect)(current).toEqual([_globals.expect.any(Object), _globals.expect.any(Function)]);
|
|
1875
1871
|
});
|
|
1872
|
+
_globals.test.each([{
|
|
1873
|
+
mode: _UseCaseModes.UseCaseModes.Normal,
|
|
1874
|
+
toThrow: ''
|
|
1875
|
+
}, {
|
|
1876
|
+
mode: _UseCaseModes.UseCaseModes.Global,
|
|
1877
|
+
toThrow: ''
|
|
1878
|
+
}, {
|
|
1879
|
+
mode: _UseCaseModes.UseCaseModes.Stateless,
|
|
1880
|
+
toThrow: _UseCaseModeErrors.UseCaseModeErrors.UnsupportedStateless
|
|
1881
|
+
}])('does not support stateless mode', function (_ref10) {
|
|
1882
|
+
var mode = _ref10.mode,
|
|
1883
|
+
toThrow = _ref10.toThrow;
|
|
1884
|
+
(0, _globals.expect)(function () {
|
|
1885
|
+
(0, _react.renderHook)(function () {
|
|
1886
|
+
(0, _.useUseCase)(mathUseCase, mode);
|
|
1887
|
+
});
|
|
1888
|
+
// 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
|
|
1889
|
+
throw '';
|
|
1890
|
+
}).toThrow(toThrow);
|
|
1891
|
+
});
|
|
1876
1892
|
(0, _globals.test)('the return value should be `reducers` object at child component', function () {
|
|
1877
1893
|
var onMountA = _globals.jest.fn();
|
|
1878
1894
|
var A = function A() {
|
package/package.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
2
|
-
export const transformGlobalArguments = (args) => {
|
|
3
|
-
const [arg1, arg2, arg3, arg4] = args;
|
|
4
|
-
if (typeof arg2 === 'function') {
|
|
5
|
-
return [arg1, arg2, UseCaseModes.Global, arg3, arg4];
|
|
6
|
-
}
|
|
7
|
-
return [arg1, UseCaseModes.Global, arg2, arg3];
|
|
8
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.transformGlobalArguments = void 0;
|
|
8
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
-
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
10
|
-
var transformGlobalArguments = function transformGlobalArguments(args) {
|
|
11
|
-
var _args = (0, _slicedToArray2["default"])(args, 4),
|
|
12
|
-
arg1 = _args[0],
|
|
13
|
-
arg2 = _args[1],
|
|
14
|
-
arg3 = _args[2],
|
|
15
|
-
arg4 = _args[3];
|
|
16
|
-
if (typeof arg2 === 'function') {
|
|
17
|
-
return [arg1, arg2, _UseCaseModes.UseCaseModes.Global, arg3, arg4];
|
|
18
|
-
}
|
|
19
|
-
return [arg1, _UseCaseModes.UseCaseModes.Global, arg2, arg3];
|
|
20
|
-
};
|
|
21
|
-
exports.transformGlobalArguments = transformGlobalArguments;
|