mirror of
https://github.com/sct/overseerr.git
synced 2025-09-17 17:24:35 +02:00
feat(ui): display "Owner" role instead of "Admin" for user ID 1 (#1050)
* feat(ui): display "Owner" role instead of "Admin" for user ID 1 Also add role to user settings page, and fix the missing "Account Type" string and use the same verbiage on the user list page * feat(lang): generate translation keys * fix: utilize hasPermission returned by useUser instead of importing from server/lib/permissions
This commit is contained in:
@@ -32,13 +32,14 @@ const messages = defineMessages({
|
|||||||
'{userCount, plural, =0 {No new users} one {# new user} other {# new users}} imported from Plex.',
|
'{userCount, plural, =0 {No new users} one {# new user} other {# new users}} imported from Plex.',
|
||||||
user: 'User',
|
user: 'User',
|
||||||
totalrequests: 'Total Requests',
|
totalrequests: 'Total Requests',
|
||||||
usertype: 'User Type',
|
accounttype: 'Account Type',
|
||||||
role: 'Role',
|
role: 'Role',
|
||||||
created: 'Created',
|
created: 'Created',
|
||||||
lastupdated: 'Last Updated',
|
lastupdated: 'Last Updated',
|
||||||
edit: 'Edit',
|
edit: 'Edit',
|
||||||
bulkedit: 'Bulk Edit',
|
bulkedit: 'Bulk Edit',
|
||||||
delete: 'Delete',
|
delete: 'Delete',
|
||||||
|
owner: 'Owner',
|
||||||
admin: 'Admin',
|
admin: 'Admin',
|
||||||
plexuser: 'Plex User',
|
plexuser: 'Plex User',
|
||||||
deleteuser: 'Delete User',
|
deleteuser: 'Delete User',
|
||||||
@@ -472,7 +473,7 @@ const UserList: React.FC = () => {
|
|||||||
</Table.TH>
|
</Table.TH>
|
||||||
<Table.TH>{intl.formatMessage(messages.user)}</Table.TH>
|
<Table.TH>{intl.formatMessage(messages.user)}</Table.TH>
|
||||||
<Table.TH>{intl.formatMessage(messages.totalrequests)}</Table.TH>
|
<Table.TH>{intl.formatMessage(messages.totalrequests)}</Table.TH>
|
||||||
<Table.TH>{intl.formatMessage(messages.usertype)}</Table.TH>
|
<Table.TH>{intl.formatMessage(messages.accounttype)}</Table.TH>
|
||||||
<Table.TH>{intl.formatMessage(messages.role)}</Table.TH>
|
<Table.TH>{intl.formatMessage(messages.role)}</Table.TH>
|
||||||
<Table.TH>{intl.formatMessage(messages.created)}</Table.TH>
|
<Table.TH>{intl.formatMessage(messages.created)}</Table.TH>
|
||||||
<Table.TH>{intl.formatMessage(messages.lastupdated)}</Table.TH>
|
<Table.TH>{intl.formatMessage(messages.lastupdated)}</Table.TH>
|
||||||
@@ -543,7 +544,9 @@ const UserList: React.FC = () => {
|
|||||||
)}
|
)}
|
||||||
</Table.TD>
|
</Table.TD>
|
||||||
<Table.TD>
|
<Table.TD>
|
||||||
{hasPermission(Permission.ADMIN, user.permissions)
|
{user.id === 1
|
||||||
|
? intl.formatMessage(messages.owner)
|
||||||
|
: hasPermission(Permission.ADMIN, user.permissions)
|
||||||
? intl.formatMessage(messages.admin)
|
? intl.formatMessage(messages.admin)
|
||||||
: intl.formatMessage(messages.user)}
|
: intl.formatMessage(messages.user)}
|
||||||
</Table.TD>
|
</Table.TD>
|
||||||
|
@@ -7,7 +7,7 @@ import { useToasts } from 'react-toast-notifications';
|
|||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
import { Language } from '../../../../../server/lib/settings';
|
import { Language } from '../../../../../server/lib/settings';
|
||||||
import useSettings from '../../../../hooks/useSettings';
|
import useSettings from '../../../../hooks/useSettings';
|
||||||
import { UserType, useUser } from '../../../../hooks/useUser';
|
import { UserType, useUser, Permission } from '../../../../hooks/useUser';
|
||||||
import Error from '../../../../pages/_error';
|
import Error from '../../../../pages/_error';
|
||||||
import Badge from '../../../Common/Badge';
|
import Badge from '../../../Common/Badge';
|
||||||
import Button from '../../../Common/Button';
|
import Button from '../../../Common/Button';
|
||||||
@@ -19,8 +19,13 @@ const messages = defineMessages({
|
|||||||
displayName: 'Display Name',
|
displayName: 'Display Name',
|
||||||
save: 'Save Changes',
|
save: 'Save Changes',
|
||||||
saving: 'Saving…',
|
saving: 'Saving…',
|
||||||
|
accounttype: 'Account Type',
|
||||||
plexuser: 'Plex User',
|
plexuser: 'Plex User',
|
||||||
localuser: 'Local User',
|
localuser: 'Local User',
|
||||||
|
role: 'Role',
|
||||||
|
owner: 'Owner',
|
||||||
|
admin: 'Admin',
|
||||||
|
user: 'User',
|
||||||
toastSettingsSuccess: 'Settings successfully saved!',
|
toastSettingsSuccess: 'Settings successfully saved!',
|
||||||
toastSettingsFailure: 'Something went wrong while saving settings.',
|
toastSettingsFailure: 'Something went wrong while saving settings.',
|
||||||
region: 'Discover Region',
|
region: 'Discover Region',
|
||||||
@@ -37,7 +42,9 @@ const UserGeneralSettings: React.FC = () => {
|
|||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const { addToast } = useToasts();
|
const { addToast } = useToasts();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { user, mutate } = useUser({ id: Number(router.query.userId) });
|
const { user, hasPermission, mutate } = useUser({
|
||||||
|
id: Number(router.query.userId),
|
||||||
|
});
|
||||||
const { currentSettings } = useSettings();
|
const { currentSettings } = useSettings();
|
||||||
const { data, error, revalidate } = useSWR<{
|
const { data, error, revalidate } = useSWR<{
|
||||||
username?: string;
|
username?: string;
|
||||||
@@ -107,7 +114,9 @@ const UserGeneralSettings: React.FC = () => {
|
|||||||
return (
|
return (
|
||||||
<Form className="section">
|
<Form className="section">
|
||||||
<div className="form-row">
|
<div className="form-row">
|
||||||
<div className="text-label">Account Type</div>
|
<div className="text-label">
|
||||||
|
{intl.formatMessage(messages.accounttype)}
|
||||||
|
</div>
|
||||||
<div className="mb-1 text-sm font-medium leading-5 text-gray-400 sm:mt-2">
|
<div className="mb-1 text-sm font-medium leading-5 text-gray-400 sm:mt-2">
|
||||||
<div className="flex items-center max-w-lg">
|
<div className="flex items-center max-w-lg">
|
||||||
{user?.userType === UserType.PLEX ? (
|
{user?.userType === UserType.PLEX ? (
|
||||||
@@ -122,6 +131,20 @@ const UserGeneralSettings: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="form-row">
|
||||||
|
<div className="text-label">
|
||||||
|
{intl.formatMessage(messages.role)}
|
||||||
|
</div>
|
||||||
|
<div className="mb-1 text-sm font-medium leading-5 text-gray-400 sm:mt-2">
|
||||||
|
<div className="flex items-center max-w-lg">
|
||||||
|
{user?.id === 1
|
||||||
|
? intl.formatMessage(messages.owner)
|
||||||
|
: hasPermission(Permission.ADMIN)
|
||||||
|
? intl.formatMessage(messages.admin)
|
||||||
|
: intl.formatMessage(messages.user)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div className="form-row">
|
<div className="form-row">
|
||||||
<label htmlFor="displayName" className="text-label">
|
<label htmlFor="displayName" className="text-label">
|
||||||
{intl.formatMessage(messages.displayName)}
|
{intl.formatMessage(messages.displayName)}
|
||||||
|
@@ -628,6 +628,7 @@
|
|||||||
"components.TvDetails.userrating": "User Rating",
|
"components.TvDetails.userrating": "User Rating",
|
||||||
"components.TvDetails.viewfullcrew": "View Full Crew",
|
"components.TvDetails.viewfullcrew": "View Full Crew",
|
||||||
"components.TvDetails.watchtrailer": "Watch Trailer",
|
"components.TvDetails.watchtrailer": "Watch Trailer",
|
||||||
|
"components.UserList.accounttype": "Account Type",
|
||||||
"components.UserList.admin": "Admin",
|
"components.UserList.admin": "Admin",
|
||||||
"components.UserList.autogeneratepassword": "Automatically generate password",
|
"components.UserList.autogeneratepassword": "Automatically generate password",
|
||||||
"components.UserList.bulkedit": "Bulk Edit",
|
"components.UserList.bulkedit": "Bulk Edit",
|
||||||
@@ -648,6 +649,7 @@
|
|||||||
"components.UserList.lastupdated": "Last Updated",
|
"components.UserList.lastupdated": "Last Updated",
|
||||||
"components.UserList.localuser": "Local User",
|
"components.UserList.localuser": "Local User",
|
||||||
"components.UserList.next": "Next",
|
"components.UserList.next": "Next",
|
||||||
|
"components.UserList.owner": "Owner",
|
||||||
"components.UserList.password": "Password",
|
"components.UserList.password": "Password",
|
||||||
"components.UserList.passwordinfo": "Password Information",
|
"components.UserList.passwordinfo": "Password Information",
|
||||||
"components.UserList.passwordinfodescription": "Email notifications need to be configured and enabled in order to automatically generate passwords.",
|
"components.UserList.passwordinfodescription": "Email notifications need to be configured and enabled in order to automatically generate passwords.",
|
||||||
@@ -673,11 +675,12 @@
|
|||||||
"components.UserList.userlist": "User List",
|
"components.UserList.userlist": "User List",
|
||||||
"components.UserList.users": "Users",
|
"components.UserList.users": "Users",
|
||||||
"components.UserList.userssaved": "Users saved!",
|
"components.UserList.userssaved": "Users saved!",
|
||||||
"components.UserList.usertype": "User Type",
|
|
||||||
"components.UserList.validationEmail": "You must provide a valid email address",
|
"components.UserList.validationEmail": "You must provide a valid email address",
|
||||||
"components.UserList.validationpasswordminchars": "Password is too short; should be a minimum of 8 characters",
|
"components.UserList.validationpasswordminchars": "Password is too short; should be a minimum of 8 characters",
|
||||||
"components.UserProfile.ProfileHeader.profile": "View Profile",
|
"components.UserProfile.ProfileHeader.profile": "View Profile",
|
||||||
"components.UserProfile.ProfileHeader.settings": "Edit Settings",
|
"components.UserProfile.ProfileHeader.settings": "Edit Settings",
|
||||||
|
"components.UserProfile.UserSettings.UserGeneralSettings.accounttype": "Account Type",
|
||||||
|
"components.UserProfile.UserSettings.UserGeneralSettings.admin": "Admin",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.displayName": "Display Name",
|
"components.UserProfile.UserSettings.UserGeneralSettings.displayName": "Display Name",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.generalsettings": "General Settings",
|
"components.UserProfile.UserSettings.UserGeneralSettings.generalsettings": "General Settings",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Default ({language})",
|
"components.UserProfile.UserSettings.UserGeneralSettings.languageServerDefault": "Default ({language})",
|
||||||
@@ -685,13 +688,16 @@
|
|||||||
"components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "All Languages",
|
"components.UserProfile.UserSettings.UserGeneralSettings.originalLanguageDefault": "All Languages",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Discover Language",
|
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Discover Language",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filter content by original language (only applies to the \"Popular\" and \"Upcoming\" categories)",
|
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filter content by original language (only applies to the \"Popular\" and \"Upcoming\" categories)",
|
||||||
|
"components.UserProfile.UserSettings.UserGeneralSettings.owner": "Owner",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexuser": "Plex User",
|
"components.UserProfile.UserSettings.UserGeneralSettings.plexuser": "Plex User",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.region": "Discover Region",
|
"components.UserProfile.UserSettings.UserGeneralSettings.region": "Discover Region",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.regionTip": "Filter content by region (only applies to the \"Popular\" and \"Upcoming\" categories)",
|
"components.UserProfile.UserSettings.UserGeneralSettings.regionTip": "Filter content by region (only applies to the \"Popular\" and \"Upcoming\" categories)",
|
||||||
|
"components.UserProfile.UserSettings.UserGeneralSettings.role": "Role",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.save": "Save Changes",
|
"components.UserProfile.UserSettings.UserGeneralSettings.save": "Save Changes",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.saving": "Saving…",
|
"components.UserProfile.UserSettings.UserGeneralSettings.saving": "Saving…",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailure": "Something went wrong while saving settings.",
|
"components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsFailure": "Something went wrong while saving settings.",
|
||||||
"components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsSuccess": "Settings successfully saved!",
|
"components.UserProfile.UserSettings.UserGeneralSettings.toastSettingsSuccess": "Settings successfully saved!",
|
||||||
|
"components.UserProfile.UserSettings.UserGeneralSettings.user": "User",
|
||||||
"components.UserProfile.UserSettings.UserNotificationSettings.discordId": "Discord ID",
|
"components.UserProfile.UserSettings.UserNotificationSettings.discordId": "Discord ID",
|
||||||
"components.UserProfile.UserSettings.UserNotificationSettings.discordIdTip": "The <FindDiscordIdLink>ID number</FindDiscordIdLink> for your Discord user account",
|
"components.UserProfile.UserSettings.UserNotificationSettings.discordIdTip": "The <FindDiscordIdLink>ID number</FindDiscordIdLink> for your Discord user account",
|
||||||
"components.UserProfile.UserSettings.UserNotificationSettings.enableNotifications": "Enable Notifications",
|
"components.UserProfile.UserSettings.UserNotificationSettings.enableNotifications": "Enable Notifications",
|
||||||
|
Reference in New Issue
Block a user