feat: added trigger function on row add & remove

This commit is contained in:
Shariq Ansari 2025-05-07 18:06:38 +05:30
parent 727d0a9acd
commit 336083a00f
5 changed files with 52 additions and 3 deletions

View File

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

View File

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

View File

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

View File

@ -83,6 +83,36 @@ export function useDocument(doctype, docname) {
return await c[fieldname]?.() 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) { function getOldValue(fieldname, row) {
if (!documentsCache[doctype][docname]) return '' if (!documentsCache[doctype][docname]) return ''
@ -103,6 +133,8 @@ export function useDocument(doctype, docname) {
actions: computed(() => getActions()), actions: computed(() => getActions()),
getOldValue, getOldValue,
triggerOnChange, triggerOnChange,
triggerOnRowAdd,
triggerOnRowRemove,
triggerOnRefresh, triggerOnRefresh,
setupFormScript, setupFormScript,
} }

View File

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