diff --git a/apps/web/components/dashboard/analytics/AnalyticsView.tsx b/apps/web/components/dashboard/analytics/AnalyticsView.tsx
index 8e274ae..b9130c8 100644
--- a/apps/web/components/dashboard/analytics/AnalyticsView.tsx
+++ b/apps/web/components/dashboard/analytics/AnalyticsView.tsx
@@ -8,9 +8,10 @@ import { useSearchParams } from "next/navigation";
import { parseISO, format as fmt } from "date-fns";
import { DatePickerInput } from '@mantine/dates';
import { Calendar1, MenuIcon } from "lucide-react";
-import { Anchor, Button, Menu } from "@mantine/core";
+import { Anchor, Button, ButtonGroup, Menu } from "@mantine/core";
import { useTooltip, useTooltipInPortal, defaultStyles } from '@visx/tooltip';
-import PieChart from "./PieChart";
+// import PieChart from "./PieChart";
+import { Cell, LabelList, Pie, PieChart, Tooltip } from "recharts";
import { useTimezone } from "@/lib/userLocalSettings/client";
import TimeseriesChart from "./Timeseries";
@@ -56,6 +57,7 @@ export default function AnalyticsView() {
const [dateRange, setDateRange] = useState(initialDateRange);
const [datePickerRange, setDatePickerRange] = useState(initialDateRange);
+ const [hideSleep, setHideSleep] = useState(true);
useEffect(() => {
if (datePickerRef.current?.getAttribute("aria-expanded") === "false") {
@@ -71,19 +73,34 @@ export default function AnalyticsView() {
scroll: true,
});
- const categoryFrequencies = api.hours.categoryFrequencies.useQuery({
+ const rawCategoryFrequencies = api.hours.categoryFrequencies.useQuery({
dateRange,
timezone: useTimezone(),
- }).data ?? [];
+ }).data?.filter(
+ (category) => category.categoryCode != undefined
+ ) ?? [];
+
+ const categoryFrequencies = hideSleep ? rawCategoryFrequencies.filter((category) => category.categoryCode > 1) : rawCategoryFrequencies;
+
+ const maybeExtendWindow = (dateRange: Date[]) => {
+ // If distance between dates is less than 2 days, extend the first date back by 14 days
+ if (spacetime(dateRange[0]).diff(dateRange[1], "day") < 2) {
+ return [
+ spacetime(dateRange[0]).subtract(14, "day").toNativeDate(),
+ dateRange[1]
+ ];
+ }
+ return [dateRange[0], dateRange[1]];
+ }
const weightData = api.measurements.getTimeseries.useQuery({
- dateRange,
+ dateRange: maybeExtendWindow(dateRange) as [Date, Date],
timezone: useTimezone(),
metricName: "weight"
}).data ?? [];
return (
-
+
Analytics for
{dateRange[0].getUTCDate() == dateRange[1].getUTCDate()
@@ -147,52 +164,82 @@ export default function AnalyticsView() {
-
-
-
-
-
- Total
-
-
- {categoryFrequencies.reduce((acc, category) => acc + category.count, 0)} hours
-
- {
- categoryFrequencies
- .sort((a, b) => b.count - a.count)
- .map((category, i) => (
+
+
Time
+ {categoryFrequencies.length === 0 ?
:
+
-
+
console.log(c)}>
+ {categoryFrequencies.sort(
+ (a, b) => b.count - a.count
+ ).map((c, _i) => (
+ |
+ ))}
+
+
+
+
+
+
+
+
+
+ Total
+
+
+ {categoryFrequencies.reduce((acc, category) => acc + category.count, 0)} hours
+
+ {
+ categoryFrequencies
+ .sort((a, b) => b.count - a.count)
+ .map((category, i) => (
+
+
+
+ {category.categoryName ?? "[Unallocated]"}
+
+
+ {category.count} hours
+
+ ))
+ }
+
+
+
+ Sleep
+
+
- ))
- }
-
+ Hide
+
+
+
+
+
+ }
-
-
Weight
-
- {
- !weightData ? :
-
- }
-
-
-
+
Drugs
{
@@ -206,7 +253,19 @@ export default function AnalyticsView() {
}
+
+
+
Weight
+ {
+ weightData.length === 0 ?
:
+
+
+
+ }
+
+
+
);
}
\ No newline at end of file
diff --git a/apps/web/components/dashboard/analytics/Timeseries.tsx b/apps/web/components/dashboard/analytics/Timeseries.tsx
index ecd9bea..f7e15f3 100644
--- a/apps/web/components/dashboard/analytics/Timeseries.tsx
+++ b/apps/web/components/dashboard/analytics/Timeseries.tsx
@@ -29,7 +29,6 @@ export default function TimeseriesChart({ data }) {
smoothed: polyResult.predict(i)[1],
};
}));
- console.log(polyResult);
return (
diff --git a/packages/trpc/routers/hours.ts b/packages/trpc/routers/hours.ts
index bb9e868..57d6dc9 100644
--- a/packages/trpc/routers/hours.ts
+++ b/packages/trpc/routers/hours.ts
@@ -229,6 +229,8 @@ export const hoursAppRouter = router({
{
count: z.number(),
percentage: z.number(),
+ color: z.string(),
+ inverse: z.string(),
...zHourSchema.shape
}
)))
@@ -257,6 +259,8 @@ export const hoursAppRouter = router({
if (!categoriesList[h.categoryCode]) {
categoriesList[h.categoryCode] = {
count: 0,
+ color: h.background,
+ inverse: h.foreground,
...h
};
}
@@ -269,7 +273,7 @@ export const hoursAppRouter = router({
const percentage = (count / totalHours);
return {
...categoriesList[categoryCode],
- percentage: percentage
+ percentage: percentage,
};
});
return categoryPercentages;