import type {Ref} from "vue"; import {watch} from "vue"; const handlePermissionsMap = (data: any, map: Map, parentId: string[] = []) => { data.forEach((item: any) => { if (item.children) { handlePermissionsMap(item.children,map, parentId.concat(item.id) ) } else { map.set(item.id, { parentIds: parentId, name: item.name }) } }) } export const useIndirectMenusMap = (tableData: Ref) => { const PermissionsMap = ref>(new Map()) watch(() => tableData.value, () => { PermissionsMap.value.clear() if (tableData.value?.length) { handlePermissionsMap(tableData.value, PermissionsMap.value) } }, { immediate: true}) return { PermissionsMap } } export const permissionsGranted = (data: any[]) => { return data.reduce((prev,current) => { let ids = current.granted ? [...prev, current.id] : prev if (current.children) { const _ids = permissionsGranted(current.children) ids = ids.concat(_ids) } return ids }, []) }