Added active app indicator in taskbar

This commit is contained in:
Prozilla 2023-07-16 15:15:10 +02:00
parent 30046b6f77
commit 6f1b9fe148
No known key found for this signature in database
GPG key ID: 5858DFE71CAF31EE
5 changed files with 66 additions and 16 deletions

View file

@ -1,5 +1,5 @@
import "./App.css";
import { TaskBar } from "./components/TaskBar.js";
import { Taskbar } from "./components/Taskbar.js";
import { WindowsManagerProvider } from "./hooks/WindowsManagerContext.js";
import { WindowsView } from "./components/WindowsView.js";
@ -7,7 +7,7 @@ function App() {
return (
<WindowsManagerProvider>
<div className="App">
<TaskBar/>
<Taskbar/>
<WindowsView/>
</div>
</WindowsManagerProvider>

View file

@ -53,6 +53,31 @@
width: auto;
}
.App-icon {
position: relative;
}
.App-icon::after {
content: "";
position: absolute;
left: 50%;
bottom: 0;
width: 90%;
height: 0.15rem;
background-color: var(--grey-a);
transition: height 200ms ease-in-out, width 200ms ease-in-out;
transform: translateX(-50%);
-webkit-transform: translateX(-50%);
}
.App-icon:hover::after {
width: 100%;
}
.App-icon:not(.Active)::after {
height: 0;
}
.Util-icons {
display: flex;
justify-content: flex-end;

View file

@ -1,14 +1,12 @@
import { useEffect, useState } from "react";
import "./TaskBar.css";
import "./Taskbar.css";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faBatteryFull, faSearch, faVolumeHigh, faWifi } from "@fortawesome/free-solid-svg-icons";
import { ReactSVG } from "react-svg";
import ApplicationsManager from "../modules/applications/applications.js";
import { useWindowsManager } from "../hooks/WindowsManagerContext.js";
import { AppButton } from "./task-bar/AppButton.js";
export function TaskBar() {
export function Taskbar() {
const [date, setDate] = useState(new Date());
const windowsManager = useWindowsManager();
useEffect(() => {
setInterval(() => {
@ -22,11 +20,9 @@ export function TaskBar() {
<button>
<FontAwesomeIcon icon={faSearch}/>
</button>
{ApplicationsManager.APPLICATIONS.map((app) => {
return (<button key={app.id} onClick={() => { windowsManager.open(app.id); }}>
<ReactSVG src={process.env.PUBLIC_URL + `/media/applications/icons/${app.id}.svg`}/>
</button>);
})}
{ApplicationsManager.APPLICATIONS.map((app) =>
<AppButton app={app} key={app.id}/>
)}
</div>
<div className="Util-icons">
<button>

View file

@ -0,0 +1,19 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { useEffect, useState } from "react";
import { useWindows } from "../../hooks/WindowsContext.js";
import { useWindowsManager } from "../../hooks/WindowsManagerContext.js";
import { ReactSVG } from "react-svg";
export function AppButton({ app }) {
const [active, setActive] = useState(false);
const windows = useWindows();
const windowsManager = useWindowsManager();
useEffect(() => {
setActive(windowsManager.isAppActive(app.id));
}, [windows]);
return (<button className={active ? "App-icon Active" : "App-icon"} key={app.id} onClick={() => { windowsManager.open(app.id); }}>
<ReactSVG src={process.env.PUBLIC_URL + `/media/applications/icons/${app.id}.svg`}/>
</button>);
}

View file

@ -47,6 +47,20 @@ export default class WindowsManager {
// console.log(this);
}
isAppActive(appId) {
let active = false;
Object.values(this.windows).forEach((window) => {
console.log(window.app.id, appId);
if (window.app.id === appId) {
active = true;
return;
}
});
return active;
}
setUpdateWindows(updateWindows) {
this.updateWindows = updateWindows;
}
@ -54,8 +68,4 @@ export default class WindowsManager {
get windowIds() {
return Object.keys(this.windows);
}
get windowsData() {
return Object.values(this.windows);
}
}