You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import { writable } from "svelte/store"; import stuffLogClient from "../clients/stufflog"; import type { LogFilter, LogResult } from "../models/log";
interface ProjectStoreData { loading: boolean stale: boolean logs: LogResult[] filter: LogFilter }
function createLogStore() { const {update, subscribe} = writable<ProjectStoreData>({ loading: false, stale: true, logs: [], filter: {}, });
let lastLoad = 0; let spamPoints = 10;
return { subscribe,
markStale() { update(v => ({...v, stale: true})); },
async load(filter: LogFilter) { update(v => ({...v, loading: true, filter}));
// Prevent too much spammery when tweaking the date.
const timeSince = Date.now() - lastLoad; if (timeSince < 3000) { if (timeSince < 1000) { spamPoints -= 1; }
if (spamPoints <= 0) { await new Promise(resolve => setTimeout(resolve, 3000 - timeSince)); spamPoints = 10; } } else { spamPoints = 10; } lastLoad = Date.now();
const logs = await stuffLogClient.listLogs(filter); update(v => ({...v, loading: false, stale: false, logs: logs.reverse()})); }, } }
const logStore = createLogStore();
export const fpLogStore = createLogStore();
export default logStore;
|