"use client"; /** * Controlled section editor for a membership-method chip. Used by both the * custom-rule `membership-methods` add-method modal and the `final-review` * chip edit modal — caller owns draft state and decides when to persist or * discard. */ import { memo, useCallback } from "react"; import { useMessages } from "../../../../contexts/MessagesContext"; import ModalTextAreaField from "../ModalTextAreaField"; import type { MembershipMethodDetailEntry } from "../../types"; export interface MembershipMethodEditFieldsProps { value: MembershipMethodDetailEntry; onChange: (_next: MembershipMethodDetailEntry) => void; readOnly?: boolean; } const FIELDS: ReadonlyArray = [ "eligibility", "joiningProcess", "expectations", ]; function MembershipMethodEditFieldsComponent({ value, onChange, readOnly = false, }: MembershipMethodEditFieldsProps) { const m = useMessages(); const t = m.create.customRule.membership; const patch = useCallback( ( key: K, next: MembershipMethodDetailEntry[K], ) => { onChange({ ...value, [key]: next }); }, [value, onChange], ); return (
{FIELDS.map((field) => ( patch(field, v)} disabled={readOnly} /> ))}
); } MembershipMethodEditFieldsComponent.displayName = "MembershipMethodEditFields"; export default memo(MembershipMethodEditFieldsComponent);