From 60c0c0e54cf5e399ec9c604d39b05fb87f0e0b30 Mon Sep 17 00:00:00 2001 From: Guntis Smaukstelis Date: Fri, 21 Feb 2025 19:48:34 +0200 Subject: [PATCH] Starting on downloading all gribs for reference date --- web/src/harmonie/GribFile.tsx | 1 - web/src/harmonie/Harmonie.tsx | 15 ++++++---- web/src/harmonie/ReferenceTimes.tsx | 41 ++++++++++++++++++++++++++++ web/src/harmonie/harmonie.module.css | 15 ++++++++++ 4 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 web/src/harmonie/ReferenceTimes.tsx diff --git a/web/src/harmonie/GribFile.tsx b/web/src/harmonie/GribFile.tsx index b67941d..6efca86 100644 --- a/web/src/harmonie/GribFile.tsx +++ b/web/src/harmonie/GribFile.tsx @@ -9,7 +9,6 @@ import { fetchHourPrecipitationData, isCalculatedHourPrecipitation } from './dra export const GribFile: Component<{ name: string, - getCanvas: Accessor, setIsLoading: Setter, getFileGribList: Accessor, // specific reference and forecast time (in one file) getAllGribLists: Accessor, diff --git a/web/src/harmonie/Harmonie.tsx b/web/src/harmonie/Harmonie.tsx index d31847a..ebee446 100644 --- a/web/src/harmonie/Harmonie.tsx +++ b/web/src/harmonie/Harmonie.tsx @@ -1,17 +1,18 @@ import { Component, createSignal } from 'solid-js' import { apiHost } from '../consts' -import styles from './harmonie.module.css' import { GribFile } from './GribFile' import { GribMessage } from './interfaces' import { fetchJson } from '../helpers/fetch' import { getFakeWindDirection, isWindSpeed } from './draw/windDirection' import { getFakeHourPrecipitation, isPrecipitation } from './draw/precipitation' import { DrawView } from './DrawView' +import { ReferenceTimes } from './ReferenceTimes' + +import styles from './harmonie.module.css' export const Harmonie: Component<{}> = () => { const [getFileList, setFileList] = createSignal([]) - const [getCanvas, setCanvas] = createSignal() const [getIsLoading, setIsLoading] = createSignal(true) const [getIsCrop, setIsCrop] = createSignal(true) const [getIsContour, setIsContour] = createSignal(true) @@ -32,7 +33,7 @@ export const Harmonie: Component<{}> = () => { }) .finally(() => setIsLoading(false)) - function onGribMessageClick(fileName: string) { + function getAllGribStructure() { if(!getGribList().length) { setIsLoading(true) fetchJson(`${apiHost}/api/show/grib-all-structure`) @@ -75,15 +76,19 @@ export const Harmonie: Component<{}> = () => { Interpolate setIsInterpolated(!getIsInterpolated())} /> +
    {getFileList().map(fileName => getCurrentGribList(fileName)} getAllGribLists={getGribList} - onClick={() => onGribMessageClick(fileName)} + onClick={getAllGribStructure} cachedMessagesSignal={cachedMessagesSignal} cachedBuffersSignal={cachedBuffersSignal} cachedBitmasksSignal={cachedBitmasksSignal} diff --git a/web/src/harmonie/ReferenceTimes.tsx b/web/src/harmonie/ReferenceTimes.tsx new file mode 100644 index 0000000..2be4fad --- /dev/null +++ b/web/src/harmonie/ReferenceTimes.tsx @@ -0,0 +1,41 @@ +import { Accessor, Component, createSignal } from 'solid-js' + +import styles from './harmonie.module.css' +import { GribMessage } from './interfaces' + +export const ReferenceTimes: Component<{ + getFileList: Accessor, + getGribList: Accessor, + onClick: () => void, +}> = ({ + getFileList, + getGribList, + onClick, +}) => { + const [getActiveDate, setActiveDate] = createSignal('') + const dateList = () => { + const datesStr = getFileList().map(f => f.replace('harmonie_', '').split('_')[0]) + return [...new Set(datesStr)] + } + + function onActiveDate(date: string) { + onClick() + const newValue = getActiveDate() === date ? '' : date + setActiveDate(newValue) + } + + return
      + { dateList().map(dateStr => +
    • +
      onActiveDate(dateStr)}> + { dateStr } +
      +
      + { + getGribList().some(g => g.time.referenceTime === dateStr) + && <>TODO: download all forecasts + } +
      +
    • )} +
    +} \ No newline at end of file diff --git a/web/src/harmonie/harmonie.module.css b/web/src/harmonie/harmonie.module.css index 4ff510a..64d4028 100644 --- a/web/src/harmonie/harmonie.module.css +++ b/web/src/harmonie/harmonie.module.css @@ -53,4 +53,19 @@ /* meteoParam */ .meteoParams li:hover { text-decoration: underline; +} + + +.dateList { + padding-left: 0; +} + +.dateList li { + color: #ddd; + background-color: #333; + padding: 5px 0 5px 10px; +} + +.dateList li .controls { + padding: 10px 3px; } \ No newline at end of file