diff --git a/src/routes/(app)/[slug]/+page.svelte b/src/routes/(app)/[slug]/+page.svelte index b825992..63b3cbe 100644 --- a/src/routes/(app)/[slug]/+page.svelte +++ b/src/routes/(app)/[slug]/+page.svelte @@ -128,17 +128,16 @@ import * as Chart from "$lib/components/ui/chart/index.js"; 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([]); - let newChartData = $derived( - chartData.filter((item: object) => { - if (item.sensorId === selectedESP) { - return { ...item }; - } - }), - ); - let timeRange = $state("90d"); const selectedLabel = $derived.by(() => { @@ -155,8 +154,8 @@ }); const filteredData = $derived( - newChartData.filter((item) => { - const now = new Date(); + chartData.filter((item) => { + const referenceDate = new Date("2024-06-30"); let daysToSubtract = 90; if (timeRange === "30d") { daysToSubtract = 30; @@ -164,132 +163,75 @@ daysToSubtract = 7; } - const cutoffDate = new Date(now.getTime() - daysToSubtract * 24 * 60 * 60 * 1000); - return item.date >= cutoffDate; + referenceDate.setDate(referenceDate.getDate() - daysToSubtract); + return item.date >= referenceDate; }), ); const chartConfig = { - temperature: { label: "Temperature (°C)", color: "var(--chart-1)" }, - humidity: { label: "Humidity (%)", color: "var(--chart-2)" }, - altitude: { label: "Altitude (m)", color: "var(--chart-3)" }, - pressure: { label: "Pressure (kPa)", color: "var(--chart-4)" }, + temperature: { label: "Temperature", color: "var(--chart-1)" }, + humidity: { label: "Humidity", color: "var(--chart-2)" }, + altitude: { label: "Altitude", color: "var(--chart-1)" }, + pressure: { label: "Pressure", color: "var(--chart-2)" }, } satisfies Chart.ChartConfig; - 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 = [ + const table = $state([ { - key: "temperature", - label: chartConfig.temperature.label, - color: chartConfig.temperature.color, + visible: true, + key: "altitude", + label: chartConfig.altitude.label, + color: chartConfig.altitude.color, }, { + visible: true, key: "humidity", label: chartConfig.humidity.label, color: chartConfig.humidity.color, }, { + visible: true, key: "pressure", label: chartConfig.pressure.label, color: chartConfig.pressure.color, }, { - key: "altitude", - label: chartConfig.altitude.label, - color: chartConfig.altitude.color, + visible: true, + key: "temperature", + label: chartConfig.temperature.label, + color: chartConfig.temperature.color, }, - ]; + ]); - const selectedSensorConfig = $derived( - sensorOptions.find((s) => s.key === selectedSensor) || sensorOptions[0], + const tables = $derived( + table + .filter((item) => { + if (item.visible) return true; + return false; + }) + .map((item) => { + return { key: item.key, label: item.label, color: item.color }; + }), ); - let esps = $state([]); - let selectedESP = $state("Select ESP sensor"); - - let isLoading = $state(false); - let hasError = $state(false); - let onOpenChange = $state(async (open: boolean) => { - console.log("onOpenChange called with:", open); if (open) { - console.log("Starting to load statistics..."); - isLoading = true; - hasError = false; - try { - console.log(`Fetching stats for floor: ${data.slug}`); - const response = await fetch(`/${data.slug}/stats`); - console.log("Stats response status:", response.status); + const response = await fetch("/" + data.slug + "/stats"); + const number = await response.json(); + console.log(number); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - const rawData = await response.json(); - console.log("Raw stats data:", rawData); - const allesps = rawData.map((i: any) => { - return i.sensorId; - }); - esps = allesps.filter((v: any, i: any, a: any) => a.indexOf(v) === i); - - if (!rawData || rawData.length === 0) { - console.log("No data available for statistics"); - chartData = []; - } else { - chartData = rawData.map((obj: any) => { - return { ...obj, date: new Date(obj.date) }; - }); - console.log("Processed chart data:", chartData); - } - } catch (error) { - console.error("Error loading statistics:", error); - hasError = true; - chartData = []; - } finally { - isLoading = false; - } + chartData = number.map((obj: any) => { + return { ...obj, date: new Date(obj.date) }; + }); } }); - - function exportCSV(): void { - let csv = "data:text/csv;charset=utf-8,"; - - const headers = "time," + selectedSensorConfig.key; - csv += headers + "\n"; - - newChartData.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", selectedESP + "_" + selectedSensorConfig.key + "_data.csv"); - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - }
Loading statistics...
-Error loading statistics
-Please try again later
-No data available
-- Statistics will appear once sensor data is collected -
-No data available
-- No data found for the selected time period -
-