(null);
const [loading, setLoading] = useState(false);
const userIdStr = localStorage.getItem("userId");
const userId = userIdStr ? Number(userIdStr) : null;
// --- Load initial status ---
useEffect(() => {
if (!userId) return;
getUserTitle({ path: { user_id: userId, title_id: titleId } })
.then(res => setCurrentStatus(res.data?.status ?? null))
.catch(() => setCurrentStatus(null)); // 404 = not assigned
// DefaultService.getUserTitle(userId, titleId)
// .then((res) => setCurrentStatus(res.status))
// .catch(() => setCurrentStatus(null)); // 404 = user title does not exist
}, [titleId, userId]);
// --- Handle click ---
const handleStatusClick = async (status: UserTitleStatus) => {
if (!userId || loading) return;
setLoading(true);
try {
// 1) Если кликнули на текущий статус — DELETE
if (currentStatus === status) {
// await DefaultService.deleteUserTitle(userId, titleId);
await deleteUserTitle({path: {
user_id: userId,
title_id: titleId,
},
headers: { "X-XSRF-TOKEN": xsrfToken },
})
setCurrentStatus(null);
return;
}
// 2) Если другой статус — POST или PATCH
if (!currentStatus) {
// ещё нет записи — POST
// const added = await DefaultService.addUserTitle(userId, {
// title_id: titleId,
// status,
// });
const added = await addUserTitle({
body: {
title_id: titleId,
status: status,
},
path: {user_id: userId},
headers: { "X-XSRF-TOKEN": xsrfToken },
});
setCurrentStatus(added.data?.status ?? null);
} else {
// уже есть запись — PATCH
//const updated = await DefaultService.updateUserTitle(userId, titleId, { status });
const updated = await updateUserTitle({
path: { user_id: userId, title_id: titleId },
body: { status },
headers: { "X-XSRF-TOKEN": xsrfToken },
});
setCurrentStatus(updated.data?.status ?? null);
}
} finally {
setLoading(false);
}
};
return (
{STATUS_BUTTONS.map(btn => (
))}
);
}