From 6db2b67c5bf1700d7792157e518554a3a35a8859 Mon Sep 17 00:00:00 2001 From: Ramesh Mane <101566080+rameshmane7218@users.noreply.github.com> Date: Thu, 18 Apr 2024 18:07:00 +0530 Subject: [PATCH] Nc feat: Grid view custom pagesize option (#8298) * feat(nc-gui): custom page size in grid view * fix(nc-gui): persist grid view page size value across browser * chore(nc-gui): lint * fix(nc-gui): small changes * fix(nc-gui): on change pagesize offset issue * fix(test): small changes --- packages/nc-gui/components/nc/Pagination.vue | 243 ++++++++++++------ .../components/smartsheet/Pagination.vue | 19 +- .../components/smartsheet/PlainCell.vue | 16 +- .../components/smartsheet/grid/Table.vue | 11 +- packages/nc-gui/lib/constants.ts | 2 + .../playwright/pages/Dashboard/Grid/index.ts | 2 +- 6 files changed, 199 insertions(+), 94 deletions(-) diff --git a/packages/nc-gui/components/nc/Pagination.vue b/packages/nc-gui/components/nc/Pagination.vue index fde01c4879..08f6536208 100644 --- a/packages/nc-gui/components/nc/Pagination.vue +++ b/packages/nc-gui/components/nc/Pagination.vue @@ -1,5 +1,6 @@ + + diff --git a/packages/nc-gui/components/smartsheet/Pagination.vue b/packages/nc-gui/components/smartsheet/Pagination.vue index 65999134c2..1a78ba3c35 100644 --- a/packages/nc-gui/components/smartsheet/Pagination.vue +++ b/packages/nc-gui/components/smartsheet/Pagination.vue @@ -15,6 +15,7 @@ interface Props { extraStyle?: string showApiTiming?: boolean alignLeft?: boolean + showSizeChanger?: boolean } const props = defineProps() @@ -43,8 +44,6 @@ const { isLeftSidebarOpen } = storeToRefs(useSidebarStore()) const count = computed(() => vPaginationData.value?.totalRows ?? Infinity) -const size = computed(() => vPaginationData.value?.pageSize ?? 25) - const page = computed({ get: () => vPaginationData?.value?.page ?? 1, set: async (p) => { @@ -61,6 +60,21 @@ const page = computed({ }, }) +const size = computed({ + get: () => vPaginationData.value?.pageSize ?? 25, + set: (size: number) => { + if (vPaginationData.value) { + vPaginationData.value.pageSize = size + + if (vPaginationData.value.totalRows && page.value * size < vPaginationData.value.totalRows) { + changePage?.(page.value) + } else { + changePage?.(1) + } + } + }, +}) + const isRTLLanguage = computed(() => isRtlLang(locale.value as keyof typeof Language)) const renderAltOrOptlKey = () => { @@ -117,6 +131,7 @@ const tempPageVal = ref(page.value) :next-page-tooltip="`${renderAltOrOptlKey()}+→`" :first-page-tooltip="`${renderAltOrOptlKey()}+↓`" :last-page-tooltip="`${renderAltOrOptlKey()}+↑`" + :show-size-changer="showSizeChanger" />
Change page: diff --git a/packages/nc-gui/components/smartsheet/PlainCell.vue b/packages/nc-gui/components/smartsheet/PlainCell.vue index 9e873a380d..027a153892 100644 --- a/packages/nc-gui/components/smartsheet/PlainCell.vue +++ b/packages/nc-gui/components/smartsheet/PlainCell.vue @@ -10,19 +10,7 @@ import { timeFormats, } from 'nocodb-sdk' import dayjs from 'dayjs' -import { - computed, - isBoolean, - isDate, - isDateTime, - isInt, - parseProp, - ref, - storeToRefs, - useAttachment, - useBase, - useMetas, -} from '#imports' +import { computed, isBoolean, isDate, isDateTime, isInt, parseProp, ref, storeToRefs, useBase, useMetas } from '#imports' interface Props { column: ColumnType @@ -50,8 +38,6 @@ const { basesUser } = storeToRefs(basesStore) const { isXcdbBase, isMssql, isMysql } = useBase() -const { getPossibleAttachmentSrc } = useAttachment() - const sqlUi = ref(column.value?.source_id ? sqlUis.value[column.value?.source_id] : Object.values(sqlUis.value)[0]) const abstractType = computed(() => column.value && sqlUi.value.getAbstractType(column.value)) diff --git a/packages/nc-gui/components/smartsheet/grid/Table.vue b/packages/nc-gui/components/smartsheet/grid/Table.vue index 2733d0147d..012c29006c 100644 --- a/packages/nc-gui/components/smartsheet/grid/Table.vue +++ b/packages/nc-gui/components/smartsheet/grid/Table.vue @@ -1200,7 +1200,15 @@ useEventListener(document, 'keyup', async (e: KeyboardEvent) => { const cmdOrCtrl = isMac() ? e.metaKey : e.ctrlKey - if (isKeyDown.value && !isRichModalOpen && !activeDropdownEl && !isDrawerOrModalExist() && !cmdOrCtrl && !e.shiftKey && !e.altKey) { + if ( + isKeyDown.value && + !isRichModalOpen && + !activeDropdownEl && + !isDrawerOrModalExist() && + !cmdOrCtrl && + !e.shiftKey && + !e.altKey + ) { if ( (e.key === 'Tab' && activeCell.row === dataRef.value.length - 1 && activeCell.col === fields.value?.length - 1) || (e.key === 'ArrowDown' && @@ -1965,6 +1973,7 @@ onKeyStroke('ArrowDown', onDown) :hide-sidebars="paginationStyleRef?.hideSidebars === true" :fixed-size="paginationStyleRef?.fixedSize" :extra-style="paginationStyleRef?.extraStyle" + :show-size-changer="!isGroupBy" >