diff --git a/frontend/src/components/Kanban/KanbanView.vue b/frontend/src/components/Kanban/KanbanView.vue
index 4084a111..4000cb5c 100644
--- a/frontend/src/components/Kanban/KanbanView.vue
+++ b/frontend/src/components/Kanban/KanbanView.vue
@@ -70,14 +70,21 @@
:data-column="column.column.name"
>
-
+
@@ -91,6 +98,16 @@ import Draggable from 'vuedraggable'
import { Dropdown } from 'frappe-ui'
import { computed } from 'vue'
+const props = defineProps({
+ options: {
+ type: Object,
+ default: () => ({
+ getRowRoute: null,
+ onRowClick: null,
+ }),
+ },
+})
+
const emit = defineEmits(['update'])
const kanban = defineModel()
diff --git a/frontend/src/pages/Deals.vue b/frontend/src/pages/Deals.vue
index 613bcfac..8dde10c7 100644
--- a/frontend/src/pages/Deals.vue
+++ b/frontend/src/pages/Deals.vue
@@ -31,6 +31,9 @@
viewControls.updateKanbanSettings(data)"
/>
{
- if (
- !deals.value?.data?.data ||
- !['list', 'group_by'].includes(deals.value.data.view_type)
- )
- return []
- if (route.params.viewType === 'group_by') {
+ if (!deals.value?.data?.data) return []
+ if (deals.value.data.view_type === 'group_by') {
if (!deals.value?.data.group_by_field?.name) return []
return getGroupedByRows(
deals.value?.data.data,
deals.value?.data.group_by_field,
)
+ } else if (deals.value.data.view_type === 'kanban') {
+ return getKanbanRows(deals.value.data.data)
} else {
return parseRows(deals.value?.data.data)
}
@@ -156,6 +157,16 @@ function getGroupedByRows(listRows, groupByField) {
return groupedRows || listRows
}
+function getKanbanRows(data) {
+ let _rows = []
+ data.forEach((column) => {
+ column.data?.forEach((row) => {
+ _rows.push(row)
+ })
+ })
+ return parseRows(_rows)
+}
+
function parseRows(rows) {
return rows.map((deal) => {
let _rows = {}
diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue
index 9e3b9e41..8193fe14 100644
--- a/frontend/src/pages/Leads.vue
+++ b/frontend/src/pages/Leads.vue
@@ -32,6 +32,9 @@
viewControls.updateKanbanSettings(data)"
/>
{
- if (
- !leads.value?.data?.data ||
- !['list', 'group_by'].includes(leads.value.data.view_type)
- )
- return []
- if (route.params.viewType === 'group_by') {
+ if (!leads.value?.data?.data) return []
+ if (leads.value.data.view_type === 'group_by') {
if (!leads.value?.data.group_by_field?.name) return []
return getGroupedByRows(
leads.value?.data.data,
leads.value?.data.group_by_field,
)
+ } else if (leads.value.data.view_type === 'kanban') {
+ return getKanbanRows(leads.value.data.data)
} else {
return parseRows(leads.value?.data.data)
}
@@ -158,6 +159,16 @@ function getGroupedByRows(listRows, groupByField) {
return groupedRows || listRows
}
+function getKanbanRows(data) {
+ let _rows = []
+ data.forEach((column) => {
+ column.data?.forEach((row) => {
+ _rows.push(row)
+ })
+ })
+ return parseRows(_rows)
+}
+
function parseRows(rows) {
return rows.map((lead) => {
let _rows = {}
diff --git a/frontend/src/pages/Tasks.vue b/frontend/src/pages/Tasks.vue
index 95388759..dcbe9f39 100644
--- a/frontend/src/pages/Tasks.vue
+++ b/frontend/src/pages/Tasks.vue
@@ -25,8 +25,11 @@
}"
/>
viewControls.updateKanbanSettings(data)"
/>
{
- if (
- !tasks.value?.data?.data ||
- !['list', 'group_by'].includes(tasks.value.data.view_type)
- )
- return []
- return tasks.value?.data.data.map((task) => {
+ if (!tasks.value?.data?.data) return []
+
+ if (tasks.value.data.view_type === 'kanban') {
+ return getKanbanRows(tasks.value.data.data)
+ }
+
+ return parseRows(tasks.value?.data.data)
+})
+
+function getKanbanRows(data) {
+ let _rows = []
+ data.forEach((column) => {
+ column.data?.forEach((row) => {
+ _rows.push(row)
+ })
+ })
+ return parseRows(_rows)
+}
+
+function parseRows(rows) {
+ return rows.map((task) => {
let _rows = {}
tasks.value?.data.rows.forEach((row) => {
_rows[row] = task[row]
@@ -115,7 +133,7 @@ const rows = computed(() => {
})
return _rows
})
-})
+}
const showTaskModal = ref(false)