From 44722e6d218ceaf34fdab82c58de98d4da7bcbf7 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Sun, 7 Jan 2024 16:00:44 +0530 Subject: [PATCH] fix: implemented listview pagination in Leads List view --- crm/api/doc.py | 6 +++++- frappe-ui | 2 +- .../components/ListViews/LeadsListView.vue | 13 ++++++++++++ frontend/src/components/ViewControls.vue | 21 +++++++++++++++++++ frontend/src/pages/Leads.vue | 5 +++++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index f51c8984..1fc41f65 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -60,6 +60,7 @@ def get_list_data( doctype: str, filters: dict, order_by: str, + page_length=20, columns=None, rows=None, custom_view_name=None, @@ -110,7 +111,7 @@ def get_list_data( fields=rows, filters=filters, order_by=order_by, - page_length=20, + page_length=page_length, ) or [] fields = frappe.get_meta(doctype).fields @@ -154,8 +155,11 @@ def get_list_data( "columns": columns, "rows": rows, "fields": fields, + "page_length": page_length, "is_default": is_default, "views": get_views(doctype), + "total_count": frappe.client.get_count(doctype, filters=filters), + "row_count": len(data), } def get_views(doctype): diff --git a/frappe-ui b/frappe-ui index 0f4b6650..75407e4d 160000 --- a/frappe-ui +++ b/frappe-ui @@ -1 +1 @@ -Subproject commit 0f4b6650598831d4382549c4ee22c360e01e35f0 +Subproject commit 75407e4d0f52b01d572ed2c2e26e2a05abdefb9e diff --git a/frontend/src/components/ListViews/LeadsListView.vue b/frontend/src/components/ListViews/LeadsListView.vue index 6e2465b4..b3a61e1b 100644 --- a/frontend/src/components/ListViews/LeadsListView.vue +++ b/frontend/src/components/ListViews/LeadsListView.vue @@ -95,6 +95,14 @@ + diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index b6aa728c..0513335c 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -124,6 +124,16 @@ const view = ref({ pinned: false, }) +const pageLength = computed(() => list.value?.data?.page_length) + +watch( + () => list.value?.data?.page_length, + (value) => { + if (!value) return + updatePageLength(value) + } +) + function getParams() { let _view = getView(route.query.view) const filters = (_view?.filters && JSON.parse(_view.filters)) || {} @@ -163,6 +173,7 @@ function getParams() { order_by: order_by, columns: columns, rows: rows, + page_length: pageLength.value, custom_view_name: _view?.name || '', default_filters: props.filters, } @@ -179,6 +190,7 @@ list.value = createResource({ doctype: props.doctype, filters: list.value.params.filters, order_by: list.value.params.order_by, + page_length: list.value.params.page_length, columns: data.columns, rows: data.rows, custom_view_name: cv?.name || '', @@ -287,6 +299,15 @@ function updateColumns(obj) { viewUpdated.value = true } +function updatePageLength(page_length) { + if (!defaultParams.value) { + defaultParams.value = getParams() + } + list.value.params = defaultParams.value + list.value.params.page_length = page_length + list.value.reload() +} + // View Actions const viewActions = computed(() => { let actions = [ diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index 2dfbfe74..3a23371c 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -16,8 +16,13 @@ />