dyomedea/src/workers/cached-signals.ts

61 lines
1.7 KiB
TypeScript

import { createSignal } from 'solid-js';
import cache from '../lib/cache';
import dispatch, { cancelDispatch } from './dispatcher-main';
export const createCachedSignal = (params: any) => {
const [signal, setSignal] = createSignal();
const callBack = (error: any, result: any, id?: number) => {
if (error) {
console.error({ caller: 'createCachedSignal / callBack', error });
} else {
console.log({ caller: 'createCachedSignal / callBack', result });
setSignal(result);
}
if (id) {
cache.set({ cacheId: 'dispatchIds', key: params.id, value: id });
}
};
dispatch(
{
action: 'getAndWatch',
params,
},
callBack,
true
);
cache.set({ cacheId: 'signals', key: params.id, value: signal });
return signal;
};
export const peekCachedSignal = (params: any) => {
const cachedSignal = cache.get({ cacheId: 'signals', key: params.id });
console.log({ caller: 'peekCachedSignal', params, cachedSignal });
if (cachedSignal !== null) {
return cachedSignal;
}
const [signal, setSignal] = createSignal();
const callBack = (error: any, result: any, id?: number) => {
if (error) {
console.error({ caller: 'peekCachedSignal / callBack', error });
} else {
console.log({ caller: 'peekCachedSignal / callBack', result });
setSignal(result);
}
};
dispatch(params, callBack, false);
return signal;
};
export const destroyCachedSignal = (params: any) => {
dispatch({
action: 'cancelWatch',
params,
});
const dispatchId = cache.get({ cacheId: 'dispatchIds', key: params.id });
cancelDispatch(dispatchId);
cache.delete({ cacheId: 'signals', key: params.id });
};