82 lines
2.5 KiB
JavaScript
82 lines
2.5 KiB
JavaScript
import { useState, useEffect } from 'react'
|
|
import reactLogo from './assets/react.svg'
|
|
import viteLogo from '/vite.svg'
|
|
import './App.css'
|
|
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
|
|
import FoOldal from './components/FoOldal'
|
|
import AutoLista from './components/AutoLista'
|
|
import Osszefoglalas from './components/Osszefoglalas'
|
|
import UjAutoForm from './components/UjAutoForm'
|
|
|
|
function App() {
|
|
const [autok, setAutok] = useState([])
|
|
|
|
useEffect(() => {
|
|
const fetchAutok = async () => {
|
|
try {
|
|
const res = await fetch('http://localhost:3000/api/autok')
|
|
if (!res.ok) throw new Error('Hálózati hiba')
|
|
const data = await res.json()
|
|
setAutok(data)
|
|
} catch (err) {
|
|
console.error('Autók betöltése sikertelen', err)
|
|
}
|
|
}
|
|
fetchAutok()
|
|
}, [])
|
|
|
|
const hozzaAdas = async (ujAuto) => {
|
|
try {
|
|
const res = await fetch('http://localhost:3000/api/autok', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(ujAuto),
|
|
})
|
|
if (!res.ok) throw new Error('Hiba a létrehozásnál')
|
|
const created = await res.json()
|
|
setAutok((prev) => [...prev, created])
|
|
return created
|
|
} catch (err) {
|
|
console.error('Autó hozzáadása sikertelen', err)
|
|
return null
|
|
}
|
|
}
|
|
|
|
const elemTorles = async (id) => {
|
|
try {
|
|
const res = await fetch(`http://localhost:3000/api/autok/${id}`, { method: 'DELETE' })
|
|
if (!res.ok) throw new Error('Törlés sikertelen')
|
|
setAutok((prev) => prev.filter((a) => a.id !== id))
|
|
return true
|
|
} catch (err) {
|
|
console.error('Autó törlése sikertelen', err)
|
|
return false
|
|
}
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<div>
|
|
<a href="https://vite.dev" target="_blank">
|
|
<img src={viteLogo} className="logo" alt="Vite logo" />
|
|
</a>
|
|
<a href="https://react.dev" target="_blank">
|
|
<img src={reactLogo} className="logo react" alt="React logo" />
|
|
</a>
|
|
</div>
|
|
<BrowserRouter>
|
|
<Routes>
|
|
<Route path="/" element={<FoOldal />}>
|
|
<Route index element={<Osszefoglalas autok={autok} />} />
|
|
<Route path="lista" element={<AutoLista autok={autok} torles={elemTorles} />} />
|
|
<Route path="uj" element={<UjAutoForm hozzaad={hozzaAdas} />} />
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Route>
|
|
</Routes>
|
|
</BrowserRouter>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default App
|