Less redraw of station map, fix end date, some styling

This commit is contained in:
Guntis Smaukstelis
2024-01-21 21:06:32 +02:00
parent 6b0df1b8d5
commit 99fb82c3fb
6 changed files with 35 additions and 17 deletions
+7
View File
@@ -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>
);
}
+7 -7
View File
@@ -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 {
+12
View File
@@ -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 -6
View File
@@ -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;
}); });
+1 -1
View File
@@ -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) =>
+4 -3
View File
@@ -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")}>