Less redraw of station map, fix end date, some styling
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
import { Component } from "solid-js";
|
||||||
|
|
||||||
|
export const Spacer: Component<{ padding?: string; }> = ({ padding }) => {
|
||||||
|
return (
|
||||||
|
<div style={{ display: "inline-block", padding: padding ?? "5px" }}></div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
.result-container {
|
.result-container {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(3, 1fr);
|
||||||
grid-gap: 10px;
|
grid-gap: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result-item {
|
.result-item {
|
||||||
background-color: #f2f2f2;
|
background-color: #f2f2f2;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.resultTitle {
|
.resultTitle {
|
||||||
|
|||||||
@@ -34,4 +34,16 @@
|
|||||||
.stationWrapper .submenu {
|
.stationWrapper .submenu {
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
background-color: #f2f2f2;
|
background-color: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stationResult {
|
||||||
|
padding-inline-start: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stationResult li {
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stationResult li:nth-child(odd) {
|
||||||
|
background-color: #d6d6d6;
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ import { coordToCity } from "./coordToCity";
|
|||||||
import { cityCoords } from "./cityCoords";
|
import { cityCoords } from "./cityCoords";
|
||||||
import mapUrl from "../assets/map_1000x570.webp";
|
import mapUrl from "../assets/map_1000x570.webp";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { FETCH_DELAY_MS, apiHost } from "../consts";
|
import { FETCH_DELAY_MS, apiHost, cityList } from "../consts";
|
||||||
import { LoadingSpinner } from "../components/LoadingSpinner";
|
import { LoadingSpinner } from "../components/LoadingSpinner";
|
||||||
|
|
||||||
export const MapResult: Component<{
|
export const MapResult: Component<{
|
||||||
@@ -41,15 +41,13 @@ export const MapResult: Component<{
|
|||||||
img.src = mapUrl;
|
img.src = mapUrl;
|
||||||
});
|
});
|
||||||
|
|
||||||
const citiesFieldDate = (): [Set<string>, string, Date, Date] => [
|
const fieldDate = (): [string, Date, Date] => [
|
||||||
props.getCities(),
|
|
||||||
props.getField(),
|
props.getField(),
|
||||||
props.getStart(),
|
props.getStart(),
|
||||||
props.getEnd(),
|
props.getEnd(),
|
||||||
];
|
];
|
||||||
|
|
||||||
const [meteoValues] = createResource(citiesFieldDate, async ([cities, field, start, end]: [Set<string>, string, Date, Date]) => {
|
const [meteoValues] = createResource(fieldDate, async ([field, start, end]: [string, Date, Date]) => {
|
||||||
if (cities.size === 0) return;
|
|
||||||
await new Promise(resolve => setTimeout(resolve, FETCH_DELAY_MS));
|
await new Promise(resolve => setTimeout(resolve, FETCH_DELAY_MS));
|
||||||
|
|
||||||
const queryStart = moment(start).format("YYYYMMDD_HHmm");
|
const queryStart = moment(start).format("YYYYMMDD_HHmm");
|
||||||
@@ -58,7 +56,7 @@ export const MapResult: Component<{
|
|||||||
if (["tempMax", "windMax"].includes(field)) aggregate = "max";
|
if (["tempMax", "windMax"].includes(field)) aggregate = "max";
|
||||||
if (["tempMin", "visibilityMin"].includes(field)) aggregate = "min";
|
if (["tempMin", "visibilityMin"].includes(field)) aggregate = "min";
|
||||||
if (["precipitation", "sunDuration"].includes(field)) aggregate = "sum";
|
if (["precipitation", "sunDuration"].includes(field)) aggregate = "sum";
|
||||||
const response = await fetch(`${apiHost}/api/query/city/${[...cities].join(",")}/${queryStart}-${queryEnd}/hour/${field}/${aggregate}`);
|
const response = await fetch(`${apiHost}/api/query/city/${[...cityList].join(",")}/${queryStart}-${queryEnd}/hour/${field}/${aggregate}`);
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
return json.result;
|
return json.result;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ export const Result: Component<{
|
|||||||
<div>{ meteoResource().message }</div>
|
<div>{ meteoResource().message }</div>
|
||||||
}
|
}
|
||||||
{ meteoResource() && props.getCity() && !meteoResource.loading &&
|
{ meteoResource() && props.getCity() && !meteoResource.loading &&
|
||||||
<ul>
|
<ul class="stationResult">
|
||||||
{ Object.entries(meteoResource())
|
{ Object.entries(meteoResource())
|
||||||
.sort((a, b) => a[0] > b[0] ? 1 : -1)
|
.sort((a, b) => a[0] > b[0] ? 1 : -1)
|
||||||
.map(([key, value]: any) =>
|
.map(([key, value]: any) =>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { SelectField } from "../components/SelectField";
|
|||||||
import { Result } from "./Result";
|
import { Result } from "./Result";
|
||||||
import { MapResult } from "./MapResult";
|
import { MapResult } from "./MapResult";
|
||||||
import "../css/station.css"
|
import "../css/station.css"
|
||||||
|
import { Spacer } from "../components/Spacer";
|
||||||
|
|
||||||
export const Station: Component<{}> = () => {
|
export const Station: Component<{}> = () => {
|
||||||
const [getShowCities, setShowCities] = createSignal(false);
|
const [getShowCities, setShowCities] = createSignal(false);
|
||||||
@@ -15,14 +16,12 @@ export const Station: Component<{}> = () => {
|
|||||||
const [getStart, setStart] = createSignal(moment().subtract(1, "days").toDate());
|
const [getStart, setStart] = createSignal(moment().subtract(1, "days").toDate());
|
||||||
const [getEnd, setEnd] = createSignal(moment().toDate());
|
const [getEnd, setEnd] = createSignal(moment().toDate());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function handleDateChange(value: string) {
|
function handleDateChange(value: string) {
|
||||||
const today = moment();
|
const today = moment();
|
||||||
const inputDate = moment(value, 'YYYY-MM-DD');
|
const inputDate = moment(value, 'YYYY-MM-DD');
|
||||||
if (today.isSame(inputDate, "date")) {
|
if (today.isSame(inputDate, "date")) {
|
||||||
batch(() => {
|
batch(() => {
|
||||||
setStart(today.subtract(1, "days").toDate());
|
setStart(today.clone().subtract(1, "days").toDate());
|
||||||
setEnd(today.toDate());
|
setEnd(today.toDate());
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -43,11 +42,13 @@ export const Station: Component<{}> = () => {
|
|||||||
value="Select stations"
|
value="Select stations"
|
||||||
onClick={() => setShowCities(!getShowCities())}
|
onClick={() => setShowCities(!getShowCities())}
|
||||||
/>
|
/>
|
||||||
|
<Spacer />
|
||||||
<input
|
<input
|
||||||
type="date"
|
type="date"
|
||||||
value={moment(getEnd()).format("YYYY-MM-DD")}
|
value={moment(getEnd()).format("YYYY-MM-DD")}
|
||||||
onChange={e => handleDateChange(e.target.value)}
|
onChange={e => handleDateChange(e.target.value)}
|
||||||
/>
|
/>
|
||||||
|
<Spacer />
|
||||||
<SelectField getField={getField} setField={setField} />
|
<SelectField getField={getField} setField={setField} />
|
||||||
</div>
|
</div>
|
||||||
<div class={"cities " + (getShowCities() ? "visible" : "hidden")}>
|
<div class={"cities " + (getShowCities() ? "visible" : "hidden")}>
|
||||||
|
|||||||
Reference in New Issue
Block a user