Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
7d31488
added limits and inline style to TextInputField component
danielshid Jun 27, 2026
e3cf866
label/error association in inline mode
danielshid Jun 27, 2026
ac426c5
Merge branch 'v0.4.6' into text-input-field-limits
danielshid Jul 1, 2026
64b145b
removed hard coded limits and adjusted debounce logic for long displa…
danielshid Jul 1, 2026
9dbe562
maxLength prop now has both limit and prompt
danielshid Jul 7, 2026
547e8ab
fixed max length error msg lingering + missing name error msg disappe…
danielshid Jul 10, 2026
7c39f3f
removed hard cap on nickname
danielshid Jul 10, 2026
a37c8d0
Merge pull request #361 from plan-cake/text-input-field-limits
jzgom067 Jul 10, 2026
55ddf57
Shrink date selector trigger area
jzgom067 Jul 11, 2026
79ec82d
Remove grid preview dialog
jzgom067 Jul 11, 2026
f676c5e
Consolidate repeated grid instances
jzgom067 Jul 11, 2026
f3ba02f
Remove unnecessary justify
jzgom067 Jul 11, 2026
7fbaea7
Create centralized share menu component
jzgom067 Jul 12, 2026
597ca69
Add external open state management
jzgom067 Jul 12, 2026
e786132
Change dashboard copy button to share button
jzgom067 Jul 12, 2026
deff5bb
Contain dialog and drawer click propagation
jzgom067 Jul 12, 2026
89727e5
Add period to link info text
jzgom067 Jul 12, 2026
51e2196
Add event title to share menu
jzgom067 Jul 12, 2026
6fe7ab0
Remove unused prop
jzgom067 Jul 12, 2026
acc202d
Add custom dialog title to time selector
jzgom067 Jul 16, 2026
57ff123
Fix grid scroll behavior
jzgom067 Jul 16, 2026
4075e58
Merge pull request #371 from plan-cake/date-selector-trigger
mirmirmirr Jul 18, 2026
6853e16
Merge pull request #374 from plan-cake/dashboard-share-menu
mirmirmirr Jul 18, 2026
03597f4
Merge pull request #372 from plan-cake/grid-preview-removal
mirmirmirr Jul 18, 2026
5b58301
Merge pull request #379 from plan-cake/time-selector-title
mirmirmirr Jul 18, 2026
3eefbb5
Add version data
jzgom067 Jul 20, 2026
43ca12f
Merge branch 'main' into v0.4.6
jzgom067 Jul 20, 2026
3d61514
Cancel invalid display name checks
jzgom067 Jul 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion frontend/src/app/(auth)/forgot-password/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export default function Page() {
label="Email*"
value={email}
onChange={handleEmailChange}
outlined
style="outlined"
error={errors.email || errors.api}
/>,
]}
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/app/(auth)/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export default function Page() {
label="Email*"
value={email}
onChange={handleEmailChange}
outlined
style="outlined"
error={errors.email || errors.api}
/>,

Expand All @@ -105,7 +105,7 @@ export default function Page() {
label="Password*"
value={password}
onChange={handlePasswordChange}
outlined
style="outlined"
error={errors.password || errors.api}
/>,
]}
Expand Down
6 changes: 3 additions & 3 deletions frontend/src/app/(auth)/register/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ export default function Page() {
label="Email*"
value={email}
onChange={handleEmailChange}
outlined
style="outlined"
error={errors.email || errors.api}
/>,

Expand All @@ -124,7 +124,7 @@ export default function Page() {
setShowPasswordCriteria(false);
}
}}
outlined
style="outlined"
error={errors.password || errors.api}
showPasswordCriteria={showPasswordCriteria}
passwordCriteria={passwordCriteria}
Expand All @@ -138,7 +138,7 @@ export default function Page() {
label="Retype Password*"
value={confirmPassword}
onChange={handleConfirmPasswordChange}
outlined
style="outlined"
error={errors.confirmPassword || errors.api}
/>,
]}
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/app/(auth)/reset-password/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ export default function Page() {
setShowPasswordCriteria(false);
}
}}
outlined
style="outlined"
error={errors.password || errors.api}
showPasswordCriteria={showPasswordCriteria}
passwordCriteria={passwordCriteria}
Expand All @@ -115,7 +115,7 @@ export default function Page() {
label="Retype Password*"
value={confirmPassword}
onChange={handleConfirmPasswordChange}
outlined
style="outlined"
error={errors.confirmPassword || errors.api}
/>,
]}
Expand Down
14 changes: 5 additions & 9 deletions frontend/src/app/(event)/[event-code]/page-client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@ import {
useResultsContext,
} from "@/features/event/results/context";
import { ResultsInformation } from "@/features/event/results/lib/types";
import ShareMenu from "@/features/event/results/share-menu";
import HeaderSpacer from "@/features/header/components/header-spacer";
import BaseDialog from "@/features/system-feedback/dialog/components/base";
import ShareMenu from "@/features/share-menu/menu";
import { cn } from "@/lib/utils/classname";

export default function ClientPage({
Expand Down Expand Up @@ -107,20 +106,17 @@ function EventResults({ eventData }: { eventData: EventInformation }) {
);

const shareButton = (
<BaseDialog
title="Share Event"
description="Share this event with others"
<ShareMenu
eventTitle={eventTitle}
eventCode={eventCode}
trigger={
<EmptyButton
buttonStyle="secondary"
icon={<ShareIcon />}
label="Share Event"
/>
}
showCloseButton
>
<ShareMenu eventTitle={eventTitle} eventCode={eventCode} />
</BaseDialog>
/>
);

return (
Expand Down
69 changes: 35 additions & 34 deletions frontend/src/app/(event)/[event-code]/painting/page-client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import { useDebouncedCallback } from "use-debounce";

import Checkbox from "@/components/checkbox";
import MobileFooterIsland from "@/components/mobile-footer-island";
import TextInputField from "@/components/text-input-field";
import { useAvailability } from "@/core/availability/use-availability";
import { EventRange } from "@/core/event/types";
import ActionButton from "@/features/button/components/action";
import LinkButton from "@/features/button/components/link";
import { MAX_DISPLAY_NAME_LENGTH } from "@/features/event/availability/constants";
import { validateAvailabilityData } from "@/features/event/availability/validate-data";
import TimeZoneSelector from "@/features/event/components/selectors/timezone";
import { ScheduleGrid } from "@/features/event/grid";
Expand Down Expand Up @@ -87,23 +89,12 @@ export default function ClientPage({
// return () => removeToast(toastId);
// }, [addToast, removeToast]);

const handleNameChange = useDebouncedCallback(async (displayName) => {
if (errors.displayName) setErrors((prev) => ({ ...prev, displayName: "" }));

if (displayName === "") {
setErrors((prev) => ({
...prev,
displayName: MESSAGES.ERROR_NAME_MISSING,
}));
return;
}

const checkNameAvailability = useDebouncedCallback(async (displayName) => {
try {
await clientPost(ROUTES.availability.checkDisplayName, {
event_code: eventCode,
display_name: displayName,
});
setErrors((prev) => ({ ...prev, displayName: "" }));
} catch (e) {
const error = e as ApiErrorResponse;
if (error.badRequest) {
Expand All @@ -117,6 +108,26 @@ export default function ClientPage({
}
}, 300);

const handleNameChange = (value: string) => {
setDisplayName(value);
if (value === "") {
checkNameAvailability.cancel();
setErrors((prev) => ({
...prev,
displayName: MESSAGES.ERROR_NAME_MISSING,
}));
} else if (value.length > MAX_DISPLAY_NAME_LENGTH) {
checkNameAvailability.cancel();
setErrors((prev) => ({
...prev,
displayName: MESSAGES.ERROR_NAME_LENGTH,
}));
} else {
setErrors((prev) => ({ ...prev, displayName: "" }));
checkNameAvailability(value);
}
};

Comment thread
jzgom067 marked this conversation as resolved.
// DEFAULT NAME SETTING
const [saveDefaultName, setSaveDefaultName] = useState(false);

Expand All @@ -138,12 +149,12 @@ export default function ClientPage({
// If the user has a default name, use it to autofill the name field
const newName = session.user.defaultName;
setDisplayName(newName);
handleNameChange(newName);
checkNameAvailability(newName);
addToast("success", MESSAGES.INFO_NAME_AUTOFILLED, {
title: "NAME AUTOFILLED",
});
nameInitialized.current = true;
}, [session, setDisplayName, addToast, handleNameChange]);
}, [session, setDisplayName, addToast, checkNameAvailability]);

// SUBMIT AVAILABILITY
const handleSubmitAvailability = async () => {
Expand Down Expand Up @@ -266,7 +277,6 @@ export default function ClientPage({
errors={errors}
session={session}
displayName={displayName}
setDisplayName={setDisplayName}
handleNameChange={handleNameChange}
saveDefaultName={saveDefaultName}
setSaveDefaultName={setSaveDefaultName}
Expand Down Expand Up @@ -319,7 +329,6 @@ export default function ClientPage({
errors={errors}
session={session}
displayName={displayName}
setDisplayName={setDisplayName}
handleNameChange={handleNameChange}
saveDefaultName={saveDefaultName}
setSaveDefaultName={setSaveDefaultName}
Expand Down Expand Up @@ -362,15 +371,13 @@ function DisplayNameInput({
errors,
session,
displayName,
setDisplayName,
handleNameChange,
saveDefaultName,
setSaveDefaultName,
}: {
errors: Record<string, string>;
session: Session;
displayName: string;
setDisplayName: (name: string) => void;
handleNameChange: (name: string) => void;
saveDefaultName: boolean;
setSaveDefaultName: (save: boolean) => void;
Expand All @@ -379,26 +386,20 @@ function DisplayNameInput({
<div className="h-fit w-full shrink-0 space-y-4 overflow-y-auto md:w-80">
<div className="space-y-2">
<div className="w-fit">
<p
className={`text-error text-right text-xs ${errors.displayName ? "visible" : "invisible"}`}
>
{errors.displayName ? errors.displayName : "Error Placeholder"}
</p>
Hi,{" "}
<input
required
<TextInputField
id="displayName"
type="text"
label="Display name"
style="inline"
value={displayName}
onChange={(e) => {
setDisplayName(e.target.value);
handleNameChange(e.target.value);
}}
onChange={handleNameChange}
placeholder="add your name"
className={`inline-block w-auto border-b bg-transparent px-1 focus:outline-none ${
errors.displayName
? "border-error placeholder:text-error"
: "border-gray-400"
}`}
error={errors.displayName}
maxLength={{
length: MAX_DISPLAY_NAME_LENGTH,
error: MESSAGES.ERROR_NAME_LENGTH,
}}
/>
<br />
add your availabilities here
Expand Down
8 changes: 6 additions & 2 deletions frontend/src/app/settings/(submenus)/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,11 @@ export default function Page() {
};

const handleDefaultNameChange = (value: string) => {
setDefaultName(value);
if (value.length > MAX_DEFAULT_NAME_LENGTH) {
setDefaultNameError(MESSAGES.ERROR_DEFAULT_NAME_LENGTH);
} else {
setDefaultNameError("");
setDefaultName(value);
}
};

Expand Down Expand Up @@ -100,7 +100,11 @@ export default function Page() {
type="text"
onChange={handleDefaultNameChange}
error={defaultNameError}
outlined
style="outlined"
maxLength={{
length: MAX_DEFAULT_NAME_LENGTH,
error: MESSAGES.ERROR_DEFAULT_NAME_LENGTH,
}}
/>
</div>
<div
Expand Down
Loading
Loading