Equicord/src/equicordplugins/hideServers/HiddenServersStore.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

58 lines
1.9 KiB
TypeScript

/*
* Vencord, a Discord client mod
* Copyright (c) 2024 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import * as DataStore from "@api/DataStore";
import { findStoreLazy, proxyLazyWebpack } from "@webpack";
import { Flux, FluxDispatcher, GuildStore } from "@webpack/common";
import { Guild } from "discord-types/general";
export const HiddenServersStore = proxyLazyWebpack(() => {
const { Store } = Flux;
const SortedGuildStore = findStoreLazy("SortedGuildStore");
const DB_KEY = "HideServers_servers";
class HiddenServersStore extends Store {
private _hiddenGuilds: Set<string> = new Set();
public get hiddenGuilds() {
return this._hiddenGuilds;
}
// id try to use .initialize() but i dont know how it works
public async load() {
const data = await DataStore.get(DB_KEY);
if (data) {
this._hiddenGuilds = data;
}
}
public unload() {
this._hiddenGuilds.clear();
}
public addHidden(guild: Guild) {
this._hiddenGuilds.add(guild.id);
DataStore.set(DB_KEY, this._hiddenGuilds);
this.emitChange();
}
public removeHidden(id: string) {
this._hiddenGuilds.delete(id);
DataStore.set(DB_KEY, this._hiddenGuilds);
this.emitChange();
}
public clearHidden() {
this._hiddenGuilds.clear();
DataStore.del(DB_KEY);
this.emitChange();
}
public hiddenGuildsDetail(): Guild[] {
const sortedGuildIds = SortedGuildStore.getFlattenedGuildIds() as string[];
// otherwise the list is in order of increasing id number which is confusing
return sortedGuildIds.filter(id => this._hiddenGuilds.has(id)).map(id => GuildStore.getGuild(id));
}
}
return new HiddenServersStore(FluxDispatcher);
});