course,tasklist,task and completed validation

Signed-off-by: rgrgogu <obsequio.rus@gmail.com>
This commit is contained in:
rgrgogu
2026-07-17 13:04:40 +08:00
parent 5b9f174718
commit 2e9ab5786c
22 changed files with 1345 additions and 117 deletions
@@ -15,7 +15,7 @@ import { ArrowLeft } from 'lucide-react';
export default function EditTaskList() {
const navigate = useNavigate();
const { taskListId } = useParams();
const { fetchTaskList, updateTaskList, assignGroups, unassignGroups, loading } = useAdminTask();
const { fetchTaskList, updateTaskList, syncGroups, loading } = useAdminTask();
const [form, setForm] = useState(null);
const [errors, setErrors] = useState({});
@@ -77,14 +77,14 @@ export default function EditTaskList() {
if (!updated) return;
// ── 2. Diff groups ────────────────────────────────────────────────────
const toAssign = selectedGroupIds.filter((id) => !originalGroupIds.includes(id));
const toUnassign = originalGroupIds.filter((id) => !selectedGroupIds.includes(id));
// ── 2. Sync groups (single call — avoids burning two sensitive-op hits) ──
const groupsChanged =
selectedGroupIds.length !== originalGroupIds.length ||
selectedGroupIds.some((id) => !originalGroupIds.includes(id));
await Promise.all([
toAssign.length ? assignGroups(taskListId, toAssign) : Promise.resolve(),
toUnassign.length ? unassignGroups(taskListId, toUnassign) : Promise.resolve(),
]);
if (groupsChanged) {
await syncGroups(taskListId, selectedGroupIds);
}
navigate(`/admin/taskList`);
};