Chat animation, Audio-Berechtigungsabfrage, Berechtigung Fehlermeldung

This commit is contained in:
PxlLoewe
2025-07-12 00:48:48 -07:00
parent 01bef65218
commit cea632c47a
4 changed files with 29 additions and 8 deletions

View File

@@ -16,7 +16,13 @@ export default async function RootLayout({
const session = await getServerSession(); const session = await getServerSession();
if (!session?.user.permissions.includes("DISPO")) if (!session?.user.permissions.includes("DISPO"))
return <Error title="Zugriff verweigert" statusCode={403} />; return (
<Error
title=" Fehlende Berechtigung"
description="Du hast nicht die erforderlichen Berechtigungen, dich als Disponent anzumelden. Du kannst im HUB Kurse abschließen um die Berechtigung zu erhalten."
statusCode={403}
/>
);
return ( return (
<> <>

View File

@@ -16,7 +16,13 @@ export default async function RootLayout({
const session = await getServerSession(); const session = await getServerSession();
if (!session?.user.permissions.includes("PILOT")) if (!session?.user.permissions.includes("PILOT"))
return <Error title="Zugriff verweigert" statusCode={403} />; return (
<Error
title=" Fehlende Berechtigung"
description="Du hast nicht die erforderlichen Berechtigungen, dich als Pilot anzumelden. Du kannst in HUB Kurse abschließen um die Berechtigung zu erhalten."
statusCode={403}
/>
);
return ( return (
<> <>

View File

@@ -55,7 +55,7 @@ export const Chat = () => {
<div className={cn("dropdown dropdown-right dropdown-center", chatOpen && "dropdown-open")}> <div className={cn("dropdown dropdown-right dropdown-center", chatOpen && "dropdown-open")}>
<div className="indicator"> <div className="indicator">
{Object.values(chats).some((c) => c.notification) && ( {Object.values(chats).some((c) => c.notification) && (
<span className="indicator-item status status-info"></span> <span className="indicator-item status status-info animate-ping"></span>
)} )}
<button <button
className="btn btn-soft btn-sm btn-primary" className="btn btn-soft btn-sm btn-primary"

View File

@@ -51,11 +51,16 @@ export const SettingsBtn = () => {
}, [user, setMic]); }, [user, setMic]);
useEffect(() => { useEffect(() => {
if (typeof navigator !== "undefined" && navigator.mediaDevices?.enumerateDevices) { const setDevices = async () => {
navigator.mediaDevices.enumerateDevices().then((devices) => { if (typeof navigator !== "undefined" && navigator.mediaDevices?.enumerateDevices) {
const stream = await navigator.mediaDevices.getUserMedia({ video: false, audio: true });
const devices = await navigator.mediaDevices.enumerateDevices();
setInputDevices(devices.filter((d) => d.kind === "audioinput")); setInputDevices(devices.filter((d) => d.kind === "audioinput"));
}); stream.getTracks().forEach((track) => track.stop());
} }
};
setDevices();
}, []); }, []);
return ( return (
@@ -101,6 +106,10 @@ export const SettingsBtn = () => {
<p className="flex items-center gap-2 text-base mb-2 justify-start w-full"> <p className="flex items-center gap-2 text-base mb-2 justify-start w-full">
<Volume2 size={20} /> Eingabelautstärke <Volume2 size={20} /> Eingabelautstärke
</p> </p>
{/*
TODO: Livekit Kann aktuell keine Lautstärke manuell überschreiben, daher ist die MicVolumeBar deaktiviert
<div className="w-full"> <div className="w-full">
<input <input
type="range" type="range"
@@ -125,7 +134,7 @@ export const SettingsBtn = () => {
</div> </div>
{showIndication && ( {showIndication && (
<MicVolumeBar deviceId={selectedDevice ? selectedDevice : ""} volumeInput={micVol} /> <MicVolumeBar deviceId={selectedDevice ? selectedDevice : ""} volumeInput={micVol} />
)} )} */}
<div className="divider w-full" /> <div className="divider w-full" />
</div> </div>
<p className="flex items-center gap-2 text-base mb-2"> <p className="flex items-center gap-2 text-base mb-2">