Contact Channels
A form-free contact section listing validated email, phone, and URL channels in a card grid.
Installation
npx payload-components add contact-channelsWhat it installs
Copies 5 source files into your project:
src/blocks/shared/safeUrls.tssharedsrc/blocks/shared/contactUrls.tssrc/blocks/shared/contactFields.tssrc/blocks/ContactChannels/config.tssrc/blocks/ContactChannels/Component.tsx
…and makes 4 edits to wire the block into your project:
| Registers the block | src/collections/Pages/index.ts |
| Maps the renderer | src/blocks/RenderBlocks.tsx |
| Regenerates types | src/payload-types.ts |
| Regenerates the admin import map | src/app/(payload)/admin/importMap.js |
src/collections/Pages/index.tssrc/blocks/RenderBlocks.tsxsrc/payload-types.tssrc/app/(payload)/admin/importMap.jssafeUrls.ts is the shared field core for this family — every variant composes it. Editing it updates each installed block at once, and re-running an install never overwrites a copy you have changed.Re-running the install converges: it detects existing wiring, skips it, and records install state in .payload-components/state.json.
Content model
eyebrow, title, description, and the per-channel shape come from the shared contact base at
src/blocks/shared/contactFields.ts, so a channel validates and renders the same way in every
contact variant. Use this block when the form lives elsewhere — a dedicated contact route, a
Payload form-builder page, or a scheduling tool — and the page only needs to route people.
Each channel's value is validated on save: an email must parse as an address, a phone must be
7–15 digits, and a url must be an HTTPS URL or a same-origin path. A value that would not resolve
to a safe href is rejected in the admin, and the renderer falls back to plain text rather than
emitting a dead link.
Prop
Type
Each item in channels carries:
Prop
Type
Usage
ContactChannels block to its layout.RenderBlocks on the frontend, fully typed — no extra wiring.Requirements
- Target
- payload-website-starter, payload-blocks-app
- Payload
- v3
- Next.js
- 15 / 16
- shadcn UI
- badge
Your project must already expose components.json, src/payload.config.ts — the surfaces payload-components add patches. The CLI verifies this against the support matrix before touching anything.