// mb-filters.jsx — Filters sheet content (segment, category, radius, region, mode)
function RadiusSlider({ value, onChange, min = 1, max = 15 }) {
const pct = ((value - min) / (max - min)) * 100;
return (
Raio de busca
{value}km
onChange(Number(e.target.value))}
className="mb-range"
style={{ "--pct": pct + "%" }} />
{min} kma partir da sua posição{max} km
);
}
// Mapeia cidade do endereço para região conhecida
function cityToRegion(city) {
if (!city) return null;
const c = city.toLowerCase();
if (c.includes("barra") || c.includes("coqueiro")) return "Barra dos Coqueiros";
if (c.includes("expans")) return "Zona de Expansão";
if (c.includes("aracaju")) return "Aracaju";
return null;
}
function FiltersSheet({ filt, setFilt, addresses = [], segments }) {
const segs = segments || SEGMENTS;
const seg = segs.find(s => s.id === filt.seg);
const set = (patch) => setFilt(f => ({ ...f, ...patch }));
// GPS real
const [gpsPos, setGpsPos] = React.useState(null);
React.useEffect(() => {
if (!navigator.geolocation) return;
navigator.geolocation.getCurrentPosition(
p => setGpsPos({ lat: p.coords.latitude, lng: p.coords.longitude }),
() => setGpsPos(null), { timeout: 4000 }
);
}, []);
const useGPS = () => set({ region: "Todas" });
const useAddress = (addr) => {
const region = cityToRegion(addr.city);
if (region) set({ region });
};
return (
{/* posição de busca */}
Centro da busca
{/* GPS */}
{/* Endereços cadastrados */}
{addresses.length > 0 && addresses.map(addr => {
const region = cityToRegion(addr.city);
const active = filt.region === region;
return (
);
})}
set({ radius: v })} />
{/* region */}
Região
{["Todas", ...REGIONS].map(r => (
set({ region: r })}>{r}
))}
{/* segment */}
Segmento
{segs.map(s => (
set({ seg: filt.seg === s.id ? null : s.id, cat: null })}>{s.question || s.q}
))}
{/* category (depends on segment — usa IDs reais da API) */}
{seg && (() => {
// API segments: categories = [{id, name}]; hardcoded: cats = ["nome"]
const cats = seg.categories && seg.categories.length > 0
? seg.categories.map(c => ({ id: c.id, name: c.name }))
: (seg.cats || []).map(name => ({ id: name, name }));
if (cats.length === 0) return null;
return (
Categoria
{cats.map(c => (
set({ cat: filt.cat === c.id ? null : c.id })}>{c.name}
))}
);
})()}
{/* mode */}
Forma de receber
{[["todos", "Tudo", null], ["delivery", "Entrega", "bike"], ["pickup", "Retirada", "store"]].map(([id, lbl, ic]) => (
set({ mode: id })}>{lbl}
))}
);
}
Object.assign(window, { RadiusSlider, FiltersSheet });