64 lines
1.4 KiB
JavaScript
64 lines
1.4 KiB
JavaScript
import { useCallback } from "react";
|
|
import { STOKEY_SYNC, DEFAULT_SYNC } from "../config";
|
|
import { useStorage } from "./Storage";
|
|
|
|
/**
|
|
* sync hook
|
|
* @returns
|
|
*/
|
|
export function useSync() {
|
|
const { data, update, reload } = useStorage(STOKEY_SYNC, DEFAULT_SYNC);
|
|
return { sync: data, updateSync: update, reloadSync: reload };
|
|
}
|
|
|
|
/**
|
|
* update syncmeta hook
|
|
* @returns
|
|
*/
|
|
export function useSyncMeta() {
|
|
const { sync, updateSync } = useSync();
|
|
const updateSyncMeta = useCallback(
|
|
async (key) => {
|
|
const syncMeta = sync?.syncMeta || {};
|
|
syncMeta[key] = { ...(syncMeta[key] || {}), updateAt: Date.now() };
|
|
await updateSync({ syncMeta });
|
|
},
|
|
[sync, updateSync]
|
|
);
|
|
return { updateSyncMeta };
|
|
}
|
|
|
|
/**
|
|
* caches sync hook
|
|
* @param {*} url
|
|
* @returns
|
|
*/
|
|
export function useSyncCaches() {
|
|
const { sync, updateSync, reloadSync } = useSync();
|
|
|
|
const updateDataCache = useCallback(
|
|
async (url) => {
|
|
const dataCaches = sync?.dataCaches || {};
|
|
dataCaches[url] = Date.now();
|
|
await updateSync({ dataCaches });
|
|
},
|
|
[sync, updateSync]
|
|
);
|
|
|
|
const deleteDataCache = useCallback(
|
|
async (url) => {
|
|
const dataCaches = sync?.dataCaches || {};
|
|
delete dataCaches[url];
|
|
await updateSync({ dataCaches });
|
|
},
|
|
[sync, updateSync]
|
|
);
|
|
|
|
return {
|
|
dataCaches: sync?.dataCaches || {},
|
|
updateDataCache,
|
|
deleteDataCache,
|
|
reloadSync,
|
|
};
|
|
}
|