import { baseUrl } from "@/api/baseUrl"; import ActivityIndicator from "@/components/indicators/activity-indicator"; import { cn } from "@/lib/utils"; import { CustomClassificationModelConfig, FrigateConfig, } from "@/types/frigateConfig"; import { useMemo } from "react"; import { isMobile } from "react-device-detect"; import useSWR from "swr"; type ModelSelectionViewProps = { onClick: (model: CustomClassificationModelConfig) => void; }; export default function ModelSelectionView({ onClick, }: ModelSelectionViewProps) { const { data: config } = useSWR("config", { revalidateOnFocus: false, }); const classificationConfigs = useMemo(() => { if (!config) { return []; } return Object.values(config.classification.custom); }, [config]); if (!config) { return ; } if (classificationConfigs.length == 0) { return
You need to setup a custom model configuration.
; } return (
{classificationConfigs.map((config) => ( onClick(config)} /> ))}
); } type ModelCardProps = { config: CustomClassificationModelConfig; onClick: () => void; }; function ModelCard({ config, onClick }: ModelCardProps) { const { data: dataset } = useSWR<{ [id: string]: string[]; }>(`classification/${config.name}/dataset`, { revalidateOnFocus: false }); const coverImages = useMemo(() => { if (!dataset) { return {}; } const imageMap: { [key: string]: string } = {}; for (const [key, imageList] of Object.entries(dataset)) { if (imageList.length > 0) { imageMap[key] = imageList[0]; } } return imageMap; }, [dataset]); return (
onClick()} >
{Object.entries(coverImages).map(([key, image]) => ( ))}
{config.name} ({config.state_config != null ? "State" : "Object"}{" "} Classification)
); }