From 6d03ddca9c6bf7d590122ef158d5faa82e4e3196 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 21 Jun 2024 11:51:34 +0530 Subject: [PATCH] fix: moved get_kanban_data logic in viewcontrols --- crm/api/doc.py | 15 +++- frontend/src/components/Kanban/KanbanView.vue | 80 ++++++------------- frontend/src/components/ViewControls.vue | 41 ++++++++-- frontend/src/pages/Leads.vue | 18 +---- 4 files changed, 76 insertions(+), 78 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index 18fd7290..fedc4dfd 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -377,10 +377,23 @@ def get_list_data( } @frappe.whitelist() -def get_kanban_data(doctype: str, filters: dict, order_by: str, column_field: str, columns=None, rows=None): +def get_kanban_data( + doctype: str, + filters: dict, + order_by: str, + column_field: str, + columns=None, + rows=None, + default_filters=None, +): filters = frappe._dict(filters) columns = frappe.parse_json(columns) data = [] + + if default_filters: + default_filters = frappe.parse_json(default_filters) + filters.update(default_filters) + for column in columns: column_filters = filters.copy() column_filters.update({column_field: column}) diff --git a/frontend/src/components/Kanban/KanbanView.vue b/frontend/src/components/Kanban/KanbanView.vue index 921ba009..10c3d947 100644 --- a/frontend/src/components/Kanban/KanbanView.vue +++ b/frontend/src/components/Kanban/KanbanView.vue @@ -1,62 +1,32 @@ diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 6d0a1628..0761ec4f 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -297,6 +297,7 @@ const { reload: reloadView, getView } = viewsStore() const { isManager } = usersStore() const list = defineModel() +const kanban = defineModel('kanban') const loadMore = defineModel('loadMore') const resizeColumn = defineModel('resizeColumn') const updatedPageCount = defineModel('updatedPageCount') @@ -428,6 +429,27 @@ function getParams() { } } +function getKanbanParams() { + return { + doctype: props.doctype, + filters: {}, + order_by: 'modified desc', + column_field: 'status', + columns: ['New', 'Contacted', 'Nurture', 'Qualified', 'Unqualified', 'Junk'], + rows: ['name', 'lead_name', 'status', 'organization', 'lead_owner'], + default_filters: props.filters, + } +} + +kanban.value = createResource({ + url: 'crm.api.doc.get_kanban_data', + params: getKanbanParams(), + cache: ['Kanban', props.doctype], + onSuccess(data) { + kanban.value.data = data + }, +}) + list.value = createResource({ url: 'crm.api.doc.get_list_data', params: getParams(), @@ -458,8 +480,13 @@ onMounted(() => useDebounceFn(reload, 100)()) const isLoading = computed(() => list.value?.loading) function reload() { - list.value.params = getParams() - list.value.reload() + if (route.params.viewType == 'kanban') { + kanban.value.params = getKanbanParams() + kanban.value.reload() + } else { + list.value.params = getParams() + list.value.reload() + } } const showExportDialog = ref(false) @@ -553,7 +580,7 @@ const viewsDropdownOptions = computed(() => { }) let publicViews = list.value.data.views.filter((v) => v.public) let savedViews = list.value.data.views.filter( - (v) => !v.pinned && !v.public && !v.is_default + (v) => !v.pinned && !v.public && !v.is_default, ) let pinnedViews = list.value.data.views.filter((v) => v.pinned) @@ -591,7 +618,7 @@ const quickFilterList = computed(() => { if (Array.isArray(value)) { if ( (['Check', 'Select', 'Link', 'Date', 'Datetime'].includes( - filter.type + filter.type, ) && value[0]?.toLowerCase() == 'like') || value[0]?.toLowerCase() != 'like' @@ -717,7 +744,7 @@ function create_or_update_default_view() { 'crm.fcrm.doctype.crm_view_settings.crm_view_settings.create_or_update_default_view', { view: view.value, - } + }, ).then(() => { reloadView() view.value = { @@ -833,7 +860,7 @@ const viewModalObj = ref({}) function duplicateView() { let label = __( - getView(route.query.view, route.params.viewType, props.doctype)?.label + getView(route.query.view, route.params.viewType, props.doctype)?.label, ) || getViewType().label view.value.name = '' view.value.label = label + __(' (New)') @@ -963,7 +990,7 @@ watch( if (_.isEqual(value, old_value)) return reload() }, - { deep: true } + { deep: true }, ) watch([() => route, () => route.params.viewType], (value, old_value) => { diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index fe7cf445..16d05728 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -20,6 +20,7 @@ - +