@@ -97,6 +108,7 @@ export default function DeleteAccountDialog() {
value={currentPassword}
onChange={(value) => {
setCurrentPassword(value);
+ handleError("currentPassword", "");
}}
style="outlined"
error={errors.currentPassword || errors.api}
From dd1b1818e394af8c1427672f304de29f41c07bd0 Mon Sep 17 00:00:00 2001
From: jzgom067
Date: Wed, 12 Aug 2026 19:58:30 -0400
Subject: [PATCH 15/19] Add error checking on register
---
frontend/src/app/(auth)/register/page.tsx | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/frontend/src/app/(auth)/register/page.tsx b/frontend/src/app/(auth)/register/page.tsx
index 9faddb5e..10ae0e0d 100644
--- a/frontend/src/app/(auth)/register/page.tsx
+++ b/frontend/src/app/(auth)/register/page.tsx
@@ -41,8 +41,10 @@ export default function Page() {
? MESSAGES.ERROR_PASSWORD_WEAK
: !confirmPassword
? MESSAGES.FORM_NOT_FILLED
- : undefined;
- }, [email, password, confirmPassword, passwordIsStrong]);
+ : Object.keys(errors).length
+ ? MESSAGES.FORM_HAS_ERRORS
+ : undefined;
+ }, [email, password, confirmPassword, passwordIsStrong, errors]);
const handleEmailChange = (value: string) => {
handleError("email", "");
From 6aa4a014d65d59181c941d8b5237f65aa00bd8f2 Mon Sep 17 00:00:00 2001
From: jzgom067
Date: Thu, 13 Aug 2026 14:27:07 -0400
Subject: [PATCH 16/19] Add trim to display name missing check
---
frontend/src/app/(event)/[event-code]/painting/page-client.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/frontend/src/app/(event)/[event-code]/painting/page-client.tsx b/frontend/src/app/(event)/[event-code]/painting/page-client.tsx
index cd128ca7..76fba6be 100644
--- a/frontend/src/app/(event)/[event-code]/painting/page-client.tsx
+++ b/frontend/src/app/(event)/[event-code]/painting/page-client.tsx
@@ -124,7 +124,7 @@ export default function ClientPage({
const handleNameChange = (value: string) => {
setDisplayName(value);
- if (value === "") {
+ if (value.trim() === "") {
checkNameAvailability.cancel();
handleError("displayName", MESSAGES.ERROR_NAME_MISSING);
} else if (value.length > MAX_DISPLAY_NAME_LENGTH) {
From a48813dda102864181a50f2f7f412c01f5c8ce61 Mon Sep 17 00:00:00 2001
From: jzgom067
Date: Thu, 13 Aug 2026 14:36:41 -0400
Subject: [PATCH 17/19] Add error clearing on password change
---
frontend/src/app/(auth)/register/page.tsx | 8 +++++++-
frontend/src/app/(auth)/reset-password/page.tsx | 8 +++++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/frontend/src/app/(auth)/register/page.tsx b/frontend/src/app/(auth)/register/page.tsx
index 10ae0e0d..8e59474f 100644
--- a/frontend/src/app/(auth)/register/page.tsx
+++ b/frontend/src/app/(auth)/register/page.tsx
@@ -52,6 +52,12 @@ export default function Page() {
setEmail(value);
};
+ const handlePasswordChange = (value: string) => {
+ handleError("password", "");
+ handleError("api", "");
+ setPassword(value);
+ };
+
const handleConfirmPasswordChange = (value: string) => {
handleError("confirmPassword", "");
handleError("api", "");
@@ -131,7 +137,7 @@ export default function Page() {
label="Password*"
value={password}
onChange={(value) => {
- setPassword(value);
+ handlePasswordChange(value);
}}
onFocus={() => setShowPasswordCriteria(true)}
onBlur={() => {
diff --git a/frontend/src/app/(auth)/reset-password/page.tsx b/frontend/src/app/(auth)/reset-password/page.tsx
index db74ba76..1a312017 100644
--- a/frontend/src/app/(auth)/reset-password/page.tsx
+++ b/frontend/src/app/(auth)/reset-password/page.tsx
@@ -49,6 +49,12 @@ export default function Page() {
: undefined;
}, [newPassword, passwordIsStrong, confirmPassword, errors]);
+ const handleNewPasswordChange = (value: string) => {
+ handleError("password", "");
+ handleError("api", "");
+ setNewPassword(value);
+ };
+
const handleConfirmPasswordChange = (value: string) => {
handleError("confirmPassword", "");
handleError("api", "");
@@ -108,7 +114,7 @@ export default function Page() {
label="New Password*"
value={newPassword}
onChange={(value) => {
- setNewPassword(value);
+ handleNewPasswordChange(value);
}}
onFocus={() => setShowPasswordCriteria(true)}
onBlur={() => {
From 71f32ef9c9c1b27a37a33d8325dbb96b73d49afb Mon Sep 17 00:00:00 2001
From: jzgom067
Date: Thu, 13 Aug 2026 14:38:38 -0400
Subject: [PATCH 18/19] Add confirm password match check
---
frontend/src/app/(auth)/register/page.tsx | 8 +++++---
frontend/src/app/(auth)/reset-password/page.tsx | 8 +++++---
.../change-password/use-change-password.ts | 16 ++++++++++------
3 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/frontend/src/app/(auth)/register/page.tsx b/frontend/src/app/(auth)/register/page.tsx
index 8e59474f..87886c3d 100644
--- a/frontend/src/app/(auth)/register/page.tsx
+++ b/frontend/src/app/(auth)/register/page.tsx
@@ -41,9 +41,11 @@ export default function Page() {
? MESSAGES.ERROR_PASSWORD_WEAK
: !confirmPassword
? MESSAGES.FORM_NOT_FILLED
- : Object.keys(errors).length
- ? MESSAGES.FORM_HAS_ERRORS
- : undefined;
+ : password !== confirmPassword
+ ? MESSAGES.ERROR_PASSWORD_MISMATCH
+ : Object.keys(errors).length
+ ? MESSAGES.FORM_HAS_ERRORS
+ : undefined;
}, [email, password, confirmPassword, passwordIsStrong, errors]);
const handleEmailChange = (value: string) => {
diff --git a/frontend/src/app/(auth)/reset-password/page.tsx b/frontend/src/app/(auth)/reset-password/page.tsx
index 1a312017..26d10ac2 100644
--- a/frontend/src/app/(auth)/reset-password/page.tsx
+++ b/frontend/src/app/(auth)/reset-password/page.tsx
@@ -44,9 +44,11 @@ export default function Page() {
? MESSAGES.ERROR_PASSWORD_WEAK
: !confirmPassword
? MESSAGES.FORM_NOT_FILLED
- : Object.keys(errors).length
- ? MESSAGES.FORM_HAS_ERRORS
- : undefined;
+ : newPassword !== confirmPassword
+ ? MESSAGES.ERROR_PASSWORD_MISMATCH
+ : Object.keys(errors).length
+ ? MESSAGES.FORM_HAS_ERRORS
+ : undefined;
}, [newPassword, passwordIsStrong, confirmPassword, errors]);
const handleNewPasswordChange = (value: string) => {
diff --git a/frontend/src/features/account/setting-dialogs/change-password/use-change-password.ts b/frontend/src/features/account/setting-dialogs/change-password/use-change-password.ts
index 9f2dc954..817ad4bb 100644
--- a/frontend/src/features/account/setting-dialogs/change-password/use-change-password.ts
+++ b/frontend/src/features/account/setting-dialogs/change-password/use-change-password.ts
@@ -70,9 +70,11 @@ export function useChangePasswordFlow() {
? MESSAGES.ERROR_PASSWORD_WEAK
: !form.confirmPassword
? MESSAGES.FORM_NOT_FILLED
- : Object.keys(errors).length
- ? MESSAGES.FORM_HAS_ERRORS
- : undefined;
+ : form.newPassword !== form.confirmPassword
+ ? MESSAGES.ERROR_PASSWORD_MISMATCH
+ : Object.keys(errors).length
+ ? MESSAGES.FORM_HAS_ERRORS
+ : undefined;
}
if (step === "OTP") {
return !form.resetCode
@@ -88,9 +90,11 @@ export function useChangePasswordFlow() {
? MESSAGES.ERROR_PASSWORD_WEAK
: !form.confirmPassword
? MESSAGES.FORM_NOT_FILLED
- : Object.keys(errors).length
- ? MESSAGES.FORM_HAS_ERRORS
- : undefined;
+ : form.newPassword !== form.confirmPassword
+ ? MESSAGES.ERROR_PASSWORD_MISMATCH
+ : Object.keys(errors).length
+ ? MESSAGES.FORM_HAS_ERRORS
+ : undefined;
}
return undefined;
}, [step, form, passwordIsStrong, errors]);
From 2f0be0dc556436af40ffff658b50255783619f2a Mon Sep 17 00:00:00 2001
From: jzgom067
Date: Thu, 13 Aug 2026 14:51:20 -0400
Subject: [PATCH 19/19] Fix event changed check
---
frontend/src/features/event/editor/editor.tsx | 32 ++++++++++++++++---
1 file changed, 27 insertions(+), 5 deletions(-)
diff --git a/frontend/src/features/event/editor/editor.tsx b/frontend/src/features/event/editor/editor.tsx
index 89e37248..838709d4 100644
--- a/frontend/src/features/event/editor/editor.tsx
+++ b/frontend/src/features/event/editor/editor.tsx
@@ -63,11 +63,33 @@ function EventEditorContent({ type, initialData }: EventEditorProps) {
// CHECK FIELDS
const invalidForm = useMemo(() => {
- const eventNotEdited =
- type === "edit" &&
- initialData &&
- title.trim() === initialData.title.trim() &&
- eventRange === initialData.originalEventRange;
+ let eventNotEdited = false;
+ if (type === "edit" && initialData && initialData.originalEventRange) {
+ const sameTitle = title.trim() === initialData.title.trim();
+ const sameType = eventRange.type === initialData.originalEventRange.type;
+ const sameTimeRange =
+ eventRange.timeRange.from ===
+ initialData.originalEventRange.timeRange.from &&
+ eventRange.timeRange.to ===
+ initialData.originalEventRange.timeRange.to &&
+ eventRange.timezone === initialData.originalEventRange.timezone;
+
+ const sameDate =
+ eventRange.type === "specific" &&
+ initialData.originalEventRange.type === "specific" &&
+ eventRange.dateRange.from ===
+ initialData.originalEventRange.dateRange.from &&
+ eventRange.dateRange.to === initialData.originalEventRange.dateRange.to;
+
+ const sameWeekdays =
+ eventRange.type === "weekday" &&
+ initialData.originalEventRange.type === "weekday" &&
+ JSON.stringify(eventRange.weekdays) ===
+ JSON.stringify(initialData.originalEventRange.weekdays);
+
+ eventNotEdited =
+ sameTitle && sameType && sameTimeRange && (sameDate || sameWeekdays);
+ }
return !title ||
!title.trim() ||