@@ -279,6 +279,9 @@ const genAttr = (attrs: IObject, focusName = "bookmark", cb: (dialog: Dialog, rm
target.classList.add("item--focus")
dialog.element.querySelectorAll(".custom-attr").forEach((item: HTMLElement) => {
if (item.dataset.type === target.dataset.type) {
+ if (item.dataset.type === "av" && item.innerHTML === "") {
+ renderAVAttribute(item, attrs.id);
+ }
item.classList.remove("fn__none")
} else {
item.classList.add("fn__none")
diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts
index b1ac01b82..5e499a314 100644
--- a/app/src/protyle/render/av/render.ts
+++ b/app/src/protyle/render/av/render.ts
@@ -193,3 +193,62 @@ export const refreshAV = (protyle: IProtyle, operation: IOperation) => {
lastParentID = null;
}, Constants.TIMEOUT_TRANSITION);
};
+
+const genAVValueHTML = (value: IAVCellValue) => {
+ let html = ""
+ switch (value.type) {
+ case "text":
+ html = `
`;
+ break;
+ case "number":
+ html = `
`;
+ break;
+ case "mSelect":
+ case "select":
+ value.mSelect.forEach(item => {
+ html += `
${item.content}`;
+ })
+ break;
+ case "date":
+ html = `
`;
+ if (value.date.hasEndDate) {
+ html += `
+
`;
+ }
+ break;
+ case "url":
+ html = `
`;
+ break;
+ }
+ return html;
+}
+
+export const renderAVAttribute = (element: HTMLElement, id: string) => {
+ fetchPost("/api/av/getAttributeViewKeys", {id}, (response) => {
+ let html = ""
+ response.data.forEach((table: {
+ keyValues: {
+ key: {
+ type: TAVCol,
+ name: string
+ },
+ values: IAVCellValue[]
+ }[],
+ avName: string
+ }) => {
+ html += `
${table.avName}
`;
+ table.keyValues?.forEach(item => {
+ html += `
+
+
+ ${item.key.name || window.siyuan.languages.title}
+
+
+ ${genAVValueHTML(item.values[0])}
+
+
`
+ })
+ })
+ element.innerHTML = html
+ })
+}
diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts
index 0e1bb291c..2d896dbc3 100644
--- a/app/src/types/index.d.ts
+++ b/app/src/types/index.d.ts
@@ -45,7 +45,7 @@ type TEventBus = "ws-main" |
"open-menu-av" | "open-menu-content" | "open-menu-breadcrumbmore" |
"input-search" |
"loaded-protyle"
-type TAVCol = "text" | "date" | "number" | "relation" | "rollup" | "select" | "block" | "mSelect"
+type TAVCol = "text" | "date" | "number" | "relation" | "rollup" | "select" | "block" | "mSelect" | "url"
type THintSource = "search" | "av" | "hint";
type TAVFilterOperator =
"="
@@ -931,5 +931,6 @@ interface IAVCellValue {
number?: { content?: number, isNotEmpty: boolean, format?: string, formattedContent?: string },
mSelect?: { content: string, color: string }[]
block?: { content: string, id: string }
+ url?: { content: string }
date?: { content?: number, content2?: number, hasEndDate?: boolean }
}