diff --git a/apps/web/src/components/reminder-wizard/groups-form-client.tsx b/apps/web/src/components/reminder-wizard/groups-form-client.tsx
index 4244513..acd54cc 100644
--- a/apps/web/src/components/reminder-wizard/groups-form-client.tsx
+++ b/apps/web/src/components/reminder-wizard/groups-form-client.tsx
@@ -22,6 +22,7 @@ interface PassThroughParams {
scheduledAt?: string;
rrule?: string;
editReminderId?: string;
+ deliveryEndHour?: string;
}
interface GroupsFormClientProps {
@@ -74,6 +75,7 @@ export function GroupsFormClient({
if (passThroughParams.scheduledAt) sp.set("scheduledAt", passThroughParams.scheduledAt);
if (passThroughParams.rrule) sp.set("rrule", passThroughParams.rrule);
if (passThroughParams.editReminderId) sp.set("editReminderId", passThroughParams.editReminderId);
+ if (passThroughParams.deliveryEndHour) sp.set("deliveryEndHour", passThroughParams.deliveryEndHour);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
router.push(`/reminders/new?${sp.toString()}` as any);
}
diff --git a/apps/web/src/components/reminder-wizard/review-submit-client.tsx b/apps/web/src/components/reminder-wizard/review-submit-client.tsx
index 8cd2c90..ea3f762 100644
--- a/apps/web/src/components/reminder-wizard/review-submit-client.tsx
+++ b/apps/web/src/components/reminder-wizard/review-submit-client.tsx
@@ -17,6 +17,7 @@ interface ReviewSubmitClientProps {
rrule?: string;
editReminderId?: string;
timezone: string;
+ deliveryEndHour?: number;
}
export function ReviewSubmitClient({
@@ -28,6 +29,7 @@ export function ReviewSubmitClient({
rrule,
editReminderId,
timezone,
+ deliveryEndHour,
}: ReviewSubmitClientProps) {
const router = useRouter();
const [submitting, setSubmitting] = useState(false);
@@ -55,6 +57,7 @@ export function ReviewSubmitClient({
scheduledAtIso: scheduledAt,
rrule: rrule ?? null,
timezone,
+ deliveryWindowEndHour: deliveryEndHour,
};
const result = editReminderId
? await updateReminderAction({ ...payload, reminderId: editReminderId })
diff --git a/apps/web/src/components/reminder-wizard/step-groups.tsx b/apps/web/src/components/reminder-wizard/step-groups.tsx
index a5978bd..ca2b390 100644
--- a/apps/web/src/components/reminder-wizard/step-groups.tsx
+++ b/apps/web/src/components/reminder-wizard/step-groups.tsx
@@ -20,6 +20,7 @@ interface StepGroupsParams {
rrule?: string;
groupId?: string;
editReminderId?: string;
+ deliveryEndHour?: string;
}
interface StepGroupsProps {
@@ -76,6 +77,7 @@ export async function StepGroups({ params }: StepGroupsProps) {
if (scheduledAt) backParams.set("scheduledAt", scheduledAt);
if (rrule) backParams.set("rrule", rrule);
if (editReminderId) backParams.set("editReminderId", editReminderId);
+ if (params.deliveryEndHour) backParams.set("deliveryEndHour", params.deliveryEndHour);
const backHref = `/reminders/new?${backParams.toString()}`;
return (
@@ -99,7 +101,14 @@ export async function StepGroups({ params }: StepGroupsProps) {
groups={groups}
preSelected={preSelected}
accountId={accountId}
- passThroughParams={{ name: params.name, messages, scheduledAt, rrule, editReminderId }}
+ passThroughParams={{
+ name: params.name,
+ messages,
+ scheduledAt,
+ rrule,
+ editReminderId,
+ deliveryEndHour: params.deliveryEndHour,
+ }}
/>
);
diff --git a/apps/web/src/components/reminder-wizard/step-review.tsx b/apps/web/src/components/reminder-wizard/step-review.tsx
index 7b64bd3..05e839d 100644
--- a/apps/web/src/components/reminder-wizard/step-review.tsx
+++ b/apps/web/src/components/reminder-wizard/step-review.tsx
@@ -38,6 +38,7 @@ interface StepReviewParams {
scheduledAt?: string;
rrule?: string;
editReminderId?: string;
+ deliveryEndHour?: string;
}
interface StepReviewProps {
@@ -272,6 +273,9 @@ export async function StepReview({ params }: StepReviewProps) {
rrule={rrule}
editReminderId={editReminderId}
timezone={timezone}
+ deliveryEndHour={
+ params.deliveryEndHour ? Number(params.deliveryEndHour) : undefined
+ }
/>
);
diff --git a/apps/web/src/components/reminder-wizard/step-when.tsx b/apps/web/src/components/reminder-wizard/step-when.tsx
index 19d41ec..142784d 100644
--- a/apps/web/src/components/reminder-wizard/step-when.tsx
+++ b/apps/web/src/components/reminder-wizard/step-when.tsx
@@ -23,6 +23,7 @@ interface StepWhenParams {
scheduledAt?: string;
rrule?: string;
editReminderId?: string;
+ deliveryEndHour?: string;
}
interface StepWhenProps {
@@ -87,6 +88,9 @@ export async function StepWhen({ params }: StepWhenProps) {
timezone={timezone}
initialDefaultIso={scheduledAt ?? defaultFirstFireIso(timezone)}
initialSpec={specFromRrule(rrule)}
+ initialDeliveryEndHour={
+ params.deliveryEndHour ? Number(params.deliveryEndHour) : undefined
+ }
passThroughParams={{ name: params.name, messages: messagesParam, editReminderId }}
/>
diff --git a/apps/web/src/components/reminder-wizard/when-form-client.tsx b/apps/web/src/components/reminder-wizard/when-form-client.tsx
index 4e13a46..8860688 100644
--- a/apps/web/src/components/reminder-wizard/when-form-client.tsx
+++ b/apps/web/src/components/reminder-wizard/when-form-client.tsx
@@ -10,6 +10,7 @@ import { Label } from "@/components/ui/label";
import { buildRrule, DEFAULT_RECURRENCE, type RecurrenceSpec } from "@/lib/recurrence";
import { splitDateTime, validateScheduledAt } from "@/lib/date-picker";
import { RecurrencePicker } from "@/components/recurrence-picker";
+import { HourSelect } from "@/components/hour-select";
interface PassThroughParams {
/** User-supplied reminder name (passes through unchanged). */
@@ -25,6 +26,7 @@ interface WhenFormClientProps {
timezone: string;
initialDefaultIso: string;
initialSpec?: RecurrenceSpec;
+ initialDeliveryEndHour?: number;
passThroughParams: PassThroughParams;
}
@@ -34,6 +36,7 @@ export function WhenFormClient({
timezone,
initialDefaultIso,
initialSpec,
+ initialDeliveryEndHour,
passThroughParams,
}: WhenFormClientProps) {
const router = useRouter();
@@ -42,6 +45,9 @@ export function WhenFormClient({
const [date, setDate] = useState(initial.date);
const [time, setTime] = useState(initial.time);
const [spec, setSpec] = useState