import moment from "moment"; import { Accessor, Component, createResource, createSignal } from "solid-js"; import "../css/Result.css" import { apiHost, ResultKeyVal, resultOrder, ResultOrderKeys } from "../consts"; import { SelectOrder } from "./SelectOrder"; import { CityResult } from "./CityResult"; export const Result: Component<{ getCities: Accessor>, getStart: Accessor, getEnd: Accessor, getField: Accessor, getKey: Accessor, getGranularity: Accessor, }> = (props) => { const cities = () => [...props.getCities()].join(","); const queryStart = () => moment(props.getStart()).format("YYYYMMDD_HHmm"); const queryEnd = () => moment(props.getEnd()).format("YYYYMMDD_HHmm"); const [getTimestamp, setTimestamp] = createSignal(0); const fetchQuery = async (timestamp: number) => { if (cities() === "") return new Error("ERROR: Select cities!"); await new Promise(resolve => setTimeout(resolve, 500)) const response = await fetch(`${apiHost}/api/query/${queryStart()}-${queryEnd()}/${props.getGranularity()}/${cities()}/${props.getField()}/${props.getKey()}`); const json = await response.json(); return json; } const [queryResource] = createResource(getTimestamp, fetchQuery); const [getOrderKey, setOrderKey] = createSignal("A -> Z"); return (
setTimestamp(Date.now())} />

Result:

{ queryResource.loading && (
Loading query
)} { queryResource.error && (
Error while querying: ${queryResource.error}
)} { queryResource() && queryResource() instanceof Error &&
{ queryResource().message }
} { queryResource() && (
{ Object.entries(queryResource()) .map(keyVal => [...keyVal] as ResultKeyVal) .sort((a, b) => resultOrder[getOrderKey()](a, b)) .map(cityData => ) }
)}
); }