fix: remove metric catalog search
This commit is contained in:
@@ -36,7 +36,6 @@ interface MetricCatalogDom {
|
||||
metricActions: Record<SpreadFilterMetric, HTMLButtonElement>;
|
||||
panel: HTMLElement;
|
||||
root: HTMLElement;
|
||||
searchInput: HTMLInputElement;
|
||||
selectedCount: HTMLElement;
|
||||
}
|
||||
|
||||
@@ -301,9 +300,6 @@ export function ensurePluginToolbar(
|
||||
metricCatalog.closeButton.addEventListener("click", () => {
|
||||
setMetricCatalogOpen(metricCatalog, false);
|
||||
});
|
||||
metricCatalog.searchInput.addEventListener("input", () => {
|
||||
syncMetricCatalog(toolbarDom);
|
||||
});
|
||||
|
||||
SPREAD_FILTER_DEFINITIONS.forEach(({ metric }) => {
|
||||
const rule = spreadMetricRules[metric];
|
||||
@@ -519,13 +515,6 @@ function createMetricCatalog(document: Document): MetricCatalogDom {
|
||||
panel.hidden = true;
|
||||
applyMetricCatalogPanelStyles(panel);
|
||||
|
||||
const searchInput = document.createElement("input");
|
||||
searchInput.type = "search";
|
||||
searchInput.placeholder = "搜索指标";
|
||||
searchInput.dataset.pluginSpreadMetricCatalogSearch = "input";
|
||||
searchInput.setAttribute("aria-label", "搜索筛选指标");
|
||||
applyMetricCatalogSearchStyles(searchInput);
|
||||
|
||||
const closeButton = document.createElement("button");
|
||||
closeButton.type = "button";
|
||||
closeButton.dataset.pluginSpreadMetricCatalogClose = "button";
|
||||
@@ -537,7 +526,7 @@ function createMetricCatalog(document: Document): MetricCatalogDom {
|
||||
const panelHeader = document.createElement("div");
|
||||
panelHeader.dataset.pluginSpreadMetricCatalogHeader = "root";
|
||||
applyMetricCatalogHeaderStyles(panelHeader);
|
||||
panelHeader.append(searchInput, closeButton);
|
||||
panelHeader.append(closeButton);
|
||||
|
||||
const group = document.createElement("div");
|
||||
group.dataset.pluginSpreadMetricCatalogGroup = "传播表现";
|
||||
@@ -573,7 +562,6 @@ function createMetricCatalog(document: Document): MetricCatalogDom {
|
||||
metricActions,
|
||||
panel,
|
||||
root,
|
||||
searchInput,
|
||||
selectedCount
|
||||
};
|
||||
}
|
||||
@@ -652,9 +640,6 @@ function readMetricCatalogDom(root: HTMLElement): MetricCatalogDom {
|
||||
root: root.querySelector(
|
||||
'[data-plugin-spread-metric-catalog="root"]'
|
||||
) as HTMLElement,
|
||||
searchInput: root.querySelector(
|
||||
'[data-plugin-spread-metric-catalog-search="input"]'
|
||||
) as HTMLInputElement,
|
||||
selectedCount: root.querySelector(
|
||||
'[data-plugin-spread-metric-selected-count="text"]'
|
||||
) as HTMLElement
|
||||
@@ -800,7 +785,6 @@ export function setToolbarBusyState(
|
||||
toolbar.exportCustomPagesInput,
|
||||
toolbar.metricCatalog.addButton,
|
||||
toolbar.metricCatalog.closeButton,
|
||||
toolbar.metricCatalog.searchInput,
|
||||
...Object.values(toolbar.metricCatalog.metricActions),
|
||||
...Object.values(toolbar.spreadMetricRules).flatMap((rule) => [
|
||||
rule.detailsButton,
|
||||
@@ -921,40 +905,22 @@ function syncSpreadFilterNote(toolbar: PluginToolbarDom): void {
|
||||
}
|
||||
|
||||
function syncMetricCatalog(toolbar: PluginToolbarDom): void {
|
||||
const searchTerm = toolbar.metricCatalog.searchInput.value.trim().toLowerCase();
|
||||
const enabledCount = Object.values(toolbar.spreadMetricRules).filter(
|
||||
(rule) => rule.enabledInput.checked
|
||||
).length;
|
||||
toolbar.metricCatalog.selectedCount.textContent = `已选 ${enabledCount} 项`;
|
||||
|
||||
SPREAD_FILTER_DEFINITIONS.forEach(({ label, metric }) => {
|
||||
SPREAD_FILTER_DEFINITIONS.forEach(({ metric }) => {
|
||||
const action = toolbar.metricCatalog.metricActions[metric];
|
||||
const isSelected = toolbar.spreadMetricRules[metric].enabledInput.checked;
|
||||
const item = action.closest(
|
||||
`[data-plugin-spread-metric-catalog-item="${metric}"]`
|
||||
) as HTMLElement | null;
|
||||
action.disabled = isSelected;
|
||||
action.textContent = isSelected ? "已添加" : "添加";
|
||||
if (item) {
|
||||
item.hidden = Boolean(searchTerm) && !label.toLowerCase().includes(searchTerm);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setMetricCatalogOpen(catalog: MetricCatalogDom, isOpen: boolean): void {
|
||||
catalog.panel.hidden = !isOpen;
|
||||
catalog.addButton.setAttribute("aria-expanded", String(isOpen));
|
||||
if (!isOpen) {
|
||||
catalog.searchInput.value = "";
|
||||
Object.values(catalog.metricActions).forEach((action) => {
|
||||
const item = action.closest("[data-plugin-spread-metric-catalog-item]") as
|
||||
| HTMLElement
|
||||
| null;
|
||||
if (item) {
|
||||
item.hidden = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function syncSpreadMetricRuleSecondaryControls(rule: SpreadMetricRuleDom): void {
|
||||
@@ -1253,16 +1219,7 @@ function applyMetricCatalogPanelStyles(panel: HTMLElement): void {
|
||||
function applyMetricCatalogHeaderStyles(header: HTMLElement): void {
|
||||
header.style.display = "flex";
|
||||
header.style.alignItems = "center";
|
||||
header.style.gap = "6px";
|
||||
}
|
||||
|
||||
function applyMetricCatalogSearchStyles(input: HTMLInputElement): void {
|
||||
input.style.width = "100%";
|
||||
input.style.height = "30px";
|
||||
input.style.padding = "0 8px";
|
||||
input.style.border = "1px solid #cbd5e1";
|
||||
input.style.borderRadius = "5px";
|
||||
input.style.boxSizing = "border-box";
|
||||
header.style.justifyContent = "flex-end";
|
||||
}
|
||||
|
||||
function applyMetricCatalogCloseButtonStyles(button: HTMLButtonElement): void {
|
||||
|
||||
@@ -1652,7 +1652,7 @@ describe("market-content-entry", () => {
|
||||
expect(finishAction?.textContent).toBe("添加");
|
||||
});
|
||||
|
||||
test("catalog search resets its visible metric list after closing", async () => {
|
||||
test("catalog does not render a metric search input", async () => {
|
||||
document.body.innerHTML = buildMarketFixture();
|
||||
|
||||
const { createMarketController } = await import("../src/content/market/index");
|
||||
@@ -1664,22 +1664,10 @@ describe("market-content-entry", () => {
|
||||
await controller.ready;
|
||||
|
||||
click('[data-plugin-spread-metric-catalog-trigger="button"]');
|
||||
const searchInput = document.querySelector(
|
||||
'[data-plugin-spread-metric-catalog-search="input"]'
|
||||
) as HTMLInputElement | null;
|
||||
const interactionItem = document.querySelector(
|
||||
'[data-plugin-spread-metric-catalog-item="interactionRate"]'
|
||||
) as HTMLElement | null;
|
||||
if (!searchInput) {
|
||||
throw new Error("Missing metric catalog search input");
|
||||
}
|
||||
searchInput.value = "完播";
|
||||
searchInput.dispatchEvent(new Event("input"));
|
||||
expect(interactionItem?.hidden).toBe(true);
|
||||
|
||||
click('[data-plugin-spread-metric-catalog-close="button"]');
|
||||
click('[data-plugin-spread-metric-catalog-trigger="button"]');
|
||||
expect(interactionItem?.hidden).toBe(false);
|
||||
expect(
|
||||
document.querySelector('[data-plugin-spread-metric-catalog-search="input"]')
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
test("busy toolbar disables catalog and selected rule actions", async () => {
|
||||
|
||||
Reference in New Issue
Block a user