diff --git a/app/src/protyle/render/av/action.ts b/app/src/protyle/render/av/action.ts index 717e3584f..efbd12e66 100644 --- a/app/src/protyle/render/av/action.ts +++ b/app/src/protyle/render/av/action.ts @@ -128,7 +128,7 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle event.stopPropagation(); return true; } else if (type === "set-page-size") { - setPageSize(target); + setPageSize(target, protyle, blockElement.getAttribute("data-av-id")); event.preventDefault(); event.stopPropagation(); return true; diff --git a/app/src/protyle/render/av/openMenuPanel.ts b/app/src/protyle/render/av/openMenuPanel.ts index 76ce5b24e..fec8bf574 100644 --- a/app/src/protyle/render/av/openMenuPanel.ts +++ b/app/src/protyle/render/av/openMenuPanel.ts @@ -574,7 +574,7 @@ export const openMenuPanel = (options: { event.stopPropagation(); break; } else if (type === "set-page-size") { - setPageSize(target); + setPageSize(target, options.protyle, avID); event.preventDefault(); event.stopPropagation(); break; diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts index 457a8b4c3..ec9ce82ea 100644 --- a/app/src/protyle/render/av/render.ts +++ b/app/src/protyle/render/av/render.ts @@ -259,12 +259,12 @@ ${cell.color ? `color:${cell.color};` : ""}">${text}`; ${window.siyuan.languages.addAttr} - diff --git a/app/src/protyle/render/av/row.ts b/app/src/protyle/render/av/row.ts index 191c83fba..f9cf55d3d 100644 --- a/app/src/protyle/render/av/row.ts +++ b/app/src/protyle/render/av/row.ts @@ -1,6 +1,7 @@ import {hasClosestBlock, hasClosestByClassName} from "../../util/hasClosest"; import {focusBlock} from "../../util/selection"; import {Menu} from "../../../plugin/Menu"; +import {transaction} from "../../wysiwyg/transaction"; export const selectRow = (checkElement: Element, type: "toggle" | "select" | "unselect" | "unselectAll") => { const rowElement = hasClosestByClassName(checkElement, "av__row"); @@ -121,13 +122,22 @@ export const stickyRow = (blockElement: HTMLElement, elementRect: DOMRect, statu } }; -const updatePageSize = (currentPageSIze: string, newPageSize: string) => { +const updatePageSize = (currentPageSIze: string, newPageSize: string, protyle: IProtyle, avID:string) => { if (currentPageSIze === newPageSize) { return; } + transaction(protyle, [{ + action: "setAttrViewPageSize", + avID, + data: newPageSize, + }], [{ + action: "setAttrViewPageSize", + data: currentPageSIze, + avID, + }]); }; -export const setPageSize = (target: HTMLElement) => { +export const setPageSize = (target: HTMLElement, protyle: IProtyle, avID:string) => { const menu = new Menu("av-page-size"); if (menu.isOpen) { return; @@ -138,7 +148,7 @@ export const setPageSize = (target: HTMLElement) => { label: "10", accelerator: currentPageSIze === "10" ? '' : undefined, click() { - updatePageSize(currentPageSIze, "10"); + updatePageSize(currentPageSIze, "10", protyle, avID); } }); menu.addItem({ @@ -146,7 +156,7 @@ export const setPageSize = (target: HTMLElement) => { accelerator: currentPageSIze === "25" ? '' : undefined, label: "25", click() { - updatePageSize(currentPageSIze, "25"); + updatePageSize(currentPageSIze, "25", protyle, avID); } }); menu.addItem({ @@ -154,7 +164,7 @@ export const setPageSize = (target: HTMLElement) => { accelerator: currentPageSIze === "50" ? '' : undefined, label: "50", click() { - updatePageSize(currentPageSIze, "50"); + updatePageSize(currentPageSIze, "50", protyle, avID); } }); menu.addItem({ @@ -162,7 +172,7 @@ export const setPageSize = (target: HTMLElement) => { accelerator: currentPageSIze === "100" ? '' : undefined, label: "100", click() { - updatePageSize(currentPageSIze, "100"); + updatePageSize(currentPageSIze, "100", protyle, avID); } }); const rect = target.getBoundingClientRect(); diff --git a/app/src/protyle/render/av/view.ts b/app/src/protyle/render/av/view.ts index 0f225e712..790f2f796 100644 --- a/app/src/protyle/render/av/view.ts +++ b/app/src/protyle/render/av/view.ts @@ -132,10 +132,10 @@ export const getViewHTML = (data: IAVTable) => { ${data.sorts.length} - diff --git a/app/src/protyle/util/onGet.ts b/app/src/protyle/util/onGet.ts index deb0b6bf8..7ed24f98a 100644 --- a/app/src/protyle/util/onGet.ts +++ b/app/src/protyle/util/onGet.ts @@ -376,7 +376,9 @@ export const enableProtyle = (protyle: IProtyle) => { }); const contentRect = protyle.contentElement.getBoundingClientRect(); protyle.wysiwyg.element.querySelectorAll(".av").forEach((item: HTMLElement) => { - stickyRow(item, contentRect, "all"); + if (item.querySelector(".av__title")) { + stickyRow(item, contentRect, "all"); + } }); if (protyle.breadcrumb) { protyle.breadcrumb.element.parentElement.querySelector('[data-type="readonly"] use').setAttribute("xlink:href", "#iconUnlock"); diff --git a/app/src/protyle/wysiwyg/transaction.ts b/app/src/protyle/wysiwyg/transaction.ts index 23d79406d..4bf97fb4f 100644 --- a/app/src/protyle/wysiwyg/transaction.ts +++ b/app/src/protyle/wysiwyg/transaction.ts @@ -717,7 +717,8 @@ export const onTransaction = (protyle: IProtyle, operation: IOperation, isUndo: "setAttrViewColWrap", "setAttrViewColWidth", "removeAttrViewColOption", "setAttrViewName", "setAttrViewFilters", "setAttrViewSorts", "setAttrViewColCalc", "removeAttrViewCol", "updateAttrViewColNumberFormat", "removeAttrViewBlock", "replaceAttrViewBlock", "updateAttrViewColTemplate", "setAttrViewColIcon", "setAttrViewColPin", "addAttrViewView", - "removeAttrViewView", "setAttrViewViewName", "setAttrViewViewIcon", "duplicateAttrViewView", "sortAttrViewView"].includes(operation.action)) { + "removeAttrViewView", "setAttrViewViewName", "setAttrViewViewIcon", "duplicateAttrViewView", "sortAttrViewView", + "setAttrViewPageSize"].includes(operation.action)) { refreshAV(protyle, operation, isUndo); } else if (operation.action === "doUpdateUpdated") { updateElements.forEach(item => { diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index d22950798..c67472e2b 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -48,6 +48,7 @@ type TOperation = | "setAttrViewViewIcon" | "duplicateAttrViewView" | "sortAttrViewView" + | "setAttrViewPageSize" type TBazaarType = "templates" | "icons" | "widgets" | "themes" | "plugins" type TCardType = "doc" | "notebook" | "all" type TEventBus = "ws-main" | "sync-start" | "sync-end" | "sync-fail" | @@ -1038,6 +1039,8 @@ interface IAVTable extends IAVView { filters: IAVFilter[], sorts: IAVSort[], rows: IAVRow[], + rowCount: number, + pageSize: number, } interface IAVFilter {