@rango-dev/queue-manager-react 0.1.10 → 0.1.11

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.
@@ -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
@@ -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;AAMzC,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,eA4DpD;AAED,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CAKxD;AAED,eAAe,QAAQ,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<{ manager: ManagerContext }>({\n manager: undefined,\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 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 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 }}>\n {props.children}\n </ManagerCtx.Provider>\n );\n}\n\nexport function useManager(): { manager: ManagerContext } {\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":["ManagerCtx","createContext","manager","undefined","Provider","props","_useState","useState","forceRender","context","useRef","useMemo","Manager","queuesDefs","events","onStorageUpdate","onCreateQueue","onCreateTask","onUpdateQueue","onUpdateTask","onPersistedDataLoaded","onTaskBlock","isPaused","useLayoutEffect","current","useEffect","pause","run","React","value","children","useManager","useContext","Error"],"mappings":";;;;;;;;;;AAkBA,IAAMA,UAAU,gBAAGC,mBAAa,CAA8B;EAC5DC,OAAO,EAAEC;CACV,CAAC;AASF,SAASC,QAAQA,CAACC,KAAmC;;EAEnD,IAAAC,SAAA,GAAwBC,cAAQ,CAAC,EAAE,CAAC;IAA3BC,WAAW,GAAAF,SAAA;EACpB,IAAMG,OAAO,GAAGC,YAAM,CAACL,KAAK,CAACI,OAAO,CAAC;EAErC,IAAMP,OAAO,GAAGS,aAAO,CAAU;IAC/B,OAAO,IAAIC,wBAAO,CAAC;MACjBC,UAAU,EAAER,KAAK,CAACQ,UAAU;MAC5BC,MAAM,EAAE;QACNC,eAAe,EAAE,SAAAA;UACfP,WAAW,CAAC,EAAE,CAAC;SAChB;QACDQ,aAAa,EAAE,SAAAA;UACbR,WAAW,CAAC,EAAE,CAAC;SAChB;QACDS,YAAY,EAAE,SAAAA;UACZT,WAAW,CAAC,EAAE,CAAC;SAChB;QACDU,aAAa,EAAE,SAAAA;UACbV,WAAW,CAAC,EAAE,CAAC;SAChB;QACDW,YAAY,EAAE,SAAAA;UACZX,WAAW,CAAC,EAAE,CAAC;SAChB;QACDY,qBAAqB,EAAE,SAAAA,sBAAClB,OAAO;UAC7BM,WAAW,CAAC,EAAE,CAAC;UAEf,IAAIH,KAAK,CAACe,qBAAqB,EAAE;YAC/Bf,KAAK,CAACe,qBAAqB,CAAClB,OAAO,CAAC;;SAEvC;QACDmB,WAAW,EAAE,SAAAA;UACXb,WAAW,CAAC,EAAE,CAAC;;OAElB;MACDC,OAAO,EAAEA,OAAO,IAAI,EAAE;MACtBa,QAAQ,EAAEjB,KAAK,CAACiB;KACjB,CAAC;GACH,EAAE,EAAE,CAAC;EAENC,qBAAe,CAAC;IACdd,OAAO,CAACe,OAAO,GAAGnB,KAAK,CAACI,OAAO;GAChC,EAAE,CAACJ,KAAK,CAACI,OAAO,CAAC,CAAC;EAEnBgB,eAAS,CAAC;IACR,IAAI,OAAOpB,KAAK,CAACiB,QAAQ,KAAK,WAAW,EAAE;MACzC,IAAIjB,KAAK,CAACiB,QAAQ,EAAE;QAClBpB,OAAO,CAACwB,KAAK,EAAE;OAChB,MAAM;QACLxB,OAAO,CAACyB,GAAG,EAAE;;MAEfnB,WAAW,CAAC,EAAE,CAAC;;GAElB,EAAE,CAACH,KAAK,CAACiB,QAAQ,CAAC,CAAC;EAEpB,OACEM,6BAAC5B,UAAU,CAACI,QAAQ;IAACyB,KAAK,EAAE;MAAE3B,OAAO,EAAPA;;KAC3BG,KAAK,CAACyB,QAAQ,CACK;AAE1B;SAEgBC,UAAUA;EACxB,IAAMtB,OAAO,GAAGuB,gBAAU,CAAChC,UAAU,CAAC;EACtC,IAAI,CAACS,OAAO,EACV,MAAMwB,KAAK,CAAC,2DAA2D,CAAC;EAC1E,OAAOxB,OAAO;AAChB;;;;;"}
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,o=require("@rango-dev/queue-manager-core"),u=t.createContext({manager:void 0});exports.Provider=function(e){var a=t.useState({})[1],r=t.useRef(e.context),s=t.useMemo((function(){return new o.Manager({queuesDefs:e.queuesDefs,events:{onStorageUpdate:function(){a({})},onCreateQueue:function(){a({})},onCreateTask:function(){a({})},onUpdateQueue:function(){a({})},onUpdateTask:function(){a({})},onPersistedDataLoaded:function(t){a({}),e.onPersistedDataLoaded&&e.onPersistedDataLoaded(t)},onTaskBlock:function(){a({})}},context:r||{},isPaused:e.isPaused})}),[]);return t.useLayoutEffect((function(){r.current=e.context}),[e.context]),t.useEffect((function(){void 0!==e.isPaused&&(e.isPaused?s.pause():s.run(),a({}))}),[e.isPaused]),n.createElement(u.Provider,{value:{manager:s}},e.children)},exports.useManager=function(){var e=t.useContext(u);if(!e)throw Error("useManager can only be used within the Provider component");return 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<{ manager: ManagerContext }>({\n manager: undefined,\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 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 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 }}>\n {props.children}\n </ManagerCtx.Provider>\n );\n}\n\nexport function useManager(): { manager: ManagerContext } {\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":["ManagerCtx","createContext","manager","undefined","props","forceRender","useState","context","useRef","useMemo","Manager","queuesDefs","events","onStorageUpdate","onCreateQueue","onCreateTask","onUpdateQueue","onUpdateTask","onPersistedDataLoaded","onTaskBlock","isPaused","useLayoutEffect","current","useEffect","pause","run","React","Provider","value","children","useContext","Error"],"mappings":"+LAkBMA,EAAaC,gBAA2C,CAC5DC,aAASC,qBAUX,SAAkBC,GAEhB,IAASC,EAAeC,WAAS,OAC3BC,EAAUC,SAAOJ,EAAMG,SAEvBL,EAAUO,WAAiB,WAC/B,OAAO,IAAIC,UAAQ,CACjBC,WAAYP,EAAMO,WAClBC,OAAQ,CACNC,gBAAiB,WACfR,EAAY,KAEdS,cAAe,WACbT,EAAY,KAEdU,aAAc,WACZV,EAAY,KAEdW,cAAe,WACbX,EAAY,KAEdY,aAAc,WACZZ,EAAY,KAEda,sBAAuB,SAAChB,GACtBG,EAAY,IAERD,EAAMc,uBACRd,EAAMc,sBAAsBhB,IAGhCiB,YAAa,WACXd,EAAY,MAGhBE,QAASA,GAAW,GACpBa,SAAUhB,EAAMgB,aAEjB,IAiBH,OAfAC,mBAAgB,WACdd,EAAQe,QAAUlB,EAAMG,UACvB,CAACH,EAAMG,UAEVgB,aAAU,gBACsB,IAAnBnB,EAAMgB,WACXhB,EAAMgB,SACRlB,EAAQsB,QAERtB,EAAQuB,MAEVpB,EAAY,OAEb,CAACD,EAAMgB,WAGRM,gBAAC1B,EAAW2B,UAASC,MAAO,CAAE1B,QAAAA,IAC3BE,EAAMyB,yCAMX,IAAMtB,EAAUuB,aAAW9B,GAC3B,IAAKO,EACH,MAAMwB,MAAM,6DACd,OAAOxB"}
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<{ manager: ManagerContext }>({\n manager: undefined,\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 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 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 }}>\n {props.children}\n </ManagerCtx.Provider>\n );\n}\n\nexport function useManager(): { manager: ManagerContext } {\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":["ManagerCtx","createContext","manager","undefined","Provider","props","_useState","useState","forceRender","context","useRef","useMemo","Manager","queuesDefs","events","onStorageUpdate","onCreateQueue","onCreateTask","onUpdateQueue","onUpdateTask","onPersistedDataLoaded","onTaskBlock","isPaused","useLayoutEffect","current","useEffect","pause","run","React","value","children","useManager","useContext","Error"],"mappings":";;;AAkBA,IAAMA,UAAU,gBAAGC,aAAa,CAA8B;EAC5DC,OAAO,EAAEC;CACV,CAAC;AASF,SAASC,QAAQA,CAACC,KAAmC;;EAEnD,IAAAC,SAAA,GAAwBC,QAAQ,CAAC,EAAE,CAAC;IAA3BC,WAAW,GAAAF,SAAA;EACpB,IAAMG,OAAO,GAAGC,MAAM,CAACL,KAAK,CAACI,OAAO,CAAC;EAErC,IAAMP,OAAO,GAAGS,OAAO,CAAU;IAC/B,OAAO,IAAIC,OAAO,CAAC;MACjBC,UAAU,EAAER,KAAK,CAACQ,UAAU;MAC5BC,MAAM,EAAE;QACNC,eAAe,EAAE,SAAAA;UACfP,WAAW,CAAC,EAAE,CAAC;SAChB;QACDQ,aAAa,EAAE,SAAAA;UACbR,WAAW,CAAC,EAAE,CAAC;SAChB;QACDS,YAAY,EAAE,SAAAA;UACZT,WAAW,CAAC,EAAE,CAAC;SAChB;QACDU,aAAa,EAAE,SAAAA;UACbV,WAAW,CAAC,EAAE,CAAC;SAChB;QACDW,YAAY,EAAE,SAAAA;UACZX,WAAW,CAAC,EAAE,CAAC;SAChB;QACDY,qBAAqB,EAAE,SAAAA,sBAAClB,OAAO;UAC7BM,WAAW,CAAC,EAAE,CAAC;UAEf,IAAIH,KAAK,CAACe,qBAAqB,EAAE;YAC/Bf,KAAK,CAACe,qBAAqB,CAAClB,OAAO,CAAC;;SAEvC;QACDmB,WAAW,EAAE,SAAAA;UACXb,WAAW,CAAC,EAAE,CAAC;;OAElB;MACDC,OAAO,EAAEA,OAAO,IAAI,EAAE;MACtBa,QAAQ,EAAEjB,KAAK,CAACiB;KACjB,CAAC;GACH,EAAE,EAAE,CAAC;EAENC,eAAe,CAAC;IACdd,OAAO,CAACe,OAAO,GAAGnB,KAAK,CAACI,OAAO;GAChC,EAAE,CAACJ,KAAK,CAACI,OAAO,CAAC,CAAC;EAEnBgB,SAAS,CAAC;IACR,IAAI,OAAOpB,KAAK,CAACiB,QAAQ,KAAK,WAAW,EAAE;MACzC,IAAIjB,KAAK,CAACiB,QAAQ,EAAE;QAClBpB,OAAO,CAACwB,KAAK,EAAE;OAChB,MAAM;QACLxB,OAAO,CAACyB,GAAG,EAAE;;MAEfnB,WAAW,CAAC,EAAE,CAAC;;GAElB,EAAE,CAACH,KAAK,CAACiB,QAAQ,CAAC,CAAC;EAEpB,OACEM,oBAAC5B,UAAU,CAACI,QAAQ;IAACyB,KAAK,EAAE;MAAE3B,OAAO,EAAPA;;KAC3BG,KAAK,CAACyB,QAAQ,CACK;AAE1B;SAEgBC,UAAUA;EACxB,IAAMtB,OAAO,GAAGuB,UAAU,CAAChC,UAAU,CAAC;EACtC,IAAI,CAACS,OAAO,EACV,MAAMwB,KAAK,CAAC,2DAA2D,CAAC;EAC1E,OAAOxB,OAAO;AAChB;;;;"}
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":"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"}
@@ -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
@@ -1,3 +1,6 @@
1
1
  import { Manager } from '@rango-dev/queue-manager-core';
2
2
  export declare type ManagerContext = Manager | undefined;
3
+ export declare type ManagerState = {
4
+ loadedFromPersistor: boolean;
5
+ };
3
6
  //# sourceMappingURL=types.d.ts.map
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/queue-manager-react",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "license": "MIT",
5
5
  "module": "dist/queue-manager-react.esm.js",
6
6
  "main": "dist/index.js",
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<{ manager: ManagerContext }>({
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
+ }
package/src/types.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  import { Manager } from '@rango-dev/queue-manager-core';
2
2
 
3
3
  export type ManagerContext = Manager | undefined;
4
+ export type ManagerState = {
5
+ loadedFromPersistor: boolean;
6
+ };