Fix some bugs
This commit is contained in:
parent
7e46f2c38d
commit
57d4c18527
@ -1,4 +1,4 @@
|
||||
import MetricsView from "@/components/dashboard/categories/MetricsView";
|
||||
import MetricsView from "@/components/dashboard/metrics/MetricsView";
|
||||
|
||||
export default async function MetricsPage() {
|
||||
return (
|
||||
|
||||
@ -12,6 +12,8 @@ export function DayMetrics({
|
||||
const [day, setDay] = useState(initialDay);
|
||||
|
||||
return (
|
||||
<LoadingSpinner />
|
||||
<span>
|
||||
|
||||
</span>
|
||||
);
|
||||
};
|
||||
|
||||
@ -163,7 +163,7 @@ export default function EditableHour({
|
||||
<div key={`${m.id}-${index}`} className="hover:cursor-no-drop" onClick={(e) => {
|
||||
decrementCount({ metricId: m.metricId, hourId: hour.id });
|
||||
}}>
|
||||
<Icon name={titleCase(m.icon)} size={24} />
|
||||
<Icon name={titleCase(m.icon)} size={24} color={hour.foreground} />
|
||||
</div>
|
||||
)
|
||||
)}
|
||||
|
||||
@ -37,6 +37,7 @@ import { Textarea } from "@/components/ui/textarea";
|
||||
import { zMetricSchema } from "@lifetracker/shared/types/metrics";
|
||||
import { Icon, } from "@/components/ui/icon";
|
||||
import { icons } from "lucide-react";
|
||||
import { titleCase } from "title-case";
|
||||
type CreateMetricSchema = z.infer<typeof zMetricSchema>;
|
||||
|
||||
export default function AddMetricDialog({
|
||||
@ -50,7 +51,10 @@ export default function AddMetricDialog({
|
||||
const [isOpen, onOpenChange] = useState(false);
|
||||
const form = useForm<CreateMetricSchema>({
|
||||
resolver: zodResolver(zMetricSchema),
|
||||
defaultValues: initialMetric
|
||||
defaultValues: {
|
||||
...initialMetric,
|
||||
type: "count"
|
||||
},
|
||||
});
|
||||
const handleSuccess = (message: string) => {
|
||||
toast({
|
||||
@ -113,7 +117,7 @@ export default function AddMetricDialog({
|
||||
<DialogTrigger asChild>{children}</DialogTrigger>
|
||||
<DialogContent>
|
||||
<DialogHeader>
|
||||
<DialogTitle>Track a New Metric</DialogTitle>
|
||||
<DialogTitle>Track a New {titleCase(form.watch("type"))} Metric</DialogTitle>
|
||||
</DialogHeader>
|
||||
<Form {...form}>
|
||||
<form onSubmit={form.handleSubmit((val) => mutate(val))}>
|
||||
|
||||
@ -15,9 +15,11 @@ import { toast } from "@/components/ui/use-toast";
|
||||
import { api } from "@/lib/trpc";
|
||||
import { Pencil, Trash, FilePlus, Palette } from "lucide-react";
|
||||
import { useSession } from "next-auth/react";
|
||||
import AddMetricDialog from "../metrics/AddMetricDialog";
|
||||
import AddMetricDialog from "./AddMetricDialog";
|
||||
import Link from "next/link";
|
||||
import { ZMetric } from "@lifetracker/shared/types/metrics";
|
||||
import { titleCase } from "title-case";
|
||||
import { Icon } from "@/components/ui/icon";
|
||||
|
||||
export default function MetricsView() {
|
||||
const { data: metrics } = api.metrics.list.useQuery();
|
||||
@ -44,7 +46,10 @@ export default function MetricsView() {
|
||||
<TableBody>
|
||||
{metrics.map((m) => (
|
||||
<TableRow key={m.id} style={{ borderBottom: 0 }}>
|
||||
<TableCell className="py-1">{m.name}</TableCell>
|
||||
<TableCell className="py-1 flex items-center gap-4">
|
||||
<Icon name={titleCase(m.icon)} size={32} />
|
||||
<span>{m.name}</span>
|
||||
</TableCell>
|
||||
<TableCell className="py-1">{m.unit}</TableCell>
|
||||
<TableCell className="py-1">{m.type}</TableCell>
|
||||
<TableCell className="py-1">{m.description}</TableCell>
|
||||
@ -97,7 +97,7 @@ CREATE TABLE `metric` (
|
||||
`type` text NOT NULL,
|
||||
`unit` text,
|
||||
`goal` real,
|
||||
`icon` text,
|
||||
`icon` text NOT NULL,
|
||||
`createdAt` integer NOT NULL,
|
||||
FOREIGN KEY (`userId`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
||||
);
|
||||
@ -133,6 +133,5 @@ CREATE UNIQUE INDEX `category_userId_code_unique` ON `category` (`userId`,`code`
|
||||
CREATE UNIQUE INDEX `color_userId_name_unique` ON `color` (`userId`,`name`);--> statement-breakpoint
|
||||
CREATE UNIQUE INDEX `day_date_unique` ON `day` (`date`);--> statement-breakpoint
|
||||
CREATE UNIQUE INDEX `hour_dayId_time_unique` ON `hour` (`dayId`,`time`);--> statement-breakpoint
|
||||
CREATE UNIQUE INDEX `measurement_dayId_metricId_unique` ON `measurement` (`dayId`,`metricId`);--> statement-breakpoint
|
||||
CREATE UNIQUE INDEX `metric_userId_name_unique` ON `metric` (`userId`,`name`);--> statement-breakpoint
|
||||
CREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": "6",
|
||||
"dialect": "sqlite",
|
||||
"id": "31bbb29b-e786-4716-9c91-c9d2217be582",
|
||||
"id": "9a832735-dcfa-42cc-ad15-6be5b898a160",
|
||||
"prevId": "00000000-0000-0000-0000-000000000000",
|
||||
"tables": {
|
||||
"account": {
|
||||
@ -630,16 +630,7 @@
|
||||
"autoincrement": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"measurement_dayId_metricId_unique": {
|
||||
"name": "measurement_dayId_metricId_unique",
|
||||
"columns": [
|
||||
"dayId",
|
||||
"metricId"
|
||||
],
|
||||
"isUnique": true
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"measurement_hourId_hour_id_fk": {
|
||||
"name": "measurement_hourId_hour_id_fk",
|
||||
@ -753,7 +744,7 @@
|
||||
"name": "icon",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"createdAt": {
|
||||
|
||||
@ -5,8 +5,8 @@
|
||||
{
|
||||
"idx": 0,
|
||||
"version": "6",
|
||||
"when": 1733533929464,
|
||||
"tag": "0000_gorgeous_sasquatch",
|
||||
"when": 1733614471710,
|
||||
"tag": "0000_moaning_thor",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
|
||||
@ -158,7 +158,7 @@ export const measurements = sqliteTable("measurement", {
|
||||
value: text("value").notNull(),
|
||||
},
|
||||
(m) => ({
|
||||
uniq: unique().on(m.dayId, m.metricId)
|
||||
// uniq: unique().on(m.dayId, m.metricId)
|
||||
}),
|
||||
);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user