import { useEffect, useMemo, useState } from 'react'; import Button from '../../components/Button'; import Input from '../../components/Input'; import DataTable from '../../components/DataTable'; import Modal from '../../components/Modal'; import Textarea from '../../components/Textarea'; import { groupsApi, usersApi, errMsg } from '../../api'; import { formatDateRange } from '../../utils/export'; import type { UserItem, UserDetail, WorkGroup } from '../../types'; import { IconUsers, IconPlus, IconEdit, IconTrash, IconEye } from '../../components/Icons'; type Form = { class: string; name: string; volunteer_no: string; group_ids: number[]; }; const emptyForm: Form = { class: '', name: '', volunteer_no: '', group_ids: [] }; type BatchParsedRow = { idx: number; class: string; name: string; volunteer_no: string; group_ids: number[]; group_names: string[]; raw: string; errors: string[]; }; function GroupCheckboxes({ groups, selected, onChange, }: { groups: WorkGroup[]; selected: number[]; onChange: (ids: number[]) => void; }) { const toggle = (id: number) => { if (selected.includes(id)) onChange(selected.filter((x) => x !== id)); else onChange([...selected, id]); }; if (groups.length === 0) { return