@rango-dev/queue-manager-react 0.1.10-next.77 → 0.1.11-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/provider.d.ts +2 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/queue-manager-react.cjs.development.js +55 -2
- package/dist/queue-manager-react.cjs.development.js.map +1 -1
- package/dist/queue-manager-react.cjs.production.min.js +1 -1
- package/dist/queue-manager-react.cjs.production.min.js.map +1 -1
- package/dist/queue-manager-react.esm.js +56 -3
- package/dist/queue-manager-react.esm.js.map +1 -1
- package/dist/state.d.ts +9 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/provider.tsx +16 -4
- package/src/state.ts +36 -0
- package/src/types.ts +3 -0
package/dist/provider.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PropsWithChildren } from 'react';
|
|
2
2
|
import { ManagerContext as Context, QueueDef, Events } from '@rango-dev/queue-manager-core';
|
|
3
|
-
import { ManagerContext } from './types';
|
|
3
|
+
import { ManagerContext, ManagerState } from './types';
|
|
4
4
|
interface PropTypes {
|
|
5
5
|
queuesDefs: QueueDef<any>[];
|
|
6
6
|
context: Context;
|
|
@@ -10,6 +10,7 @@ interface PropTypes {
|
|
|
10
10
|
declare function Provider(props: PropsWithChildren<PropTypes>): JSX.Element;
|
|
11
11
|
export declare function useManager(): {
|
|
12
12
|
manager: ManagerContext;
|
|
13
|
+
state: ManagerState;
|
|
13
14
|
};
|
|
14
15
|
export default Provider;
|
|
15
16
|
//# sourceMappingURL=provider.d.ts.map
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["src/provider.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,iBAAiB,EAOlB,MAAM,OAAO,CAAC;AACf,OAAO,EACL,cAAc,IAAI,OAAO,EAEzB,QAAQ,EACR,MAAM,EACP,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["src/provider.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,iBAAiB,EAOlB,MAAM,OAAO,CAAC;AACf,OAAO,EACL,cAAc,IAAI,OAAO,EAEzB,QAAQ,EACR,MAAM,EACP,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAWvD,UAAU,SAAS;IACjB,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iBAAS,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC,SAAS,CAAC,eAmEpD;AAED,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAK7E;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -8,13 +8,60 @@ var React = require('react');
|
|
|
8
8
|
var React__default = _interopDefault(React);
|
|
9
9
|
var queueManagerCore = require('@rango-dev/queue-manager-core');
|
|
10
10
|
|
|
11
|
+
function _extends() {
|
|
12
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
13
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
14
|
+
var source = arguments[i];
|
|
15
|
+
for (var key in source) {
|
|
16
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
17
|
+
target[key] = source[key];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return target;
|
|
22
|
+
};
|
|
23
|
+
return _extends.apply(this, arguments);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var initState = {
|
|
27
|
+
loadedFromPersistor: false
|
|
28
|
+
};
|
|
29
|
+
function reducer(state, action) {
|
|
30
|
+
var _extends2;
|
|
31
|
+
switch (action.type) {
|
|
32
|
+
case 'UPDATE':
|
|
33
|
+
return _extends({}, state, (_extends2 = {}, _extends2[action.name] = action.value, _extends2));
|
|
34
|
+
default:
|
|
35
|
+
return state;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function useManagerState() {
|
|
39
|
+
var _useReducer = React.useReducer(reducer, initState),
|
|
40
|
+
state = _useReducer[0],
|
|
41
|
+
dispatch = _useReducer[1];
|
|
42
|
+
return {
|
|
43
|
+
state: state,
|
|
44
|
+
update: function update(name, value) {
|
|
45
|
+
dispatch({
|
|
46
|
+
type: 'UPDATE',
|
|
47
|
+
name: name,
|
|
48
|
+
value: value
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
11
54
|
var ManagerCtx = /*#__PURE__*/React.createContext({
|
|
12
|
-
manager: undefined
|
|
55
|
+
manager: undefined,
|
|
56
|
+
state: initState
|
|
13
57
|
});
|
|
14
58
|
function Provider(props) {
|
|
15
59
|
// TODO: this is not a proper way but i don't want to change the context interface atm.
|
|
16
60
|
var _useState = React.useState({}),
|
|
17
61
|
forceRender = _useState[1];
|
|
62
|
+
var _useManagerState = useManagerState(),
|
|
63
|
+
state = _useManagerState.state,
|
|
64
|
+
update = _useManagerState.update;
|
|
18
65
|
var context = React.useRef(props.context);
|
|
19
66
|
var manager = React.useMemo(function () {
|
|
20
67
|
return new queueManagerCore.Manager({
|
|
@@ -40,6 +87,11 @@ function Provider(props) {
|
|
|
40
87
|
if (props.onPersistedDataLoaded) {
|
|
41
88
|
props.onPersistedDataLoaded(manager);
|
|
42
89
|
}
|
|
90
|
+
// This condition will make sure, we only update the `loadedFromPersistor`.
|
|
91
|
+
// But be aware `onPersistedDataLoaded` is calling after each `sync` which means can be called multiple times.
|
|
92
|
+
if (!state.loadedFromPersistor) {
|
|
93
|
+
update('loadedFromPersistor', true);
|
|
94
|
+
}
|
|
43
95
|
},
|
|
44
96
|
onTaskBlock: function onTaskBlock() {
|
|
45
97
|
forceRender({});
|
|
@@ -64,7 +116,8 @@ function Provider(props) {
|
|
|
64
116
|
}, [props.isPaused]);
|
|
65
117
|
return React__default.createElement(ManagerCtx.Provider, {
|
|
66
118
|
value: {
|
|
67
|
-
manager: manager
|
|
119
|
+
manager: manager,
|
|
120
|
+
state: state
|
|
68
121
|
}
|
|
69
122
|
}, props.children);
|
|
70
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager-react.cjs.development.js","sources":["../src/provider.tsx"],"sourcesContent":["import React, {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ManagerContext as Context,\n Manager,\n QueueDef,\n Events,\n} from '@rango-dev/queue-manager-core';\nimport { ManagerContext } from './types';\n\nconst ManagerCtx = createContext<{
|
|
1
|
+
{"version":3,"file":"queue-manager-react.cjs.development.js","sources":["../src/state.ts","../src/provider.tsx"],"sourcesContent":["import { useReducer } from 'react';\nimport { ManagerState } from './types';\n\ntype Update<T> = (name: keyof T, value: T[keyof T]) => void;\ntype Action<T> = { type: 'UPDATE'; name: keyof T; value: T[keyof T] };\n\nexport const initState: ManagerState = {\n loadedFromPersistor: false,\n};\n\nfunction reducer(state: ManagerState, action: Action<ManagerState>) {\n switch (action.type) {\n case 'UPDATE':\n return { ...state, [action.name]: action.value };\n default:\n return state;\n }\n}\n\nexport function useManagerState(): {\n state: ManagerState;\n update: Update<ManagerState>;\n} {\n const [state, dispatch] = useReducer(reducer, initState);\n\n return {\n state,\n update: (name, value) => {\n dispatch({\n type: 'UPDATE',\n name,\n value,\n });\n },\n };\n}\n","import React, {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ManagerContext as Context,\n Manager,\n QueueDef,\n Events,\n} from '@rango-dev/queue-manager-core';\nimport { ManagerContext, ManagerState } from './types';\nimport { useManagerState, initState as initManagerState } from './state';\n\nconst ManagerCtx = createContext<{\n manager: ManagerContext;\n state: ManagerState;\n}>({\n manager: undefined,\n state: initManagerState,\n});\n\ninterface PropTypes {\n queuesDefs: QueueDef<any>[];\n context: Context;\n onPersistedDataLoaded?: Events['onPersistedDataLoaded'];\n isPaused?: boolean;\n}\n\nfunction Provider(props: PropsWithChildren<PropTypes>) {\n // TODO: this is not a proper way but i don't want to change the context interface atm.\n const [, forceRender] = useState({});\n const { state, update } = useManagerState();\n const context = useRef(props.context);\n\n const manager = useMemo<Manager>(() => {\n return new Manager({\n queuesDefs: props.queuesDefs,\n events: {\n onStorageUpdate: () => {\n forceRender({});\n },\n onCreateQueue: () => {\n forceRender({});\n },\n onCreateTask: () => {\n forceRender({});\n },\n onUpdateQueue: () => {\n forceRender({});\n },\n onUpdateTask: () => {\n forceRender({});\n },\n onPersistedDataLoaded: (manager) => {\n forceRender({});\n\n if (props.onPersistedDataLoaded) {\n props.onPersistedDataLoaded(manager);\n }\n\n // This condition will make sure, we only update the `loadedFromPersistor`.\n // But be aware `onPersistedDataLoaded` is calling after each `sync` which means can be called multiple times.\n if (!state.loadedFromPersistor) {\n update('loadedFromPersistor', true);\n }\n },\n onTaskBlock: () => {\n forceRender({});\n },\n },\n context: context || {},\n isPaused: props.isPaused,\n });\n }, []);\n\n useLayoutEffect(() => {\n context.current = props.context;\n }, [props.context]);\n\n useEffect(() => {\n if (typeof props.isPaused !== 'undefined') {\n if (props.isPaused) {\n manager.pause();\n } else {\n manager.run();\n }\n forceRender({});\n }\n }, [props.isPaused]);\n\n return (\n <ManagerCtx.Provider value={{ manager, state }}>\n {props.children}\n </ManagerCtx.Provider>\n );\n}\n\nexport function useManager(): { manager: ManagerContext; state: ManagerState } {\n const context = useContext(ManagerCtx);\n if (!context)\n throw Error('useManager can only be used within the Provider component');\n return context;\n}\n\nexport default Provider;\n"],"names":["initState","loadedFromPersistor","reducer","state","action","type","_extends","_extends2","name","value","useManagerState","_useReducer","useReducer","dispatch","update","ManagerCtx","createContext","manager","undefined","initManagerState","Provider","props","_useState","useState","forceRender","_useManagerState","context","useRef","useMemo","Manager","queuesDefs","events","onStorageUpdate","onCreateQueue","onCreateTask","onUpdateQueue","onUpdateTask","onPersistedDataLoaded","onTaskBlock","isPaused","useLayoutEffect","current","useEffect","pause","run","React","children","useManager","useContext","Error"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),n=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),n=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,r=require("@rango-dev/queue-manager-core");function a(){return(a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var o={loadedFromPersistor:!1};function u(e,t){var n;switch(t.type){case"UPDATE":return a({},e,((n={})[t.name]=t.value,n));default:return e}}var s=t.createContext({manager:void 0,state:o});exports.Provider=function(e){var a,i,c=t.useState({})[1],d=(a=t.useReducer(u,o),i=a[1],{state:a[0],update:function(e,t){i({type:"UPDATE",name:e,value:t})}}),f=d.state,v=d.update,l=t.useRef(e.context),p=t.useMemo((function(){return new r.Manager({queuesDefs:e.queuesDefs,events:{onStorageUpdate:function(){c({})},onCreateQueue:function(){c({})},onCreateTask:function(){c({})},onUpdateQueue:function(){c({})},onUpdateTask:function(){c({})},onPersistedDataLoaded:function(t){c({}),e.onPersistedDataLoaded&&e.onPersistedDataLoaded(t),f.loadedFromPersistor||v("loadedFromPersistor",!0)},onTaskBlock:function(){c({})}},context:l||{},isPaused:e.isPaused})}),[]);return t.useLayoutEffect((function(){l.current=e.context}),[e.context]),t.useEffect((function(){void 0!==e.isPaused&&(e.isPaused?p.pause():p.run(),c({}))}),[e.isPaused]),n.createElement(s.Provider,{value:{manager:p,state:f}},e.children)},exports.useManager=function(){var e=t.useContext(s);if(!e)throw Error("useManager can only be used within the Provider component");return e};
|
|
2
2
|
//# sourceMappingURL=queue-manager-react.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager-react.cjs.production.min.js","sources":["../src/provider.tsx"],"sourcesContent":["import React, {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ManagerContext as Context,\n Manager,\n QueueDef,\n Events,\n} from '@rango-dev/queue-manager-core';\nimport { ManagerContext } from './types';\n\nconst ManagerCtx = createContext<{
|
|
1
|
+
{"version":3,"file":"queue-manager-react.cjs.production.min.js","sources":["../src/state.ts","../src/provider.tsx"],"sourcesContent":["import { useReducer } from 'react';\nimport { ManagerState } from './types';\n\ntype Update<T> = (name: keyof T, value: T[keyof T]) => void;\ntype Action<T> = { type: 'UPDATE'; name: keyof T; value: T[keyof T] };\n\nexport const initState: ManagerState = {\n loadedFromPersistor: false,\n};\n\nfunction reducer(state: ManagerState, action: Action<ManagerState>) {\n switch (action.type) {\n case 'UPDATE':\n return { ...state, [action.name]: action.value };\n default:\n return state;\n }\n}\n\nexport function useManagerState(): {\n state: ManagerState;\n update: Update<ManagerState>;\n} {\n const [state, dispatch] = useReducer(reducer, initState);\n\n return {\n state,\n update: (name, value) => {\n dispatch({\n type: 'UPDATE',\n name,\n value,\n });\n },\n };\n}\n","import React, {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ManagerContext as Context,\n Manager,\n QueueDef,\n Events,\n} from '@rango-dev/queue-manager-core';\nimport { ManagerContext, ManagerState } from './types';\nimport { useManagerState, initState as initManagerState } from './state';\n\nconst ManagerCtx = createContext<{\n manager: ManagerContext;\n state: ManagerState;\n}>({\n manager: undefined,\n state: initManagerState,\n});\n\ninterface PropTypes {\n queuesDefs: QueueDef<any>[];\n context: Context;\n onPersistedDataLoaded?: Events['onPersistedDataLoaded'];\n isPaused?: boolean;\n}\n\nfunction Provider(props: PropsWithChildren<PropTypes>) {\n // TODO: this is not a proper way but i don't want to change the context interface atm.\n const [, forceRender] = useState({});\n const { state, update } = useManagerState();\n const context = useRef(props.context);\n\n const manager = useMemo<Manager>(() => {\n return new Manager({\n queuesDefs: props.queuesDefs,\n events: {\n onStorageUpdate: () => {\n forceRender({});\n },\n onCreateQueue: () => {\n forceRender({});\n },\n onCreateTask: () => {\n forceRender({});\n },\n onUpdateQueue: () => {\n forceRender({});\n },\n onUpdateTask: () => {\n forceRender({});\n },\n onPersistedDataLoaded: (manager) => {\n forceRender({});\n\n if (props.onPersistedDataLoaded) {\n props.onPersistedDataLoaded(manager);\n }\n\n // This condition will make sure, we only update the `loadedFromPersistor`.\n // But be aware `onPersistedDataLoaded` is calling after each `sync` which means can be called multiple times.\n if (!state.loadedFromPersistor) {\n update('loadedFromPersistor', true);\n }\n },\n onTaskBlock: () => {\n forceRender({});\n },\n },\n context: context || {},\n isPaused: props.isPaused,\n });\n }, []);\n\n useLayoutEffect(() => {\n context.current = props.context;\n }, [props.context]);\n\n useEffect(() => {\n if (typeof props.isPaused !== 'undefined') {\n if (props.isPaused) {\n manager.pause();\n } else {\n manager.run();\n }\n forceRender({});\n }\n }, [props.isPaused]);\n\n return (\n <ManagerCtx.Provider value={{ manager, state }}>\n {props.children}\n </ManagerCtx.Provider>\n );\n}\n\nexport function useManager(): { manager: ManagerContext; state: ManagerState } {\n const context = useContext(ManagerCtx);\n if (!context)\n throw Error('useManager can only be used within the Provider component');\n return context;\n}\n\nexport default Provider;\n"],"names":["initState","loadedFromPersistor","reducer","state","action","type","_extends","_extends2","name","value","ManagerCtx","createContext","manager","undefined","initManagerState","props","_useReducer","dispatch","forceRender","useState","_useManagerState","useReducer","update","context","useRef","useMemo","Manager","queuesDefs","events","onStorageUpdate","onCreateQueue","onCreateTask","onUpdateQueue","onUpdateTask","onPersistedDataLoaded","onTaskBlock","isPaused","useLayoutEffect","current","useEffect","pause","run","React","Provider","children","useContext","Error"],"mappings":"kaAMO,IAAMA,EAA0B,CACrCC,qBAAqB,GAGvB,SAASC,EAAQC,EAAqBC,SACpC,OAAQA,EAAOC,MACb,IAAK,SACH,OAAAC,KAAYH,IAAKI,MAAGH,EAAOI,MAAOJ,EAAOK,MAAKF,IAChD,QACE,OAAOJ,GCIb,IAAMO,EAAaC,gBAGhB,CACDC,aAASC,EACTV,MAAOW,qBAUT,SAAkBC,GAEhB,IDbAC,EAAcC,ECaLC,EAAeC,WAAS,OACjCC,GDdAJ,EAA0BK,aAAWnB,EAASF,GAAhCiB,EAAQD,KAEf,CACLb,MAHUa,KAIVM,OAAQ,SAACd,EAAMC,GACbQ,EAAS,CACPZ,KAAM,SACNG,KAAAA,EACAC,MAAAA,OCMEN,EAAKiB,EAALjB,MAAOmB,EAAMF,EAANE,OACTC,EAAUC,SAAOT,EAAMQ,SAEvBX,EAAUa,WAAiB,WAC/B,OAAO,IAAIC,UAAQ,CACjBC,WAAYZ,EAAMY,WAClBC,OAAQ,CACNC,gBAAiB,WACfX,EAAY,KAEdY,cAAe,WACbZ,EAAY,KAEda,aAAc,WACZb,EAAY,KAEdc,cAAe,WACbd,EAAY,KAEde,aAAc,WACZf,EAAY,KAEdgB,sBAAuB,SAACtB,GACtBM,EAAY,IAERH,EAAMmB,uBACRnB,EAAMmB,sBAAsBtB,GAKzBT,EAAMF,qBACTqB,EAAO,uBAAuB,IAGlCa,YAAa,WACXjB,EAAY,MAGhBK,QAASA,GAAW,GACpBa,SAAUrB,EAAMqB,aAEjB,IAiBH,OAfAC,mBAAgB,WACdd,EAAQe,QAAUvB,EAAMQ,UACvB,CAACR,EAAMQ,UAEVgB,aAAU,gBACsB,IAAnBxB,EAAMqB,WACXrB,EAAMqB,SACRxB,EAAQ4B,QAER5B,EAAQ6B,MAEVvB,EAAY,OAEb,CAACH,EAAMqB,WAGRM,gBAAChC,EAAWiC,UAASlC,MAAO,CAAEG,QAAAA,EAAST,MAAAA,IACpCY,EAAM6B,8BAKb,WACE,IAAMrB,EAAUsB,aAAWnC,GAC3B,IAAKa,EACH,MAAMuB,MAAM,6DACd,OAAOvB"}
|
|
@@ -1,13 +1,60 @@
|
|
|
1
|
-
import React, { useState, useRef, useMemo, useLayoutEffect, useEffect, useContext, createContext } from 'react';
|
|
1
|
+
import React, { useReducer, useState, useRef, useMemo, useLayoutEffect, useEffect, useContext, createContext } from 'react';
|
|
2
2
|
import { Manager } from '@rango-dev/queue-manager-core';
|
|
3
3
|
|
|
4
|
+
function _extends() {
|
|
5
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
6
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
7
|
+
var source = arguments[i];
|
|
8
|
+
for (var key in source) {
|
|
9
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
10
|
+
target[key] = source[key];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
return _extends.apply(this, arguments);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var initState = {
|
|
20
|
+
loadedFromPersistor: false
|
|
21
|
+
};
|
|
22
|
+
function reducer(state, action) {
|
|
23
|
+
var _extends2;
|
|
24
|
+
switch (action.type) {
|
|
25
|
+
case 'UPDATE':
|
|
26
|
+
return _extends({}, state, (_extends2 = {}, _extends2[action.name] = action.value, _extends2));
|
|
27
|
+
default:
|
|
28
|
+
return state;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function useManagerState() {
|
|
32
|
+
var _useReducer = useReducer(reducer, initState),
|
|
33
|
+
state = _useReducer[0],
|
|
34
|
+
dispatch = _useReducer[1];
|
|
35
|
+
return {
|
|
36
|
+
state: state,
|
|
37
|
+
update: function update(name, value) {
|
|
38
|
+
dispatch({
|
|
39
|
+
type: 'UPDATE',
|
|
40
|
+
name: name,
|
|
41
|
+
value: value
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
4
47
|
var ManagerCtx = /*#__PURE__*/createContext({
|
|
5
|
-
manager: undefined
|
|
48
|
+
manager: undefined,
|
|
49
|
+
state: initState
|
|
6
50
|
});
|
|
7
51
|
function Provider(props) {
|
|
8
52
|
// TODO: this is not a proper way but i don't want to change the context interface atm.
|
|
9
53
|
var _useState = useState({}),
|
|
10
54
|
forceRender = _useState[1];
|
|
55
|
+
var _useManagerState = useManagerState(),
|
|
56
|
+
state = _useManagerState.state,
|
|
57
|
+
update = _useManagerState.update;
|
|
11
58
|
var context = useRef(props.context);
|
|
12
59
|
var manager = useMemo(function () {
|
|
13
60
|
return new Manager({
|
|
@@ -33,6 +80,11 @@ function Provider(props) {
|
|
|
33
80
|
if (props.onPersistedDataLoaded) {
|
|
34
81
|
props.onPersistedDataLoaded(manager);
|
|
35
82
|
}
|
|
83
|
+
// This condition will make sure, we only update the `loadedFromPersistor`.
|
|
84
|
+
// But be aware `onPersistedDataLoaded` is calling after each `sync` which means can be called multiple times.
|
|
85
|
+
if (!state.loadedFromPersistor) {
|
|
86
|
+
update('loadedFromPersistor', true);
|
|
87
|
+
}
|
|
36
88
|
},
|
|
37
89
|
onTaskBlock: function onTaskBlock() {
|
|
38
90
|
forceRender({});
|
|
@@ -57,7 +109,8 @@ function Provider(props) {
|
|
|
57
109
|
}, [props.isPaused]);
|
|
58
110
|
return React.createElement(ManagerCtx.Provider, {
|
|
59
111
|
value: {
|
|
60
|
-
manager: manager
|
|
112
|
+
manager: manager,
|
|
113
|
+
state: state
|
|
61
114
|
}
|
|
62
115
|
}, props.children);
|
|
63
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager-react.esm.js","sources":["../src/provider.tsx"],"sourcesContent":["import React, {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ManagerContext as Context,\n Manager,\n QueueDef,\n Events,\n} from '@rango-dev/queue-manager-core';\nimport { ManagerContext } from './types';\n\nconst ManagerCtx = createContext<{
|
|
1
|
+
{"version":3,"file":"queue-manager-react.esm.js","sources":["../src/state.ts","../src/provider.tsx"],"sourcesContent":["import { useReducer } from 'react';\nimport { ManagerState } from './types';\n\ntype Update<T> = (name: keyof T, value: T[keyof T]) => void;\ntype Action<T> = { type: 'UPDATE'; name: keyof T; value: T[keyof T] };\n\nexport const initState: ManagerState = {\n loadedFromPersistor: false,\n};\n\nfunction reducer(state: ManagerState, action: Action<ManagerState>) {\n switch (action.type) {\n case 'UPDATE':\n return { ...state, [action.name]: action.value };\n default:\n return state;\n }\n}\n\nexport function useManagerState(): {\n state: ManagerState;\n update: Update<ManagerState>;\n} {\n const [state, dispatch] = useReducer(reducer, initState);\n\n return {\n state,\n update: (name, value) => {\n dispatch({\n type: 'UPDATE',\n name,\n value,\n });\n },\n };\n}\n","import React, {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ManagerContext as Context,\n Manager,\n QueueDef,\n Events,\n} from '@rango-dev/queue-manager-core';\nimport { ManagerContext, ManagerState } from './types';\nimport { useManagerState, initState as initManagerState } from './state';\n\nconst ManagerCtx = createContext<{\n manager: ManagerContext;\n state: ManagerState;\n}>({\n manager: undefined,\n state: initManagerState,\n});\n\ninterface PropTypes {\n queuesDefs: QueueDef<any>[];\n context: Context;\n onPersistedDataLoaded?: Events['onPersistedDataLoaded'];\n isPaused?: boolean;\n}\n\nfunction Provider(props: PropsWithChildren<PropTypes>) {\n // TODO: this is not a proper way but i don't want to change the context interface atm.\n const [, forceRender] = useState({});\n const { state, update } = useManagerState();\n const context = useRef(props.context);\n\n const manager = useMemo<Manager>(() => {\n return new Manager({\n queuesDefs: props.queuesDefs,\n events: {\n onStorageUpdate: () => {\n forceRender({});\n },\n onCreateQueue: () => {\n forceRender({});\n },\n onCreateTask: () => {\n forceRender({});\n },\n onUpdateQueue: () => {\n forceRender({});\n },\n onUpdateTask: () => {\n forceRender({});\n },\n onPersistedDataLoaded: (manager) => {\n forceRender({});\n\n if (props.onPersistedDataLoaded) {\n props.onPersistedDataLoaded(manager);\n }\n\n // This condition will make sure, we only update the `loadedFromPersistor`.\n // But be aware `onPersistedDataLoaded` is calling after each `sync` which means can be called multiple times.\n if (!state.loadedFromPersistor) {\n update('loadedFromPersistor', true);\n }\n },\n onTaskBlock: () => {\n forceRender({});\n },\n },\n context: context || {},\n isPaused: props.isPaused,\n });\n }, []);\n\n useLayoutEffect(() => {\n context.current = props.context;\n }, [props.context]);\n\n useEffect(() => {\n if (typeof props.isPaused !== 'undefined') {\n if (props.isPaused) {\n manager.pause();\n } else {\n manager.run();\n }\n forceRender({});\n }\n }, [props.isPaused]);\n\n return (\n <ManagerCtx.Provider value={{ manager, state }}>\n {props.children}\n </ManagerCtx.Provider>\n );\n}\n\nexport function useManager(): { manager: ManagerContext; state: ManagerState } {\n const context = useContext(ManagerCtx);\n if (!context)\n throw Error('useManager can only be used within the Provider component');\n return context;\n}\n\nexport default Provider;\n"],"names":["initState","loadedFromPersistor","reducer","state","action","type","_extends","_extends2","name","value","useManagerState","_useReducer","useReducer","dispatch","update","ManagerCtx","createContext","manager","undefined","initManagerState","Provider","props","_useState","useState","forceRender","_useManagerState","context","useRef","useMemo","Manager","queuesDefs","events","onStorageUpdate","onCreateQueue","onCreateTask","onUpdateQueue","onUpdateTask","onPersistedDataLoaded","onTaskBlock","isPaused","useLayoutEffect","current","useEffect","pause","run","React","children","useManager","useContext","Error"],"mappings":";;;;;;;;;;;;;;;;;;AAMO,IAAMA,SAAS,GAAiB;EACrCC,mBAAmB,EAAE;CACtB;AAED,SAASC,OAAOA,CAACC,KAAmB,EAAEC,MAA4B;;EAChE,QAAQA,MAAM,CAACC,IAAI;IACjB,KAAK,QAAQ;MACX,OAAAC,QAAA,KAAYH,KAAK,GAAAI,SAAA,OAAAA,SAAA,CAAGH,MAAM,CAACI,IAAI,IAAGJ,MAAM,CAACK,KAAK,EAAAF,SAAA;IAChD;MACE,OAAOJ,KAAK;;AAElB;SAEgBO,eAAeA;EAI7B,IAAAC,WAAA,GAA0BC,UAAU,CAACV,OAAO,EAAEF,SAAS,CAAC;IAAjDG,KAAK,GAAAQ,WAAA;IAAEE,QAAQ,GAAAF,WAAA;EAEtB,OAAO;IACLR,KAAK,EAALA,KAAK;IACLW,MAAM,EAAE,SAAAA,OAACN,IAAI,EAAEC,KAAK;MAClBI,QAAQ,CAAC;QACPR,IAAI,EAAE,QAAQ;QACdG,IAAI,EAAJA,IAAI;QACJC,KAAK,EAALA;OACD,CAAC;;GAEL;AACH;;AChBA,IAAMM,UAAU,gBAAGC,aAAa,CAG7B;EACDC,OAAO,EAAEC,SAAS;EAClBf,KAAK,EAAEgB;CACR,CAAC;AASF,SAASC,QAAQA,CAACC,KAAmC;;EAEnD,IAAAC,SAAA,GAAwBC,QAAQ,CAAC,EAAE,CAAC;IAA3BC,WAAW,GAAAF,SAAA;EACpB,IAAAG,gBAAA,GAA0Bf,eAAe,EAAE;IAAnCP,KAAK,GAAAsB,gBAAA,CAALtB,KAAK;IAAEW,MAAM,GAAAW,gBAAA,CAANX,MAAM;EACrB,IAAMY,OAAO,GAAGC,MAAM,CAACN,KAAK,CAACK,OAAO,CAAC;EAErC,IAAMT,OAAO,GAAGW,OAAO,CAAU;IAC/B,OAAO,IAAIC,OAAO,CAAC;MACjBC,UAAU,EAAET,KAAK,CAACS,UAAU;MAC5BC,MAAM,EAAE;QACNC,eAAe,EAAE,SAAAA;UACfR,WAAW,CAAC,EAAE,CAAC;SAChB;QACDS,aAAa,EAAE,SAAAA;UACbT,WAAW,CAAC,EAAE,CAAC;SAChB;QACDU,YAAY,EAAE,SAAAA;UACZV,WAAW,CAAC,EAAE,CAAC;SAChB;QACDW,aAAa,EAAE,SAAAA;UACbX,WAAW,CAAC,EAAE,CAAC;SAChB;QACDY,YAAY,EAAE,SAAAA;UACZZ,WAAW,CAAC,EAAE,CAAC;SAChB;QACDa,qBAAqB,EAAE,SAAAA,sBAACpB,OAAO;UAC7BO,WAAW,CAAC,EAAE,CAAC;UAEf,IAAIH,KAAK,CAACgB,qBAAqB,EAAE;YAC/BhB,KAAK,CAACgB,qBAAqB,CAACpB,OAAO,CAAC;;;;UAKtC,IAAI,CAACd,KAAK,CAACF,mBAAmB,EAAE;YAC9Ba,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC;;SAEtC;QACDwB,WAAW,EAAE,SAAAA;UACXd,WAAW,CAAC,EAAE,CAAC;;OAElB;MACDE,OAAO,EAAEA,OAAO,IAAI,EAAE;MACtBa,QAAQ,EAAElB,KAAK,CAACkB;KACjB,CAAC;GACH,EAAE,EAAE,CAAC;EAENC,eAAe,CAAC;IACdd,OAAO,CAACe,OAAO,GAAGpB,KAAK,CAACK,OAAO;GAChC,EAAE,CAACL,KAAK,CAACK,OAAO,CAAC,CAAC;EAEnBgB,SAAS,CAAC;IACR,IAAI,OAAOrB,KAAK,CAACkB,QAAQ,KAAK,WAAW,EAAE;MACzC,IAAIlB,KAAK,CAACkB,QAAQ,EAAE;QAClBtB,OAAO,CAAC0B,KAAK,EAAE;OAChB,MAAM;QACL1B,OAAO,CAAC2B,GAAG,EAAE;;MAEfpB,WAAW,CAAC,EAAE,CAAC;;GAElB,EAAE,CAACH,KAAK,CAACkB,QAAQ,CAAC,CAAC;EAEpB,OACEM,oBAAC9B,UAAU,CAACK,QAAQ;IAACX,KAAK,EAAE;MAAEQ,OAAO,EAAPA,OAAO;MAAEd,KAAK,EAALA;;KACpCkB,KAAK,CAACyB,QAAQ,CACK;AAE1B;AAEA,SAAgBC,UAAUA;EACxB,IAAMrB,OAAO,GAAGsB,UAAU,CAACjC,UAAU,CAAC;EACtC,IAAI,CAACW,OAAO,EACV,MAAMuB,KAAK,CAAC,2DAA2D,CAAC;EAC1E,OAAOvB,OAAO;AAChB;;;;"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ManagerState } from './types';
|
|
2
|
+
declare type Update<T> = (name: keyof T, value: T[keyof T]) => void;
|
|
3
|
+
export declare const initState: ManagerState;
|
|
4
|
+
export declare function useManagerState(): {
|
|
5
|
+
state: ManagerState;
|
|
6
|
+
update: Update<ManagerState>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["src/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,aAAK,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;AAG5D,eAAO,MAAM,SAAS,EAAE,YAEvB,CAAC;AAWF,wBAAgB,eAAe,IAAI;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;CAC9B,CAaA"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,oBAAY,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,oBAAY,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AACjD,oBAAY,YAAY,GAAG;IACzB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC"}
|
package/package.json
CHANGED
package/src/provider.tsx
CHANGED
|
@@ -14,10 +14,15 @@ import {
|
|
|
14
14
|
QueueDef,
|
|
15
15
|
Events,
|
|
16
16
|
} from '@rango-dev/queue-manager-core';
|
|
17
|
-
import { ManagerContext } from './types';
|
|
17
|
+
import { ManagerContext, ManagerState } from './types';
|
|
18
|
+
import { useManagerState, initState as initManagerState } from './state';
|
|
18
19
|
|
|
19
|
-
const ManagerCtx = createContext<{
|
|
20
|
+
const ManagerCtx = createContext<{
|
|
21
|
+
manager: ManagerContext;
|
|
22
|
+
state: ManagerState;
|
|
23
|
+
}>({
|
|
20
24
|
manager: undefined,
|
|
25
|
+
state: initManagerState,
|
|
21
26
|
});
|
|
22
27
|
|
|
23
28
|
interface PropTypes {
|
|
@@ -30,6 +35,7 @@ interface PropTypes {
|
|
|
30
35
|
function Provider(props: PropsWithChildren<PropTypes>) {
|
|
31
36
|
// TODO: this is not a proper way but i don't want to change the context interface atm.
|
|
32
37
|
const [, forceRender] = useState({});
|
|
38
|
+
const { state, update } = useManagerState();
|
|
33
39
|
const context = useRef(props.context);
|
|
34
40
|
|
|
35
41
|
const manager = useMemo<Manager>(() => {
|
|
@@ -57,6 +63,12 @@ function Provider(props: PropsWithChildren<PropTypes>) {
|
|
|
57
63
|
if (props.onPersistedDataLoaded) {
|
|
58
64
|
props.onPersistedDataLoaded(manager);
|
|
59
65
|
}
|
|
66
|
+
|
|
67
|
+
// This condition will make sure, we only update the `loadedFromPersistor`.
|
|
68
|
+
// But be aware `onPersistedDataLoaded` is calling after each `sync` which means can be called multiple times.
|
|
69
|
+
if (!state.loadedFromPersistor) {
|
|
70
|
+
update('loadedFromPersistor', true);
|
|
71
|
+
}
|
|
60
72
|
},
|
|
61
73
|
onTaskBlock: () => {
|
|
62
74
|
forceRender({});
|
|
@@ -83,13 +95,13 @@ function Provider(props: PropsWithChildren<PropTypes>) {
|
|
|
83
95
|
}, [props.isPaused]);
|
|
84
96
|
|
|
85
97
|
return (
|
|
86
|
-
<ManagerCtx.Provider value={{ manager }}>
|
|
98
|
+
<ManagerCtx.Provider value={{ manager, state }}>
|
|
87
99
|
{props.children}
|
|
88
100
|
</ManagerCtx.Provider>
|
|
89
101
|
);
|
|
90
102
|
}
|
|
91
103
|
|
|
92
|
-
export function useManager(): { manager: ManagerContext } {
|
|
104
|
+
export function useManager(): { manager: ManagerContext; state: ManagerState } {
|
|
93
105
|
const context = useContext(ManagerCtx);
|
|
94
106
|
if (!context)
|
|
95
107
|
throw Error('useManager can only be used within the Provider component');
|
package/src/state.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useReducer } from 'react';
|
|
2
|
+
import { ManagerState } from './types';
|
|
3
|
+
|
|
4
|
+
type Update<T> = (name: keyof T, value: T[keyof T]) => void;
|
|
5
|
+
type Action<T> = { type: 'UPDATE'; name: keyof T; value: T[keyof T] };
|
|
6
|
+
|
|
7
|
+
export const initState: ManagerState = {
|
|
8
|
+
loadedFromPersistor: false,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
function reducer(state: ManagerState, action: Action<ManagerState>) {
|
|
12
|
+
switch (action.type) {
|
|
13
|
+
case 'UPDATE':
|
|
14
|
+
return { ...state, [action.name]: action.value };
|
|
15
|
+
default:
|
|
16
|
+
return state;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function useManagerState(): {
|
|
21
|
+
state: ManagerState;
|
|
22
|
+
update: Update<ManagerState>;
|
|
23
|
+
} {
|
|
24
|
+
const [state, dispatch] = useReducer(reducer, initState);
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
state,
|
|
28
|
+
update: (name, value) => {
|
|
29
|
+
dispatch({
|
|
30
|
+
type: 'UPDATE',
|
|
31
|
+
name,
|
|
32
|
+
value,
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|