This commit is contained in:
2024-12-19 22:24:40 +05:00
parent 43ec0c5dd6
commit 07934c610c
2 changed files with 53 additions and 10 deletions
+28 -1
View File
@@ -6,6 +6,9 @@ import { addMinutes, differenceInMinutes, format, startOfDay } from "date-fns";
import Button from "./Button"; import Button from "./Button";
import IScheduledSession from "../types/IScheduledSession"; import IScheduledSession from "../types/IScheduledSession";
import useStore from "../stores/useStore"; import useStore from "../stores/useStore";
import CloseIcon from "./icons/CloseIcon";
import api from "../utils/api";
import toast from "react-hot-toast";
interface Props { interface Props {
timelineEvents: IScheduledSession[]; timelineEvents: IScheduledSession[];
@@ -91,6 +94,23 @@ function Timeline({
onChangeDraftMode(true); onChangeDraftMode(true);
} }
async function handleClickRemove(eventId: string) {
try {
const result: { status: string; message: string } = await api
.delete(`scheduledSessions/${eventId}`)
.json();
if (result.status === "error") {
toast.error(result.message);
return;
}
toast.success("Сеанс успешно удален!");
} catch (error) {
toast.error("Что-то пошло не так");
}
}
// useEffect(() => { // useEffect(() => {
// setTimelineEvents( // setTimelineEvents(
// timelineEvents.filter((event: IEvent) => event.slot === slot) // timelineEvents.filter((event: IEvent) => event.slot === slot)
@@ -170,7 +190,7 @@ function Timeline({
}px`, }px`,
}} }}
> >
<div className="flex flex-col justify-between h-full"> <div className="relative flex flex-col justify-between h-full">
<div className="space-y-1"> <div className="space-y-1">
<p> <p>
{format(new Date(event.startAt), "HH:mm")} -{" "} {format(new Date(event.startAt), "HH:mm")} -{" "}
@@ -185,6 +205,13 @@ function Timeline({
> >
<Button className="">Начать</Button> <Button className="">Начать</Button>
</a> </a>
<Button
variant="tertiary"
icon={<CloseIcon className="" />}
onlyIcon
onClick={() => handleClickRemove(event.id)}
className="absolute -top-2 -right-2"
/>
</div> </div>
</div> </div>
))} ))}
+25 -9
View File
@@ -134,13 +134,13 @@ router.post("/", async (req, res) => {
} }
} }
if (overlappingSessions.length >= build.sessionLimit) { // if (overlappingSessions.length >= build.sessionLimit) {
return res.json({ // return res.json({
status: "error", // status: "error",
message: // message:
"It is not possible to create a session because it overlaps with the time of another session", // Невозможно создать сеанс, поскольку он перекрывается со временем другого сеанса. // "It is not possible to create a session because it overlaps with the time of another session", // Невозможно создать сеанс, поскольку он перекрывается со временем другого сеанса.
}); // });
} // }
} }
const scheduledSession = await ScheduledSession.create({ const scheduledSession = await ScheduledSession.create({
@@ -226,14 +226,30 @@ router.put("/:id", async (req, res) => {
router.delete("/:id", async (req, res) => { router.delete("/:id", async (req, res) => {
const scheduledSessionId = req.params.id; const scheduledSessionId = req.params.id;
let scheduledSession;
try {
scheduledSession = await ScheduledSession.findById(scheduledSessionId);
} catch (error) {
if (error instanceof Error) {
return res.json({ status: "error", message: error.message });
}
}
if (scheduledSession?.activeSessionId) {
return res.json({
status: "error",
message: "Этот сеанс нельзя удалить, так как он уже был начат",
});
}
try { try {
await ScheduledSession.findByIdAndDelete(scheduledSessionId); await ScheduledSession.findByIdAndDelete(scheduledSessionId);
res.json({ status: "success" }); return res.json({ status: "success" });
} catch (error) { } catch (error) {
if (error instanceof Error) { if (error instanceof Error) {
res.json({ status: "error", message: error.message }); return res.json({ status: "error", message: error.message });
} }
} }
}); });