diff --git a/app/src/protyle/render/av/col.ts b/app/src/protyle/render/av/col.ts index 7f6aea10d..0b1bc7acc 100644 --- a/app/src/protyle/render/av/col.ts +++ b/app/src/protyle/render/av/col.ts @@ -911,33 +911,41 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen export const removeCol = (options: { protyle: IProtyle, data: IAV, - previousID: string, - colData: IAVColumn, avID: string, blockID: string, isCustomAttr: boolean menuElement: HTMLElement, blockElement: Element avPanelElement: Element - tabRect: DOMRect + tabRect: DOMRect, + isTwoWay: boolean }) => { const colId = options.menuElement.querySelector(".b3-menu__item").getAttribute("data-col-id"); + let previousID = ""; + const colData = options.data.view.columns.find((item: IAVColumn, index) => { + if (item.id === colId) { + previousID = options.data.view.columns[index - 1]?.id; + options.data.view.columns.splice(index, 1); + return true; + } + }); const newUpdated = dayjs().format("YYYYMMDDHHmmss"); transaction(options.protyle, [{ action: "removeAttrViewCol", id: colId, avID: options.avID, + removeDest: options.isTwoWay }, { action: "doUpdateUpdated", id: options.blockID, data: newUpdated, }], [{ action: "addAttrViewCol", - name: options.colData.name, + name: colData.name, avID: options.avID, - type: options.colData.type, + type: colData.type, id: colId, - previousID:options.previousID + previousID: previousID }, { action: "doUpdateUpdated", id: options.blockID, diff --git a/app/src/protyle/render/av/openMenuPanel.ts b/app/src/protyle/render/av/openMenuPanel.ts index 7ec66dac4..1dbc8a0b4 100644 --- a/app/src/protyle/render/av/openMenuPanel.ts +++ b/app/src/protyle/render/av/openMenuPanel.ts @@ -1083,33 +1083,72 @@ export const openMenuPanel = (options: { event.stopPropagation(); break; } else if (type === "removeCol") { - tabRect = options.blockElement.querySelector(".av__views").getBoundingClientRect(); + if (!isCustomAttr) { + tabRect = options.blockElement.querySelector(".av__views").getBoundingClientRect(); + } const colId = menuElement.querySelector(".b3-menu__item").getAttribute("data-col-id"); - let previousID = ""; - const colData = data.view.columns.find((item: IAVColumn, index) => { + const colData = data.view.columns.find((item: IAVColumn) => { if (item.id === colId) { - previousID = data.view.columns[index - 1]?.id; - data.view.columns.splice(index, 1); return true; } }); - if (isCustomAttr || (colData.type === "relation" && colData.relation.isTwoWay)) { + const isTwoWay = colData.type === "relation" && colData.relation?.isTwoWay + if (isCustomAttr || isTwoWay) { const dialog = new Dialog({ - title: window.siyuan.languages.removeCol.replace("${x}", menuElement.querySelector("input").value), + title: isTwoWay ? window.siyuan.languages.removeCol.replace("${x}", menuElement.querySelector("input").value) : window.siyuan.languages.deleteOpConfirm, content: `
- ${window.siyuan.languages.confirmRemoveRelationField.replace("${x}", (menuElement.querySelector('.b3-text-field[data-type="colName"]') as HTMLInputElement).value)} -
-
- - - + ${isTwoWay ? window.siyuan.languages.confirmRemoveRelationField.replace("${x}", menuElement.querySelector('.b3-menu__item[data-type="goSearchAV"] .b3-menu__accelerator').textContent) : window.siyuan.languages.removeCol.replace("${x}", menuElement.querySelector("input").value)} +
+ +
+ +
+
`, }); + dialog.element.addEventListener("click", (event) => { + let target = event.target as HTMLElement; + while (target && !target.isSameNode(dialog.element)) { + if (target.classList.contains("b3-button--error")) { + removeCol({ + protyle: options.protyle, + data, + avID, + blockID, + menuElement, + isCustomAttr, + blockElement: options.blockElement, + avPanelElement, + tabRect, + isTwoWay: true + }); + dialog.destroy(); + break; + } else if (target.classList.contains("b3-button--warning")) { + removeCol({ + protyle: options.protyle, + data, + avID, + blockID, + menuElement, + isCustomAttr, + blockElement: options.blockElement, + avPanelElement, + tabRect, + isTwoWay: false + }); + dialog.destroy(); + break; + } else if (target.classList.contains("b3-button--info")) { + dialog.destroy(); + break; + } + target = target.parentElement; + } + }) } else { removeCol({ protyle: options.protyle, - previousID, - colData, data, avID, blockID, @@ -1117,7 +1156,8 @@ export const openMenuPanel = (options: { isCustomAttr, blockElement: options.blockElement, avPanelElement, - tabRect + tabRect, + isTwoWay: false }); } event.preventDefault();