diff --git a/src/components/main/Root.tsx b/src/components/main/Root.tsx
index 420fb67..8123267 100644
--- a/src/components/main/Root.tsx
+++ b/src/components/main/Root.tsx
@@ -1,6 +1,7 @@
import React, { useState, useEffect } from "react";
import { LineChart, Line, CartesianGrid, XAxis, YAxis } from "recharts";
import { format, addDays } from "date-fns";
+import { Dashboard } from "@/components/main/routes/Dashboard";
const formatDate = function (dateTime) {
return format(dateTime, "yyyy-MM-dd");
@@ -50,35 +51,19 @@ const WeatherChart = function ({ data }) {
);
};
+
const App: React.FC = () => {
- const [data, setData] = useState(null);
-
- const minDate = addDays(new Date(), 14);
- const maxDate = addDays(new Date(), 300);
-
- const [dateTime, setDateTime] = useState(minDate);
-
- useEffect(() => {
- fetchWeekForecastData(dateTime, setData);
- }, [dateTime]);
+ const [options, setOptions] = useState({
+ lineWidth: undefined,
+ defaultDate: undefined,
+ });
return (
diff --git a/src/components/main/routes/Dashboard.tsx b/src/components/main/routes/Dashboard.tsx
new file mode 100644
index 0000000..cc6ca4b
--- /dev/null
+++ b/src/components/main/routes/Dashboard.tsx
@@ -0,0 +1,69 @@
+import React, { useState, useEffect } from "react";
+import { LineChart, Line, CartesianGrid, XAxis, YAxis } from "recharts";
+import { format, addDays } from "date-fns";
+import {
+ formatDate,
+ minDate,
+ ForecastDatePicker,
+} from "@/components/ui/DatePicker";
+
+const fetchWeekForecastData = async function (dateTime, cb) {
+ const formattedDate = formatDate(dateTime);
+
+ const forecastRequests = Array.from({ length: 7 }).map((_, index) => {
+ const date = addDays(dateTime, index);
+ const formattedDate = format(date, "yyyy-MM-d");
+ const url = `http://api.weatherapi.com/v1/future.json?key=bfca7632f8dc4253859120435242301&q=Vienna&dt=${formattedDate}`;
+ const dataPromise = fetch(url).then((x) => x.json());
+
+ return dataPromise;
+ });
+
+ const data = await Promise.all(forecastRequests);
+
+ console.log(data);
+
+ const chartData = data.map((forecastData) => {
+ const dayData = forecastData.forecast.forecastday[0];
+ const date = dayData.date;
+ const { avgtemp_c, mintemp_c, maxtemp_c } = dayData.day;
+
+ return {
+ name: date,
+ avgtemp_c,
+ mintemp_c,
+ maxtemp_c,
+ };
+ });
+
+ cb(chartData);
+};
+
+const WeatherChart = function ({ data }) {
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+export const Dashboard = function ({ startDate = new Date() }) {
+ const [dateTime, setDateTime] = useState(minDate(startDate));
+ const [data, setData] = useState(null);
+
+ useEffect(() => {
+ fetchWeekForecastData(dateTime, setData);
+ }, [dateTime]);
+
+ return (
+
+
+ {data ? : "Loading..."}
+
+ );
+};
diff --git a/src/components/ui/DatePicker.tsx b/src/components/ui/DatePicker.tsx
new file mode 100644
index 0000000..ed72dd0
--- /dev/null
+++ b/src/components/ui/DatePicker.tsx
@@ -0,0 +1,33 @@
+import React, { useState, useEffect } from "react";
+import { format, addDays } from "date-fns";
+
+export const formatDate = function (dateTime) {
+ return format(dateTime, "yyyy-MM-dd");
+};
+
+export const minDate = function (dateTime) {
+ return addDays(dateTime, 14);
+};
+
+export const maxDate = function (dateTime) {
+ return addDays(dateTime, 300);
+};
+
+export const ForecastDatePicker = function ({
+ dateTime = new Date(),
+ onChange,
+}) {
+ console.log(dateTime);
+ return (
+
+ );
+};