@arcote.tech/arc-react 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +42 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -301,7 +301,10 @@ import {
|
|
|
301
301
|
EventWire,
|
|
302
302
|
LocalEventPublisher,
|
|
303
303
|
MasterDataStorage,
|
|
304
|
-
Model
|
|
304
|
+
Model,
|
|
305
|
+
QueryWire,
|
|
306
|
+
StreamingEventPublisher,
|
|
307
|
+
StreamingQueryCache
|
|
305
308
|
} from "@arcote.tech/arc";
|
|
306
309
|
import { createContext as createContext4, useContext as useContext3, useEffect as useEffect2, useState as useState3 } from "react";
|
|
307
310
|
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
@@ -309,6 +312,7 @@ var modelProviderFactory = (context, options) => {
|
|
|
309
312
|
const ModelContext = createContext4(null);
|
|
310
313
|
const commandWire = options.remoteUrl ? new CommandWire(options.remoteUrl) : undefined;
|
|
311
314
|
const eventWire = options.remoteUrl ? new EventWire(options.remoteUrl) : undefined;
|
|
315
|
+
const queryWire = options.remoteUrl ? new QueryWire(options.remoteUrl) : undefined;
|
|
312
316
|
const authAdapter = new AuthAdapter;
|
|
313
317
|
let initialized = false;
|
|
314
318
|
let cachedModel = null;
|
|
@@ -336,6 +340,8 @@ var modelProviderFactory = (context, options) => {
|
|
|
336
340
|
async function initializeModel() {
|
|
337
341
|
let dataStorage;
|
|
338
342
|
let eventPublisher;
|
|
343
|
+
let streamingCache;
|
|
344
|
+
const views = context.elements.filter((element) => ("getHandlers" in element) && ("databaseStoreSchema" in element) && ("schema" in element));
|
|
339
345
|
if (options.dbAdapterFactory) {
|
|
340
346
|
const databaseAdapter = await options.dbAdapterFactory(context);
|
|
341
347
|
if (cancelled)
|
|
@@ -344,7 +350,6 @@ var modelProviderFactory = (context, options) => {
|
|
|
344
350
|
dataStorage = new MasterDataStorage(databaseAdapter);
|
|
345
351
|
cachedDataStorage = dataStorage;
|
|
346
352
|
eventPublisher = new LocalEventPublisher(dataStorage);
|
|
347
|
-
const views = context.elements.filter((element) => ("getHandlers" in element) && ("databaseStoreSchema" in element) && ("schema" in element));
|
|
348
353
|
eventPublisher.registerViews(views);
|
|
349
354
|
if (eventWire && eventPublisher) {
|
|
350
355
|
const publisher = eventPublisher;
|
|
@@ -413,6 +418,35 @@ Event payload:`, event.payload);
|
|
|
413
418
|
}
|
|
414
419
|
}
|
|
415
420
|
}
|
|
421
|
+
} else if (eventWire && queryWire) {
|
|
422
|
+
streamingCache = new StreamingQueryCache;
|
|
423
|
+
streamingCache.registerViews(views);
|
|
424
|
+
eventPublisher = new StreamingEventPublisher(streamingCache, eventWire);
|
|
425
|
+
eventPublisher.registerViews(views);
|
|
426
|
+
const processedEvents = new Set;
|
|
427
|
+
let eventQueue = Promise.resolve();
|
|
428
|
+
eventWire.onEvent((event) => {
|
|
429
|
+
eventQueue = eventQueue.then(async () => {
|
|
430
|
+
try {
|
|
431
|
+
if (processedEvents.has(event.hostId)) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
processedEvents.add(event.hostId);
|
|
435
|
+
await streamingCache.applyEvent({
|
|
436
|
+
id: event.hostId,
|
|
437
|
+
type: event.type,
|
|
438
|
+
payload: event.payload,
|
|
439
|
+
createdAt: new Date(event.createdAt)
|
|
440
|
+
});
|
|
441
|
+
} catch (error) {
|
|
442
|
+
console.error(`[Arc] Failed to process event ${event.hostId} (${event.type}):`, error);
|
|
443
|
+
processedEvents.delete(event.hostId);
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
});
|
|
447
|
+
if (authAdapter.isAuthenticated()) {
|
|
448
|
+
eventWire.connect();
|
|
449
|
+
}
|
|
416
450
|
}
|
|
417
451
|
if (cancelled)
|
|
418
452
|
return;
|
|
@@ -422,7 +456,9 @@ Event payload:`, event.payload);
|
|
|
422
456
|
commandWire,
|
|
423
457
|
eventPublisher,
|
|
424
458
|
eventWire,
|
|
425
|
-
authAdapter
|
|
459
|
+
authAdapter,
|
|
460
|
+
queryWire,
|
|
461
|
+
streamingCache
|
|
426
462
|
},
|
|
427
463
|
environment: "client"
|
|
428
464
|
});
|
|
@@ -459,6 +495,7 @@ Event payload:`, event.payload);
|
|
|
459
495
|
function setAuthToken(token) {
|
|
460
496
|
authAdapter.setToken(token);
|
|
461
497
|
commandWire?.setAuthToken(token);
|
|
498
|
+
queryWire?.setAuthToken(token);
|
|
462
499
|
if (eventWire) {
|
|
463
500
|
eventWire.setAuthToken(token);
|
|
464
501
|
if (token && eventWire.getState() === "disconnected") {
|
|
@@ -476,6 +513,7 @@ Event payload:`, event.payload);
|
|
|
476
513
|
initialized = false;
|
|
477
514
|
authAdapter.setToken(null);
|
|
478
515
|
commandWire?.setAuthToken(null);
|
|
516
|
+
queryWire?.setAuthToken(null);
|
|
479
517
|
eventWire?.setAuthToken(null);
|
|
480
518
|
if (onResetCallback) {
|
|
481
519
|
onResetCallback();
|
|
@@ -557,4 +595,4 @@ export {
|
|
|
557
595
|
Form
|
|
558
596
|
};
|
|
559
597
|
|
|
560
|
-
//# debugId=
|
|
598
|
+
//# debugId=8D2F0AEF850AD66D64756E2164756E21
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcote.tech/arc-react",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.1",
|
|
5
5
|
"private": false,
|
|
6
6
|
"author": "Przemysław Krasiński [arcote.tech]",
|
|
7
7
|
"description": "React client for the Arc framework, providing utilities for querying data and executing commands, enhancing the development of reactive and efficient user interfaces.",
|