Switch DayView to client component
This commit is contained in:
parent
86c88307df
commit
1e511c9509
@ -1,10 +1,17 @@
|
|||||||
import { notFound } from "next/navigation";
|
import { notFound, redirect } from "next/navigation";
|
||||||
import { api } from "@/server/api/client";
|
import { api } from "@/server/api/client";
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import DayView from "@/components/dashboard/days/DayView";
|
import DayView from "@/components/dashboard/days/DayView";
|
||||||
|
import { getServerAuthSession } from "@/server/auth";
|
||||||
import LoadingSpinner from "@/components/ui/spinner";
|
import LoadingSpinner from "@/components/ui/spinner";
|
||||||
|
|
||||||
export default async function DayPage({ params }: { params: { dateQuery: string }; }) {
|
export default async function DayPage({ params }: { params: { dateQuery: string }; }) {
|
||||||
|
const session = await getServerAuthSession();
|
||||||
|
if (!session) {
|
||||||
|
redirect("/");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
let day;
|
let day;
|
||||||
const { dateQuery } = await params;
|
const { dateQuery } = await params;
|
||||||
const timezone = await api.users.getTimezone();
|
const timezone = await api.users.getTimezone();
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
|
"use client";
|
||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
import { Separator } from "@/components/ui/separator";
|
import { Separator } from "@/components/ui/separator";
|
||||||
import { getServerAuthSession } from "@/server/auth";
|
import { ZDay, ZHour } from "@lifetracker/shared/types/days";
|
||||||
import { ZDay } from "@lifetracker/shared/types/days";
|
|
||||||
import EditableDayComment from "./EditableDayComment";
|
import EditableDayComment from "./EditableDayComment";
|
||||||
import { MoodStars } from "./MoodStars";
|
import { MoodStars } from "./MoodStars";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
@ -10,26 +10,21 @@ import { ArrowLeftSquare, ArrowRightSquare } from "lucide-react";
|
|||||||
import spacetime from "spacetime";
|
import spacetime from "spacetime";
|
||||||
import EditableHour from "@/components/dashboard/hours/EditableHour";
|
import EditableHour from "@/components/dashboard/hours/EditableHour";
|
||||||
import { DayMetrics } from "./DayMetrics";
|
import { DayMetrics } from "./DayMetrics";
|
||||||
import { api } from "@/server/api/client";
|
import { api } from "@/lib/trpc";
|
||||||
|
export default function DayView({
|
||||||
export default async function DayView({
|
|
||||||
day,
|
day,
|
||||||
}: {
|
}: {
|
||||||
day: ZDay;
|
day: ZDay;
|
||||||
}) {
|
}) {
|
||||||
const session = await getServerAuthSession();
|
|
||||||
if (!session) {
|
|
||||||
redirect("/");
|
|
||||||
}
|
|
||||||
|
|
||||||
const prevDay = spacetime(day.date).subtract(1, "day").format("iso-short");
|
const prevDay = spacetime(day.date).subtract(1, "day").format("iso-short");
|
||||||
const nextDay = spacetime(day.date).add(1, "day").format("iso-short");
|
const nextDay = spacetime(day.date).add(1, "day").format("iso-short");
|
||||||
|
|
||||||
const userMetrics = await api.metrics.list();
|
const { data: userMetrics } = api.metrics.list.useQuery();
|
||||||
|
|
||||||
const groupConsecutiveHours = (day: ZDay) => {
|
const groupConsecutiveHours = (day: ZDay) => {
|
||||||
const result = [];
|
const result = [];
|
||||||
let currentGroup = [];
|
let currentGroup: ZHour[] = [];
|
||||||
|
|
||||||
for (const hour of day.hours) {
|
for (const hour of day.hours) {
|
||||||
if (hour.categoryCode === null) {
|
if (hour.categoryCode === null) {
|
||||||
@ -113,8 +108,9 @@ export default async function DayView({
|
|||||||
</div>
|
</div>
|
||||||
<Separator />
|
<Separator />
|
||||||
|
|
||||||
<ul>
|
{day && userMetrics ?
|
||||||
{/* {consecutiveHours.map((group, i) => (
|
<ul>
|
||||||
|
{/* {consecutiveHours.map((group, i) => (
|
||||||
group.map((hour, j) => (
|
group.map((hour, j) => (
|
||||||
j == 0 ? (
|
j == 0 ? (
|
||||||
<li key={hour.time} id={"hour-" + i.toString()}>
|
<li key={hour.time} id={"hour-" + i.toString()}>
|
||||||
@ -125,16 +121,17 @@ export default async function DayView({
|
|||||||
|
|
||||||
))
|
))
|
||||||
))} */}
|
))} */}
|
||||||
{
|
{
|
||||||
day.hours.map((hour, i) => (
|
day.hours.map((hour, i) => (
|
||||||
<li key={hour.time} id={"hour-" + i.toString()}>
|
<li key={hour.time} id={"hour-" + i.toString()}>
|
||||||
<EditableHour hour={hour} i={i} j={0} hourGroup={[]} metrics={userMetrics} />
|
<EditableHour hour={hour} i={i} j={0} hourGroup={[]} metrics={userMetrics} />
|
||||||
</li>)
|
</li>)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
|
: <LoadingSpinner />}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -37,7 +37,7 @@ export default function EditableHour({
|
|||||||
i: number,
|
i: number,
|
||||||
j: number,
|
j: number,
|
||||||
hourGroup: ZHour[],
|
hourGroup: ZHour[],
|
||||||
metrics: ZMetric[],
|
metrics: ZMetric[] | undefined,
|
||||||
isConsecutiveHour?: boolean,
|
isConsecutiveHour?: boolean,
|
||||||
className?: string;
|
className?: string;
|
||||||
}) {
|
}) {
|
||||||
@ -114,6 +114,7 @@ export default function EditableHour({
|
|||||||
function reload(newHour: ZHour) {
|
function reload(newHour: ZHour) {
|
||||||
setHour(newHour);
|
setHour(newHour);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
data-hourid={hour.id}
|
data-hourid={hour.id}
|
||||||
@ -177,6 +178,7 @@ export default function EditableHour({
|
|||||||
(<Icon name={titleCase(m.icon)} size={24}
|
(<Icon name={titleCase(m.icon)} size={24}
|
||||||
color={hour.foreground}
|
color={hour.foreground}
|
||||||
tooltip={`${m.metricName}: ${m.value} ${m.unit}`}
|
tooltip={`${m.metricName}: ${m.value} ${m.unit}`}
|
||||||
|
key={m.id}
|
||||||
/>)
|
/>)
|
||||||
: Array.from({ length: m.value }).map((_, index) =>
|
: Array.from({ length: m.value }).map((_, index) =>
|
||||||
<div key={`${m.id}-${index}`} className="hover:cursor-no-drop" onClick={(e) => {
|
<div key={`${m.id}-${index}`} className="hover:cursor-no-drop" onClick={(e) => {
|
||||||
|
|||||||
@ -252,7 +252,7 @@ export default function HourMeasurementsDialog({
|
|||||||
}
|
}
|
||||||
|
|
||||||
{Object.keys(metricsByType).map(type => (
|
{Object.keys(metricsByType).map(type => (
|
||||||
<>
|
<div key={`metric-${type}`}>
|
||||||
<div className="font-bold border-b border-white">{titleCase(type)}</div>
|
<div className="font-bold border-b border-white">{titleCase(type)}</div>
|
||||||
<div className="grid" style={{ gridTemplateColumns: "repeat(4, 1fr)", rowGap: "1em" }}>
|
<div className="grid" style={{ gridTemplateColumns: "repeat(4, 1fr)", rowGap: "1em" }}>
|
||||||
{metricsByType[type].map(metric => (
|
{metricsByType[type].map(metric => (
|
||||||
@ -266,7 +266,8 @@ export default function HourMeasurementsDialog({
|
|||||||
<span className="text-sm">{metric.name}</span>
|
<span className="text-sm">{metric.name}</span>
|
||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
</div></>
|
</div>
|
||||||
|
</div>
|
||||||
))}
|
))}
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user