fix: on new click show creation modal
This commit is contained in:
parent
25cefbdafc
commit
50ec5b864f
@ -58,7 +58,11 @@
|
|||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
<Button icon="plus" variant="ghost" />
|
<Button
|
||||||
|
icon="plus"
|
||||||
|
variant="ghost"
|
||||||
|
@click="options.onNewClick(column)"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Draggable
|
<Draggable
|
||||||
@ -71,13 +75,13 @@
|
|||||||
>
|
>
|
||||||
<template #item="{ element: fields }">
|
<template #item="{ element: fields }">
|
||||||
<component
|
<component
|
||||||
:is="options.getRowRoute ? 'router-link' : 'div'"
|
:is="options.getRoute ? '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="{
|
v-bind="{
|
||||||
to: options.getRowRoute ? options.getRowRoute(fields) : undefined,
|
to: options.getRoute ? options.getRoute(fields) : undefined,
|
||||||
onClick: options.onRowClick
|
onClick: options.onClick
|
||||||
? () => options.onRowClick(fields)
|
? () => options.onClick(fields)
|
||||||
: undefined,
|
: undefined,
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
@ -102,8 +106,9 @@ const props = defineProps({
|
|||||||
options: {
|
options: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({
|
default: () => ({
|
||||||
getRowRoute: null,
|
getRoute: null,
|
||||||
onRowClick: null,
|
onClick: null,
|
||||||
|
onNewClick: null,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@ -46,6 +46,10 @@ import { Switch, createResource } from 'frappe-ui'
|
|||||||
import { computed, ref, reactive, onMounted } from 'vue'
|
import { computed, ref, reactive, onMounted } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
defaults: Object,
|
||||||
|
})
|
||||||
|
|
||||||
const { getUser } = usersStore()
|
const { getUser } = usersStore()
|
||||||
const { getDealStatus, statusOptions } = statusesStore()
|
const { getDealStatus, statusOptions } = statusesStore()
|
||||||
|
|
||||||
@ -194,6 +198,7 @@ function createDeal() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
Object.assign(deal, props.defaults)
|
||||||
if (!deal.deal_owner) {
|
if (!deal.deal_owner) {
|
||||||
deal.deal_owner = getUser().email
|
deal.deal_owner = getUser().email
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,10 @@ import { createResource } from 'frappe-ui'
|
|||||||
import { computed, onMounted, ref, reactive } from 'vue'
|
import { computed, onMounted, ref, reactive } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
defaults: Object,
|
||||||
|
})
|
||||||
|
|
||||||
const { getUser } = usersStore()
|
const { getUser } = usersStore()
|
||||||
const { getLeadStatus, statusOptions } = statusesStore()
|
const { getLeadStatus, statusOptions } = statusesStore()
|
||||||
|
|
||||||
@ -146,6 +150,7 @@ function createNewLead() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
Object.assign(lead, props.defaults)
|
||||||
if (!lead.lead_owner) {
|
if (!lead.lead_owner) {
|
||||||
lead.lead_owner = getUser().email
|
lead.lead_owner = getUser().email
|
||||||
}
|
}
|
||||||
|
|||||||
@ -119,7 +119,7 @@ import Link from '@/components/Controls/Link.vue'
|
|||||||
import { taskStatusOptions, taskPriorityOptions } from '@/utils'
|
import { taskStatusOptions, taskPriorityOptions } from '@/utils'
|
||||||
import { usersStore } from '@/stores/users'
|
import { usersStore } from '@/stores/users'
|
||||||
import { TextEditor, Dropdown, Tooltip, call, DateTimePicker } from 'frappe-ui'
|
import { TextEditor, Dropdown, Tooltip, call, DateTimePicker } from 'frappe-ui'
|
||||||
import { ref, watch, nextTick } from 'vue'
|
import { ref, watch, nextTick, onMounted } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -205,6 +205,10 @@ async function updateTask() {
|
|||||||
show.value = false
|
show.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
_task.value = { ...props.task }
|
||||||
|
})
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => show.value,
|
() => show.value,
|
||||||
(value) => {
|
(value) => {
|
||||||
|
|||||||
@ -32,7 +32,8 @@
|
|||||||
v-if="route.params.viewType == 'kanban'"
|
v-if="route.params.viewType == 'kanban'"
|
||||||
v-model="deals"
|
v-model="deals"
|
||||||
:options="{
|
:options="{
|
||||||
getRowRoute: (row) => ({ name: 'Deal', params: { dealId: row.name } }),
|
getRoute: (row) => ({ name: 'Deal', params: { dealId: row.name } }),
|
||||||
|
onNewClick: (column) => onNewClick(column),
|
||||||
}"
|
}"
|
||||||
@update="(data) => viewControls.updateKanbanSettings(data)"
|
@update="(data) => viewControls.updateKanbanSettings(data)"
|
||||||
/>
|
/>
|
||||||
@ -67,7 +68,11 @@
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<DealModal v-model="showDealModal" />
|
<DealModal
|
||||||
|
v-if="showDealModal"
|
||||||
|
v-model="showDealModal"
|
||||||
|
:defaults="defaults"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -104,6 +109,8 @@ const route = useRoute()
|
|||||||
const dealsListView = ref(null)
|
const dealsListView = ref(null)
|
||||||
const showDealModal = ref(false)
|
const showDealModal = ref(false)
|
||||||
|
|
||||||
|
const defaults = reactive({})
|
||||||
|
|
||||||
// deals data is loaded in the ViewControls component
|
// deals data is loaded in the ViewControls component
|
||||||
const deals = ref({})
|
const deals = ref({})
|
||||||
const loadMore = ref(1)
|
const loadMore = ref(1)
|
||||||
@ -248,4 +255,14 @@ function parseRows(rows) {
|
|||||||
return _rows
|
return _rows
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onNewClick(column) {
|
||||||
|
let column_field = deals.value.params.column_field
|
||||||
|
|
||||||
|
if (column_field) {
|
||||||
|
defaults[column_field] = column.column.name
|
||||||
|
}
|
||||||
|
|
||||||
|
showDealModal.value = true
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -33,7 +33,8 @@
|
|||||||
v-if="route.params.viewType == 'kanban'"
|
v-if="route.params.viewType == 'kanban'"
|
||||||
v-model="leads"
|
v-model="leads"
|
||||||
:options="{
|
:options="{
|
||||||
getRowRoute: (row) => ({ name: 'Lead', params: { leadId: row.name } }),
|
getRoute: (row) => ({ name: 'Lead', params: { leadId: row.name } }),
|
||||||
|
onNewClick: (column) => onNewClick(column),
|
||||||
}"
|
}"
|
||||||
@update="(data) => viewControls.updateKanbanSettings(data)"
|
@update="(data) => viewControls.updateKanbanSettings(data)"
|
||||||
/>
|
/>
|
||||||
@ -68,7 +69,11 @@
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<LeadModal v-model="showLeadModal" />
|
<LeadModal
|
||||||
|
v-if="showLeadModal"
|
||||||
|
v-model="showLeadModal"
|
||||||
|
:defaults="defaults"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -106,6 +111,8 @@ const route = useRoute()
|
|||||||
const leadsListView = ref(null)
|
const leadsListView = ref(null)
|
||||||
const showLeadModal = ref(false)
|
const showLeadModal = ref(false)
|
||||||
|
|
||||||
|
const defaults = reactive({})
|
||||||
|
|
||||||
// leads data is loaded in the ViewControls component
|
// leads data is loaded in the ViewControls component
|
||||||
const leads = ref({})
|
const leads = ref({})
|
||||||
const loadMore = ref(1)
|
const loadMore = ref(1)
|
||||||
@ -252,53 +259,13 @@ function parseRows(rows) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
let newLead = reactive({
|
function onNewClick(column) {
|
||||||
salutation: '',
|
let column_field = leads.value.params.column_field
|
||||||
first_name: '',
|
|
||||||
last_name: '',
|
|
||||||
lead_name: '',
|
|
||||||
organization: '',
|
|
||||||
status: '',
|
|
||||||
email: '',
|
|
||||||
mobile_no: '',
|
|
||||||
lead_owner: '',
|
|
||||||
})
|
|
||||||
|
|
||||||
const createLead = createResource({
|
if (column_field) {
|
||||||
url: 'frappe.client.insert',
|
defaults[column_field] = column.column.name
|
||||||
makeParams(values) {
|
}
|
||||||
return {
|
|
||||||
doc: {
|
|
||||||
doctype: 'CRM Lead',
|
|
||||||
...values,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
function createNewLead(close) {
|
showLeadModal.value = true
|
||||||
createLead
|
|
||||||
.submit(newLead, {
|
|
||||||
validate() {
|
|
||||||
if (!newLead.first_name) {
|
|
||||||
createToast({
|
|
||||||
title: __('Error creating lead'),
|
|
||||||
text: __('First name is required'),
|
|
||||||
icon: 'x',
|
|
||||||
iconClasses: 'text-red-600',
|
|
||||||
})
|
|
||||||
return __('First name is required')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onSuccess(data) {
|
|
||||||
router.push({
|
|
||||||
name: 'Lead',
|
|
||||||
params: {
|
|
||||||
leadId: data.name,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(close)
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -28,7 +28,8 @@
|
|||||||
v-if="$route.params.viewType == 'kanban' && rows.length"
|
v-if="$route.params.viewType == 'kanban' && rows.length"
|
||||||
v-model="tasks"
|
v-model="tasks"
|
||||||
:options="{
|
:options="{
|
||||||
onRowClick: (row) => showTask(row.name),
|
onClick: (row) => showTask(row.name),
|
||||||
|
onNewClick: (column) => createTask(column),
|
||||||
}"
|
}"
|
||||||
@update="(data) => viewControls.updateKanbanSettings(data)"
|
@update="(data) => viewControls.updateKanbanSettings(data)"
|
||||||
/>
|
/>
|
||||||
@ -64,7 +65,12 @@
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<TaskModal v-model="showTaskModal" v-model:reloadTasks="tasks" :task="task" />
|
<TaskModal
|
||||||
|
v-if="showTaskModal"
|
||||||
|
v-model="showTaskModal"
|
||||||
|
v-model:reloadTasks="tasks"
|
||||||
|
:task="task"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -165,7 +171,7 @@ function showTask(name) {
|
|||||||
showTaskModal.value = true
|
showTaskModal.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
function createTask() {
|
function createTask(column) {
|
||||||
task.value = {
|
task.value = {
|
||||||
name: '',
|
name: '',
|
||||||
title: '',
|
title: '',
|
||||||
@ -177,6 +183,14 @@ function createTask() {
|
|||||||
reference_doctype: 'CRM Lead',
|
reference_doctype: 'CRM Lead',
|
||||||
reference_docname: '',
|
reference_docname: '',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (column.column?.name) {
|
||||||
|
let column_field = tasks.value.params.column_field
|
||||||
|
if (column_field) {
|
||||||
|
task.value[column_field] = column.column.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
showTaskModal.value = true
|
showTaskModal.value = true
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user