diff --git a/web/src/aggregator/Aggregator.tsx b/web/src/aggregator/Aggregator.tsx index e99dc8e..ecb0d3f 100644 --- a/web/src/aggregator/Aggregator.tsx +++ b/web/src/aggregator/Aggregator.tsx @@ -2,8 +2,9 @@ import moment from "moment"; import { createSignal } from "solid-js"; import { Result } from "./Result"; -import { SelectAggregator } from "./SelectAggregator"; import { SelectCity } from "./SelectCity"; +import { SelectField } from "./SelectField"; +import { SelectKey } from "./SelectKey"; import { SelectTimeRange } from "./SelectTimeRange"; const nowRounded = new Date(new Date().setMinutes(30)); @@ -33,12 +34,8 @@ export function Aggregator() { />
- + +
diff --git a/web/src/aggregator/CityResult.tsx b/web/src/aggregator/CityResult.tsx new file mode 100644 index 0000000..2c5eecd --- /dev/null +++ b/web/src/aggregator/CityResult.tsx @@ -0,0 +1,26 @@ +import { Component } from "solid-js"; +import { CityChart } from "./CityChart"; + +export const CityResult: Component<{ city: string, value: any }> = ({ city, value }) => { + return ( +
+

{ city }

+ { + isDateNumber(value) + ? + : value + } +
+ ); +} + +function isDateNumber(value: unknown): value is [string, number | null][] { + if (!Array.isArray(value)) return false; + for (let i = 0; i < value.length; i++) { + let item = value[i]; + if (!Array.isArray(item) || item.length !== 2 || typeof item[0] !== 'string' || (typeof item[1] !== 'number' && item[1] !== null)) { + return false; + } + } + return true; +} \ No newline at end of file diff --git a/web/src/aggregator/Result.tsx b/web/src/aggregator/Result.tsx index 5920895..185fbcd 100644 --- a/web/src/aggregator/Result.tsx +++ b/web/src/aggregator/Result.tsx @@ -1,11 +1,10 @@ import moment from "moment"; import { Accessor, Component, createResource, createSignal } from "solid-js"; -import { apiHost, ResultKeyVal, resultOrder, ResultOrderKeys } from "../consts"; -import { CityChart } from "./CityChart"; - 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>, @@ -15,9 +14,6 @@ export const Result: Component<{ getKey: Accessor, }> = (props) => { const cities = () => [...props.getCities()].join(","); - const citiesStr = () => [...props.getCities()].join(", "); - const startStr = () => moment(props.getStart()).format("YYYY/MM/DD, HH:mm"); - const endStr = () => moment(props.getEnd()).format("YYYY/MM/DD, HH:mm"); const queryStart = () => moment(props.getStart()).format("YYYYMMDD_HHmm"); const queryEnd = () => moment(props.getEnd()).format("YYYYMMDD_HHmm"); const [getTimestamp, setTimestamp] = createSignal(0); @@ -35,17 +31,12 @@ export const Result: Component<{ return (
-

Aggregate by:

setTimestamp(Date.now())} /> -

cities: { citiesStr() }

-

time range: { startStr() } - { endStr() }

-

weather field: { props.getField() }

-

aggregation field: { props.getKey() }

Result:

@@ -67,33 +58,9 @@ export const Result: Component<{ { Object.entries(queryResource()) .map(keyVal => [...keyVal] as ResultKeyVal) .sort((a, b) => resultOrder[getOrderKey()](a, b)) - .map(cityData => ) + .map(cityData => ) }
)}
); -} - -const ExportCity: Component<{ city: string, value: any }> = ({ city, value }) => { - return ( -
-

{ city }

- { - isDateNumber(value) - ? - : value - } -
- ); -} - -function isDateNumber(value: unknown): value is [string, number | null][] { - if (!Array.isArray(value)) return false; - for (let i = 0; i < value.length; i++) { - let item = value[i]; - if (!Array.isArray(item) || item.length !== 2 || typeof item[0] !== 'string' || (typeof item[1] !== 'number' && item[1] !== null)) { - return false; - } - } - return true; } \ No newline at end of file diff --git a/web/src/aggregator/SelectField.tsx b/web/src/aggregator/SelectField.tsx new file mode 100644 index 0000000..81e1b98 --- /dev/null +++ b/web/src/aggregator/SelectField.tsx @@ -0,0 +1,22 @@ +import { Accessor, Component, Setter } from "solid-js"; + +import { weatherField } from "../consts"; + +export const SelectField: Component<{ + getField: Accessor, + setField: Setter, +}> = (props) => { + return ( +
+

Select field

+ +
+ ); +} \ No newline at end of file diff --git a/web/src/aggregator/SelectAggregator.tsx b/web/src/aggregator/SelectKey.tsx similarity index 51% rename from web/src/aggregator/SelectAggregator.tsx rename to web/src/aggregator/SelectKey.tsx index 29e2be7..411a07a 100644 --- a/web/src/aggregator/SelectAggregator.tsx +++ b/web/src/aggregator/SelectKey.tsx @@ -1,24 +1,14 @@ import { Accessor, Component, Setter } from "solid-js"; -import { aggregateKey, weatherField } from "../consts"; -export const SelectAggregator: Component<{ - getField: Accessor, - setField: Setter, +import { aggregateKey } from "../consts"; + +export const SelectKey: Component<{ getKey: Accessor, setKey: Setter, }> = (props) => { return (
-

Select field

- -

Select aggregator

+

Select key

    { aggregateKey.map(key =>