try to fix sorting and search

This commit is contained in:
Zack Rauen 2020-03-30 15:43:34 -04:00
parent dee55c7ef6
commit 9098075c49
4 changed files with 22 additions and 11 deletions

File diff suppressed because one or more lines are too long

2
js/main.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -60,8 +60,9 @@ export default new class V2_PublicServers {
addButton() { addButton() {
if (this.guildPatch) return; if (this.guildPatch) return;
const GuildList = webpackModules.findByDisplayName("Guilds"); const GuildList = webpackModules.find(m => m.default && m.default.displayName == "NavigableGuilds");
this.guildPatch = Utils.monkeyPatch(GuildList.prototype, "render", {after: this._appendButton}); if (!GuildList) Utils.warn("PublicServer", "Can't find GuildList component");
this.guildPatch = Utils.monkeyPatch(GuildList, "default", {after: this._appendButton});
this._appendButton(); this._appendButton();
} }

View File

@ -99,10 +99,16 @@ export default class CardList extends BDV2.reactComponent {
}; };
} }
getString(value) {
if (!value) return "???";
return typeof value == "string" ? value : value.toString();
}
getAddons() { getAddons() {
const sortedAddons = this.props.list.sort((a, b) => { const sortedAddons = this.props.list.sort((a, b) => {
const first = a[this.state.sort]; const cap = this.state.sort.charAt(0).toUpperCase() + this.state.sort.slice(1);
const second = b[this.state.sort]; const first = a.plugin ? this.getString(a.plugin[`get${cap}`]()) : a[this.state.sort];
const second = b.plugin ? this.getString(b.plugin[`get${cap}`]()) : b[this.state.sort];
if (typeof(first) == "string") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase()); if (typeof(first) == "string") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());
if (first > second) return 1; if (first > second) return 1;
if (second > first) return -1; if (second > first) return -1;
@ -114,10 +120,14 @@ export default class CardList extends BDV2.reactComponent {
const addon = sortedAddons[a]; const addon = sortedAddons[a];
if (this.state.query) { if (this.state.query) {
let matches = null; let matches = null;
if (addon.name) matches = addon.name.toLocaleLowerCase().includes(this.state.query); const name = this.getString(addon.plugin ? addon.plugin.getName() || addon.name : addon.name);
if (addon.author) matches = matches || addon.author.toLocaleLowerCase().includes(this.state.query); const author = this.getString(addon.plugin ? addon.plugin.getAuthor() : addon.author);
if (addon.description) matches = matches || addon.description.toLocaleLowerCase().includes(this.state.query); const description = this.getString(addon.plugin ? addon.plugin.getDescription() : addon.description);
if (addon.version) matches = matches || addon.version.toLocaleLowerCase().includes(this.state.query); const version = this.getString(addon.plugin ? addon.plugin.getVersion() : addon.version);
if (name) matches = name.toLocaleLowerCase().includes(this.state.query);
if (author) matches = matches || author.toLocaleLowerCase().includes(this.state.query);
if (description) matches = matches || description.toLocaleLowerCase().includes(this.state.query);
if (version) matches = matches || version.toLocaleLowerCase().includes(this.state.query);
if (!matches) continue; if (!matches) continue;
} }
const props = this.getProps(addon); const props = this.getProps(addon);