import { useEffect, useState } from "react"; import { useObservable } from "renderer/hooks/use-observable.hook"; import { useThemeColor } from "renderer/hooks/use-theme-color.hook"; import { AudioPlayerService } from "renderer/services/audio-player.service"; import { IpcService } from "renderer/services/ipc.service"; import { AppWindow } from "shared/models/window-manager/app-window.model"; import { BsmButton } from "../shared/bsm-button.component"; import { BsmRange } from "../shared/bsm-range.component"; import { BsmIconType } from "../svgs/bsm-icon.component"; import "./title-bar.component.css"; import { useService } from "renderer/hooks/use-service.hook"; import { lastValueFrom } from "rxjs"; import { useWindowControls } from "renderer/hooks/use-window-controls.hook"; export default function TitleBar({ template = "index.html" }: { template: AppWindow }) { const ipcService = useService(IpcService); const audio = useService(AudioPlayerService); const windowControls = useWindowControls(); const volume = useObservable(() => audio.volume$, audio.volume); const color = useThemeColor("first-color"); const [previewVersion, setPreviewVersion] = useState(null); useEffect(() => { lastValueFrom(ipcService.sendV2("current-version")).then(version => { if (version.toLowerCase().includes("alpha")) { return setPreviewVersion("ALPHA"); } if (version.toLowerCase().includes("beta")) { return setPreviewVersion("BETA"); } }); }, []); const [maximized, setMaximized] = useState(false); const closeWindow = () => { return windowControls.close(); }; const maximizeWindow = () => { windowControls.maximise(); }; const minimizeWindow = () => { windowControls.minimise(); }; const resetWindow = () => { windowControls.unmaximise(); }; const toggleMaximize = () => { if (maximized) { resetWindow(); } else { maximizeWindow(); } setMaximized(!maximized); }; const volumeIcon: BsmIconType = (() => { if (volume.muted || !volume.volume) { return "volume-off"; } if (volume.volume < 0.5) { return "volume-down"; } return "volume-up"; })(); if (template === "index.html") { return (
BSManager {previewVersion && {previewVersion}}
audio.setVolume(val[0])} onFinalChange={val => audio.setVolume(val[0])} />
audio.toggleMute()} />
); } if (template === "launcher.html") { return (
); } return (
BSManager
); }