@mic-rexjs/usecases-react 2.7.1 → 2.8.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/enums/ArgumentTypes/index.d.ts +1 -3
- package/es/enums/ArgumentTypes/index.js +0 -2
- package/es/enums/Statuses/index.d.ts +0 -4
- package/es/enums/Statuses/index.js +0 -4
- package/es/hooks/useArgumentTypes/index.js +1 -6
- package/es/hooks/useEntity/index.js +3 -3
- package/es/hooks/useFullArguments/index.js +1 -4
- package/es/hooks/useStatuses/index.js +3 -7
- package/es/hooks/useUseCase/index.js +2 -2
- package/es/hooks/useUseCase/index.test.js +0 -105
- package/es/hooks/useUseCase/types.d.ts +1 -1
- package/es/index.d.ts +0 -1
- package/es/index.js +0 -1
- package/es/usecases/contextUseCase/index.js +1 -37
- package/es/usecases/contextUseCase/types.d.ts +1 -6
- package/lib/enums/ArgumentTypes/index.js +0 -2
- package/lib/enums/Statuses/index.js +0 -4
- package/lib/hooks/useArgumentTypes/index.js +0 -6
- package/lib/hooks/useEntity/index.js +3 -3
- package/lib/hooks/useFullArguments/index.js +1 -5
- package/lib/hooks/useStatuses/index.js +3 -7
- package/lib/hooks/useUseCase/index.js +2 -2
- package/lib/hooks/useUseCase/index.test.js +6 -151
- package/lib/index.js +1 -8
- package/lib/usecases/contextUseCase/index.js +1 -37
- package/package.json +4 -3
- package/es/hooks/useContextValue/index.d.ts +0 -4
- package/es/hooks/useContextValue/index.js +0 -13
- package/es/methods/registerGlobalUseCase/index.d.ts +0 -1
- package/es/methods/registerGlobalUseCase/index.js +0 -2
- package/lib/hooks/useContextValue/index.js +0 -20
- package/lib/methods/registerGlobalUseCase/index.js +0 -9
package/dist/index.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see index.min.js.LICENSE.txt */
|
|
2
|
-
(()=>{var e={20:(e,t,n)=>{"use strict";var r=n(594),o=Symbol.for("react.element"),u=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,n){var r,l={},c=null,f=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(f=t.ref),t)u.call(t,r)&&!i.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===l[r]&&(l[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:f,props:l,_owner:a.current}}},848:(e,t,n)=>{"use strict";e.exports=n(20)},594:e=>{"use strict";e.exports=React}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var u=t[r]={exports:{}};return e[r](u,u.exports,n),u.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{UseCaseFragment:()=>_,registerGlobalUseCase:()=>A,useUseCase:()=>P});var e=n(848),t=n(594),o=n.n(t);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}function i(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,u,a,i=[],l=!0,c=!1;try{if(u=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=u.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw o}}return i}}(e,t)||a(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const c=ahooks;var f=function(e){return l((0,t.useState)((function(){return e})),1)[0]},s=function(e){return l((0,t.useState)(e),1)[0]};const y=usecases;var b,v;function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function E(e){var t=function(e,t){if("object"!=d(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:String(t)}!function(e){e[e.None=0]="None",e[e.Entity=2]="Entity",e[e.Global=4]="Global",e[e.GlobalEntity=6]="GlobalEntity"}(b||(b={})),function(e){e[e.None=0]="None",e[e.RootEnabled=2]="RootEnabled",e[e.ContextEnabled=4]="ContextEnabled",e[e.EntityEnabled=8]="EntityEnabled",e[e.GlobalEnabled=28]="GlobalEnabled",e[e.ContextRootEnabled=6]="ContextRootEnabled",e[e.EntityRootEnabled=14]="EntityRootEnabled"}(v||(v={}));var p=["watch","onChange","options"];function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?h(Object(n),!0).forEach((function(t){var r,o,u;r=e,o=t,u=n[t],(o=E(o))in r?Object.defineProperty(r,o,{value:u,enumerable:!0,configurable:!0,writable:!0}):r[o]=u})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var g=function(e,t,n){n.watch,n.onChange;var r=n.options,o=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},u=Object.keys(e);for(r=0;r<u.length;r++)n=u[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(r=0;r<u.length;r++)n=u[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(n,p);return(0,y.createEntityReducers)(t,e,m(m(m({},o),r),{},{onGenerate:function(e,t){return t}}))},O=(0,y.createUseCase)((function(){var e=new Map,n=new Map,r=new Map,o=(0,t.createContext)(null);return function(){var u=function(e,t,n){return(n&v.EntityEnabled)===v.EntityEnabled?{store:e,reducers:t,statuses:n}:{reducers:t,statuses:n}},a=function(n,r){if(e.has(n)){var u=e.get(n),a=u.value,i=u.times;return e.set(n,{value:a,times:i+1}),a}if((r&b.Entity)!==b.Entity)return o;var l=(0,t.createContext)(null);return e.set(n,{value:l,times:1}),l};return{createContextValue:u,getGlobalContextValue:function(e){var t="function"==typeof e?n.get(e):e;return r.get(t)||null},isGlobal:function(e){return n.has(e)},registerUseCase:a,registerGlobalUseCase:function(e,t){if(n.has(t))return t;var o=new y.EntityStore(e),i=g(t,o,{}),l=u(o,i,v.GlobalEnabled),c=a(t,b.GlobalEntity);return n.set(t,c),r.set(c,l),t},unregisterUseCase:function(t,n){if((n&b.Entity)!==b.Entity)return!1;if(!e.has(t))return!1;var r=e.get(t),o=r.value,u=r.times;return 1===u?e.delete(t):e.set(t,{value:o,times:u-1}),!0},unregisterGlobalUseCase:function(t){if(!n.has(t))return!1;var o=n.get(t);return n.delete(t),r.delete(o),e.delete(t),!0}}}})),w=function(){return s((function(){return O()}))},C=function(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0},j=function(e,t){var n,r=t||{},o=r.onShouldCache,u=void 0===o?function(){return!0}:o,a=r.onCompare,i=void 0===a?function(e,t){return C(e,t)}:a;return function(){for(var t=u(),r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];if(n&&t){var l=n,c=l.parameters,f=l.returnValue;if(i(c,o))return f}var s=e.apply(void 0,o);return t&&(n={parameters:o,returnValue:s}),s}},S=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=(0,c.useLatest)(n),u=(0,c.useCreation)((function(){return j(o.current,{onCompare:function(){return!0}})}),[r,o]);return(0,c.useCreation)((function(){return(t&v.RootEnabled)!==v.RootEnabled&&e?e:u()}),[t,e,u])},R=function(e,t){return"object"===d(e)&&null!==e&&Object.hasOwn(e,t)},G=function e(t,n,r,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],a=void 0,c=l(r.match(/^([^.]+)\.(.+)$/)||[],3),f=c[1],s=void 0===f?r:f,y=c[2],b=void 0===y?"":y,v=R(t,s),d=R(n,s),E=[].concat(i(u),[s]);if(v||d){var p=v?t[s]:a,h=d?n[s]:a;if(b)return void e(p,h,b,o,E);if(p===h)return;o(p,h,E)}else if(!/^\d+^/.test(s))for(var m=Array.isArray(t)?t:[],g=Array.isArray(n)?n:[],O=m.length,w=g.length,C=Math.max(O,w),j=0;j<C;j++)e(m[j],g[j],r,o,[].concat(i(u),["".concat(j)]))},x=function(e,t,n){for(var r=function(){var e=l(u[o],2),r=e[0],a=e[1];G(n,t,r,(function(e,r,o){a({fieldPaths:o,newEntity:t,oldEntity:n,newValue:r,oldValue:e})}))},o=0,u=Object.entries(e);o<u.length;o++)r()},P=function(){for(var e,n=((e=(0,t.useRef)(!0)).current=!0,(0,t.useEffect)((function(){e.current=!1})),e),r=arguments.length,u=new Array(r),a=0;a<r;a++)u[a]=arguments[a];var E=function(e){var t=w().isGlobal;return s((function(){var n=b.None,r=l(e,2),o=r[0];return"function"===d(r[1])?n|=b.Entity:t(o)&&(n|=b.Global),n}))}(u),p=function(e,t){var n=l(e,4),r=n[0],o=n[1],u=n[2],a=n[3],i=(t&b.Entity)!==b.Entity,c=(0,w().isGlobal)(r);return i||c?[null,r,o||{},u||[]]:[r,o,u||{},a||[]]}(u,E),h=l(p,4),m=h[0],O=h[1],R=h[2],G=h[3],P=f(O),_=P,A=P,U=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b.None,n=w(),r=n.registerUseCase,o=n.unregisterUseCase,u=s((function(){return r(e,t)}));return(0,c.useUnmount)((function(){o(e,t)})),u}(P,E),M=function(e,n){var r=w().getGlobalContextValue,o=(0,t.useContext)(e),u=r(e);return(n&b.Global)===b.Global?u:o}(U,E),N=M,I=function(e,t){return(0,c.useCreation)((function(){var n=v.None,r=(t||{}).store,o=(e&b.Entity)===b.Entity,u=(e&b.Global)===b.Global;return o&&!u&&(n|=v.EntityRootEnabled),n|=t||u?v.ContextEnabled:v.RootEnabled,(r||u)&&(n|=v.EntityEnabled),u&&(n|=v.GlobalEnabled),n}),[e,t])}(E,M),k=(0,c.useLatest)(R),T=function(e){var n=(0,t.useRef)(0),r=(0,t.useRef)([]),o=r.current,u=C(e,o);return r.current=e,n.current+=u?0:1,n.current}(G),V=(M||{}).reducers,L=void 0===V?null:V,D=(N||{}).store,F=l(function(e,n,r,o){var u=(0,c.useUpdate)(),a=(0,c.useLatest)(o),i=r?r.value:null,l=(e&v.EntityEnabled)===v.EntityEnabled,f=(e&v.EntityRootEnabled)===v.EntityRootEnabled,s=S(r,e,(function(){if(!f)return new y.EntityStore(null);var e="function"==typeof n;return new y.EntityStore(e?n():n)})),b=function(e,n,r,o){var u=(0,t.useRef)(n);if((o&v.EntityRootEnabled)!==v.EntityRootEnabled)return r;var a="function"==typeof n,i=u.current;switch(!0){case a:case i===n:return e.value}return u.current=n,n}(s,n,i,e),d=(0,c.useMemoizedFn)((function(t,n){var r=a.current,o=r.onChange,i=r.watch,l=(e&v.GlobalEnabled)===v.GlobalEnabled;i&&x(i,t,n),null==o||o(t,n),(f||l)&&u()}));return f&&(s.value=b),(0,t.useEffect)((function(){if(l)return s.watch(d),function(){s.unwatch(d)}}),[l,s,d]),(0,c.useCreation)((function(){return[b,s]}),[b,s])}(I,m,void 0===D?null:D,R),2),$=F[0],z=F[1],B=S(L,I,(function(){var e,t,n,r=(e=R,t=function(e,t){var n,r;return null===(n=(r=k.current)[e])||void 0===n?void 0:n.call.apply(n,[r].concat(i(t)))},n={},Object.keys(e).forEach((function(r){var o=e[r];n[r]="function"!=typeof o?o:function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];return t(r,n)}})),n);return(I&v.EntityEnabled)!==v.EntityEnabled?_(r):g(A,z,r)}),T),W=function(e,n,r,u){var a=r.value,i=w().createContextValue,l=(0,t.useMemo)((function(){return i(r,u,e)}),[e,a,r,u,i]),s=(0,c.useLatest)(l);return f((function(e){var t=e.children,r=e.with,u=void 0===r?[]:r,a=n.Provider,i=s.current;return o().createElement(a,{value:i},u.reduceRight((function(e,t){return o().createElement(t,{},e)}),t))}))}(I,U,z,B);return(0,c.useCreation)((function(){if((I&v.EntityEnabled)!==v.EntityEnabled)return B;var e=(I&v.RootEnabled)===v.RootEnabled,t=function(e,t){var n={};return Object.entries(e).forEach((function(e){var r=l(e,2),o=r[0],u=r[1];n[o]=j(u,t)})),n}(B,{onShouldCache:function(){return n.current}});return e?[$,t,W]:[$,t]}),[I,$,B,W,n])},_=function(n){var r=n.usecase,o=n.watch,u=n.onChange;return P(r,{watch:o,onChange:u}),(0,e.jsx)(t.Fragment,{})},A=O().registerGlobalUseCase})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var u in r)o[u]=r[u];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
|
|
2
|
+
(()=>{var t={20:(t,e,n)=>{"use strict";var r=n(594),o=Symbol.for("react.element"),u=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};e.jsx=function(t,e,n){var r,c={},f=null,l=null;for(r in void 0!==n&&(f=""+n),void 0!==e.key&&(f=""+e.key),void 0!==e.ref&&(l=e.ref),e)u.call(e,r)&&!i.hasOwnProperty(r)&&(c[r]=e[r]);if(t&&t.defaultProps)for(r in e=t.defaultProps)void 0===c[r]&&(c[r]=e[r]);return{$$typeof:o,type:t,key:f,ref:l,props:c,_owner:a.current}}},848:(t,e,n)=>{"use strict";t.exports=n(20)},594:t=>{"use strict";t.exports=React}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var u=e[r]={exports:{}};return t[r](u,u.exports,n),u.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{UseCaseFragment:()=>x,useUseCase:()=>_});var t=n(848),e=n(594),o=n.n(e);function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function a(t,e){if(t){if("string"==typeof t)return u(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(t,e):void 0}}function i(t){return function(t){if(Array.isArray(t))return u(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||a(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,u,a,i=[],c=!0,f=!1;try{if(u=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=u.call(n)).done)&&(i.push(r.value),i.length!==e);c=!0);}catch(t){f=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(f)throw o}}return i}}(t,e)||a(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const f=ahooks;var l=function(t){return c((0,e.useState)((function(){return t})),1)[0]},s=function(t){return c((0,e.useState)(t),1)[0]};const y=usecases;var v,d;!function(t){t[t.None=0]="None",t[t.Entity=2]="Entity"}(v||(v={})),function(t){t[t.None=0]="None",t[t.RootEnabled=2]="RootEnabled",t[t.ContextEnabled=4]="ContextEnabled",t[t.EntityEnabled=8]="EntityEnabled",t[t.ContextRootEnabled=6]="ContextRootEnabled",t[t.EntityRootEnabled=14]="EntityRootEnabled"}(d||(d={}));var b=(0,y.createUseCase)((function(){var t=new Map,n=(0,e.createContext)(null);return function(){return{createContextValue:function(t,e,n){return(n&d.EntityEnabled)===d.EntityEnabled?{store:t,reducers:e,statuses:n}:{reducers:e,statuses:n}},registerUseCase:function(r,o){if(t.has(r)){var u=t.get(r),a=u.value,i=u.times;return t.set(r,{value:a,times:i+1}),a}if((o&v.Entity)!==v.Entity)return n;var c=(0,e.createContext)(null);return t.set(r,{value:c,times:1}),c},unregisterUseCase:function(e,n){if((n&v.Entity)!==v.Entity)return!1;if(!t.has(e))return!1;var r=t.get(e),o=r.value,u=r.times;return 1===u?t.delete(e):t.set(e,{value:o,times:u-1}),!0}}}})),p=function(){return s((function(){return b()}))};function E(t){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},E(t)}function m(t){var e=function(t,e){if("object"!=E(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=E(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==E(e)?e:String(e)}var h=["watch","onChange","options"];function g(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function O(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?g(Object(n),!0).forEach((function(e){var r,o,u;r=t,o=e,u=n[e],(o=m(o))in r?Object.defineProperty(r,o,{value:u,enumerable:!0,configurable:!0,writable:!0}):r[o]=u})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):g(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var w=function(t,e){var n=t.length;if(n!==e.length)return!1;for(var r=0;r<n;r++)if(t[r]!==e[r])return!1;return!0},j=function(t,e){var n,r=e||{},o=r.onShouldCache,u=void 0===o?function(){return!0}:o,a=r.onCompare,i=void 0===a?function(t,e){return w(t,e)}:a;return function(){for(var e=u(),r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];if(n&&e){var c=n,f=c.parameters,l=c.returnValue;if(i(f,o))return l}var s=t.apply(void 0,o);return e&&(n={parameters:o,returnValue:s}),s}},S=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=(0,f.useLatest)(n),u=(0,f.useCreation)((function(){return j(o.current,{onCompare:function(){return!0}})}),[r,o]);return(0,f.useCreation)((function(){return(e&d.RootEnabled)!==d.RootEnabled&&t?t:u()}),[e,t,u])},C=function(t,e){return"object"===E(t)&&null!==t&&Object.hasOwn(t,e)},R=function t(e,n,r,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],a=void 0,f=c(r.match(/^([^.]+)\.(.+)$/)||[],3),l=f[1],s=void 0===l?r:l,y=f[2],v=void 0===y?"":y,d=C(e,s),b=C(n,s),p=[].concat(i(u),[s]);if(d||b){var E=d?e[s]:a,m=b?n[s]:a;if(v)return void t(E,m,v,o,p);if(E===m)return;o(E,m,p)}else if(!/^\d+^/.test(s))for(var h=Array.isArray(e)?e:[],g=Array.isArray(n)?n:[],O=h.length,w=g.length,j=Math.max(O,w),S=0;S<j;S++)t(h[S],g[S],r,o,[].concat(i(u),["".concat(S)]))},P=function(t,e,n){for(var r=function(){var t=c(u[o],2),r=t[0],a=t[1];R(n,e,r,(function(t,r,o){a({fieldPaths:o,newEntity:e,oldEntity:n,newValue:r,oldValue:t})}))},o=0,u=Object.entries(t);o<u.length;o++)r()},_=function(){for(var t,n=((t=(0,e.useRef)(!0)).current=!0,(0,e.useEffect)((function(){t.current=!1})),t),r=arguments.length,u=new Array(r),a=0;a<r;a++)u[a]=arguments[a];var b=function(t){return s((function(){var e=v.None;return"function"===E(c(t,2)[1])&&(e|=v.Entity),e}))}(u),m=function(t,e){var n=c(t,4),r=n[0],o=n[1],u=n[2],a=n[3];return(e&v.Entity)!==v.Entity?[null,r,o||{},u||[]]:[r,o,u||{},a||[]]}(u,b),g=c(m,4),C=g[0],R=g[1],_=g[2],x=g[3],A=l(R),U=A,M=A,N=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v.None,n=p(),r=n.registerUseCase,o=n.unregisterUseCase,u=s((function(){return r(t,e)}));return(0,f.useUnmount)((function(){o(t,e)})),u}(A,b),I=(0,e.useContext)(N),k=I,T=function(t,e){return(0,f.useCreation)((function(){var n=d.None,r=(e||{}).store;return(t&v.Entity)===v.Entity&&(n|=d.EntityRootEnabled),n|=e?d.ContextEnabled:d.RootEnabled,r&&(n|=d.EntityEnabled),n}),[t,e])}(b,I),L=(0,f.useLatest)(_),D=function(t){var n=(0,e.useRef)(0),r=(0,e.useRef)([]),o=r.current,u=w(t,o);return r.current=t,n.current+=u?0:1,n.current}(x),V=(I||{}).reducers,F=void 0===V?null:V,$=(k||{}).store,z=c(function(t,n,r,o){var u=(0,f.useUpdate)(),a=(0,f.useLatest)(o),i=r?r.value:null,c=(t&d.EntityEnabled)===d.EntityEnabled,l=(t&d.EntityRootEnabled)===d.EntityRootEnabled,s=S(r,t,(function(){if(!l)return new y.EntityStore(null);var t="function"==typeof n;return new y.EntityStore(t?n():n)})),v=function(t,n,r,o){var u=(0,e.useRef)(n);if((o&d.EntityRootEnabled)!==d.EntityRootEnabled)return r;var a="function"==typeof n,i=u.current;switch(!0){case a:case i===n:return t.value}return u.current=n,n}(s,n,i,t),b=(0,f.useMemoizedFn)((function(t,e){var n=a.current,r=n.onChange,o=n.watch;o&&P(o,t,e),null==r||r(t,e),l&&u()}));return l&&(s.value=v),(0,e.useEffect)((function(){if(c)return s.watch(b),function(){s.unwatch(b)}}),[c,s,b]),(0,f.useCreation)((function(){return[v,s]}),[v,s])}(T,C,void 0===$?null:$,_),2),B=z[0],G=z[1],W=S(F,T,(function(){var t,e,n,r=(t=_,e=function(t,e){var n,r;return null===(n=(r=L.current)[t])||void 0===n?void 0:n.call.apply(n,[r].concat(i(e)))},n={},Object.keys(t).forEach((function(r){var o=t[r];n[r]="function"!=typeof o?o:function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];return e(r,n)}})),n);return(T&d.EntityEnabled)!==d.EntityEnabled?U(r):function(t,e,n){n.watch,n.onChange;var r=n.options,o=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n,r,o={},u=Object.keys(t);for(r=0;r<u.length;r++)n=u[r],e.indexOf(n)>=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(t);for(r=0;r<u.length;r++)n=u[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(n,h);return(0,y.createEntityReducers)(e,t,O(O(O({},o),r),{},{onGenerate:function(t,e){return e}}))}(M,G,r)}),D),Y=function(t,n,r,u){var a=r.value,i=p().createContextValue,c=(0,e.useMemo)((function(){return i(r,u,t)}),[t,a,r,u,i]),s=(0,f.useLatest)(c);return l((function(t){var e=t.children,r=t.with,u=void 0===r?[]:r,a=n.Provider,i=s.current;return o().createElement(a,{value:i},u.reduceRight((function(t,e){return o().createElement(e,{},t)}),e))}))}(T,N,G,W);return(0,f.useCreation)((function(){if((T&d.EntityEnabled)!==d.EntityEnabled)return W;var t=(T&d.RootEnabled)===d.RootEnabled,e=function(t,e){var n={};return Object.entries(t).forEach((function(t){var r=c(t,2),o=r[0],u=r[1];n[o]=j(u,e)})),n}(W,{onShouldCache:function(){return n.current}});return t?[B,e,Y]:[B,e]}),[T,B,W,Y,n])},x=function(n){var r=n.usecase,o=n.watch,u=n.onChange;return _(r,{watch:o,onChange:u}),(0,t.jsx)(e.Fragment,{})}})();var o=usecases="undefined"==typeof usecases?{}:usecases;for(var u in r)o[u]=r[u];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
|
|
@@ -2,6 +2,4 @@ export var ArgumentTypes;
|
|
|
2
2
|
(function (ArgumentTypes) {
|
|
3
3
|
ArgumentTypes[ArgumentTypes["None"] = 0] = "None";
|
|
4
4
|
ArgumentTypes[ArgumentTypes["Entity"] = 2] = "Entity";
|
|
5
|
-
ArgumentTypes[ArgumentTypes["Global"] = 4] = "Global";
|
|
6
|
-
ArgumentTypes[ArgumentTypes["GlobalEntity"] = 6] = "GlobalEntity";
|
|
7
5
|
})(ArgumentTypes || (ArgumentTypes = {}));
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
2
2
|
import { useConstant } from '../useConstant';
|
|
3
|
-
import { useContextUseCase } from '../useContextUseCase';
|
|
4
3
|
export const useArgumentTypes = (args) => {
|
|
5
|
-
const { isGlobal } = useContextUseCase();
|
|
6
4
|
return useConstant(() => {
|
|
7
5
|
let types = ArgumentTypes.None;
|
|
8
|
-
const [
|
|
6
|
+
const [, arg2] = args;
|
|
9
7
|
const type2 = typeof arg2;
|
|
10
8
|
if (type2 === 'function') {
|
|
11
9
|
types |= ArgumentTypes.Entity;
|
|
12
10
|
}
|
|
13
|
-
else if (isGlobal(arg1)) {
|
|
14
|
-
types |= ArgumentTypes.Global;
|
|
15
|
-
}
|
|
16
11
|
return types;
|
|
17
12
|
});
|
|
18
13
|
};
|
|
@@ -21,14 +21,14 @@ export const useEntity = (statuses, entityArg, contextStore, options) => {
|
|
|
21
21
|
const runtimeEntity = useRuntimeEntity(store, entityArg, contextEntity, statuses);
|
|
22
22
|
const onEntityChange = useMemoizedFn((newEntity, oldEntity) => {
|
|
23
23
|
const { onChange, watch } = optionsRef.current;
|
|
24
|
-
const globalEnabled = (statuses & Statuses.GlobalEnabled) === Statuses.GlobalEnabled;
|
|
25
24
|
if (watch) {
|
|
26
25
|
triggerWatchers(watch, newEntity, oldEntity);
|
|
27
26
|
}
|
|
28
27
|
onChange?.(newEntity, oldEntity);
|
|
29
|
-
if (entityRootEnabled
|
|
30
|
-
|
|
28
|
+
if (!entityRootEnabled) {
|
|
29
|
+
return;
|
|
31
30
|
}
|
|
31
|
+
update();
|
|
32
32
|
});
|
|
33
33
|
if (entityRootEnabled) {
|
|
34
34
|
// 执行同步操作
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
2
|
-
import { useContextUseCase } from '../useContextUseCase';
|
|
3
2
|
export const useFullArguments = (args, argumentTypes) => {
|
|
4
3
|
const [arg1, arg2, arg3, arg4] = args;
|
|
5
4
|
const withoutEntity = (argumentTypes & ArgumentTypes.Entity) !== ArgumentTypes.Entity;
|
|
6
|
-
|
|
7
|
-
const global = isGlobal(arg1);
|
|
8
|
-
if (withoutEntity || global) {
|
|
5
|
+
if (withoutEntity) {
|
|
9
6
|
return [
|
|
10
7
|
null,
|
|
11
8
|
arg1,
|
|
@@ -6,22 +6,18 @@ export const useStatuses = (argumentTypes, contextValue) => {
|
|
|
6
6
|
let statuses = Statuses.None;
|
|
7
7
|
const { store } = (contextValue || {});
|
|
8
8
|
const hasEntity = (argumentTypes & ArgumentTypes.Entity) === ArgumentTypes.Entity;
|
|
9
|
-
|
|
10
|
-
if (hasEntity && !isGlobal) {
|
|
9
|
+
if (hasEntity) {
|
|
11
10
|
statuses |= Statuses.EntityRootEnabled;
|
|
12
11
|
}
|
|
13
|
-
if (contextValue
|
|
12
|
+
if (contextValue) {
|
|
14
13
|
statuses |= Statuses.ContextEnabled;
|
|
15
14
|
}
|
|
16
15
|
else {
|
|
17
16
|
statuses |= Statuses.RootEnabled;
|
|
18
17
|
}
|
|
19
|
-
if (store
|
|
18
|
+
if (store) {
|
|
20
19
|
statuses |= Statuses.EntityEnabled;
|
|
21
20
|
}
|
|
22
|
-
if (isGlobal) {
|
|
23
|
-
statuses |= Statuses.GlobalEnabled;
|
|
24
|
-
}
|
|
25
21
|
return statuses;
|
|
26
22
|
}, [argumentTypes, contextValue]);
|
|
27
23
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useCreation, useLatest } from 'ahooks';
|
|
2
|
+
import { useContext as useContextValue } from 'react';
|
|
2
3
|
import { useConstantFn } from '../useConstantFn';
|
|
3
4
|
import { useProvider } from '../useProvider';
|
|
4
5
|
import { initEntityReducers } from '../../methods/initEntityReducers';
|
|
@@ -13,7 +14,6 @@ import { cacheCalls } from '../../methods/cacheCalls';
|
|
|
13
14
|
import { useCompareDeps } from '../useCompareDeps';
|
|
14
15
|
import { captureCalls } from '../../methods/captureCalls';
|
|
15
16
|
import { useFullArguments } from '../useFullArguments';
|
|
16
|
-
import { useContextValue } from '../useContextValue';
|
|
17
17
|
export const useUseCase = ((...args) => {
|
|
18
18
|
const isRenderingRef = useIsRenderingRef();
|
|
19
19
|
const argumentTypes = useArgumentTypes(args);
|
|
@@ -23,7 +23,7 @@ export const useUseCase = ((...args) => {
|
|
|
23
23
|
const usecase = unkownUsecase;
|
|
24
24
|
const entityUseCase = unkownUsecase;
|
|
25
25
|
const context = useContext(unkownUsecase, argumentTypes);
|
|
26
|
-
const contextValue = useContextValue(context
|
|
26
|
+
const contextValue = useContextValue(context);
|
|
27
27
|
const entityContextValue = contextValue;
|
|
28
28
|
const statuses = useStatuses(argumentTypes, contextValue);
|
|
29
29
|
const optionsRef = useLatest(options);
|
|
@@ -5,7 +5,6 @@ import { renderHook, act, render, fireEvent, screen } from '@testing-library/rea
|
|
|
5
5
|
import { useUseCase } from '.';
|
|
6
6
|
import { useDeepCompareEffect, useMemoizedFn, useMount, useUpdate, useUpdateEffect } from 'ahooks';
|
|
7
7
|
import { Fragment, useEffect, useRef, useState } from 'react';
|
|
8
|
-
import { registerGlobalUseCase } from '../../methods/registerGlobalUseCase';
|
|
9
8
|
const EXT_1 = '.png';
|
|
10
9
|
const EXT_2 = '.jpg';
|
|
11
10
|
const PATH_1 = `hello${EXT_1}`;
|
|
@@ -1434,110 +1433,6 @@ describe('useUseCase', () => {
|
|
|
1434
1433
|
oldValue: EXT_1,
|
|
1435
1434
|
});
|
|
1436
1435
|
});
|
|
1437
|
-
test('global usecase should share the entity to any components', () => {
|
|
1438
|
-
const onValue = jest.fn();
|
|
1439
|
-
const firstButtonText = 'first button';
|
|
1440
|
-
const secondButtonText = 'second button';
|
|
1441
|
-
const numberUseCase = () => {
|
|
1442
|
-
return entityUseCase();
|
|
1443
|
-
};
|
|
1444
|
-
const A = () => {
|
|
1445
|
-
const [entity, { setEntity }] = useUseCase(numberUseCase);
|
|
1446
|
-
const onButtonClick = () => {
|
|
1447
|
-
setEntity(2);
|
|
1448
|
-
};
|
|
1449
|
-
useMount(() => {
|
|
1450
|
-
onValue(entity);
|
|
1451
|
-
});
|
|
1452
|
-
return (_jsx("div", { children: _jsx("button", { onClick: onButtonClick, children: firstButtonText }) }));
|
|
1453
|
-
};
|
|
1454
|
-
const B = () => {
|
|
1455
|
-
const [entity, { setEntity }] = useUseCase(numberUseCase);
|
|
1456
|
-
const onButtonClick = () => {
|
|
1457
|
-
setEntity(3);
|
|
1458
|
-
};
|
|
1459
|
-
useMount(() => {
|
|
1460
|
-
onValue(entity);
|
|
1461
|
-
});
|
|
1462
|
-
return (_jsx("div", { children: _jsx("button", { onClick: onButtonClick, children: secondButtonText }) }));
|
|
1463
|
-
};
|
|
1464
|
-
registerGlobalUseCase(1, numberUseCase);
|
|
1465
|
-
render(_jsx(A, {}));
|
|
1466
|
-
expect(onValue).toHaveBeenNthCalledWith(1, 1);
|
|
1467
|
-
fireEvent.click(screen.getByText(firstButtonText));
|
|
1468
|
-
render(_jsx(B, {}));
|
|
1469
|
-
expect(onValue).toHaveBeenNthCalledWith(2, 2);
|
|
1470
|
-
fireEvent.click(screen.getByText(secondButtonText));
|
|
1471
|
-
});
|
|
1472
|
-
test('global usecase should trigger `onChange` in any components when entity has changed', () => {
|
|
1473
|
-
const onValueChange1 = jest.fn();
|
|
1474
|
-
const onValueChange2 = jest.fn();
|
|
1475
|
-
const firstButtonText = 'first button';
|
|
1476
|
-
const secondButtonText = 'second button';
|
|
1477
|
-
const numberUseCase = () => {
|
|
1478
|
-
return entityUseCase();
|
|
1479
|
-
};
|
|
1480
|
-
const A = () => {
|
|
1481
|
-
const [, { setEntity }] = useUseCase(numberUseCase, {
|
|
1482
|
-
onChange(value) {
|
|
1483
|
-
onValueChange1(value);
|
|
1484
|
-
},
|
|
1485
|
-
});
|
|
1486
|
-
const onButtonClick = () => {
|
|
1487
|
-
setEntity(2);
|
|
1488
|
-
};
|
|
1489
|
-
return (_jsx("div", { children: _jsx("button", { onClick: onButtonClick, children: firstButtonText }) }));
|
|
1490
|
-
};
|
|
1491
|
-
const B = () => {
|
|
1492
|
-
const [, { setEntity }] = useUseCase(numberUseCase, {
|
|
1493
|
-
onChange(value) {
|
|
1494
|
-
onValueChange2(value);
|
|
1495
|
-
},
|
|
1496
|
-
});
|
|
1497
|
-
const onButtonClick = () => {
|
|
1498
|
-
setEntity(3);
|
|
1499
|
-
};
|
|
1500
|
-
return (_jsx("div", { children: _jsx("button", { onClick: onButtonClick, children: secondButtonText }) }));
|
|
1501
|
-
};
|
|
1502
|
-
registerGlobalUseCase(1, numberUseCase);
|
|
1503
|
-
render(_jsx(A, {}));
|
|
1504
|
-
fireEvent.click(screen.getByText(firstButtonText));
|
|
1505
|
-
expect(onValueChange1).toHaveBeenNthCalledWith(1, 2);
|
|
1506
|
-
render(_jsx(B, {}));
|
|
1507
|
-
fireEvent.click(screen.getByText(secondButtonText));
|
|
1508
|
-
expect(onValueChange1).toHaveBeenNthCalledWith(2, 3);
|
|
1509
|
-
expect(onValueChange2).toHaveBeenNthCalledWith(1, 3);
|
|
1510
|
-
});
|
|
1511
|
-
test('global usecase should trigger update for components when entity has changed', () => {
|
|
1512
|
-
const onUpdate1 = jest.fn();
|
|
1513
|
-
const onUpdate2 = jest.fn();
|
|
1514
|
-
const buttonText = 'my button';
|
|
1515
|
-
const numberUseCase = () => {
|
|
1516
|
-
return entityUseCase();
|
|
1517
|
-
};
|
|
1518
|
-
const A = () => {
|
|
1519
|
-
const [entity, { setEntity }] = useUseCase(numberUseCase);
|
|
1520
|
-
const onButtonClick = () => {
|
|
1521
|
-
setEntity(6);
|
|
1522
|
-
};
|
|
1523
|
-
useUpdateEffect(() => {
|
|
1524
|
-
onUpdate1(entity);
|
|
1525
|
-
}, [entity]);
|
|
1526
|
-
return (_jsx("div", { children: _jsx("button", { onClick: onButtonClick, children: buttonText }) }));
|
|
1527
|
-
};
|
|
1528
|
-
const B = () => {
|
|
1529
|
-
const [entity] = useUseCase(numberUseCase);
|
|
1530
|
-
useUpdateEffect(() => {
|
|
1531
|
-
onUpdate2(entity);
|
|
1532
|
-
}, [entity]);
|
|
1533
|
-
return _jsx(A, {});
|
|
1534
|
-
};
|
|
1535
|
-
registerGlobalUseCase(1, numberUseCase);
|
|
1536
|
-
render(_jsx(B, {}));
|
|
1537
|
-
fireEvent.click(screen.getByText(buttonText));
|
|
1538
|
-
expect(onUpdate1).toHaveBeenNthCalledWith(1, 6);
|
|
1539
|
-
expect(onUpdate2).toHaveBeenNthCalledWith(1, 6);
|
|
1540
|
-
});
|
|
1541
1436
|
});
|
|
1542
1437
|
describe('`useUseCase` should work the same as `useReducers`', () => {
|
|
1543
1438
|
test('`entity` should equal `defaultFile`', () => {
|
|
@@ -50,7 +50,7 @@ export interface ReducersHook {
|
|
|
50
50
|
<T extends ReducerMap, TUseCaseOptions extends object = object>(usecase: UseCase<T & SymbolSetTarget<NonEntitySymbolSet>, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): T;
|
|
51
51
|
}
|
|
52
52
|
export interface ContextualCoreCollectionHook {
|
|
53
|
-
<T, TEntityReducers extends
|
|
53
|
+
<T, TEntityReducers extends EntityReducerMap<T>>(usecase: InferableEntityUseCase<T, TEntityReducers>, options?: UseCaseHookContextualOptions<T>, deps?: unknown[]): ContextualCoreCollection<T, TEntityReducers>;
|
|
54
54
|
}
|
|
55
55
|
export interface RootCoreCollectionHook {
|
|
56
56
|
<T, TEntityReducers extends EntityReducerMap<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: InferableEntityUseCase<T, TEntityReducers & EntityReducers<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, EntityReducers<T, TEntityReducers>>;
|
package/es/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { UseCaseFragment } from './components/UseCaseFragment';
|
|
2
2
|
export { useUseCase } from './hooks/useUseCase';
|
|
3
|
-
export { registerGlobalUseCase } from './methods/registerGlobalUseCase';
|
|
4
3
|
export type { EntityWatchEvent, RootCoreCollection, ContextualCoreCollection, CoreCollection, } from './hooks/useUseCase/types';
|
|
5
4
|
export type { UseCaseHookOptions } from './hooks/useUseCase/types';
|
|
6
5
|
export type { UseCaseProvider } from './hooks/useProvider/types';
|
package/es/index.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { createUseCase
|
|
1
|
+
import { createUseCase } from '@mic-rexjs/usecases';
|
|
2
2
|
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
3
3
|
import { createContext } from 'react';
|
|
4
4
|
import { Statuses } from '../../enums/Statuses';
|
|
5
|
-
import { initEntityReducers } from '../../methods/initEntityReducers';
|
|
6
5
|
export const contextUseCase = createUseCase(() => {
|
|
7
6
|
const referenceMap = new Map();
|
|
8
|
-
const globalContextMap = new Map();
|
|
9
|
-
const globalContextValueMap = new Map();
|
|
10
7
|
const defaultUseCaseContext = createContext(null);
|
|
11
8
|
return () => {
|
|
12
9
|
const createContextValue = (store, reducers, statuses) => {
|
|
@@ -19,13 +16,6 @@ export const contextUseCase = createUseCase(() => {
|
|
|
19
16
|
}
|
|
20
17
|
return { reducers, statuses };
|
|
21
18
|
};
|
|
22
|
-
const getGlobalContextValue = (key) => {
|
|
23
|
-
const context = typeof key === 'function' ? globalContextMap.get(key) : key;
|
|
24
|
-
return globalContextValueMap.get(context) || null;
|
|
25
|
-
};
|
|
26
|
-
const isGlobal = (usecase) => {
|
|
27
|
-
return globalContextMap.has(usecase);
|
|
28
|
-
};
|
|
29
19
|
const registerUseCase = (usecase, argumentTypes) => {
|
|
30
20
|
if (referenceMap.has(usecase)) {
|
|
31
21
|
const reference = referenceMap.get(usecase);
|
|
@@ -66,36 +56,10 @@ export const contextUseCase = createUseCase(() => {
|
|
|
66
56
|
}
|
|
67
57
|
return true;
|
|
68
58
|
};
|
|
69
|
-
const registerGlobalUseCase = (entity, usecase) => {
|
|
70
|
-
if (globalContextMap.has(usecase)) {
|
|
71
|
-
return usecase;
|
|
72
|
-
}
|
|
73
|
-
const store = new EntityStore(entity);
|
|
74
|
-
const reducers = initEntityReducers(usecase, store, {});
|
|
75
|
-
const contextValue = createContextValue(store, reducers, Statuses.GlobalEnabled);
|
|
76
|
-
const context = registerUseCase(usecase, ArgumentTypes.GlobalEntity);
|
|
77
|
-
globalContextMap.set(usecase, context);
|
|
78
|
-
globalContextValueMap.set(context, contextValue);
|
|
79
|
-
return usecase;
|
|
80
|
-
};
|
|
81
|
-
const unregisterGlobalUseCase = (usecase) => {
|
|
82
|
-
if (!globalContextMap.has(usecase)) {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
const context = globalContextMap.get(usecase);
|
|
86
|
-
globalContextMap.delete(usecase);
|
|
87
|
-
globalContextValueMap.delete(context);
|
|
88
|
-
referenceMap.delete(usecase);
|
|
89
|
-
return true;
|
|
90
|
-
};
|
|
91
59
|
return {
|
|
92
60
|
createContextValue,
|
|
93
|
-
getGlobalContextValue,
|
|
94
|
-
isGlobal,
|
|
95
61
|
registerUseCase,
|
|
96
|
-
registerGlobalUseCase,
|
|
97
62
|
unregisterUseCase,
|
|
98
|
-
unregisterGlobalUseCase,
|
|
99
63
|
};
|
|
100
64
|
};
|
|
101
65
|
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
3
3
|
import { Statuses } from '../../enums/Statuses';
|
|
4
4
|
import { AsyncEntityGenerator, EntityGenerator, EntityReducer, EntityStore, ReducerKeys, Reducers } from '@mic-rexjs/usecases';
|
|
5
|
-
import { EntityReducerMap,
|
|
5
|
+
import { EntityReducerMap, InferableUseCase, ReducerMap } from '@mic-rexjs/usecases/es/types';
|
|
6
6
|
export type ContextualEntityReducer<T, TEntityReducer extends EntityReducer<T>> = TEntityReducer extends (entity: infer TEntity, ...args: infer TArgs) => infer TReturn ? (...args: TArgs) => TReturn extends AsyncEntityGenerator<TEntity, infer TResult> ? Promise<TResult> : TReturn extends EntityGenerator<TEntity, infer TResult> ? TResult : TReturn : never;
|
|
7
7
|
export type ContextualEntityReducers<T, TEntityReducers extends EntityReducerMap<T>> = {
|
|
8
8
|
[K in ReducerKeys<TEntityReducers>]: ContextualEntityReducer<T, TEntityReducers[K]>;
|
|
@@ -22,13 +22,8 @@ export interface ContextReference<T> {
|
|
|
22
22
|
}
|
|
23
23
|
export type ContextReducers = Reducers<{
|
|
24
24
|
createContextValue<T, TReducers extends ReducerMap>(store: EntityStore<T>, reducers: TReducers, statuses: Statuses): ContextValue<TReducers>;
|
|
25
|
-
getGlobalContextValue<T, TEntityReducers extends EntityReducerMap<T>, TContextValue extends ContextValue<TEntityReducers> = ContextValue<TEntityReducers>>(key: Context<TContextValue>): TContextValue;
|
|
26
|
-
getGlobalContextValue<T, TEntityReducers extends EntityReducerMap<T>>(usecase: InferableEntityUseCase<T, TEntityReducers>): ContextValue<TEntityReducers> | null;
|
|
27
|
-
isGlobal<T>(usecase: InferableEntityUseCase<T>): boolean;
|
|
28
25
|
registerUseCase<T extends ReducerMap, TUseCaseOptions extends object, TContext extends Context<ContextValue<T>> = Context<ContextValue<T>>>(usecase: InferableUseCase<T, TUseCaseOptions>, argumentTypes: ArgumentTypes): TContext;
|
|
29
26
|
unregisterUseCase<T extends ReducerMap, TUseCaseOptions extends object>(usecase: InferableUseCase<T, TUseCaseOptions>, argumentTypes: ArgumentTypes): boolean;
|
|
30
|
-
registerGlobalUseCase<T, TUseCase extends InferableEntityUseCase<T>>(entity: T, usecase: TUseCase): TUseCase;
|
|
31
|
-
unregisterGlobalUseCase<T>(usecase: InferableEntityUseCase<T>): boolean;
|
|
32
27
|
}>;
|
|
33
28
|
export interface ContextUseCase {
|
|
34
29
|
(): ContextReducers;
|
|
@@ -8,6 +8,4 @@ var ArgumentTypes;
|
|
|
8
8
|
(function (ArgumentTypes) {
|
|
9
9
|
ArgumentTypes[ArgumentTypes["None"] = 0] = "None";
|
|
10
10
|
ArgumentTypes[ArgumentTypes["Entity"] = 2] = "Entity";
|
|
11
|
-
ArgumentTypes[ArgumentTypes["Global"] = 4] = "Global";
|
|
12
|
-
ArgumentTypes[ArgumentTypes["GlobalEntity"] = 6] = "GlobalEntity";
|
|
13
11
|
})(ArgumentTypes || (exports.ArgumentTypes = ArgumentTypes = {}));
|
|
@@ -9,20 +9,14 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _ArgumentTypes = require("../../enums/ArgumentTypes");
|
|
11
11
|
var _useConstant = require("../useConstant");
|
|
12
|
-
var _useContextUseCase2 = require("../useContextUseCase");
|
|
13
12
|
var useArgumentTypes = exports.useArgumentTypes = function useArgumentTypes(args) {
|
|
14
|
-
var _useContextUseCase = (0, _useContextUseCase2.useContextUseCase)(),
|
|
15
|
-
isGlobal = _useContextUseCase.isGlobal;
|
|
16
13
|
return (0, _useConstant.useConstant)(function () {
|
|
17
14
|
var types = _ArgumentTypes.ArgumentTypes.None;
|
|
18
15
|
var _args = (0, _slicedToArray2["default"])(args, 2),
|
|
19
|
-
arg1 = _args[0],
|
|
20
16
|
arg2 = _args[1];
|
|
21
17
|
var type2 = (0, _typeof2["default"])(arg2);
|
|
22
18
|
if (type2 === 'function') {
|
|
23
19
|
types |= _ArgumentTypes.ArgumentTypes.Entity;
|
|
24
|
-
} else if (isGlobal(arg1)) {
|
|
25
|
-
types |= _ArgumentTypes.ArgumentTypes.Global;
|
|
26
20
|
}
|
|
27
21
|
return types;
|
|
28
22
|
});
|
|
@@ -29,14 +29,14 @@ var useEntity = exports.useEntity = function useEntity(statuses, entityArg, cont
|
|
|
29
29
|
var _optionsRef$current = optionsRef.current,
|
|
30
30
|
onChange = _optionsRef$current.onChange,
|
|
31
31
|
watch = _optionsRef$current.watch;
|
|
32
|
-
var globalEnabled = (statuses & _Statuses.Statuses.GlobalEnabled) === _Statuses.Statuses.GlobalEnabled;
|
|
33
32
|
if (watch) {
|
|
34
33
|
(0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
|
|
35
34
|
}
|
|
36
35
|
onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
|
|
37
|
-
if (entityRootEnabled
|
|
38
|
-
|
|
36
|
+
if (!entityRootEnabled) {
|
|
37
|
+
return;
|
|
39
38
|
}
|
|
39
|
+
update();
|
|
40
40
|
});
|
|
41
41
|
if (entityRootEnabled) {
|
|
42
42
|
// 执行同步操作
|
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useFullArguments = void 0;
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _ArgumentTypes = require("../../enums/ArgumentTypes");
|
|
10
|
-
var _useContextUseCase2 = require("../useContextUseCase");
|
|
11
10
|
var useFullArguments = exports.useFullArguments = function useFullArguments(args, argumentTypes) {
|
|
12
11
|
var _args = (0, _slicedToArray2["default"])(args, 4),
|
|
13
12
|
arg1 = _args[0],
|
|
@@ -15,10 +14,7 @@ var useFullArguments = exports.useFullArguments = function useFullArguments(args
|
|
|
15
14
|
arg3 = _args[2],
|
|
16
15
|
arg4 = _args[3];
|
|
17
16
|
var withoutEntity = (argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) !== _ArgumentTypes.ArgumentTypes.Entity;
|
|
18
|
-
|
|
19
|
-
isGlobal = _useContextUseCase.isGlobal;
|
|
20
|
-
var global = isGlobal(arg1);
|
|
21
|
-
if (withoutEntity || global) {
|
|
17
|
+
if (withoutEntity) {
|
|
22
18
|
return [null, arg1, arg2 || {}, arg3 || []];
|
|
23
19
|
}
|
|
24
20
|
return [arg1, arg2, arg3 || {}, arg4 || []];
|
|
@@ -13,21 +13,17 @@ var useStatuses = exports.useStatuses = function useStatuses(argumentTypes, cont
|
|
|
13
13
|
var _ref = contextValue || {},
|
|
14
14
|
store = _ref.store;
|
|
15
15
|
var hasEntity = (argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) === _ArgumentTypes.ArgumentTypes.Entity;
|
|
16
|
-
|
|
17
|
-
if (hasEntity && !isGlobal) {
|
|
16
|
+
if (hasEntity) {
|
|
18
17
|
statuses |= _Statuses.Statuses.EntityRootEnabled;
|
|
19
18
|
}
|
|
20
|
-
if (contextValue
|
|
19
|
+
if (contextValue) {
|
|
21
20
|
statuses |= _Statuses.Statuses.ContextEnabled;
|
|
22
21
|
} else {
|
|
23
22
|
statuses |= _Statuses.Statuses.RootEnabled;
|
|
24
23
|
}
|
|
25
|
-
if (store
|
|
24
|
+
if (store) {
|
|
26
25
|
statuses |= _Statuses.Statuses.EntityEnabled;
|
|
27
26
|
}
|
|
28
|
-
if (isGlobal) {
|
|
29
|
-
statuses |= _Statuses.Statuses.GlobalEnabled;
|
|
30
|
-
}
|
|
31
27
|
return statuses;
|
|
32
28
|
}, [argumentTypes, contextValue]);
|
|
33
29
|
};
|
|
@@ -8,6 +8,7 @@ exports.useUseCase = void 0;
|
|
|
8
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _ahooks = require("ahooks");
|
|
11
|
+
var _react = require("react");
|
|
11
12
|
var _useConstantFn = require("../useConstantFn");
|
|
12
13
|
var _useProvider = require("../useProvider");
|
|
13
14
|
var _initEntityReducers = require("../../methods/initEntityReducers");
|
|
@@ -22,7 +23,6 @@ var _cacheCalls = require("../../methods/cacheCalls");
|
|
|
22
23
|
var _useCompareDeps = require("../useCompareDeps");
|
|
23
24
|
var _captureCalls = require("../../methods/captureCalls");
|
|
24
25
|
var _useFullArguments = require("../useFullArguments");
|
|
25
|
-
var _useContextValue = require("../useContextValue");
|
|
26
26
|
var useUseCase = exports.useUseCase = function useUseCase() {
|
|
27
27
|
var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
|
|
28
28
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
@@ -39,7 +39,7 @@ var useUseCase = exports.useUseCase = function useUseCase() {
|
|
|
39
39
|
var usecase = unkownUsecase;
|
|
40
40
|
var entityUseCase = unkownUsecase;
|
|
41
41
|
var context = (0, _useContext.useContext)(unkownUsecase, argumentTypes);
|
|
42
|
-
var contextValue = (0,
|
|
42
|
+
var contextValue = (0, _react.useContext)(context);
|
|
43
43
|
var entityContextValue = contextValue;
|
|
44
44
|
var statuses = (0, _useStatuses.useStatuses)(argumentTypes, contextValue);
|
|
45
45
|
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
@@ -16,7 +16,6 @@ var _react = require("@testing-library/react");
|
|
|
16
16
|
var _ = require(".");
|
|
17
17
|
var _ahooks = require("ahooks");
|
|
18
18
|
var _react2 = require("react");
|
|
19
|
-
var _registerGlobalUseCase = require("../../methods/registerGlobalUseCase");
|
|
20
19
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
20
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
21
|
function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
|
|
@@ -1919,150 +1918,6 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
1919
1918
|
oldValue: EXT_1
|
|
1920
1919
|
});
|
|
1921
1920
|
});
|
|
1922
|
-
(0, _globals.test)('global usecase should share the entity to any components', function () {
|
|
1923
|
-
var onValue = _globals.jest.fn();
|
|
1924
|
-
var firstButtonText = 'first button';
|
|
1925
|
-
var secondButtonText = 'second button';
|
|
1926
|
-
var numberUseCase = function numberUseCase() {
|
|
1927
|
-
return (0, _usecases.entityUseCase)();
|
|
1928
|
-
};
|
|
1929
|
-
var A = function A() {
|
|
1930
|
-
var _useUseCase54 = (0, _.useUseCase)(numberUseCase),
|
|
1931
|
-
_useUseCase55 = (0, _slicedToArray2["default"])(_useUseCase54, 2),
|
|
1932
|
-
entity = _useUseCase55[0],
|
|
1933
|
-
setEntity = _useUseCase55[1].setEntity;
|
|
1934
|
-
var onButtonClick = function onButtonClick() {
|
|
1935
|
-
setEntity(2);
|
|
1936
|
-
};
|
|
1937
|
-
(0, _ahooks.useMount)(function () {
|
|
1938
|
-
onValue(entity);
|
|
1939
|
-
});
|
|
1940
|
-
return (0, _jsxRuntime.jsx)("div", {
|
|
1941
|
-
children: (0, _jsxRuntime.jsx)("button", {
|
|
1942
|
-
onClick: onButtonClick,
|
|
1943
|
-
children: firstButtonText
|
|
1944
|
-
})
|
|
1945
|
-
});
|
|
1946
|
-
};
|
|
1947
|
-
var B = function B() {
|
|
1948
|
-
var _useUseCase56 = (0, _.useUseCase)(numberUseCase),
|
|
1949
|
-
_useUseCase57 = (0, _slicedToArray2["default"])(_useUseCase56, 2),
|
|
1950
|
-
entity = _useUseCase57[0],
|
|
1951
|
-
setEntity = _useUseCase57[1].setEntity;
|
|
1952
|
-
var onButtonClick = function onButtonClick() {
|
|
1953
|
-
setEntity(3);
|
|
1954
|
-
};
|
|
1955
|
-
(0, _ahooks.useMount)(function () {
|
|
1956
|
-
onValue(entity);
|
|
1957
|
-
});
|
|
1958
|
-
return (0, _jsxRuntime.jsx)("div", {
|
|
1959
|
-
children: (0, _jsxRuntime.jsx)("button", {
|
|
1960
|
-
onClick: onButtonClick,
|
|
1961
|
-
children: secondButtonText
|
|
1962
|
-
})
|
|
1963
|
-
});
|
|
1964
|
-
};
|
|
1965
|
-
(0, _registerGlobalUseCase.registerGlobalUseCase)(1, numberUseCase);
|
|
1966
|
-
(0, _react.render)((0, _jsxRuntime.jsx)(A, {}));
|
|
1967
|
-
(0, _globals.expect)(onValue).toHaveBeenNthCalledWith(1, 1);
|
|
1968
|
-
_react.fireEvent.click(_react.screen.getByText(firstButtonText));
|
|
1969
|
-
(0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
|
|
1970
|
-
(0, _globals.expect)(onValue).toHaveBeenNthCalledWith(2, 2);
|
|
1971
|
-
_react.fireEvent.click(_react.screen.getByText(secondButtonText));
|
|
1972
|
-
});
|
|
1973
|
-
(0, _globals.test)('global usecase should trigger `onChange` in any components when entity has changed', function () {
|
|
1974
|
-
var onValueChange1 = _globals.jest.fn();
|
|
1975
|
-
var onValueChange2 = _globals.jest.fn();
|
|
1976
|
-
var firstButtonText = 'first button';
|
|
1977
|
-
var secondButtonText = 'second button';
|
|
1978
|
-
var numberUseCase = function numberUseCase() {
|
|
1979
|
-
return (0, _usecases.entityUseCase)();
|
|
1980
|
-
};
|
|
1981
|
-
var A = function A() {
|
|
1982
|
-
var _useUseCase58 = (0, _.useUseCase)(numberUseCase, {
|
|
1983
|
-
onChange: function onChange(value) {
|
|
1984
|
-
onValueChange1(value);
|
|
1985
|
-
}
|
|
1986
|
-
}),
|
|
1987
|
-
_useUseCase59 = (0, _slicedToArray2["default"])(_useUseCase58, 2),
|
|
1988
|
-
setEntity = _useUseCase59[1].setEntity;
|
|
1989
|
-
var onButtonClick = function onButtonClick() {
|
|
1990
|
-
setEntity(2);
|
|
1991
|
-
};
|
|
1992
|
-
return (0, _jsxRuntime.jsx)("div", {
|
|
1993
|
-
children: (0, _jsxRuntime.jsx)("button", {
|
|
1994
|
-
onClick: onButtonClick,
|
|
1995
|
-
children: firstButtonText
|
|
1996
|
-
})
|
|
1997
|
-
});
|
|
1998
|
-
};
|
|
1999
|
-
var B = function B() {
|
|
2000
|
-
var _useUseCase60 = (0, _.useUseCase)(numberUseCase, {
|
|
2001
|
-
onChange: function onChange(value) {
|
|
2002
|
-
onValueChange2(value);
|
|
2003
|
-
}
|
|
2004
|
-
}),
|
|
2005
|
-
_useUseCase61 = (0, _slicedToArray2["default"])(_useUseCase60, 2),
|
|
2006
|
-
setEntity = _useUseCase61[1].setEntity;
|
|
2007
|
-
var onButtonClick = function onButtonClick() {
|
|
2008
|
-
setEntity(3);
|
|
2009
|
-
};
|
|
2010
|
-
return (0, _jsxRuntime.jsx)("div", {
|
|
2011
|
-
children: (0, _jsxRuntime.jsx)("button", {
|
|
2012
|
-
onClick: onButtonClick,
|
|
2013
|
-
children: secondButtonText
|
|
2014
|
-
})
|
|
2015
|
-
});
|
|
2016
|
-
};
|
|
2017
|
-
(0, _registerGlobalUseCase.registerGlobalUseCase)(1, numberUseCase);
|
|
2018
|
-
(0, _react.render)((0, _jsxRuntime.jsx)(A, {}));
|
|
2019
|
-
_react.fireEvent.click(_react.screen.getByText(firstButtonText));
|
|
2020
|
-
(0, _globals.expect)(onValueChange1).toHaveBeenNthCalledWith(1, 2);
|
|
2021
|
-
(0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
|
|
2022
|
-
_react.fireEvent.click(_react.screen.getByText(secondButtonText));
|
|
2023
|
-
(0, _globals.expect)(onValueChange1).toHaveBeenNthCalledWith(2, 3);
|
|
2024
|
-
(0, _globals.expect)(onValueChange2).toHaveBeenNthCalledWith(1, 3);
|
|
2025
|
-
});
|
|
2026
|
-
(0, _globals.test)('global usecase should trigger update for components when entity has changed', function () {
|
|
2027
|
-
var onUpdate1 = _globals.jest.fn();
|
|
2028
|
-
var onUpdate2 = _globals.jest.fn();
|
|
2029
|
-
var buttonText = 'my button';
|
|
2030
|
-
var numberUseCase = function numberUseCase() {
|
|
2031
|
-
return (0, _usecases.entityUseCase)();
|
|
2032
|
-
};
|
|
2033
|
-
var A = function A() {
|
|
2034
|
-
var _useUseCase62 = (0, _.useUseCase)(numberUseCase),
|
|
2035
|
-
_useUseCase63 = (0, _slicedToArray2["default"])(_useUseCase62, 2),
|
|
2036
|
-
entity = _useUseCase63[0],
|
|
2037
|
-
setEntity = _useUseCase63[1].setEntity;
|
|
2038
|
-
var onButtonClick = function onButtonClick() {
|
|
2039
|
-
setEntity(6);
|
|
2040
|
-
};
|
|
2041
|
-
(0, _ahooks.useUpdateEffect)(function () {
|
|
2042
|
-
onUpdate1(entity);
|
|
2043
|
-
}, [entity]);
|
|
2044
|
-
return (0, _jsxRuntime.jsx)("div", {
|
|
2045
|
-
children: (0, _jsxRuntime.jsx)("button", {
|
|
2046
|
-
onClick: onButtonClick,
|
|
2047
|
-
children: buttonText
|
|
2048
|
-
})
|
|
2049
|
-
});
|
|
2050
|
-
};
|
|
2051
|
-
var B = function B() {
|
|
2052
|
-
var _useUseCase64 = (0, _.useUseCase)(numberUseCase),
|
|
2053
|
-
_useUseCase65 = (0, _slicedToArray2["default"])(_useUseCase64, 1),
|
|
2054
|
-
entity = _useUseCase65[0];
|
|
2055
|
-
(0, _ahooks.useUpdateEffect)(function () {
|
|
2056
|
-
onUpdate2(entity);
|
|
2057
|
-
}, [entity]);
|
|
2058
|
-
return (0, _jsxRuntime.jsx)(A, {});
|
|
2059
|
-
};
|
|
2060
|
-
(0, _registerGlobalUseCase.registerGlobalUseCase)(1, numberUseCase);
|
|
2061
|
-
(0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
|
|
2062
|
-
_react.fireEvent.click(_react.screen.getByText(buttonText));
|
|
2063
|
-
(0, _globals.expect)(onUpdate1).toHaveBeenNthCalledWith(1, 6);
|
|
2064
|
-
(0, _globals.expect)(onUpdate2).toHaveBeenNthCalledWith(1, 6);
|
|
2065
|
-
});
|
|
2066
1921
|
});
|
|
2067
1922
|
(0, _globals.describe)('`useUseCase` should work the same as `useReducers`', function () {
|
|
2068
1923
|
(0, _globals.test)('`entity` should equal `defaultFile`', function () {
|
|
@@ -2116,8 +1971,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2116
1971
|
(0, _globals.test)('reducer call should not be cached if component is at rendering phase', function () {
|
|
2117
1972
|
var buttonText = 'button';
|
|
2118
1973
|
var CacheTestComponent = function CacheTestComponent() {
|
|
2119
|
-
var
|
|
2120
|
-
subtraction =
|
|
1974
|
+
var _useUseCase54 = (0, _.useUseCase)(mathUseCase),
|
|
1975
|
+
subtraction = _useUseCase54.subtraction;
|
|
2121
1976
|
var update = (0, _ahooks.useUpdate)();
|
|
2122
1977
|
var onClick = function onClick() {
|
|
2123
1978
|
update();
|
|
@@ -2140,8 +1995,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2140
1995
|
(0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
|
|
2141
1996
|
var buttonText = 'button';
|
|
2142
1997
|
var CacheTestComponent = function CacheTestComponent() {
|
|
2143
|
-
var
|
|
2144
|
-
subtraction =
|
|
1998
|
+
var _useUseCase55 = (0, _.useUseCase)(mathUseCase),
|
|
1999
|
+
subtraction = _useUseCase55.subtraction;
|
|
2145
2000
|
var onClick = function onClick() {
|
|
2146
2001
|
subtraction(5, 3);
|
|
2147
2002
|
};
|
|
@@ -2169,8 +2024,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
|
|
|
2169
2024
|
var count = 0;
|
|
2170
2025
|
var buttonText = 'button';
|
|
2171
2026
|
var StringUseCaseTestComponent = function StringUseCaseTestComponent() {
|
|
2172
|
-
var
|
|
2173
|
-
subtraction =
|
|
2027
|
+
var _useUseCase56 = (0, _.useUseCase)(mathUseCase),
|
|
2028
|
+
subtraction = _useUseCase56.subtraction;
|
|
2174
2029
|
var update = (0, _ahooks.useUpdate)();
|
|
2175
2030
|
subtraction(5, count++);
|
|
2176
2031
|
var onUpdate = function onUpdate() {
|
package/lib/index.js
CHANGED
|
@@ -9,12 +9,6 @@ Object.defineProperty(exports, "UseCaseFragment", {
|
|
|
9
9
|
return _UseCaseFragment.UseCaseFragment;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
Object.defineProperty(exports, "registerGlobalUseCase", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function get() {
|
|
15
|
-
return _registerGlobalUseCase.registerGlobalUseCase;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
12
|
Object.defineProperty(exports, "useUseCase", {
|
|
19
13
|
enumerable: true,
|
|
20
14
|
get: function get() {
|
|
@@ -22,5 +16,4 @@ Object.defineProperty(exports, "useUseCase", {
|
|
|
22
16
|
}
|
|
23
17
|
});
|
|
24
18
|
var _UseCaseFragment = require("./components/UseCaseFragment");
|
|
25
|
-
var _useUseCase = require("./hooks/useUseCase");
|
|
26
|
-
var _registerGlobalUseCase = require("./methods/registerGlobalUseCase");
|
|
19
|
+
var _useUseCase = require("./hooks/useUseCase");
|
|
@@ -8,11 +8,8 @@ var _usecases = require("@mic-rexjs/usecases");
|
|
|
8
8
|
var _ArgumentTypes = require("../../enums/ArgumentTypes");
|
|
9
9
|
var _react = require("react");
|
|
10
10
|
var _Statuses = require("../../enums/Statuses");
|
|
11
|
-
var _initEntityReducers = require("../../methods/initEntityReducers");
|
|
12
11
|
var contextUseCase = exports.contextUseCase = (0, _usecases.createUseCase)(function () {
|
|
13
12
|
var referenceMap = new Map();
|
|
14
|
-
var globalContextMap = new Map();
|
|
15
|
-
var globalContextValueMap = new Map();
|
|
16
13
|
var defaultUseCaseContext = (0, _react.createContext)(null);
|
|
17
14
|
return function () {
|
|
18
15
|
var createContextValue = function createContextValue(store, reducers, statuses) {
|
|
@@ -28,13 +25,6 @@ var contextUseCase = exports.contextUseCase = (0, _usecases.createUseCase)(funct
|
|
|
28
25
|
statuses: statuses
|
|
29
26
|
};
|
|
30
27
|
};
|
|
31
|
-
var getGlobalContextValue = function getGlobalContextValue(key) {
|
|
32
|
-
var context = typeof key === 'function' ? globalContextMap.get(key) : key;
|
|
33
|
-
return globalContextValueMap.get(context) || null;
|
|
34
|
-
};
|
|
35
|
-
var isGlobal = function isGlobal(usecase) {
|
|
36
|
-
return globalContextMap.has(usecase);
|
|
37
|
-
};
|
|
38
28
|
var registerUseCase = function registerUseCase(usecase, argumentTypes) {
|
|
39
29
|
if (referenceMap.has(usecase)) {
|
|
40
30
|
var reference = referenceMap.get(usecase);
|
|
@@ -76,36 +66,10 @@ var contextUseCase = exports.contextUseCase = (0, _usecases.createUseCase)(funct
|
|
|
76
66
|
}
|
|
77
67
|
return true;
|
|
78
68
|
};
|
|
79
|
-
var registerGlobalUseCase = function registerGlobalUseCase(entity, usecase) {
|
|
80
|
-
if (globalContextMap.has(usecase)) {
|
|
81
|
-
return usecase;
|
|
82
|
-
}
|
|
83
|
-
var store = new _usecases.EntityStore(entity);
|
|
84
|
-
var reducers = (0, _initEntityReducers.initEntityReducers)(usecase, store, {});
|
|
85
|
-
var contextValue = createContextValue(store, reducers, _Statuses.Statuses.GlobalEnabled);
|
|
86
|
-
var context = registerUseCase(usecase, _ArgumentTypes.ArgumentTypes.GlobalEntity);
|
|
87
|
-
globalContextMap.set(usecase, context);
|
|
88
|
-
globalContextValueMap.set(context, contextValue);
|
|
89
|
-
return usecase;
|
|
90
|
-
};
|
|
91
|
-
var unregisterGlobalUseCase = function unregisterGlobalUseCase(usecase) {
|
|
92
|
-
if (!globalContextMap.has(usecase)) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
var context = globalContextMap.get(usecase);
|
|
96
|
-
globalContextMap["delete"](usecase);
|
|
97
|
-
globalContextValueMap["delete"](context);
|
|
98
|
-
referenceMap["delete"](usecase);
|
|
99
|
-
return true;
|
|
100
|
-
};
|
|
101
69
|
return {
|
|
102
70
|
createContextValue: createContextValue,
|
|
103
|
-
getGlobalContextValue: getGlobalContextValue,
|
|
104
|
-
isGlobal: isGlobal,
|
|
105
71
|
registerUseCase: registerUseCase,
|
|
106
|
-
|
|
107
|
-
unregisterUseCase: unregisterUseCase,
|
|
108
|
-
unregisterGlobalUseCase: unregisterGlobalUseCase
|
|
72
|
+
unregisterUseCase: unregisterUseCase
|
|
109
73
|
};
|
|
110
74
|
};
|
|
111
75
|
});
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mic-rexjs/usecases-react",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.1",
|
|
4
4
|
"description": "React-based solution for use usecases of Clean Architecture",
|
|
5
5
|
"private": false,
|
|
6
|
+
"sideEffects": false,
|
|
6
7
|
"keywords": [
|
|
7
8
|
"clean architecture",
|
|
8
9
|
"entity",
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
},
|
|
34
35
|
"license": "MIT",
|
|
35
36
|
"peerDependencies": {
|
|
36
|
-
"@mic-rexjs/usecases": "^2.12.
|
|
37
|
+
"@mic-rexjs/usecases": "^2.12.4",
|
|
37
38
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
"@commitlint/cli": "^19.0.3",
|
|
50
51
|
"@commitlint/config-angular": "^19.0.3",
|
|
51
52
|
"@jest/globals": "^29.5.0",
|
|
52
|
-
"@mic-rexjs/usecases": "^2.12.
|
|
53
|
+
"@mic-rexjs/usecases": "^2.12.4",
|
|
53
54
|
"@testing-library/react": "^14.0.0",
|
|
54
55
|
"@types/node": "^20.4.2",
|
|
55
56
|
"@types/react": "^18.2.14",
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { Context, ContextValue } from '../../usecases/contextUseCase/types';
|
|
2
|
-
import { ReducerMap } from '@mic-rexjs/usecases/es/types';
|
|
3
|
-
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
4
|
-
export declare const useContextValue: <T extends ReducerMap<import("@mic-rexjs/usecases/es/types").Reducer<unknown>>, TContextValue extends ContextValue<T>>(context: Context<TContextValue>, argumentType: ArgumentTypes) => TContextValue | null;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { useContextUseCase } from '../useContextUseCase';
|
|
2
|
-
import { useContext } from 'react';
|
|
3
|
-
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
4
|
-
export const useContextValue = (context, argumentType) => {
|
|
5
|
-
const { getGlobalContextValue } = useContextUseCase();
|
|
6
|
-
const contextValue = useContext(context);
|
|
7
|
-
const globalContextValue = getGlobalContextValue(context);
|
|
8
|
-
const isGlobal = (argumentType & ArgumentTypes.Global) === ArgumentTypes.Global;
|
|
9
|
-
if (isGlobal) {
|
|
10
|
-
return globalContextValue;
|
|
11
|
-
}
|
|
12
|
-
return contextValue;
|
|
13
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const registerGlobalUseCase: <T, TUseCase extends import("@mic-rexjs/usecases/es/types").InferableEntityUseCase<T>>(entity: T, usecase: TUseCase) => TUseCase;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useContextValue = void 0;
|
|
7
|
-
var _useContextUseCase2 = require("../useContextUseCase");
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
var _ArgumentTypes = require("../../enums/ArgumentTypes");
|
|
10
|
-
var useContextValue = exports.useContextValue = function useContextValue(context, argumentType) {
|
|
11
|
-
var _useContextUseCase = (0, _useContextUseCase2.useContextUseCase)(),
|
|
12
|
-
getGlobalContextValue = _useContextUseCase.getGlobalContextValue;
|
|
13
|
-
var contextValue = (0, _react.useContext)(context);
|
|
14
|
-
var globalContextValue = getGlobalContextValue(context);
|
|
15
|
-
var isGlobal = (argumentType & _ArgumentTypes.ArgumentTypes.Global) === _ArgumentTypes.ArgumentTypes.Global;
|
|
16
|
-
if (isGlobal) {
|
|
17
|
-
return globalContextValue;
|
|
18
|
-
}
|
|
19
|
-
return contextValue;
|
|
20
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.registerGlobalUseCase = void 0;
|
|
7
|
-
var _contextUseCase2 = require("../../usecases/contextUseCase");
|
|
8
|
-
var _contextUseCase = (0, _contextUseCase2.contextUseCase)(),
|
|
9
|
-
registerGlobalUseCase = exports.registerGlobalUseCase = _contextUseCase.registerGlobalUseCase;
|