mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-22 09:30:14 +01:00
This commit is contained in:
parent
714557550c
commit
d45421572e
2 changed files with 18 additions and 16 deletions
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue