Fix search result click and FAB positioning

- Fix setMainFilter/setSubFilter -> setMainFilters/setSubFilters (array state)
- Move FABs lower on screen (top: 180px)
- Add version indicator in footer
- Fix search dropdown z-index

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
SocioWire 2026-01-11 20:43:23 +00:00
parent add2f20b39
commit dac9f620d0
6 changed files with 42 additions and 20 deletions

View File

@ -240,7 +240,7 @@ export default function App() {
<footer className="sw-footer">
<div className="sw-footer-inner">
<div className="sw-footer-brand">SOCIOWIRE</div>
<div className="sw-footer-brand">© Sociowire v0.0010</div>
<div className="sw-footer-brand">© Sociowire v0.0016</div>
<div id="sw-weather-debug" style={{color: '#0ea5e9', fontSize: '10px'}}></div>
<nav className="sw-footer-nav" aria-label="Site">
<a href="/">{t('nav.home')}</a>

View File

@ -632,7 +632,7 @@ export default function MapView({
useEffect(() => {
if (!bottomCategories.length) return;
if (!subFilter || !bottomCategories.includes(subFilter)) setSubFilter("All");
if (!subFilter || !bottomCategories.includes(subFilter)) setSubFilters([]);
}, [mainFilter, bottomCategories, subFilter]);
useEffect(() => {
@ -1045,8 +1045,12 @@ export default function MapView({
};
const handlePickSuggestion = (item, { zoom }) => {
console.log('[handlePickSuggestion] item:', item?.kind, item?.post_id, item?.coords);
const map = mapRef.current;
if (!map) return;
if (!map) {
console.warn('[handlePickSuggestion] No map ref!');
return;
}
// Extract coords from item
let coords = null;
@ -1068,8 +1072,8 @@ export default function MapView({
if (looksLikePost) {
skipAutoZoomRef.current = true;
setSearchQuery("");
setMainFilter("All");
setSubFilter("All");
setMainFilters([]);
setSubFilters([]);
setTimeHours(336); // 2 weeks
const postId = Number(raw?.post_id ?? raw?.id ?? item?.id ?? 0);
@ -1125,14 +1129,18 @@ export default function MapView({
})();
const tryOpen = async (attempt = 0) => {
console.log('[tryOpen] attempt:', attempt, 'postId:', postId, 'rawUrl:', rawUrl);
let post = null;
if (Number.isFinite(postId) && postId > 0) {
post = await fetchPostById(postId);
console.log('[tryOpen] fetchPostById result:', post?.id, post?.title?.substring(0, 30));
}
if (!post && rawUrl) {
post = await fetchPostByUrl(rawUrl);
console.log('[tryOpen] fetchPostByUrl result:', post?.id);
}
if (post) {
console.log('[tryOpen] Opening post:', post.id);
pendingOpenPostIdRef.current = null;
pendingOpenFullRef.current = false;
focusPost(post);
@ -1189,8 +1197,8 @@ export default function MapView({
skipAutoZoomRef.current = false;
setSearchQuery(q);
if (q) {
setMainFilter("All");
setSubFilter("All");
setMainFilters([]);
setSubFilters([]);
setTimeHours(336);
}
};
@ -1203,8 +1211,8 @@ export default function MapView({
// Clear ALL filters to show all search results
if (query.trim()) {
setMainFilter("All");
setSubFilter("All");
setMainFilters([]);
setSubFilters([]);
setTimeHours(336); // 2 weeks
}
};

View File

@ -20,7 +20,7 @@
.fab-left,
.fab-right {
position: fixed;
top: 120px;
top: 180px;
z-index: 999;
}
@ -240,7 +240,7 @@ body[data-theme="light"] .fab-item.is-active {
@media (max-width: 480px) {
.fab-left,
.fab-right {
top: 100px;
top: 160px;
}
.fab-left {
@ -289,7 +289,7 @@ body[data-theme="light"] .fab-item.is-active {
@supports (padding-top: env(safe-area-inset-top)) {
.fab-left,
.fab-right {
top: calc(120px + env(safe-area-inset-top));
top: calc(180px + env(safe-area-inset-top));
}
.fab-left {

View File

@ -1053,20 +1053,22 @@ export function usePostsEngine({
const distKm = haversineKm(lastLat, lastLng, lat, lng);
const lastR = last.radiusKm || 0;
const radiusChanged = !lastR || Math.abs(radiusKm - lastR) / Math.max(lastR, 1) >= 0.1;
const radiusChanged = !lastR || Math.abs(radiusKm - lastR) / Math.max(lastR, 1) >= 0.08;
let boundsChanged = false;
if (last.bounds && bounds) {
const spanLat = Math.max(0.0001, Math.abs(last.bounds.maxLat - last.bounds.minLat));
const spanLon = Math.max(0.0001, Math.abs(last.bounds.maxLon - last.bounds.minLon));
// Lower threshold from 15% to 8% for more responsive updates
boundsChanged =
Math.abs(bounds.minLat - last.bounds.minLat) / spanLat > 0.15 ||
Math.abs(bounds.maxLat - last.bounds.maxLat) / spanLat > 0.15 ||
Math.abs(bounds.minLon - last.bounds.minLon) / spanLon > 0.15 ||
Math.abs(bounds.maxLon - last.bounds.maxLon) / spanLon > 0.15;
Math.abs(bounds.minLat - last.bounds.minLat) / spanLat > 0.08 ||
Math.abs(bounds.maxLat - last.bounds.maxLat) / spanLat > 0.08 ||
Math.abs(bounds.minLon - last.bounds.minLon) / spanLon > 0.08 ||
Math.abs(bounds.maxLon - last.bounds.maxLon) / spanLon > 0.08;
}
const minMoveKm = Math.max(2, radiusKm * 0.05);
// Cap minMoveKm at 10km so even at large zoom levels we refetch reasonably
const minMoveKm = Math.min(10, Math.max(2, radiusKm * 0.03));
if (!radiusChanged && !boundsChanged && distKm < minMoveKm) return;
}

View File

@ -145,7 +145,7 @@
position: fixed;
left: 50%;
transform: translateX(-50%);
bottom: calc(14px + var(--sw-wall-overlap, 0px));
bottom: 90px !important;
z-index: 300;
pointer-events: none;
}
@ -240,6 +240,18 @@ body[data-theme="light"] .sw-icon-active .sw-icon-label{
/* SW_FILTER_ICON_VISIBILITY:END */
/* VERSION INDICATOR */
body::after {
content: "© Sociowire v0.0011";
position: fixed;
bottom: 4px;
right: 4px;
font-size: 10px;
color: rgba(255,255,255,0.5);
z-index: 99999;
pointer-events: none;
}
/* ===== THEME PILLS D / B / L : blanc sur fond noir comme les catégories ===== */
.sw-theme-toggle{
display:flex;

View File

@ -177,7 +177,7 @@
transform:translateX(-50%);
max-width: min(980px, calc(100vw - 24px));
width:100%;
z-index: 500; /* Au-dessus des filtres (z-index: 300) */
z-index: 10001; /* Au-dessus des filtres (z-index: 300) et du dropdown (9999) */
}