fix: handle onchange of grid row field in modal
(cherry picked from commit 2d484c1ad2a7c70af1bb593bad1b9ee0a7bef54f)
This commit is contained in:
parent
3c493b6cf3
commit
2e3a3016db
@ -327,7 +327,6 @@ const props = defineProps({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const triggerOnChange = inject('triggerOnChange')
|
const triggerOnChange = inject('triggerOnChange')
|
||||||
const fieldname = inject('fieldname')
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
getGridViewSettings,
|
getGridViewSettings,
|
||||||
@ -426,11 +425,7 @@ const deleteRows = () => {
|
|||||||
|
|
||||||
function fieldChange(value, field, row) {
|
function fieldChange(value, field, row) {
|
||||||
row[field.fieldname] = value
|
row[field.fieldname] = value
|
||||||
triggerOnChange(field.fieldname, {
|
triggerOnChange(field.fieldname, row)
|
||||||
fieldname: fieldname,
|
|
||||||
dt: props.doctype,
|
|
||||||
dn: row.name,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<FieldLayout v-if="tabs.data" :tabs="tabs.data" :data="data" />
|
<FieldLayout
|
||||||
|
v-if="tabs.data"
|
||||||
|
:tabs="tabs.data"
|
||||||
|
:data="data"
|
||||||
|
:doctype="doctype"
|
||||||
|
:isGridRow="true"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -213,16 +213,23 @@ const props = defineProps({
|
|||||||
const data = inject('data')
|
const data = inject('data')
|
||||||
const doctype = inject('doctype')
|
const doctype = inject('doctype')
|
||||||
const preview = inject('preview')
|
const preview = inject('preview')
|
||||||
|
const isGridRow = inject('isGridRow')
|
||||||
|
|
||||||
const { getFormattedPercent, getFormattedFloat, getFormattedCurrency } =
|
const { getFormattedPercent, getFormattedFloat, getFormattedCurrency } =
|
||||||
getMeta(doctype)
|
getMeta(doctype)
|
||||||
|
|
||||||
const { getUser } = usersStore()
|
const { getUser } = usersStore()
|
||||||
|
|
||||||
const { triggerOnChange } = useDocument(doctype, data.value.name)
|
let triggerOnChange
|
||||||
|
|
||||||
provide('triggerOnChange', triggerOnChange)
|
if (!isGridRow) {
|
||||||
provide('fieldname', props.field.fieldname)
|
const { triggerOnChange: trigger } = useDocument(doctype, data.value.name)
|
||||||
|
triggerOnChange = trigger
|
||||||
|
|
||||||
|
provide('triggerOnChange', triggerOnChange)
|
||||||
|
} else {
|
||||||
|
triggerOnChange = inject('triggerOnChange')
|
||||||
|
}
|
||||||
|
|
||||||
const field = computed(() => {
|
const field = computed(() => {
|
||||||
let field = props.field
|
let field = props.field
|
||||||
@ -283,7 +290,11 @@ const getPlaceholder = (field) => {
|
|||||||
function fieldChange(value, df) {
|
function fieldChange(value, df) {
|
||||||
data.value[df.fieldname] = value
|
data.value[df.fieldname] = value
|
||||||
|
|
||||||
triggerOnChange(df.fieldname)
|
if (isGridRow) {
|
||||||
|
triggerOnChange(df.fieldname, data.value)
|
||||||
|
} else {
|
||||||
|
triggerOnChange(df.fieldname)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@ -34,6 +34,10 @@ const props = defineProps({
|
|||||||
type: String,
|
type: String,
|
||||||
default: 'CRM Lead',
|
default: 'CRM Lead',
|
||||||
},
|
},
|
||||||
|
isGridRow: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
preview: {
|
preview: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
@ -55,6 +59,7 @@ provide(
|
|||||||
provide('hasTabs', hasTabs)
|
provide('hasTabs', hasTabs)
|
||||||
provide('doctype', props.doctype)
|
provide('doctype', props.doctype)
|
||||||
provide('preview', props.preview)
|
provide('preview', props.preview)
|
||||||
|
provide('isGridRow', props.isGridRow)
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.section:not(:has(.field)) {
|
.section:not(:has(.field)) {
|
||||||
|
|||||||
@ -41,38 +41,37 @@ export function useDocument(doctype, docname) {
|
|||||||
documentsCache[doctype][docname]['controllers'] = controllers
|
documentsCache[doctype][docname]['controllers'] = controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
async function triggerOnChange(fieldname, childTableObj) {
|
async function triggerOnChange(fieldname, row) {
|
||||||
let controllers = documentsCache[doctype][docname]?.controllers
|
let controllers = documentsCache[doctype][docname]?.controllers
|
||||||
if (Object.keys(controllers).length === 0) return
|
if (Object.keys(controllers).length === 0) return
|
||||||
|
|
||||||
let _dt = childTableObj.dt ? childTableObj.dt : doctype
|
let _dt = row?.doctype ? row.doctype : doctype
|
||||||
let doctypeClassName = _dt.replace(/\s+/g, '')
|
let doctypeClassName = _dt.replace(/\s+/g, '')
|
||||||
const c = controllers[doctypeClassName]
|
const c = controllers[doctypeClassName]
|
||||||
if (!c) return
|
if (!c) return
|
||||||
|
|
||||||
if (childTableObj) {
|
if (row) {
|
||||||
let grid = documentsCache[doctype][docname].doc[childTableObj.fieldname]
|
c.row = () => row
|
||||||
c.row = grid.find((row) => row.name === childTableObj.dn)
|
c.value = row[fieldname]
|
||||||
c.oldValue = getOldValue(fieldname, childTableObj)
|
c.oldValue = getOldValue(fieldname, row)
|
||||||
c.value = c.row[fieldname]
|
|
||||||
} else {
|
} else {
|
||||||
c.oldValue = getOldValue(fieldname)
|
|
||||||
c.value = documentsCache[doctype][docname].doc[fieldname]
|
c.value = documentsCache[doctype][docname].doc[fieldname]
|
||||||
|
c.oldValue = getOldValue(fieldname)
|
||||||
}
|
}
|
||||||
|
|
||||||
return await c[fieldname]?.()
|
return await c[fieldname]?.()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getOldValue(fieldname, childTableObj) {
|
function getOldValue(fieldname, row) {
|
||||||
if (!documentsCache[doctype][docname]) return ''
|
if (!documentsCache[doctype][docname]) return ''
|
||||||
|
|
||||||
const document = documentsCache[doctype][docname]
|
const document = documentsCache[doctype][docname]
|
||||||
const oldDoc = document.originalDoc
|
const oldDoc = document.originalDoc
|
||||||
|
|
||||||
if (childTableObj?.dn) {
|
if (row?.name) {
|
||||||
return oldDoc?.[childTableObj.fieldname]?.find(
|
return oldDoc?.[row.parentfield]?.find((r) => r.name === row.name)?.[
|
||||||
(r) => r.name === childTableObj.dn,
|
fieldname
|
||||||
)?.[fieldname]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
return oldDoc?.[fieldname] || document.doc[fieldname]
|
return oldDoc?.[fieldname] || document.doc[fieldname]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user