SkateSpots/src/lib/craftFields.ts
SkateSpots 0b645d6d67 feat(lab): add Clothing Designer craft (kind 35015)
New data-driven Lab craft, mirroring the artist role: three skill
sections (What You Make [required] / How You Make It / Materials) plus
minimum order, turnaround, size range, samples and customisation extras,
inheriting the shared Lab extras (rate, payment, gallery, reel,
languages, availability, booking).

Wired through types.ts (kind, label/description maps, parse, collective-
capable), labelKeys, useLabProfiles (kind list + dispatch), becomeRoles
(role card), craftFields, LabPage (tab, filters, offer button, empty
state, counts, deep links), LabCrewsStrip, NIP.md, and en/es i18n
(labOptions, becomeRolesUi, labUi). /become/clothing added to the smoke
route list. tsc, eslint, check-i18n, vitest 101/101, build and smoke all
pass.
2026-10-10 19:30:47 +07:00

71 lines
2.7 KiB
TypeScript

import type { LabProfileType } from '@/hooks/useLabProfiles';
/** One craft-specific freeform field shown on the Lab detail page. */
export interface CraftDetailField {
tag: string;
labelKey: string;
}
/**
* Craft-specific freeform fields to surface on a provider's detail page.
*
* Keep this in sync with the `extraFields` declared in `becomeRoles.tsx` (and
* the bespoke become pages): a field with no entry here is stored but invisible.
* Toggle tags (value `"true"`) render as a localized "Yes".
*/
export const CRAFT_DETAIL_FIELDS: Partial<Record<LabProfileType, CraftDetailField[]>> = {
artist: [
{ tag: 'deliverables', labelKey: 'labUi.craftFields.deliverables' },
{ tag: 'turnaround', labelKey: 'labUi.craftFields.turnaround' },
],
graffiti: [
{ tag: 'surfaces', labelKey: 'labUi.craftFields.surfaces' },
{ tag: 'max_size', labelKey: 'labUi.craftFields.maxSize' },
],
musician: [
{ tag: 'set_length', labelKey: 'labUi.craftFields.setLength' },
{ tag: 'tech_rider', labelKey: 'labUi.craftFields.techRider' },
],
judge: [
{ tag: 'travel', labelKey: 'labUi.craftFields.travel' },
{ tag: 'certifications', labelKey: 'labUi.craftFields.certifications' },
],
organizer: [
{ tag: 'insurance', labelKey: 'labUi.craftFields.insurance' },
{ tag: 'permits', labelKey: 'labUi.craftFields.permits' },
],
tattoo: [
{ tag: 'deposit', labelKey: 'labUi.craftFields.deposit' },
{ tag: 'minimum', labelKey: 'labUi.craftFields.minimum' },
],
trainer: [
{ tag: 'modalities', labelKey: 'labUi.craftFields.modalities' },
],
barber: [
{ tag: 'duration', labelKey: 'labUi.craftFields.duration' },
],
designer: [
{ tag: 'minimum', labelKey: 'labUi.craftFields.minimum' },
{ tag: 'turnaround', labelKey: 'labUi.craftFields.turnaround' },
{ tag: 'sizing', labelKey: 'labUi.craftFields.sizing' },
{ tag: 'samples', labelKey: 'labUi.craftFields.samples' },
{ tag: 'customization', labelKey: 'labUi.craftFields.customization' },
],
filmer: [
{ tag: 'turnaround', labelKey: 'labUi.craftFields.turnaround' },
{ tag: 'deliverables', labelKey: 'labUi.craftFields.deliverables' },
{ tag: 'drone', labelKey: 'labUi.craftFields.drone' },
],
editor: [
{ tag: 'turnaround', labelKey: 'labUi.craftFields.turnaround' },
{ tag: 'deliverables', labelKey: 'labUi.craftFields.deliverables' },
],
photographer: [
{ tag: 'turnaround', labelKey: 'labUi.craftFields.turnaround' },
{ tag: 'deliverables', labelKey: 'labUi.craftFields.deliverables' },
],
builder: [
{ tag: 'lead_time', labelKey: 'labUi.craftFields.leadTime' },
{ tag: 'warranty', labelKey: 'labUi.craftFields.warranty' },
],
};