fix: click item to route or open modal

This commit is contained in:
Shariq Ansari 2024-06-22 14:46:27 +05:30
parent 020bd60fab
commit 25cefbdafc
4 changed files with 79 additions and 22 deletions

View File

@ -70,14 +70,21 @@
:data-column="column.column.name" :data-column="column.column.name"
> >
<template #item="{ element: fields }"> <template #item="{ element: fields }">
<div <component
:is="options.getRowRoute ? 'router-link' : 'div'"
class="pt-3 px-3.5 pb-2.5 rounded-lg border bg-white text-base flex flex-col gap-2" class="pt-3 px-3.5 pb-2.5 rounded-lg border bg-white text-base flex flex-col gap-2"
:data-name="fields.name" :data-name="fields.name"
v-bind="{
to: options.getRowRoute ? options.getRowRoute(fields) : undefined,
onClick: options.onRowClick
? () => options.onRowClick(fields)
: undefined,
}"
> >
<div v-for="value in fields" :key="value"> <div v-for="value in fields" :key="value">
<div class="truncate">{{ value }}</div> <div class="truncate">{{ value }}</div>
</div> </div>
</div> </component>
</template> </template>
</Draggable> </Draggable>
</div> </div>
@ -91,6 +98,16 @@ import Draggable from 'vuedraggable'
import { Dropdown } from 'frappe-ui' import { Dropdown } from 'frappe-ui'
import { computed } from 'vue' import { computed } from 'vue'
const props = defineProps({
options: {
type: Object,
default: () => ({
getRowRoute: null,
onRowClick: null,
}),
},
})
const emit = defineEmits(['update']) const emit = defineEmits(['update'])
const kanban = defineModel() const kanban = defineModel()

View File

@ -31,6 +31,9 @@
<KanbanView <KanbanView
v-if="route.params.viewType == 'kanban'" v-if="route.params.viewType == 'kanban'"
v-model="deals" v-model="deals"
:options="{
getRowRoute: (row) => ({ name: 'Deal', params: { dealId: row.name } }),
}"
@update="(data) => viewControls.updateKanbanSettings(data)" @update="(data) => viewControls.updateKanbanSettings(data)"
/> />
<DealsListView <DealsListView
@ -110,17 +113,15 @@ const viewControls = ref(null)
// Rows // Rows
const rows = computed(() => { const rows = computed(() => {
if ( if (!deals.value?.data?.data) return []
!deals.value?.data?.data || if (deals.value.data.view_type === 'group_by') {
!['list', 'group_by'].includes(deals.value.data.view_type)
)
return []
if (route.params.viewType === 'group_by') {
if (!deals.value?.data.group_by_field?.name) return [] if (!deals.value?.data.group_by_field?.name) return []
return getGroupedByRows( return getGroupedByRows(
deals.value?.data.data, deals.value?.data.data,
deals.value?.data.group_by_field, deals.value?.data.group_by_field,
) )
} else if (deals.value.data.view_type === 'kanban') {
return getKanbanRows(deals.value.data.data)
} else { } else {
return parseRows(deals.value?.data.data) return parseRows(deals.value?.data.data)
} }
@ -156,6 +157,16 @@ function getGroupedByRows(listRows, groupByField) {
return groupedRows || listRows return groupedRows || listRows
} }
function getKanbanRows(data) {
let _rows = []
data.forEach((column) => {
column.data?.forEach((row) => {
_rows.push(row)
})
})
return parseRows(_rows)
}
function parseRows(rows) { function parseRows(rows) {
return rows.map((deal) => { return rows.map((deal) => {
let _rows = {} let _rows = {}

View File

@ -32,6 +32,9 @@
<KanbanView <KanbanView
v-if="route.params.viewType == 'kanban'" v-if="route.params.viewType == 'kanban'"
v-model="leads" v-model="leads"
:options="{
getRowRoute: (row) => ({ name: 'Lead', params: { leadId: row.name } }),
}"
@update="(data) => viewControls.updateKanbanSettings(data)" @update="(data) => viewControls.updateKanbanSettings(data)"
/> />
<LeadsListView <LeadsListView
@ -112,17 +115,15 @@ const viewControls = ref(null)
// Rows // Rows
const rows = computed(() => { const rows = computed(() => {
if ( if (!leads.value?.data?.data) return []
!leads.value?.data?.data || if (leads.value.data.view_type === 'group_by') {
!['list', 'group_by'].includes(leads.value.data.view_type)
)
return []
if (route.params.viewType === 'group_by') {
if (!leads.value?.data.group_by_field?.name) return [] if (!leads.value?.data.group_by_field?.name) return []
return getGroupedByRows( return getGroupedByRows(
leads.value?.data.data, leads.value?.data.data,
leads.value?.data.group_by_field, leads.value?.data.group_by_field,
) )
} else if (leads.value.data.view_type === 'kanban') {
return getKanbanRows(leads.value.data.data)
} else { } else {
return parseRows(leads.value?.data.data) return parseRows(leads.value?.data.data)
} }
@ -158,6 +159,16 @@ function getGroupedByRows(listRows, groupByField) {
return groupedRows || listRows return groupedRows || listRows
} }
function getKanbanRows(data) {
let _rows = []
data.forEach((column) => {
column.data?.forEach((row) => {
_rows.push(row)
})
})
return parseRows(_rows)
}
function parseRows(rows) { function parseRows(rows) {
return rows.map((lead) => { return rows.map((lead) => {
let _rows = {} let _rows = {}

View File

@ -25,8 +25,11 @@
}" }"
/> />
<KanbanView <KanbanView
v-if="$route.params.viewType == 'kanban'" v-if="$route.params.viewType == 'kanban' && rows.length"
v-model="tasks" v-model="tasks"
:options="{
onRowClick: (row) => showTask(row.name),
}"
@update="(data) => viewControls.updateKanbanSettings(data)" @update="(data) => viewControls.updateKanbanSettings(data)"
/> />
<TasksListView <TasksListView
@ -91,12 +94,27 @@ const updatedPageCount = ref(20)
const viewControls = ref(null) const viewControls = ref(null)
const rows = computed(() => { const rows = computed(() => {
if ( if (!tasks.value?.data?.data) return []
!tasks.value?.data?.data ||
!['list', 'group_by'].includes(tasks.value.data.view_type) if (tasks.value.data.view_type === 'kanban') {
) return getKanbanRows(tasks.value.data.data)
return [] }
return tasks.value?.data.data.map((task) => {
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 = {} let _rows = {}
tasks.value?.data.rows.forEach((row) => { tasks.value?.data.rows.forEach((row) => {
_rows[row] = task[row] _rows[row] = task[row]
@ -115,7 +133,7 @@ const rows = computed(() => {
}) })
return _rows return _rows
}) })
}) }
const showTaskModal = ref(false) const showTaskModal = ref(false)