feat: implement localStorage functionality for MediaPesataApp and remove media.astro page
This commit is contained in:
@@ -120,12 +120,57 @@ const CORSI_DISPONIBILI: Corso[] = [
|
||||
]
|
||||
|
||||
function MediaPesataApp() {
|
||||
const [tipoStudente, setTipoStudente] = useState<TipoStudente>('triennale')
|
||||
const [corsiSelezionati, setCorsiSelezionati] = useState<CorsoSelezionato[]>([])
|
||||
// Funzioni per localStorage
|
||||
const loadFromStorage = () => {
|
||||
try {
|
||||
const savedData = localStorage.getItem('media-pesata-data')
|
||||
if (savedData) {
|
||||
const parsed = JSON.parse(savedData)
|
||||
return {
|
||||
tipoStudente: parsed.tipoStudente || 'triennale',
|
||||
corsiSelezionati: parsed.corsiSelezionati || [],
|
||||
sezioniAperte: parsed.sezioniAperte || {},
|
||||
mostraRisultati: parsed.mostraRisultati || false,
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Errore nel caricamento dei dati salvati:', error)
|
||||
}
|
||||
return {
|
||||
tipoStudente: 'triennale' as TipoStudente,
|
||||
corsiSelezionati: [],
|
||||
sezioniAperte: {},
|
||||
mostraRisultati: false,
|
||||
}
|
||||
}
|
||||
|
||||
const saveToStorage = (data: any) => {
|
||||
try {
|
||||
localStorage.setItem('media-pesata-data', JSON.stringify(data))
|
||||
} catch (error) {
|
||||
console.warn('Errore nel salvataggio dei dati:', error)
|
||||
}
|
||||
}
|
||||
|
||||
// Inizializzazione con dati salvati
|
||||
const initialData = loadFromStorage()
|
||||
const [tipoStudente, setTipoStudente] = useState<TipoStudente>(initialData.tipoStudente)
|
||||
const [corsiSelezionati, setCorsiSelezionati] = useState<CorsoSelezionato[]>(initialData.corsiSelezionati)
|
||||
const [showCustomForm, setShowCustomForm] = useState(false)
|
||||
const [customCorso, setCustomCorso] = useState<CorsoCustom>({ nome: '', cfu: 0 })
|
||||
const [sezioniAperte, setSezioniAperte] = useState<Record<string, boolean>>({})
|
||||
const [mostraRisultati, setMostraRisultati] = useState(false)
|
||||
const [sezioniAperte, setSezioniAperte] = useState<Record<string, boolean>>(initialData.sezioniAperte)
|
||||
const [mostraRisultati, setMostraRisultati] = useState(initialData.mostraRisultati)
|
||||
|
||||
// Salva automaticamente quando cambiano i dati importanti
|
||||
useEffect(() => {
|
||||
const dataToSave = {
|
||||
tipoStudente,
|
||||
corsiSelezionati,
|
||||
sezioniAperte,
|
||||
mostraRisultati,
|
||||
}
|
||||
saveToStorage(dataToSave)
|
||||
}, [tipoStudente, corsiSelezionati, sezioniAperte, mostraRisultati])
|
||||
|
||||
const toggleSezione = (nomeSezione: string) => {
|
||||
setSezioniAperte(prev => ({
|
||||
@@ -237,6 +282,14 @@ function MediaPesataApp() {
|
||||
setCorsiSelezionati([])
|
||||
setCustomCorso({ nome: '', cfu: 0 })
|
||||
setShowCustomForm(false)
|
||||
setSezioniAperte({})
|
||||
setMostraRisultati(false)
|
||||
// Pulisce anche il localStorage
|
||||
try {
|
||||
localStorage.removeItem('media-pesata-data')
|
||||
} catch (error) {
|
||||
console.warn('Errore nella pulizia del localStorage:', error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user