Skip to content

Commit 038fa63

Browse files
committed
feat: implement bulk user actions and update localization
- Upgraded @remnawave/backend-contract to version 0.3.45. - Introduced bulk user actions functionality, including a new drawer component for managing multiple user actions. - Enhanced localization files with new keys for bulk user actions in English, Persian, and Russian. - Refactored user table to integrate bulk actions and improve user experience. - Added new hooks for bulk user operations, ensuring better handling of user data updates.
1 parent 324e720 commit 038fa63

File tree

42 files changed

+1877
-42
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1877
-42
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"@mantine/nprogress": "^7.17.2",
4646
"@monaco-editor/react": "^4.7.0",
4747
"@paralleldrive/cuid2": "2.2.2",
48-
"@remnawave/backend-contract": "0.3.37",
48+
"@remnawave/backend-contract": "0.3.45",
4949
"@stablelib/base64": "^2.0.1",
5050
"@stablelib/x25519": "^2.0.1",
5151
"@tabler/icons-react": "^3.31.0",

public/locales/en/remnawave.json

Lines changed: 128 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,5 +591,132 @@
591591
"disable": "Disable",
592592
"set-port-0": "Set port"
593593
}
594+
},
595+
"bulk-user-actions-drawer": {
596+
"widget": {
597+
"bulk-user-actions": "Bulk User Actions",
598+
"users": "users",
599+
"update": "Update",
600+
"actions": "Actions",
601+
"danger": "Danger"
602+
}
603+
},
604+
"delete-all-users-by-status": {
605+
"feature": {
606+
"processing": "Processing",
607+
"deleting-users": "Deleting users...",
608+
"success": "Success",
609+
"deleted-data-affectedrows-users": "Deleted {{count}} users"
610+
}
611+
},
612+
"bulk-all-user-actions-tabs": {
613+
"update": {
614+
"tab": {
615+
"feature": {
616+
"update-fields-for-all-users": "Update fields for all users",
617+
"user-status": "User status",
618+
"status": "Status",
619+
"select-status": "Select status",
620+
"expire-date": "Expire Date",
621+
"select-expiration-date": "Select expiration date",
622+
"close": "Close",
623+
"update-users": "Update Users"
624+
}
625+
}
626+
},
627+
"actions": {
628+
"tab": {
629+
"feature": {
630+
"confirm-action": "Confirm Action",
631+
"reset-traffic-confirmation": "Are you sure you want to reset the traffic for all selected users?",
632+
"reset": "Reset",
633+
"cancel": "Cancel",
634+
"perform-actions-on-all-users": "Perform actions on all users",
635+
"reset-traffic": "Reset Traffic",
636+
"reset-traffic-description": "Resets the traffic usage to zero for all selected users"
637+
}
638+
}
639+
},
640+
"danger": {
641+
"tab": {
642+
"feature": {
643+
"danger-zone": "Danger Zone",
644+
"danger-zone-description": "These actions are irreversible and can result in permanent data loss.",
645+
"delete-users-by-status": "Delete Users By Status",
646+
"delete": "Delete",
647+
"delete-users-by-status-description": "Permanently deletes all users with the selected status"
648+
}
649+
}
650+
}
651+
},
652+
"bulk-all-user-actions-drawer": {
653+
"widget": {
654+
"bulk-all-user-actions": "Bulk All User Actions",
655+
"all-users": "All users",
656+
"update": "Update",
657+
"actions": "Actions",
658+
"danger": "Danger"
659+
}
660+
},
661+
"bulk-user-actions": {
662+
"actions": {
663+
"tab": {
664+
"feature": {
665+
"revoke-subscription": "Revoke Subscription",
666+
"revoke-confirmation-line-1": "Are you sure you want to revoke subscription for {{usersCount}} user(s)?",
667+
"revoke-confirmation-line-2": "This action cannot be undone.",
668+
"revoke": "Revoke",
669+
"cancel": "Cancel",
670+
"reset-traffic": "Reset Traffic",
671+
"reset-traffic-confirmation-line-1": "Are you sure you want to reset traffic for {{usersCount}} user(s)?",
672+
"reset-traffic-confirmation-line-2": "This will set their usage to zero.",
673+
"reset": "Reset",
674+
"change-active-inbounds": "Change Active Inbounds",
675+
"change": "Change",
676+
"no-inbounds-selected": "No inbounds selected",
677+
"please-select-at-least-one-inbound": "Please select at least one inbound",
678+
"perform-action-on-users": "Perform actions on {{usersCount}} selected users",
679+
"changes-the-active-inbounds-for-all-selected-users": "Changes the active inbounds for all selected users",
680+
"resets-the-traffic-usage-to-zero-for-all-selected-users": "Resets the traffic usage to zero for all selected users",
681+
"revokes-subscription-for-all-selected-users": "Revokes subscription for all selected users"
682+
}
683+
}
684+
},
685+
"danger": {
686+
"tab": {
687+
"feature": {
688+
"delete-users": "Delete Users",
689+
"delete-confirmation-line-1": "Are you sure you want to delete {{usersCount}} user(s)?",
690+
"delete-confirmation-line-2": "This action cannot be undone and all data will be permanently lost.",
691+
"delete": "Delete",
692+
"cancel": "Cancel",
693+
"danger-zone": "Danger Zone",
694+
"these-actions-are-irreversible-and-can-result-in-permanent-data-loss": "These actions are irreversible and can result in permanent data loss.",
695+
"permanently-deletes-all-selected-users-and-their-data": "Permanently deletes all selected users and their data"
696+
}
697+
}
698+
},
699+
"update": {
700+
"tab": {
701+
"feature": {
702+
"update-fields-counter": "Update fields for {{usersCount}} selected users",
703+
"user-status": "User status",
704+
"status": "Status",
705+
"select-status": "Select status",
706+
"expire-date": "Expire Date",
707+
"select-expiration-date": "Select expiration date",
708+
"close": "Close",
709+
"update-users": "Update Users"
710+
}
711+
}
712+
}
713+
},
714+
"users-table-selection": {
715+
"feature": {
716+
"row-s-selected": "row(s) selected",
717+
"clear-selection": "Clear selection",
718+
"select-all": "Select all",
719+
"bulk-actions": "Bulk actions"
720+
}
594721
}
595-
}
722+
}

public/locales/fa/remnawave.json

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,5 +591,132 @@
591591
"disable": "غیرفعال کردن",
592592
"set-port-0": "تنظیم پورت"
593593
}
594+
},
595+
"bulk-user-actions-drawer": {
596+
"widget": {
597+
"bulk-user-actions": "Bulk User Actions",
598+
"users": "users",
599+
"update": "Update",
600+
"actions": "Actions",
601+
"danger": "Danger"
602+
}
603+
},
604+
"delete-all-users-by-status": {
605+
"feature": {
606+
"processing": "Processing",
607+
"deleting-users": "Deleting users...",
608+
"success": "Success",
609+
"deleted-data-affectedrows-users": "Deleted {{count}} users"
610+
}
611+
},
612+
"bulk-all-user-actions-tabs": {
613+
"update": {
614+
"tab": {
615+
"feature": {
616+
"update-fields-for-all-users": "Update fields for all users",
617+
"user-status": "User status",
618+
"status": "Status",
619+
"select-status": "Select status",
620+
"expire-date": "Expire Date",
621+
"select-expiration-date": "Select expiration date",
622+
"close": "Close",
623+
"update-users": "Update Users"
624+
}
625+
}
626+
},
627+
"actions": {
628+
"tab": {
629+
"feature": {
630+
"confirm-action": "Confirm Action",
631+
"reset-traffic-confirmation": "Are you sure you want to reset the traffic for all selected users?",
632+
"reset": "Reset",
633+
"cancel": "Cancel",
634+
"perform-actions-on-all-users": "Perform actions on all users",
635+
"reset-traffic": "Reset Traffic",
636+
"reset-traffic-description": "Resets the traffic usage to zero for all selected users"
637+
}
638+
}
639+
},
640+
"danger": {
641+
"tab": {
642+
"feature": {
643+
"danger-zone": "Danger Zone",
644+
"danger-zone-description": "These actions are irreversible and can result in permanent data loss.",
645+
"delete-users-by-status": "Delete Users By Status",
646+
"delete": "Delete",
647+
"delete-users-by-status-description": "Permanently deletes all users with the selected status"
648+
}
649+
}
650+
}
651+
},
652+
"bulk-all-user-actions-drawer": {
653+
"widget": {
654+
"bulk-all-user-actions": "Bulk All User Actions",
655+
"all-users": "All users",
656+
"update": "Update",
657+
"actions": "Actions",
658+
"danger": "Danger"
659+
}
660+
},
661+
"bulk-user-actions": {
662+
"actions": {
663+
"tab": {
664+
"feature": {
665+
"revoke-subscription": "Revoke Subscription",
666+
"revoke-confirmation-line-1": "Are you sure you want to revoke subscription for {{usersCount}} user(s)?",
667+
"revoke-confirmation-line-2": "This action cannot be undone.",
668+
"revoke": "Revoke",
669+
"cancel": "Cancel",
670+
"reset-traffic": "Reset Traffic",
671+
"reset-traffic-confirmation-line-1": "Are you sure you want to reset traffic for {{usersCount}} user(s)?",
672+
"reset-traffic-confirmation-line-2": "This will set their usage to zero.",
673+
"reset": "Reset",
674+
"change-active-inbounds": "Change Active Inbounds",
675+
"change": "Change",
676+
"no-inbounds-selected": "No inbounds selected",
677+
"please-select-at-least-one-inbound": "Please select at least one inbound",
678+
"perform-action-on-users": "Perform actions on {{usersCount}} selected users",
679+
"changes-the-active-inbounds-for-all-selected-users": "Changes the active inbounds for all selected users",
680+
"resets-the-traffic-usage-to-zero-for-all-selected-users": "Resets the traffic usage to zero for all selected users",
681+
"revokes-subscription-for-all-selected-users": "Revokes subscription for all selected users"
682+
}
683+
}
684+
},
685+
"danger": {
686+
"tab": {
687+
"feature": {
688+
"delete-users": "Delete Users",
689+
"delete-confirmation-line-1": "Are you sure you want to delete {{usersCount}} user(s)?",
690+
"delete-confirmation-line-2": "This action cannot be undone and all data will be permanently lost.",
691+
"delete": "Delete",
692+
"cancel": "Cancel",
693+
"danger-zone": "Danger Zone",
694+
"these-actions-are-irreversible-and-can-result-in-permanent-data-loss": "These actions are irreversible and can result in permanent data loss.",
695+
"permanently-deletes-all-selected-users-and-their-data": "Permanently deletes all selected users and their data"
696+
}
697+
}
698+
},
699+
"update": {
700+
"tab": {
701+
"feature": {
702+
"update-fields-counter": "Update fields for {{usersCount}} selected users",
703+
"user-status": "User status",
704+
"status": "Status",
705+
"select-status": "Select status",
706+
"expire-date": "Expire Date",
707+
"select-expiration-date": "Select expiration date",
708+
"close": "Close",
709+
"update-users": "Update Users"
710+
}
711+
}
712+
}
713+
},
714+
"users-table-selection": {
715+
"feature": {
716+
"row-s-selected": "row(s) selected",
717+
"clear-selection": "Clear selection",
718+
"select-all": "Select all",
719+
"bulk-actions": "Bulk actions"
720+
}
594721
}
595722
}

0 commit comments

Comments
 (0)