fix: click item to route or open modal
This commit is contained in:
parent
020bd60fab
commit
25cefbdafc
@ -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()
|
||||||
|
|||||||
@ -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 = {}
|
||||||
|
|||||||
@ -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 = {}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user