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

View File

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