Display application icon

This commit is contained in:
2025-12-01 08:36:29 +01:00
parent 1f22d5c41b
commit 64985bb39e
5 changed files with 53 additions and 1 deletions

View File

@@ -0,0 +1,26 @@
import Favicon from "react-favicon";
// Taken from https://github.com/element-hq/element-web/blob/0577e245dac944bd85eea07b93a9762a93062f62/src/favicon.ts
function getInitialFavicon(): HTMLLinkElement[] {
const icons: HTMLLinkElement[] = [];
const links = window.document
.getElementsByTagName("head")[0]
.getElementsByTagName("link");
for (const link of links) {
if (
link.hasAttribute("rel") &&
/(^|\s)icon(\s|$)/i.test(link.getAttribute("rel")!)
) {
icons.push(link);
}
}
return icons;
}
let iconPath = getInitialFavicon()[0].getAttribute("href")!;
export function AppIconModifier(p: {
numberUnread: number;
}): React.ReactElement {
return <Favicon url={iconPath} alertCount={p.numberUnread} />;
}

View File

@@ -11,6 +11,7 @@ import type { WsMessage } from "../../api/WsApi";
import { RoomEventsManager } from "../../utils/RoomEventsManager";
import { AsyncWidget } from "../AsyncWidget";
import { useUserInfo } from "../dashboard/BaseAuthenticatedPage";
import { AppIconModifier } from "./AppIconModifier";
import { MatrixWS } from "./MatrixWS";
import { RoomSelector } from "./RoomSelector";
import { RoomWidget } from "./RoomWidget";
@@ -70,6 +71,11 @@ function _MainMessageWidget(p: {
);
}, [space, p.rooms]);
const unreadRooms = React.useMemo(
() => p.rooms.filter((r) => r.number_unread_messages > 0).length,
[p.rooms]
);
const [_refreshCount, setRefreshCount] = React.useState(0);
const [roomMgr, setRoomMgr] = React.useState<undefined | RoomEventsManager>();
@@ -117,6 +123,9 @@ function _MainMessageWidget(p: {
<MatrixWS onMessage={handleWsEvent} />
</div>
{/** Application icon modifier */}
<AppIconModifier numberUnread={unreadRooms} />
{/* Space selector */}
<SpaceSelector {...p} selectedSpace={space} onChange={setSpace} />