Heavily simplified the startTime and endTime display by removing dayjs from SetTimesModal

This commit is contained in:
Alex van Andel 2021-06-29 22:00:25 +00:00
parent 575747bcd3
commit 5d30586a24
3 changed files with 28 additions and 43 deletions

View file

@ -50,13 +50,16 @@ export const Scheduler = ({
const addNewSchedule = () => setEditSchedule(openingHours.length); const addNewSchedule = () => setEditSchedule(openingHours.length);
const applyEditSchedule = (changed) => { const applyEditSchedule = (changed) => {
// new entry
if (!changed.days) { if (!changed.days) {
changed.days = [1, 2, 3, 4, 5]; // Mon - Fri changed.days = [1, 2, 3, 4, 5]; // Mon - Fri
setOpeningHours(openingHours.concat(changed));
} else {
// update
const replaceWith = { ...openingHours[editSchedule], ...changed };
openingHours.splice(editSchedule, 1, replaceWith);
setOpeningHours([].concat(openingHours));
} }
const replaceWith = { ...openingHours[editSchedule], ...changed };
openingHours.splice(editSchedule, 1, replaceWith);
setOpeningHours([].concat(openingHours));
}; };
const removeScheduleAt = (toRemove: number) => { const removeScheduleAt = (toRemove: number) => {
@ -69,9 +72,15 @@ export const Scheduler = ({
<div className="inline-flex ml-2"> <div className="inline-flex ml-2">
<WeekdaySelect defaultValue={item.days} onSelect={(selected: number[]) => (item.days = selected)} /> <WeekdaySelect defaultValue={item.days} onSelect={(selected: number[]) => (item.days = selected)} />
<button className="ml-2 text-sm px-2" type="button" onClick={() => setEditSchedule(idx)}> <button className="ml-2 text-sm px-2" type="button" onClick={() => setEditSchedule(idx)}>
{dayjs(item.startDate).format(item.startDate.minute() === 0 ? "ha" : "h:mma")} {dayjs()
.startOf("day")
.add(item.startTime, "minutes")
.format(item.startTime % 60 === 0 ? "ha" : "h:mma")}
&nbsp;until&nbsp; &nbsp;until&nbsp;
{dayjs(item.endDate).format(item.endDate.minute() === 0 ? "ha" : "h:mma")} {dayjs()
.startOf("day")
.add(item.endTime, "minutes")
.format(item.endTime % 60 === 0 ? "ha" : "h:mma")}
</button> </button>
</div> </div>
<button <button
@ -122,8 +131,9 @@ export const Scheduler = ({
</div> </div>
{editSchedule >= 0 && ( {editSchedule >= 0 && (
<SetTimesModal <SetTimesModal
schedule={{ ...openingHours[editSchedule], timeZone: selectedTimeZone }} startTime={openingHours[editSchedule] ? openingHours[editSchedule].startTime : 540}
onChange={applyEditSchedule} endTime={openingHours[editSchedule] ? openingHours[editSchedule].endTime : 1020}
onChange={(times) => applyEditSchedule({ ...(openingHours[editSchedule] || {}), ...times })}
onExit={() => setEditSchedule(-1)} onExit={() => setEditSchedule(-1)}
/> />
)} )}

View file

@ -1,25 +1,9 @@
import { ClockIcon } from "@heroicons/react/outline"; import { ClockIcon } from "@heroicons/react/outline";
import { useRef } from "react"; import { useRef } from "react";
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/utc";
dayjs.extend(utc);
dayjs.extend(timezone);
export default function SetTimesModal(props) { export default function SetTimesModal(props) {
const { startDate, endDate } = { const [startHours, startMinutes] = [Math.floor(props.startTime / 60), props.startTime % 60];
startDate: dayjs const [endHours, endMinutes] = [Math.floor(props.endTime / 60), props.endTime % 60];
.utc()
.startOf("day")
.add(props.schedule.startTime || 540, "minutes"),
endDate: dayjs
.utc()
.startOf("day")
.add(props.schedule.endTime || 1020, "minutes"),
};
startDate.tz(props.timeZone);
endDate.tz(props.timeZone);
const startHoursRef = useRef<HTMLInputElement>(); const startHoursRef = useRef<HTMLInputElement>();
const startMinsRef = useRef<HTMLInputElement>(); const startMinsRef = useRef<HTMLInputElement>();
@ -35,8 +19,8 @@ export default function SetTimesModal(props) {
const enteredEndMins = parseInt(endMinsRef.current.value); const enteredEndMins = parseInt(endMinsRef.current.value);
props.onChange({ props.onChange({
startDate: startDate.minute(enteredStartMins).hour(enteredStartHours), startTime: enteredStartHours * 60 + enteredStartMins,
endDate: endDate.minute(enteredEndMins).hour(enteredEndHours), endTime: enteredEndHours * 60 + enteredEndMins,
}); });
props.onExit(0); props.onExit(0);
@ -85,7 +69,7 @@ export default function SetTimesModal(props) {
id="startHours" id="startHours"
className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md" className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md"
placeholder="9" placeholder="9"
defaultValue={startDate.format("H")} defaultValue={startHours}
/> />
</div> </div>
<span className="mx-2 pt-1">:</span> <span className="mx-2 pt-1">:</span>
@ -104,7 +88,7 @@ export default function SetTimesModal(props) {
id="startMinutes" id="startMinutes"
className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md" className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md"
placeholder="30" placeholder="30"
defaultValue={startDate.format("m")} defaultValue={startMinutes}
/> />
</div> </div>
</div> </div>
@ -124,7 +108,7 @@ export default function SetTimesModal(props) {
id="endHours" id="endHours"
className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md" className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md"
placeholder="17" placeholder="17"
defaultValue={endDate.format("H")} defaultValue={endHours}
/> />
</div> </div>
<span className="mx-2 pt-1">:</span> <span className="mx-2 pt-1">:</span>
@ -143,7 +127,7 @@ export default function SetTimesModal(props) {
id="endMinutes" id="endMinutes"
className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md" className="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md"
placeholder="30" placeholder="30"
defaultValue={endDate.format("m")} defaultValue={endMinutes}
/> />
</div> </div>
</div> </div>

View file

@ -118,16 +118,7 @@ export default function EventTypePage({
}; };
if (enteredAvailability) { if (enteredAvailability) {
payload.availability = { payload.availability = enteredAvailability;
dateOverrides: [],
openingHours: enteredAvailability.openingHours.map((item): OpeningHours => {
item.startTime = item.startDate.hour() * 60 + item.startDate.minute();
delete item.startDate;
item.endTime = item.endDate.hour() * 60 + item.endDate.minute();
delete item.endDate;
return item;
}),
};
} }
await fetch("/api/availability/eventtype", { await fetch("/api/availability/eventtype", {
@ -855,7 +846,7 @@ export const getServerSideProps: GetServerSideProps<Props> = async ({ req, query
{ {
days: [0, 1, 2, 3, 4, 5, 6], days: [0, 1, 2, 3, 4, 5, 6],
startTime: user.startTime, startTime: user.startTime,
length: user.endTime >= 1440 ? 1439 : user.endTime, endTime: user.endTime,
}, },
]; ];