2023-08-26 21:33:17 -07:00

74 lines
2.2 KiB
TypeScript

import Toggle from "../element-factories/toggle";
import TradeFinderRow from "../page-elements/trade-finder-row";
import Settings from "../settings";
import TraderRepository from "../trader-repository";
export default class TradeFinderEnhancer {
static addHeader(page: Document) {
let th = document.createElement("th");
th.innerText = "# of their wants that I own";
th.style.textAlign = "center";
th.scope = "col";
page.querySelector("table thead tr")?.appendChild(th);
}
static async addVisibilityToggle(page: Document, rows: TradeFinderRow[]) {
let h2 = page.querySelector("h2")!;
let div = document.createElement("div");
div.style.display = "flex";
div.style.justifyContent = "space-between";
let toggle = Toggle.create();
h2.parentNode!.insertBefore(div, h2);
div.appendChild(h2);
div.appendChild(toggle.element);
toggle.onToggle((on: boolean) => {
on === true
? this.hideNonOpenRows(rows)
: this.showNonOpenRows(rows);
});
if ((await Settings.get("hideNonOpenRows")) === true) {
toggle.switchOn();
this.hideNonOpenRows(rows);
}
}
static async enhance(page: Document) {
let repository = await TraderRepository.load();
this.addHeader(page);
let tbody = page.querySelector("table tbody")!;
let rows = Array.from(tbody.querySelectorAll("tr"))
.map((row) =>
TradeFinderRow.parse(row as HTMLTableRowElement, repository)
)
.filter((row) => row !== null)
.filter((row) => row!.trader !== null) as TradeFinderRow[];
rows.forEach((row) => row!.addWantsColumn());
this.addVisibilityToggle(page, rows);
}
static hideNonOpenRows(rows: TradeFinderRow[] = []) {
Settings.set("hideNonOpenRows", true);
rows.filter((row) => row!.trader!.open === false).forEach((row) =>
row!.hide()
);
}
static showNonOpenRows(rows: TradeFinderRow[] = []) {
Settings.set("hideNonOpenRows", false);
rows.forEach((row) => row!.show());
}
}