From 5e189c300ef69cbcc293337b1a16e0a058a3e46d Mon Sep 17 00:00:00 2001 From: Vanessa Date: Wed, 3 Jan 2024 00:21:26 +0800 Subject: [PATCH] :bug: fix https://github.com/siyuan-note/siyuan/issues/10056 --- app/src/protyle/render/av/cell.ts | 4 ++-- app/src/protyle/render/av/filter.ts | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/src/protyle/render/av/cell.ts b/app/src/protyle/render/av/cell.ts index e2f42e009..d92329d62 100644 --- a/app/src/protyle/render/av/cell.ts +++ b/app/src/protyle/render/av/cell.ts @@ -131,8 +131,8 @@ export const genCellValue = (colType: TAVCol, value: string | any) => { cellValue = { type: colType, number: { - content: 0, - isNotEmpty: true + content: null, + isNotEmpty: false } }; } else if (["text", "block", "url", "phone", "email", "template"].includes(colType)) { diff --git a/app/src/protyle/render/av/filter.ts b/app/src/protyle/render/av/filter.ts index 615cccf14..4c1f90a2f 100644 --- a/app/src/protyle/render/av/filter.ts +++ b/app/src/protyle/render/av/filter.ts @@ -67,10 +67,10 @@ export const setFilter = async (options: { const menu = new Menu("set-filter-" + options.filter.column, () => { const oldFilters = JSON.parse(JSON.stringify(options.data.view.filters)); const selectElement = window.siyuan.menus.menu.element.querySelector(".b3-select") as HTMLSelectElement; - if (!selectElement) { + const operator = selectElement.value as TAVFilterOperator; + if (!selectElement || !operator) { return; } - const operator = selectElement.value as TAVFilterOperator; let hasMatch = false; let cellValue: IAVCellValue; if (textElements.length > 0) { @@ -101,6 +101,10 @@ export const setFilter = async (options: { } }); cellValue = genCellValue(filterType, mSelect); + } else if (filterType === "checkbox") { + cellValue = genCellValue(filterType, { + checked: operator === "Is true" + }); } else { cellValue = genCellValue(filterType, undefined); } @@ -112,6 +116,12 @@ export const setFilter = async (options: { let isSame = false; options.data.view.filters.find((filter, index) => { if (filter.column === options.filter.column) { + if (filter.type && filter.type === "checkbox") { + hasMatch = true; + delete filter.type; + options.data.view.filters[index] = newFilter; + return true; + } delete filter.type; if (objEquals(filter, newFilter)) { isSame = true; @@ -187,8 +197,12 @@ export const setFilter = async (options: { } switch (filterType) { case "checkbox": - selectHTML = ` -`; + selectHTML = ` +`; + if (options.filter.type) { + // 初始化时有 type 字段 + selectHTML = `${selectHTML}`; + } break; case "block": case "text":