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; const data = response.data as IAV;
let html; let html;
if (options.type === "config") { if (options.type === "config") {
html = getViewHTML(data.view); html = getViewHTML(data);
} else if (options.type === "properties") { } else if (options.type === "properties") {
html = getPropertiesHTML(data.view); html = getPropertiesHTML(data.view);
} else if (options.type === "sorts") { } else if (options.type === "sorts") {
@ -518,7 +518,7 @@ export const openMenuPanel = (options: {
event.stopPropagation(); event.stopPropagation();
break; break;
} else if (type === "go-config") { } else if (type === "go-config") {
menuElement.innerHTML = getViewHTML(data.view); menuElement.innerHTML = getViewHTML(data);
setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height);
bindViewEvent({protyle: options.protyle, data, menuElement, blockElement: options.blockElement}); bindViewEvent({protyle: options.protyle, data, menuElement, blockElement: options.blockElement});
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
@ -758,16 +758,12 @@ export const openMenuPanel = (options: {
event.stopPropagation(); event.stopPropagation();
break; break;
} else if (type === "delete-view") { } else if (type === "delete-view") {
if (data.views.length === 1) {
removeBlock(options.protyle, options.blockElement, getEditorRange(options.blockElement), "remove");
} else {
transaction(options.protyle, [{ transaction(options.protyle, [{
action: "removeAttrViewView", action: "removeAttrViewView",
avID, avID,
id: data.viewID, id: data.viewID,
blockID blockID
}]); }]);
}
avPanelElement.remove(); avPanelElement.remove();
event.preventDefault(); event.preventDefault();
event.stopPropagation(); 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); options.blockElement.setAttribute(Constants.CUSTOM_SY_AV_VIEW, id);
} }
}); });
if (options.blockElement.querySelectorAll(".layout-tab-bar .item").length > 1) {
menu.addItem({ menu.addItem({
icon: "iconTrashcan", icon: "iconTrashcan",
label: window.siyuan.languages.delete, label: window.siyuan.languages.delete,
click() { click() {
document.querySelector(".av__panel")?.remove(); 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 {
transaction(options.protyle, [{ transaction(options.protyle, [{
action: "removeAttrViewView", action: "removeAttrViewView",
avID: options.blockElement.dataset.avId, avID: options.blockElement.dataset.avId,
@ -78,8 +76,8 @@ export const openViewMenu = (options: { protyle: IProtyle, blockElement: HTMLEle
blockID: options.blockElement.dataset.nodeId blockID: options.blockElement.dataset.nodeId
}]); }]);
} }
}
}); });
}
const rect = options.element.getBoundingClientRect(); const rect = options.element.getBoundingClientRect();
menu.open({ menu.open({
x: rect.left, 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"> return `<div class="b3-menu__items">
<button class="b3-menu__item" data-type="nobg"> <button class="b3-menu__item" data-type="nobg">
<span class="b3-menu__label ft__center">${window.siyuan.languages.config}</span> <span class="b3-menu__label ft__center">${window.siyuan.languages.config}</span>
</button> </button>
<button class="b3-menu__separator"></button> <button class="b3-menu__separator"></button>
<button class="b3-menu__item" data-type="nobg"> <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 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="${data.name}" data-value="${data.name}"></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>
<button class="b3-menu__separator"></button> <button class="b3-menu__separator"></button>
<button class="b3-menu__item" data-type="go-properties"> <button class="b3-menu__item" data-type="go-properties">
<svg class="b3-menu__icon"></svg> <svg class="b3-menu__icon"></svg>
<span class="b3-menu__label">${window.siyuan.languages.attr}</span> <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> <svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button> </button>
<button class="b3-menu__item" data-type="goFilters"> <button class="b3-menu__item" data-type="goFilters">
<svg class="b3-menu__icon"><use xlink:href="#iconFilter"></use></svg> <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__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> <svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button> </button>
<button class="b3-menu__item" data-type="goSorts"> <button class="b3-menu__item" data-type="goSorts">
<svg class="b3-menu__icon"><use xlink:href="#iconSort"></use></svg> <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__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> <svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button> </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> <svg class="b3-menu__icon"></svg>
<span class="b3-menu__label">${window.siyuan.languages.pageCount}</span> <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> <svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>
</button> </button>
<label class="b3-menu__item"> <label class="b3-menu__item">
<svg class="b3-menu__icon"></svg> <svg class="b3-menu__icon"></svg>
<span class="fn__flex-center">${window.siyuan.languages.showTitle}</span> <span class="fn__flex-center">${window.siyuan.languages.showTitle}</span>
<span class="fn__space fn__flex-1"></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> </label>
<button class="b3-menu__separator"></button> <button class="b3-menu__separator"></button>
<button class="b3-menu__item" data-type="duplicate-view"> <button class="b3-menu__item" data-type="duplicate-view">
@ -204,7 +203,7 @@ export const getViewHTML = (data: IAVTable) => {
</svg> </svg>
<span class="b3-menu__label">${window.siyuan.languages.duplicate}</span> <span class="b3-menu__label">${window.siyuan.languages.duplicate}</span>
</button> </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> <svg class="b3-menu__icon"><use xlink:href="#iconTrashcan"></use></svg>
<span class="b3-menu__label">${window.siyuan.languages.delete}</span> <span class="b3-menu__label">${window.siyuan.languages.delete}</span>
</button> </button>