@rango-dev/queue-manager-react 0.0.0-experimental-936229e8-20251208

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/CHANGELOG.md ADDED
@@ -0,0 +1,106 @@
1
+ # [0.33.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.32.0...queue-manager-react@0.33.0) (2025-10-29)
2
+
3
+
4
+
5
+ # [0.32.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.31.0...queue-manager-react@0.32.0) (2025-08-05)
6
+
7
+
8
+
9
+ # [0.31.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.30.0...queue-manager-react@0.31.0) (2025-07-22)
10
+
11
+
12
+ ### Reverts
13
+
14
+ * Revert "chore(release): publish" ([064ce15](https://github.com/rango-exchange/rango-client/commit/064ce157a2f819856f647f83aeb1c0410542e8d7))
15
+
16
+
17
+
18
+ # [0.29.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.28.0...queue-manager-react@0.29.0) (2025-03-11)
19
+
20
+
21
+
22
+ # [0.28.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.27.0...queue-manager-react@0.28.0) (2025-02-23)
23
+
24
+
25
+
26
+ # [0.27.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.26.0...queue-manager-react@0.27.0) (2024-08-11)
27
+
28
+
29
+
30
+ # [0.26.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.25.0...queue-manager-react@0.26.0) (2024-02-20)
31
+
32
+
33
+
34
+ # [0.25.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.24.0...queue-manager-react@0.25.0) (2024-01-22)
35
+
36
+
37
+ ### Features
38
+
39
+ * handle active tab in widget-embedded ([427a3bb](https://github.com/rango-exchange/rango-client/commit/427a3bb42dcaf899c4241aa5bd60c15a3475882a))
40
+
41
+
42
+
43
+ # [0.24.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.23.0...queue-manager-react@0.24.0) (2023-12-24)
44
+
45
+
46
+ ### Bug Fixes
47
+
48
+ * fix HMR for widget and playground ([8524820](https://github.com/rango-exchange/rango-client/commit/8524820f10cf0b8921f3db0c4f620ff98daa4103))
49
+
50
+
51
+
52
+ # [0.14.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.13.0...queue-manager-react@0.14.0) (2023-08-03)
53
+
54
+
55
+
56
+ # [0.13.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.12.0...queue-manager-react@0.13.0) (2023-08-01)
57
+
58
+
59
+
60
+ # [0.9.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.8.0...queue-manager-react@0.9.0) (2023-07-31)
61
+
62
+
63
+ ### Bug Fixes
64
+
65
+ * seems npm needs a bit time to update the cdn and return the correct version ([09168ac](https://github.com/rango-exchange/rango-client/commit/09168acdc3ca400abd2016eebc0c62103edae3a2))
66
+
67
+
68
+ ### Features
69
+
70
+ * Support for WalletConnect 2 ([faedef0](https://github.com/rango-exchange/rango-client/commit/faedef0b5e6fc3c5ef881cbbe4ec05334cc1c910))
71
+
72
+
73
+
74
+ # [0.7.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.6.0...queue-manager-react@0.7.0) (2023-07-11)
75
+
76
+
77
+
78
+ # [0.6.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.5.0...queue-manager-react@0.6.0) (2023-07-11)
79
+
80
+
81
+
82
+ # [0.5.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.4.0...queue-manager-react@0.5.0) (2023-05-31)
83
+
84
+
85
+
86
+ # [0.4.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.3.0...queue-manager-react@0.4.0) (2023-05-31)
87
+
88
+
89
+
90
+ # [0.3.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.2.0...queue-manager-react@0.3.0) (2023-05-30)
91
+
92
+
93
+
94
+ # [0.2.0](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.1.13...queue-manager-react@0.2.0) (2023-05-30)
95
+
96
+
97
+
98
+ ## [0.1.12](https://github.com/rango-exchange/rango-client/compare/queue-manager-react@0.1.11...queue-manager-react@0.1.12) (2023-05-15)
99
+
100
+
101
+ ### Bug Fixes
102
+
103
+ * fix type inconsistency in queue-manager-react Provider props ([1c2d484](https://github.com/rango-exchange/rango-client/commit/1c2d484dd251628791d39c45be97058f38bc02e7))
104
+
105
+
106
+
@@ -0,0 +1,2 @@
1
+ export { default as Provider, useManager } from './provider';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ var c=Object.defineProperty;var a=(e,t)=>c(e,"name",{value:t,configurable:!0});import{Manager as P}from"@rango-dev/queue-manager-core";import M,{createContext as x,useContext as y,useEffect as p,useLayoutEffect as l,useMemo as S,useRef as T,useState as v}from"react";import{useReducer as g}from"react";var s={loadedFromPersistor:!1};function m(e,t){switch(t.type){case"UPDATE":return{...e,[t.name]:t.value};default:return e}}a(m,"reducer");function d(){let[e,t]=g(m,s);return{state:e,update:(n,r)=>{t({type:"UPDATE",name:n,value:r})}}}a(d,"useManagerState");var i=x({manager:void 0,state:s});function C(e){let[,t]=v({}),{state:n,update:r}=d(),u=T(e.context),o=S(()=>new P({queuesDefs:e.queuesDefs,events:{onStorageUpdate:()=>{t({})},onCreateQueue:()=>{t({})},onCreateTask:()=>{t({})},onUpdateQueue:()=>{t({})},onUpdateTask:()=>{t({})},onPersistedDataLoaded:f=>{t({}),e.onPersistedDataLoaded&&e.onPersistedDataLoaded(f),n.loadedFromPersistor||r("loadedFromPersistor",!0)},onTaskBlock:()=>{t({})},onDeleteQueue:()=>{t({})}},context:u||{},isPaused:e.isPaused}),[]);return l(()=>{u.current=e.context},[e.context]),p(()=>{typeof e.isPaused<"u"&&(e.isPaused?o.pause():o.run(),t({}))},[e.isPaused]),M.createElement(i.Provider,{value:{manager:o,state:n}},e.children)}a(C,"Provider");function D(){let e=y(i);if(!e)throw Error("useManager can only be used within the Provider component");return e}a(D,"useManager");var h=C;export{h as Provider,D as useManager};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/provider.tsx", "../src/state.ts"],
4
+ "sourcesContent": ["import type { ManagerContext, ManagerState } from './types';\nimport type {\n ManagerContext as Context,\n Events,\n QueueDef,\n} from '@rango-dev/queue-manager-core';\nimport type { PropsWithChildren } from 'react';\n\nimport { Manager } from '@rango-dev/queue-manager-core';\nimport React, {\n createContext,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { initState as initManagerState, useManagerState } 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, any, 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 /*\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 */\n if (!state.loadedFromPersistor) {\n update('loadedFromPersistor', true);\n }\n },\n onTaskBlock: () => {\n forceRender({});\n },\n onDeleteQueue: () => {\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 // eslint-disable-next-line react/jsx-no-constructed-context-values\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 }\n return context;\n}\n\nexport default Provider;\n", "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"],
5
+ "mappings": "+EAQA,OAAS,WAAAA,MAAe,gCACxB,OAAOC,GACL,iBAAAC,EACA,cAAAC,EACA,aAAAC,EACA,mBAAAC,EACA,WAAAC,EACA,UAAAC,EACA,YAAAC,MACK,QCjBP,OAAS,cAAAC,MAAkB,QAMpB,IAAMC,EAA0B,CACrC,oBAAqB,EACvB,EAEA,SAASC,EAAQC,EAAqBC,EAA8B,CAClE,OAAQA,EAAO,KAAM,CACnB,IAAK,SACH,MAAO,CAAE,GAAGD,EAAO,CAACC,EAAO,IAAI,EAAGA,EAAO,KAAM,EACjD,QACE,OAAOD,CACX,CACF,CAPSE,EAAAH,EAAA,WASF,SAASI,GAGd,CACA,GAAM,CAACH,EAAOI,CAAQ,EAAIC,EAAWN,EAASD,CAAS,EAEvD,MAAO,CACL,MAAAE,EACA,OAAQ,CAACM,EAAMC,IAAU,CACvBH,EAAS,CACP,KAAM,SACN,KAAAE,EACA,MAAAC,CACF,CAAC,CACH,CACF,CACF,CAhBgBL,EAAAC,EAAA,mBDEhB,IAAMK,EAAaC,EAGhB,CACD,QAAS,OACT,MAAOC,CACT,CAAC,EASD,SAASC,EAASC,EAAqC,CAErD,GAAM,CAAC,CAAEC,CAAW,EAAIC,EAAS,CAAC,CAAC,EAC7B,CAAE,MAAAC,EAAO,OAAAC,CAAO,EAAIC,EAAgB,EACpCC,EAAUC,EAAOP,EAAM,OAAO,EAE9BQ,EAAUC,EAAiB,IACxB,IAAIC,EAAQ,CACjB,WAAYV,EAAM,WAClB,OAAQ,CACN,gBAAiB,IAAM,CACrBC,EAAY,CAAC,CAAC,CAChB,EACA,cAAe,IAAM,CACnBA,EAAY,CAAC,CAAC,CAChB,EACA,aAAc,IAAM,CAClBA,EAAY,CAAC,CAAC,CAChB,EACA,cAAe,IAAM,CACnBA,EAAY,CAAC,CAAC,CAChB,EACA,aAAc,IAAM,CAClBA,EAAY,CAAC,CAAC,CAChB,EACA,sBAAwBO,GAAY,CAClCP,EAAY,CAAC,CAAC,EAEVD,EAAM,uBACRA,EAAM,sBAAsBQ,CAAO,EAOhCL,EAAM,qBACTC,EAAO,sBAAuB,EAAI,CAEtC,EACA,YAAa,IAAM,CACjBH,EAAY,CAAC,CAAC,CAChB,EACA,cAAe,IAAM,CACnBA,EAAY,CAAC,CAAC,CAChB,CACF,EACA,QAASK,GAAW,CAAC,EACrB,SAAUN,EAAM,QAClB,CAAC,EACA,CAAC,CAAC,EAEL,OAAAW,EAAgB,IAAM,CACpBL,EAAQ,QAAUN,EAAM,OAC1B,EAAG,CAACA,EAAM,OAAO,CAAC,EAElBY,EAAU,IAAM,CACV,OAAOZ,EAAM,SAAa,MACxBA,EAAM,SACRQ,EAAQ,MAAM,EAEdA,EAAQ,IAAI,EAEdP,EAAY,CAAC,CAAC,EAElB,EAAG,CAACD,EAAM,QAAQ,CAAC,EAIjBa,EAAA,cAACjB,EAAW,SAAX,CAAoB,MAAO,CAAE,QAAAY,EAAS,MAAAL,CAAM,GAC1CH,EAAM,QACT,CAEJ,CAzESc,EAAAf,EAAA,YA2EF,SAASgB,GAA+D,CAC7E,IAAMT,EAAUU,EAAWpB,CAAU,EACrC,GAAI,CAACU,EACH,MAAM,MAAM,2DAA2D,EAEzE,OAAOA,CACT,CANgBQ,EAAAC,EAAA,cAQhB,IAAOE,EAAQlB",
6
+ "names": ["Manager", "React", "createContext", "useContext", "useEffect", "useLayoutEffect", "useMemo", "useRef", "useState", "useReducer", "initState", "reducer", "state", "action", "__name", "useManagerState", "dispatch", "useReducer", "name", "value", "ManagerCtx", "createContext", "initState", "Provider", "props", "forceRender", "useState", "state", "update", "useManagerState", "context", "useRef", "manager", "useMemo", "Manager", "useLayoutEffect", "useEffect", "React", "__name", "useManager", "useContext", "provider_default"]
7
+ }
@@ -0,0 +1,17 @@
1
+ import type { ManagerContext, ManagerState } from './types';
2
+ import type { ManagerContext as Context, Events, QueueDef } from '@rango-dev/queue-manager-core';
3
+ import type { PropsWithChildren } from 'react';
4
+ import React from 'react';
5
+ interface PropTypes {
6
+ queuesDefs: QueueDef<any, any, any>[];
7
+ context: Context;
8
+ onPersistedDataLoaded?: Events['onPersistedDataLoaded'];
9
+ isPaused?: boolean;
10
+ }
11
+ declare function Provider(props: PropsWithChildren<PropTypes>): React.JSX.Element;
12
+ export declare function useManager(): {
13
+ manager: ManagerContext;
14
+ state: ManagerState;
15
+ };
16
+ export default Provider;
17
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EACV,cAAc,IAAI,OAAO,EACzB,MAAM,EACN,QAAQ,EACT,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAG/C,OAAO,KAQN,MAAM,OAAO,CAAC;AAYf,UAAU,SAAS;IACjB,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACtC,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,qBAyEpD;AAED,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAM7E;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/state.ts":{"bytes":799,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"./types","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/provider.tsx":{"bytes":3058,"imports":[{"path":"@rango-dev/queue-manager-core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"./state"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":62,"imports":[{"path":"src/provider.tsx","kind":"import-statement","original":"./provider"}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":6440},"dist/index.js":{"imports":[{"path":"@rango-dev/queue-manager-core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["Provider","useManager"],"entryPoint":"src/index.ts","inputs":{"src/provider.tsx":{"bytesInOutput":1043},"src/state.ts":{"bytesInOutput":291},"src/index.ts":{"bytesInOutput":0}},"bytes":1486}}}
@@ -0,0 +1,9 @@
1
+ import { ManagerState } from './types';
2
+ 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,KAAK,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"}
@@ -0,0 +1,6 @@
1
+ import type { Manager } from '@rango-dev/queue-manager-core';
2
+ export type ManagerContext = Manager | undefined;
3
+ export type ManagerState = {
4
+ loadedFromPersistor: boolean;
5
+ };
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG;IACzB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@rango-dev/queue-manager-react",
3
+ "version": "0.0.0-experimental-936229e8-20251208",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "source": "./src/index.ts",
7
+ "main": "./dist/index.js",
8
+ "exports": {
9
+ ".": "./dist/index.js"
10
+ },
11
+ "typings": "dist/index.d.ts",
12
+ "files": [
13
+ "dist",
14
+ "src"
15
+ ],
16
+ "scripts": {
17
+ "build": "node ../../scripts/build/command.mjs --path queue-manager/react",
18
+ "ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
19
+ "clean": "rimraf dist",
20
+ "format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
21
+ "lint": "eslint \"**/*.{ts,tsx}\""
22
+ },
23
+ "peerDependencies": {
24
+ "@rango-dev/queue-manager-core": "*",
25
+ "@types/react": "^17.0.0 || ^18.0.0",
26
+ "react": "^17.0.0 || ^18.0.0",
27
+ "react-dom": "^17.0.0 || ^18.0.0"
28
+ },
29
+ "devDependencies": {
30
+ "react": "^18.2.0",
31
+ "react-dom": "^18.2.0"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ }
36
+ }
package/readme.md ADDED
@@ -0,0 +1 @@
1
+ # @rango-dev/queue-manager-react
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { default as Provider, useManager } from './provider';
@@ -0,0 +1,120 @@
1
+ import type { ManagerContext, ManagerState } from './types';
2
+ import type {
3
+ ManagerContext as Context,
4
+ Events,
5
+ QueueDef,
6
+ } from '@rango-dev/queue-manager-core';
7
+ import type { PropsWithChildren } from 'react';
8
+
9
+ import { Manager } from '@rango-dev/queue-manager-core';
10
+ import React, {
11
+ createContext,
12
+ useContext,
13
+ useEffect,
14
+ useLayoutEffect,
15
+ useMemo,
16
+ useRef,
17
+ useState,
18
+ } from 'react';
19
+
20
+ import { initState as initManagerState, useManagerState } from './state';
21
+
22
+ const ManagerCtx = createContext<{
23
+ manager: ManagerContext;
24
+ state: ManagerState;
25
+ }>({
26
+ manager: undefined,
27
+ state: initManagerState,
28
+ });
29
+
30
+ interface PropTypes {
31
+ queuesDefs: QueueDef<any, any, any>[];
32
+ context: Context;
33
+ onPersistedDataLoaded?: Events['onPersistedDataLoaded'];
34
+ isPaused?: boolean;
35
+ }
36
+
37
+ function Provider(props: PropsWithChildren<PropTypes>) {
38
+ // TODO: this is not a proper way but i don't want to change the context interface atm.
39
+ const [, forceRender] = useState({});
40
+ const { state, update } = useManagerState();
41
+ const context = useRef(props.context);
42
+
43
+ const manager = useMemo<Manager>(() => {
44
+ return new Manager({
45
+ queuesDefs: props.queuesDefs,
46
+ events: {
47
+ onStorageUpdate: () => {
48
+ forceRender({});
49
+ },
50
+ onCreateQueue: () => {
51
+ forceRender({});
52
+ },
53
+ onCreateTask: () => {
54
+ forceRender({});
55
+ },
56
+ onUpdateQueue: () => {
57
+ forceRender({});
58
+ },
59
+ onUpdateTask: () => {
60
+ forceRender({});
61
+ },
62
+ onPersistedDataLoaded: (manager) => {
63
+ forceRender({});
64
+
65
+ if (props.onPersistedDataLoaded) {
66
+ props.onPersistedDataLoaded(manager);
67
+ }
68
+
69
+ /*
70
+ * This condition will make sure, we only update the `loadedFromPersistor`.
71
+ * But be aware `onPersistedDataLoaded` is calling after each `sync` which means can be called multiple times.
72
+ */
73
+ if (!state.loadedFromPersistor) {
74
+ update('loadedFromPersistor', true);
75
+ }
76
+ },
77
+ onTaskBlock: () => {
78
+ forceRender({});
79
+ },
80
+ onDeleteQueue: () => {
81
+ forceRender({});
82
+ },
83
+ },
84
+ context: context || {},
85
+ isPaused: props.isPaused,
86
+ });
87
+ }, []);
88
+
89
+ useLayoutEffect(() => {
90
+ context.current = props.context;
91
+ }, [props.context]);
92
+
93
+ useEffect(() => {
94
+ if (typeof props.isPaused !== 'undefined') {
95
+ if (props.isPaused) {
96
+ manager.pause();
97
+ } else {
98
+ manager.run();
99
+ }
100
+ forceRender({});
101
+ }
102
+ }, [props.isPaused]);
103
+
104
+ return (
105
+ // eslint-disable-next-line react/jsx-no-constructed-context-values
106
+ <ManagerCtx.Provider value={{ manager, state }}>
107
+ {props.children}
108
+ </ManagerCtx.Provider>
109
+ );
110
+ }
111
+
112
+ export function useManager(): { manager: ManagerContext; state: ManagerState } {
113
+ const context = useContext(ManagerCtx);
114
+ if (!context) {
115
+ throw Error('useManager can only be used within the Provider component');
116
+ }
117
+ return context;
118
+ }
119
+
120
+ export default Provider;
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 ADDED
@@ -0,0 +1,6 @@
1
+ import type { Manager } from '@rango-dev/queue-manager-core';
2
+
3
+ export type ManagerContext = Manager | undefined;
4
+ export type ManagerState = {
5
+ loadedFromPersistor: boolean;
6
+ };