Add tooltip to metric icons

This commit is contained in:
Ryan Pandya 2024-12-08 01:00:29 -08:00
parent c8c18769d4
commit e829131d62
6 changed files with 28 additions and 9 deletions

View File

@ -185,7 +185,10 @@ export default function EditableHour({
<div key={`${m.id}-${index}`} className="hover:cursor-no-drop" onClick={(e) => { <div key={`${m.id}-${index}`} className="hover:cursor-no-drop" onClick={(e) => {
decrementCount({ metricId: m.metricId, hourId: hour.id }); decrementCount({ metricId: m.metricId, hourId: hour.id });
}}> }}>
<Icon name={titleCase(m.icon)} size={24} color={hour.foreground} /> <Icon name={titleCase(m.icon)} size={24}
color={hour.foreground}
tooltip={m.metricName}
/>
</div> </div>
) )
)} )}

View File

@ -1,7 +1,7 @@
"use client"; "use client";
import { set } from "date-fns"; import { set } from "date-fns";
import { MessageCircle } from "lucide-react"; import { BookOpen, Info, MessageCircle, NotebookPen, Quote } from "lucide-react";
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
function selectHourCode(time: number) { function selectHourCode(time: number) {
@ -56,7 +56,7 @@ export function EditableHourComment({
return ( return (
<div className="flex"> <div className="flex">
{hour.comment ? {hour.comment ?
<MessageCircle className="mr-4" /> <NotebookPen className="mr-4" />
: ""} : ""}
<input <input
className="w-full text-left edit-hour-comment hover:border-b hover:border-dashed" className="w-full text-left edit-hour-comment hover:border-b hover:border-dashed"

View File

@ -2,13 +2,26 @@
"use client"; "use client";
import { icons } from 'lucide-react'; import { icons } from 'lucide-react';
import { Tooltip, TooltipContent, TooltipPortal, TooltipTrigger } from "./tooltip";
export const Icon = ({ name = "FileQuestion", color = "white", size = 16, ...props }) => { export const Icon = ({ name = "FileQuestion", color = "white", size = 16, tooltip = null, ...props }) => {
const icon = Object.keys(icons).find((i) => i.toLowerCase() == (name.toLowerCase())); const icon = Object.keys(icons).find((i) => i.toLowerCase() == (name.toLowerCase()));
if (!icon) { if (icon) {
return null; const LucideIcon = icons[icon as keyof typeof icons]; // Add an index signature to allow indexing with a string
} const ret = <LucideIcon color={color} size={size} {...props} />;
const LucideIcon = icons[name as keyof typeof icons]; // Add an index signature to allow indexing with a string
return <LucideIcon color={color} size={size} {...props} />; if (tooltip) {
return (<Tooltip delayDuration={200}>
<TooltipTrigger asChild>
{ret}
</TooltipTrigger>
<TooltipPortal>
<TooltipContent>{tooltip}</TooltipContent>
</TooltipPortal>
</Tooltip>);
}
else {
return ret;
}
}
}; };

View File

@ -3,6 +3,7 @@ import { z } from "zod";
export const zMeasurementSchema = z.object({ export const zMeasurementSchema = z.object({
id: z.string().optional(), id: z.string().optional(),
metricId: z.string(), metricId: z.string(),
metricName: z.string().optional(),
hourId: z.string().optional(), hourId: z.string().optional(),
dayId: z.string().optional(), dayId: z.string().optional(),
value: z.coerce.number(), value: z.coerce.number(),

View File

@ -65,6 +65,7 @@ export async function hourJoinsQuery(
metricId: measurements.metricId, metricId: measurements.metricId,
value: measurements.value, value: measurements.value,
icon: metrics.icon, icon: metrics.icon,
metricName: metrics.name,
}) })
.from(measurements) .from(measurements)
.leftJoin(metrics, eq(metrics.id, measurements.metricId)) .leftJoin(metrics, eq(metrics.id, measurements.metricId))

View File

@ -60,6 +60,7 @@ export const measurementsAppRouter = router({
return { return {
...newMeasurement[0], ...newMeasurement[0],
icon: metric[0].icon, icon: metric[0].icon,
metricName: metric[0].name,
}; };
} }
}), }),