Fix #4414 User Profile Roles are missing Admin option in dropdown (#4415)

This commit is contained in:
Sachin Chaurasiya 2022-04-24 00:04:42 +05:30 committed by GitHub
parent d7b0a11fe3
commit f3a85c65bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 11 deletions

View File

@ -139,6 +139,7 @@ const mockProp = {
paging: mockPaging, paging: mockPaging,
postFeedHandler: postFeed, postFeedHandler: postFeed,
isAdminUser: false, isAdminUser: false,
isLoggedinUser: false,
updateUserDetails, updateUserDetails,
}; };

View File

@ -13,7 +13,7 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { AxiosError, AxiosResponse } from 'axios'; import { AxiosError, AxiosResponse } from 'axios';
import { isNil } from 'lodash'; import { isNil, toLower } from 'lodash';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import React, { Fragment, RefObject, useEffect, useState } from 'react'; import React, { Fragment, RefObject, useEffect, useState } from 'react';
import Select, { MultiValue } from 'react-select'; import Select, { MultiValue } from 'react-select';
@ -93,6 +93,7 @@ const Users = ({
paging, paging,
updateUserDetails, updateUserDetails,
isAdminUser, isAdminUser,
isLoggedinUser,
}: Props) => { }: Props) => {
const [activeTab, setActiveTab] = useState(1); const [activeTab, setActiveTab] = useState(1);
const [fieldListVisible, setFieldListVisible] = useState<boolean>(false); const [fieldListVisible, setFieldListVisible] = useState<boolean>(false);
@ -156,10 +157,14 @@ const Users = ({
const handleRolesChange = () => { const handleRolesChange = () => {
// filter out the roles , and exclude the admin one // filter out the roles , and exclude the admin one
const updatedRoles = selectedRoles.filter((role) => role.value !== 'admin'); const updatedRoles = selectedRoles.filter(
(role) => role.value !== toLower(TERM_ADMIN)
);
// get the admin role and send it as boolean value `iaAdmin=Boolean(isAdmin) // get the admin role and send it as boolean value `iaAdmin=Boolean(isAdmin)
const isAdmin = selectedRoles.find((role) => role.value === 'admin'); const isAdmin = selectedRoles.find(
(role) => role.value === toLower(TERM_ADMIN)
);
updateUserDetails({ updateUserDetails({
roles: updatedRoles.map((role) => role.value), roles: updatedRoles.map((role) => role.value),
isAdmin: Boolean(isAdmin), isAdmin: Boolean(isAdmin),
@ -201,7 +206,7 @@ const Users = ({
}; };
const getDisplayNameComponent = () => { const getDisplayNameComponent = () => {
if (isAdminUser) { if (isAdminUser || isLoggedinUser) {
return ( return (
<div className="tw-mt-4 tw-w-full tw-text-center"> <div className="tw-mt-4 tw-w-full tw-text-center">
{isDisplayNameEdit ? ( {isDisplayNameEdit ? (
@ -267,7 +272,7 @@ const Users = ({
}; };
const getDescriptionComponent = () => { const getDescriptionComponent = () => {
if (isAdminUser) { if (isAdminUser || isLoggedinUser) {
return ( return (
<Description <Description
description={userData.description || ''} description={userData.description || ''}
@ -390,6 +395,17 @@ const Users = ({
}; };
const getRolesComponent = () => { const getRolesComponent = () => {
const userRolesOption = roles?.map((role) => ({
label: getEntityName(role as unknown as EntityReference),
value: role.id,
}));
if (!userData.isAdmin) {
userRolesOption.push({
label: TERM_ADMIN,
value: toLower(TERM_ADMIN),
});
}
const rolesElement = ( const rolesElement = (
<Fragment> <Fragment>
{userData.isAdmin && ( {userData.isAdmin && (
@ -444,10 +460,7 @@ const Users = ({
aria-label="Select roles" aria-label="Select roles"
className="tw-ml-1" className="tw-ml-1"
isSearchable={false} isSearchable={false}
options={roles?.map((role) => ({ options={userRolesOption}
label: getEntityName(role as unknown as EntityReference),
value: role.id,
}))}
placeholder="Roles..." placeholder="Roles..."
styles={reactSingleSelectCustomStyle} styles={reactSingleSelectCustomStyle}
value={selectedRoles} value={selectedRoles}
@ -624,8 +637,8 @@ const Users = ({
]; ];
if (userData.isAdmin) { if (userData.isAdmin) {
defaultRoles.push({ defaultRoles.push({
label: 'Admin', label: TERM_ADMIN,
value: 'admin', value: toLower(TERM_ADMIN),
}); });
} }
setSelectedRoles(defaultRoles); setSelectedRoles(defaultRoles);

View File

@ -30,6 +30,7 @@ export interface Props {
paging: Paging; paging: Paging;
isFeedLoading: boolean; isFeedLoading: boolean;
isAdminUser: boolean; isAdminUser: boolean;
isLoggedinUser: boolean;
updateUserDetails: (data: UserDetails) => void; updateUserDetails: (data: UserDetails) => void;
feedFilterHandler: (v: FeedFilter) => void; feedFilterHandler: (v: FeedFilter) => void;
fetchFeedHandler: (filterType: FeedFilter, after?: string) => void; fetchFeedHandler: (filterType: FeedFilter, after?: string) => void;

View File

@ -195,6 +195,7 @@ const UserPage = () => {
fetchFeedHandler={getFeedData} fetchFeedHandler={getFeedData}
isAdminUser={Boolean(isAdminUser)} isAdminUser={Boolean(isAdminUser)}
isFeedLoading={isFeedLoading} isFeedLoading={isFeedLoading}
isLoggedinUser={isLoggedinUser(username)}
paging={paging} paging={paging}
postFeedHandler={postFeedHandler} postFeedHandler={postFeedHandler}
updateUserDetails={updateUserDetails} updateUserDetails={updateUserDetails}