Affiliation Row
What It Is For
Presents one resolved organizational relationship with its dates, roles, information sources and caller-authorized actions. A presentation component and five exported display helpers render one resolved affiliation. The row has no service reads, local draft or record mutation; it delegates every action to its consumer.
Where It Is Used
Used by the contact affiliation section in Create Contact, Edit Contact and Contact 360; compact density and a replacement title support other resolved relationship lists without fetching records. Create Contact and Edit Contact use the row through the reusable affiliation section and form adapter. Contact 360 uses that section through its affiliations card.
How It Behaves
The row receives presentation-ready facts rather than deciding dates or looking up configuration. It shows the organization name as a link only when a destination is supplied. A title override replaces that line. Type and optional primary and archived badges sit above title, date and status details. Roles retain their supplied order and optional date strings; nonempty source strings become a compact summary. The row renders Edit, Make Primary and Remove according to the callbacks present, without applying a permission or date guard itself.
Its Contract
The consumer resolves names, formats dates and classifies the relationship before rendering. It supplies callbacks only for actions it can perform. The row emits no replacement affiliation and performs no persistence request. Compact density changes spacing rather than the data contract. A custom title can name a person, but action names still refer to the supplied organization; consumers must account for that distinction.
States
Current: A solid card carries the Current word and icon. Past: A dashed muted card carries Past and the supplied ending date. Future: The card says Starts with the supplied date or Upcoming when absent. Primary or archived: Text badges identify Primary and Archived independently. Invalid: The supplied issue appears as an alert beneath role and source summaries. Read only: Omitting all action callbacks removes the action controls.
Accessibility
Edit and More actions have organization-specific accessible names. Roles form a named list; issue text has alert semantics; status uses words and icons, and decorative icons are hidden. Navigation has a visible focus style. Complete keyboard and assistive-technology behavior remains unverified. Accessibility verification is an open obligation recorded in the component accessibility finding.
Open Design Questions
The recorded interaction is observed implementation, with proposed design intent. Component criteria need complete executable bindings and browser accessibility review. Screen owners must wire the registered components into their designs; this slice records usage without changing those screen contracts.