feat: added trigger function on row add & remove

(cherry picked from commit 336083a00f3e71c8cc07477f6bf98131d7400f41)
This commit is contained in:
Shariq Ansari 2025-05-07 18:06:38 +05:30 committed by Mergify
parent 0a1546348e
commit 4e6577bb4d
5 changed files with 52 additions and 3 deletions

View File

@ -327,9 +327,15 @@ const props = defineProps({
type: String,
required: true,
},
parentFieldname: {
type: String,
required: true,
},
})
const triggerOnChange = inject('triggerOnChange')
const triggerOnRowAdd = inject('triggerOnRowAdd')
const triggerOnRowRemove = inject('triggerOnRowRemove')
const {
getGridViewSettings,
@ -419,11 +425,16 @@ const addRow = () => {
newRow['__islocal'] = true
newRow['idx'] = rows.value.length + 1
newRow['doctype'] = props.doctype
newRow['parentfield'] = props.parentFieldname
newRow['parenttype'] = props.parentDoctype
rows.value.push(newRow)
triggerOnRowAdd(newRow)
}
const deleteRows = () => {
rows.value = rows.value.filter((row) => !selectedRows.has(row.name))
triggerOnRowRemove(selectedRows, rows.value)
showRowList.value.pop()
selectedRows.clear()
}

View File

@ -26,6 +26,7 @@
v-model="data[field.fieldname]"
:doctype="field.options"
:parentDoctype="doctype"
:parentFieldname="field.fieldname"
/>
<FormControl
v-else-if="field.fieldtype === 'Select'"
@ -226,10 +227,16 @@ const { getUser } = usersStore()
let triggerOnChange
if (!isGridRow) {
const { triggerOnChange: trigger } = useDocument(doctype, data.value.name)
const {
triggerOnChange: trigger,
triggerOnRowAdd,
triggerOnRowRemove,
} = useDocument(doctype, data.value.name)
triggerOnChange = trigger
provide('triggerOnChange', triggerOnChange)
provide('triggerOnRowAdd', triggerOnRowAdd)
provide('triggerOnRowRemove', triggerOnRowRemove)
} else {
triggerOnChange = inject('triggerOnChange')
}

View File

@ -101,6 +101,7 @@
v-model="settings.doc.dropdown_items"
doctype="CRM Dropdown Item"
parentDoctype="FCRM Settings"
parentFieldname="dropdown_items"
/>
</div>
</div>

View File

@ -83,6 +83,36 @@ export function useDocument(doctype, docname) {
return await c[fieldname]?.()
}
async function triggerOnRowAdd(row) {
const dt = row?.doctype ? row.doctype : doctype
const c = getController(dt)
if (!c) return
c.currentRowIdx = row.idx
c.value = row
return await c[row.parentfield + '_add']?.()
}
async function triggerOnRowRemove(selectedRows, rows) {
if (!selectedRows) return
const dt = rows[0]?.doctype ? rows[0].doctype : doctype
const c = getController(dt)
if (!c) return
if (selectedRows.size === 1) {
const selectedRow = Array.from(selectedRows)[0]
c.currentRowIdx = rows.find((r) => r.name === selectedRow).idx
} else {
delete c.currentRowIdx
}
c.selectedRows = Array.from(selectedRows)
c.rows = rows
return await c[rows[0].parentfield + '_remove']?.()
}
function getOldValue(fieldname, row) {
if (!documentsCache[doctype][docname]) return ''
@ -103,6 +133,8 @@ export function useDocument(doctype, docname) {
actions: computed(() => getActions()),
getOldValue,
triggerOnChange,
triggerOnRowAdd,
triggerOnRowRemove,
triggerOnRefresh,
setupFormScript,
}

View File

@ -163,8 +163,6 @@ export function getScript(doctype, view = 'Form') {
}
row.parent = row.parent || data.name
row.parentype = row.parenttype || data.doctype
row.parentfield = row.parentfield || parentField
return createDocProxy(row, instance)
}