Vanessa 2024-10-09 11:55:48 +08:00
parent 5bb7a630a3
commit 0d1cba588a
2 changed files with 27 additions and 32 deletions

View file

@ -70,7 +70,7 @@ export const openMenuPanel = (options: {
const data = response.data as IAV;
let html;
if (options.type === "config") {
html = getViewHTML(data.view);
html = getViewHTML(data);
} else if (options.type === "properties") {
html = getPropertiesHTML(data.view);
} else if (options.type === "sorts") {
@ -518,7 +518,7 @@ export const openMenuPanel = (options: {
event.stopPropagation();
break;
} else if (type === "go-config") {
menuElement.innerHTML = getViewHTML(data.view);
menuElement.innerHTML = getViewHTML(data);
setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height);
bindViewEvent({protyle: options.protyle, data, menuElement, blockElement: options.blockElement});
window.siyuan.menus.menu.remove();
@ -758,16 +758,12 @@ export const openMenuPanel = (options: {
event.stopPropagation();
break;
} else if (type === "delete-view") {
if (data.views.length === 1) {
removeBlock(options.protyle, options.blockElement, getEditorRange(options.blockElement), "remove");
} else {
transaction(options.protyle, [{
action: "removeAttrViewView",
avID,
id: data.viewID,
blockID
}]);
}
transaction(options.protyle, [{
action: "removeAttrViewView",
avID,
id: data.viewID,
blockID
}]);
avPanelElement.remove();
event.preventDefault();
event.stopPropagation();

View file

@ -63,14 +63,12 @@ export const openViewMenu = (options: { protyle: IProtyle, blockElement: HTMLEle
options.blockElement.setAttribute(Constants.CUSTOM_SY_AV_VIEW, id);
}
});
menu.addItem({
icon: "iconTrashcan",
label: window.siyuan.languages.delete,
click() {
document.querySelector(".av__panel")?.remove();
if (options.blockElement.querySelectorAll(".layout-tab-bar .item").length === 1) {
removeBlock(options.protyle, options.blockElement, getEditorRange(options.blockElement), "remove");
} else {
if (options.blockElement.querySelectorAll(".layout-tab-bar .item").length > 1) {
menu.addItem({
icon: "iconTrashcan",
label: window.siyuan.languages.delete,
click() {
document.querySelector(".av__panel")?.remove();
transaction(options.protyle, [{
action: "removeAttrViewView",
avID: options.blockElement.dataset.avId,
@ -78,8 +76,8 @@ export const openViewMenu = (options: { protyle: IProtyle, blockElement: HTMLEle
blockID: options.blockElement.dataset.nodeId
}]);
}
}
});
});
}
const rect = options.element.getBoundingClientRect();
menu.open({
x: rect.left,
@ -156,46 +154,47 @@ export const bindViewEvent = (options: {
});
};
export const getViewHTML = (data: IAVTable) => {
export const getViewHTML = (data: IAV) => {
const view = data.view;
return `<div class="b3-menu__items">
<button class="b3-menu__item" data-type="nobg">
<span class="b3-menu__label ft__center">${window.siyuan.languages.config}</span>
</button>
<button class="b3-menu__separator"></button>
<button class="b3-menu__item" data-type="nobg">
<span style="padding: 5px;margin-right: 8px;width: 14px;font-size: 14px;" class="block__icon block__icon--show" data-icon="${data.icon}" data-type="update-view-icon">${data.icon ? unicode2Emoji(data.icon) : '<svg><use xlink:href="#iconTable"></use></svg>'}</span>
<span class="b3-menu__label" style="padding: 4px;display: flex;"><input data-type="name" class="b3-text-field fn__block" type="text" value="${data.name}" data-value="${data.name}"></span>
<span style="padding: 5px;margin-right: 8px;width: 14px;font-size: 14px;" class="block__icon block__icon--show" data-icon="${view.icon}" data-type="update-view-icon">${view.icon ? unicode2Emoji(view.icon) : '<svg><use xlink:href="#iconTable"></use></svg>'}</span>
<span class="b3-menu__label" style="padding: 4px;display: flex;"><input data-type="name" class="b3-text-field fn__block" type="text" value="${view.name}" data-value="${view.name}"></span>
</button>
<button class="b3-menu__separator"></button>
<button class="b3-menu__item" data-type="go-properties">
<svg class="b3-menu__icon"></svg>
<span class="b3-menu__label">${window.siyuan.languages.attr}</span>
<span class="b3-menu__accelerator">${data.columns.filter((item: IAVColumn) => !item.hidden).length}/${data.columns.length}</span>
<span class="b3-menu__accelerator">${view.columns.filter((item: IAVColumn) => !item.hidden).length}/${view.columns.length}</span>
<svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button>
<button class="b3-menu__item" data-type="goFilters">
<svg class="b3-menu__icon"><use xlink:href="#iconFilter"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.filter}</span>
<span class="b3-menu__accelerator">${data.filters.length}</span>
<span class="b3-menu__accelerator">${view.filters.length}</span>
<svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button>
<button class="b3-menu__item" data-type="goSorts">
<svg class="b3-menu__icon"><use xlink:href="#iconSort"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.sort}</span>
<span class="b3-menu__accelerator">${data.sorts.length}</span>
<span class="b3-menu__accelerator">${view.sorts.length}</span>
<svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button>
<button class="b3-menu__item" data-type="set-page-size" data-size="${data.pageSize}">
<button class="b3-menu__item" data-type="set-page-size" data-size="${view.pageSize}">
<svg class="b3-menu__icon"></svg>
<span class="b3-menu__label">${window.siyuan.languages.pageCount}</span>
<span class="b3-menu__accelerator">${data.pageSize === Constants.SIZE_DATABASE_MAZ_SIZE ? window.siyuan.languages.all : data.pageSize}</span>
<span class="b3-menu__accelerator">${view.pageSize === Constants.SIZE_DATABASE_MAZ_SIZE ? window.siyuan.languages.all : view.pageSize}</span>
<svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button>
<label class="b3-menu__item">
<svg class="b3-menu__icon"></svg>
<span class="fn__flex-center">${window.siyuan.languages.showTitle}</span>
<span class="fn__space fn__flex-1"></span>
<input data-type="toggle-view-title" type="checkbox" class="b3-switch b3-switch--menu" ${data.hideAttrViewName ? "" : "checked"}>
<input data-type="toggle-view-title" type="checkbox" class="b3-switch b3-switch--menu" ${view.hideAttrViewName ? "" : "checked"}>
</label>
<button class="b3-menu__separator"></button>
<button class="b3-menu__item" data-type="duplicate-view">
@ -204,7 +203,7 @@ export const getViewHTML = (data: IAVTable) => {
</svg>
<span class="b3-menu__label">${window.siyuan.languages.duplicate}</span>
</button>
<button class="b3-menu__item" data-type="delete-view">
<button class="b3-menu__item${data.views.length > 1 ? "" : " fn__none"}" data-type="delete-view">
<svg class="b3-menu__icon"><use xlink:href="#iconTrashcan"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.delete}</span>
</button>