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.
71 lines
2.7 KiB
TypeScript
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' },
|
|
],
|
|
};
|