Vanessa 2023-12-08 21:56:48 +08:00
parent f9d476ebf5
commit 01e20cfd6f
8 changed files with 30 additions and 14 deletions

View file

@ -128,7 +128,7 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
event.stopPropagation(); event.stopPropagation();
return true; return true;
} else if (type === "set-page-size") { } else if (type === "set-page-size") {
setPageSize(target); setPageSize(target, protyle, blockElement.getAttribute("data-av-id"));
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
return true; return true;

View file

@ -574,7 +574,7 @@ export const openMenuPanel = (options: {
event.stopPropagation(); event.stopPropagation();
break; break;
} else if (type === "set-page-size") { } else if (type === "set-page-size") {
setPageSize(target); setPageSize(target, options.protyle, avID);
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
break; break;

View file

@ -259,12 +259,12 @@ ${cell.color ? `color:${cell.color};` : ""}">${text}</div>`;
${window.siyuan.languages.addAttr} ${window.siyuan.languages.addAttr}
</button> </button>
<span class="fn__space"></span> <span class="fn__space"></span>
<button class="b3-button"> <button class="b3-button${data.rowCount > data.rows.length ? "" : " fn__none"}">
<svg data-type="av-load-more"><use xlink:href="#iconArrowDown"></use></svg> <svg data-type="av-load-more"><use xlink:href="#iconArrowDown"></use></svg>
<span data-type="av-load-more"> <span data-type="av-load-more">
${window.siyuan.languages.loadMore} ${window.siyuan.languages.loadMore}
</span> </span>
<svg data-type="set-page-size" data-size="50"><use xlink:href="#iconMore"></use></svg> <svg data-type="set-page-size" data-size="${data.pageSize}"><use xlink:href="#iconMore"></use></svg>
</button> </button>
</div> </div>
</div> </div>

View file

@ -1,6 +1,7 @@
import {hasClosestBlock, hasClosestByClassName} from "../../util/hasClosest"; import {hasClosestBlock, hasClosestByClassName} from "../../util/hasClosest";
import {focusBlock} from "../../util/selection"; import {focusBlock} from "../../util/selection";
import {Menu} from "../../../plugin/Menu"; import {Menu} from "../../../plugin/Menu";
import {transaction} from "../../wysiwyg/transaction";
export const selectRow = (checkElement: Element, type: "toggle" | "select" | "unselect" | "unselectAll") => { export const selectRow = (checkElement: Element, type: "toggle" | "select" | "unselect" | "unselectAll") => {
const rowElement = hasClosestByClassName(checkElement, "av__row"); 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) { if (currentPageSIze === newPageSize) {
return; 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"); const menu = new Menu("av-page-size");
if (menu.isOpen) { if (menu.isOpen) {
return; return;
@ -138,7 +148,7 @@ export const setPageSize = (target: HTMLElement) => {
label: "10", label: "10",
accelerator: currentPageSIze === "10" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined, accelerator: currentPageSIze === "10" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined,
click() { click() {
updatePageSize(currentPageSIze, "10"); updatePageSize(currentPageSIze, "10", protyle, avID);
} }
}); });
menu.addItem({ menu.addItem({
@ -146,7 +156,7 @@ export const setPageSize = (target: HTMLElement) => {
accelerator: currentPageSIze === "25" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined, accelerator: currentPageSIze === "25" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined,
label: "25", label: "25",
click() { click() {
updatePageSize(currentPageSIze, "25"); updatePageSize(currentPageSIze, "25", protyle, avID);
} }
}); });
menu.addItem({ menu.addItem({
@ -154,7 +164,7 @@ export const setPageSize = (target: HTMLElement) => {
accelerator: currentPageSIze === "50" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined, accelerator: currentPageSIze === "50" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined,
label: "50", label: "50",
click() { click() {
updatePageSize(currentPageSIze, "50"); updatePageSize(currentPageSIze, "50", protyle, avID);
} }
}); });
menu.addItem({ menu.addItem({
@ -162,7 +172,7 @@ export const setPageSize = (target: HTMLElement) => {
accelerator: currentPageSIze === "100" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined, accelerator: currentPageSIze === "100" ? '<svg class="svg" style="height: 30px; float: left;"><use xlink:href="#iconSelect"></use></svg>' : undefined,
label: "100", label: "100",
click() { click() {
updatePageSize(currentPageSIze, "100"); updatePageSize(currentPageSIze, "100", protyle, avID);
} }
}); });
const rect = target.getBoundingClientRect(); const rect = target.getBoundingClientRect();

View file

@ -132,10 +132,10 @@ export const getViewHTML = (data: IAVTable) => {
<span class="b3-menu__accelerator">${data.sorts.length}</span> <span class="b3-menu__accelerator">${data.sorts.length}</span>
<svg class="b3-menu__icon b3-menu__icon--arrow"><use xlink:href="#iconRight"></use></svg> <svg class="b3-menu__icon b3-menu__icon--arrow"><use xlink:href="#iconRight"></use></svg>
</button> </button>
<button class="b3-menu__item" data-type="set-page-size" data-size="50"> <button class="b3-menu__item" data-type="set-page-size" data-size="${data.pageSize}">
<svg class="b3-menu__icon"></svg> <svg class="b3-menu__icon"></svg>
<span class="b3-menu__label">${window.siyuan.languages.pageCount}</span> <span class="b3-menu__label">${window.siyuan.languages.pageCount}</span>
<span class="b3-menu__accelerator">50</span> <span class="b3-menu__accelerator">${data.pageSize}</span>
<svg class="b3-menu__icon b3-menu__icon--arrow"><use xlink:href="#iconRight"></use></svg> <svg class="b3-menu__icon b3-menu__icon--arrow"><use xlink:href="#iconRight"></use></svg>
</button> </button>
<button class="b3-menu__separator"></button> <button class="b3-menu__separator"></button>

View file

@ -376,7 +376,9 @@ export const enableProtyle = (protyle: IProtyle) => {
}); });
const contentRect = protyle.contentElement.getBoundingClientRect(); const contentRect = protyle.contentElement.getBoundingClientRect();
protyle.wysiwyg.element.querySelectorAll(".av").forEach((item: HTMLElement) => { protyle.wysiwyg.element.querySelectorAll(".av").forEach((item: HTMLElement) => {
if (item.querySelector(".av__title")) {
stickyRow(item, contentRect, "all"); stickyRow(item, contentRect, "all");
}
}); });
if (protyle.breadcrumb) { if (protyle.breadcrumb) {
protyle.breadcrumb.element.parentElement.querySelector('[data-type="readonly"] use').setAttribute("xlink:href", "#iconUnlock"); protyle.breadcrumb.element.parentElement.querySelector('[data-type="readonly"] use').setAttribute("xlink:href", "#iconUnlock");

View file

@ -717,7 +717,8 @@ export const onTransaction = (protyle: IProtyle, operation: IOperation, isUndo:
"setAttrViewColWrap", "setAttrViewColWidth", "removeAttrViewColOption", "setAttrViewName", "setAttrViewFilters", "setAttrViewColWrap", "setAttrViewColWidth", "removeAttrViewColOption", "setAttrViewName", "setAttrViewFilters",
"setAttrViewSorts", "setAttrViewColCalc", "removeAttrViewCol", "updateAttrViewColNumberFormat", "removeAttrViewBlock", "setAttrViewSorts", "setAttrViewColCalc", "removeAttrViewCol", "updateAttrViewColNumberFormat", "removeAttrViewBlock",
"replaceAttrViewBlock", "updateAttrViewColTemplate", "setAttrViewColIcon", "setAttrViewColPin", "addAttrViewView", "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); refreshAV(protyle, operation, isUndo);
} else if (operation.action === "doUpdateUpdated") { } else if (operation.action === "doUpdateUpdated") {
updateElements.forEach(item => { updateElements.forEach(item => {

View file

@ -48,6 +48,7 @@ type TOperation =
| "setAttrViewViewIcon" | "setAttrViewViewIcon"
| "duplicateAttrViewView" | "duplicateAttrViewView"
| "sortAttrViewView" | "sortAttrViewView"
| "setAttrViewPageSize"
type TBazaarType = "templates" | "icons" | "widgets" | "themes" | "plugins" type TBazaarType = "templates" | "icons" | "widgets" | "themes" | "plugins"
type TCardType = "doc" | "notebook" | "all" type TCardType = "doc" | "notebook" | "all"
type TEventBus = "ws-main" | "sync-start" | "sync-end" | "sync-fail" | type TEventBus = "ws-main" | "sync-start" | "sync-end" | "sync-fail" |
@ -1038,6 +1039,8 @@ interface IAVTable extends IAVView {
filters: IAVFilter[], filters: IAVFilter[],
sorts: IAVSort[], sorts: IAVSort[],
rows: IAVRow[], rows: IAVRow[],
rowCount: number,
pageSize: number,
} }
interface IAVFilter { interface IAVFilter {