Merge branch '21128-toolbar-context-menu'
[arvados-workbench2.git] / src / views-components / context-menu / actions / lock-action.tsx
index 785de5831f156574afd40496d2e9644e9428eb23..99eb756db985a270084884bdb44e2fae3135d732 100644 (file)
@@ -4,33 +4,42 @@
 
 import React from "react";
 import { ListItemIcon, ListItemText, ListItem } from "@material-ui/core";
-import { LockIcon, UnlockIcon } from "components/icon/icon";
+import { FreezeIcon, UnfreezeIcon } from "components/icon/icon";
 import { connect } from "react-redux";
 import { RootState } from "store/store";
 import { ProjectResource } from "models/project";
 import { withRouter, RouteComponentProps } from "react-router";
+import { resourceIsFrozen } from "common/frozen-resources";
 
 const mapStateToProps = (state: RootState, props: { onClick: () => {} }) => ({
     isAdmin: !!state.auth.user?.isAdmin,
     isLocked: !!(state.resources[state.contextMenu.resource!.uuid] as ProjectResource).frozenByUuid,
     canManage: (state.resources[state.contextMenu.resource!.uuid] as ProjectResource).canManage,
     canUnfreeze: !state.auth.remoteHostsConfig[state.auth.homeCluster]?.clusterConfig?.API?.UnfreezeProjectRequiresAdmin,
+    resource: state.contextMenu.resource,
+    resources: state.resources,
     onClick: props.onClick
 });
 
-export const ToggleLockAction = withRouter(connect(mapStateToProps)((props: { state: RootState, isAdmin: boolean, isLocked: boolean, canManage: boolean, canUnfreeze: boolean, onClick: () => void } & RouteComponentProps) =>
+export const ToggleLockAction = withRouter(connect(mapStateToProps)((props: {
+    resource: any,
+    resources: any,
+    onClick: () => void,
+    state: RootState, isAdmin: boolean, isLocked: boolean, canManage: boolean, canUnfreeze: boolean,
+} & RouteComponentProps) =>
     (props.canManage && !props.isLocked) || (props.isLocked && props.canManage && (props.canUnfreeze || props.isAdmin))  ? 
-        < ListItem
-            button
-            onClick={props.onClick} >
-            <ListItemIcon>
-                {props.isLocked
-                    ? <UnlockIcon />
-                    : <LockIcon />}
-            </ListItemIcon>
-            <ListItemText style={{ textDecoration: 'none' }}>
-                {props.isLocked
-                    ? <>Unfreeze project</>
-                    : <>Freeze project</>}
-            </ListItemText>
-        </ListItem > : null));
+        resourceIsFrozen(props.resource, props.resources) ? null :
+            <ListItem
+                button
+                onClick={props.onClick} >
+                <ListItemIcon>
+                    {props.isLocked
+                        ? <UnfreezeIcon />
+                        : <FreezeIcon />}
+                </ListItemIcon>
+                <ListItemText style={{ textDecoration: 'none' }}>
+                    {props.isLocked
+                        ? <>Unfreeze project</>
+                        : <>Freeze project</>}
+                </ListItemText>
+            </ListItem > : null));