fix: render async list custom actions & bulk actions

This commit is contained in:
Shariq Ansari 2024-09-16 21:14:40 +05:30
parent c4bfe9ebcf
commit 3f85c56746
2 changed files with 22 additions and 21 deletions

View File

@ -19,7 +19,7 @@
<script setup>
import EditValueModal from '@/components/Modals/EditValueModal.vue'
import AssignmentModal from '@/components/Modals/AssignmentModal.vue'
import { setupListActions, createToast } from '@/utils'
import { setupListCustomizations, createToast } from '@/utils'
import { globalStore } from '@/stores/global'
import { capture } from '@/telemetry'
import { call } from 'frappe-ui'
@ -45,7 +45,7 @@ const list = defineModel()
const router = useRouter()
const { $dialog } = globalStore()
const { $dialog, $socket } = globalStore()
const showEditModal = ref(false)
const selectedValues = ref([])
@ -230,17 +230,20 @@ function reload(unselectAll) {
list.value?.reload()
}
onMounted(() => {
onMounted(async () => {
if (!list.value?.data) return
setupListActions(list.value.data, {
let customization = await setupListCustomizations(list.value.data, {
list: list.value,
call,
createToast,
$dialog,
$socket,
router,
})
customBulkActions.value = list.value?.data?.bulkActions || []
customListActions.value = list.value?.data?.listActions || []
customBulkActions.value =
customization?.bulkActions || list.value?.data?.bulkActions || []
customListActions.value =
customization?.actions || list.value?.data?.listActions || []
})
defineExpose({

View File

@ -153,35 +153,33 @@ export async function setupCustomizations(data, obj) {
return { statuses, actions }
}
function getActionsFromListScript(script, obj) {
async function getListScript(script, obj) {
let scriptFn = new Function(script + '\nreturn setupList')()
let listScript = scriptFn(obj)
return {
actions: listScript?.actions || [],
bulk_actions: listScript?.bulk_actions || [],
}
let listScript = await scriptFn(obj)
return listScript || {}
}
export function setupListActions(data, obj = {}) {
export async function setupListCustomizations(data, obj = {}) {
if (!data.list_script) return []
let actions = []
let bulkActions = []
if (Array.isArray(data.list_script)) {
data.list_script.forEach((script) => {
let _actions = getActionsFromListScript(script, obj)
actions = actions.concat(_actions.actions)
bulkActions = bulkActions.concat(_actions.bulk_actions)
})
for (let script of data.list_script) {
let _script = await getListScript(script, obj)
actions = actions.concat(_script?.actions || [])
bulkActions = bulkActions.concat(_script?.bulk_actions || [])
}
} else {
let _actions = getActionsFromListScript(data.list_script, obj)
actions = _actions.actions
bulkActions = _actions.bulk_actions
let _script = await getListScript(data.list_script, obj)
actions = _script?.actions || []
bulkActions = _script?.bulk_actions || []
}
data.listActions = actions
data.bulkActions = bulkActions
return { actions, bulkActions }
}
export function errorMessage(title, message) {