6 changed files with 83 additions and 4 deletions
@ -0,0 +1,35 @@ |
|||||
|
import Navbar from "../components/Navbar.jsx"; |
||||
|
import {useEffect, useState} from "react"; |
||||
|
import {useParams} from "react-router-dom"; |
||||
|
import {fetchChannelDetails} from "../services/channel.service.js"; |
||||
|
|
||||
|
|
||||
|
export default function Channel() { |
||||
|
|
||||
|
const id = useParams().id; |
||||
|
|
||||
|
const [alerts, setAlerts] = useState([]); |
||||
|
const [channel, setChannel] = useState(null); |
||||
|
|
||||
|
useEffect(() => { |
||||
|
async function fetchAlerts() { |
||||
|
setChannel(await fetchChannelDetails(id, addAlert)); |
||||
|
} |
||||
|
fetchAlerts(); |
||||
|
}, []) |
||||
|
|
||||
|
const addAlert = (type, message) => { |
||||
|
const newAlert = { type, message, id: Date.now() }; // Add unique ID |
||||
|
setAlerts([...alerts, newAlert]); |
||||
|
}; |
||||
|
const onCloseAlert = (alertToRemove) => { |
||||
|
setAlerts(alerts.filter(alert => alert !== alertToRemove)); |
||||
|
} |
||||
|
|
||||
|
return ( |
||||
|
<div className="min-w-screen min-h-screen bg-linear-to-br from-left-gradient to-right-gradient"> |
||||
|
<Navbar isSearchPage={false} alerts={alerts} onCloseAlert={onCloseAlert} /> |
||||
|
</div> |
||||
|
) |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,15 @@ |
|||||
|
|
||||
|
|
||||
|
export function fetchChannelDetails(channelId, addAlert) { |
||||
|
return fetch(`/api/channels/${channelId}`) |
||||
|
.then(response => { |
||||
|
if (!response.ok) { |
||||
|
throw new Error('Network response was not ok'); |
||||
|
} |
||||
|
return response.json(); |
||||
|
}) |
||||
|
.catch(error => { |
||||
|
addAlert('error', "Erreur lors de la récupération des détails de la chaîne"); |
||||
|
throw error; |
||||
|
}); |
||||
|
} |
||||
Loading…
Reference in new issue