{renderCheckbox(columnAggregate, () => {
@@ -264,18 +561,31 @@ const PermissionsMatrix = ({
key: action.name,
width: 48,
align: 'center',
+ onHeaderCell: () => getColumnHoverProps(action.name, true),
+ onCell: () => getColumnHoverProps(action.name),
render: (_, record) => {
- if (!modelHasPermissionAction(record.model, action.name)) {
- return null
- }
- const state = getPermissionState(
- permissions,
- record.model.name,
- action.name
+ const recordModels = getRecordModels(record)
+ const applicable = recordModels.filter((model) =>
+ modelHasPermissionAction(model, action.name)
)
+ if (applicable.length === 0) return null
+ if (!record.isGroup && applicable.length === 1) {
+ const state = getPermissionState(
+ permissions,
+ applicable[0].name,
+ action.name
+ )
+ return renderCheckbox(state, () => {
+ handleCycle(applicable[0].name, action.name)
+ })
+ }
+
+ const state = getAggregatePermissionState(
+ getColumnPermissionStates(permissions, applicable, action, inherit)
+ )
return renderCheckbox(state, () => {
- handleCycle(record.model.name, action.name)
+ handleCycleModelsAction(applicable, action)
})
}
}
@@ -284,38 +594,42 @@ const PermissionsMatrix = ({
return [modelColumn, ...actionColumns]
}, [
actions,
+ getColumnHoverProps,
handleCycle,
handleCycleColumn,
- handleCycleRow,
+ handleCycleModels,
+ handleCycleModelsAction,
+ handleToggleSection,
inherit,
isMobile,
+ isSectionExpanded,
models,
permissions,
renderCheckbox
])
- const dataSource = useMemo(
- () =>
- models.map((model) => ({
- key: model.name,
- label: model.label,
- icon: model.icon,
- model
- })),
- [models]
- )
-
return (
-
+
setHoveredColumnKey(null)}>
+
+ record.isGroup ? 'permissions-matrix-group-row' : ''
+ }
+ expandable={{
+ expandedRowKeys: resolvedExpandedRowKeys,
+ onExpandedRowsChange: setExpandedRowKeys,
+ indentSize: 0,
+ expandIcon: () => null
+ }}
+ />
+
)
}