mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-17 18:37:04 -04:00
75 lines
2.6 KiB
TypeScript
75 lines
2.6 KiB
TypeScript
/*
|
|
* Vencord, a Discord client mod
|
|
* Copyright (c) 2025 Vendicated and contributors
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
import "./styles.css";
|
|
|
|
import { EquicordDevs } from "@utils/constants";
|
|
import definePlugin from "@utils/types";
|
|
import { React, RelationshipStore, TextInput, UserStore } from "@webpack/common";
|
|
|
|
let lastSearch = "";
|
|
let updateFunc = (v: any) => { };
|
|
|
|
export default definePlugin({
|
|
name: "BetterBlockedUsers",
|
|
description: "Allows you to search in blocked users list and makes names selectable in settings.",
|
|
authors: [EquicordDevs.TheArmagan],
|
|
patches: [
|
|
{
|
|
find: '"],{numberOfBlockedUsers:',
|
|
replacement: [
|
|
{
|
|
match: /(?<=\}=(\i).*?\]\}\))/,
|
|
replace: ",$1.listType==='blocked'?$self.renderSearchInput():null"
|
|
},
|
|
{
|
|
match: /(?<=\}=(\i).{0,10}(\i).useState\(.{0,1}\);)/,
|
|
replace: "let [searchResults,setSearchResults]=$2.useState([]);$self.setUpdateFunc($1,setSearchResults);"
|
|
},
|
|
{
|
|
match: /(usersList,children:)(\i)/,
|
|
replace: "$1(searchResults.length?searchResults:$2)"
|
|
},
|
|
]
|
|
}
|
|
],
|
|
renderSearchInput() {
|
|
const [value, setValue] = React.useState(lastSearch);
|
|
|
|
React.useEffect(() => {
|
|
const searchResults = this.getFilteredUsers(lastSearch);
|
|
updateFunc(searchResults);
|
|
}, []);
|
|
|
|
return <TextInput
|
|
placeholder="Search users..."
|
|
style={{ width: "200px" }}
|
|
onInput={e => {
|
|
const search = (e.target as HTMLInputElement).value.toLowerCase().trim();
|
|
setValue(search);
|
|
lastSearch = search;
|
|
const searchResults = this.getFilteredUsers(search);
|
|
updateFunc(searchResults);
|
|
}} value={value}
|
|
></TextInput>;
|
|
},
|
|
getSearchResults() {
|
|
return !!lastSearch;
|
|
},
|
|
setUpdateFunc(e, setResults) {
|
|
if (e.listType !== "blocked") return;
|
|
updateFunc = setResults;
|
|
return true;
|
|
},
|
|
getFilteredUsers(search: string) {
|
|
search = search.toLowerCase();
|
|
return (RelationshipStore as any).getBlockedIDs().filter(id => {
|
|
const user = UserStore.getUser(id) as any;
|
|
if (!user) return id === search;
|
|
return id === search || user?.username?.toLowerCase()?.includes(search) || user?.globalName?.toLowerCase()?.includes(search);
|
|
}) as string[];
|
|
}
|
|
});
|