falta o link de share dos looks por causa do server, add seccao atribuido ao card do look + filtro de cores nos looks
This commit is contained in:
51
src/App.jsx
51
src/App.jsx
@@ -537,7 +537,11 @@ export default function App() {
|
|||||||
createdAt: new Date().getTime(),
|
createdAt: new Date().getTime(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const shareUrl = `${window.location.origin}${window.location.pathname}?shared=${docRef.id}`;
|
// Força o uso do domínio oficial se estiver em localhost (para os links de partilha funcionarem)
|
||||||
|
const baseUrl = (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1')
|
||||||
|
? 'https://mycloset.epvc.pt'
|
||||||
|
: window.location.origin;
|
||||||
|
const shareUrl = `${baseUrl}${window.location.pathname}?shared=${docRef.id}`;
|
||||||
await navigator.clipboard.writeText(shareUrl);
|
await navigator.clipboard.writeText(shareUrl);
|
||||||
setCopiedLookId(look.id);
|
setCopiedLookId(look.id);
|
||||||
setTimeout(() => setCopiedLookId(null), 3000);
|
setTimeout(() => setCopiedLookId(null), 3000);
|
||||||
@@ -1210,9 +1214,17 @@ export default function App() {
|
|||||||
|
|
||||||
<div className="lg:col-span-2 space-y-10">
|
<div className="lg:col-span-2 space-y-10">
|
||||||
{(() => {
|
{(() => {
|
||||||
const filteredBySectionLooks = looks.filter(look =>
|
const filteredBySectionLooks = looks.filter(look => {
|
||||||
activeSectionFilter === 'all' || (look.sections && look.sections.includes(activeSectionFilter))
|
const matchesSection = activeSectionFilter === 'all' || (look.sections && look.sections.includes(activeSectionFilter));
|
||||||
);
|
let matchesColor = true;
|
||||||
|
if (colorFilter) {
|
||||||
|
matchesColor = look.items.some(id => {
|
||||||
|
const item = clothes.find(c => c.id === id);
|
||||||
|
return item && item.color && item.color.includes(colorFilter);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return matchesSection && matchesColor;
|
||||||
|
});
|
||||||
|
|
||||||
const availableLooks = filteredBySectionLooks.filter(look =>
|
const availableLooks = filteredBySectionLooks.filter(look =>
|
||||||
look.items.every(id => {
|
look.items.every(id => {
|
||||||
@@ -1279,6 +1291,18 @@ export default function App() {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
{look.sections && look.sections.length > 0 && (
|
||||||
|
<div className="flex items-center gap-1 mt-4 overflow-x-auto custom-scrollbar no-scrollbar">
|
||||||
|
{look.sections.map(secId => {
|
||||||
|
const sec = sections.find(s => s.id === secId);
|
||||||
|
return sec ? (
|
||||||
|
<span key={sec.id} className="text-[10px] font-bold px-2 py-0.5 rounded-md bg-gray-100 dark:bg-gray-800 text-gray-500 whitespace-nowrap">
|
||||||
|
{sec.emoji} {sec.name}
|
||||||
|
</span>
|
||||||
|
) : null;
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -1287,9 +1311,22 @@ export default function App() {
|
|||||||
<>
|
<>
|
||||||
{/* Looks disponíveis */}
|
{/* Looks disponíveis */}
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
<div className="flex items-center gap-3 px-2">
|
<div className="flex items-center justify-between px-2 flex-wrap gap-4">
|
||||||
<div className="w-2.5 h-2.5 rounded-full bg-green-500"></div>
|
<div className="flex items-center gap-3">
|
||||||
<h3 className="text-2xl font-black tracking-tighter text-inherit">{t('lookHistory')} <span className="text-sm font-bold opacity-40">— {t('availableLooks')} ({availableLooks.length})</span></h3>
|
<div className="w-2.5 h-2.5 rounded-full bg-green-500"></div>
|
||||||
|
<h3 className="text-2xl font-black tracking-tighter text-inherit">{t('lookHistory')} <span className="text-sm font-bold opacity-40">— {t('availableLooks')} ({availableLooks.length})</span></h3>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<Filter size={16} className="text-gray-400" />
|
||||||
|
<select
|
||||||
|
value={colorFilter}
|
||||||
|
onChange={(e) => setColorFilter(e.target.value)}
|
||||||
|
className={`p-2 rounded-xl border-none outline-none focus:ring-2 focus:ring-primary-500 font-bold text-xs ${darkMode ? 'bg-gray-800 text-white' : 'bg-gray-100'}`}
|
||||||
|
>
|
||||||
|
<option value="">{t('all') || 'Todas as cores'}</option>
|
||||||
|
{['Vermelho', 'Azul', 'Amarelo', 'Verde', 'Laranja', 'Roxo', 'Branco', 'Preto', 'Cinzento', 'Bege'].map(c => <option key={c} value={c}>{c}</option>)}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{availableLooks.length > 0 ? (
|
{availableLooks.length > 0 ? (
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||||
|
|||||||
Reference in New Issue
Block a user