From 9fc7453a44ab15d3c9469b4112c991dd50b98068 Mon Sep 17 00:00:00 2001 From: David Senoner Date: Sat, 14 Jun 2025 10:12:53 +0200 Subject: [PATCH] merge settings and use same style for dropdowns --- src/routes/(app)/[slug]/+page.svelte | 76 +++++++++++++++++----------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/src/routes/(app)/[slug]/+page.svelte b/src/routes/(app)/[slug]/+page.svelte index 6491725..286d852 100644 --- a/src/routes/(app)/[slug]/+page.svelte +++ b/src/routes/(app)/[slug]/+page.svelte @@ -129,11 +129,6 @@ import * as Card from "$lib/components/ui/card/index.js"; import * as Select from "$lib/components/ui/select/index.js"; import * as DropdownMenu from "$lib/components/ui/dropdown-menu/index.js"; - import { scaleUtc } from "d3-scale"; - import { Area, AreaChart, ChartClipPath } from "layerchart"; - import { curveNatural } from "d3-shape"; - import ChartContainer from "$lib/components/ui/chart/chart-container.svelte"; - import { cubicInOut } from "svelte/easing"; import { ChevronDownIcon, Columns2 } from "@lucide/svelte"; let chartData = $state([]); @@ -177,6 +172,20 @@ let selectedSensor = $state("temperature"); + const sensorLabel = $derived.by(() => { + switch (selectedSensor) { + case "altitude": + return "Altitude (m)"; + case "humidity": + return "Humidity (%)"; + case "pressure": + return "Pressure (kPa)"; + case "temperature": + default: + return "Temperature (°C)"; + } + }); + const sensorOptions = [ { key: "temperature", @@ -203,6 +212,7 @@ const selectedSensorConfig = $derived( sensorOptions.find((s) => s.key === selectedSensor) || sensorOptions[0], ); + const device = "macaddress"; let isLoading = $state(false); let hasError = $state(false); @@ -243,14 +253,31 @@ } } }); + + function exportCSV(): void { + let csv = "data:text/csv;charset=utf-8,"; + + const headers = "time," + selectedSensorConfig.key; + csv += headers + "\n"; + + chartData.forEach((obj: any) => { + csv += obj.date.toISOString() + "," + obj[selectedSensorConfig.key] + "\n"; + }); + + const encodedUri = encodeURI(csv); + const link = document.createElement("a"); + link.setAttribute("href", encodedUri); + link.setAttribute("download", device + "_" + selectedSensorConfig.key + "_data.csv"); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }
-

Floor {data.slug}

{#if data.hasConfig && data.floorConfig} -
{#if data.floorConfig.image}
@@ -327,7 +354,6 @@ {/if}
{:else} -
{mqttMessage} @@ -344,27 +370,17 @@
- - - {#snippet child({ props })} - - {/snippet} - - - - {#each sensorOptions as sensor} - - {sensor.label} - - {/each} - - - + + + {sensorLabel} + + + Altitude (m) + Humidity (%) + Pressure (kPa) + Temperature (°C) + + @@ -377,7 +393,7 @@ -