diff --git a/app/src/protyle/render/av/filter.ts b/app/src/protyle/render/av/filter.ts index 420f04e00..86eba2559 100644 --- a/app/src/protyle/render/av/filter.ts +++ b/app/src/protyle/render/av/filter.ts @@ -11,6 +11,7 @@ import {openMenuPanel} from "./openMenuPanel"; import {fetchSyncPost} from "../../../util/fetch"; import {showMessage} from "../../../dialog/message"; import {upDownHint} from "../../../util/upDownHint"; +import {getFieldsByData} from "./view"; export const getDefaultOperatorByType = (type: TAVCol) => { if (["select", "number", "date", "created", "updated"].includes(type)) { @@ -190,7 +191,7 @@ export const setFilter = async (options: { }]); const menuElement = hasClosestByClassName(options.target, "b3-menu"); if (menuElement) { - menuElement.innerHTML = getFiltersHTML(options.data.view); + menuElement.innerHTML = getFiltersHTML(options.data); } }); if (menu.isOpen) { @@ -198,7 +199,8 @@ export const setFilter = async (options: { } let selectHTML = ""; let colData: IAVColumn; - options.data.view.columns.find((column) => { + const fields = getFieldsByData(options.data) + fields.find((column) => { if (column.id === options.filter.column) { colData = column; return true; @@ -217,7 +219,7 @@ export const setFilter = async (options: { return; } let targetAVId = ""; - options.data.view.columns.find((column) => { + fields.find((column) => { if (column.id === colData.rollup.relationKeyID) { targetAVId = column.relation.avID; return true; @@ -499,7 +501,7 @@ export const setFilter = async (options: { }]); const menuElement = hasClosestByClassName(options.target, "b3-menu"); if (menuElement) { - menuElement.innerHTML = getFiltersHTML(options.data.view); + menuElement.innerHTML = getFiltersHTML(options.data); } } }); @@ -571,7 +573,7 @@ export const addFilter = (options: { blockElement: Element }) => { const menu = new Menu("av-add-filter"); - options.data.view.columns.forEach((column) => { + getFieldsByData(options.data).forEach((column) => { let filter: IAVFilter; options.data.view.filters.find((item) => { if (item.column === column.id && item.value.type === column.type) { @@ -592,7 +594,7 @@ export const addFilter = (options: { value: cellValue, }; options.data.view.filters.push(filter); - options.menuElement.innerHTML = getFiltersHTML(options.data.view); + 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; setFilter({ @@ -613,11 +615,12 @@ export const addFilter = (options: { }); }; -export const getFiltersHTML = (data: IAVTable) => { +export const getFiltersHTML = (data: IAV) => { let html = ""; + const fields = getFieldsByData(data); const genFilterItem = (filter: IAVFilter) => { let filterHTML = ""; - data.columns.find((item) => { + fields.find((item) => { if (item.id === filter.column && item.type === filter.value.type) { let filterText = ""; const filterValue = item.type === "rollup" ? (filter.value.rollup?.contents?.length > 0 ? filter.value.rollup.contents[0] : {type: "rollup"} as IAVCellValue) : filter.value; @@ -717,8 +720,7 @@ export const getFiltersHTML = (data: IAVTable) => { }); return filterHTML; }; - - data.filters.forEach((item: IAVFilter) => { + data.view.filters.forEach((item: IAVFilter) => { const filterHTML = genFilterItem(item); if (filterHTML) { html += ` ${html} - diff --git a/app/src/protyle/render/av/openMenuPanel.ts b/app/src/protyle/render/av/openMenuPanel.ts index e5f0580aa..ac9d0308a 100644 --- a/app/src/protyle/render/av/openMenuPanel.ts +++ b/app/src/protyle/render/av/openMenuPanel.ts @@ -86,7 +86,7 @@ export const openMenuPanel = (options: { } else if (options.type === "switcher") { html = getSwitcherHTML(data.views, data.viewID); } else if (options.type === "filters") { - html = getFiltersHTML(data.view); + html = getFiltersHTML(data); } else if (options.type === "select") { html = getSelectHTML(data.view, options.cellElements, true); } else if (options.type === "asset") { @@ -285,7 +285,7 @@ export const openMenuPanel = (options: { data: oldData, blockID }]); - menuElement.innerHTML = getFiltersHTML(data.view); + menuElement.innerHTML = getFiltersHTML(data); return; } if (targetElement.querySelector('[data-type="av-view-edit"]')) { @@ -621,7 +621,7 @@ export const openMenuPanel = (options: { event.stopPropagation(); break; } else if (type === "goFilters") { - menuElement.innerHTML = getFiltersHTML(data.view); + menuElement.innerHTML = getFiltersHTML(data); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); window.siyuan.menus.menu.remove(); event.preventDefault(); @@ -640,7 +640,7 @@ export const openMenuPanel = (options: { blockID }]); data.view.filters = []; - menuElement.innerHTML = getFiltersHTML(data.view); + menuElement.innerHTML = getFiltersHTML(data); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); window.siyuan.menus.menu.remove(); event.preventDefault(); @@ -679,7 +679,7 @@ export const openMenuPanel = (options: { data: oldFilters, blockID }]); - menuElement.innerHTML = getFiltersHTML(data.view); + menuElement.innerHTML = getFiltersHTML(data); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); event.preventDefault(); event.stopPropagation();