From e3c95f63cf98e56d90435602f6590ff611a2b106 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Sun, 7 Jan 2024 13:59:01 +0530 Subject: [PATCH 1/7] fix: send default_filter separately --- crm/api/doc.py | 15 ++++++++++++++- frontend/src/components/ViewControls.vue | 8 +++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index 9795246c..f51c8984 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -56,9 +56,22 @@ def get_filterable_fields(doctype: str): @frappe.whitelist() -def get_list_data(doctype: str, filters: dict, order_by: str, columns=None , rows=None, custom_view_name=None): +def get_list_data( + doctype: str, + filters: dict, + order_by: str, + columns=None, + rows=None, + custom_view_name=None, + default_filters=None, +): custom_view = False filters = frappe._dict(filters) + + if default_filters: + default_filters = frappe.parse_json(default_filters) + filters.update(default_filters) + is_default = True if columns or rows: custom_view = True diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 87b98901..b6aa728c 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -116,7 +116,7 @@ const currentView = computed(() => { const view = ref({ name: '', label: '', - filters: props.filters, + filters: {}, order_by: 'modified desc', columns: '', rows: '', @@ -126,7 +126,7 @@ const view = ref({ function getParams() { let _view = getView(route.query.view) - const filters = (_view?.filters && JSON.parse(_view.filters)) || props.filters + const filters = (_view?.filters && JSON.parse(_view.filters)) || {} const order_by = _view?.order_by || 'modified desc' const columns = _view?.columns || '' const rows = _view?.rows || '' @@ -147,7 +147,7 @@ function getParams() { view.value = { name: '', label: '', - filters: props.filters, + filters: {}, order_by: 'modified desc', columns: '', rows: '', @@ -164,6 +164,7 @@ function getParams() { columns: columns, rows: rows, custom_view_name: _view?.name || '', + default_filters: props.filters, } } @@ -181,6 +182,7 @@ list.value = createResource({ columns: data.columns, rows: data.rows, custom_view_name: cv?.name || '', + default_filters: props.filters, } }, }) From 44722e6d218ceaf34fdab82c58de98d4da7bcbf7 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Sun, 7 Jan 2024 16:00:44 +0530 Subject: [PATCH 2/7] 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 @@ />
Date: Sun, 7 Jan 2024 17:00:07 +0530 Subject: [PATCH 3/7] chore: renamed page_length to page_length_count everywhere --- crm/api/doc.py | 6 +++--- frontend/src/components/ListViews/LeadsListView.vue | 4 ++-- frontend/src/components/ViewControls.vue | 12 ++++++------ frontend/src/pages/Leads.vue | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index 1fc41f65..a0bd31d4 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -60,7 +60,7 @@ def get_list_data( doctype: str, filters: dict, order_by: str, - page_length=20, + page_length_count=20, columns=None, rows=None, custom_view_name=None, @@ -111,7 +111,7 @@ def get_list_data( fields=rows, filters=filters, order_by=order_by, - page_length=page_length, + page_length=page_length_count, ) or [] fields = frappe.get_meta(doctype).fields @@ -155,7 +155,7 @@ def get_list_data( "columns": columns, "rows": rows, "fields": fields, - "page_length": page_length, + "page_length_count": page_length_count, "is_default": is_default, "views": get_views(doctype), "total_count": frappe.client.get_count(doctype, filters=filters), diff --git a/frontend/src/components/ListViews/LeadsListView.vue b/frontend/src/components/ListViews/LeadsListView.vue index b3a61e1b..967a4199 100644 --- a/frontend/src/components/ListViews/LeadsListView.vue +++ b/frontend/src/components/ListViews/LeadsListView.vue @@ -97,7 +97,7 @@ @@ -139,5 +140,7 @@ const props = defineProps({ }, }) +const emit = defineEmits(['loadMore']) + const pageLengthCount = defineModel() diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 92e4aa6d..e7442e13 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -96,6 +96,7 @@ const { $dialog } = globalStore() const { reload: reloadView, getView } = viewsStore() const list = defineModel() +const loadMore = defineModel('loadMore') const route = useRoute() const router = useRouter() @@ -124,8 +125,14 @@ const view = ref({ pinned: false, }) +const pageLength = computed(() => list.value?.data?.page_length) const pageLengthCount = computed(() => list.value?.data?.page_length_count) +watch(loadMore, (value) => { + if (!value) return + updatePageLength(value, true) +}) + watch( () => list.value?.data?.page_length_count, (value) => { @@ -173,6 +180,7 @@ function getParams() { order_by: order_by, columns: columns, rows: rows, + page_length: pageLength.value, page_length_count: pageLengthCount.value, custom_view_name: _view?.name || '', default_filters: props.filters, @@ -190,6 +198,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, page_length_count: list.value.params.page_length_count, columns: data.columns, rows: data.rows, @@ -299,12 +308,17 @@ function updateColumns(obj) { viewUpdated.value = true } -function updatePageLength(value) { +function updatePageLength(value, loadMore = false) { if (!defaultParams.value) { defaultParams.value = getParams() } list.value.params = defaultParams.value - list.value.params.page_length_count = value + if (loadMore) { + list.value.params.page_length += value + } else { + list.value.params.page_length = value + list.value.params.page_length_count = value + } list.value.reload() } diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index b526b6df..e9824880 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -11,6 +11,7 @@ @@ -23,6 +24,7 @@ rowCount: leads.data.row_count, totalCount: leads.data.total_count, }" + @loadMore="() => loadMore++" />
{ From 49b9517df4014e880b57cd9336aa3db291db3d21 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Sun, 7 Jan 2024 17:16:23 +0530 Subject: [PATCH 5/7] fix: implemented listview pagination in organization,contacts & call logs --- .../components/ListViews/CallLogsListView.vue | 16 ++++++++++++++++ .../components/ListViews/ContactsListView.vue | 17 ++++++++++++++++- .../src/components/ListViews/DealsListView.vue | 16 ++++++++++++++++ .../ListViews/OrganizationsListView.vue | 16 ++++++++++++++++ frontend/src/pages/CallLogs.vue | 10 +++++++++- frontend/src/pages/Contacts.vue | 14 +++++++++++++- frontend/src/pages/Deals.vue | 13 ++++++++++++- frontend/src/pages/Organizations.vue | 14 +++++++++++++- 8 files changed, 111 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/ListViews/CallLogsListView.vue b/frontend/src/components/ListViews/CallLogsListView.vue index ee8f2753..5a8a0e24 100644 --- a/frontend/src/components/ListViews/CallLogsListView.vue +++ b/frontend/src/components/ListViews/CallLogsListView.vue @@ -62,6 +62,15 @@ + diff --git a/frontend/src/components/ListViews/ContactsListView.vue b/frontend/src/components/ListViews/ContactsListView.vue index e73701bd..a4a214c2 100644 --- a/frontend/src/components/ListViews/ContactsListView.vue +++ b/frontend/src/components/ListViews/ContactsListView.vue @@ -63,6 +63,15 @@ + diff --git a/frontend/src/components/ListViews/DealsListView.vue b/frontend/src/components/ListViews/DealsListView.vue index c6bc906b..9a025966 100644 --- a/frontend/src/components/ListViews/DealsListView.vue +++ b/frontend/src/components/ListViews/DealsListView.vue @@ -86,6 +86,15 @@ + diff --git a/frontend/src/components/ListViews/OrganizationsListView.vue b/frontend/src/components/ListViews/OrganizationsListView.vue index 0d48ab42..50572dd0 100644 --- a/frontend/src/components/ListViews/OrganizationsListView.vue +++ b/frontend/src/components/ListViews/OrganizationsListView.vue @@ -51,6 +51,15 @@ + diff --git a/frontend/src/pages/CallLogs.vue b/frontend/src/pages/CallLogs.vue index a86ccda6..bc80dad6 100644 --- a/frontend/src/pages/CallLogs.vue +++ b/frontend/src/pages/CallLogs.vue @@ -4,11 +4,17 @@ - +
{ if (!callLogs.value?.data?.data) return [] diff --git a/frontend/src/pages/Contacts.vue b/frontend/src/pages/Contacts.vue index e8548ccf..b9a7be27 100644 --- a/frontend/src/pages/Contacts.vue +++ b/frontend/src/pages/Contacts.vue @@ -9,11 +9,21 @@ - +
{ return items }) +// contacts data is loaded in the ViewControls component const contacts = ref({}) +const loadMore = ref(1) const rows = computed(() => { if (!contacts.value?.data?.data) return [] diff --git a/frontend/src/pages/Deals.vue b/frontend/src/pages/Deals.vue index 77534cbf..0c4eab6f 100644 --- a/frontend/src/pages/Deals.vue +++ b/frontend/src/pages/Deals.vue @@ -9,11 +9,21 @@ - +
{ diff --git a/frontend/src/pages/Organizations.vue b/frontend/src/pages/Organizations.vue index c5057d10..51c1c57f 100644 --- a/frontend/src/pages/Organizations.vue +++ b/frontend/src/pages/Organizations.vue @@ -13,11 +13,21 @@ - +
{ return items }) +// organizations data is loaded in the ViewControls component const organizations = ref({}) +const loadMore = ref(1) const rows = computed(() => { if (!organizations.value?.data?.data) return [] From 5558d0b42a6b55f620b5132e373621d6e234291d Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Sun, 7 Jan 2024 17:23:11 +0530 Subject: [PATCH 6/7] fix: load more should load page_length + page_length_count --- frontend/src/components/ViewControls.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index e7442e13..2566f956 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -314,7 +314,7 @@ function updatePageLength(value, loadMore = false) { } list.value.params = defaultParams.value if (loadMore) { - list.value.params.page_length += value + list.value.params.page_length += list.value.params.page_length_count } else { list.value.params.page_length = value list.value.params.page_length_count = value From 285849693d2293dea44d2d72891ac223615e6f57 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Sun, 7 Jan 2024 17:32:58 +0530 Subject: [PATCH 7/7] build(deps): bump frappeui to 0.1.22 --- frappe-ui | 2 +- frontend/package.json | 2 +- yarn.lock | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/frappe-ui b/frappe-ui index 19db8bc3..f5f5665e 160000 --- a/frappe-ui +++ b/frappe-ui @@ -1 +1 @@ -Subproject commit 19db8bc3a7463c11e4ef3b11ff7641371701bb47 +Subproject commit f5f5665e944bef20a79ece6ad7223db09984c6a6 diff --git a/frontend/package.json b/frontend/package.json index ce000952..2abf1ef6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,7 +13,7 @@ "@vueuse/core": "^10.3.0", "@vueuse/integrations": "^10.3.0", "feather-icons": "^4.28.0", - "frappe-ui": "^0.1.17", + "frappe-ui": "^0.1.22", "mime": "^4.0.1", "pinia": "^2.0.33", "socket.io-client": "^4.7.2", diff --git a/yarn.lock b/yarn.lock index 283bdc55..31bbe1a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3565,6 +3565,7 @@ string-argv@0.3.2: integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3600,6 +3601,7 @@ stringify-entities@^4.0.0: character-entities-legacy "^3.0.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==