i18n(es): wire StashPage hardcoded strings through t() (30+ literals)
This commit is contained in:
parent
f58b19e310
commit
c7a6421be1
3 changed files with 127 additions and 50 deletions
|
|
@ -6781,6 +6781,44 @@ walletUi: {
|
|||
deleteDescPublic: ' and unlisted from your public showcase',
|
||||
deleteUndone: '. This can’t be undone.',
|
||||
deleteDescGeneric: 'This item will be removed from your stash. This can’t be undone.',
|
||||
listOnMarketplace: 'List on Marketplace',
|
||||
noPriceSet: 'No price set',
|
||||
categoryLabel: 'Category',
|
||||
photosLabel: 'Photos',
|
||||
willingToSell: 'Willing to Sell',
|
||||
willingToTrade: 'Willing to Trade',
|
||||
whereIsThisItem: 'Where is this item?',
|
||||
visibilityLabel: 'Visibility',
|
||||
visibilityPrivateOnlyYou: 'Private - Only you',
|
||||
visibilityFriendsMutual: 'Friends - Mutual follows',
|
||||
visibilityPublicAnyone: 'Public - Anyone',
|
||||
visibilityFriends: 'Friends',
|
||||
brandLabel: 'Brand',
|
||||
sizeLabel: 'Size',
|
||||
descriptionLabel: 'Description',
|
||||
conditionLabel: 'Condition',
|
||||
itemName: 'Item Name',
|
||||
saveChanges: 'Save Changes',
|
||||
listItemDialogTitle: 'List "{{title}}"',
|
||||
pickUpWhere: 'Where can buyers pick up this item?',
|
||||
linkToSpot: 'Link to a Skate Spot',
|
||||
linkToSpotDesc: 'Best for local sales • Shows on spot page & map',
|
||||
recommended: 'Recommended',
|
||||
noSpecificSpot: 'No Specific Spot',
|
||||
noSpecificSpotDesc: 'Visible on Marketplace page only',
|
||||
tipLinkedSpots: '💡 Tip: Listings linked to spots are easier to find for local skaters.',
|
||||
anyoneCanSee: 'Anyone can see these on your profile.',
|
||||
seeWhatOthersSee: 'See what others see',
|
||||
inventory: 'Inventory',
|
||||
publicWantsNote: 'Public wants are posted to the Marketplace as “wanted” ads, so sellers can find you.',
|
||||
howItWorks: 'How it works',
|
||||
tapToMarketplace: 'Tap to go to Marketplace →',
|
||||
viewWishlist: 'View Wishlist',
|
||||
tipEditItems: 'Edit items with the pen button',
|
||||
tipListForSale: 'List for sale with the store button',
|
||||
tipAddPhotos: 'Add photos for better trade offers',
|
||||
tipKeySyncs: 'Nostr key syncs to all devices',
|
||||
itemsReadyToSell: '{{count}} item(s) ready to sell',
|
||||
},
|
||||
},
|
||||
cardUi: {
|
||||
|
|
|
|||
|
|
@ -6781,6 +6781,44 @@ walletUi: {
|
|||
deleteDescPublic: ' y se retirará de tu escaparate público',
|
||||
deleteUndone: '. Esto no se puede deshacer.',
|
||||
deleteDescGeneric: 'Este artículo se quitará de tu stash. Esto no se puede deshacer.',
|
||||
listOnMarketplace: 'Publicar en el Marketplace',
|
||||
noPriceSet: 'Sin precio',
|
||||
categoryLabel: 'Categoría',
|
||||
photosLabel: 'Fotos',
|
||||
willingToSell: 'Dispuesto a vender',
|
||||
willingToTrade: 'Dispuesto a intercambiar',
|
||||
whereIsThisItem: '¿Dónde está este artículo?',
|
||||
visibilityLabel: 'Visibilidad',
|
||||
visibilityPrivateOnlyYou: 'Privado - Solo tú',
|
||||
visibilityFriendsMutual: 'Amigos - Seguidores mutuos',
|
||||
visibilityPublicAnyone: 'Público - Cualquiera',
|
||||
visibilityFriends: 'Amigos',
|
||||
brandLabel: 'Marca',
|
||||
sizeLabel: 'Medida',
|
||||
descriptionLabel: 'Descripción',
|
||||
conditionLabel: 'Estado',
|
||||
itemName: 'Nombre del artículo',
|
||||
saveChanges: 'Guardar cambios',
|
||||
listItemDialogTitle: 'Publicar "{{title}}"',
|
||||
pickUpWhere: '¿Dónde pueden recogerlo los compradores?',
|
||||
linkToSpot: 'Vincular a un Spot',
|
||||
linkToSpotDesc: 'Mejor para ventas locales • Aparece en la página del spot y el mapa',
|
||||
recommended: 'Recomendado',
|
||||
noSpecificSpot: 'Sin spot concreto',
|
||||
noSpecificSpotDesc: 'Visible solo en la página del Marketplace',
|
||||
tipLinkedSpots: '💡 Consejo: los anuncios vinculados a spots son más fáciles de encontrar para los skaters locales.',
|
||||
anyoneCanSee: 'Cualquiera puede verlos en tu perfil.',
|
||||
seeWhatOthersSee: 'Ver lo que ven los demás',
|
||||
inventory: 'Inventario',
|
||||
publicWantsNote: 'Lo que buscas públicamente se publica en el Marketplace como anuncios de “busco”, para que los vendedores te encuentren.',
|
||||
howItWorks: 'Cómo funciona',
|
||||
tapToMarketplace: 'Toca para ir al Marketplace →',
|
||||
viewWishlist: 'Ver wishlist',
|
||||
tipEditItems: 'Edita artículos con el botón del lápiz',
|
||||
tipListForSale: 'Pon a la venta con el botón de la tienda',
|
||||
tipAddPhotos: 'Añade fotos para mejores ofertas de intercambio',
|
||||
tipKeySyncs: 'Tu clave Nostr se sincroniza en todos los dispositivos',
|
||||
itemsReadyToSell: '{{count}} artículo(s) listos para vender',
|
||||
},
|
||||
},
|
||||
cardUi: {
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ function StashItemCard({ item, onEdit, onDelete, onListOnMarketplace, isWTB = fa
|
|||
</div>
|
||||
{isWTB && (
|
||||
<div className="absolute top-3 left-2 z-10">
|
||||
<Badge className="bg-cyan-500 text-black text-[10px] font-black uppercase"><Heart className="h-2.5 w-2.5 mr-0.5" />Wishlist</Badge>
|
||||
<Badge className="bg-cyan-500 text-black text-[10px] font-black uppercase"><Heart className="h-2.5 w-2.5 mr-0.5" />{t('walletUi.stash.wishlist')}</Badge>
|
||||
</div>
|
||||
)}
|
||||
<div className="absolute top-3 right-2 z-10">
|
||||
|
|
@ -242,7 +242,7 @@ function StashItemCard({ item, onEdit, onDelete, onListOnMarketplace, isWTB = fa
|
|||
<div className={cn('absolute inset-0 bg-black/85 transition-all duration-200 flex flex-col items-center justify-center gap-2 backdrop-blur-sm', selectable ? 'hidden' : 'opacity-100 md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100')}>
|
||||
<div className="flex items-center gap-2">
|
||||
<Button size="sm" variant="outline" className="h-8 border-white/30" onClick={(e) => { e.stopPropagation(); onEdit(); }}>
|
||||
<Edit3 className="h-3.5 w-3.5 mr-1" />Edit
|
||||
<Edit3 className="h-3.5 w-3.5 mr-1" />{t('common.edit')}
|
||||
</Button>
|
||||
<Button size="sm" variant="destructive" className="h-8" onClick={(e) => { e.stopPropagation(); onDelete(); }}>
|
||||
<Trash2 className="h-3.5 w-3.5" />
|
||||
|
|
@ -251,7 +251,7 @@ function StashItemCard({ item, onEdit, onDelete, onListOnMarketplace, isWTB = fa
|
|||
{canListOnMarketplace && onListOnMarketplace && (
|
||||
<Button size="sm" className="h-8 bg-[#ff6600] hover:bg-[#ff6600]/90 text-black font-bold"
|
||||
onClick={(e) => { e.stopPropagation(); onListOnMarketplace(); }}>
|
||||
<Store className="h-3 w-3 mr-1" />List on Marketplace
|
||||
<Store className="h-3 w-3 mr-1" />{t('walletUi.stash.listOnMarketplace')}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
|
|
@ -287,10 +287,10 @@ function StashItemCard({ item, onEdit, onDelete, onListOnMarketplace, isWTB = fa
|
|||
{usdValue && <span className="text-[10px] text-muted-foreground">(~${usdValue.toFixed(0)})</span>}
|
||||
</div>
|
||||
) : (
|
||||
<span className="text-xs text-gray-500">No price set</span>
|
||||
<span className="text-xs text-gray-500">{t('walletUi.stash.noPriceSet')}</span>
|
||||
)}
|
||||
<div className="flex items-center gap-1">
|
||||
{item.visibility === 'private' && <Tooltip><TooltipTrigger><Lock className="h-3.5 w-3.5 text-red-400/60" /></TooltipTrigger><TooltipContent>Private</TooltipContent></Tooltip>}
|
||||
{item.visibility === 'private' && <Tooltip><TooltipTrigger><Lock className="h-3.5 w-3.5 text-red-400/60" /></TooltipTrigger><TooltipContent>{t('walletUi.stash.visibilityPrivate')}</TooltipContent></Tooltip>}
|
||||
{item.visibility === 'friends' && <Tooltip><TooltipTrigger><Users className="h-3.5 w-3.5 text-blue-400/60" /></TooltipTrigger><TooltipContent>{t('walletUi.stash.friendsOnly')}</TooltipContent></Tooltip>}
|
||||
{item.willingToTrade && <Badge variant="outline" className="text-[9px] h-5 px-1 border-cyan-500/40 text-cyan-400"><ArrowRightLeft className="h-2.5 w-2.5" /></Badge>}
|
||||
{item.willingToSell && !isWTB && <Badge variant="outline" className="text-[9px] h-5 px-1 border-green-500/40 text-green-400"><Zap className="h-2.5 w-2.5" /></Badge>}
|
||||
|
|
@ -351,7 +351,7 @@ function AddItemDialog({ onAdd, mode = 'stash', trigger }: { onAdd: (item: Omit<
|
|||
const defaultTrigger = isWTB ? (
|
||||
<Button variant="outline" className="gap-2 border-cyan-500/50 text-cyan-400 hover:bg-cyan-500/10"><Heart className="h-4 w-4" />{t('walletUi.stash.addToWishlist')}</Button>
|
||||
) : (
|
||||
<Button className="gap-2 bg-gradient-to-r from-[#ff0040] to-[#ff6600] hover:opacity-90 border-0 shadow-lg shadow-[#ff0040]/20"><Plus className="h-4 w-4" />Add to Stash</Button>
|
||||
<Button className="gap-2 bg-gradient-to-r from-[#ff0040] to-[#ff6600] hover:opacity-90 border-0 shadow-lg shadow-[#ff0040]/20"><Plus className="h-4 w-4" />{t('walletUi.stash.addItemToStash')}</Button>
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
@ -373,7 +373,7 @@ function AddItemDialog({ onAdd, mode = 'stash', trigger }: { onAdd: (item: Omit<
|
|||
</div>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<div className="space-y-2">
|
||||
<Label>Category *</Label>
|
||||
<Label>{t('walletUi.stash.categoryLabel')} *</Label>
|
||||
<Select value={formData.category} onValueChange={(v) => setFormData({ ...formData, category: v as StashItem['category'] })}>
|
||||
<SelectTrigger className="bg-black/50 border-white/20"><SelectValue /></SelectTrigger>
|
||||
<SelectContent>{Object.entries(STASH_CATEGORIES).map(([key, cat]) => <SelectItem key={key} value={key}>{cat.emoji} {cat.label}</SelectItem>)}</SelectContent>
|
||||
|
|
@ -403,7 +403,7 @@ function AddItemDialog({ onAdd, mode = 'stash', trigger }: { onAdd: (item: Omit<
|
|||
</div>
|
||||
{!isWTB && (
|
||||
<div className="space-y-2">
|
||||
<Label>Photos</Label>
|
||||
<Label>{t('walletUi.stash.photosLabel')}</Label>
|
||||
<div className="space-y-3">
|
||||
{formData.images && formData.images.length > 0 && (
|
||||
<div className="grid grid-cols-3 gap-2">
|
||||
|
|
@ -429,7 +429,7 @@ function AddItemDialog({ onAdd, mode = 'stash', trigger }: { onAdd: (item: Omit<
|
|||
<div className="space-y-3">
|
||||
{!isWTB && (
|
||||
<div className="flex items-center justify-between p-3 rounded-lg bg-green-500/10 border border-green-500/30">
|
||||
<div className="flex items-center gap-2"><Zap className="h-4 w-4 text-green-400" /><Label>Willing to Sell</Label></div>
|
||||
<div className="flex items-center gap-2"><Zap className="h-4 w-4 text-green-400" /><Label>{t('walletUi.stash.willingToSell')}</Label></div>
|
||||
<Switch checked={formData.willingToSell} onCheckedChange={(v) => setFormData({ ...formData, willingToSell: v })} />
|
||||
</div>
|
||||
)}
|
||||
|
|
@ -440,7 +440,7 @@ function AddItemDialog({ onAdd, mode = 'stash', trigger }: { onAdd: (item: Omit<
|
|||
</div>
|
||||
{!isWTB && (
|
||||
<div className="space-y-2">
|
||||
<Label className="flex items-center gap-2"><MapPin className="h-4 w-4 text-[#ff6600]" />Where is this item?</Label>
|
||||
<Label className="flex items-center gap-2"><MapPin className="h-4 w-4 text-[#ff6600]" />{t('walletUi.stash.whereIsThisItem')}</Label>
|
||||
<div className="grid grid-cols-3 gap-2">
|
||||
{([ { value: 'home', label: '🏠 Home' }, { value: 'car', label: '🚗 Car' }, { value: 'backpack', label: '🎒 Backpack' }, { value: 'wardrobe', label: '🚪 Wardrobe' }, { value: 'van', label: '🚐 Van' }, { value: 'skatepark', label: '🛹 Skatepark' }, { value: 'friends', label: "👫 Friend's" }, { value: 'parents', label: "👨👩👦 Parents'" }, { value: 'warehouse', label: '🏭 Warehouse' }, { value: 'storage_unit', label: '🔒 Storage Unit' }, { value: 'sponsor', label: '🤝 Sponsor' }, { value: 'other', label: '📦 Other' }, ] as const).map(({ value, label }) => (
|
||||
<button key={value} type="button" onClick={() => setFormData({ ...formData, storageLocation: value })}
|
||||
|
|
@ -452,13 +452,13 @@ function AddItemDialog({ onAdd, mode = 'stash', trigger }: { onAdd: (item: Omit<
|
|||
</div>
|
||||
)}
|
||||
<div className="space-y-2">
|
||||
<Label>Visibility</Label>
|
||||
<Label>{t('walletUi.stash.visibilityLabel')}</Label>
|
||||
<Select value={formData.visibility} onValueChange={(v) => setFormData({ ...formData, visibility: v as StashItem['visibility'] })}>
|
||||
<SelectTrigger className="bg-black/50 border-white/20"><SelectValue /></SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="private"><div className="flex items-center gap-2"><Lock className="h-3.5 w-3.5 text-red-400" /><span>Private - Only you</span></div></SelectItem>
|
||||
<SelectItem value="friends"><div className="flex items-center gap-2"><Users className="h-3.5 w-3.5 text-blue-400" /><span>Friends - Mutual follows</span></div></SelectItem>
|
||||
<SelectItem value="public"><div className="flex items-center gap-2"><Globe className="h-3.5 w-3.5 text-green-400" /><span>Public - Anyone</span></div></SelectItem>
|
||||
<SelectItem value="private"><div className="flex items-center gap-2"><Lock className="h-3.5 w-3.5 text-red-400" /><span>{t('walletUi.stash.visibilityPrivateOnlyYou')}</span></div></SelectItem>
|
||||
<SelectItem value="friends"><div className="flex items-center gap-2"><Users className="h-3.5 w-3.5 text-blue-400" /><span>{t('walletUi.stash.visibilityFriendsMutual')}</span></div></SelectItem>
|
||||
<SelectItem value="public"><div className="flex items-center gap-2"><Globe className="h-3.5 w-3.5 text-green-400" /><span>{t('walletUi.stash.visibilityPublicAnyone')}</span></div></SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
|
|
@ -471,7 +471,7 @@ function AddItemDialog({ onAdd, mode = 'stash', trigger }: { onAdd: (item: Omit<
|
|||
</div>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
<DialogClose asChild><Button variant="outline" className="border-white/20">Cancel</Button></DialogClose>
|
||||
<DialogClose asChild><Button variant="outline" className="border-white/20">{t('common.cancel')}</Button></DialogClose>
|
||||
<Button onClick={handleSubmit} disabled={!formData.title || isUploading} className={cn(isWTB ? "bg-cyan-500 hover:bg-cyan-600 text-black" : "bg-[#ff6600] hover:bg-[#ff6600]/90")}>
|
||||
{isWTB ? <><Heart className="h-4 w-4 mr-2" />{t('walletUi.stash.addToWishlist')}</> : <><Plus className="h-4 w-4 mr-2" />{t('walletUi.stash.addItem')}</>}
|
||||
</Button>
|
||||
|
|
@ -519,19 +519,19 @@ function EditItemDialog({ item, open, onOpenChange, onSave }: { item: StashItem;
|
|||
</DialogHeader>
|
||||
<div className="space-y-4 py-4">
|
||||
<div className="space-y-2">
|
||||
<Label>Item Name *</Label>
|
||||
<Label>{t('walletUi.stash.itemName')} *</Label>
|
||||
<Input value={formData.title || ''} onChange={(e) => setFormData({ ...formData, title: e.target.value })} className="bg-black/50 border-white/20" />
|
||||
</div>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<div className="space-y-2">
|
||||
<Label>Category *</Label>
|
||||
<Label>{t('walletUi.stash.categoryLabel')} *</Label>
|
||||
<Select value={formData.category} onValueChange={(v) => setFormData({ ...formData, category: v as StashItem['category'] })}>
|
||||
<SelectTrigger className="bg-black/50 border-white/20"><SelectValue /></SelectTrigger>
|
||||
<SelectContent>{Object.entries(STASH_CATEGORIES).map(([key, cat]) => <SelectItem key={key} value={key}>{cat.emoji} {cat.label}</SelectItem>)}</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="space-y-2">
|
||||
<Label>Condition</Label>
|
||||
<Label>{t('walletUi.stash.conditionLabel')}</Label>
|
||||
<Select value={formData.condition} onValueChange={(v) => setFormData({ ...formData, condition: v as StashItem['condition'] })}>
|
||||
<SelectTrigger className="bg-black/50 border-white/20"><SelectValue /></SelectTrigger>
|
||||
<SelectContent>{Object.entries(CONDITION_LABELS).map(([key, cond]) => <SelectItem key={key} value={key}>{cond.label}</SelectItem>)}</SelectContent>
|
||||
|
|
@ -539,16 +539,16 @@ function EditItemDialog({ item, open, onOpenChange, onSave }: { item: StashItem;
|
|||
</div>
|
||||
</div>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<div className="space-y-2"><Label>Brand</Label><Input value={formData.brand || ''} onChange={(e) => setFormData({ ...formData, brand: e.target.value })} className="bg-black/50 border-white/20" /></div>
|
||||
<div className="space-y-2"><Label>Size</Label><Input value={formData.size || ''} onChange={(e) => setFormData({ ...formData, size: e.target.value })} className="bg-black/50 border-white/20" /></div>
|
||||
<div className="space-y-2"><Label>{t('walletUi.stash.brandLabel')}</Label><Input value={formData.brand || ''} onChange={(e) => setFormData({ ...formData, brand: e.target.value })} className="bg-black/50 border-white/20" /></div>
|
||||
<div className="space-y-2"><Label>{t('walletUi.stash.sizeLabel')}</Label><Input value={formData.size || ''} onChange={(e) => setFormData({ ...formData, size: e.target.value })} className="bg-black/50 border-white/20" /></div>
|
||||
</div>
|
||||
<div className="space-y-2">
|
||||
<Label>Description</Label>
|
||||
<Label>{t('walletUi.stash.descriptionLabel')}</Label>
|
||||
<Textarea value={formData.description || ''} onChange={(e) => setFormData({ ...formData, description: e.target.value })} rows={3} className="bg-black/50 border-white/20" />
|
||||
</div>
|
||||
{!isWTB && (
|
||||
<div className="space-y-2">
|
||||
<Label>Photos</Label>
|
||||
<Label>{t('walletUi.stash.photosLabel')}</Label>
|
||||
<div className="space-y-3">
|
||||
{formData.images && formData.images.length > 0 && (
|
||||
<div className="grid grid-cols-3 gap-2">
|
||||
|
|
@ -574,23 +574,23 @@ function EditItemDialog({ item, open, onOpenChange, onSave }: { item: StashItem;
|
|||
<div className="space-y-3">
|
||||
{!isWTB && (
|
||||
<div className="flex items-center justify-between p-3 rounded-lg bg-green-500/10 border border-green-500/30">
|
||||
<div className="flex items-center gap-2"><Zap className="h-4 w-4 text-green-400" /><Label>Willing to Sell</Label></div>
|
||||
<div className="flex items-center gap-2"><Zap className="h-4 w-4 text-green-400" /><Label>{t('walletUi.stash.willingToSell')}</Label></div>
|
||||
<Switch checked={formData.willingToSell} onCheckedChange={(v) => setFormData({ ...formData, willingToSell: v })} />
|
||||
</div>
|
||||
)}
|
||||
<div className="flex items-center justify-between p-3 rounded-lg bg-cyan-500/10 border border-cyan-500/30">
|
||||
<div className="flex items-center gap-2"><ArrowRightLeft className="h-4 w-4 text-cyan-400" /><Label>Willing to Trade</Label></div>
|
||||
<div className="flex items-center gap-2"><ArrowRightLeft className="h-4 w-4 text-cyan-400" /><Label>{t('walletUi.stash.willingToTrade')}</Label></div>
|
||||
<Switch checked={formData.willingToTrade} onCheckedChange={(v) => setFormData({ ...formData, willingToTrade: v })} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-2">
|
||||
<Label>Visibility</Label>
|
||||
<Label>{t('walletUi.stash.visibilityLabel')}</Label>
|
||||
<Select value={formData.visibility} onValueChange={(v) => setFormData({ ...formData, visibility: v as StashItem['visibility'] })}>
|
||||
<SelectTrigger className="bg-black/50 border-white/20"><SelectValue /></SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="private"><div className="flex items-center gap-2"><Lock className="h-3.5 w-3.5 text-red-400" /><span>Private</span></div></SelectItem>
|
||||
<SelectItem value="friends"><div className="flex items-center gap-2"><Users className="h-3.5 w-3.5 text-blue-400" /><span>Friends</span></div></SelectItem>
|
||||
<SelectItem value="public"><div className="flex items-center gap-2"><Globe className="h-3.5 w-3.5 text-green-400" /><span>Public</span></div></SelectItem>
|
||||
<SelectItem value="private"><div className="flex items-center gap-2"><Lock className="h-3.5 w-3.5 text-red-400" /><span>{t('walletUi.stash.visibilityPrivate')}</span></div></SelectItem>
|
||||
<SelectItem value="friends"><div className="flex items-center gap-2"><Users className="h-3.5 w-3.5 text-blue-400" /><span>{t('walletUi.stash.visibilityFriends')}</span></div></SelectItem>
|
||||
<SelectItem value="public"><div className="flex items-center gap-2"><Globe className="h-3.5 w-3.5 text-green-400" /><span>{t('walletUi.stash.visibilityPublic')}</span></div></SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
|
|
@ -603,9 +603,9 @@ function EditItemDialog({ item, open, onOpenChange, onSave }: { item: StashItem;
|
|||
</div>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
<DialogClose asChild><Button variant="outline" className="border-white/20">Cancel</Button></DialogClose>
|
||||
<DialogClose asChild><Button variant="outline" className="border-white/20">{t('common.cancel')}</Button></DialogClose>
|
||||
<Button onClick={() => { if (!formData.title || !formData.category) return; onSave(formData); onOpenChange(false); }} disabled={!formData.title || isUploading} className="bg-[#ff6600] hover:bg-[#ff6600]/90">
|
||||
<Edit3 className="h-4 w-4 mr-2" />Save Changes
|
||||
<Edit3 className="h-4 w-4 mr-2" />{t('walletUi.stash.saveChanges')}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
|
|
@ -617,27 +617,28 @@ function EditItemDialog({ item, open, onOpenChange, onSave }: { item: StashItem;
|
|||
function ListAtSpotDialog({ item, open, onOpenChange, onSelectSpot }: {
|
||||
item: StashItem; open: boolean; onOpenChange: (open: boolean) => void; onSelectSpot: (spotId: string | null) => void;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
<DialogContent className="max-w-md bg-black/95 border-2 border-[#ff6600]/40">
|
||||
<DialogHeader>
|
||||
<DialogTitle className="flex items-center gap-2 text-white"><Store className="h-5 w-5 text-[#ff6600]" />List "{item.title}"</DialogTitle>
|
||||
<DialogDescription className="text-muted-foreground">Where can buyers pick up this item?</DialogDescription>
|
||||
<DialogTitle className="flex items-center gap-2 text-white"><Store className="h-5 w-5 text-[#ff6600]" />{t('walletUi.stash.listItemDialogTitle', { title: item.title })}</DialogTitle>
|
||||
<DialogDescription className="text-muted-foreground">{t('walletUi.stash.pickUpWhere')}</DialogDescription>
|
||||
</DialogHeader>
|
||||
<div className="py-4 space-y-4">
|
||||
<div className="space-y-3">
|
||||
<Button variant="outline" className="w-full justify-start h-auto py-4 border-[#ff6600]/50 hover:bg-[#ff6600]/10 hover:border-[#ff6600]" onClick={() => onSelectSpot('pick')}>
|
||||
<MapPin className="h-6 w-6 mr-3 text-[#ff6600]" />
|
||||
<div className="text-left flex-1"><div className="font-bold text-white">Link to a Skate Spot</div><div className="text-xs text-muted-foreground">Best for local sales • Shows on spot page & map</div></div>
|
||||
<Badge className="bg-[#ff6600]/20 text-[#ff6600] border-[#ff6600]/50">Recommended</Badge>
|
||||
<div className="text-left flex-1"><div className="font-bold text-white">{t('walletUi.stash.linkToSpot')}</div><div className="text-xs text-muted-foreground">{t('walletUi.stash.linkToSpotDesc')}</div></div>
|
||||
<Badge className="bg-[#ff6600]/20 text-[#ff6600] border-[#ff6600]/50">{t('walletUi.stash.recommended')}</Badge>
|
||||
</Button>
|
||||
<Button variant="outline" className="w-full justify-start h-auto py-4 border-gray-600 hover:bg-gray-800" onClick={() => onSelectSpot(null)}>
|
||||
<Globe className="h-6 w-6 mr-3 text-gray-400" />
|
||||
<div className="text-left"><div className="font-bold text-white">No Specific Spot</div><div className="text-xs text-muted-foreground">Visible on Marketplace page only</div></div>
|
||||
<div className="text-left"><div className="font-bold text-white">{t('walletUi.stash.noSpecificSpot')}</div><div className="text-xs text-muted-foreground">{t('walletUi.stash.noSpecificSpotDesc')}</div></div>
|
||||
</Button>
|
||||
</div>
|
||||
<div className="p-3 rounded-lg bg-blue-500/10 border border-blue-500/30 text-xs">
|
||||
<p className="text-blue-300"><strong>💡 Tip:</strong> Listings linked to spots are easier to find for local skaters.</p>
|
||||
<p className="text-blue-300">{t('walletUi.stash.tipLinkedSpots')}</p>
|
||||
</div>
|
||||
</div>
|
||||
</DialogContent>
|
||||
|
|
@ -1008,10 +1009,10 @@ export default function StashPage() {
|
|||
))}
|
||||
{publicItems.length > 4 && <span className="text-[10px] text-gray-500">+{publicItems.length - 4}</span>}
|
||||
</div>
|
||||
<p className="text-[11px] leading-snug text-gray-500">Anyone can see these on your profile.</p>
|
||||
<p className="text-[11px] leading-snug text-gray-500">{t('walletUi.stash.anyoneCanSee')}</p>
|
||||
<Link to={profileHref} className="block">
|
||||
<Button size="sm" variant="outline" className="w-full gap-1.5 border-emerald-500/30 text-emerald-300 hover:bg-emerald-500/10">
|
||||
<Globe className="h-3.5 w-3.5" /> See what others see
|
||||
<Globe className="h-3.5 w-3.5" /> {t('walletUi.stash.seeWhatOthersSee')}
|
||||
</Button>
|
||||
</Link>
|
||||
</div>
|
||||
|
|
@ -1162,7 +1163,7 @@ export default function StashPage() {
|
|||
</SelectContent>
|
||||
</Select>
|
||||
<Select value={filterSort} onValueChange={(v) => setFilterSort(v as typeof filterSort)}>
|
||||
<SelectTrigger className="w-[110px] h-8 bg-white/4 border-white/8 text-sm flex-shrink-0" aria-label="Sort"><SelectValue /></SelectTrigger>
|
||||
<SelectTrigger className="w-[110px] h-8 bg-white/4 border-white/8 text-sm flex-shrink-0" aria-label={t('common.sort')}><SelectValue /></SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="recent">{t('walletUi.stash.sortNewest')}</SelectItem>
|
||||
<SelectItem value="value">{t('walletUi.stash.sortValue')}</SelectItem>
|
||||
|
|
@ -1291,7 +1292,7 @@ export default function StashPage() {
|
|||
{/* Card header */}
|
||||
<div className="px-5 pt-5 pb-4 border-b border-white/8">
|
||||
<div className="flex items-center justify-between mb-4">
|
||||
<span className="text-[11px] font-black uppercase tracking-widest text-gray-500">Inventory</span>
|
||||
<span className="text-[11px] font-black uppercase tracking-widest text-gray-500">{t('walletUi.stash.inventory')}</span>
|
||||
<Trophy className="h-3.5 w-3.5 text-amber-400/60" />
|
||||
</div>
|
||||
{/* Big stat */}
|
||||
|
|
@ -1407,13 +1408,13 @@ export default function StashPage() {
|
|||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center gap-2">
|
||||
<Heart className="h-4 w-4 text-cyan-400" />
|
||||
<span className="text-sm font-black text-cyan-300 uppercase tracking-wide">Wishlist</span>
|
||||
<span className="text-sm font-black text-cyan-300 uppercase tracking-wide">{t('walletUi.stash.wishlist')}</span>
|
||||
</div>
|
||||
<span className="text-2xl font-black text-cyan-400">{wishlistItems.length}</span>
|
||||
</div>
|
||||
<p className="text-[11px] text-gray-500 leading-relaxed">Public wants are posted to the Marketplace as “wanted” ads, so sellers can find you.</p>
|
||||
<p className="text-[11px] text-gray-500 leading-relaxed">{t('walletUi.stash.publicWantsNote')}</p>
|
||||
<button onClick={() => setActiveTab('wishlist')} className="w-full text-xs font-black text-cyan-400 hover:text-cyan-300 transition-colors py-1.5 rounded-lg bg-cyan-500/8 hover:bg-cyan-500/15 border border-cyan-500/20 uppercase tracking-wider">
|
||||
View Wishlist
|
||||
{t('walletUi.stash.viewWishlist')}
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
|
|
@ -1426,13 +1427,13 @@ export default function StashPage() {
|
|||
|
||||
{/* How it works */}
|
||||
<div className="rounded-2xl border border-white/6 bg-white/2 p-4">
|
||||
<p className="text-[10px] font-black uppercase tracking-widest text-gray-500 mb-3">How it works</p>
|
||||
<p className="text-[10px] font-black uppercase tracking-widest text-gray-500 mb-3">{t('walletUi.stash.howItWorks')}</p>
|
||||
<ul className="space-y-2">
|
||||
{[
|
||||
{ icon: '✏️', text: 'Edit items with the pen button' },
|
||||
{ icon: '🏪', text: 'List for sale with the store button' },
|
||||
{ icon: '📸', text: 'Add photos for better trade offers' },
|
||||
{ icon: '🔑', text: 'Nostr key syncs to all devices' },
|
||||
{ icon: '✏️', text: t('walletUi.stash.tipEditItems') },
|
||||
{ icon: '🏪', text: t('walletUi.stash.tipListForSale') },
|
||||
{ icon: '📸', text: t('walletUi.stash.tipAddPhotos') },
|
||||
{ icon: '🔑', text: t('walletUi.stash.tipKeySyncs') },
|
||||
].map(({ icon, text }) => (
|
||||
<li key={text} className="flex items-start gap-2.5">
|
||||
<span className="text-sm flex-shrink-0 mt-0.5">{icon}</span>
|
||||
|
|
@ -1453,8 +1454,8 @@ export default function StashPage() {
|
|||
<ShoppingCart className="h-5 w-5 text-white" />
|
||||
</div>
|
||||
<div className="flex-1 min-w-0">
|
||||
<p className="text-sm font-black text-white leading-none">{hasForSale} item{hasForSale > 1 ? 's' : ''} ready to sell</p>
|
||||
<p className="text-xs text-[#ff6600]/80 mt-0.5">Tap to go to Marketplace →</p>
|
||||
<p className="text-sm font-black text-white leading-none">{t('walletUi.stash.itemsReadyToSell', { count: hasForSale })}</p>
|
||||
<p className="text-xs text-[#ff6600]/80 mt-0.5">{t('walletUi.stash.tapToMarketplace')}</p>
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
|
|
|
|||
Loading…
Reference in a new issue