Equicord/src/api/ServerList.ts
bep f2696a118f
Add HideServers (#36)
* Add HideServers

* HideServers: Add a count indicator and a modal to manage hidden servers

* Dont include servers youve left in the indicator count

* fix(hideServers) for webpack change

* fix(hideServers): update regex

* fix(hideServers): rewrite to use stores

* move hideServers to equicordplugins

* add serverhider to readme

* put myself in equicorddevs

* formatting nit
2024-09-05 20:02:16 -04:00

59 lines
1.9 KiB
TypeScript

/*
* Vencord, a modification for Discord's desktop app
* Copyright (c) 2022 Vendicated and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Logger } from "@utils/Logger";
const logger = new Logger("ServerListAPI");
export const enum ServerListRenderPosition {
Above,
In,
Below,
}
const renderFunctions = {
[ServerListRenderPosition.Above]: new Set<Function>(),
[ServerListRenderPosition.In]: new Set<Function>(),
[ServerListRenderPosition.Below]: new Set<Function>(),
};
function getRenderFunctions(position: ServerListRenderPosition) {
return renderFunctions[position];
}
export function addServerListElement(position: ServerListRenderPosition, renderFunction: Function) {
getRenderFunctions(position).add(renderFunction);
}
export function removeServerListElement(position: ServerListRenderPosition, renderFunction: Function) {
getRenderFunctions(position).delete(renderFunction);
}
export const renderAll = (position: ServerListRenderPosition) => {
const ret: Array<JSX.Element> = [];
for (const renderFunction of getRenderFunctions(position)) {
try {
ret.unshift(renderFunction());
} catch (e) {
logger.error("Failed to render server list element:", e);
}
}
return ret;
};