Перевёл панель пользователей

This commit is contained in:
Andrew 2023-05-17 20:58:26 +07:00
parent 93b599137b
commit 89bd7cbfcb

View file

@ -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")