import {fetchPost} from "../../../util/fetch"; import {getColIconByType} from "./col"; import {showHeaderCellMenu} from "./cell"; import {Constants} from "../../../constants"; export const avRender = (element: Element, cb?: () => void) => { let avElements: Element[] = []; if (element.getAttribute("data-type") === "NodeAttributeView") { // 编辑器内代码块编辑渲染 avElements = [element]; } else { avElements = Array.from(element.querySelectorAll('[data-type="NodeAttributeView"]')); } if (avElements.length === 0) { return; } if (avElements.length > 0) { avElements.forEach((e: HTMLElement) => { if (e.getAttribute("data-render") === "true") { return; } fetchPost("/api/av/renderAttributeView", {id: e.getAttribute("data-av-id")}, (response) => { const data = response.data.av; // header let tableHTML = '
'; let index = 0; data.columns.forEach((column: IAVColumn) => { if (column.hidden) { return; } tableHTML += `
${column.name}
`; index++; }); tableHTML += `
`; // body data.rows.forEach((row: IAVRow) => { tableHTML += `
`; row.cells.forEach((cell, index) => { if (data.columns[index].hidden) { return; } let text: string; if (cell.valueType === "text") { text = cell.value?.text.content || ""; } else if (cell.valueType === "block") { text = cell.value?.block.content || ""; } else if (cell.valueType === "number") { text = cell.value?.number.content || ""; } else if (cell.valueType === "select") { text = cell.value?.select.content || ""; } else if (cell.valueType === "mSelect") { text = cell.value?.mSelect.content || ""; } else if (cell.valueType === "date") { text = cell.value?.date.content || ""; } tableHTML += `
${text}
`; }); tableHTML += "
"; }); const paddingLeft = e.parentElement.style.paddingLeft; const paddingRight = e.parentElement.style.paddingRight; e.style.width = e.parentElement.clientWidth + "px"; e.style.alignSelf = "center"; e.firstElementChild.outerHTML = `
Table
${data.title || ""}
${tableHTML}
${window.siyuan.languages.addAttr}
`; e.setAttribute("data-render", "true"); if (cb) { cb(); } }); }); } }; let lastParentID: string let lastElement: HTMLElement export const refreshAV = (protyle: IProtyle, operation: IOperation) => { if (lastParentID === operation.parentID && protyle.contentElement.isSameNode(lastElement)) { return } lastElement = protyle.contentElement; lastParentID = operation.parentID; if (operation.action === "addAttrViewCol") { Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-av-id="${operation.parentID}"]`)).forEach((item: HTMLElement) => { item.removeAttribute("data-render"); avRender(item, () => { showHeaderCellMenu(protyle, item, item.querySelector(".av__row--header").lastElementChild.previousElementSibling as HTMLElement); }); }); } else { Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-av-id="${operation.parentID}"]`)).forEach((item: HTMLElement) => { item.removeAttribute("data-render"); avRender(item); }); } setTimeout(() => { lastParentID = null; }, Constants.TIMEOUT_TRANSITION); };