59 lines
1.8 KiB
Dart
59 lines
1.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'package:pshared/models/permissions/descriptions/role.dart';
|
|
|
|
import 'package:pweb/models/state/visibility.dart';
|
|
import 'package:pweb/pages/roles/widgets/empty_state.dart';
|
|
import 'package:pweb/pages/roles/widgets/role_card.dart';
|
|
|
|
|
|
class RolesList extends StatelessWidget {
|
|
final List<RoleDescription> roles;
|
|
final VisibilityState Function(RoleDescription role) canCopy;
|
|
final VisibilityState Function(RoleDescription role) canDelete;
|
|
final VisibilityState Function(RoleDescription role) canManagePolicies;
|
|
final String emptyLabel;
|
|
final int Function(RoleDescription role) policiesCount;
|
|
final ValueChanged<RoleDescription> onCopy;
|
|
final ValueChanged<RoleDescription> onDelete;
|
|
final ValueChanged<RoleDescription> onManagePolicies;
|
|
|
|
const RolesList({
|
|
super.key,
|
|
required this.roles,
|
|
required this.canCopy,
|
|
required this.canDelete,
|
|
required this.canManagePolicies,
|
|
required this.emptyLabel,
|
|
required this.policiesCount,
|
|
required this.onCopy,
|
|
required this.onDelete,
|
|
required this.onManagePolicies,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
if (roles.isEmpty) {
|
|
return RolesEmptyState(label: emptyLabel);
|
|
}
|
|
|
|
return Column(
|
|
children: roles.map((role) {
|
|
return Padding(
|
|
padding: const EdgeInsets.only(bottom: 12),
|
|
child: RoleCard(
|
|
role: role,
|
|
policyCount: policiesCount(role),
|
|
canManagePolicies: canManagePolicies(role),
|
|
canCopy: canCopy(role),
|
|
canDelete: canDelete(role),
|
|
onCopy: () => onCopy(role),
|
|
onDelete: () => onDelete(role),
|
|
onManagePolicies: () => onManagePolicies(role),
|
|
),
|
|
);
|
|
}).toList(),
|
|
);
|
|
}
|
|
}
|