1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from "react";
6 import { ListItemIcon, ListItemText, ListItem } from "@material-ui/core";
7 import { FreezeIcon, UnfreezeIcon } from "components/icon/icon";
8 import { connect } from "react-redux";
9 import { RootState } from "store/store";
10 import { ProjectResource } from "models/project";
11 import { withRouter, RouteComponentProps } from "react-router";
13 const mapStateToProps = (state: RootState, props: { onClick: () => {} }) => ({
14 isAdmin: !!state.auth.user?.isAdmin,
15 isLocked: !!(state.resources[state.contextMenu.resource!.uuid] as ProjectResource).frozenByUuid,
16 canManage: (state.resources[state.contextMenu.resource!.uuid] as ProjectResource).canManage,
17 canUnfreeze: !state.auth.remoteHostsConfig[state.auth.homeCluster]?.clusterConfig?.API?.UnfreezeProjectRequiresAdmin,
18 onClick: props.onClick
21 export const ToggleLockAction = withRouter(connect(mapStateToProps)((props: { state: RootState, isAdmin: boolean, isLocked: boolean, canManage: boolean, canUnfreeze: boolean, onClick: () => void } & RouteComponentProps) =>
22 (props.canManage && !props.isLocked) || (props.isLocked && props.canManage && (props.canUnfreeze || props.isAdmin)) ?
25 onClick={props.onClick} >
31 <ListItemText style={{ textDecoration: 'none' }}>
33 ? <>Unfreeze project</>
34 : <>Freeze project</>}
36 </ListItem > : null));