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