diff --git a/packages/nc-gui/components/dashboard/settings/UIAcl.vue b/packages/nc-gui/components/dashboard/settings/UIAcl.vue index 5321768132..b613510f48 100644 --- a/packages/nc-gui/components/dashboard/settings/UIAcl.vue +++ b/packages/nc-gui/components/dashboard/settings/UIAcl.vue @@ -16,6 +16,8 @@ import { useNuxtApp, } from '#imports' +type Role = 'editor' | 'commenter' | 'viewer' + const props = defineProps<{ sourceId: string }>() @@ -39,6 +41,12 @@ const tables = ref([]) const searchInput = ref('') +const selectAll = ref({ + editor: false, + commenter: false, + viewer: false, +}) + const filteredTables = computed(() => tables.value.filter( (el) => @@ -80,15 +88,21 @@ async function saveUIAcl() { $e('a:proj-meta:ui-acl') } -const onRoleCheck = (record: any, role: string) => { +const onRoleCheck = (record: any, role: Role) => { record.disabled[role] = !record.disabled[role] record.edited = true + + selectAll.value[role as Role] = filteredTables.value.every((t) => !t.disabled[role]) } onMounted(async () => { if (tables.value.length === 0) { await loadTableList() } + + for (const role of roles.value) { + selectAll.value[role as Role] = filteredTables.value.every((t) => !t.disabled[role]) + } }) const tableHeaderRenderer = (label: string) => () => h('div', { class: 'text-gray-500' }, label) @@ -118,6 +132,16 @@ const columns = [ width: 120, }, ] + +const toggleSelectAll = (role: Role) => { + selectAll.value[role] = !selectAll.value[role] + const enabled = selectAll.value[role] + + filteredTables.value.forEach((t) => { + t.disabled[role] = !enabled + t.edited = true + }) +} -