40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import { findByProps, findByStoreName } from "@vendetta/metro";
|
|
|
|
const Flux = findByProps("useStateFromStores");
|
|
const colors = findByProps("colors", "unsafe_rawColors")?.colors;
|
|
const ExpandedGuildFolderStore = findByStoreName("ExpandedGuildFolderStore");
|
|
|
|
export function useTheme() {
|
|
return {
|
|
text: colors?.TEXT_NORMAL ?? "#dbdee1",
|
|
folder: "#5865f2",
|
|
hover: colors?.STATE_LAYER_PRESS ?? "rgba(255,255,255,0.06)",
|
|
};
|
|
}
|
|
|
|
export function useFolderExpanded(folderId: string | number): boolean {
|
|
// Confirmed live: an account with folders and one without exercise different code paths (this
|
|
// hook is only ever called by FolderItem, which only exists when there's a folder to render) -
|
|
// an account with no folders rendered fine while one with folders showed nothing at all.
|
|
// ExpandedGuildFolderStore is a one-shot findByStoreName at module-eval time with no retry, so
|
|
// if it hadn't registered yet, this passed [undefined] into useStateFromStores - which throws
|
|
// rather than returning safely, taking down the whole drawer render, not just this one folder.
|
|
if (!Flux?.useStateFromStores || !ExpandedGuildFolderStore) return false;
|
|
return Flux.useStateFromStores(
|
|
[ExpandedGuildFolderStore],
|
|
() => {
|
|
const folders = ExpandedGuildFolderStore?.getExpandedFolders?.();
|
|
return folders instanceof Set ? folders.has(folderId) : false;
|
|
},
|
|
[folderId],
|
|
) ?? false;
|
|
}
|
|
|
|
export interface GuildNode {
|
|
type: string;
|
|
id: string | number;
|
|
name?: string;
|
|
color?: number | null;
|
|
expanded?: boolean;
|
|
children: GuildNode[];
|
|
}
|