react-sync-ui 1.0.3 → 2.0.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.
@@ -1,127 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
-
7
- var React = require('react');
8
- var React__default = _interopDefault(React);
9
-
10
- var useComponentDidMount = function useComponentDidMount(fn) {
11
- React.useEffect(fn, []);
12
- };
13
-
14
- var usePromiseQueue = function usePromiseQueue() {
15
- var _asyncQueue$;
16
-
17
- var _useState = React.useState([]),
18
- asyncQueue = _useState[0],
19
- setAsyncQueue = _useState[1];
20
-
21
- var push = React.useCallback(function (data) {
22
- return new Promise(function (resolve, reject) {
23
- return setAsyncQueue(function (p) {
24
- return [].concat(p, [{
25
- data: data,
26
- resolve: resolve,
27
- reject: reject
28
- }]);
29
- });
30
- });
31
- }, []);
32
- var resolveHeadItem = React.useCallback(function (value) {
33
- setAsyncQueue(function (queue) {
34
- var first = queue[0],
35
- rest = queue.slice(1);
36
- first == null ? void 0 : first.resolve(value);
37
- return rest;
38
- });
39
- }, []);
40
- var rejectHeadItem = React.useCallback(function (reason) {
41
- setAsyncQueue(function (queue) {
42
- var first = queue[0],
43
- rest = queue.slice(1);
44
- first == null ? void 0 : first.reject(reason);
45
- return rest;
46
- });
47
- }, []);
48
- return {
49
- head: asyncQueue[0] ? {
50
- data: (_asyncQueue$ = asyncQueue[0]) == null ? void 0 : _asyncQueue$.data,
51
- resolve: resolveHeadItem,
52
- reject: rejectHeadItem
53
- } : undefined,
54
- push: push
55
- };
56
- }; // ------------------------------------------------------------------------------------
57
-
58
- var syncUIFactory = function syncUIFactory() {
59
- var mutSyncUIComponentsRenderQueue = [];
60
- /*
61
- // this check broke the working of the hot reloading
62
- const ThrowIfMoreInstances = getSingletonComponentCheck(
63
- "<SyncUI /> has to be initialized only once"
64
- );
65
- */
66
-
67
- return {
68
- makeSyncUI: function makeSyncUI(SyncUIUserComp) {
69
- var _ref, _SyncUIUserComp$displ;
70
-
71
- var _debugName = (_ref = (_SyncUIUserComp$displ = SyncUIUserComp.displayName) != null ? _SyncUIUserComp$displ : SyncUIUserComp.name) != null ? _ref : "uniqSymbolMessageType";
72
-
73
- var syncUIComponentType = Symbol(_debugName); // object pointer reference with the push key has to be there to change returned mutable reference object while the function is already called
74
-
75
- var singletonSyncUIRef = {
76
- push: undefined
77
- };
78
-
79
- var SyncUISingletonComponent = function SyncUISingletonComponent(props) {
80
- useComponentDidMount(function () {
81
- singletonSyncUIRef.push = props.push;
82
- return function () {
83
- return singletonSyncUIRef.push = undefined;
84
- };
85
- });
86
- if (!props.head) return null;
87
- if (props.head.data.type !== syncUIComponentType) return null;
88
- return React__default.createElement(SyncUIUserComp, {
89
- key: props.head.data.reactCompKey,
90
- data: props.head.data.inputData,
91
- resolve: props.head.resolve,
92
- reject: props.head.reject
93
- });
94
- };
95
-
96
- mutSyncUIComponentsRenderQueue.push(SyncUISingletonComponent);
97
- return function (input) {
98
- if (!singletonSyncUIRef.push) throw new Error("You have to initialize <SyncUI />");
99
- var reactCompKey = Math.random().toString();
100
- return singletonSyncUIRef.push({
101
- type: syncUIComponentType,
102
- inputData: input,
103
- reactCompKey: reactCompKey
104
- });
105
- };
106
- },
107
- SyncUI: function SyncUI() {
108
- var queue = usePromiseQueue();
109
- return React__default.createElement(React__default.Fragment, null, mutSyncUIComponentsRenderQueue.map(function (SyncComp, key) {
110
- return React__default.createElement(React__default.Fragment, {
111
- key: key
112
- }, React__default.createElement(SyncComp, Object.assign({}, queue)));
113
- }));
114
- }
115
- };
116
- };
117
-
118
- var syncUIFactory$1 = syncUIFactory;
119
-
120
- var _syncUIFactory2 = /*#__PURE__*/syncUIFactory$1(),
121
- makeSyncUI = _syncUIFactory2.makeSyncUI,
122
- SyncUI = _syncUIFactory2.SyncUI;
123
-
124
- exports.SyncUI = SyncUI;
125
- exports.makeSyncUI = makeSyncUI;
126
- exports.syncUIFactory = syncUIFactory$1;
127
- //# sourceMappingURL=react-sync-ui.cjs.development.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-sync-ui.cjs.development.js","sources":["../src/syncUI.tsx","../src/index.ts"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\n\nconst useComponentDidMount = (fn: Parameters<typeof useEffect>[0]) => {\n useEffect(fn, []);\n};\n\n// this function broke the working of the hot reloading\n/*\nconst getSingletonComponentCheck = (errorMsg: string) => {\n let globalMountCounter = 0;\n\n return () => {\n useComponentDidMount(() => {\n if (globalMountCounter > 0) throw new Error(errorMsg);\n globalMountCounter++;\n });\n return <React.Fragment />;\n };\n};\n*/\n\n// ------------------------------------------------------------------------------------\n// TODO: there is tsdx old typescript parser and new ts fancy syntax is not working...\n// https://github.com/jaredpalmer/tsdx/issues/200\n// type PromiseQueueAPI<Data, ResolveValue> = ReturnType<typeof usePromiseQueue<any, any>>\ntype PromiseQueueAPI<Data, ResolveValue> = {\n head?: {\n data: Data;\n resolve: (value: ResolveValue) => void;\n reject: (reason?: any) => void;\n };\n push: (data: Data) => Promise<ResolveValue>;\n};\n\nexport const usePromiseQueue = <Data, ResolveValue = void>(): PromiseQueueAPI<\n Data,\n ResolveValue\n> => {\n const [asyncQueue, setAsyncQueue] = useState(\n [] as {\n data: Data;\n resolve: (arg: ResolveValue) => void;\n reject: (arg: any) => void;\n }[]\n );\n\n const push = useCallback((data: Data) => {\n return new Promise<ResolveValue>((resolve, reject) =>\n setAsyncQueue(p => [...p, { data, resolve, reject }])\n );\n }, []);\n\n const resolveHeadItem = useCallback((value: ResolveValue) => {\n setAsyncQueue(queue => {\n const [first, ...rest] = queue;\n first?.resolve(value);\n return rest;\n });\n }, []);\n\n const rejectHeadItem = useCallback((reason?: any) => {\n setAsyncQueue(queue => {\n const [first, ...rest] = queue;\n first?.reject(reason);\n return rest;\n });\n }, []);\n\n return {\n head: asyncQueue[0]\n ? {\n data: asyncQueue[0]?.data,\n resolve: resolveHeadItem,\n reject: rejectHeadItem\n }\n : undefined,\n push\n };\n};\n\n// ------------------------------------------------------------------------------------\n\nexport const syncUIFactory = () => {\n const mutSyncUIComponentsRenderQueue = [] as React.FC<\n PromiseQueueAPI<any, any>\n >[];\n\n /*\n // this check broke the working of the hot reloading\n const ThrowIfMoreInstances = getSingletonComponentCheck(\n \"<SyncUI /> has to be initialized only once\"\n );\n */\n\n return {\n makeSyncUI: <InputData, ResolveValue = void>(\n SyncUIUserComp: React.FC<{\n data: InputData;\n resolve: (value: ResolveValue) => void;\n reject: (reason?: any) => void;\n }>\n ) => {\n type QItem = PromiseQueueAPI<\n { type: Symbol; inputData: InputData; reactCompKey: string },\n ResolveValue\n >;\n\n const _debugName =\n SyncUIUserComp.displayName ??\n SyncUIUserComp.name ??\n \"uniqSymbolMessageType\";\n\n const syncUIComponentType = Symbol(_debugName);\n\n // object pointer reference with the push key has to be there to change returned mutable reference object while the function is already called\n const singletonSyncUIRef = {\n push: undefined as undefined | QItem[\"push\"]\n };\n\n const SyncUISingletonComponent = (props: QItem) => {\n useComponentDidMount(() => {\n singletonSyncUIRef.push = props.push;\n return () => (singletonSyncUIRef.push = undefined);\n });\n\n if (!props.head) return null;\n if (props.head.data.type !== syncUIComponentType) return null;\n\n return (\n <SyncUIUserComp\n key={props.head.data.reactCompKey}\n data={props.head.data.inputData}\n resolve={props.head.resolve}\n reject={props.head.reject}\n />\n );\n };\n\n mutSyncUIComponentsRenderQueue.push(SyncUISingletonComponent);\n\n return (input: InputData) => {\n if (!singletonSyncUIRef.push)\n throw new Error(`You have to initialize <SyncUI />`);\n\n const reactCompKey = Math.random().toString();\n return singletonSyncUIRef.push({\n type: syncUIComponentType,\n inputData: input,\n reactCompKey\n });\n };\n },\n SyncUI: () => {\n const queue = usePromiseQueue();\n return (\n <>\n {/* <ThrowIfMoreInstances /> */}\n {mutSyncUIComponentsRenderQueue.map((SyncComp, key) => (\n <React.Fragment key={key}>\n <SyncComp {...queue} />\n </React.Fragment>\n ))}\n </>\n );\n }\n };\n};\n","import { syncUIFactory as _syncUIFactory } from \"./syncUI\";\nexport const syncUIFactory = _syncUIFactory;\nexport const { makeSyncUI, SyncUI } = syncUIFactory();\n"],"names":["useComponentDidMount","fn","useEffect","usePromiseQueue","useState","asyncQueue","setAsyncQueue","push","useCallback","data","Promise","resolve","reject","p","resolveHeadItem","value","queue","first","rest","rejectHeadItem","reason","head","undefined","syncUIFactory","mutSyncUIComponentsRenderQueue","makeSyncUI","SyncUIUserComp","_debugName","displayName","name","syncUIComponentType","Symbol","singletonSyncUIRef","SyncUISingletonComponent","props","type","React","key","reactCompKey","inputData","input","Error","Math","random","toString","SyncUI","map","SyncComp","Fragment","_syncUIFactory"],"mappings":"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"}
@@ -1,2 +0,0 @@
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=function(){var e=[];return{makeSyncUI:function(r){var a,u,c=null!=(a=null!=(u=r.displayName)?u:r.name)?a:"uniqSymbolMessageType",o=Symbol(c),l={push:void 0};return e.push((function(e){return t.useEffect((function(){return l.push=e.push,function(){return l.push=void 0}}),[]),e.head?e.head.data.type!==o?null:n.createElement(r,{key:e.head.data.reactCompKey,data:e.head.data.inputData,resolve:e.head.resolve,reject:e.head.reject}):null})),function(e){if(!l.push)throw new Error("You have to initialize <SyncUI />");var t=Math.random().toString();return l.push({type:o,inputData:e,reactCompKey:t})}},SyncUI:function(){var r,a,u,c,o,l,i,s=(u=(a=t.useState([]))[0],c=a[1],o=t.useCallback((function(e){return new Promise((function(t,n){return c((function(r){return[].concat(r,[{data:e,resolve:t,reject:n}])}))}))}),[]),l=t.useCallback((function(e){c((function(t){var n=t[0],r=t.slice(1);return null==n||n.resolve(e),r}))}),[]),i=t.useCallback((function(e){c((function(t){var n=t[0],r=t.slice(1);return null==n||n.reject(e),r}))}),[]),{head:u[0]?{data:null==(r=u[0])?void 0:r.data,resolve:l,reject:i}:void 0,push:o});return n.createElement(n.Fragment,null,e.map((function(e,t){return n.createElement(n.Fragment,{key:t},n.createElement(e,Object.assign({},s)))})))}}},a=r(),u=a.makeSyncUI;exports.SyncUI=a.SyncUI,exports.makeSyncUI=u,exports.syncUIFactory=r;
2
- //# sourceMappingURL=react-sync-ui.cjs.production.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-sync-ui.cjs.production.min.js","sources":["../src/index.ts","../src/syncUI.tsx"],"sourcesContent":["import { syncUIFactory as _syncUIFactory } from \"./syncUI\";\nexport const syncUIFactory = _syncUIFactory;\nexport const { makeSyncUI, SyncUI } = syncUIFactory();\n","import React, { useCallback, useEffect, useState } from \"react\";\n\nconst useComponentDidMount = (fn: Parameters<typeof useEffect>[0]) => {\n useEffect(fn, []);\n};\n\n// this function broke the working of the hot reloading\n/*\nconst getSingletonComponentCheck = (errorMsg: string) => {\n let globalMountCounter = 0;\n\n return () => {\n useComponentDidMount(() => {\n if (globalMountCounter > 0) throw new Error(errorMsg);\n globalMountCounter++;\n });\n return <React.Fragment />;\n };\n};\n*/\n\n// ------------------------------------------------------------------------------------\n// TODO: there is tsdx old typescript parser and new ts fancy syntax is not working...\n// https://github.com/jaredpalmer/tsdx/issues/200\n// type PromiseQueueAPI<Data, ResolveValue> = ReturnType<typeof usePromiseQueue<any, any>>\ntype PromiseQueueAPI<Data, ResolveValue> = {\n head?: {\n data: Data;\n resolve: (value: ResolveValue) => void;\n reject: (reason?: any) => void;\n };\n push: (data: Data) => Promise<ResolveValue>;\n};\n\nexport const usePromiseQueue = <Data, ResolveValue = void>(): PromiseQueueAPI<\n Data,\n ResolveValue\n> => {\n const [asyncQueue, setAsyncQueue] = useState(\n [] as {\n data: Data;\n resolve: (arg: ResolveValue) => void;\n reject: (arg: any) => void;\n }[]\n );\n\n const push = useCallback((data: Data) => {\n return new Promise<ResolveValue>((resolve, reject) =>\n setAsyncQueue(p => [...p, { data, resolve, reject }])\n );\n }, []);\n\n const resolveHeadItem = useCallback((value: ResolveValue) => {\n setAsyncQueue(queue => {\n const [first, ...rest] = queue;\n first?.resolve(value);\n return rest;\n });\n }, []);\n\n const rejectHeadItem = useCallback((reason?: any) => {\n setAsyncQueue(queue => {\n const [first, ...rest] = queue;\n first?.reject(reason);\n return rest;\n });\n }, []);\n\n return {\n head: asyncQueue[0]\n ? {\n data: asyncQueue[0]?.data,\n resolve: resolveHeadItem,\n reject: rejectHeadItem\n }\n : undefined,\n push\n };\n};\n\n// ------------------------------------------------------------------------------------\n\nexport const syncUIFactory = () => {\n const mutSyncUIComponentsRenderQueue = [] as React.FC<\n PromiseQueueAPI<any, any>\n >[];\n\n /*\n // this check broke the working of the hot reloading\n const ThrowIfMoreInstances = getSingletonComponentCheck(\n \"<SyncUI /> has to be initialized only once\"\n );\n */\n\n return {\n makeSyncUI: <InputData, ResolveValue = void>(\n SyncUIUserComp: React.FC<{\n data: InputData;\n resolve: (value: ResolveValue) => void;\n reject: (reason?: any) => void;\n }>\n ) => {\n type QItem = PromiseQueueAPI<\n { type: Symbol; inputData: InputData; reactCompKey: string },\n ResolveValue\n >;\n\n const _debugName =\n SyncUIUserComp.displayName ??\n SyncUIUserComp.name ??\n \"uniqSymbolMessageType\";\n\n const syncUIComponentType = Symbol(_debugName);\n\n // object pointer reference with the push key has to be there to change returned mutable reference object while the function is already called\n const singletonSyncUIRef = {\n push: undefined as undefined | QItem[\"push\"]\n };\n\n const SyncUISingletonComponent = (props: QItem) => {\n useComponentDidMount(() => {\n singletonSyncUIRef.push = props.push;\n return () => (singletonSyncUIRef.push = undefined);\n });\n\n if (!props.head) return null;\n if (props.head.data.type !== syncUIComponentType) return null;\n\n return (\n <SyncUIUserComp\n key={props.head.data.reactCompKey}\n data={props.head.data.inputData}\n resolve={props.head.resolve}\n reject={props.head.reject}\n />\n );\n };\n\n mutSyncUIComponentsRenderQueue.push(SyncUISingletonComponent);\n\n return (input: InputData) => {\n if (!singletonSyncUIRef.push)\n throw new Error(`You have to initialize <SyncUI />`);\n\n const reactCompKey = Math.random().toString();\n return singletonSyncUIRef.push({\n type: syncUIComponentType,\n inputData: input,\n reactCompKey\n });\n };\n },\n SyncUI: () => {\n const queue = usePromiseQueue();\n return (\n <>\n {/* <ThrowIfMoreInstances /> */}\n {mutSyncUIComponentsRenderQueue.map((SyncComp, key) => (\n <React.Fragment key={key}>\n <SyncComp {...queue} />\n </React.Fragment>\n ))}\n </>\n );\n }\n };\n};\n"],"names":["syncUIFactory","mutSyncUIComponentsRenderQueue","makeSyncUI","SyncUIUserComp","_debugName","displayName","name","syncUIComponentType","Symbol","singletonSyncUIRef","push","undefined","props","useEffect","head","data","type","React","key","reactCompKey","inputData","resolve","reject","input","Error","Math","random","toString","SyncUI","asyncQueue","setAsyncQueue","resolveHeadItem","rejectHeadItem","queue","useState","useCallback","Promise","p","value","first","rest","reason","_asyncQueue$","map","SyncComp","Fragment"],"mappings":"oJACaA,ECiFgB,eACrBC,EAAiC,SAWhC,CACLC,WAAY,SACVC,WAWMC,oBACJD,EAAeE,eACfF,EAAeG,QACf,wBAEIC,EAAsBC,OAAOJ,GAG7BK,EAAqB,CACzBC,UAAMC,UAsBRV,EAA+BS,MAnBE,SAACE,UApHtCC,aAqH2B,kBACnBJ,EAAmBC,KAAOE,EAAMF,KACzB,kBAAOD,EAAmBC,UAAOC,KAvHlC,IA0HHC,EAAME,KACPF,EAAME,KAAKC,KAAKC,OAAST,EAA4B,KAGvDU,gBAACd,GACCe,IAAKN,EAAME,KAAKC,KAAKI,aACrBJ,KAAMH,EAAME,KAAKC,KAAKK,UACtBC,QAAST,EAAME,KAAKO,QACpBC,OAAQV,EAAME,KAAKQ,SARC,QAenB,SAACC,OACDd,EAAmBC,KACtB,MAAM,IAAIc,+CAENL,EAAeM,KAAKC,SAASC,kBAC5BlB,EAAmBC,KAAK,CAC7BM,KAAMT,EACNa,UAAWG,EACXJ,aAAAA,MAINS,OAAQ,mBAlHHC,EAAYC,EAQbpB,EAMAqB,EAQAC,EA6FIC,GAnHHJ,KAA6BK,WAClC,QADiBJ,OAQbpB,EAAOyB,eAAY,SAACpB,UACjB,IAAIqB,SAAsB,SAACf,EAASC,UACzCQ,GAAc,SAAAO,mBAASA,GAAG,CAAEtB,KAAAA,EAAMM,QAAAA,EAASC,OAAAA,aAE5C,IAEGS,EAAkBI,eAAY,SAACG,GACnCR,GAAc,SAAAG,OACLM,EAAkBN,KAARO,EAAQP,wBACzBM,GAAAA,EAAOlB,QAAQiB,GACRE,OAER,IAEGR,EAAiBG,eAAY,SAACM,GAClCX,GAAc,SAAAG,OACLM,EAAkBN,KAARO,EAAQP,wBACzBM,GAAAA,EAAOjB,OAAOmB,GACPD,OAER,IAEI,CACL1B,KAAMe,EAAW,GACb,CACEd,cAAMc,EAAW,WAAXa,EAAe3B,KACrBM,QAASU,EACTT,OAAQU,QAEVrB,EACJD,KAAAA,WA+EIO,gCAEGhB,EAA+B0C,KAAI,SAACC,EAAU1B,UAC7CD,gBAACA,EAAM4B,UAAS3B,IAAKA,GACnBD,gBAAC2B,mBAAaX,cD7JUjC,IAAvBE,IAAAA,4BAAY0B"}
@@ -1,118 +0,0 @@
1
- import React, { useState, useCallback, useEffect } from 'react';
2
-
3
- var useComponentDidMount = function useComponentDidMount(fn) {
4
- useEffect(fn, []);
5
- };
6
-
7
- var usePromiseQueue = function usePromiseQueue() {
8
- var _asyncQueue$;
9
-
10
- var _useState = useState([]),
11
- asyncQueue = _useState[0],
12
- setAsyncQueue = _useState[1];
13
-
14
- var push = useCallback(function (data) {
15
- return new Promise(function (resolve, reject) {
16
- return setAsyncQueue(function (p) {
17
- return [].concat(p, [{
18
- data: data,
19
- resolve: resolve,
20
- reject: reject
21
- }]);
22
- });
23
- });
24
- }, []);
25
- var resolveHeadItem = useCallback(function (value) {
26
- setAsyncQueue(function (queue) {
27
- var first = queue[0],
28
- rest = queue.slice(1);
29
- first == null ? void 0 : first.resolve(value);
30
- return rest;
31
- });
32
- }, []);
33
- var rejectHeadItem = useCallback(function (reason) {
34
- setAsyncQueue(function (queue) {
35
- var first = queue[0],
36
- rest = queue.slice(1);
37
- first == null ? void 0 : first.reject(reason);
38
- return rest;
39
- });
40
- }, []);
41
- return {
42
- head: asyncQueue[0] ? {
43
- data: (_asyncQueue$ = asyncQueue[0]) == null ? void 0 : _asyncQueue$.data,
44
- resolve: resolveHeadItem,
45
- reject: rejectHeadItem
46
- } : undefined,
47
- push: push
48
- };
49
- }; // ------------------------------------------------------------------------------------
50
-
51
- var syncUIFactory = function syncUIFactory() {
52
- var mutSyncUIComponentsRenderQueue = [];
53
- /*
54
- // this check broke the working of the hot reloading
55
- const ThrowIfMoreInstances = getSingletonComponentCheck(
56
- "<SyncUI /> has to be initialized only once"
57
- );
58
- */
59
-
60
- return {
61
- makeSyncUI: function makeSyncUI(SyncUIUserComp) {
62
- var _ref, _SyncUIUserComp$displ;
63
-
64
- var _debugName = (_ref = (_SyncUIUserComp$displ = SyncUIUserComp.displayName) != null ? _SyncUIUserComp$displ : SyncUIUserComp.name) != null ? _ref : "uniqSymbolMessageType";
65
-
66
- var syncUIComponentType = Symbol(_debugName); // object pointer reference with the push key has to be there to change returned mutable reference object while the function is already called
67
-
68
- var singletonSyncUIRef = {
69
- push: undefined
70
- };
71
-
72
- var SyncUISingletonComponent = function SyncUISingletonComponent(props) {
73
- useComponentDidMount(function () {
74
- singletonSyncUIRef.push = props.push;
75
- return function () {
76
- return singletonSyncUIRef.push = undefined;
77
- };
78
- });
79
- if (!props.head) return null;
80
- if (props.head.data.type !== syncUIComponentType) return null;
81
- return React.createElement(SyncUIUserComp, {
82
- key: props.head.data.reactCompKey,
83
- data: props.head.data.inputData,
84
- resolve: props.head.resolve,
85
- reject: props.head.reject
86
- });
87
- };
88
-
89
- mutSyncUIComponentsRenderQueue.push(SyncUISingletonComponent);
90
- return function (input) {
91
- if (!singletonSyncUIRef.push) throw new Error("You have to initialize <SyncUI />");
92
- var reactCompKey = Math.random().toString();
93
- return singletonSyncUIRef.push({
94
- type: syncUIComponentType,
95
- inputData: input,
96
- reactCompKey: reactCompKey
97
- });
98
- };
99
- },
100
- SyncUI: function SyncUI() {
101
- var queue = usePromiseQueue();
102
- return React.createElement(React.Fragment, null, mutSyncUIComponentsRenderQueue.map(function (SyncComp, key) {
103
- return React.createElement(React.Fragment, {
104
- key: key
105
- }, React.createElement(SyncComp, Object.assign({}, queue)));
106
- }));
107
- }
108
- };
109
- };
110
-
111
- var syncUIFactory$1 = syncUIFactory;
112
-
113
- var _syncUIFactory2 = /*#__PURE__*/syncUIFactory$1(),
114
- makeSyncUI = _syncUIFactory2.makeSyncUI,
115
- SyncUI = _syncUIFactory2.SyncUI;
116
-
117
- export { SyncUI, makeSyncUI, syncUIFactory$1 as syncUIFactory };
118
- //# sourceMappingURL=react-sync-ui.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-sync-ui.esm.js","sources":["../src/syncUI.tsx","../src/index.ts"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\n\nconst useComponentDidMount = (fn: Parameters<typeof useEffect>[0]) => {\n useEffect(fn, []);\n};\n\n// this function broke the working of the hot reloading\n/*\nconst getSingletonComponentCheck = (errorMsg: string) => {\n let globalMountCounter = 0;\n\n return () => {\n useComponentDidMount(() => {\n if (globalMountCounter > 0) throw new Error(errorMsg);\n globalMountCounter++;\n });\n return <React.Fragment />;\n };\n};\n*/\n\n// ------------------------------------------------------------------------------------\n// TODO: there is tsdx old typescript parser and new ts fancy syntax is not working...\n// https://github.com/jaredpalmer/tsdx/issues/200\n// type PromiseQueueAPI<Data, ResolveValue> = ReturnType<typeof usePromiseQueue<any, any>>\ntype PromiseQueueAPI<Data, ResolveValue> = {\n head?: {\n data: Data;\n resolve: (value: ResolveValue) => void;\n reject: (reason?: any) => void;\n };\n push: (data: Data) => Promise<ResolveValue>;\n};\n\nexport const usePromiseQueue = <Data, ResolveValue = void>(): PromiseQueueAPI<\n Data,\n ResolveValue\n> => {\n const [asyncQueue, setAsyncQueue] = useState(\n [] as {\n data: Data;\n resolve: (arg: ResolveValue) => void;\n reject: (arg: any) => void;\n }[]\n );\n\n const push = useCallback((data: Data) => {\n return new Promise<ResolveValue>((resolve, reject) =>\n setAsyncQueue(p => [...p, { data, resolve, reject }])\n );\n }, []);\n\n const resolveHeadItem = useCallback((value: ResolveValue) => {\n setAsyncQueue(queue => {\n const [first, ...rest] = queue;\n first?.resolve(value);\n return rest;\n });\n }, []);\n\n const rejectHeadItem = useCallback((reason?: any) => {\n setAsyncQueue(queue => {\n const [first, ...rest] = queue;\n first?.reject(reason);\n return rest;\n });\n }, []);\n\n return {\n head: asyncQueue[0]\n ? {\n data: asyncQueue[0]?.data,\n resolve: resolveHeadItem,\n reject: rejectHeadItem\n }\n : undefined,\n push\n };\n};\n\n// ------------------------------------------------------------------------------------\n\nexport const syncUIFactory = () => {\n const mutSyncUIComponentsRenderQueue = [] as React.FC<\n PromiseQueueAPI<any, any>\n >[];\n\n /*\n // this check broke the working of the hot reloading\n const ThrowIfMoreInstances = getSingletonComponentCheck(\n \"<SyncUI /> has to be initialized only once\"\n );\n */\n\n return {\n makeSyncUI: <InputData, ResolveValue = void>(\n SyncUIUserComp: React.FC<{\n data: InputData;\n resolve: (value: ResolveValue) => void;\n reject: (reason?: any) => void;\n }>\n ) => {\n type QItem = PromiseQueueAPI<\n { type: Symbol; inputData: InputData; reactCompKey: string },\n ResolveValue\n >;\n\n const _debugName =\n SyncUIUserComp.displayName ??\n SyncUIUserComp.name ??\n \"uniqSymbolMessageType\";\n\n const syncUIComponentType = Symbol(_debugName);\n\n // object pointer reference with the push key has to be there to change returned mutable reference object while the function is already called\n const singletonSyncUIRef = {\n push: undefined as undefined | QItem[\"push\"]\n };\n\n const SyncUISingletonComponent = (props: QItem) => {\n useComponentDidMount(() => {\n singletonSyncUIRef.push = props.push;\n return () => (singletonSyncUIRef.push = undefined);\n });\n\n if (!props.head) return null;\n if (props.head.data.type !== syncUIComponentType) return null;\n\n return (\n <SyncUIUserComp\n key={props.head.data.reactCompKey}\n data={props.head.data.inputData}\n resolve={props.head.resolve}\n reject={props.head.reject}\n />\n );\n };\n\n mutSyncUIComponentsRenderQueue.push(SyncUISingletonComponent);\n\n return (input: InputData) => {\n if (!singletonSyncUIRef.push)\n throw new Error(`You have to initialize <SyncUI />`);\n\n const reactCompKey = Math.random().toString();\n return singletonSyncUIRef.push({\n type: syncUIComponentType,\n inputData: input,\n reactCompKey\n });\n };\n },\n SyncUI: () => {\n const queue = usePromiseQueue();\n return (\n <>\n {/* <ThrowIfMoreInstances /> */}\n {mutSyncUIComponentsRenderQueue.map((SyncComp, key) => (\n <React.Fragment key={key}>\n <SyncComp {...queue} />\n </React.Fragment>\n ))}\n </>\n );\n }\n };\n};\n","import { syncUIFactory as _syncUIFactory } from \"./syncUI\";\nexport const syncUIFactory = _syncUIFactory;\nexport const { makeSyncUI, SyncUI } = syncUIFactory();\n"],"names":["useComponentDidMount","fn","useEffect","usePromiseQueue","useState","asyncQueue","setAsyncQueue","push","useCallback","data","Promise","resolve","reject","p","resolveHeadItem","value","queue","first","rest","rejectHeadItem","reason","head","undefined","syncUIFactory","mutSyncUIComponentsRenderQueue","makeSyncUI","SyncUIUserComp","_debugName","displayName","name","syncUIComponentType","Symbol","singletonSyncUIRef","SyncUISingletonComponent","props","type","React","key","reactCompKey","inputData","input","Error","Math","random","toString","SyncUI","map","SyncComp","Fragment","_syncUIFactory"],"mappings":"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"}