From 71e50c58d603d81f327bc0298f6a62cf8e37f1eb Mon Sep 17 00:00:00 2001 From: Heath Daniel Date: Mon, 17 May 2021 18:10:40 -0400 Subject: [PATCH] Add ability to select first day of week --- pages/[user]/[type].tsx | 19 ++++++++++++++++--- pages/api/user/profile.ts | 2 ++ pages/settings/profile.tsx | 16 +++++++++++++++- prisma/schema.prisma | 1 + 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/pages/[user]/[type].tsx b/pages/[user]/[type].tsx index c4f867f1f0..b4e6f5284b 100644 --- a/pages/[user]/[type].tsx +++ b/pages/[user]/[type].tsx @@ -86,7 +86,12 @@ export default function Type(props) { } // Create placeholder elements for empty days in first week - const weekdayOfFirst = dayjs().month(selectedMonth).date(1).day(); + let weekdayOfFirst = dayjs().month(selectedMonth).date(1).day(); + if (props.user.weekStart === 'Monday') { + weekdayOfFirst -= 1; + if (weekdayOfFirst < 0) + weekdayOfFirst = 6; + } const emptyDays = Array(weekdayOfFirst).fill(null).map((day, i) =>
{null} @@ -283,9 +288,11 @@ export default function Type(props) {
-
+ {props.user.weekStart !== 'Monday' ? ( +
Sun
+ ) : null}
Mon
@@ -304,6 +311,11 @@ export default function Type(props) {
Sat
+ {props.user.weekStart === 'Monday' ? ( +
+ Sun +
+ ) : null} {calendar}
@@ -358,7 +370,8 @@ export async function getServerSideProps(context) { eventTypes: true, startTime: true, timeZone: true, - endTime: true + endTime: true, + weekStart: true, } }); diff --git a/pages/api/user/profile.ts b/pages/api/user/profile.ts index 3497eac5ca..f1b2e18d68 100644 --- a/pages/api/user/profile.ts +++ b/pages/api/user/profile.ts @@ -28,6 +28,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const description = req.body.description; const avatar = req.body.avatar; const timeZone = req.body.timeZone; + const weekStart = req.body.weekStart; const updateUser = await prisma.user.update({ where: { @@ -39,6 +40,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) avatar, bio: description, timeZone: timeZone, + weekStart: weekStart, }, }); diff --git a/pages/settings/profile.tsx b/pages/settings/profile.tsx index 69de830e68..d0a112943b 100644 --- a/pages/settings/profile.tsx +++ b/pages/settings/profile.tsx @@ -20,6 +20,7 @@ export default function Settings(props) { const avatarRef = useRef(); const [ selectedTimeZone, setSelectedTimeZone ] = useState({ value: props.user.timeZone }); + const [ selectedWeekStartDay, setSelectedWeekStartDay ] = useState(props.user.weekStart || 'Sunday'); if (loading) { return

Loading...

; @@ -35,12 +36,13 @@ export default function Settings(props) { const enteredDescription = descriptionRef.current.value; const enteredAvatar = avatarRef.current.value; const enteredTimeZone = selectedTimeZone.value; + const enteredWeekStartDay = selectedWeekStartDay; // TODO: Add validation const response = await fetch('/api/user/profile', { method: 'PATCH', - body: JSON.stringify({username: enteredUsername, name: enteredName, description: enteredDescription, avatar: enteredAvatar, timeZone: enteredTimeZone}), + body: JSON.stringify({username: enteredUsername, name: enteredName, description: enteredDescription, avatar: enteredAvatar, timeZone: enteredTimeZone, weekStart: enteredWeekStartDay}), headers: { 'Content-Type': 'application/json' } @@ -102,6 +104,17 @@ export default function Settings(props) { +
+ +
+ +
+
@@ -175,6 +188,7 @@ export async function getServerSideProps(context) { bio: true, avatar: true, timeZone: true, + weekStart: true, } }); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index f72eaee29d..69b586d229 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -39,6 +39,7 @@ model User { bio String? avatar String? timeZone String @default("Europe/London") + weekStart String? @default("Sunday") startTime Int @default(0) endTime Int @default(1440) createdDate DateTime @default(now()) @map(name: "created")