@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 +106 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/dist/provider.d.ts +17 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/queue-manager-react.build.json +1 -0
- package/dist/state.d.ts +9 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +36 -0
- package/readme.md +1 -0
- package/src/index.ts +1 -0
- package/src/provider.tsx +120 -0
- package/src/state.ts +36 -0
- package/src/types.ts +6 -0
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
|
+
|
package/dist/index.d.ts
ADDED
|
@@ -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}}}
|
package/dist/state.d.ts
ADDED
|
@@ -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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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';
|
package/src/provider.tsx
ADDED
|
@@ -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
|
+
}
|