frigate/web/src/utils/iconUtil.tsx

142 lines
4.1 KiB
TypeScript
Raw Normal View History

import { IconName } from "@/components/icons/IconPicker";
import { BsPersonWalking } from "react-icons/bs";
import {
FaAmazon,
2024-05-02 15:52:44 +03:00
FaBicycle,
FaBus,
FaCarSide,
FaCat,
FaCheckCircle,
2024-10-12 16:37:22 +03:00
FaDhl,
FaDog,
FaFedex,
FaFire,
FaFootballBall,
2024-10-12 16:37:22 +03:00
FaHockeyPuck,
FaHorse,
FaMotorcycle,
FaMouse,
2024-10-12 16:37:22 +03:00
FaRegTrashAlt,
FaUmbrella,
FaUps,
FaUsps,
} from "react-icons/fa";
2024-10-12 16:37:22 +03:00
import {
GiDeer,
GiFox,
GiGoat,
GiHummingbird,
GiPolarBear,
GiPostStamp,
GiRabbit,
GiRaccoonHead,
GiSailboat,
} from "react-icons/gi";
import { LuBox, LuLassoSelect } from "react-icons/lu";
import * as LuIcons from "react-icons/lu";
import { MdRecordVoiceOver } from "react-icons/md";
export function isValidIconName(value: string): value is IconName {
return Object.keys(LuIcons).includes(value as IconName);
}
export function getIconForLabel(label: string, className?: string) {
if (label.endsWith("-verified")) {
return getVerifiedIcon(label, className);
}
switch (label) {
// objects
case "bear":
return <GiPolarBear key={label} className={className} />;
2024-05-02 15:52:44 +03:00
case "bicycle":
return <FaBicycle key={label} className={className} />;
case "bird":
return <GiHummingbird key={label} className={className} />;
case "boat":
return <GiSailboat key={label} className={className} />;
2024-05-02 15:52:44 +03:00
case "bus":
return <FaBus key={label} className={className} />;
case "car":
2024-05-02 15:52:44 +03:00
case "vehicle":
return <FaCarSide key={label} className={className} />;
case "cat":
return <FaCat key={label} className={className} />;
case "deer":
return <GiDeer key={label} className={className} />;
2024-05-02 15:52:44 +03:00
case "animal":
case "bark":
case "dog":
return <FaDog key={label} className={className} />;
2024-10-12 16:37:22 +03:00
case "fox":
return <GiFox key={label} className={className} />;
case "goat":
return <GiGoat key={label} className={className} />;
case "horse":
return <FaHorse key={label} className={className} />;
case "motorcycle":
return <FaMotorcycle key={label} className={className} />;
case "mouse":
return <FaMouse key={label} className={className} />;
case "package":
return <LuBox key={label} className={className} />;
case "person":
return <BsPersonWalking key={label} className={className} />;
2024-10-12 16:37:22 +03:00
case "rabbit":
return <GiRabbit key={label} className={className} />;
case "raccoon":
return <GiRaccoonHead key={label} className={className} />;
case "robot_lawnmower":
return <FaHockeyPuck key={label} className={className} />;
case "sports_ball":
return <FaFootballBall key={label} className={className} />;
2024-10-12 16:37:22 +03:00
case "squirrel":
return <LuIcons.LuSquirrel key={label} className={className} />;
case "umbrella":
return <FaUmbrella key={label} className={className} />;
case "waste_bin":
return <FaRegTrashAlt key={label} className={className} />;
// audio
case "crying":
case "laughter":
case "scream":
case "speech":
case "yell":
return <MdRecordVoiceOver key={label} className={className} />;
2024-10-12 16:37:22 +03:00
case "fire_alarm":
return <FaFire key={label} className={className} />;
// sub labels
case "amazon":
return <FaAmazon key={label} className={className} />;
2024-10-12 16:37:22 +03:00
case "an_post":
case "dpd":
case "gls":
case "nzpost":
case "postnl":
case "postnord":
case "purolator":
return <GiPostStamp key={label} className={className} />;
case "dhl":
return <FaDhl key={label} className={className} />;
case "fedex":
return <FaFedex key={label} className={className} />;
case "ups":
return <FaUps key={label} className={className} />;
case "usps":
return <FaUsps key={label} className={className} />;
default:
return <LuLassoSelect key={label} className={className} />;
}
}
function getVerifiedIcon(label: string, className?: string) {
const simpleLabel = label.substring(0, label.lastIndexOf("-"));
return (
2024-04-01 17:20:27 +03:00
<div key={label} className="flex items-center">
{getIconForLabel(simpleLabel, className)}
<FaCheckCircle className="absolute size-2 translate-x-[80%] translate-y-3/4" />
</div>
);
}