import { Form } from "@remix-run/react"; import { useEffect, useState } from "react"; import { Button } from "~/components/primitives/Buttons"; import { FormError } from "~/components/primitives/FormError"; import { Header2 } from "~/components/primitives/Headers"; import { Input } from "~/components/primitives/Input"; import { Label } from "~/components/primitives/Label"; import { Paragraph } from "~/components/primitives/Paragraph"; import * as Property from "~/components/primitives/PropertyTable"; export const MAX_PROJECTS_INTENT = "set-max-projects"; export const MAX_PROJECTS_SAVED_VALUE = "max-projects"; type FieldErrors = Record | null; type Props = { maximumProjectCount: number; errors: FieldErrors; savedJustNow: boolean; isSubmitting: boolean; }; export function MaxProjectsSection({ maximumProjectCount, errors, savedJustNow, isSubmitting, }: Props) { const hasFieldErrors = !!errors && Object.keys(errors).length > 0; const fieldError = (field: string) => errors && field in errors ? errors[field]?.[0] : undefined; const [isEditing, setIsEditing] = useState(hasFieldErrors); const [value, setValue] = useState(String(maximumProjectCount)); useEffect(() => { if (hasFieldErrors) setIsEditing(true); }, [hasFieldErrors]); useEffect(() => { if (savedJustNow && !hasFieldErrors) setIsEditing(false); }, [savedJustNow, hasFieldErrors]); return (
Maximum projects {!isEditing && ( )}
{savedJustNow && (
Saved.
)} {!isEditing ? ( Limit {maximumProjectCount.toLocaleString()} ) : (
setValue(e.target.value)} required /> {fieldError("maximumProjectCount")}
)}
); }