18559: Add context menu filter system for more complex context menus on user profile.
[arvados-workbench2.git] / src / views-components / context-menu / action-sets / user-action-set.ts
index 6511b9a052bfb76ee5ea005399a8242394c8fff0..c298e1ab33ba1ac24564acbbee1f0d8bbb0f2040 100644 (file)
@@ -17,6 +17,7 @@ import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
 import { loginAs, openUserAttributes, openUserProjects } from "store/users/users-actions";
 import { openSetupDialog, openDeactivateDialog, openActivateDialog } from "store/user-profile/user-profile-actions";
 import { navigateToUserProfile } from "store/navigation/navigation-action";
+import { canActivateUser, canDeactivateUser, canSetupUser, isAdmin, needsUserProfileLink, isOtherUser } from "store/context-menu/context-menu-filters";
 
 export const userActionSet: ContextMenuActionSet = [[{
     name: "Attributes",
@@ -41,35 +42,46 @@ export const userActionSet: ContextMenuActionSet = [[{
     icon: UserPanelIcon,
     execute: (dispatch, { uuid }) => {
         dispatch<any>(navigateToUserProfile(uuid));
-    }
-},], [{
+    },
+    filters: [needsUserProfileLink]
+}],[{
     name: "Activate User",
-    adminOnly: true,
     icon: ActiveIcon,
     execute: (dispatch, { uuid }) => {
         dispatch<any>(openActivateDialog(uuid));
-    }
-},{
+    },
+    filters: [
+        isAdmin,
+        canActivateUser,
+    ],
+}, {
     name: "Setup User",
-    adminOnly: true,
     icon: AdminMenuIcon,
     execute: (dispatch, { uuid }) => {
         dispatch<any>(openSetupDialog(uuid));
-    }
+    },
+    filters: [
+        isAdmin,
+        canSetupUser,
+    ],
 }, {
     name: "Deactivate User",
-    adminOnly: true,
     icon: DeactivateUserIcon,
     execute: (dispatch, { uuid }) => {
         dispatch<any>(openDeactivateDialog(uuid));
-    }
+    },
+    filters: [
+        isAdmin,
+        canDeactivateUser,
+    ],
 }, {
     name: "Login As User",
-    adminOnly: true,
     icon: LoginAsIcon,
     execute: (dispatch, { uuid }) => {
         dispatch<any>(loginAs(uuid));
-    }
-},
-
-]];
+    },
+    filters: [
+        isAdmin,
+        isOtherUser,
+    ],
+}]];