16439: Disables +NEW button even on trashed subprojects. 16439-objects-creation-placement-fix
authorLucas Di Pentima <lucas@di-pentima.com.ar>
Tue, 2 Jun 2020 19:05:22 +0000 (16:05 -0300)
committerLucas Di Pentima <lucas@di-pentima.com.ar>
Tue, 2 Jun 2020 19:05:22 +0000 (16:05 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas@di-pentima.com.ar>

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

index 4e2e90f16b4be5c31a4d26897d4edd9325cd3de1..5e547740a1231b25a52fa24207716f40f5cb0acd 100644 (file)
@@ -17,6 +17,7 @@ import { getUserUuid } from '~/common/getuser';
 import { matchProjectRoute } from '~/routes/routes';
 import { GroupResource } from '~/models/group';
 import { ResourcesState, getResource } from '~/store/resources/resources';
+import { extractUuidKind, ResourceKind } from '~/models/resource';
 
 type CssRules = 'button' | 'menuItem' | 'icon';
 
@@ -53,6 +54,13 @@ const transformOrigin: PopoverOrigin = {
     horizontal: 0
 };
 
+const isProjectTrashed = (proj: GroupResource, resources: ResourcesState): boolean => {
+    if (proj.isTrashed) { return true; }
+    if (extractUuidKind(proj.ownerUuid) === ResourceKind.USER) { return false; }
+    const parentProj = getResource<GroupResource>(proj.ownerUuid)(resources);
+    return isProjectTrashed(parentProj!, resources);
+};
+
 export const SidePanelButton = withStyles(styles)(
     connect((state: RootState) => ({
         currentItemId: state.router.location
@@ -78,7 +86,7 @@ export const SidePanelButton = withStyles(styles)(
                     const currentProject = getResource<GroupResource>(currentItemId)(resources);
                     if (currentProject &&
                         currentProject.writableBy.indexOf(currentUserUUID || '') >= 0 &&
-                        !currentProject.isTrashed) {
+                        !isProjectTrashed(currentProject, resources)) {
                         enabled = true;
                     }
                 }