/
Alcatraz
/
Wagomon
Обзор
Документация
Войти
/
Alcatraz
/
Wagomon
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/lib/visualization/configStore.js
87 строк
2 KB
saitgalineu
vkr
26 май 2026, 10:08
26 май 2026, 10:08
f9b2919
Код
Авторство
О чём код?
import { writable } from 'svelte/store'; /** * @typedef {Object} VisualizationConfig * @property {Array<any>} sensors */ /** * * @type {import('svelte/store').Writable<VisualizationConfig>} */ export const persistedConfig = writable({ sensors: [] }); /** * * @type {import('svelte/store').Writable<VisualizationConfig | null>} */ export const draftConfig = writable(null); /** * * @type {import('svelte/store').Writable<boolean>} */ export const isInitialLoad = writable(true); /** * * @param {string} dashboardName * @returns {Promise<void>} */ export async function loadVisualizationConfig(dashboardName) { if (!dashboardName) { persistedConfig.set({ sensors: [] }); draftConfig.set(null); return; } isInitialLoad.set(true); try { const res = await fetch(`/api/visualization?dashboard=${encodeURIComponent(dashboardName)}`); const result = await res.json(); if (result.config) { persistedConfig.set(result.config); } else { persistedConfig.set({ sensors: [] }); } } catch (e) { console.error('Ошибка загрузки конфигурации:', e); persistedConfig.set({ sensors: [] }); } finally { draftConfig.set(null); setTimeout(() => { isInitialLoad.set(false); }, 500); } } /** * * @param {string} dashboardName * @param {VisualizationConfig} config * @returns {Promise<void>} */ export async function saveVisualizationConfig(dashboardName, config) { if (!dashboardName || !config) { throw new Error('Не указан дэшборд или конфигурация'); } const res = await fetch('/api/visualization', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ dashboard: dashboardName, config }) }); if (!res.ok) { const err = await res.json(); throw new Error(err.error || 'Ошибка сохранения'); } persistedConfig.set(structuredClone(config)); draftConfig.set(structuredClone(config)); }