Vanessa 2025-06-11 20:46:06 +08:00
parent 714557550c
commit d45421572e
2 changed files with 18 additions and 16 deletions

View file

@ -11,6 +11,7 @@ import {openMenuPanel} from "./openMenuPanel";
import {fetchSyncPost} from "../../../util/fetch"; import {fetchSyncPost} from "../../../util/fetch";
import {showMessage} from "../../../dialog/message"; import {showMessage} from "../../../dialog/message";
import {upDownHint} from "../../../util/upDownHint"; import {upDownHint} from "../../../util/upDownHint";
import {getFieldsByData} from "./view";
export const getDefaultOperatorByType = (type: TAVCol) => { export const getDefaultOperatorByType = (type: TAVCol) => {
if (["select", "number", "date", "created", "updated"].includes(type)) { if (["select", "number", "date", "created", "updated"].includes(type)) {
@ -190,7 +191,7 @@ export const setFilter = async (options: {
}]); }]);
const menuElement = hasClosestByClassName(options.target, "b3-menu"); const menuElement = hasClosestByClassName(options.target, "b3-menu");
if (menuElement) { if (menuElement) {
menuElement.innerHTML = getFiltersHTML(options.data.view); menuElement.innerHTML = getFiltersHTML(options.data);
} }
}); });
if (menu.isOpen) { if (menu.isOpen) {
@ -198,7 +199,8 @@ export const setFilter = async (options: {
} }
let selectHTML = ""; let selectHTML = "";
let colData: IAVColumn; let colData: IAVColumn;
options.data.view.columns.find((column) => { const fields = getFieldsByData(options.data)
fields.find((column) => {
if (column.id === options.filter.column) { if (column.id === options.filter.column) {
colData = column; colData = column;
return true; return true;
@ -217,7 +219,7 @@ export const setFilter = async (options: {
return; return;
} }
let targetAVId = ""; let targetAVId = "";
options.data.view.columns.find((column) => { fields.find((column) => {
if (column.id === colData.rollup.relationKeyID) { if (column.id === colData.rollup.relationKeyID) {
targetAVId = column.relation.avID; targetAVId = column.relation.avID;
return true; return true;
@ -499,7 +501,7 @@ export const setFilter = async (options: {
}]); }]);
const menuElement = hasClosestByClassName(options.target, "b3-menu"); const menuElement = hasClosestByClassName(options.target, "b3-menu");
if (menuElement) { if (menuElement) {
menuElement.innerHTML = getFiltersHTML(options.data.view); menuElement.innerHTML = getFiltersHTML(options.data);
} }
} }
}); });
@ -571,7 +573,7 @@ export const addFilter = (options: {
blockElement: Element blockElement: Element
}) => { }) => {
const menu = new Menu("av-add-filter"); const menu = new Menu("av-add-filter");
options.data.view.columns.forEach((column) => { getFieldsByData(options.data).forEach((column) => {
let filter: IAVFilter; let filter: IAVFilter;
options.data.view.filters.find((item) => { options.data.view.filters.find((item) => {
if (item.column === column.id && item.value.type === column.type) { if (item.column === column.id && item.value.type === column.type) {
@ -592,7 +594,7 @@ export const addFilter = (options: {
value: cellValue, value: cellValue,
}; };
options.data.view.filters.push(filter); 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); 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 filterElement = options.menuElement.querySelector(`[data-id="${column.id}"] .b3-chip`) as HTMLElement;
setFilter({ setFilter({
@ -613,11 +615,12 @@ export const addFilter = (options: {
}); });
}; };
export const getFiltersHTML = (data: IAVTable) => { export const getFiltersHTML = (data: IAV) => {
let html = ""; let html = "";
const fields = getFieldsByData(data);
const genFilterItem = (filter: IAVFilter) => { const genFilterItem = (filter: IAVFilter) => {
let filterHTML = ""; let filterHTML = "";
data.columns.find((item) => { fields.find((item) => {
if (item.id === filter.column && item.type === filter.value.type) { if (item.id === filter.column && item.type === filter.value.type) {
let filterText = ""; let filterText = "";
const filterValue = item.type === "rollup" ? (filter.value.rollup?.contents?.length > 0 ? filter.value.rollup.contents[0] : {type: "rollup"} as IAVCellValue) : filter.value; 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; return filterHTML;
}; };
data.view.filters.forEach((item: IAVFilter) => {
data.filters.forEach((item: IAVFilter) => {
const filterHTML = genFilterItem(item); const filterHTML = genFilterItem(item);
if (filterHTML) { if (filterHTML) {
html += `<button class="b3-menu__item" draggable="true" data-id="${item.column}" data-filter-type="${item.value.type}"> html += `<button class="b3-menu__item" draggable="true" data-id="${item.column}" data-filter-type="${item.value.type}">
@ -737,7 +739,7 @@ export const getFiltersHTML = (data: IAVTable) => {
</button> </button>
<button class="b3-menu__separator"></button> <button class="b3-menu__separator"></button>
${html} ${html}
<button class="b3-menu__item${data.filters.length === data.columns.length ? " fn__none" : ""}" data-type="addFilter"> <button class="b3-menu__item${data.view.filters.length === fields.length ? " fn__none" : ""}" data-type="addFilter">
<svg class="b3-menu__icon"><use xlink:href="#iconAdd"></use></svg> <svg class="b3-menu__icon"><use xlink:href="#iconAdd"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.addFilter}</span> <span class="b3-menu__label">${window.siyuan.languages.addFilter}</span>
</button> </button>

View file

@ -86,7 +86,7 @@ export const openMenuPanel = (options: {
} else if (options.type === "switcher") { } else if (options.type === "switcher") {
html = getSwitcherHTML(data.views, data.viewID); html = getSwitcherHTML(data.views, data.viewID);
} else if (options.type === "filters") { } else if (options.type === "filters") {
html = getFiltersHTML(data.view); html = getFiltersHTML(data);
} else if (options.type === "select") { } else if (options.type === "select") {
html = getSelectHTML(data.view, options.cellElements, true); html = getSelectHTML(data.view, options.cellElements, true);
} else if (options.type === "asset") { } else if (options.type === "asset") {
@ -285,7 +285,7 @@ export const openMenuPanel = (options: {
data: oldData, data: oldData,
blockID blockID
}]); }]);
menuElement.innerHTML = getFiltersHTML(data.view); menuElement.innerHTML = getFiltersHTML(data);
return; return;
} }
if (targetElement.querySelector('[data-type="av-view-edit"]')) { if (targetElement.querySelector('[data-type="av-view-edit"]')) {
@ -621,7 +621,7 @@ export const openMenuPanel = (options: {
event.stopPropagation(); event.stopPropagation();
break; break;
} else if (type === "goFilters") { } else if (type === "goFilters") {
menuElement.innerHTML = getFiltersHTML(data.view); menuElement.innerHTML = getFiltersHTML(data);
setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height);
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
event.preventDefault(); event.preventDefault();
@ -640,7 +640,7 @@ export const openMenuPanel = (options: {
blockID blockID
}]); }]);
data.view.filters = []; data.view.filters = [];
menuElement.innerHTML = getFiltersHTML(data.view); menuElement.innerHTML = getFiltersHTML(data);
setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height);
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
event.preventDefault(); event.preventDefault();
@ -679,7 +679,7 @@ export const openMenuPanel = (options: {
data: oldFilters, data: oldFilters,
blockID blockID
}]); }]);
menuElement.innerHTML = getFiltersHTML(data.view); menuElement.innerHTML = getFiltersHTML(data);
setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height);
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();