import type { ChangeEvent } from "react"; import { Anchor, Card, Checkbox, Group, Stack, Text } from "@mantine/core"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; export type BoardSelectionMap = Map; interface BoardSelectionCardProps { selections: BoardSelectionMap; updateSelections: (callback: (selections: BoardSelectionMap) => BoardSelectionMap) => void; } const allChecked = (map: BoardSelectionMap) => { return [...map.values()].every((selection) => selection); }; export const BoardSelectionCard = ({ selections, updateSelections }: BoardSelectionCardProps) => { const tBoardSelection = useScopedI18n("init.step.import.boardSelection"); const t = useI18n(); const areAllChecked = allChecked(selections); const handleToggleAll = () => { updateSelections((selections) => { return new Map([...selections.keys()].map((name) => [name, !areAllChecked] as const)); }); }; const registerToggle = (name: string) => (event: ChangeEvent) => { updateSelections((selections) => { const updated = new Map(selections); updated.set(name, event.target.checked); return updated; }); }; if (selections.size === 0) { return null; } return ( {tBoardSelection("title", { count: String(selections.size) })} {areAllChecked ? tBoardSelection("action.unselectAll") : tBoardSelection("action.selectAll")} {tBoardSelection("description")} {t("board.action.oldImport.form.screenSize.description")} {[...selections.entries()].map(([name, selected]) => ( {name} } /> ))} ); };