Skip to content
Snippets Groups Projects
Commit cde633c4 authored by Loïc Correnson's avatar Loïc Correnson Committed by David Bühler
Browse files

[ivette] avoid synchronizing arrays for undefined project

parent 759fdd31
No related branches found
No related tags found
No related merge requests found
...@@ -335,7 +335,9 @@ class SyncState<A> { ...@@ -335,7 +335,9 @@ class SyncState<A> {
const syncStates = new Map<string, SyncState<unknown>>(); const syncStates = new Map<string, SyncState<unknown>>();
function getSyncState<A>(h: Handler<A>): SyncState<A> { // Remark: use current project state
function currentSyncState<A>(h: Handler<A>): SyncState<A> {
const id = `${currentProject}@${h.name}`; const id = `${currentProject}@${h.name}`;
let s = syncStates.get(id) as SyncState<A> | undefined; let s = syncStates.get(id) as SyncState<A> | undefined;
if (!s) { if (!s) {
...@@ -355,7 +357,7 @@ Server.onShutdown(() => syncStates.clear()); ...@@ -355,7 +357,7 @@ Server.onShutdown(() => syncStates.clear());
export function useSyncState<A>( export function useSyncState<A>(
st: State<A>, st: State<A>,
): [A | undefined, (value: A) => void] { ): [A | undefined, (value: A) => void] {
const s = getSyncState(st); const s = currentSyncState(st);
Dome.useUpdate(PROJECT, s.UPDATE); Dome.useUpdate(PROJECT, s.UPDATE);
Server.useSignal(s.handler.signal, s.update); Server.useSignal(s.handler.signal, s.update);
return [s.getValue(), s.setValue]; return [s.getValue(), s.setValue];
...@@ -363,7 +365,7 @@ export function useSyncState<A>( ...@@ -363,7 +365,7 @@ export function useSyncState<A>(
/** Synchronization with a (projectified) server value. */ /** Synchronization with a (projectified) server value. */
export function useSyncValue<A>(va: Value<A>): A | undefined { export function useSyncValue<A>(va: Value<A>): A | undefined {
const s = getSyncState(va); const s = currentSyncState(va);
Dome.useUpdate(PROJECT, s.UPDATE); Dome.useUpdate(PROJECT, s.UPDATE);
Server.useSignal(s.handler.signal, s.update); Server.useSignal(s.handler.signal, s.update);
return s.getValue(); return s.getValue();
...@@ -373,7 +375,6 @@ export function useSyncValue<A>(va: Value<A>): A | undefined { ...@@ -373,7 +375,6 @@ export function useSyncValue<A>(va: Value<A>): A | undefined {
// --- Synchronized Arrays // --- Synchronized Arrays
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// one per project
class SyncArray<K, A> { class SyncArray<K, A> {
handler: Array<K, A>; handler: Array<K, A>;
upToDate: boolean; upToDate: boolean;
...@@ -392,11 +393,19 @@ class SyncArray<K, A> { ...@@ -392,11 +393,19 @@ class SyncArray<K, A> {
} }
update(): void { update(): void {
if (!this.upToDate && Server.isRunning()) this.fetch(); if (
!this.upToDate &&
currentProject !== undefined &&
Server.isRunning()
) this.fetch();
} }
async fetch(): Promise<void> { async fetch(): Promise<void> {
if (this.fetching || !Server.isRunning()) return; if (
this.fetching ||
currentProject === undefined ||
!Server.isRunning()
) return;
try { try {
this.fetching = true; this.fetching = true;
let pending; let pending;
...@@ -448,7 +457,9 @@ class SyncArray<K, A> { ...@@ -448,7 +457,9 @@ class SyncArray<K, A> {
const syncArrays = new Map<string, SyncArray<unknown, unknown>>(); const syncArrays = new Map<string, SyncArray<unknown, unknown>>();
function lookupSyncArray<K, A>( // Remark: lookup for current project
function currentSyncArray<K, A>(
array: Array<K, A>, array: Array<K, A>,
): SyncArray<K, A> { ): SyncArray<K, A> {
const id = `${currentProject}@${array.name}`; const id = `${currentProject}@${array.name}`;
...@@ -468,7 +479,7 @@ Server.onShutdown(() => syncArrays.clear()); ...@@ -468,7 +479,7 @@ Server.onShutdown(() => syncArrays.clear());
/** Force a Synchronized Array to reload. */ /** Force a Synchronized Array to reload. */
export function reloadArray<K, A>(arr: Array<K, A>): void { export function reloadArray<K, A>(arr: Array<K, A>): void {
lookupSyncArray(arr).reload(); currentSyncArray(arr).reload();
} }
/** /**
...@@ -485,8 +496,7 @@ export function useSyncArray<K, A>( ...@@ -485,8 +496,7 @@ export function useSyncArray<K, A>(
sync = true, sync = true,
): CompactModel<K, A> { ): CompactModel<K, A> {
Dome.useUpdate(PROJECT); Dome.useUpdate(PROJECT);
const st = lookupSyncArray(arr); const st = currentSyncArray(arr);
React.useEffect(() => st.update(), [st]);
Server.useSignal(arr.signal, st.fetch); Server.useSignal(arr.signal, st.fetch);
st.update(); st.update();
useModel(st.model, sync); useModel(st.model, sync);
...@@ -499,7 +509,7 @@ export function useSyncArray<K, A>( ...@@ -499,7 +509,7 @@ export function useSyncArray<K, A>(
export function getSyncArray<K, A>( export function getSyncArray<K, A>(
arr: Array<K, A>, arr: Array<K, A>,
): CompactModel<K, A> { ): CompactModel<K, A> {
const st = lookupSyncArray(arr); const st = currentSyncArray(arr);
return st.model; return st.model;
} }
...@@ -513,7 +523,7 @@ export function onSyncArray<K, A>( ...@@ -513,7 +523,7 @@ export function onSyncArray<K, A>(
onReload?: () => void, onReload?: () => void,
onUpdate?: () => void, onUpdate?: () => void,
): Client { ): Client {
const st = lookupSyncArray(arr); const st = currentSyncArray(arr);
return st.model.link(onReload, onUpdate); return st.model.link(onReload, onUpdate);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment