diff --git a/app/src/protyle/render/av/cell.ts b/app/src/protyle/render/av/cell.ts index c35bd0039..4bb1204b1 100644 --- a/app/src/protyle/render/av/cell.ts +++ b/app/src/protyle/render/av/cell.ts @@ -335,7 +335,7 @@ export const genCellValue = (colType: TAVCol, value: string | any) => { cellValue = { type: colType, number: { - content: null, + content: 0, isNotEmpty: false } }; @@ -865,7 +865,7 @@ export const updateCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, va } // formattedContent 在单元格渲染时没有用到,需对比保持一致 if (type === "date") { - cellValue.date.formattedContent= oldValue.date.formattedContent ; + cellValue.date.formattedContent = oldValue.date.formattedContent; } if (objEquals(cellValue, oldValue)) { return; diff --git a/app/src/protyle/render/av/date.ts b/app/src/protyle/render/av/date.ts index 2a887b114..41d166789 100644 --- a/app/src/protyle/render/av/date.ts +++ b/app/src/protyle/render/av/date.ts @@ -2,7 +2,7 @@ import * as dayjs from "dayjs"; import {genCellValueByElement, updateCellsValue} from "./cell"; export const getDateHTML = (cellElements: HTMLElement[]) => { - const cellValue = genCellValueByElement("date", cellElements[0]).date; + const cellValue = genCellValueByElement("date", cellElements[0]).date; const isNotTime = cellValue.isNotTime; let value = ""; const currentDate = new Date().getTime(); @@ -64,9 +64,9 @@ export const bindDateEvent = (options: { } if (event.key === "Enter") { updateCellsValue(options.protyle, options.blockElement as HTMLElement, { - content: getFullYearTime(inputElements[0].dataset.value), + content: getFullYearTime(inputElements[0].dataset.value) || 0, isNotEmpty: inputElements[0].value !== "", - content2: getFullYearTime(inputElements[1].dataset.value), + content2: getFullYearTime(inputElements[1].dataset.value) || 0, isNotEmpty2: inputElements[1].value !== "", hasEndDate: inputElements[2].checked, isNotTime: !inputElements[3].checked, @@ -114,9 +114,9 @@ export const bindDateEvent = (options: { }); return () => { updateCellsValue(options.protyle, options.blockElement as HTMLElement, { - content: getFullYearTime(inputElements[0].dataset.value), + content: getFullYearTime(inputElements[0].dataset.value) || 0, isNotEmpty: inputElements[0].value !== "", - content2: getFullYearTime(inputElements[1].dataset.value), + content2: getFullYearTime(inputElements[1].dataset.value) || 0, isNotEmpty2: inputElements[1].value !== "", hasEndDate: inputElements[2].checked, isNotTime: !inputElements[3].checked, diff --git a/app/src/protyle/render/av/openMenuPanel.ts b/app/src/protyle/render/av/openMenuPanel.ts index 8a7d3564e..5057b73c4 100644 --- a/app/src/protyle/render/av/openMenuPanel.ts +++ b/app/src/protyle/render/av/openMenuPanel.ts @@ -39,7 +39,7 @@ import { openViewMenu } from "./view"; import {focusBlock} from "../../util/selection"; -import {setPageSize} from "./row"; +import {getFieldIdByCellElement, setPageSize} from "./row"; import {bindRelationEvent, getRelationHTML, openSearchAV, setRelationCell, updateRelation} from "./relation"; import {bindRollupData, getRollupHTML, goSearchRollupCol} from "./rollup"; import {updateCellsValue} from "./cell"; @@ -157,7 +157,18 @@ export const openMenuPanel = (options: { const menuElement = avPanelElement.lastElementChild as HTMLElement; let tabRect = options.blockElement.querySelector(`.av__views, .av__row[data-col-id="${options.colId}"] > .block__logo`)?.getBoundingClientRect(); if (["select", "date", "asset", "relation", "rollup"].includes(options.type)) { - const cellRect = options.cellElements[options.cellElements.length - 1].getBoundingClientRect(); + let lastElement = options.cellElements[options.cellElements.length - 1]; + if (!options.blockElement.contains(lastElement)) { + // https://github.com/siyuan-note/siyuan/issues/15839 + const rowID = getFieldIdByCellElement(lastElement, data.viewType); + if (data.viewType === "table") { + lastElement = options.blockElement.querySelector(`.av__row[data-id="${rowID}"] .av__cell[data-col-id="${lastElement.dataset.colId}"]`); + } else { + lastElement = options.blockElement.querySelector(`.av__gallery-item[data-id="${rowID}"] .av__cell[data-field-id="${lastElement.dataset.fieldId}"]`); + } + } + const cellRect = (lastElement || options.cellElements[options.cellElements.length - 1]).getBoundingClientRect(); + if (options.type === "select") { bindSelectEvent(options.protyle, data, menuElement, options.cellElements, options.blockElement); } else if (options.type === "date") { @@ -1201,10 +1212,10 @@ export const openMenuPanel = (options: { title: isTwoWay ? window.siyuan.languages.removeColConfirm : window.siyuan.languages.deleteOpConfirm, content: `
${isTwoWay ? window.siyuan.languages.confirmRemoveRelationField - .replace("${x}", menuElement.querySelector("input").value || window.siyuan.languages._kernel[272]) - .replace("${y}", menuElement.querySelector('.b3-menu__item[data-type="goSearchAV"] .b3-menu__accelerator').textContent) - .replace("${z}", (menuElement.querySelector('input[data-type="colName"]') as HTMLInputElement).value || window.siyuan.languages._kernel[272]) - : window.siyuan.languages.removeCol.replace("${x}", menuElement.querySelector("input").value || window.siyuan.languages._kernel[272])} + .replace("${x}", menuElement.querySelector("input").value || window.siyuan.languages._kernel[272]) + .replace("${y}", menuElement.querySelector('.b3-menu__item[data-type="goSearchAV"] .b3-menu__accelerator').textContent) + .replace("${z}", (menuElement.querySelector('input[data-type="colName"]') as HTMLInputElement).value || window.siyuan.languages._kernel[272]) + : window.siyuan.languages.removeCol.replace("${x}", menuElement.querySelector("input").value || window.siyuan.languages._kernel[272])}