import { getUuidPrefix, openRunProcess } from 'store/workflow-panel/workflow-panel-actions';
import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
import { getUserFullname, getUserDisplayName, User, UserResource } from 'models/user';
-import { toggleIsActive, toggleIsAdmin } from 'store/users/users-actions';
+import { toggleIsAdmin } from 'store/users/users-actions';
import { LinkClass, LinkResource } from 'models/link';
import { navigateTo, navigateToGroupDetails, navigateToUserProfile } from 'store/navigation/navigation-action';
import { withResourceData } from 'views-components/data-explorer/with-resources';
import { openPermissionEditContextMenu } from 'store/context-menu/context-menu-actions';
import { getUserUuid } from 'common/getuser';
import { VirtualMachinesResource } from 'models/virtual-machines';
+import { CopyToClipboardSnackbar } from 'components/copy-to-clipboard-snackbar/copy-to-clipboard-snackbar';
const renderName = (dispatch: Dispatch, item: GroupContentsResource) => {
return {item: resource || { uuid: '', firstName: '', lastName: '' }, link: props.link};
})((props: {item: {uuid: string, firstName: string, lastName: string}, link?: boolean} & DispatchProp<any>) => renderFullName(props.dispatch, props.item, props.link));
-
const renderUuid = (item: { uuid: string }) =>
- <Typography data-cy="uuid" noWrap>{item.uuid}</Typography>;
+ <Typography data-cy="uuid" noWrap>
+ {item.uuid}
+ <CopyToClipboardSnackbar value={item.uuid} />
+ </Typography>;
-export const ResourceUuid = connect(
- (state: RootState, props: { uuid: string }) => {
- const resource = getResource<UserResource>(props.uuid)(state.resources);
- return resource || { uuid: '' };
- })(renderUuid);
+export const ResourceUuid = connect((state: RootState, props: { uuid: string }) => (
+ getResource<UserResource>(props.uuid)(state.resources) || { uuid: '' }
+ ))(renderUuid);
const renderEmail = (item: { email: string }) =>
<Typography noWrap>{item.email}</Typography>;
return resource || { email: '' };
})(renderEmail);
-const renderIsActive = (props: { uuid: string, kind: ResourceKind, isActive: boolean, toggleIsActive: (uuid: string) => void, disabled?: boolean }) => {
- if (props.kind === ResourceKind.USER) {
- return <Checkbox
- color="primary"
- checked={props.isActive}
- disabled={!!props.disabled}
- onClick={(e) => {
- e.stopPropagation();
- props.toggleIsActive(props.uuid)
- }} />;
- } else {
- return <Typography />;
- }
-}
-
-export const ResourceIsActive = connect(
- (state: RootState, props: { uuid: string, disabled?: boolean }) => {
- const resource = getResource<UserResource>(props.uuid)(state.resources);
- return resource ? {...resource, disabled: !!props.disabled} : { isActive: false, kind: ResourceKind.NONE };
- }, { toggleIsActive }
-)(renderIsActive);
-
enum UserAccountStatus {
ACTIVE = 'Active',
INACTIVE = 'Inactive',
SETUP = 'Setup',
- UNKNOWN = 'UNKNOWN'
+ UNKNOWN = ''
}
const renderAccountStatus = (props: {status: UserAccountStatus}) =>
- <Grid container alignItems="center" wrap="nowrap" spacing={8}>
+ <Grid container alignItems="center" wrap="nowrap" spacing={8} data-cy="account-status">
<Grid item>
{(() => {
switch(props.status) {
case UserAccountStatus.ACTIVE:
- return <ActiveIcon style={{color: '#4caf50'}} />;
+ return <ActiveIcon style={{color: '#4caf50', verticalAlign: "middle"}} />;
case UserAccountStatus.SETUP:
- return <SetupIcon style={{color: '#2196f3'}} />;
+ return <SetupIcon style={{color: '#2196f3', verticalAlign: "middle"}} />;
case UserAccountStatus.INACTIVE:
- return <InactiveIcon style={{color: '#9e9e9e'}} />;
+ return <InactiveIcon style={{color: '#9e9e9e', verticalAlign: "middle"}} />;
default:
- return <InactiveIcon />;
+ return <></>;
}
})()}
</Grid>
</Grid>
</Grid>;
-export const UserResourceAccountStatus = connect(
- (state: RootState, props: { uuid: string }) => {
- const user = getResource<UserResource>(props.uuid)(state.resources);
- // Get membership links for all users group
- const allUsersGroupUuid = getBuiltinGroupUuid(state.auth.localCluster, BuiltinGroups.ALL);
- const permissions = filterResources((resource: LinkResource) =>
- resource.kind === ResourceKind.LINK &&
- resource.linkClass === LinkClass.PERMISSION &&
- resource.headUuid === allUsersGroupUuid &&
- resource.tailUuid === props.uuid
- )(state.resources);
-
- if (user) {
- return user.isActive ? {status: UserAccountStatus.ACTIVE} : permissions.length > 0 ? {status: UserAccountStatus.SETUP} : {status: UserAccountStatus.INACTIVE};
- } else {
- return {status: UserAccountStatus.UNKNOWN};
- }
- })(renderAccountStatus);
+const getUserAccountStatus = (state: RootState, props: { uuid: string }) => {
+ const user = getResource<UserResource>(props.uuid)(state.resources);
+ // Get membership links for all users group
+ const allUsersGroupUuid = getBuiltinGroupUuid(state.auth.localCluster, BuiltinGroups.ALL);
+ const permissions = filterResources((resource: LinkResource) =>
+ resource.kind === ResourceKind.LINK &&
+ resource.linkClass === LinkClass.PERMISSION &&
+ resource.headUuid === allUsersGroupUuid &&
+ resource.tailUuid === props.uuid
+ )(state.resources);
+
+ if (user) {
+ return user.isActive ? {status: UserAccountStatus.ACTIVE} : permissions.length > 0 ? {status: UserAccountStatus.SETUP} : {status: UserAccountStatus.INACTIVE};
+ } else {
+ return {status: UserAccountStatus.UNKNOWN};
+ }
+}
-export const ResourceLinkTailIsActive = connect(
- (state: RootState, props: { uuid: string, disabled?: boolean }) => {
+export const ResourceLinkTailAccountStatus = connect(
+ (state: RootState, props: { uuid: string }) => {
const link = getResource<LinkResource>(props.uuid)(state.resources);
- const tailResource = getResource<UserResource>(link?.tailUuid || '')(state.resources);
+ return link && link.tailKind === ResourceKind.USER ? getUserAccountStatus(state, {uuid: link.tailUuid}) : {status: UserAccountStatus.UNKNOWN};
+ })(renderAccountStatus);
- return tailResource ? {...tailResource, disabled: !!props.disabled} : { isActive: false, kind: ResourceKind.NONE };
- }, { toggleIsActive }
-)(renderIsActive);
+export const UserResourceAccountStatus = connect(getUserAccountStatus)(renderAccountStatus);
const renderIsHidden = (props: {
memberLinkUuid: string,