import { apiFetch, setStateError } from "../utils.js"; import { killQuery, query } from "../lib/state.js"; export const getTopics = async cluster => (await apiFetch(`/topics/${cluster}`) || []).sort() export const mapFromLocalStorage = ({ checked, querySettings, jsonDisplay, clusterNames, topics }) => { if (localStorage.querySettings) { let storedSettings try { storedSettings = JSON.parse(localStorage.querySettings) } catch (e) { storedSettings = {} } querySettings.maxItems = storedSettings?.maxItems ?? querySettings.maxItems querySettings.jsFilter = storedSettings?.jsFilter ?? querySettings.jsFilter querySettings.queryCode = storedSettings?.queryCode ?? querySettings.queryCode querySettings.mode = storedSettings?.mode ?? querySettings.mode if (!checked || clusterNames.includes(storedSettings?.cluster)) { querySettings.cluster = storedSettings.cluster } else { querySettings.cluster = clusterNames[0] } if (!checked || topics.includes(storedSettings?.topic)) { querySettings.topic = storedSettings.topic } else { querySettings.topic = topics[0] } } if (localStorage.jsonDisplay) { try { const savedJsonDisplay = JSON.parse(localStorage.jsonDisplay) Object.entries(savedJsonDisplay).forEach(([key, value]) => { if (savedJsonDisplay[key] !== undefined) { jsonDisplay[key] = value } }) } catch (e) { } } } export const getClusterNames = async () => Object.keys((await apiFetch('/clusters')) || {}) export const startQuery = querySettings => { localStorage.setItem('querySettings', JSON.stringify(querySettings)) query(querySettings).catch(setStateError) return querySettings.mode } export const stopQuery = querySettings => { killQuery(querySettings).catch(setStateError) return false } export const defaultQueryCode = `// \`message\` contains all metadata // \`value\` is shorthand for message.value // it contains the actual produced data // \`json\` is a JSON representation of \`message\` return message.value.eventType === "Television";`