diff --git a/app/src/protyle/render/av/col.ts b/app/src/protyle/render/av/col.ts
index 0b1bc7acc..99c8ff0f6 100644
--- a/app/src/protyle/render/av/col.ts
+++ b/app/src/protyle/render/av/col.ts
@@ -1,6 +1,6 @@
import {Menu} from "../../../plugin/Menu";
import {transaction} from "../../wysiwyg/transaction";
-import {fetchPost} from "../../../util/fetch";
+import {fetchPost, fetchSyncPost} from "../../../util/fetch";
import {getDefaultOperatorByType, setFilter} from "./filter";
import {genCellValue} from "./cell";
import {getPropertiesHTML, openMenuPanel} from "./openMenuPanel";
@@ -14,6 +14,7 @@ import {Constants} from "../../../constants";
import * as dayjs from "dayjs";
import {setPosition} from "../../../util/setPosition";
import {duplicateNameAddOne} from "../../../util/functions";
+import {Dialog} from "../../../dialog";
export const duplicateCol = (options: {
protyle: IProtyle,
@@ -845,30 +846,78 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen
menu.addItem({
icon: "iconTrashcan",
label: window.siyuan.languages.delete,
- click() {
- const newUpdated = dayjs().format("YYYYMMDDHHmmss");
- transaction(protyle, [{
- action: "removeAttrViewCol",
- id: colId,
+ async click() {
+ if (type === "relation") {
+ const response = await fetchSyncPost("/api/av/getAttributeView", {id: avID})
+ const colData = response.data.av.keyValues.find((item: {
+ key: { id: string }
+ }) => item.key.id === colId);
+ if (colData.key.relation?.isTwoWay) {
+ const relResponse = await fetchSyncPost("/api/av/getAttributeView", {id: colData.key.relation.avID})
+ const dialog = new Dialog({
+ title: window.siyuan.languages.removeCol.replace("${x}", colData.key.name),
+ content: `
+ ${window.siyuan.languages.confirmRemoveRelationField.replace("${x}", relResponse.data.av.name)}
+
+
+
+
+
+
+
`,
+ });
+ dialog.element.addEventListener("click", (event) => {
+ let target = event.target as HTMLElement;
+ while (target && !target.isSameNode(dialog.element)) {
+ if (target.classList.contains("b3-button--error")) {
+ removeColByMenu({
+ protyle,
+ colId,
+ avID,
+ blockID,
+ oldValue,
+ type,
+ cellElement,
+ blockElement,
+ removeDest: true
+ })
+ dialog.destroy();
+ break;
+ } else if (target.classList.contains("b3-button--warning")) {
+ removeColByMenu({
+ protyle,
+ colId,
+ avID,
+ blockID,
+ oldValue,
+ type,
+ cellElement,
+ blockElement,
+ removeDest: false
+ })
+ dialog.destroy();
+ break;
+ } else if (target.classList.contains("b3-button--info")) {
+ dialog.destroy();
+ break;
+ }
+ target = target.parentElement;
+ }
+ })
+ return
+ }
+ }
+ removeColByMenu({
+ protyle,
+ colId,
avID,
- }, {
- action: "doUpdateUpdated",
- id: blockID,
- data: newUpdated,
- }], [{
- action: "addAttrViewCol",
- name: oldValue,
- avID,
- type: type,
- id: colId,
- previousID: cellElement.previousElementSibling?.getAttribute("data-col-id") || "",
- }, {
- action: "doUpdateUpdated",
- id: blockID,
- data: blockElement.getAttribute("updated")
- }]);
- removeAttrViewColAnimation(blockElement, colId);
- blockElement.setAttribute("updated", newUpdated);
+ blockID,
+ oldValue,
+ type,
+ cellElement,
+ blockElement,
+ removeDest: false
+ })
}
});
menu.addSeparator();
@@ -908,6 +957,43 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen
}
};
+const removeColByMenu = (options: {
+ protyle: IProtyle,
+ colId: string,
+ avID: string,
+ blockID: string,
+ oldValue: string,
+ type: TAVCol,
+ cellElement: HTMLElement,
+ blockElement: Element,
+ removeDest: boolean
+}) => {
+ const newUpdated = dayjs().format("YYYYMMDDHHmmss");
+ transaction(options.protyle, [{
+ action: "removeAttrViewCol",
+ id: options.colId,
+ avID: options.avID,
+ removeDest: options.removeDest
+ }, {
+ action: "doUpdateUpdated",
+ id: options.blockID,
+ data: newUpdated,
+ }], [{
+ action: "addAttrViewCol",
+ name: options.oldValue,
+ avID: options.avID,
+ type: options.type,
+ id: options.colId,
+ previousID: options.cellElement.previousElementSibling?.getAttribute("data-col-id") || "",
+ }, {
+ action: "doUpdateUpdated",
+ id: options.blockID,
+ data: options.blockElement.getAttribute("updated")
+ }]);
+ removeAttrViewColAnimation(options.blockElement, options.colId);
+ options.blockElement.setAttribute("updated", newUpdated);
+}
+
export const removeCol = (options: {
protyle: IProtyle,
data: IAV,