2023-01-02 16:27:55 +00:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
2023-01-03 10:39:17 +00:00
|
|
|
export const peekCachedSignal = (params: any) => {
|
|
|
|
const cachedSignal = cache.get({ cacheId: 'signals', key: params.id });
|
2023-01-07 14:14:44 +00:00
|
|
|
console.log({ caller: 'peekCachedSignal', params, cachedSignal });
|
2023-01-03 10:39:17 +00:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
2023-02-02 15:10:20 +00:00
|
|
|
export const cachedSignalValue = async (params: any) => {
|
|
|
|
const cachedSignal = cache.get({ cacheId: 'signals', key: params.id });
|
|
|
|
console.log({ caller: 'cachedSignalValue', params, cachedSignal });
|
|
|
|
if (cachedSignal !== null) {
|
|
|
|
const value = cachedSignal();
|
|
|
|
if (value != undefined) {
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const value = await dispatch({ action: params.method, params });
|
|
|
|
return value;
|
|
|
|
};
|
|
|
|
|
2023-01-02 16:27:55 +00:00
|
|
|
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 });
|
|
|
|
};
|