diff --git a/crm/api/doc.py b/crm/api/doc.py index feb90247..576c6aae 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -331,14 +331,24 @@ def get_data( column_data = [] else: column_filters.update(filters.copy()) + page_length = 20 + + if kc.get("page_length"): + page_length = kc.get("page_length") + column_data = frappe.get_list( doctype, fields=rows, filters=column_filters, order_by=order_by, - page_length=20, + page_length=page_length, ) + all_count = len(frappe.get_list(doctype, filters={ column_field: kc.get('name') })) + + kc["all_count"] = all_count + kc["count"] = len(column_data) + for d in column_data: getCounts(d, doctype) @@ -348,7 +358,7 @@ def get_data( if x.get("name") in kc.get("order") else 0 ) - data.append({"column": kc, "fields": kanban_fields, "data": column_data, "count": len(column_data)}) + data.append({"column": kc, "fields": kanban_fields, "data": column_data}) fields = frappe.get_meta(doctype).fields fields = [field for field in fields if field.fieldtype not in no_value_fields] diff --git a/frontend/src/components/Kanban/KanbanView.vue b/frontend/src/components/Kanban/KanbanView.vue index 16cb8a20..2c1a798d 100644 --- a/frontend/src/components/Kanban/KanbanView.vue +++ b/frontend/src/components/Kanban/KanbanView.vue @@ -65,63 +65,76 @@ /> - - + +
+
+ @@ -144,7 +157,7 @@ const props = defineProps({ }, }) -const emit = defineEmits(['update']) +const emit = defineEmits(['update', 'loadMore']) const kanban = defineModel() diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 71ab4420..080114ea 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -796,6 +796,25 @@ async function updateKanbanSettings(data) { } } +function loadMoreKanban(columnName) { + let columns = list.value.params.kanban_columns + + if (typeof columns === 'string') { + columns = JSON.parse(columns) + } + + let column = columns.find((c) => c.name == columnName) + + if (!column.page_length) { + column.page_length = 40 + } else { + column.page_length += 20 + } + list.value.params.kanban_columns = columns + view.value.kanban_columns = columns + list.value.reload() +} + function create_or_update_default_view() { if (route.query.view) return view.value.doctype = props.doctype @@ -1073,7 +1092,13 @@ function likeDoc({ name, liked }) { }) } -defineExpose({ applyFilter, applyLikeFilter, likeDoc, updateKanbanSettings }) +defineExpose({ + applyFilter, + applyLikeFilter, + likeDoc, + updateKanbanSettings, + loadMoreKanban, +}) // Watchers watch( diff --git a/frontend/src/pages/Deals.vue b/frontend/src/pages/Deals.vue index 1d15a994..ceff66e4 100644 --- a/frontend/src/pages/Deals.vue +++ b/frontend/src/pages/Deals.vue @@ -36,6 +36,7 @@ onNewClick: (column) => onNewClick(column), }" @update="(data) => viewControls.updateKanbanSettings(data)" + @loadMore="(columnName) => viewControls.loadMoreKanban(columnName)" >