diff --git a/messages/en.json b/messages/en.json index 49bd6c3a..81eb68fd 100644 --- a/messages/en.json +++ b/messages/en.json @@ -834,6 +834,10 @@ "display_add_note": "Add Note", "display_add_note_body": "Add a note for the telemetry entry at {createdAt} with temperature {temperature}°C.", "display_add_note_title": "Add Note for {createdAt}", + "display_add_note_today_title": "Add Note for Today's Reading", + "display_today_reading_label": "Select a reading from today", + "display_loading_today_readings": "Loading today's readings…", + "display_no_readings_today": "No readings have arrived today yet.", "display_include_in_report": "Include in report", "display_current_co2": "Current CO2", "display_current_humidity": "Current Humidity", diff --git a/messages/ja.json b/messages/ja.json index cea368a2..e744862b 100644 --- a/messages/ja.json +++ b/messages/ja.json @@ -849,6 +849,10 @@ "display_add_note": "メモを追加", "display_add_note_body": "{createdAt} のテレメトリエントリに、温度 {temperature}°C のメモを追加します。", "display_add_note_title": "{createdAt} のメモを追加", + "display_add_note_today_title": "本日の測定値にメモを追加", + "display_today_reading_label": "本日の測定値を選択", + "display_loading_today_readings": "本日の測定値を読み込み中…", + "display_no_readings_today": "本日の測定値はまだありません。", "display_include_in_report": "レポートに含める", "display_current_co2": "現在の CO2", "display_current_humidity": "現在の湿度", diff --git a/src/lib/components/dashboard/DashboardCards.svelte b/src/lib/components/dashboard/DashboardCards.svelte index ff8b9808..a04c8815 100644 --- a/src/lib/components/dashboard/DashboardCards.svelte +++ b/src/lib/components/dashboard/DashboardCards.svelte @@ -24,6 +24,7 @@ import { m } from '$lib/paraglide/messages.js'; import { goto } from '$app/navigation'; import { onAppForeground } from '$lib/utils/onAppForeground'; + import TodayDataNoteDialog from '$lib/components/displays/AirDisplay/dialogs/TodayDataNoteDialog.svelte'; interface Filters { group: string; @@ -293,6 +294,8 @@ {/if} + + Details + {/if} {/each} @@ -333,7 +337,7 @@ flex: 1 1 auto; min-height: 0; overflow-y: auto; - padding: 0.5rem 1rem 1.5rem; + padding: 0.5rem 0.5rem 1.5rem; } .dashboard-cards__loading, @@ -342,7 +346,7 @@ width: 100%; height: 100%; justify-content: center; - padding: 3rem 1rem; + padding: 3rem 0.5rem; color: var(--cw-text-muted, #94a3b8); } @@ -358,7 +362,7 @@ .dashboard-cards__groups--grid { display: grid; grid-template-columns: 1fr; - gap: 1rem; + gap: 0.5rem; align-items: start; } @@ -367,11 +371,11 @@ .dashboard-cards__groups--masonry { display: block; columns: 1; - column-gap: 1rem; + column-gap: 0.5rem; } .dashboard-cards__groups--masonry :global(.dashboard-cards__location) { break-inside: avoid; - margin-bottom: 1rem; + margin-bottom: 0.5rem; } @media (min-width: 640px) { diff --git a/src/lib/components/displays/AirDisplay/dialogs/TodayDataNoteDialog.svelte b/src/lib/components/displays/AirDisplay/dialogs/TodayDataNoteDialog.svelte new file mode 100644 index 00000000..3c812113 --- /dev/null +++ b/src/lib/components/displays/AirDisplay/dialogs/TodayDataNoteDialog.svelte @@ -0,0 +1,308 @@ + + + + + + + +
+
+

{m.display_today_reading_label()}

+ + {#if loading} +
+ + {m.display_loading_today_readings()} +
+ {:else if loadError} + +

{loadError}

+
+ {:else if todayRows.length === 0} + +

{m.display_no_readings_today()}

+
+ {:else} +
+ {#each todayRows as row (row.created_at as string)} + {@const createdAt = row.created_at as string} + + {/each} +
+ {/if} +
+ + (noteTitle = (e.target as HTMLInputElement).value)} + placeholder={m.display_note_title_placeholder()} + maxlength={NOTE_TITLE_MAX_LENGTH} + > + +
+

{m.display_note_body_label()}

+
+ +

{noteText.length}/{NOTE_BODY_MAX_LENGTH}

+ +
+ + {#snippet actions()} + + + {m.action_cancel()} + + handleSaveNote()} + > + + {m.display_save_note()} + + {/snippet} +
+ + diff --git a/src/lib/components/layout/AppPage.svelte b/src/lib/components/layout/AppPage.svelte index fe573cbc..3b2f8b0b 100644 --- a/src/lib/components/layout/AppPage.svelte +++ b/src/lib/components/layout/AppPage.svelte @@ -34,8 +34,7 @@ flex-direction: column; width: 100%; min-width: 0; - padding-inline: var(--app-shell-padding-inline-start) var(--app-shell-padding-inline-end); - padding-block: var(--cw-space-3) var(--cw-space-4); + } .app-page__shell { diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 8eb85532..88f92411 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -5,9 +5,7 @@ import Icon from '$lib/components/Icon.svelte'; import { AppPage } from '$lib/components/layout'; import { CwButton, CwSearchInput } from '@cropwatchdevelopment/cwui'; - import DashboardCards, { - type CardLayout - } from '$lib/components/dashboard/DashboardCards.svelte'; + import DashboardCards, { type CardLayout } from '$lib/components/dashboard/DashboardCards.svelte'; import DashboardTable from '$lib/components/dashboard/DashboardTable.svelte'; import { getAppContext } from '$lib/appContext.svelte'; import { ApiService } from '$lib/api/api.service'; @@ -111,9 +109,9 @@
-
+