From cafaa76608472c934fdb1f947a330ef673cf79cb Mon Sep 17 00:00:00 2001 From: marco370 <48531002-marco370@users.noreply.replit.com> Date: Sat, 18 Oct 2025 07:24:05 +0000 Subject: [PATCH] Update planning page to use URL parameters for location and date Incorporate `useLocation` hook from `wouter` to read `date` and `location` from URL search parameters, allowing pre-selection of these values and updating component state accordingly via `useEffect`. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e5565357-90e1-419f-b9a8-6ee8394636df Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/e5565357-90e1-419f-b9a8-6ee8394636df/uZXH8P1 --- client/src/pages/operational-planning.tsx | 26 ++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/client/src/pages/operational-planning.tsx b/client/src/pages/operational-planning.tsx index 5b2670c..6591452 100644 --- a/client/src/pages/operational-planning.tsx +++ b/client/src/pages/operational-planning.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import { queryClient, apiRequest } from "@/lib/queryClient"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; @@ -14,6 +14,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@ import { format } from "date-fns"; import { it } from "date-fns/locale"; import { useToast } from "@/hooks/use-toast"; +import { useLocation } from "wouter"; interface Shift { id: string; @@ -93,14 +94,33 @@ const locationLabels: Record = { export default function OperationalPlanning() { const { toast } = useToast(); - const [selectedLocation, setSelectedLocation] = useState("roccapiemonte"); // Sede selezionata (primo step) + const [location] = useLocation(); + + // Leggi parametri dalla URL + const searchParams = new URLSearchParams(location.split('?')[1] || ''); + const urlDate = searchParams.get('date'); + const urlLocation = searchParams.get('location'); + + const [selectedLocation, setSelectedLocation] = useState( + urlLocation && ['roccapiemonte', 'milano', 'roma'].includes(urlLocation) + ? urlLocation + : "roccapiemonte" + ); const [selectedDate, setSelectedDate] = useState( - format(new Date(), "yyyy-MM-dd") + urlDate || format(new Date(), "yyyy-MM-dd") ); const [selectedSite, setSelectedSite] = useState(null); const [selectedGuards, setSelectedGuards] = useState([]); const [selectedVehicle, setSelectedVehicle] = useState(null); const [createShiftDialogOpen, setCreateShiftDialogOpen] = useState(false); + + // Aggiorna stato quando cambiano i parametri URL + useEffect(() => { + if (urlDate) setSelectedDate(urlDate); + if (urlLocation && ['roccapiemonte', 'milano', 'roma'].includes(urlLocation)) { + setSelectedLocation(urlLocation); + } + }, [urlDate, urlLocation]); // Query per siti non coperti (filtrati per sede e data) const { data: uncoveredData, isLoading } = useQuery({