diff --git a/app/src/protyle/render/av/col.ts b/app/src/protyle/render/av/col.ts index a4ea4593f..d7b3161a5 100644 --- a/app/src/protyle/render/av/col.ts +++ b/app/src/protyle/render/av/col.ts @@ -170,6 +170,20 @@ export const showColMenu = (protyle: IProtyle, blockElement: HTMLElement, cellEl } } }; + avData.filters.push(filter); + transaction(protyle, [{ + action: "setAttrView", + id: avId, + data: { + filters: [filter] + } + }], [{ + action: "setAttrView", + id: avId, + data: { + filters: [] + } + }]); } setFilter({ filter, diff --git a/app/src/protyle/render/av/filter.ts b/app/src/protyle/render/av/filter.ts index cef1664a1..e1d448c58 100644 --- a/app/src/protyle/render/av/filter.ts +++ b/app/src/protyle/render/av/filter.ts @@ -64,13 +64,9 @@ export const setFilter = (options: { return true; } }); - if (isSame) { + if (isSame || !hasMatch) { return; } - if (!hasMatch) { - options.data.filters.push(newFilter) - } - transaction(options.protyle, [{ action: "setAttrView", id: options.data.id, @@ -148,12 +144,42 @@ export const setFilter = (options: { label: `` }); } + menu.addItem({ + icon: "iconTrashcan", + label: window.siyuan.languages.delete, + click() { + const oldFilters = Object.assign([], options.data.filters); + options.data.filters.find((item: IAVFilter, index: number) => { + if (item.column === options.filter.column) { + options.data.filters.splice(index, 1); + return true; + } + }); + transaction(options.protyle, [{ + action: "setAttrView", + id: options.data.id, + data: { + filters: options.data.filters + } + }], [{ + action: "setAttrView", + id: options.data.id, + data: { + filters: oldFilters + } + }]); + const menuElement = hasClosestByClassName(options.target, "b3-menu"); + if (menuElement) { + menuElement.innerHTML = getFiltersHTML(options.data); + } + } + }); const selectElement = (window.siyuan.menus.menu.element.querySelector(".b3-select") as HTMLSelectElement); selectElement.addEventListener("change", () => { if (selectElement.value === "Is empty" || selectElement.value === "Is not empty") { - textElement.parentElement.parentElement.classList.add("fn__none"); + selectElement.parentElement.parentElement.nextElementSibling.classList.add("fn__none"); } else { - textElement.parentElement.parentElement.classList.remove("fn__none"); + selectElement.parentElement.parentElement.nextElementSibling.classList.remove("fn__none"); } }); const textElement = window.siyuan.menus.menu.element.querySelector(".b3-text-field") as HTMLInputElement; @@ -169,13 +195,15 @@ export const setFilter = (options: { } }); if (selectElement.value === "Is empty" || selectElement.value === "Is not empty") { - textElement.parentElement.parentElement.classList.add("fn__none"); + selectElement.parentElement.parentElement.nextElementSibling.classList.add("fn__none"); } else { - textElement.parentElement.parentElement.classList.remove("fn__none"); + selectElement.parentElement.parentElement.nextElementSibling.classList.remove("fn__none"); } } menu.open({x: rectTarget.left, y: rectTarget.bottom}); - textElement.select(); + if (textElement) { + textElement.select(); + } }; export const addFilter = (options: { @@ -228,13 +256,12 @@ export const addFilter = (options: { options.menuElement.innerHTML = getFiltersHTML(options.data); setPosition(options.menuElement, options.tabRect.right - options.menuElement.clientWidth, options.tabRect.bottom, options.tabRect.height); const filterElement = options.menuElement.querySelector(`[data-id="${column.id}"] .b3-chip`) as HTMLElement; - const colType = filterElement.getAttribute("data-coltype") as TAVCol; setFilter({ filter: { - operator: filterElement.dataset.op as TAVFilterOperator, - column: filterElement.parentElement.parentElement.dataset.id, + operator: "Contains", + column: column.id, value: { - [colType]: {content: filterElement.dataset.value} + [column.type]: cellValue } }, protyle: options.protyle, diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts index ce63688cb..a43811ecc 100644 --- a/app/src/protyle/render/av/render.ts +++ b/app/src/protyle/render/av/render.ts @@ -62,7 +62,7 @@ ${column.wrap ? "" : "white-space: nowrap;"}"> } else if (cell.valueType === "number") { text = `${cell.value?.number.content || ""}`; } else if (cell.valueType === "mSelect" || cell.valueType === "select") { - cell.value?.mSelect.forEach((item: { content: string, color: string }) => { + cell.value?.mSelect?.forEach((item: { content: string, color: string }) => { text += `${item.content}`; }); if (!text) {