Use shared modals and combine selected-day actions
This commit is contained in:
@@ -4,8 +4,8 @@ import { habitRequest, formatTrackingDate, type TodayHabit } from "../lib/dashbo
|
||||
import { Button, Checkbox } from "./design-system/primitives";
|
||||
import { Field } from "./design-system/Field";
|
||||
|
||||
export function CheckInEditor({ habitId, date, disabled, onSaved, onExpired }: {
|
||||
habitId: string; date: string; disabled?: boolean; onSaved: () => void; onExpired?: () => void;
|
||||
export function CheckInEditor({ habitId, date, disabled, onSaved, onExpired, onBusyChange }: {
|
||||
habitId: string; date: string; disabled?: boolean; onSaved: () => void; onExpired?: () => void; onBusyChange?: (busy: boolean) => void;
|
||||
}) {
|
||||
const [day, setDay] = useState<TodayHabit | null>(null);
|
||||
const [count, setCount] = useState("");
|
||||
@@ -28,7 +28,7 @@ export function CheckInEditor({ habitId, date, disabled, onSaved, onExpired }: {
|
||||
}, [habitId, date, attempt]);
|
||||
async function save(body: { count: number } | { done: boolean }, taskId?: string) {
|
||||
if (saving.current || disabled) return;
|
||||
saving.current = true; setBusy(true); setError(""); setNotice("");
|
||||
saving.current = true; setBusy(true); onBusyChange?.(true); setError(""); setNotice("");
|
||||
try {
|
||||
const result = await habitRequest<TodayHabit>(`/habits/${habitId}/days/${date}/${taskId ? `tasks/${taskId}` : "progress"}`, {
|
||||
method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body),
|
||||
@@ -37,7 +37,7 @@ export function CheckInEditor({ habitId, date, disabled, onSaved, onExpired }: {
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : "Could not save. Try again.";
|
||||
setError(message); if (message.includes("session has expired")) expired.current?.();
|
||||
} finally { saving.current = false; setBusy(false); }
|
||||
} finally { saving.current = false; setBusy(false); onBusyChange?.(false); }
|
||||
}
|
||||
return <div className="ds-form-stack ds-check-in-controls" aria-label={`Check-in for ${date}`}>
|
||||
<header className="ds-check-in-heading"><p className="ds-eyebrow">EDITING CHECK-IN</p><p className="type-ui-heading">{formatTrackingDate(date)}</p></header>
|
||||
|
||||
Reference in New Issue
Block a user