From 5a658d4e19c615aff33a22953e26331f69cb8d50 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Mon, 1 Apr 2024 13:05:35 +0300 Subject: [PATCH] fix availability ui bug --- components/availability/AvailabilityForm.js | 58 ++++++++++++------- .../AvailabilityFormDatePicker.js | 4 +- pages/api/index.ts | 10 +++- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/components/availability/AvailabilityForm.js b/components/availability/AvailabilityForm.js index 19d09a4..868ccc1 100644 --- a/components/availability/AvailabilityForm.js +++ b/components/availability/AvailabilityForm.js @@ -1,5 +1,5 @@ import axiosInstance from '../../src/axiosSecure'; -import { useEffect, useState, useCallback } from "react"; +import { useEffect, useState, useCallback, use } from "react"; import toast from "react-hot-toast"; import { useRouter } from "next/router"; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; @@ -26,9 +26,6 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o const [editMode, setEditMode] = useState(existingItems.length > 0); const [publisher, setPublisher] = useState({ id: publisherId }); const [day, setDay] = useState(new Date(date)); - const [doRepeat, setDoRepeat] = useState(false); - const [repeatFrequency, setRepeatFrequency] = useState(1); - const [repeatUntil, setRepeatUntil] = useState(null); const [canUpdate, setCanUpdate] = useState(true); const [timeSlots, setTimeSlots] = useState([]); @@ -46,6 +43,10 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o isLast: false, }]); + const [doRepeat, setDoRepeat] = useState(existingItems && existingItems.length > 0 ? existingItems[0].repeatWeekly : false); + const [repeatFrequency, setRepeatFrequency] = useState(1); + const [repeatUntil, setRepeatUntil] = useState(null); + const [isInline, setInline] = useState(inline || false); const [config, setConfig] = useState(null); useEffect(() => { @@ -69,6 +70,7 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o const response = await axiosInstance.get(`/api/data/availabilities/${id}`); setAvailabilities([response.data]); setEditMode(true); + setDoRepeat(response.data.repeatWeekly); } catch (error) { console.error(error); toast.error("Error fetching availability data."); @@ -202,10 +204,24 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o availability.isWithTransportIn = group[0].isFirst && timeSlots[0].isWithTransport; availability.isWithTransportOut = group[group.length - 1].isLast && timeSlots[timeSlots.length - 1].isWithTransport; - availability.repeatWeekly = doRepeat; - availability.dayOfMonth = doRepeat ? null : availability.startTime.getDate(); - availability.endDate = doRepeat ? repeatUntil : null; + delete availability.weekOfMonth; + if (doRepeat) { + availability.repeatWeekly = true; + availability.dayOfMonth = null; + availability.weekOfMonth = 0; + availability.endDate = repeatUntil; + } else { + availability.repeatWeekly = false; + availability.dayOfMonth = availability.startTime.getDate(); + availability.endDate = null; + } + availability.dateOfEntry = new Date(); + if (availability.parentAvailabilityId) { + availability.parentAvailability = { connect: { id: parentAvailabilityId } }; + } + delete availability.parentAvailabilityId; + return availability; } @@ -288,8 +304,7 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o const TimeSlotCheckboxes = ({ slots, setSlots, items: [] }) => { - const [allDay, setAllDay] = useState(false); - + const [allDay, setAllDay] = useState(slots.every(slot => slot.isChecked)); const handleAllDayChange = (e) => { const updatedSlots = slots.map(slot => ({ ...slot, @@ -297,7 +312,9 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o })); setSlots(updatedSlots); setAllDay(e.target.checked) - setCanUpdate(true); + // setCanUpdate(slots.some(slot => slot.isChecked)); + const anyChecked = updatedSlots.some(slot => slot.isChecked); + setCanUpdate(anyChecked); console.log("handleAllDayChange: allDay: " + allDay + ", updatedSlots: " + JSON.stringify(updatedSlots)); }; useEffect(() => { @@ -352,9 +369,9 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o return (
-