Перевёл панель пользователей
This commit is contained in:
parent
93b599137b
commit
89bd7cbfcb
1 changed files with 82 additions and 84 deletions
|
|
@ -1,5 +1,3 @@
|
|||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:built_value/json_object.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
|
@ -68,7 +66,7 @@ class UserListPanelController extends GetxController {
|
|||
|
||||
final respData = resp.data;
|
||||
if (respData == null) {
|
||||
throw Exception("No data in response");
|
||||
throw Exception("В ответе нет данных");
|
||||
}
|
||||
|
||||
_users.clear();
|
||||
|
|
@ -82,18 +80,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to get users",
|
||||
"Ошибка получения пользователей",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to get users",
|
||||
"Ошибка получения пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to get users",
|
||||
"Ошибка получения пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -110,7 +108,7 @@ class UserListPanelController extends GetxController {
|
|||
|
||||
final respData = resp.data;
|
||||
if (respData == null) {
|
||||
throw Exception("No data in response");
|
||||
throw Exception("В ответе нет данных");
|
||||
}
|
||||
|
||||
_groups.clear();
|
||||
|
|
@ -123,18 +121,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to get groups",
|
||||
"Ошибка получения групп пользователей",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to get groups",
|
||||
"Ошибка получения групп пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to get groups",
|
||||
"Ошибка получения групп пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -149,8 +147,8 @@ class UserListPanelController extends GetxController {
|
|||
final accept = await Get.dialog<bool>(
|
||||
AlertDialog(
|
||||
title: user == null
|
||||
? const Text("Create new user")
|
||||
: const Text("Edit user"),
|
||||
? const Text("Создание нового пользователя")
|
||||
: const Text("Редактирование пользователя"),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
|
|
@ -159,14 +157,14 @@ class UserListPanelController extends GetxController {
|
|||
? TextEditingController(text: user.username)
|
||||
: null,
|
||||
decoration: const InputDecoration(
|
||||
labelText: "Username",
|
||||
labelText: "Логин",
|
||||
),
|
||||
readOnly: user != null,
|
||||
onChanged: (value) => username.value = value,
|
||||
),
|
||||
TextField(
|
||||
decoration: const InputDecoration(
|
||||
labelText: "Password",
|
||||
labelText: "Пароль",
|
||||
),
|
||||
obscureText: true,
|
||||
onChanged: (value) => password.value = value,
|
||||
|
|
@ -176,11 +174,12 @@ class UserListPanelController extends GetxController {
|
|||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: false),
|
||||
child: const Text("Cancel"),
|
||||
child: const Text("Отменить"),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: true),
|
||||
child: user == null ? const Text("Create") : const Text("Save"),
|
||||
child:
|
||||
user == null ? const Text("Создать") : const Text("Сохранить"),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -210,7 +209,7 @@ class UserListPanelController extends GetxController {
|
|||
}
|
||||
|
||||
if (respData == null) {
|
||||
throw Exception("No data in response");
|
||||
throw Exception("В ответе нет данных");
|
||||
}
|
||||
|
||||
refreshData();
|
||||
|
|
@ -218,18 +217,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to create user",
|
||||
"Ошибка создания пользователя",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to create user",
|
||||
"Ошибка создания пользователя",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to create user",
|
||||
"Ошибка создания пользователя",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -240,19 +239,19 @@ class UserListPanelController extends GetxController {
|
|||
final groupDescription = "".obs;
|
||||
final accept = await Get.dialog<bool>(
|
||||
AlertDialog(
|
||||
title: const Text("Create new group"),
|
||||
title: const Text("Создание группы пользователей"),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
TextField(
|
||||
decoration: const InputDecoration(
|
||||
labelText: "Group name",
|
||||
labelText: "Название",
|
||||
),
|
||||
onChanged: (value) => groupName.value = value,
|
||||
),
|
||||
TextField(
|
||||
decoration: const InputDecoration(
|
||||
labelText: "Group description (optional)",
|
||||
labelText: "Описание (опционально)",
|
||||
),
|
||||
onChanged: (value) => groupDescription.value = value,
|
||||
),
|
||||
|
|
@ -261,11 +260,11 @@ class UserListPanelController extends GetxController {
|
|||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: false),
|
||||
child: const Text("Cancel"),
|
||||
child: const Text("Отменить"),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: true),
|
||||
child: const Text("Create"),
|
||||
child: const Text("Создать"),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -284,12 +283,12 @@ class UserListPanelController extends GetxController {
|
|||
|
||||
final respData = resp.data;
|
||||
if (respData == null) {
|
||||
throw Exception("No data in response");
|
||||
throw Exception("В ответе нет данных");
|
||||
}
|
||||
|
||||
Get.snackbar(
|
||||
"Group created",
|
||||
"Group $groupName created",
|
||||
"Группа создана",
|
||||
"Группа $groupName создана",
|
||||
);
|
||||
|
||||
refreshData();
|
||||
|
|
@ -297,18 +296,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to create group",
|
||||
"Ошибка создания группы пользователей",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to create group",
|
||||
"Ошибка создания группы пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to create group",
|
||||
"Ошибка создания группы пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -331,7 +330,7 @@ class UserListPanelController extends GetxController {
|
|||
|
||||
final respData = resp.data;
|
||||
if (respData == null) {
|
||||
throw Exception("No data in response");
|
||||
throw Exception("В ответе нет данных");
|
||||
}
|
||||
|
||||
final data = respData
|
||||
|
|
@ -356,7 +355,7 @@ class UserListPanelController extends GetxController {
|
|||
|
||||
final selectedUser = await Get.dialog<UserDefinition>(
|
||||
AlertDialog(
|
||||
title: const Text("Select user to add to group"),
|
||||
title: const Text("Какого пользователя добавить в группу"),
|
||||
content: SizedBox(
|
||||
width: 400,
|
||||
height: 400,
|
||||
|
|
@ -374,7 +373,7 @@ class UserListPanelController extends GetxController {
|
|||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: null),
|
||||
child: const Text("Cancel"),
|
||||
child: const Text("Отменить"),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -393,12 +392,12 @@ class UserListPanelController extends GetxController {
|
|||
|
||||
final respData = resp.data;
|
||||
if (respData == null) {
|
||||
throw Exception("No data in response");
|
||||
throw Exception("В ответе нет данных");
|
||||
}
|
||||
|
||||
Get.snackbar(
|
||||
"User added to group",
|
||||
"User ${selectedUser.username} added to group ${group.name}",
|
||||
"Пользователь добавлен в группу",
|
||||
"Пользователь ${selectedUser.username} добавлен в группу ${group.name}",
|
||||
);
|
||||
|
||||
refreshData();
|
||||
|
|
@ -406,18 +405,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to add user to group",
|
||||
"Ошибка добавления пользователя в группу",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to add user to group",
|
||||
"Ошибка добавления пользователя в группу",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to add user to group",
|
||||
"Ошибка добавления пользователя в группу",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -429,17 +428,17 @@ class UserListPanelController extends GetxController {
|
|||
) async {
|
||||
final accept = await Get.dialog<bool>(
|
||||
AlertDialog(
|
||||
title: const Text("Remove user from group"),
|
||||
title: const Text("Удаление пользователя из группы"),
|
||||
content: const Text(
|
||||
"Are you sure you want to remove this user from the group?"),
|
||||
"Вы действительно хотите удалить этого пользователя из группы?"),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: false),
|
||||
child: const Text("Cancel"),
|
||||
child: const Text("Отменить"),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: true),
|
||||
child: const Text("Remove"),
|
||||
child: const Text("Удалить"),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -466,12 +465,12 @@ class UserListPanelController extends GetxController {
|
|||
|
||||
final respData = resp.data;
|
||||
if (respData == null) {
|
||||
throw Exception("No data in response");
|
||||
throw Exception("В ответе нет данных");
|
||||
}
|
||||
|
||||
Get.snackbar(
|
||||
"User removed from group",
|
||||
"User ${user.username} removed from group ${group.name}",
|
||||
"Пользователь удалён из группы",
|
||||
"Пользователь ${user.username} удалён из группы ${group.name}",
|
||||
);
|
||||
|
||||
refreshData();
|
||||
|
|
@ -479,18 +478,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to remove user from group",
|
||||
"Ошибка удаления пользователя из группы",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to remove user from group",
|
||||
"Ошибка удаления пользователя из группы",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to remove user from group",
|
||||
"Ошибка удаления пользователя из группы",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -499,17 +498,16 @@ class UserListPanelController extends GetxController {
|
|||
Future<void> deleteGroup(GroupDefinition group) async {
|
||||
final accept = await Get.dialog<bool>(
|
||||
AlertDialog(
|
||||
title: const Text("Delete group"),
|
||||
content: const Text(
|
||||
"Are you sure you want to delete this group? This action cannot be undone."),
|
||||
title: const Text("Удаление группы"),
|
||||
content: const Text("Вы действительно хотите удалить эту группу?"),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: false),
|
||||
child: const Text("Cancel"),
|
||||
child: const Text("Отменить"),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: true),
|
||||
child: const Text("Delete"),
|
||||
child: const Text("Удалить"),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -530,7 +528,7 @@ class UserListPanelController extends GetxController {
|
|||
);
|
||||
|
||||
if (resp1.data == null) {
|
||||
throw Exception("Could not delete users from group");
|
||||
throw Exception("Не удалось удалить пользователей из группы");
|
||||
}
|
||||
|
||||
final resp2 = await ApiController.to.apiClient.deleteItemFromTable(
|
||||
|
|
@ -545,12 +543,12 @@ class UserListPanelController extends GetxController {
|
|||
);
|
||||
|
||||
if (resp2.data == null) {
|
||||
throw Exception("Could not delete group");
|
||||
throw Exception("Не удалось удалить группу пользователей");
|
||||
}
|
||||
|
||||
Get.snackbar(
|
||||
"Group deleted",
|
||||
"Group ${group.name} deleted",
|
||||
"Группа пользователей удалена",
|
||||
"Группа ${group.name} удалена",
|
||||
);
|
||||
|
||||
refreshData();
|
||||
|
|
@ -558,18 +556,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to delete group",
|
||||
"Ошибка удаления группы пользователей",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to delete group",
|
||||
"Ошибка удаления группы пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to delete group",
|
||||
"Ошибка удаления группы пользователей",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -584,17 +582,16 @@ class UserListPanelController extends GetxController {
|
|||
AlertDialog(
|
||||
title: const Text("Delete user"),
|
||||
content: const Text(
|
||||
"Are you sure you want to delete this user? This action cannot be undone.\n"
|
||||
"Note: This will not remove references to this user in other tables.",
|
||||
"Вы уверены, что хотите удалить этого пользователя?",
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: false),
|
||||
child: const Text("Cancel"),
|
||||
child: const Text("Отменить"),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => Get.back(result: true),
|
||||
child: const Text("Delete"),
|
||||
child: const Text("Удалить"),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
@ -615,7 +612,7 @@ class UserListPanelController extends GetxController {
|
|||
);
|
||||
|
||||
if (resp1.data == null) {
|
||||
throw Exception("Could not delete users from group");
|
||||
throw Exception("Не удалось удалить пользователя из групп");
|
||||
}
|
||||
|
||||
final resp2 = await ApiController.to.apiClient.removeUser(
|
||||
|
|
@ -623,12 +620,12 @@ class UserListPanelController extends GetxController {
|
|||
);
|
||||
|
||||
if (resp2.data == null) {
|
||||
throw Exception("Could not delete group");
|
||||
throw Exception("Не удалось удалить пользователя");
|
||||
}
|
||||
|
||||
Get.snackbar(
|
||||
"User deleted",
|
||||
"User ${user.username} deleted",
|
||||
"Пользователь удалён",
|
||||
"Пользователь ${user.username} удалён",
|
||||
);
|
||||
|
||||
refreshData();
|
||||
|
|
@ -636,18 +633,18 @@ class UserListPanelController extends GetxController {
|
|||
final respData = e.response?.data;
|
||||
if (respData != null) {
|
||||
Get.snackbar(
|
||||
"Error trying to delete user",
|
||||
"Ошибка удаления пользователя",
|
||||
"${respData['error']}",
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error trying to delete user",
|
||||
"Ошибка удаления пользователя",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
"Error trying to delete user",
|
||||
"Ошибка удаления пользователя",
|
||||
"$e",
|
||||
);
|
||||
}
|
||||
|
|
@ -674,11 +671,11 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
items: const [
|
||||
DropdownMenuItem(
|
||||
value: UserListPanelTab.users,
|
||||
child: Text("Users"),
|
||||
child: Text("Пользователи"),
|
||||
),
|
||||
DropdownMenuItem(
|
||||
value: UserListPanelTab.groups,
|
||||
child: Text("Groups"),
|
||||
child: Text("Группы"),
|
||||
),
|
||||
],
|
||||
value: controller.currentTab,
|
||||
|
|
@ -721,11 +718,12 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
);
|
||||
}
|
||||
|
||||
Widget get usersPanel => Obx(() =>
|
||||
controller.users.isEmpty ? whenNoSomething("No users found") : cardList);
|
||||
Widget get usersPanel => Obx(() => controller.users.isEmpty
|
||||
? whenNoSomething("Пользователи не найдены")
|
||||
: cardList);
|
||||
|
||||
Widget get groupsPanel => Obx(() => controller.groups.isEmpty
|
||||
? whenNoSomething("No groups found")
|
||||
? whenNoSomething("Группы не найдены")
|
||||
: groupsList);
|
||||
|
||||
Widget whenNoSomething(message) => Center(
|
||||
|
|
@ -785,7 +783,7 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
ElevatedButton.icon(
|
||||
onPressed: () => controller.editUser(user),
|
||||
icon: const Icon(Icons.edit_attributes),
|
||||
label: const Text("Edit user"),
|
||||
label: const Text("Редактировать"),
|
||||
).paddingAll(8).expanded(),
|
||||
Obx(
|
||||
() {
|
||||
|
|
@ -807,7 +805,7 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
final btn = ElevatedButton.icon(
|
||||
onPressed: () => controller.deleteUser(user),
|
||||
icon: const Icon(Icons.delete_forever),
|
||||
label: const Text("Delete user"),
|
||||
label: const Text("Удалить"),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.redAccent,
|
||||
),
|
||||
|
|
@ -815,7 +813,7 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
|
||||
if (isAdmin) {
|
||||
return Tooltip(
|
||||
message: "Please note that this user is an admin",
|
||||
message: "Данный пользователь является администратором",
|
||||
child: btn,
|
||||
).paddingAll(8).expanded();
|
||||
}
|
||||
|
|
@ -876,7 +874,7 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
final groupData = controller.usersInGroups[group];
|
||||
if (group.id == 1) {
|
||||
return const ListTile(
|
||||
title: Text("No users can be added to this group"),
|
||||
title: Text("В эту группу нельзя добавить пользователей"),
|
||||
);
|
||||
}
|
||||
if (groupData == null) {
|
||||
|
|
@ -886,7 +884,7 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
}
|
||||
if (groupData.isEmpty) {
|
||||
return const ListTile(
|
||||
title: Text("No users in group"),
|
||||
title: Text("В группе нет пользователей"),
|
||||
);
|
||||
}
|
||||
return ListView.builder(
|
||||
|
|
@ -897,7 +895,7 @@ class UsersListPanel extends GetView<UserListPanelController> {
|
|||
final isYou = user.accessToken == ApiController.to.token;
|
||||
return ListTile(
|
||||
title: Text(user.username),
|
||||
subtitle: isYou ? const Text("You") : null,
|
||||
subtitle: isYou ? const Text("Вы") : null,
|
||||
trailing: isYou &&
|
||||
(group.id == 2 ||
|
||||
group.name.toLowerCase() == "admin")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue