fix: Editor displayed as member in role menu
This commit is contained in:
@@ -3,6 +3,7 @@ import * as React from "react";
|
|||||||
import { UserRole } from "@shared/types";
|
import { UserRole } from "@shared/types";
|
||||||
import { UserRoleHelper } from "@shared/utils/UserRoleHelper";
|
import { UserRoleHelper } from "@shared/utils/UserRoleHelper";
|
||||||
import stores from "~/stores";
|
import stores from "~/stores";
|
||||||
|
import User from "~/models/User";
|
||||||
import Invite from "~/scenes/Invite";
|
import Invite from "~/scenes/Invite";
|
||||||
import {
|
import {
|
||||||
UserChangeRoleDialog,
|
UserChangeRoleDialog,
|
||||||
@@ -27,23 +28,21 @@ export const inviteUser = createAction({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export const updateUserRoleActionFactory = (userId: string, role: UserRole) =>
|
export const updateUserRoleActionFactory = (user: User, role: UserRole) =>
|
||||||
createAction({
|
createAction({
|
||||||
name: ({ t }) => {
|
name: ({ t }) =>
|
||||||
const user = stores.users.get(userId);
|
UserRoleHelper.isRoleHigher(role, user!.role)
|
||||||
|
? `${t("Promote to {{ role }}", {
|
||||||
return UserRoleHelper.isRoleHigher(role, user!.role)
|
role: UserRoleHelper.displayName(role, t),
|
||||||
? `${t("Promote to {{ role }}", { role })}…`
|
})}…`
|
||||||
: `${t("Demote to {{ role }}", { role })}…`;
|
: `${t("Demote to {{ role }}", {
|
||||||
},
|
role: UserRoleHelper.displayName(role, t),
|
||||||
|
})}…`,
|
||||||
analyticsName: "Update user role",
|
analyticsName: "Update user role",
|
||||||
section: UserSection,
|
section: UserSection,
|
||||||
visible: ({ stores }) => {
|
visible: ({ stores }) => {
|
||||||
const can = stores.policies.abilities(userId);
|
const can = stores.policies.abilities(user.id);
|
||||||
const user = stores.users.get(userId);
|
|
||||||
if (!user) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return UserRoleHelper.isRoleHigher(role, user.role)
|
return UserRoleHelper.isRoleHigher(role, user.role)
|
||||||
? can.promote
|
? can.promote
|
||||||
: UserRoleHelper.isRoleLower(role, user.role)
|
: UserRoleHelper.isRoleLower(role, user.role)
|
||||||
@@ -51,11 +50,6 @@ export const updateUserRoleActionFactory = (userId: string, role: UserRole) =>
|
|||||||
: false;
|
: false;
|
||||||
},
|
},
|
||||||
perform: ({ t }) => {
|
perform: ({ t }) => {
|
||||||
const user = stores.users.get(userId);
|
|
||||||
if (!user) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
stores.dialogs.openModal({
|
stores.dialogs.openModal({
|
||||||
title: t("Update role"),
|
title: t("Update role"),
|
||||||
content: (
|
content: (
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ function UserMenu({ user }: Props) {
|
|||||||
items: [UserRole.Admin, UserRole.Member, UserRole.Viewer].map(
|
items: [UserRole.Admin, UserRole.Member, UserRole.Viewer].map(
|
||||||
(role) =>
|
(role) =>
|
||||||
actionToMenuItem(
|
actionToMenuItem(
|
||||||
updateUserRoleActionFactory(user.id, role),
|
updateUserRoleActionFactory(user, role),
|
||||||
context
|
context
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { type TFunction } from "i18next";
|
||||||
import { UserRole } from "../types";
|
import { UserRole } from "../types";
|
||||||
|
|
||||||
interface User {
|
interface User {
|
||||||
@@ -5,6 +6,26 @@ interface User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class UserRoleHelper {
|
export class UserRoleHelper {
|
||||||
|
/**
|
||||||
|
* Get the display name for a role.
|
||||||
|
*
|
||||||
|
* @param role The role to get the display name for
|
||||||
|
* @param t The translation function
|
||||||
|
* @returns The display name for the role
|
||||||
|
*/
|
||||||
|
static displayName(role: UserRole, t: TFunction): string {
|
||||||
|
switch (role) {
|
||||||
|
case UserRole.Guest:
|
||||||
|
return t("Guest");
|
||||||
|
case UserRole.Viewer:
|
||||||
|
return t("Viewer");
|
||||||
|
case UserRole.Member:
|
||||||
|
return t("Editor");
|
||||||
|
case UserRole.Admin:
|
||||||
|
return t("Admin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the first role is higher than the second role.
|
* Check if the first role is higher than the second role.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user