Add tooltip to metric icons
This commit is contained in:
parent
c8c18769d4
commit
e829131d62
@ -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>
|
||||||
)
|
)
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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(),
|
||||||
|
|||||||
@ -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))
|
||||||
|
|||||||
@ -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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user