fix: implemented listview pagination in Leads List view
This commit is contained in:
parent
e3c95f63cf
commit
44722e6d21
@ -60,6 +60,7 @@ def get_list_data(
|
|||||||
doctype: str,
|
doctype: str,
|
||||||
filters: dict,
|
filters: dict,
|
||||||
order_by: str,
|
order_by: str,
|
||||||
|
page_length=20,
|
||||||
columns=None,
|
columns=None,
|
||||||
rows=None,
|
rows=None,
|
||||||
custom_view_name=None,
|
custom_view_name=None,
|
||||||
@ -110,7 +111,7 @@ def get_list_data(
|
|||||||
fields=rows,
|
fields=rows,
|
||||||
filters=filters,
|
filters=filters,
|
||||||
order_by=order_by,
|
order_by=order_by,
|
||||||
page_length=20,
|
page_length=page_length,
|
||||||
) or []
|
) or []
|
||||||
|
|
||||||
fields = frappe.get_meta(doctype).fields
|
fields = frappe.get_meta(doctype).fields
|
||||||
@ -154,8 +155,11 @@ def get_list_data(
|
|||||||
"columns": columns,
|
"columns": columns,
|
||||||
"rows": rows,
|
"rows": rows,
|
||||||
"fields": fields,
|
"fields": fields,
|
||||||
|
"page_length": page_length,
|
||||||
"is_default": is_default,
|
"is_default": is_default,
|
||||||
"views": get_views(doctype),
|
"views": get_views(doctype),
|
||||||
|
"total_count": frappe.client.get_count(doctype, filters=filters),
|
||||||
|
"row_count": len(data),
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_views(doctype):
|
def get_views(doctype):
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit 0f4b6650598831d4382549c4ee22c360e01e35f0
|
Subproject commit 75407e4d0f52b01d572ed2c2e26e2a05abdefb9e
|
||||||
@ -95,6 +95,14 @@
|
|||||||
</ListRows>
|
</ListRows>
|
||||||
<ListSelectBanner />
|
<ListSelectBanner />
|
||||||
</ListView>
|
</ListView>
|
||||||
|
<ListFooter
|
||||||
|
class="border-t px-5 py-2"
|
||||||
|
v-model="pageLength"
|
||||||
|
:options="{
|
||||||
|
rowCount: options.rowCount,
|
||||||
|
totalCount: options.totalCount,
|
||||||
|
}"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -109,6 +117,7 @@ import {
|
|||||||
ListRow,
|
ListRow,
|
||||||
ListSelectBanner,
|
ListSelectBanner,
|
||||||
ListRowItem,
|
ListRowItem,
|
||||||
|
ListFooter,
|
||||||
} from 'frappe-ui'
|
} from 'frappe-ui'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -124,7 +133,11 @@ const props = defineProps({
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({
|
default: () => ({
|
||||||
selectable: true,
|
selectable: true,
|
||||||
|
totalCount: 0,
|
||||||
|
rowCount: 0,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const pageLength = defineModel()
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -124,6 +124,16 @@ const view = ref({
|
|||||||
pinned: false,
|
pinned: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const pageLength = computed(() => list.value?.data?.page_length)
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => list.value?.data?.page_length,
|
||||||
|
(value) => {
|
||||||
|
if (!value) return
|
||||||
|
updatePageLength(value)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
function getParams() {
|
function getParams() {
|
||||||
let _view = getView(route.query.view)
|
let _view = getView(route.query.view)
|
||||||
const filters = (_view?.filters && JSON.parse(_view.filters)) || {}
|
const filters = (_view?.filters && JSON.parse(_view.filters)) || {}
|
||||||
@ -163,6 +173,7 @@ function getParams() {
|
|||||||
order_by: order_by,
|
order_by: order_by,
|
||||||
columns: columns,
|
columns: columns,
|
||||||
rows: rows,
|
rows: rows,
|
||||||
|
page_length: pageLength.value,
|
||||||
custom_view_name: _view?.name || '',
|
custom_view_name: _view?.name || '',
|
||||||
default_filters: props.filters,
|
default_filters: props.filters,
|
||||||
}
|
}
|
||||||
@ -179,6 +190,7 @@ list.value = createResource({
|
|||||||
doctype: props.doctype,
|
doctype: props.doctype,
|
||||||
filters: list.value.params.filters,
|
filters: list.value.params.filters,
|
||||||
order_by: list.value.params.order_by,
|
order_by: list.value.params.order_by,
|
||||||
|
page_length: list.value.params.page_length,
|
||||||
columns: data.columns,
|
columns: data.columns,
|
||||||
rows: data.rows,
|
rows: data.rows,
|
||||||
custom_view_name: cv?.name || '',
|
custom_view_name: cv?.name || '',
|
||||||
@ -287,6 +299,15 @@ function updateColumns(obj) {
|
|||||||
viewUpdated.value = true
|
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
|
// View Actions
|
||||||
const viewActions = computed(() => {
|
const viewActions = computed(() => {
|
||||||
let actions = [
|
let actions = [
|
||||||
|
|||||||
@ -16,8 +16,13 @@
|
|||||||
/>
|
/>
|
||||||
<LeadsListView
|
<LeadsListView
|
||||||
v-if="leads.data && rows.length"
|
v-if="leads.data && rows.length"
|
||||||
|
v-model="leads.data.page_length"
|
||||||
:rows="rows"
|
:rows="rows"
|
||||||
:columns="leads.data.columns"
|
:columns="leads.data.columns"
|
||||||
|
:options="{
|
||||||
|
rowCount: leads.data.row_count,
|
||||||
|
totalCount: leads.data.total_count,
|
||||||
|
}"
|
||||||
/>
|
/>
|
||||||
<div v-else-if="leads.data" class="flex h-full items-center justify-center">
|
<div v-else-if="leads.data" class="flex h-full items-center justify-center">
|
||||||
<div
|
<div
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user