/* * Vencord, a modification for Discord's desktop app * Copyright (c) 2023 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 . */ // eslint-disable-next-line path-alias/no-relative import { filters, find, findByProps, findStore } from "../webpack"; import * as t from "./types/stores"; export const Flux = findByProps("connectStores"); export type GenericStore = t.FluxStore & Record; export const { DraftType }: { DraftType: typeof t.DraftType; } = findByPropsLazy("DraftType"); // This is not actually a FluxStore export const PrivateChannelsStore = findByProps("openPrivateChannel"); export const PermissionStore = findStore("PermissionStore"); export const GuildChannelStore = findStore("GuildChannelStore"); export const ReadStateStore = findStore("ReadStateStore"); export const PresenceStore = findStore("PresenceStore"); export const MessageStore = findStore("MessageStore"); export const GuildStore = findStore("GuildStore"); export const UserStore = findStore("UserStore"); export const UserProfileStore = findStore("UserProfileStore"); export const SelectedChannelStore = findStore("SelectedChannelStore"); export const SelectedGuildStore = findStore("SelectedGuildStore"); export const ChannelStore = findStore("ChannelStore"); export const GuildMemberStore = findStore("GuildMemberStore"); export const RelationshipStore = findStore("RelationshipStore"); export const EmojiStore = findStore("EmojiStore"); export const WindowStore = findStore("WindowStore"); export const DraftStore = findStore("DraftStore"); /** * React hook that returns stateful data for one or more stores * You might need a custom comparator (4th argument) if your store data is an object * @param stores The stores to listen to * @param mapper A function that returns the data you need * @param dependencies An array of reactive values which the hook depends on. Use this if your mapper or equality function depends on the value of another hook * @param isEqual A custom comparator for the data returned by mapper * * @example const user = useStateFromStores([UserStore], () => UserStore.getCurrentUser(), null, (old, current) => old.id === current.id); */ export const useStateFromStores = find(filters.byProps("useStateFromStores"), m => m.useStateFromStores);