- labelsUi.* (221+ keys): spot categories/features/types, access, shelter, event types, gear categories/conditions, price/listings, tours, crews, member-visibility, tag categories, spot status. New src/lib/labelKeys.ts holds the shared value->key maps (one source; the five duplicated EVENT_TYPE_KEYS copies now import it). spotStatus.statusTimeAgo() uses the locale date shim. - formatPrice() now takes an optional t so FREE/Trade/Make Offer translate. - Route helpers: skateTime/distanceReadout/maneuver descriptors/formatAge translated (routeUi.*), consumers updated. - Sasquatch: PRO_TIERS labels/badges + summarizeDraft titles/lines/ctas translated (sasquatchUi.*). - Lab *_LABELS/_DESCRIPTIONS maps remain English (documented out of scope).
42 lines
1.8 KiB
TypeScript
42 lines
1.8 KiB
TypeScript
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
|
import { CREW_LOOKING_FOR_LABELS } from '@/lib/types';
|
|
import { CREW_LOOKING_FOR_KEYS } from '@/lib/labelKeys';
|
|
import { useTranslation } from '@/contexts/language';
|
|
import { Megaphone } from 'lucide-react';
|
|
|
|
/**
|
|
* Display a crew's open calls ("looking for a filmer / editor / new members").
|
|
* This is the crew ↔ Lab hiring pipeline: crews broadcast what they need, and
|
|
* matching Lab providers can reach out. Slugs map to Lab scenes.
|
|
*/
|
|
export function CrewLookingForCard({ lookingFor }: { lookingFor: string[] }) {
|
|
const { t } = useTranslation();
|
|
if (!lookingFor || lookingFor.length === 0) return null;
|
|
|
|
return (
|
|
<Card className="border-2 border-fuchsia-500/30 bg-black/90">
|
|
<CardHeader className="pb-3">
|
|
<CardTitle className="flex items-center gap-2 text-lg font-black uppercase text-white">
|
|
<Megaphone className="h-5 w-5 text-fuchsia-400" /> {t('socialUi.lookingFor.title')}
|
|
</CardTitle>
|
|
<p className="text-xs text-gray-400">{t('socialUi.lookingFor.subtitle')}</p>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div className="flex flex-wrap gap-2">
|
|
{lookingFor.map((slug) => {
|
|
const meta = CREW_LOOKING_FOR_LABELS[slug];
|
|
return (
|
|
<span
|
|
key={slug}
|
|
className="inline-flex items-center gap-1.5 rounded-xl border border-fuchsia-500/40 bg-fuchsia-500/10 px-3 py-1.5 text-sm font-bold text-fuchsia-200"
|
|
>
|
|
<span>{meta?.emoji ?? '🛹'}</span>
|
|
{CREW_LOOKING_FOR_KEYS[slug] ? t(CREW_LOOKING_FOR_KEYS[slug]) : (meta?.label ?? slug)}
|
|
</span>
|
|
);
|
|
})}
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
);
|
|
}
|