mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 23:20:13 +01:00
This commit is contained in:
parent
13f5c0adf6
commit
e7bdb3e4c2
1 changed files with 67 additions and 6 deletions
|
|
@ -8,7 +8,7 @@ import {genCellValue} from "./cell";
|
||||||
import * as dayjs from "dayjs";
|
import * as dayjs from "dayjs";
|
||||||
import {unicode2Emoji} from "../../../emoji";
|
import {unicode2Emoji} from "../../../emoji";
|
||||||
import {openMenuPanel} from "./openMenuPanel";
|
import {openMenuPanel} from "./openMenuPanel";
|
||||||
import {fetchSyncPost} from "../../../util/fetch";
|
import {fetchPost, fetchSyncPost} from "../../../util/fetch";
|
||||||
import {showMessage} from "../../../dialog/message";
|
import {showMessage} from "../../../dialog/message";
|
||||||
import {upDownHint} from "../../../util/upDownHint";
|
import {upDownHint} from "../../../util/upDownHint";
|
||||||
import {getFieldsByData} from "./view";
|
import {getFieldsByData} from "./view";
|
||||||
|
|
@ -427,12 +427,10 @@ export const setFilter = async (options: {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else if (["text", "url", "block", "mAsset", "email", "phone", "template", "relation"].includes(filterValue.type)) {
|
} else if (["text", "url", "block", "mAsset", "email", "phone", "template"].includes(filterValue.type)) {
|
||||||
let value = "";
|
let value = "";
|
||||||
if (filterValue) {
|
if (filterValue) {
|
||||||
if (filterValue.type === "relation") {
|
if (filterValue.type === "mAsset") {
|
||||||
value = filterValue.relation.blockIDs[0] || "";
|
|
||||||
} else if (filterValue.type === "mAsset") {
|
|
||||||
value = filterValue.mAsset[0]?.content || "";
|
value = filterValue.mAsset[0]?.content || "";
|
||||||
} else {
|
} else {
|
||||||
value = filterValue[filterValue.type as "text"].content || "";
|
value = filterValue[filterValue.type as "text"].content || "";
|
||||||
|
|
@ -443,6 +441,65 @@ export const setFilter = async (options: {
|
||||||
type: "readonly",
|
type: "readonly",
|
||||||
label: `<input style="margin: 4px 0" value="${value}" class="b3-text-field fn__size200">`
|
label: `<input style="margin: 4px 0" value="${value}" class="b3-text-field fn__size200">`
|
||||||
});
|
});
|
||||||
|
} else if (filterValue.type === "relation") {
|
||||||
|
let value = "";
|
||||||
|
if (filterValue) {
|
||||||
|
value = filterValue.relation.blockIDs[0] || "";
|
||||||
|
}
|
||||||
|
menu.addItem({
|
||||||
|
iconHTML: "",
|
||||||
|
type: "readonly",
|
||||||
|
label: `<input style="margin: 4px 0" value="${value}" class="b3-text-field fn__size200"><div class="protyle-hint b3-list b3-list--background fn__none"></div>`,
|
||||||
|
bind(element) {
|
||||||
|
const inputElement = element.querySelector("input");
|
||||||
|
const listElement = inputElement.nextElementSibling;
|
||||||
|
const renderList = () => {
|
||||||
|
fetchPost("/api/av/getAttributeViewPrimaryKeyValues", {
|
||||||
|
id: options.data.id,
|
||||||
|
keyword: inputElement.value,
|
||||||
|
}, response => {
|
||||||
|
let html = "";
|
||||||
|
(response.data.rows.values as IAVCellValue[] || []).forEach((item, index) => {
|
||||||
|
html += `<div class="b3-list-item${index === 0 ? " b3-list-item--focus" : ""}">${item.block.content}</div>`;
|
||||||
|
});
|
||||||
|
listElement.innerHTML = html;
|
||||||
|
if (html === "") {
|
||||||
|
listElement.classList.add("fn__none");
|
||||||
|
} else {
|
||||||
|
listElement.classList.remove("fn__none");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
inputElement.addEventListener("input", (event: KeyboardEvent) => {
|
||||||
|
if (event.isComposing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
renderList();
|
||||||
|
});
|
||||||
|
inputElement.addEventListener("compositionend", () => {
|
||||||
|
renderList();
|
||||||
|
});
|
||||||
|
inputElement.addEventListener("keydown", (event) => {
|
||||||
|
if (event.isComposing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.key !== "Enter" && listElement.innerHTML !== "") {
|
||||||
|
listElement.classList.remove("fn__none");
|
||||||
|
}
|
||||||
|
upDownHint(listElement, event);
|
||||||
|
if (event.key === "Enter") {
|
||||||
|
if (listElement.classList.contains("fn__none")) {
|
||||||
|
menu.close();
|
||||||
|
} else {
|
||||||
|
inputElement.value = listElement.querySelector(".b3-list-item--focus").textContent.replace(/\n/g, " ");
|
||||||
|
listElement.classList.add("fn__none");
|
||||||
|
}
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (filterValue.type === "number") {
|
} else if (filterValue.type === "number") {
|
||||||
menu.addItem({
|
menu.addItem({
|
||||||
iconHTML: "",
|
iconHTML: "",
|
||||||
|
|
@ -575,7 +632,7 @@ export const setFilter = async (options: {
|
||||||
});
|
});
|
||||||
|
|
||||||
const textElements: NodeListOf<HTMLInputElement> = menu.element.querySelectorAll(".b3-text-field");
|
const textElements: NodeListOf<HTMLInputElement> = menu.element.querySelectorAll(".b3-text-field");
|
||||||
if (filterValue.type !== "select" && filterValue.type !== "mSelect") {
|
if (!["relation", "select", "mSelect"].includes(filterValue.type)) {
|
||||||
textElements.forEach(item => {
|
textElements.forEach(item => {
|
||||||
item.addEventListener("keydown", (event: KeyboardEvent) => {
|
item.addEventListener("keydown", (event: KeyboardEvent) => {
|
||||||
if (event.isComposing) {
|
if (event.isComposing) {
|
||||||
|
|
@ -591,6 +648,10 @@ export const setFilter = async (options: {
|
||||||
}
|
}
|
||||||
toggleEmpty(operationElement, operationElement.value, filterValue.type);
|
toggleEmpty(operationElement, operationElement.value, filterValue.type);
|
||||||
menu.open({x: rectTarget.left, y: rectTarget.bottom});
|
menu.open({x: rectTarget.left, y: rectTarget.bottom});
|
||||||
|
if (filterValue.type === "relation") {
|
||||||
|
const inputRect = textElements[0].getBoundingClientRect();
|
||||||
|
textElements[0].nextElementSibling.setAttribute("style", `position:fixed;top:${inputRect.bottom}px;left:${inputRect.left}px`);
|
||||||
|
}
|
||||||
if (textElements.length > 0) {
|
if (textElements.length > 0) {
|
||||||
textElements[0].select();
|
textElements[0].select();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue