SkateSpots/src/components/CrewLookingFor.tsx
SkateSpots e357833557 i18n(es): batch 3 part 3 — shared label maps + leftover routing/Sasquatch strings
- 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).
2026-10-02 15:31:27 +07:00

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>
);
}