Merge branch 'main' into 18692-frozen-projects-workbench-support
[arvados-workbench2.git] / src / views-components / context-menu / actions / lock-action.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import React from "react";
6 import { ListItemIcon, ListItemText, ListItem } from "@material-ui/core";
7 import { LockIcon, UnlockIcon } 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";
12
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     onClick: props.onClick
17 });
18
19 export const ToggleLockAction = withRouter(connect(mapStateToProps)((props: { isLocked: boolean, isAdmin: boolean, onClick: () => void } & RouteComponentProps) =>
20     props.isLocked && !props.isAdmin ? null :
21         < ListItem
22             button
23             onClick={props.onClick} >
24             <ListItemIcon>
25                 {props.isLocked
26                     ? <UnlockIcon />
27                     : <LockIcon />}
28             </ListItemIcon>
29             <ListItemText style={{ textDecoration: 'none' }}>
30                 {props.isLocked
31                     ? <>Unfreeze project</>
32                     : <>Freeze project</>}
33             </ListItemText>
34         </ListItem >));