mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-11-26 19:44:56 +00:00
formatted all files.
This commit is contained in:
@ -1,4 +1,3 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:syncrow_web/pages/common/bloc/project_manager.dart';
|
||||
@ -11,7 +10,6 @@ import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialo
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/model/tree_node_model.dart';
|
||||
import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart';
|
||||
import 'package:syncrow_web/pages/space_tree/bloc/space_tree_event.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart';
|
||||
import 'package:syncrow_web/services/space_mana_api.dart';
|
||||
import 'package:syncrow_web/services/user_permission.dart';
|
||||
@ -66,7 +64,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
void isCompleteSpacesFun(
|
||||
CheckSpacesStepStatus event, Emitter<UsersState> emit) {
|
||||
emit(UsersLoadingState());
|
||||
var spaceBloc =
|
||||
final spaceBloc =
|
||||
NavigationService.navigatorKey.currentContext!.read<SpaceTreeBloc>();
|
||||
|
||||
isCompleteSpaces = spaceBloc.state.selectedCommunities.isNotEmpty;
|
||||
@ -83,26 +81,25 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
String communityUuid) async {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
return await CommunitySpaceManagementApi()
|
||||
return CommunitySpaceManagementApi()
|
||||
.getSpaceHierarchy(communityUuid, projectUuid);
|
||||
}
|
||||
|
||||
List<TreeNode> updatedCommunities = [];
|
||||
List<TreeNode> spacesNodes = [];
|
||||
List<String> communityIds = [];
|
||||
_onLoadCommunityAndSpaces(
|
||||
Future<void> _onLoadCommunityAndSpaces(
|
||||
LoadCommunityAndSpacesEvent event, Emitter<UsersState> emit) async {
|
||||
try {
|
||||
emit(UsersLoadingState());
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
List<CommunityModel> communities =
|
||||
final communities =
|
||||
await CommunitySpaceManagementApi().fetchCommunities(projectUuid);
|
||||
communityIds = communities.map((community) => community.uuid).toList();
|
||||
updatedCommunities = await Future.wait(
|
||||
communities.map((community) async {
|
||||
List<SpaceModel> spaces =
|
||||
await _fetchSpacesForCommunity(community.uuid);
|
||||
final spaces = await _fetchSpacesForCommunity(community.uuid);
|
||||
spacesNodes = _buildTreeNodes(spaces);
|
||||
return TreeNode(
|
||||
uuid: community.uuid,
|
||||
@ -129,7 +126,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
// Build tree nodes from your data model.
|
||||
List<TreeNode> _buildTreeNodes(List<SpaceModel> spaces) {
|
||||
return spaces.map((space) {
|
||||
List<TreeNode> childNodes =
|
||||
final childNodes =
|
||||
space.children.isNotEmpty ? _buildTreeNodes(space.children) : [];
|
||||
return TreeNode(
|
||||
uuid: space.uuid!,
|
||||
@ -170,7 +167,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
_clearHighlights(updatedCommunities);
|
||||
} else {
|
||||
// Start with a fresh clone of the original tree.
|
||||
List<TreeNode> freshClone = _cloneNodes(originalCommunities);
|
||||
final freshClone = _cloneNodes(originalCommunities);
|
||||
|
||||
_searchAndHighlightNodes(freshClone, event.searchTerm!);
|
||||
|
||||
@ -180,7 +177,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
|
||||
void _clearHighlights(List<TreeNode> nodes) {
|
||||
for (var node in nodes) {
|
||||
for (final node in nodes) {
|
||||
node.isHighlighted = false;
|
||||
if (node.children.isNotEmpty) {
|
||||
_clearHighlights(node.children);
|
||||
@ -189,11 +186,11 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
|
||||
bool _searchAndHighlightNodes(List<TreeNode> nodes, String searchTerm) {
|
||||
bool anyMatch = false;
|
||||
for (var node in nodes) {
|
||||
bool isMatch =
|
||||
var anyMatch = false;
|
||||
for (final node in nodes) {
|
||||
final isMatch =
|
||||
node.title.toLowerCase().contains(searchTerm.toLowerCase());
|
||||
bool childMatch = _searchAndHighlightNodes(node.children, searchTerm);
|
||||
final childMatch = _searchAndHighlightNodes(node.children, searchTerm);
|
||||
node.isHighlighted = isMatch || childMatch;
|
||||
|
||||
anyMatch = anyMatch || node.isHighlighted;
|
||||
@ -202,11 +199,11 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
|
||||
List<TreeNode> _filterNodes(List<TreeNode> nodes, String searchTerm) {
|
||||
List<TreeNode> filteredNodes = [];
|
||||
for (var node in nodes) {
|
||||
bool isMatch =
|
||||
final filteredNodes = <TreeNode>[];
|
||||
for (final node in nodes) {
|
||||
final isMatch =
|
||||
node.title.toLowerCase().contains(searchTerm.toLowerCase());
|
||||
List<TreeNode> filteredChildren = _filterNodes(node.children, searchTerm);
|
||||
final filteredChildren = _filterNodes(node.children, searchTerm);
|
||||
if (isMatch || filteredChildren.isNotEmpty) {
|
||||
node.isHighlighted = isMatch;
|
||||
node.children = filteredChildren;
|
||||
@ -289,8 +286,8 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
List<String> selectedIds = [];
|
||||
|
||||
List<String> getSelectedIds(List<TreeNode> nodes) {
|
||||
List<String> selectedIds = [];
|
||||
for (var node in nodes) {
|
||||
final selectedIds = <String>[];
|
||||
for (final node in nodes) {
|
||||
if (node.isChecked) {
|
||||
selectedIds.add(node.uuid);
|
||||
}
|
||||
@ -304,7 +301,8 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
List<RoleTypeModel> roles = [];
|
||||
List<PermissionOption> permissions = [];
|
||||
|
||||
_getRolePermission(RoleEvent event, Emitter<UsersState> emit) async {
|
||||
Future<void> _getRolePermission(
|
||||
RoleEvent event, Emitter<UsersState> emit) async {
|
||||
try {
|
||||
emit(UsersLoadingState());
|
||||
roles = await UserPermissionApi().fetchRoles();
|
||||
@ -314,11 +312,12 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
}
|
||||
|
||||
_getPermissions(PermissionEvent event, Emitter<UsersState> emit) async {
|
||||
Future<void> _getPermissions(
|
||||
PermissionEvent event, Emitter<UsersState> emit) async {
|
||||
try {
|
||||
emit(UsersLoadingState());
|
||||
permissions = await UserPermissionApi().fetchPermission(
|
||||
event.roleUuid == "" ? roles.first.uuid : event.roleUuid);
|
||||
event.roleUuid == '' ? roles.first.uuid : event.roleUuid);
|
||||
roleSelected = event.roleUuid!;
|
||||
emit(RolePermissionInitial());
|
||||
} catch (e) {
|
||||
@ -327,18 +326,19 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
|
||||
bool _searchRolePermission(List<PermissionOption> nodes, String searchTerm) {
|
||||
bool anyMatch = false;
|
||||
for (var node in nodes) {
|
||||
bool isMatch =
|
||||
var anyMatch = false;
|
||||
for (final node in nodes) {
|
||||
final isMatch =
|
||||
node.title.toLowerCase().contains(searchTerm.toLowerCase());
|
||||
bool childMatch = _searchRolePermission(node.subOptions, searchTerm);
|
||||
final childMatch = _searchRolePermission(node.subOptions, searchTerm);
|
||||
node.isHighlighted = isMatch || childMatch;
|
||||
anyMatch = anyMatch || node.isHighlighted;
|
||||
}
|
||||
return anyMatch;
|
||||
}
|
||||
|
||||
void _sendInvitUser(SendInviteUsers event, Emitter<UsersState> emit) async {
|
||||
Future<void> _sendInvitUser(
|
||||
SendInviteUsers event, Emitter<UsersState> emit) async {
|
||||
try {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
@ -346,10 +346,10 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
// List<String> selectedIds =
|
||||
// getSelectedIds(updatedCommunities).where((id) => !communityIds.contains(id)).toList();
|
||||
|
||||
List<String> selectedSpacesId = getSelectedSpacesIds();
|
||||
final selectedSpacesId = getSelectedSpacesIds();
|
||||
// List<String> selectedIds = getSelectedIds(updatedCommunities);
|
||||
|
||||
bool res = await UserPermissionApi().sendInviteUser(
|
||||
final res = await UserPermissionApi().sendInviteUser(
|
||||
email: emailController.text,
|
||||
firstName: firstNameController.text,
|
||||
jobTitle: jobTitleController.text,
|
||||
@ -363,9 +363,9 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
showCustomDialog(
|
||||
barrierDismissible: false,
|
||||
context: event.context,
|
||||
message: "The invite was sent successfully.",
|
||||
message: 'The invite was sent successfully.',
|
||||
iconPath: Assets.deviceNoteIcon,
|
||||
title: "Invite Success",
|
||||
title: 'Invite Success',
|
||||
dialogHeight: MediaQuery.of(event.context).size.height * 0.3,
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
@ -382,27 +382,28 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
emit(SaveState());
|
||||
} catch (e) {
|
||||
emit(ErrorState('Failed to send invite: ${e.toString()}'));
|
||||
emit(ErrorState('Failed to send invite: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
List<String> getSelectedSpacesIds() {
|
||||
List<String> selectedSpacesId = [];
|
||||
var spaceBloc =
|
||||
final selectedSpacesId = <String>[];
|
||||
final spaceBloc =
|
||||
NavigationService.navigatorKey.currentContext!.read<SpaceTreeBloc>();
|
||||
for (var community in spaceBloc.state.selectedCommunities) {
|
||||
for (final community in spaceBloc.state.selectedCommunities) {
|
||||
selectedSpacesId
|
||||
.addAll(spaceBloc.state.selectedCommunityAndSpaces[community] ?? []);
|
||||
}
|
||||
return selectedSpacesId;
|
||||
}
|
||||
|
||||
_editInviteUser(EditInviteUsers event, Emitter<UsersState> emit) async {
|
||||
Future<void> _editInviteUser(
|
||||
EditInviteUsers event, Emitter<UsersState> emit) async {
|
||||
try {
|
||||
emit(UsersLoadingState());
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
bool res = await UserPermissionApi().editInviteUser(
|
||||
final res = await UserPermissionApi().editInviteUser(
|
||||
userId: event.userId,
|
||||
firstName: firstNameController.text,
|
||||
jobTitle: jobTitleController.text,
|
||||
@ -415,9 +416,9 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
showCustomDialog(
|
||||
barrierDismissible: false,
|
||||
context: event.context,
|
||||
message: "The invite was sent successfully.",
|
||||
message: 'The invite was sent successfully.',
|
||||
iconPath: Assets.deviceNoteIcon,
|
||||
title: "Invite Success",
|
||||
title: 'Invite Success',
|
||||
dialogHeight: MediaQuery.of(event.context).size.height * 0.3,
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
@ -436,7 +437,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
emit(SaveState());
|
||||
} catch (e) {
|
||||
emit(ErrorState('Failed to send invite: ${e.toString()}'));
|
||||
emit(ErrorState('Failed to send invite: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
@ -455,7 +456,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
Future<void> checkEmail(
|
||||
CheckEmailEvent event, Emitter<UsersState> emit) async {
|
||||
emit(UsersLoadingState());
|
||||
String? res = await UserPermissionApi().checkEmail(
|
||||
final res = await UserPermissionApi().checkEmail(
|
||||
emailController.text,
|
||||
);
|
||||
checkEmailValid = res!;
|
||||
@ -469,8 +470,8 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
final emailRegex = RegExp(
|
||||
r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$',
|
||||
);
|
||||
bool isEmailValid = emailRegex.hasMatch(emailController.text);
|
||||
bool isEmailServerValid = checkEmailValid == 'Valid email';
|
||||
final isEmailValid = emailRegex.hasMatch(emailController.text);
|
||||
final isEmailServerValid = checkEmailValid == 'Valid email';
|
||||
isCompleteBasics = firstNameController.text.isNotEmpty &&
|
||||
lastNameController.text.isNotEmpty &&
|
||||
emailController.text.isNotEmpty &&
|
||||
@ -486,7 +487,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
|
||||
void _clearHighlightsRolePermission(List<PermissionOption> nodes) {
|
||||
for (var node in nodes) {
|
||||
for (final node in nodes) {
|
||||
node.isHighlighted = false;
|
||||
if (node.subOptions.isNotEmpty) {
|
||||
_clearHighlightsRolePermission(node.subOptions);
|
||||
@ -515,7 +516,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
emit(UsersLoadingState());
|
||||
|
||||
try {
|
||||
var spaceBloc =
|
||||
final spaceBloc =
|
||||
NavigationService.navigatorKey.currentContext!.read<SpaceTreeBloc>();
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
@ -533,9 +534,9 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
res.roleType;
|
||||
res.spaces.map((space) {
|
||||
selectedIds.add(space.uuid);
|
||||
CommunityModel community = spaceBloc.state.communityList
|
||||
final community = spaceBloc.state.communityList
|
||||
.firstWhere((item) => item.uuid == space.communityUuid);
|
||||
spaceBloc.add(OnSpaceSelected(community, space.uuid, []));
|
||||
spaceBloc.add(OnSpaceSelected(community, space.uuid, const []));
|
||||
}).toList();
|
||||
|
||||
// if (updatedCommunities.isNotEmpty) {
|
||||
@ -548,7 +549,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
final roleId = roles
|
||||
.firstWhere((element) =>
|
||||
element.type ==
|
||||
res.roleType.toString().toLowerCase().replaceAll("_", " "))
|
||||
res.roleType.toLowerCase().replaceAll('_', ' '))
|
||||
.uuid;
|
||||
debugPrint('Role ID: $roleId');
|
||||
roleSelected = roleId;
|
||||
@ -604,14 +605,14 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
|
||||
void _updateChildrenCheckStatus(TreeNode node, bool isChecked) {
|
||||
for (var child in node.children) {
|
||||
for (final child in node.children) {
|
||||
child.isChecked = isChecked;
|
||||
_updateChildrenCheckStatus(child, isChecked);
|
||||
}
|
||||
}
|
||||
|
||||
void _updateParentCheckStatus(TreeNode node) {
|
||||
TreeNode? parent = _findParent(updatedCommunities, node);
|
||||
final parent = _findParent(updatedCommunities, node);
|
||||
if (parent != null) {
|
||||
parent.isChecked = _areAllChildrenChecked(parent);
|
||||
_updateParentCheckStatus(parent);
|
||||
@ -626,7 +627,7 @@ class UsersBloc extends Bloc<UsersEvent, UsersState> {
|
||||
}
|
||||
|
||||
TreeNode? _findParent(List<TreeNode> nodes, TreeNode target) {
|
||||
for (var node in nodes) {
|
||||
for (final node in nodes) {
|
||||
if (node.children.contains(target)) {
|
||||
return node;
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ class RoleEvent extends UsersEvent {
|
||||
|
||||
class PermissionEvent extends UsersEvent {
|
||||
final String? roleUuid;
|
||||
const PermissionEvent({this.roleUuid = ""});
|
||||
const PermissionEvent({this.roleUuid = ''});
|
||||
@override
|
||||
List<Object?> get props => [roleUuid];
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ class PermissionOption {
|
||||
return PermissionOption(
|
||||
id: json['id'] ?? '',
|
||||
title: json['title'] != null
|
||||
? json['title'].toString().toLowerCase().replaceAll("_", " ")
|
||||
? json['title'].toString().toLowerCase().replaceAll('_', ' ')
|
||||
: '',
|
||||
isChecked: json['isChecked'] ?? false,
|
||||
isHighlighted: json['isHighlighted'] ?? false,
|
||||
|
||||
@ -14,4 +14,4 @@ class TreeNode {
|
||||
this.isExpanded = false,
|
||||
this.children = const [],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,12 +29,13 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
child: BlocConsumer<UsersBloc, UsersState>(
|
||||
listener: (context, state) {},
|
||||
builder: (context, state) {
|
||||
final _blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
final blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
|
||||
return Dialog(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(20))),
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(20))),
|
||||
width: 900,
|
||||
child: Column(
|
||||
children: [
|
||||
@ -43,7 +44,7 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
padding: EdgeInsets.all(8.0),
|
||||
child: SizedBox(
|
||||
child: Text(
|
||||
"Add New User",
|
||||
'Add New User',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w700,
|
||||
@ -61,9 +62,10 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildStep1Indicator(1, "Basics", _blocRole),
|
||||
_buildStep2Indicator(2, "Spaces", _blocRole),
|
||||
_buildStep3Indicator(3, "Role & Permissions", _blocRole),
|
||||
_buildStep1Indicator(1, 'Basics', blocRole),
|
||||
_buildStep2Indicator(2, 'Spaces', blocRole),
|
||||
_buildStep3Indicator(
|
||||
3, 'Role & Permissions', blocRole),
|
||||
],
|
||||
),
|
||||
),
|
||||
@ -101,31 +103,35 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: const Text("Cancel"),
|
||||
child: const Text('Cancel'),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
_blocRole.add(const CheckEmailEvent());
|
||||
blocRole.add(const CheckEmailEvent());
|
||||
|
||||
setState(() {
|
||||
if (currentStep < 3) {
|
||||
currentStep++;
|
||||
if (currentStep == 2) {
|
||||
_blocRole.add(const CheckStepStatus(isEditUser: false));
|
||||
blocRole.add(const CheckStepStatus(
|
||||
isEditUser: false));
|
||||
} else if (currentStep == 3) {
|
||||
_blocRole.add(const CheckSpacesStepStatus());
|
||||
blocRole.add(const CheckSpacesStepStatus());
|
||||
}
|
||||
} else {
|
||||
_blocRole.add(SendInviteUsers(context: context));
|
||||
blocRole
|
||||
.add(SendInviteUsers(context: context));
|
||||
}
|
||||
});
|
||||
},
|
||||
child: Text(
|
||||
currentStep < 3 ? "Next" : "Save",
|
||||
currentStep < 3 ? 'Next' : 'Save',
|
||||
style: TextStyle(
|
||||
color: (_blocRole.isCompleteSpaces == false ||
|
||||
_blocRole.isCompleteBasics == false ||
|
||||
_blocRole.isCompleteRolePermissions == false) &&
|
||||
color: (blocRole.isCompleteSpaces == false ||
|
||||
blocRole.isCompleteBasics ==
|
||||
false ||
|
||||
blocRole.isCompleteRolePermissions ==
|
||||
false) &&
|
||||
currentStep == 3
|
||||
? ColorsManager.grayColor
|
||||
: ColorsManager.secondaryColor),
|
||||
@ -196,8 +202,12 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
label,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: currentStep == step ? ColorsManager.blackColor : ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step ? FontWeight.bold : FontWeight.normal,
|
||||
color: currentStep == step
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step
|
||||
? FontWeight.bold
|
||||
: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -260,8 +270,12 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
label,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: currentStep == step ? ColorsManager.blackColor : ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step ? FontWeight.bold : FontWeight.normal,
|
||||
color: currentStep == step
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step
|
||||
? FontWeight.bold
|
||||
: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -291,7 +305,7 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
currentStep = step;
|
||||
step3 = step;
|
||||
bloc.add(const CheckSpacesStepStatus());
|
||||
bloc.add(CheckStepStatus(isEditUser: false));
|
||||
bloc.add(const CheckStepStatus(isEditUser: false));
|
||||
});
|
||||
},
|
||||
child: Column(
|
||||
@ -318,8 +332,12 @@ class _AddNewUserDialogState extends State<AddNewUserDialog> {
|
||||
label,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: currentStep == step ? ColorsManager.blackColor : ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step ? FontWeight.bold : FontWeight.normal,
|
||||
color: currentStep == step
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step
|
||||
? FontWeight.bold
|
||||
: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@ -15,12 +15,12 @@ class BasicsView extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocBuilder<UsersBloc, UsersState>(builder: (context, state) {
|
||||
final _blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
final blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
if (state is BasicsStepInvalidState) {
|
||||
_blocRole.formKey.currentState?.validate();
|
||||
blocRole.formKey.currentState?.validate();
|
||||
}
|
||||
return Form(
|
||||
key: _blocRole.formKey,
|
||||
key: blocRole.formKey,
|
||||
child: ListView(
|
||||
shrinkWrap: true,
|
||||
children: [
|
||||
@ -57,7 +57,7 @@ class BasicsView extends StatelessWidget {
|
||||
child: Row(
|
||||
children: [
|
||||
const Text(
|
||||
" * ",
|
||||
' * ',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.red,
|
||||
fontWeight: FontWeight.w900,
|
||||
@ -84,9 +84,9 @@ class BasicsView extends StatelessWidget {
|
||||
// _blocRole.add(const ValidateBasicsStep());
|
||||
// });
|
||||
// },
|
||||
controller: _blocRole.firstNameController,
|
||||
controller: blocRole.firstNameController,
|
||||
decoration: inputTextFormDeco(
|
||||
hintText: "Enter first name",
|
||||
hintText: 'Enter first name',
|
||||
).copyWith(
|
||||
hintStyle: context.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w400,
|
||||
@ -117,7 +117,7 @@ class BasicsView extends StatelessWidget {
|
||||
child: Row(
|
||||
children: [
|
||||
const Text(
|
||||
" * ",
|
||||
' * ',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.red,
|
||||
fontWeight: FontWeight.w900,
|
||||
@ -140,10 +140,10 @@ class BasicsView extends StatelessWidget {
|
||||
// _blocRole.add(ValidateBasicsStep());
|
||||
// });
|
||||
// },
|
||||
controller: _blocRole.lastNameController,
|
||||
controller: blocRole.lastNameController,
|
||||
style: const TextStyle(color: Colors.black),
|
||||
decoration:
|
||||
inputTextFormDeco(hintText: "Enter last name")
|
||||
inputTextFormDeco(hintText: 'Enter last name')
|
||||
.copyWith(
|
||||
hintStyle: context.textTheme.bodyMedium
|
||||
?.copyWith(
|
||||
@ -172,7 +172,7 @@ class BasicsView extends StatelessWidget {
|
||||
child: Row(
|
||||
children: [
|
||||
const Text(
|
||||
" * ",
|
||||
' * ',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.red,
|
||||
fontWeight: FontWeight.w900,
|
||||
@ -199,9 +199,9 @@ class BasicsView extends StatelessWidget {
|
||||
// _blocRole.add(ValidateBasicsStep());
|
||||
// });
|
||||
// },
|
||||
controller: _blocRole.emailController,
|
||||
controller: blocRole.emailController,
|
||||
style: const TextStyle(color: ColorsManager.blackColor),
|
||||
decoration: inputTextFormDeco(hintText: "name@example.com")
|
||||
decoration: inputTextFormDeco(hintText: 'name@example.com')
|
||||
.copyWith(
|
||||
hintStyle: context.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w400,
|
||||
@ -218,9 +218,10 @@ class BasicsView extends StatelessWidget {
|
||||
if (!emailRegex.hasMatch(value)) {
|
||||
return 'Enter a valid Email Address';
|
||||
}
|
||||
if (_blocRole.checkEmailValid != "Valid email") {
|
||||
return _blocRole.checkEmailValid;
|
||||
if (blocRole.checkEmailValid != 'Valid email') {
|
||||
return blocRole.checkEmailValid;
|
||||
}
|
||||
return null;
|
||||
// return null;
|
||||
},
|
||||
),
|
||||
@ -254,7 +255,7 @@ class BasicsView extends StatelessWidget {
|
||||
const TextStyle(color: ColorsManager.blackColor),
|
||||
textInputAction: TextInputAction.done,
|
||||
decoration: inputTextFormDeco(
|
||||
hintText: "05x xxx xxxx",
|
||||
hintText: '05x xxx xxxx',
|
||||
).copyWith(
|
||||
hintStyle: context.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w400,
|
||||
@ -264,32 +265,32 @@ class BasicsView extends StatelessWidget {
|
||||
initialCountryCode: 'AE',
|
||||
countries: const [
|
||||
Country(
|
||||
name: "United Arab Emirates",
|
||||
name: 'United Arab Emirates',
|
||||
nameTranslations: {
|
||||
"en": "United Arab Emirates",
|
||||
"ar": "الإمارات العربية المتحدة",
|
||||
'en': 'United Arab Emirates',
|
||||
'ar': 'الإمارات العربية المتحدة',
|
||||
},
|
||||
flag: "🇦🇪",
|
||||
code: "AE",
|
||||
dialCode: "971",
|
||||
flag: '🇦🇪',
|
||||
code: 'AE',
|
||||
dialCode: '971',
|
||||
minLength: 9,
|
||||
maxLength: 9,
|
||||
),
|
||||
Country(
|
||||
name: "Saudi Arabia",
|
||||
name: 'Saudi Arabia',
|
||||
nameTranslations: {
|
||||
"en": "Saudi Arabia",
|
||||
"ar": "السعودية",
|
||||
'en': 'Saudi Arabia',
|
||||
'ar': 'السعودية',
|
||||
},
|
||||
flag: "🇸🇦",
|
||||
code: "SA",
|
||||
dialCode: "966",
|
||||
flag: '🇸🇦',
|
||||
code: 'SA',
|
||||
dialCode: '966',
|
||||
minLength: 9,
|
||||
maxLength: 9,
|
||||
),
|
||||
],
|
||||
style: const TextStyle(color: Colors.black),
|
||||
controller: _blocRole.phoneController,
|
||||
controller: blocRole.phoneController,
|
||||
)
|
||||
],
|
||||
),
|
||||
@ -314,11 +315,11 @@ class BasicsView extends StatelessWidget {
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: TextFormField(
|
||||
controller: _blocRole.jobTitleController,
|
||||
controller: blocRole.jobTitleController,
|
||||
style:
|
||||
const TextStyle(color: ColorsManager.blackColor),
|
||||
decoration: inputTextFormDeco(
|
||||
hintText: "Job Title (Optional)")
|
||||
hintText: 'Job Title (Optional)')
|
||||
.copyWith(
|
||||
hintStyle: context.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w400,
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:syncrow_web/pages/common/bloc/project_manager.dart';
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/bloc/users_bloc.dart';
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/bloc/users_event.dart';
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/bloc/users_status.dart';
|
||||
@ -19,7 +18,7 @@ class TreeView extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final _blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
final blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
return BlocProvider(
|
||||
create: (_) => UsersBloc(),
|
||||
// ..add(const LoadCommunityAndSpacesEvent()),
|
||||
@ -34,7 +33,7 @@ class TreeView extends StatelessWidget {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
return SingleChildScrollView(
|
||||
child: _buildTree(_blocRole.updatedCommunities, _blocRole),
|
||||
child: _buildTree(blocRole.updatedCommunities, blocRole),
|
||||
);
|
||||
},
|
||||
),
|
||||
@ -48,7 +47,7 @@ class TreeView extends StatelessWidget {
|
||||
}) {
|
||||
return Column(
|
||||
children: nodes.map((node) {
|
||||
return Container(
|
||||
return ColoredBox(
|
||||
color: node.isHighlighted ? Colors.blue.shade50 : Colors.transparent,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:syncrow_web/utils/color_manager.dart';
|
||||
|
||||
class DeleteUserDialog extends StatefulWidget {
|
||||
final Function()? onTapDelete;
|
||||
DeleteUserDialog({super.key, this.onTapDelete});
|
||||
const DeleteUserDialog({super.key, this.onTapDelete});
|
||||
|
||||
@override
|
||||
_DeleteUserDialogState createState() => _DeleteUserDialogState();
|
||||
@ -35,7 +34,7 @@ class _DeleteUserDialogState extends State<DeleteUserDialog> {
|
||||
padding: EdgeInsets.all(8.0),
|
||||
child: SizedBox(
|
||||
child: Text(
|
||||
"Delete User",
|
||||
'Delete User',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.red,
|
||||
fontSize: 18,
|
||||
@ -54,7 +53,7 @@ class _DeleteUserDialogState extends State<DeleteUserDialog> {
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(left: 25, right: 25, top: 10, bottom: 10),
|
||||
child: Text(
|
||||
"Are you sure you want to delete this user?",
|
||||
'Are you sure you want to delete this user?',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
)),
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:syncrow_web/pages/common/bloc/project_manager.dart';
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/bloc/users_bloc.dart';
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/bloc/users_event.dart';
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/bloc/users_status.dart';
|
||||
@ -31,15 +30,17 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
..add(GetUserByIdEvent(uuid: widget.userId)),
|
||||
child: BlocConsumer<UsersBloc, UsersState>(listener: (context, state) {
|
||||
if (state is SpacesLoadedState) {
|
||||
BlocProvider.of<UsersBloc>(context).add(GetUserByIdEvent(uuid: widget.userId));
|
||||
BlocProvider.of<UsersBloc>(context)
|
||||
.add(GetUserByIdEvent(uuid: widget.userId));
|
||||
}
|
||||
}, builder: (context, state) {
|
||||
final _blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
final blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
|
||||
return Dialog(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(20))),
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(20))),
|
||||
width: 900,
|
||||
child: Column(
|
||||
children: [
|
||||
@ -48,7 +49,7 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
padding: EdgeInsets.all(8.0),
|
||||
child: SizedBox(
|
||||
child: Text(
|
||||
"Edit User",
|
||||
'Edit User',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w700,
|
||||
@ -66,9 +67,10 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildStep1Indicator(1, "Basics", _blocRole),
|
||||
_buildStep2Indicator(2, "Spaces", _blocRole),
|
||||
_buildStep3Indicator(3, "Role & Permissions", _blocRole),
|
||||
_buildStep1Indicator(1, 'Basics', blocRole),
|
||||
_buildStep2Indicator(2, 'Spaces', blocRole),
|
||||
_buildStep3Indicator(
|
||||
3, 'Role & Permissions', blocRole),
|
||||
],
|
||||
),
|
||||
),
|
||||
@ -106,7 +108,7 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: const Text("Cancel"),
|
||||
child: const Text('Cancel'),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
@ -116,22 +118,24 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
if (currentStep < 3) {
|
||||
currentStep++;
|
||||
if (currentStep == 2) {
|
||||
_blocRole.add(CheckStepStatus(isEditUser: true));
|
||||
blocRole.add(
|
||||
const CheckStepStatus(isEditUser: true));
|
||||
} else if (currentStep == 3) {
|
||||
_blocRole.add(const CheckSpacesStepStatus());
|
||||
blocRole.add(const CheckSpacesStepStatus());
|
||||
}
|
||||
} else {
|
||||
_blocRole
|
||||
.add(EditInviteUsers(context: context, userId: widget.userId!));
|
||||
blocRole.add(EditInviteUsers(
|
||||
context: context, userId: widget.userId!));
|
||||
}
|
||||
});
|
||||
},
|
||||
child: Text(
|
||||
currentStep < 3 ? "Next" : "Save",
|
||||
currentStep < 3 ? 'Next' : 'Save',
|
||||
style: TextStyle(
|
||||
color: (_blocRole.isCompleteSpaces == false ||
|
||||
_blocRole.isCompleteBasics == false ||
|
||||
_blocRole.isCompleteRolePermissions == false) &&
|
||||
color: (blocRole.isCompleteSpaces == false ||
|
||||
blocRole.isCompleteBasics == false ||
|
||||
blocRole.isCompleteRolePermissions ==
|
||||
false) &&
|
||||
currentStep == 3
|
||||
? ColorsManager.grayColor
|
||||
: ColorsManager.secondaryColor),
|
||||
@ -172,7 +176,7 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
bloc.add(const CheckSpacesStepStatus());
|
||||
currentStep = step;
|
||||
Future.delayed(const Duration(milliseconds: 500), () {
|
||||
bloc.add(ValidateBasicsStep());
|
||||
bloc.add(const ValidateBasicsStep());
|
||||
});
|
||||
});
|
||||
|
||||
@ -204,8 +208,12 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
label,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: currentStep == step ? ColorsManager.blackColor : ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step ? FontWeight.bold : FontWeight.normal,
|
||||
color: currentStep == step
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step
|
||||
? FontWeight.bold
|
||||
: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -233,7 +241,7 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
onTap: () {
|
||||
setState(() {
|
||||
currentStep = step;
|
||||
bloc.add(CheckStepStatus(isEditUser: true));
|
||||
bloc.add(const CheckStepStatus(isEditUser: true));
|
||||
if (step3 == 3) {
|
||||
bloc.add(const CheckRoleStepStatus());
|
||||
}
|
||||
@ -263,8 +271,12 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
label,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: currentStep == step ? ColorsManager.blackColor : ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step ? FontWeight.bold : FontWeight.normal,
|
||||
color: currentStep == step
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step
|
||||
? FontWeight.bold
|
||||
: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -294,7 +306,7 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
currentStep = step;
|
||||
step3 = step;
|
||||
bloc.add(const CheckSpacesStepStatus());
|
||||
bloc.add(CheckStepStatus(isEditUser: true));
|
||||
bloc.add(const CheckStepStatus(isEditUser: true));
|
||||
});
|
||||
},
|
||||
child: Column(
|
||||
@ -321,8 +333,12 @@ class _EditUserDialogState extends State<EditUserDialog> {
|
||||
label,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: currentStep == step ? ColorsManager.blackColor : ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step ? FontWeight.bold : FontWeight.normal,
|
||||
color: currentStep == step
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.greyColor,
|
||||
fontWeight: currentStep == step
|
||||
? FontWeight.bold
|
||||
: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@ -7,7 +7,7 @@ import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||
|
||||
class PermissionManagement extends StatefulWidget {
|
||||
final UsersBloc? bloc;
|
||||
const PermissionManagement({Key? key, this.bloc}) : super(key: key);
|
||||
const PermissionManagement({super.key, this.bloc});
|
||||
|
||||
@override
|
||||
_PermissionManagementState createState() => _PermissionManagementState();
|
||||
@ -16,25 +16,25 @@ class PermissionManagement extends StatefulWidget {
|
||||
class _PermissionManagementState extends State<PermissionManagement> {
|
||||
void toggleOptionById(String id) {
|
||||
setState(() {
|
||||
for (var mainOption in widget.bloc!.permissions) {
|
||||
for (final mainOption in widget.bloc!.permissions) {
|
||||
if (mainOption.id == id) {
|
||||
final isChecked =
|
||||
checkifOneOfthemChecked(mainOption) == CheckState.all;
|
||||
mainOption.isChecked = !isChecked;
|
||||
|
||||
for (var subOption in mainOption.subOptions) {
|
||||
for (final subOption in mainOption.subOptions) {
|
||||
subOption.isChecked = !isChecked;
|
||||
for (var child in subOption.subOptions) {
|
||||
for (final child in subOption.subOptions) {
|
||||
child.isChecked = !isChecked;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
for (var subOption in mainOption.subOptions) {
|
||||
for (final subOption in mainOption.subOptions) {
|
||||
if (subOption.id == id) {
|
||||
subOption.isChecked = !subOption.isChecked;
|
||||
for (var child in subOption.subOptions) {
|
||||
for (final child in subOption.subOptions) {
|
||||
child.isChecked = subOption.isChecked;
|
||||
}
|
||||
mainOption.isChecked =
|
||||
@ -42,7 +42,7 @@ class _PermissionManagementState extends State<PermissionManagement> {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var child in subOption.subOptions) {
|
||||
for (final child in subOption.subOptions) {
|
||||
if (child.id == id) {
|
||||
child.isChecked = !child.isChecked;
|
||||
subOption.isChecked =
|
||||
@ -58,17 +58,17 @@ class _PermissionManagementState extends State<PermissionManagement> {
|
||||
}
|
||||
|
||||
CheckState checkifOneOfthemChecked(PermissionOption mainOption) {
|
||||
bool allSelected = true;
|
||||
bool someSelected = false;
|
||||
var allSelected = true;
|
||||
var someSelected = false;
|
||||
|
||||
for (var subOption in mainOption.subOptions) {
|
||||
for (final subOption in mainOption.subOptions) {
|
||||
if (subOption.isChecked) {
|
||||
someSelected = true;
|
||||
} else {
|
||||
allSelected = false;
|
||||
}
|
||||
|
||||
for (var child in subOption.subOptions) {
|
||||
for (final child in subOption.subOptions) {
|
||||
if (child.isChecked) {
|
||||
someSelected = true;
|
||||
} else {
|
||||
@ -143,7 +143,7 @@ class _PermissionManagementState extends State<PermissionManagement> {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
ColoredBox(
|
||||
color: option.isHighlighted
|
||||
? Colors.blue.shade50
|
||||
: Colors.white,
|
||||
@ -208,7 +208,7 @@ class _PermissionManagementState extends State<PermissionManagement> {
|
||||
itemCount: subOption.subOptions.length,
|
||||
itemBuilder: (context, index) {
|
||||
final child = subOption.subOptions[index];
|
||||
return Container(
|
||||
return ColoredBox(
|
||||
color: option.isHighlighted
|
||||
? Colors.blue.shade50
|
||||
: Colors.white,
|
||||
@ -260,7 +260,7 @@ class _PermissionManagementState extends State<PermissionManagement> {
|
||||
)
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
}),
|
||||
],
|
||||
);
|
||||
},
|
||||
@ -268,28 +268,27 @@ class _PermissionManagementState extends State<PermissionManagement> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Container(
|
||||
// height: 50,
|
||||
// width: 120,
|
||||
// child: CheckboxListTile(
|
||||
// activeColor: ColorsManager.dialogBlueTitle,
|
||||
// selectedTileColor: child.isHighlighted
|
||||
// ? Colors.blue.shade50
|
||||
// : Colors.white,
|
||||
// dense: true,
|
||||
// controlAffinity:
|
||||
// ListTileControlAffinity.leading,
|
||||
// title: Text(
|
||||
// child.title,
|
||||
// style: context.textTheme.bodyMedium?.copyWith(
|
||||
// fontWeight: FontWeight.w400,
|
||||
// fontSize: 12,
|
||||
// color: ColorsManager.lightGreyColor),
|
||||
// ),
|
||||
// value: child.isChecked,
|
||||
// onChanged: (value) =>
|
||||
// toggleOptionById(child.id),
|
||||
// enabled: false,
|
||||
// ),
|
||||
// ),
|
||||
// Container(
|
||||
// height: 50,
|
||||
// width: 120,
|
||||
// child: CheckboxListTile(
|
||||
// activeColor: ColorsManager.dialogBlueTitle,
|
||||
// selectedTileColor: child.isHighlighted
|
||||
// ? Colors.blue.shade50
|
||||
// : Colors.white,
|
||||
// dense: true,
|
||||
// controlAffinity:
|
||||
// ListTileControlAffinity.leading,
|
||||
// title: Text(
|
||||
// child.title,
|
||||
// style: context.textTheme.bodyMedium?.copyWith(
|
||||
// fontWeight: FontWeight.w400,
|
||||
// fontSize: 12,
|
||||
// color: ColorsManager.lightGreyColor),
|
||||
// ),
|
||||
// value: child.isChecked,
|
||||
// onChanged: (value) =>
|
||||
// toggleOptionById(child.id),
|
||||
// enabled: false,
|
||||
// ),
|
||||
// ),
|
||||
|
||||
@ -47,9 +47,9 @@ Future<void> showPopUpFilterMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort A to Z",
|
||||
'Sort A to Z',
|
||||
style: TextStyle(
|
||||
color: isSelected == "Asc"
|
||||
color: isSelected == 'Asc'
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.grayColor),
|
||||
),
|
||||
@ -72,16 +72,16 @@ Future<void> showPopUpFilterMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort Z to A",
|
||||
'Sort Z to A',
|
||||
style: TextStyle(
|
||||
color: isSelected == "Desc"
|
||||
color: isSelected == 'Desc'
|
||||
? ColorsManager.blackColor
|
||||
: ColorsManager.grayColor),
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
const Text(
|
||||
"Filter by ",
|
||||
'Filter by ',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
Container(
|
||||
@ -113,7 +113,8 @@ Future<void> showPopUpFilterMenu({
|
||||
),
|
||||
Text(
|
||||
item,
|
||||
style: TextStyle(color: ColorsManager.grayColor),
|
||||
style: const TextStyle(
|
||||
color: ColorsManager.grayColor),
|
||||
),
|
||||
],
|
||||
);
|
||||
@ -136,12 +137,12 @@ Future<void> showPopUpFilterMenu({
|
||||
onTap: () {
|
||||
Navigator.of(context).pop(); // Close the menu
|
||||
},
|
||||
child: const Text("Cancel"),
|
||||
child: const Text('Cancel'),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: onOkPressed,
|
||||
child: const Text(
|
||||
"OK",
|
||||
'OK',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.spaceColor,
|
||||
),
|
||||
|
||||
@ -31,7 +31,7 @@ class _RoleDropdownState extends State<RoleDropdown> {
|
||||
const Row(
|
||||
children: [
|
||||
Text(
|
||||
" * ",
|
||||
' * ',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.red,
|
||||
fontWeight: FontWeight.w900,
|
||||
@ -39,7 +39,7 @@ class _RoleDropdownState extends State<RoleDropdown> {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
"Role",
|
||||
'Role',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16,
|
||||
@ -77,7 +77,7 @@ class _RoleDropdownState extends State<RoleDropdown> {
|
||||
hint: const Padding(
|
||||
padding: EdgeInsets.only(left: 10),
|
||||
child: Text(
|
||||
"Please Select",
|
||||
'Please Select',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.textGray,
|
||||
),
|
||||
|
||||
@ -16,11 +16,11 @@ class RolesAndPermission extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocBuilder<UsersBloc, UsersState>(builder: (context, state) {
|
||||
final _blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
return Container(
|
||||
final blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
return ColoredBox(
|
||||
color: Colors.white,
|
||||
child: Form(
|
||||
key: _blocRole.formKey,
|
||||
key: blocRole.formKey,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
@ -39,7 +39,7 @@ class RolesAndPermission extends StatelessWidget {
|
||||
width: 350,
|
||||
height: 100,
|
||||
child: RoleDropdown(
|
||||
bloc: _blocRole,
|
||||
bloc: blocRole,
|
||||
)),
|
||||
const SizedBox(height: 10),
|
||||
Expanded(
|
||||
@ -69,11 +69,10 @@ class RolesAndPermission extends StatelessWidget {
|
||||
child: TextFormField(
|
||||
style:
|
||||
const TextStyle(color: Colors.black),
|
||||
controller:
|
||||
_blocRole.roleSearchController,
|
||||
controller: blocRole.roleSearchController,
|
||||
onChanged: (value) {
|
||||
_blocRole.add(SearchPermission(
|
||||
nodes: _blocRole.permissions,
|
||||
blocRole.add(SearchPermission(
|
||||
nodes: blocRole.permissions,
|
||||
searchTerm: value));
|
||||
},
|
||||
decoration: textBoxDecoration(radios: 20)!
|
||||
@ -107,10 +106,10 @@ class RolesAndPermission extends StatelessWidget {
|
||||
child: Container(
|
||||
color: ColorsManager.circleRolesBackground,
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Container(
|
||||
child: ColoredBox(
|
||||
color: ColorsManager.whiteColors,
|
||||
child: PermissionManagement(
|
||||
bloc: _blocRole,
|
||||
bloc: blocRole,
|
||||
))))
|
||||
],
|
||||
),
|
||||
|
||||
@ -11,19 +11,21 @@ class SpacesAccessView extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocBuilder<UsersBloc, UsersState>(builder: (context, state) {
|
||||
final _blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
return Container(
|
||||
final blocRole = BlocProvider.of<UsersBloc>(context);
|
||||
return ColoredBox(
|
||||
color: Colors.white,
|
||||
child: Form(
|
||||
key: _blocRole.formKey,
|
||||
key: blocRole.formKey,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Spaces access',
|
||||
style: context.textTheme.bodyLarge
|
||||
?.copyWith(fontWeight: FontWeight.w700, fontSize: 20, color: Colors.black),
|
||||
style: context.textTheme.bodyLarge?.copyWith(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 20,
|
||||
color: Colors.black),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 35,
|
||||
|
||||
@ -6,8 +6,6 @@ import 'package:syncrow_web/pages/roles_and_permission/model/roles_user_model.da
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/users_table/bloc/user_table_event.dart';
|
||||
import 'package:syncrow_web/pages/roles_and_permission/users_page/users_table/bloc/user_table_state.dart';
|
||||
import 'package:syncrow_web/services/user_permission.dart';
|
||||
import 'package:syncrow_web/utils/constants/strings_manager.dart';
|
||||
import 'package:syncrow_web/utils/helpers/shared_preferences_helper.dart';
|
||||
|
||||
class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
UserTableBloc() : super(TableInitial()) {
|
||||
@ -60,20 +58,20 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
final dateB = _parseDateTime(b.createdDate);
|
||||
return dateB.compareTo(dateA);
|
||||
});
|
||||
for (var user in users) {
|
||||
for (final user in users) {
|
||||
roleTypes.add(user.roleType.toString());
|
||||
}
|
||||
for (var user in users) {
|
||||
for (final user in users) {
|
||||
jobTitle.add(user.jobTitle.toString());
|
||||
}
|
||||
for (var user in users) {
|
||||
createdBy.add(user.invitedBy.toString());
|
||||
for (final user in users) {
|
||||
createdBy.add(user.invitedBy);
|
||||
}
|
||||
initialUsers = List.from(users);
|
||||
roleTypes = roleTypes.toSet().toList();
|
||||
jobTitle = jobTitle.toSet().toList();
|
||||
createdBy = createdBy.toSet().toList();
|
||||
_handlePageChange(ChangePage(1), emit);
|
||||
_handlePageChange(const ChangePage(1), emit);
|
||||
totalUsersCount = initialUsers;
|
||||
add(ChangePage(currentPage));
|
||||
emit(UsersLoadedState(users: users));
|
||||
@ -86,7 +84,7 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
DeleteUserEvent event, Emitter<UserTableState> emit) async {
|
||||
emit(UsersLoadingState());
|
||||
try {
|
||||
bool res = await UserPermissionApi().deleteUserById(event.userId);
|
||||
final res = await UserPermissionApi().deleteUserById(event.userId);
|
||||
if (res == true) {
|
||||
Navigator.of(event.context).pop(true);
|
||||
} else {
|
||||
@ -104,8 +102,8 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
emit(UsersLoadingState());
|
||||
bool res = await UserPermissionApi().changeUserStatusById(event.userId,
|
||||
event.newStatus == "disabled" ? false : true, projectUuid);
|
||||
final res = await UserPermissionApi().changeUserStatusById(event.userId,
|
||||
event.newStatus == 'disabled' ? false : true, projectUuid);
|
||||
if (res == true) {
|
||||
add(const GetUsers());
|
||||
}
|
||||
@ -121,13 +119,13 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
selectedJobTitles.clear();
|
||||
selectedCreatedBy.clear();
|
||||
selectedStatuses.clear();
|
||||
if (currentSortOrder == "Asc") {
|
||||
if (currentSortOrder == 'Asc') {
|
||||
emit(UsersLoadingState());
|
||||
currentSortOrder = "";
|
||||
currentSortOrder = '';
|
||||
users = List.from(users);
|
||||
} else {
|
||||
emit(UsersLoadingState());
|
||||
currentSortOrder = "Asc";
|
||||
currentSortOrder = 'Asc';
|
||||
users.sort((a, b) => a.firstName
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
@ -146,13 +144,13 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
selectedJobTitles.clear();
|
||||
selectedCreatedBy.clear();
|
||||
selectedStatuses.clear();
|
||||
if (currentSortOrder == "Desc") {
|
||||
if (currentSortOrder == 'Desc') {
|
||||
emit(UsersLoadingState());
|
||||
currentSortOrder = "";
|
||||
currentSortOrder = '';
|
||||
users = List.from(initialUsers);
|
||||
} else {
|
||||
emit(UsersLoadingState());
|
||||
currentSortOrder = "Desc";
|
||||
currentSortOrder = 'Desc';
|
||||
users.sort((a, b) => b.firstName!.compareTo(a.firstName!));
|
||||
}
|
||||
currentSortJopTitle = '';
|
||||
@ -168,15 +166,15 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
selectedJobTitles.clear();
|
||||
selectedCreatedBy.clear();
|
||||
selectedStatuses.clear();
|
||||
if (currentSortOrderDate == "NewestToOldest") {
|
||||
if (currentSortOrderDate == 'NewestToOldest') {
|
||||
emit(UsersLoadingState());
|
||||
currentSortOrder = "";
|
||||
currentSortOrderDate = "";
|
||||
currentSortOrder = '';
|
||||
currentSortOrderDate = '';
|
||||
users = List.from(initialUsers);
|
||||
emit(UsersLoadedState(users: users));
|
||||
} else {
|
||||
emit(UsersLoadingState());
|
||||
currentSortOrder = "NewestToOldest";
|
||||
currentSortOrder = 'NewestToOldest';
|
||||
users.sort((a, b) {
|
||||
final dateA = _parseDateTime(a.createdDate);
|
||||
final dateB = _parseDateTime(b.createdDate);
|
||||
@ -192,10 +190,10 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
selectedJobTitles.clear();
|
||||
selectedCreatedBy.clear();
|
||||
selectedStatuses.clear();
|
||||
if (currentSortOrderDate == "OldestToNewest") {
|
||||
if (currentSortOrderDate == 'OldestToNewest') {
|
||||
emit(UsersLoadingState());
|
||||
currentSortOrder = "";
|
||||
currentSortOrderDate = "";
|
||||
currentSortOrder = '';
|
||||
currentSortOrderDate = '';
|
||||
users = List.from(initialUsers);
|
||||
emit(UsersLoadedState(users: users));
|
||||
} else {
|
||||
@ -205,7 +203,7 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
final dateB = _parseDateTime(b.createdDate);
|
||||
return dateA.compareTo(dateB);
|
||||
});
|
||||
currentSortOrder = "OldestToNewest";
|
||||
currentSortOrder = 'OldestToNewest';
|
||||
emit(UsersLoadedState(users: users));
|
||||
}
|
||||
}
|
||||
@ -228,7 +226,7 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
emit(TableSearch());
|
||||
final query = event.query.toLowerCase();
|
||||
final filteredUsers = initialUsers.where((user) {
|
||||
final fullName = "${user.firstName} ${user.lastName}".toLowerCase();
|
||||
final fullName = '${user.firstName} ${user.lastName}'.toLowerCase();
|
||||
final email = user.email.toLowerCase();
|
||||
return fullName.contains(query) || email.contains(query);
|
||||
}).toList();
|
||||
@ -283,22 +281,22 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
return selectedRoles.contains(user.roleType);
|
||||
}).toList();
|
||||
|
||||
if (event.sortOrder == "Asc") {
|
||||
currentSortOrder = "Asc";
|
||||
if (event.sortOrder == 'Asc') {
|
||||
currentSortOrder = 'Asc';
|
||||
filteredUsers.sort((a, b) => a.firstName
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
.compareTo(b.firstName.toString().toLowerCase()));
|
||||
} else if (event.sortOrder == "Desc") {
|
||||
currentSortOrder = "Desc";
|
||||
} else if (event.sortOrder == 'Desc') {
|
||||
currentSortOrder = 'Desc';
|
||||
filteredUsers.sort((a, b) => b.firstName!.compareTo(a.firstName!));
|
||||
} else {}
|
||||
currentSortOrder = "";
|
||||
currentSortOrder = '';
|
||||
currentSortCreatedDate = '';
|
||||
currentSortStatus = '';
|
||||
currentSortCreatedBy = '';
|
||||
currentSortJopTitle = '';
|
||||
currentSortOrderDate = "";
|
||||
currentSortOrderDate = '';
|
||||
|
||||
totalUsersCount = filteredUsers;
|
||||
|
||||
@ -313,22 +311,22 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
if (selectedJobTitles.isEmpty) return true;
|
||||
return selectedJobTitles.contains(user.jobTitle);
|
||||
}).toList();
|
||||
if (event.sortOrder == "Asc") {
|
||||
currentSortOrder = "Asc";
|
||||
if (event.sortOrder == 'Asc') {
|
||||
currentSortOrder = 'Asc';
|
||||
filteredUsers.sort((a, b) => a.firstName
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
.compareTo(b.firstName.toString().toLowerCase()));
|
||||
} else if (event.sortOrder == "Desc") {
|
||||
currentSortOrder = "Desc";
|
||||
} else if (event.sortOrder == 'Desc') {
|
||||
currentSortOrder = 'Desc';
|
||||
filteredUsers.sort((a, b) => b.firstName!.compareTo(a.firstName!));
|
||||
} else {}
|
||||
currentSortOrder = "";
|
||||
currentSortOrder = '';
|
||||
currentSortCreatedDate = '';
|
||||
currentSortStatus = '';
|
||||
currentSortCreatedBy = '';
|
||||
currentSortRole = '';
|
||||
currentSortOrderDate = "";
|
||||
currentSortOrderDate = '';
|
||||
|
||||
totalUsersCount = filteredUsers;
|
||||
|
||||
@ -344,21 +342,21 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
return selectedCreatedBy.contains(user.invitedBy);
|
||||
}).toList();
|
||||
|
||||
if (event.sortOrder == "Asc") {
|
||||
currentSortOrder = "Asc";
|
||||
if (event.sortOrder == 'Asc') {
|
||||
currentSortOrder = 'Asc';
|
||||
filteredUsers.sort((a, b) => a.firstName
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
.compareTo(b.firstName.toString().toLowerCase()));
|
||||
} else if (event.sortOrder == "Desc") {
|
||||
currentSortOrder = "Desc";
|
||||
} else if (event.sortOrder == 'Desc') {
|
||||
currentSortOrder = 'Desc';
|
||||
filteredUsers.sort((a, b) => b.firstName!.compareTo(a.firstName!));
|
||||
} else {}
|
||||
currentSortOrder = '';
|
||||
currentSortRole = '';
|
||||
currentSortCreatedDate = '';
|
||||
currentSortStatus = '';
|
||||
currentSortOrderDate = "";
|
||||
currentSortOrderDate = '';
|
||||
|
||||
totalUsersCount = filteredUsers;
|
||||
|
||||
@ -386,14 +384,14 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
}
|
||||
});
|
||||
}).toList();
|
||||
if (event.sortOrder == "Asc") {
|
||||
currentSortOrder = "Asc";
|
||||
if (event.sortOrder == 'Asc') {
|
||||
currentSortOrder = 'Asc';
|
||||
filteredUsers.sort((a, b) => a.firstName
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
.compareTo(b.firstName.toString().toLowerCase()));
|
||||
} else if (event.sortOrder == "Desc") {
|
||||
currentSortOrder = "Desc";
|
||||
} else if (event.sortOrder == 'Desc') {
|
||||
currentSortOrder = 'Desc';
|
||||
filteredUsers.sort((a, b) => b.firstName!.compareTo(a.firstName!));
|
||||
totalUsersCount = filteredUsers;
|
||||
} else {}
|
||||
@ -401,7 +399,7 @@ class UserTableBloc extends Bloc<UserTableEvent, UserTableState> {
|
||||
currentSortRole = '';
|
||||
currentSortCreatedDate = '';
|
||||
currentSortCreatedBy = '';
|
||||
currentSortOrderDate = "";
|
||||
currentSortOrderDate = '';
|
||||
|
||||
emit(UsersLoadedState(users: filteredUsers));
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ class DateOldestToNewestEvent extends UserTableEvent {
|
||||
|
||||
class SearchUsers extends UserTableEvent {
|
||||
final String query;
|
||||
SearchUsers(this.query);
|
||||
const SearchUsers(this.query);
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
@ -72,7 +72,7 @@ class SearchUsers extends UserTableEvent {
|
||||
class ChangePage extends UserTableEvent {
|
||||
final int pageNumber;
|
||||
|
||||
ChangePage(this.pageNumber);
|
||||
const ChangePage(this.pageNumber);
|
||||
|
||||
@override
|
||||
List<Object> get props => [pageNumber];
|
||||
@ -93,6 +93,7 @@ class FilterUsersByRoleEvent extends UserTableEvent {
|
||||
final String? sortOrder;
|
||||
|
||||
const FilterUsersByRoleEvent({this.selectedRoles, this.sortOrder});
|
||||
@override
|
||||
List<Object?> get props => [selectedRoles, sortOrder];
|
||||
}
|
||||
|
||||
@ -101,6 +102,7 @@ class FilterUsersByJobEvent extends UserTableEvent {
|
||||
final String? sortOrder;
|
||||
|
||||
const FilterUsersByJobEvent({this.selectedJob, this.sortOrder});
|
||||
@override
|
||||
List<Object?> get props => [selectedJob, sortOrder];
|
||||
}
|
||||
|
||||
@ -110,6 +112,7 @@ class FilterUsersByCreatedEvent extends UserTableEvent {
|
||||
final String? sortOrder;
|
||||
|
||||
const FilterUsersByCreatedEvent({this.selectedCreatedBy, this.sortOrder});
|
||||
@override
|
||||
List<Object?> get props => [selectedCreatedBy, sortOrder];
|
||||
}
|
||||
|
||||
@ -118,6 +121,7 @@ class FilterUsersByDeActevateEvent extends UserTableEvent {
|
||||
final String? sortOrder;
|
||||
|
||||
const FilterUsersByDeActevateEvent({this.selectedActivate, this.sortOrder});
|
||||
@override
|
||||
List<Object?> get props => [selectedActivate, sortOrder];
|
||||
}
|
||||
|
||||
@ -125,14 +129,14 @@ class FilterOptionsEvent extends UserTableEvent {
|
||||
final String query;
|
||||
final List<String> fullOptions;
|
||||
|
||||
FilterOptionsEvent({required this.query, required this.fullOptions});
|
||||
const FilterOptionsEvent({required this.query, required this.fullOptions});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [query, fullOptions];
|
||||
}
|
||||
|
||||
class FilterClearEvent extends UserTableEvent {
|
||||
FilterClearEvent();
|
||||
const FilterClearEvent();
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
@ -9,10 +9,12 @@ final class TableInitial extends UserTableState {
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
final class TableSearch extends UserTableState {
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
final class RolesLoadingState extends UserTableState {
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
|
||||
@ -8,9 +8,8 @@ Future<void> showDateFilterMenu({
|
||||
Function()? zToaTap,
|
||||
String? isSelected,
|
||||
}) async {
|
||||
final RenderBox overlay =
|
||||
Overlay.of(context).context.findRenderObject() as RenderBox;
|
||||
final RelativeRect position = RelativeRect.fromRect(
|
||||
final overlay = Overlay.of(context).context.findRenderObject()! as RenderBox;
|
||||
final position = RelativeRect.fromRect(
|
||||
Rect.fromLTRB(
|
||||
overlay.size.width / 3,
|
||||
240,
|
||||
@ -39,9 +38,9 @@ Future<void> showDateFilterMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort from newest to oldest",
|
||||
'Sort from newest to oldest',
|
||||
style: TextStyle(
|
||||
color: isSelected == "NewestToOldest"
|
||||
color: isSelected == 'NewestToOldest'
|
||||
? Colors.black
|
||||
: Colors.blueGrey),
|
||||
),
|
||||
@ -55,9 +54,9 @@ Future<void> showDateFilterMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort from oldest to newest",
|
||||
'Sort from oldest to newest',
|
||||
style: TextStyle(
|
||||
color: isSelected == "OldestToNewest"
|
||||
color: isSelected == 'OldestToNewest'
|
||||
? Colors.black
|
||||
: Colors.blueGrey),
|
||||
),
|
||||
|
||||
@ -8,9 +8,8 @@ Future<void> showDeActivateFilterMenu({
|
||||
Function()? zToaTap,
|
||||
String? isSelected,
|
||||
}) async {
|
||||
final RenderBox overlay =
|
||||
Overlay.of(context).context.findRenderObject() as RenderBox;
|
||||
final RelativeRect position = RelativeRect.fromRect(
|
||||
final overlay = Overlay.of(context).context.findRenderObject()! as RenderBox;
|
||||
final position = RelativeRect.fromRect(
|
||||
Rect.fromLTRB(
|
||||
overlay.size.width / 2,
|
||||
240,
|
||||
@ -39,9 +38,9 @@ Future<void> showDeActivateFilterMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort A to Z",
|
||||
'Sort A to Z',
|
||||
style: TextStyle(
|
||||
color: isSelected == "NewestToOldest"
|
||||
color: isSelected == 'NewestToOldest'
|
||||
? Colors.black
|
||||
: Colors.blueGrey),
|
||||
),
|
||||
@ -55,9 +54,9 @@ Future<void> showDeActivateFilterMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort Z to A",
|
||||
'Sort Z to A',
|
||||
style: TextStyle(
|
||||
color: isSelected == "OldestToNewest"
|
||||
color: isSelected == 'OldestToNewest'
|
||||
? Colors.black
|
||||
: Colors.blueGrey),
|
||||
),
|
||||
|
||||
@ -8,9 +8,8 @@ Future<void> showNameMenu({
|
||||
Function()? zToATap,
|
||||
String? isSelected,
|
||||
}) async {
|
||||
final RenderBox overlay =
|
||||
Overlay.of(context).context.findRenderObject() as RenderBox;
|
||||
final RelativeRect position = RelativeRect.fromRect(
|
||||
final overlay = Overlay.of(context).context.findRenderObject()! as RenderBox;
|
||||
final position = RelativeRect.fromRect(
|
||||
Rect.fromLTRB(
|
||||
overlay.size.width / 35,
|
||||
240,
|
||||
@ -39,9 +38,9 @@ Future<void> showNameMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort A to Z",
|
||||
'Sort A to Z',
|
||||
style: TextStyle(
|
||||
color: isSelected == "Asc" ? Colors.black : Colors.blueGrey),
|
||||
color: isSelected == 'Asc' ? Colors.black : Colors.blueGrey),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -53,9 +52,9 @@ Future<void> showNameMenu({
|
||||
width: 25,
|
||||
),
|
||||
title: Text(
|
||||
"Sort Z to A",
|
||||
'Sort Z to A',
|
||||
style: TextStyle(
|
||||
color: isSelected == "Desc" ? Colors.black : Colors.blueGrey),
|
||||
color: isSelected == 'Desc' ? Colors.black : Colors.blueGrey),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@ -17,8 +17,7 @@ class _HeaderColumn extends StatelessWidget {
|
||||
required this.showFilter,
|
||||
required this.onResize,
|
||||
this.onFilter,
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -71,8 +70,7 @@ class _TableRow extends StatelessWidget {
|
||||
required this.cells,
|
||||
required this.columnWidths,
|
||||
required this.isLast,
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -116,9 +114,9 @@ class DynamicTableScreen extends StatefulWidget {
|
||||
required this.titles,
|
||||
required this.rows,
|
||||
required this.onFilter,
|
||||
Key? key,
|
||||
super.key,
|
||||
required this.tableSize,
|
||||
}) : super(key: key);
|
||||
});
|
||||
|
||||
@override
|
||||
_DynamicTableScreenState createState() => _DynamicTableScreenState();
|
||||
@ -139,12 +137,12 @@ class _DynamicTableScreenState extends State<DynamicTableScreen> {
|
||||
|
||||
void _handleColumnResize(int index, double delta) {
|
||||
setState(() {
|
||||
double newWidth = columnWidths[index] + delta;
|
||||
var newWidth = columnWidths[index] + delta;
|
||||
newWidth = newWidth.clamp(_minColumnWidth, _maxColumnWidth);
|
||||
double actualDelta = newWidth - columnWidths[index];
|
||||
final actualDelta = newWidth - columnWidths[index];
|
||||
if (actualDelta == 0) return;
|
||||
|
||||
int nextIndex = (index + 1) % columnWidths.length;
|
||||
final nextIndex = (index + 1) % columnWidths.length;
|
||||
columnWidths[index] = newWidth;
|
||||
columnWidths[nextIndex] = (columnWidths[nextIndex] - actualDelta)
|
||||
.clamp(_minColumnWidth, _maxColumnWidth);
|
||||
@ -256,7 +254,7 @@ class _DynamicTableScreenState extends State<DynamicTableScreen> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildHeader(),
|
||||
Container(height: widget.tableSize - 37, child: _buildBody()),
|
||||
SizedBox(height: widget.tableSize - 37, child: _buildBody()),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@ -21,11 +21,11 @@ import 'package:syncrow_web/utils/extension/build_context_x.dart';
|
||||
import 'package:syncrow_web/utils/style.dart';
|
||||
|
||||
class UsersPage extends StatelessWidget {
|
||||
UsersPage({super.key});
|
||||
const UsersPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final TextEditingController searchController = TextEditingController();
|
||||
final searchController = TextEditingController();
|
||||
|
||||
Widget actionButton(
|
||||
{bool isActive = false, required String title, Function()? onTap}) {
|
||||
@ -36,9 +36,9 @@ class UsersPage extends StatelessWidget {
|
||||
child: Text(
|
||||
title,
|
||||
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||
color: isActive == false && title != "Delete"
|
||||
color: isActive == false && title != 'Delete'
|
||||
? Colors.grey
|
||||
: title == "Delete"
|
||||
: title == 'Delete'
|
||||
? ColorsManager.red
|
||||
: ColorsManager.spaceColor,
|
||||
fontWeight: FontWeight.w400,
|
||||
@ -54,11 +54,11 @@ class UsersPage extends StatelessWidget {
|
||||
padding: const EdgeInsets.only(left: 5, right: 5, bottom: 5, top: 5),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(20)),
|
||||
color: status == "invited"
|
||||
? ColorsManager.invitedOrange.withOpacity(0.5)
|
||||
: status == "active"
|
||||
? ColorsManager.activeGreen.withOpacity(0.5)
|
||||
: ColorsManager.disabledPink.withOpacity(0.5),
|
||||
color: status == 'invited'
|
||||
? ColorsManager.invitedOrange.withValues(alpha: 0.5)
|
||||
: status == 'active'
|
||||
? ColorsManager.activeGreen.withValues(alpha: 0.5)
|
||||
: ColorsManager.disabledPink.withValues(alpha: 0.5),
|
||||
),
|
||||
child: Padding(
|
||||
padding:
|
||||
@ -70,9 +70,9 @@ class UsersPage extends StatelessWidget {
|
||||
Text(
|
||||
status,
|
||||
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||
color: status == "invited"
|
||||
color: status == 'invited'
|
||||
? ColorsManager.invitedOrangeText
|
||||
: status == "active"
|
||||
: status == 'active'
|
||||
? ColorsManager.activeGreenText
|
||||
: ColorsManager.disabledRedText,
|
||||
fontWeight: FontWeight.w400,
|
||||
@ -96,9 +96,9 @@ class UsersPage extends StatelessWidget {
|
||||
padding:
|
||||
const EdgeInsets.only(left: 5, right: 5, bottom: 5, top: 5),
|
||||
child: SvgPicture.asset(
|
||||
status == "invited"
|
||||
status == 'invited'
|
||||
? Assets.invitedIcon
|
||||
: status == "active"
|
||||
: status == 'active'
|
||||
? Assets.activeUser
|
||||
: Assets.deActiveUser,
|
||||
height: 35,
|
||||
@ -111,7 +111,7 @@ class UsersPage extends StatelessWidget {
|
||||
return BlocBuilder<UserTableBloc, UserTableState>(
|
||||
builder: (context, state) {
|
||||
final screenSize = MediaQuery.of(context).size;
|
||||
final _blocRole = BlocProvider.of<UserTableBloc>(context);
|
||||
final blocRole = BlocProvider.of<UserTableBloc>(context);
|
||||
if (state is UsersLoadingState) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (state is UsersLoadedState) {
|
||||
@ -134,10 +134,10 @@ class UsersPage extends StatelessWidget {
|
||||
controller: searchController,
|
||||
onChanged: (value) {
|
||||
final bloc = context.read<UserTableBloc>();
|
||||
bloc.add(FilterClearEvent());
|
||||
bloc.add(const FilterClearEvent());
|
||||
bloc.add(SearchUsers(value));
|
||||
if (value == '') {
|
||||
bloc.add(ChangePage(1));
|
||||
bloc.add(const ChangePage(1));
|
||||
}
|
||||
},
|
||||
style: const TextStyle(color: Colors.black),
|
||||
@ -170,7 +170,7 @@ class UsersPage extends StatelessWidget {
|
||||
},
|
||||
).then((v) {
|
||||
if (v != null) {
|
||||
_blocRole.add(const GetUsers());
|
||||
blocRole.add(const GetUsers());
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -193,7 +193,7 @@ class UsersPage extends StatelessWidget {
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Container(
|
||||
SizedBox(
|
||||
height: screenSize.height * 0.65,
|
||||
child: DynamicTableScreen(
|
||||
tableSize: screenSize.height * 0.65,
|
||||
@ -201,7 +201,7 @@ class UsersPage extends StatelessWidget {
|
||||
if (columnIndex == 0) {
|
||||
showNameMenu(
|
||||
context: context,
|
||||
isSelected: _blocRole.currentSortOrder,
|
||||
isSelected: blocRole.currentSortOrder,
|
||||
aToZTap: () {
|
||||
context
|
||||
.read<UserTableBloc>()
|
||||
@ -215,13 +215,13 @@ class UsersPage extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
if (columnIndex == 2) {
|
||||
final Map<String, bool> checkboxStates = {
|
||||
for (var item in _blocRole.jobTitle)
|
||||
item: _blocRole.selectedJobTitles.contains(item),
|
||||
final checkboxStates = <String, bool>{
|
||||
for (final item in blocRole.jobTitle)
|
||||
item: blocRole.selectedJobTitles.contains(item),
|
||||
};
|
||||
final RenderBox overlay = Overlay.of(context)
|
||||
final overlay = Overlay.of(context)
|
||||
.context
|
||||
.findRenderObject() as RenderBox;
|
||||
.findRenderObject()! as RenderBox;
|
||||
|
||||
showPopUpFilterMenu(
|
||||
position: RelativeRect.fromLTRB(
|
||||
@ -230,40 +230,40 @@ class UsersPage extends StatelessWidget {
|
||||
overlay.size.width / 4,
|
||||
0,
|
||||
),
|
||||
list: _blocRole.jobTitle,
|
||||
list: blocRole.jobTitle,
|
||||
context: context,
|
||||
checkboxStates: checkboxStates,
|
||||
isSelected: _blocRole.currentSortJopTitle,
|
||||
isSelected: blocRole.currentSortJopTitle,
|
||||
onOkPressed: () {
|
||||
searchController.clear();
|
||||
_blocRole.add(FilterClearEvent());
|
||||
blocRole.add(const FilterClearEvent());
|
||||
final selectedItems = checkboxStates.entries
|
||||
.where((entry) => entry.value)
|
||||
.map((entry) => entry.key)
|
||||
.toList();
|
||||
Navigator.of(context).pop();
|
||||
_blocRole.add(FilterUsersByJobEvent(
|
||||
blocRole.add(FilterUsersByJobEvent(
|
||||
selectedJob: selectedItems,
|
||||
sortOrder: _blocRole.currentSortJopTitle,
|
||||
sortOrder: blocRole.currentSortJopTitle,
|
||||
));
|
||||
},
|
||||
onSortAtoZ: (v) {
|
||||
_blocRole.currentSortJopTitle = v;
|
||||
blocRole.currentSortJopTitle = v;
|
||||
},
|
||||
onSortZtoA: (v) {
|
||||
_blocRole.currentSortJopTitle = v;
|
||||
blocRole.currentSortJopTitle = v;
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
if (columnIndex == 3) {
|
||||
final Map<String, bool> checkboxStates = {
|
||||
for (var item in _blocRole.roleTypes)
|
||||
item: _blocRole.selectedRoles.contains(item),
|
||||
final checkboxStates = <String, bool>{
|
||||
for (final item in blocRole.roleTypes)
|
||||
item: blocRole.selectedRoles.contains(item),
|
||||
};
|
||||
final RenderBox overlay = Overlay.of(context)
|
||||
final overlay = Overlay.of(context)
|
||||
.context
|
||||
.findRenderObject() as RenderBox;
|
||||
.findRenderObject()! as RenderBox;
|
||||
showPopUpFilterMenu(
|
||||
position: RelativeRect.fromLTRB(
|
||||
overlay.size.width / 4,
|
||||
@ -271,13 +271,13 @@ class UsersPage extends StatelessWidget {
|
||||
overlay.size.width / 4,
|
||||
0,
|
||||
),
|
||||
list: _blocRole.roleTypes,
|
||||
list: blocRole.roleTypes,
|
||||
context: context,
|
||||
checkboxStates: checkboxStates,
|
||||
isSelected: _blocRole.currentSortRole,
|
||||
isSelected: blocRole.currentSortRole,
|
||||
onOkPressed: () {
|
||||
searchController.clear();
|
||||
_blocRole.add(FilterClearEvent());
|
||||
blocRole.add(const FilterClearEvent());
|
||||
final selectedItems = checkboxStates.entries
|
||||
.where((entry) => entry.value)
|
||||
.map((entry) => entry.key)
|
||||
@ -286,20 +286,20 @@ class UsersPage extends StatelessWidget {
|
||||
context.read<UserTableBloc>().add(
|
||||
FilterUsersByRoleEvent(
|
||||
selectedRoles: selectedItems,
|
||||
sortOrder: _blocRole.currentSortRole));
|
||||
sortOrder: blocRole.currentSortRole));
|
||||
},
|
||||
onSortAtoZ: (v) {
|
||||
_blocRole.currentSortRole = v;
|
||||
blocRole.currentSortRole = v;
|
||||
},
|
||||
onSortZtoA: (v) {
|
||||
_blocRole.currentSortRole = v;
|
||||
blocRole.currentSortRole = v;
|
||||
},
|
||||
);
|
||||
}
|
||||
if (columnIndex == 4) {
|
||||
showDateFilterMenu(
|
||||
context: context,
|
||||
isSelected: _blocRole.currentSortOrder,
|
||||
isSelected: blocRole.currentSortOrder,
|
||||
aToZTap: () {
|
||||
context
|
||||
.read<UserTableBloc>()
|
||||
@ -313,13 +313,13 @@ class UsersPage extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
if (columnIndex == 6) {
|
||||
final Map<String, bool> checkboxStates = {
|
||||
for (var item in _blocRole.createdBy)
|
||||
item: _blocRole.selectedCreatedBy.contains(item),
|
||||
final checkboxStates = <String, bool>{
|
||||
for (final item in blocRole.createdBy)
|
||||
item: blocRole.selectedCreatedBy.contains(item),
|
||||
};
|
||||
final RenderBox overlay = Overlay.of(context)
|
||||
final overlay = Overlay.of(context)
|
||||
.context
|
||||
.findRenderObject() as RenderBox;
|
||||
.findRenderObject()! as RenderBox;
|
||||
showPopUpFilterMenu(
|
||||
position: RelativeRect.fromLTRB(
|
||||
overlay.size.width / 1,
|
||||
@ -327,39 +327,39 @@ class UsersPage extends StatelessWidget {
|
||||
overlay.size.width / 4,
|
||||
0,
|
||||
),
|
||||
list: _blocRole.createdBy,
|
||||
list: blocRole.createdBy,
|
||||
context: context,
|
||||
checkboxStates: checkboxStates,
|
||||
isSelected: _blocRole.currentSortCreatedBy,
|
||||
isSelected: blocRole.currentSortCreatedBy,
|
||||
onOkPressed: () {
|
||||
searchController.clear();
|
||||
_blocRole.add(FilterClearEvent());
|
||||
blocRole.add(const FilterClearEvent());
|
||||
final selectedItems = checkboxStates.entries
|
||||
.where((entry) => entry.value)
|
||||
.map((entry) => entry.key)
|
||||
.toList();
|
||||
Navigator.of(context).pop();
|
||||
_blocRole.add(FilterUsersByCreatedEvent(
|
||||
blocRole.add(FilterUsersByCreatedEvent(
|
||||
selectedCreatedBy: selectedItems,
|
||||
sortOrder: _blocRole.currentSortCreatedBy));
|
||||
sortOrder: blocRole.currentSortCreatedBy));
|
||||
},
|
||||
onSortAtoZ: (v) {
|
||||
_blocRole.currentSortCreatedBy = v;
|
||||
blocRole.currentSortCreatedBy = v;
|
||||
},
|
||||
onSortZtoA: (v) {
|
||||
_blocRole.currentSortCreatedBy = v;
|
||||
blocRole.currentSortCreatedBy = v;
|
||||
},
|
||||
);
|
||||
}
|
||||
if (columnIndex == 7) {
|
||||
final Map<String, bool> checkboxStates = {
|
||||
for (var item in _blocRole.status)
|
||||
item: _blocRole.selectedStatuses.contains(item),
|
||||
final checkboxStates = <String, bool>{
|
||||
for (final item in blocRole.status)
|
||||
item: blocRole.selectedStatuses.contains(item),
|
||||
};
|
||||
|
||||
final RenderBox overlay = Overlay.of(context)
|
||||
final overlay = Overlay.of(context)
|
||||
.context
|
||||
.findRenderObject() as RenderBox;
|
||||
.findRenderObject()! as RenderBox;
|
||||
showPopUpFilterMenu(
|
||||
position: RelativeRect.fromLTRB(
|
||||
overlay.size.width / 0,
|
||||
@ -367,34 +367,34 @@ class UsersPage extends StatelessWidget {
|
||||
overlay.size.width / 5,
|
||||
0,
|
||||
),
|
||||
list: _blocRole.status,
|
||||
list: blocRole.status,
|
||||
context: context,
|
||||
checkboxStates: checkboxStates,
|
||||
isSelected: _blocRole.currentSortStatus,
|
||||
isSelected: blocRole.currentSortStatus,
|
||||
onOkPressed: () {
|
||||
searchController.clear();
|
||||
_blocRole.add(FilterClearEvent());
|
||||
blocRole.add(const FilterClearEvent());
|
||||
final selectedItems = checkboxStates.entries
|
||||
.where((entry) => entry.value)
|
||||
.map((entry) => entry.key)
|
||||
.toList();
|
||||
Navigator.of(context).pop();
|
||||
_blocRole.add(FilterUsersByDeActevateEvent(
|
||||
blocRole.add(FilterUsersByDeActevateEvent(
|
||||
selectedActivate: selectedItems,
|
||||
sortOrder: _blocRole.currentSortStatus));
|
||||
sortOrder: blocRole.currentSortStatus));
|
||||
},
|
||||
onSortAtoZ: (v) {
|
||||
_blocRole.currentSortStatus = v;
|
||||
blocRole.currentSortStatus = v;
|
||||
},
|
||||
onSortZtoA: (v) {
|
||||
_blocRole.currentSortStatus = v;
|
||||
blocRole.currentSortStatus = v;
|
||||
},
|
||||
);
|
||||
}
|
||||
if (columnIndex == 8) {
|
||||
showDeActivateFilterMenu(
|
||||
context: context,
|
||||
isSelected: _blocRole.currentSortOrderDate,
|
||||
isSelected: blocRole.currentSortOrderDate,
|
||||
aToZTap: () {
|
||||
context
|
||||
.read<UserTableBloc>()
|
||||
@ -409,16 +409,16 @@ class UsersPage extends StatelessWidget {
|
||||
}
|
||||
},
|
||||
titles: const [
|
||||
"Full Name",
|
||||
"Email Address",
|
||||
"Job Title",
|
||||
"Role",
|
||||
"Creation Date",
|
||||
"Creation Time",
|
||||
"Created By",
|
||||
"Status",
|
||||
"De/Activate",
|
||||
"Action"
|
||||
'Full Name',
|
||||
'Email Address',
|
||||
'Job Title',
|
||||
'Role',
|
||||
'Creation Date',
|
||||
'Creation Time',
|
||||
'Created By',
|
||||
'Status',
|
||||
'De/Activate',
|
||||
'Action'
|
||||
],
|
||||
rows: state.users.map((user) {
|
||||
return [
|
||||
@ -439,7 +439,7 @@ class UsersPage extends StatelessWidget {
|
||||
? 'disabled'
|
||||
: user.status,
|
||||
userId: user.uuid,
|
||||
onTap: user.status != "invited"
|
||||
onTap: user.status != 'invited'
|
||||
? () {
|
||||
context.read<UserTableBloc>().add(
|
||||
ChangeUserStatus(
|
||||
@ -452,35 +452,36 @@ class UsersPage extends StatelessWidget {
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
user.isEnabled != false
|
||||
? actionButton(
|
||||
isActive: true,
|
||||
title: "Edit",
|
||||
onTap: () {
|
||||
context
|
||||
.read<SpaceTreeBloc>()
|
||||
.add(ClearCachedData());
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (BuildContext context) {
|
||||
return EditUserDialog(
|
||||
userId: user.uuid);
|
||||
},
|
||||
).then((v) {
|
||||
if (v != null) {
|
||||
if (v != null) {
|
||||
_blocRole.add(const GetUsers());
|
||||
}
|
||||
}
|
||||
});
|
||||
if (user.isEnabled != false)
|
||||
actionButton(
|
||||
isActive: true,
|
||||
title: 'Edit',
|
||||
onTap: () {
|
||||
context
|
||||
.read<SpaceTreeBloc>()
|
||||
.add(ClearCachedData());
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (BuildContext context) {
|
||||
return EditUserDialog(
|
||||
userId: user.uuid);
|
||||
},
|
||||
)
|
||||
: actionButton(
|
||||
title: "Edit",
|
||||
),
|
||||
).then((v) {
|
||||
if (v != null) {
|
||||
if (v != null) {
|
||||
blocRole.add(const GetUsers());
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
)
|
||||
else
|
||||
actionButton(
|
||||
title: 'Edit',
|
||||
),
|
||||
actionButton(
|
||||
title: "Delete",
|
||||
title: 'Delete',
|
||||
onTap: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
@ -489,7 +490,7 @@ class UsersPage extends StatelessWidget {
|
||||
return DeleteUserDialog(
|
||||
onTapDelete: () async {
|
||||
try {
|
||||
_blocRole.add(DeleteUserEvent(
|
||||
blocRole.add(DeleteUserEvent(
|
||||
user.uuid, context));
|
||||
await Future.delayed(
|
||||
const Duration(seconds: 2));
|
||||
@ -501,7 +502,7 @@ class UsersPage extends StatelessWidget {
|
||||
},
|
||||
).then((v) {
|
||||
if (v != null) {
|
||||
_blocRole.add(const GetUsers());
|
||||
blocRole.add(const GetUsers());
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -529,10 +530,10 @@ class UsersPage extends StatelessWidget {
|
||||
const Icon(Icons.keyboard_double_arrow_right),
|
||||
firstPageIcon:
|
||||
const Icon(Icons.keyboard_double_arrow_left),
|
||||
totalPages: (_blocRole.totalUsersCount.length /
|
||||
_blocRole.itemsPerPage)
|
||||
totalPages: (blocRole.totalUsersCount.length /
|
||||
blocRole.itemsPerPage)
|
||||
.ceil(),
|
||||
currentPage: _blocRole.currentPage,
|
||||
currentPage: blocRole.currentPage,
|
||||
onPageChanged: (int pageNumber) {
|
||||
context
|
||||
.read<UserTableBloc>()
|
||||
|
||||
Reference in New Issue
Block a user