new-button-missing-in-several-places
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Wed, 17 Oct 2018 11:21:10 +0000 (13:21 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Wed, 17 Oct 2018 11:21:10 +0000 (13:21 +0200)
Feature #14318

Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>

src/views-components/side-panel-button/side-panel-button.tsx

index 9ba23267dd3a1025a6f2f96fec956c86e2090a9f..b4784bfe69c401b51e17a01d2b61c5ca13b524c2 100644 (file)
@@ -36,7 +36,12 @@ const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
 
 interface SidePanelDataProps {
     currentItemId: string;
-    buttonVisible: boolean;
+    isProjectRoute: boolean;
+    properties: Properties;
+}
+
+interface Properties {
+    breadcrumbs: Array<{uuid: string, label: string}>;
 }
 
 interface SidePanelState {
@@ -50,16 +55,26 @@ const transformOrigin: PopoverOrigin = {
     horizontal: 0
 };
 
-const isButtonVisible = ({ router }: RootState) => {
+const isProjectRoute = ({ router }: RootState) => {
     const pathname = router.location ? router.location.pathname : '';
     const match = matchProjectRoute(pathname);
     return !!match;
 };
 
+const isItemSharedWithMe = (properties: Properties) => {
+    if (properties.breadcrumbs) {
+        const isItemSharedWithMe = properties.breadcrumbs[0].label === 'Shared with me';
+        return isItemSharedWithMe;
+    } else {
+        return false;
+    }
+};
+
 export const SidePanelButton = withStyles(styles)(
     connect((state: RootState) => ({
         currentItemId: getProperty(PROJECT_PANEL_CURRENT_UUID)(state.properties),
-        buttonVisible: isButtonVisible(state)
+        isProjectRoute: isProjectRoute(state),
+        properties: state.properties
     }))(
         class extends React.Component<SidePanelProps> {
 
@@ -68,15 +83,16 @@ export const SidePanelButton = withStyles(styles)(
             };
 
             render() {
-                const { classes, buttonVisible } = this.props;
+                const { classes, isProjectRoute, properties } = this.props;
                 const { anchorEl } = this.state;
                 return <Toolbar>
-                    {buttonVisible && <Grid container>
+                    <Grid container>
                         <Grid container item xs alignItems="center" justify="flex-start">
                             <Button variant="contained" color="primary" size="small" className={classes.button}
                                 aria-owns={anchorEl ? 'aside-menu-list' : undefined}
                                 aria-haspopup="true"
-                                onClick={this.handleOpen}>
+                                onClick={this.handleOpen}
+                                disabled={!isProjectRoute || isItemSharedWithMe(properties)}>
                                 <AddIcon />
                                 New
                             </Button>
@@ -98,7 +114,7 @@ export const SidePanelButton = withStyles(styles)(
                                 </MenuItem>
                             </Menu>
                         </Grid>
-                    </Grid>}
+                    </Grid>
                 </Toolbar>;
             }