From e267902640c2764426aedf98d606787152da7d0d Mon Sep 17 00:00:00 2001 From: crssstha Date: Fri, 31 Jul 2026 12:04:31 +0545 Subject: [PATCH 1/9] fix(eap): revise contact sections and form labels per feedback - Remove National Society, delegation and partner NS contact sections from Full and Simplified overviews - Drop the corresponding contact schema validations - Require National Society contact name, title and email in EAP registration - Point the "send us a message" link to mailto:DREF.anticipatorypillar@ifrc.org - Add header descriptions to operation activity lists - Hide the Admin2 select button instead of disabling it when unavailable - Update EAP form labels and descriptions --- .../components/domain/Admin2Input/index.tsx | 3 +- .../domain/ContactInputsSection/index.tsx | 3 + .../domain/EapIndicatorInput/i18n.json | 2 +- .../EapOperationActivityInput/i18n.json | 2 +- .../EapOperationActivityListInput/i18n.json | 6 +- .../EapOperationActivityListInput/index.tsx | 34 ++- .../EapActivationProcess/i18n.json | 10 +- .../EapFullForm/FinanceLogistics/i18n.json | 6 +- app/src/views/EapFullForm/Meal/i18n.json | 8 +- .../NationalSocietyCapacity/i18n.json | 6 +- app/src/views/EapFullForm/Overview/i18n.json | 20 +- app/src/views/EapFullForm/Overview/index.tsx | 211 ++++------------ .../views/EapFullForm/RiskAnalysis/i18n.json | 12 +- .../EapFullForm/SelectionActions/i18n.json | 11 +- .../EapFullForm/SelectionActions/index.tsx | 19 +- .../views/EapFullForm/TriggerModel/i18n.json | 11 +- .../views/EapFullForm/TriggerModel/index.tsx | 1 - app/src/views/EapFullForm/schema.ts | 4 - app/src/views/EapRegistration/i18n.json | 6 +- app/src/views/EapRegistration/index.tsx | 4 +- app/src/views/EapRegistration/schema.ts | 5 +- .../EapSimplifiedForm/EarlyAction/i18n.json | 8 +- .../EapSimplifiedForm/Overview/i18n.json | 14 +- .../EapSimplifiedForm/Overview/index.tsx | 228 ++++-------------- .../EapSimplifiedForm/RiskAnalysis/i18n.json | 4 +- app/src/views/EapSimplifiedForm/schema.ts | 4 - app/src/views/EarlyActionProtocols/i18n.json | 2 +- cacheppuccino | 2 +- go-api | 2 +- 29 files changed, 189 insertions(+), 459 deletions(-) diff --git a/app/src/components/domain/Admin2Input/index.tsx b/app/src/components/domain/Admin2Input/index.tsx index 9771f90d17..0b206663ee 100644 --- a/app/src/components/domain/Admin2Input/index.tsx +++ b/app/src/components/domain/Admin2Input/index.tsx @@ -314,11 +314,10 @@ function Admin2Input(props: Props) { {strings.buttonLabel} diff --git a/app/src/components/domain/ContactInputsSection/index.tsx b/app/src/components/domain/ContactInputsSection/index.tsx index ae09641c14..c7136cec04 100644 --- a/app/src/components/domain/ContactInputsSection/index.tsx +++ b/app/src/components/domain/ContactInputsSection/index.tsx @@ -48,6 +48,7 @@ interface Props< readOnly?: boolean; withAsteriskOnTitle?: boolean; withRequiredNameAndEmail?: boolean; + withRequiredTitle?:boolean } function ContactInputsSection< @@ -65,6 +66,7 @@ function ContactInputsSection< readOnly, withAsteriskOnTitle, withRequiredNameAndEmail, + withRequiredTitle, } = props; const strings = useTranslation(i18n); @@ -112,6 +114,7 @@ function ContactInputsSection< onChange={setContactFieldValue} disabled={disabled} readOnly={readOnly} + required={withRequiredTitle} /> (pro const [ title, + titleDescription, description, ] = useMemo(() => { if (name === 'readiness_activities') { - return [strings.readinessTitle, strings.readinessDescription]; + return [ + strings.readinessTitle, + strings.readinessTitleDescription, + strings.readinessDescription, + ]; } if (name === 'prepositioning_activities') { - return [strings.prepositioningTitle, strings.prepositioningDescription]; + return [ + strings.prepositioningTitle, + strings.prepositioningTitleDescription, + strings.prepositioningDescription, + ]; } if (name === 'early_action_activities') { return [ strings.earlyActionTitle, - resolveToComponent( - strings.earlyActionDescription, - { - earlyActionDatabaseLink: ( - - {strings.earlyActionDatabaseLinkLabel} - - ), - }, - ), + strings.earlyActionTitleDescription, + strings.earlyActionDescription, + ]; } @@ -123,6 +118,7 @@ function EapOperationActivityListInput(pro [number]; -type PartnerContactFormFields = NonNullable< - PartialEapFullFormType['partner_contacts'] ->[number]; - interface Props { value: PartialEapFullFormType; setFieldValue: (...entries: EntriesAsList) => void; @@ -83,28 +81,17 @@ function Overview(props: Props) { const strings = useTranslation(i18n); const error = getErrorObject(formError); - // NOTE: We dont want some fields to have onChange functionality - const noop = () => { }; - const { - setValue: onPartnerContactChange, - removeValue: onPartnerContactRemove, - } = useFormArray<'partner_contacts', PartnerContactFormFields>( - 'partner_contacts', - setFieldValue, + const objectiveDescription = ( + + {resolveToComponent( + strings.objectiveDescription, + { exampleObjective: {strings.objectiveDescriptionExample} }, + )} + ); - const handlePartnerContactAdd = useCallback(() => { - const newPartnerContactItem: PartnerContactFormFields = { - client_id: randomString(), - }; - - setFieldValue( - (oldValue: PartnerContactFormFields[] | undefined) => ( - [...(oldValue ?? []), newPartnerContactItem] - ), - 'partner_contacts' as const, - ); - }, [setFieldValue]); + // NOTE: We dont want some fields to have onChange functionality + const noop = () => { }; const { setValue: onKeyActorsChange, removeValue: onKeyActorsRemove } = useFormArray<'key_actors', KeyActorsFormFields>( 'key_actors', @@ -243,7 +230,7 @@ function Overview(props: Props) {