Skip to content

Commit 67b8362

Browse files
committed
fix: tri par nom, redirect lieux, filtre status côté query, retry tick
1 parent 9544b51 commit 67b8362

4 files changed

Lines changed: 24 additions & 27 deletions

File tree

src/lib/place-service.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ export async function fetchPaginatedPlaces(params: {
3939
if (category && category !== "all") query = query.eq("category", category);
4040

4141
const { data, count, error } = await query
42-
.order("created_at", { ascending: false })
4342
.order("name", { ascending: true })
4443
.range(from, to);
4544

src/pages/place-create-page.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export function PlaceCreatePage() {
107107
const latitude = data.latitude ?? coords?.latitude ?? 0;
108108
const longitude = data.longitude ?? coords?.longitude ?? 0;
109109

110-
const newId = await createPlace({
110+
await createPlace({
111111
name: data.name,
112112
category: data.category,
113113
description: data.description ?? "",
@@ -122,7 +122,7 @@ export function PlaceCreatePage() {
122122
});
123123

124124
toast.success("Lieu proposé ! Il sera visible après validation.");
125-
navigate(`/lieux/${newId}`);
125+
navigate("/lieux");
126126
} catch {
127127
toast.error("Erreur lors de la proposition du lieu");
128128
}
@@ -140,7 +140,7 @@ export function PlaceCreatePage() {
140140
Proposer un lieu
141141
</h1>
142142
<p className="mt-1 text-sm text-muted-foreground">
143-
Les lieux proposés sont vérifiés avant publication. Vous serez redirigé vers la fiche après envoi.
143+
Les lieux proposés sont vérifiés avant publication.
144144
</p>
145145
</div>
146146

@@ -227,7 +227,7 @@ export function PlaceCreatePage() {
227227
<Label className="text-xs text-muted-foreground uppercase tracking-wider">Adresse / repère</Label>
228228
<Input {...field} placeholder="Ex: Avenue…, quartier… ou repère visible" className="bg-white/5 border-white/10" />
229229
<p className="text-[11px] text-muted-foreground/60">
230-
À Brazzaville, décrivez un repère visible (ex : "En face du marché Total Poto-Poto")
230+
À Brazzaville, décrivez un repère visible (ex : « En face du marché Total Poto-Poto »)
231231
</p>
232232
{errors.address && <p className="text-xs text-destructive">{errors.address.message}</p>}
233233
</div>

src/pages/place-detail-page.tsx

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,31 +59,25 @@ export function PlaceDetailPage() {
5959
setIsLoading(true);
6060
setFetchError(false);
6161
try {
62-
const { data, error } = await supabase
63-
.from("places")
64-
.select("*")
65-
.eq("id", id)
66-
.maybeSingle();
62+
const baseQuery = supabase.from("places").select("*").eq("id", id);
63+
const { data, error } = await (
64+
isAdmin ? baseQuery : baseQuery.eq("status", "approved")
65+
).maybeSingle();
6766

6867
if (error) throw error;
6968

7069
if (!cancelled) {
7170
const p = data as Place | null;
72-
// Non-admin users cannot view pending or rejected places
73-
if (p && p.status !== "approved" && !isAdmin) {
74-
setPlace(null);
75-
} else {
76-
setPlace(p);
77-
if (p) {
78-
const { data: related } = await supabase
79-
.from("places")
80-
.select("id,name,category,city")
81-
.eq("status", "approved")
82-
.or(`category.eq.${p.category},city.eq.${p.city ?? ""}`)
83-
.neq("id", p.id)
84-
.limit(4);
85-
if (!cancelled) setRelatedPlaces((related ?? []) as Place[]);
86-
}
71+
setPlace(p);
72+
if (p) {
73+
const { data: related } = await supabase
74+
.from("places")
75+
.select("id,name,category,city")
76+
.eq("status", "approved")
77+
.or(`category.eq.${p.category},city.eq.${p.city ?? ""}`)
78+
.neq("id", p.id)
79+
.limit(4);
80+
if (!cancelled) setRelatedPlaces((related ?? []) as Place[]);
8781
}
8882
}
8983
} catch {

src/pages/places-page.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export function PlacesPage() {
6262
const [category, setCategory] = useState<string>("all");
6363
const [mobileView, setMobileView] = useState<"map" | "list">("map");
6464
const [focusedPlaceId, setFocusedPlaceId] = useState<string | undefined>(undefined);
65+
const [retryTick, setRetryTick] = useState(0);
6566
const leafletMapRef = useRef<L.Map | null>(null);
6667

6768
const hasActiveFilters = search !== "" || city !== "all" || category !== "all";
@@ -105,7 +106,7 @@ export function PlacesPage() {
105106
cancelled = true;
106107
window.clearTimeout(t);
107108
};
108-
}, [search, city, category]);
109+
}, [search, city, category, retryTick]);
109110

110111
const lastPlacesLengthRef = useRef(places.length);
111112

@@ -228,7 +229,10 @@ export function PlacesPage() {
228229
<AlertCircle className="mx-auto h-6 w-6 text-destructive/70" />
229230
<p className="text-sm text-muted-foreground">{fetchError}</p>
230231
<button
231-
onClick={resetFilters}
232+
onClick={() => {
233+
resetFilters();
234+
setRetryTick((v) => v + 1);
235+
}}
232236
className="text-xs text-tertiary hover:underline"
233237
>
234238
Réessayer

0 commit comments

Comments
 (0)