render-icon-if-public-favorite-and-actions-for-processes-and-projects
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 2 Apr 2019 08:14:08 +0000 (10:14 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 2 Apr 2019 08:14:08 +0000 (10:14 +0200)
Feature #14941

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

src/views-components/context-menu/action-sets/process-resource-admin-action-set.ts
src/views-components/context-menu/action-sets/project-admin-action-set.ts
src/views-components/data-explorer/renderers.tsx
src/views-components/public-favorite-icon/public-favorite-icon.tsx [new file with mode: 0644]

index e0cb796b833947bc9d318f67ab10fba982c9c8d4..5bac51fba9096e478165344166aabdfb78d9e749 100644 (file)
@@ -14,6 +14,8 @@ import { openSharingDialog } from "~/store/sharing-dialog/sharing-dialog-actions
 import { openRemoveProcessDialog } from "~/store/processes/processes-actions";
 import { toggleDetailsPanel } from '~/store/details-panel/details-panel-action';
 import { TogglePublicFavoriteAction } from "~/views-components/context-menu/actions/public-favorite-action";
+import { togglePublicFavorite } from "~/store/public-favorites/public-favorites-actions";
+import { publicFavoritePanelActions } from "~/store/public-favorites-panel/public-favorites-action";
 
 export const processResourceAdminActionSet: ContextMenuActionSet = [[
     {
@@ -41,8 +43,8 @@ export const processResourceAdminActionSet: ContextMenuActionSet = [[
     {
         component: TogglePublicFavoriteAction,
         execute: (dispatch, resource) => {
-            dispatch<any>(toggleFavorite(resource)).then(() => {
-                dispatch<any>(favoritePanelActions.REQUEST_ITEMS());
+            dispatch<any>(togglePublicFavorite(resource)).then(() => {
+                dispatch<any>(publicFavoritePanelActions.REQUEST_ITEMS());
             });
         }
     },
index 1076696a19a6e72960b51e2f013cb7d29e133447..f6185804406321a27b36149c1029f3dca3bcea53 100644 (file)
@@ -17,6 +17,8 @@ import { openSharingDialog } from "~/store/sharing-dialog/sharing-dialog-actions
 import { openAdvancedTabDialog } from "~/store/advanced-tab/advanced-tab";
 import { toggleDetailsPanel } from '~/store/details-panel/details-panel-action';
 import { TogglePublicFavoriteAction } from "~/views-components/context-menu/actions/public-favorite-action";
+import { togglePublicFavorite } from "~/store/public-favorites/public-favorites-actions";
+import { publicFavoritePanelActions } from "~/store/public-favorites-panel/public-favorites-action";
 
 export const projectAdminActionSet: ContextMenuActionSet = [[
     {
@@ -51,8 +53,8 @@ export const projectAdminActionSet: ContextMenuActionSet = [[
     {
         component: TogglePublicFavoriteAction,
         execute: (dispatch, resource) => {
-            dispatch<any>(toggleFavorite(resource)).then(() => {
-                dispatch<any>(favoritePanelActions.REQUEST_ITEMS());
+            dispatch<any>(togglePublicFavorite(resource)).then(() => {
+                dispatch<any>(publicFavoritePanelActions.REQUEST_ITEMS());
             });
         }
     },
index be0fc793a3cb8716d879f1e8400c5acfacdd3e78..8ca4deff6e93a8eee3d68a2cdb7b14a4fdce4a16 100644 (file)
@@ -25,7 +25,8 @@ import { UserResource } from '~/models/user';
 import { toggleIsActive, toggleIsAdmin } from '~/store/users/users-actions';
 import { LinkResource } from '~/models/link';
 import { navigateTo } from '~/store/navigation/navigation-action';
-import { withResource, getDataFromResource, withResourceData } from '~/views-components/data-explorer/with-resources';
+import { withResourceData } from '~/views-components/data-explorer/with-resources';
+import { PublicFavorite } from '~/views-components/public-favorite-icon/public-favorite-icon';
 
 const renderName = (item: { name: string; uuid: string, kind: string }) =>
     <Grid container alignItems="center" wrap="nowrap" spacing={16}>
@@ -42,6 +43,11 @@ const renderName = (item: { name: string; uuid: string, kind: string }) =>
                 <FavoriteStar resourceUuid={item.uuid} />
             </Typography>
         </Grid>
+        <Grid item>
+            <Typography variant="caption">
+                <PublicFavorite resourceUuid={item.uuid} />
+            </Typography>
+        </Grid>
     </Grid>;
 
 export const ResourceName = connect(
@@ -284,13 +290,13 @@ const renderLinkTail = (dispatch: Dispatch, item: { uuid: string, tailUuid: stri
     const currentLabel = resourceLabel(item.tailKind);
     const isUnknow = currentLabel === "Unknown";
     return (<div>
-        { !isUnknow  ? (
-                renderLink(dispatch, item.tailUuid, currentLabel)
-            ) : (
+        {!isUnknow ? (
+            renderLink(dispatch, item.tailUuid, currentLabel)
+        ) : (
                 <Typography noWrap color="default">
                     {item.tailUuid}
                 </Typography>
-        )}
+            )}
     </div>);
 };
 
diff --git a/src/views-components/public-favorite-icon/public-favorite-icon.tsx b/src/views-components/public-favorite-icon/public-favorite-icon.tsx
new file mode 100644 (file)
index 0000000..30b3aa9
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from "react";
+import { FavoriteIcon } from "~/components/icon/icon";
+import { connect } from "react-redux";
+import { RootState } from "~/store/store";
+import { withStyles, StyleRulesCallback, WithStyles } from "@material-ui/core";
+
+type CssRules = "icon";
+
+const styles: StyleRulesCallback<CssRules> = theme => ({
+    icon: {
+        fontSize: "inherit"
+    }
+});
+
+const mapStateToProps = (state: RootState, props: { resourceUuid: string; className?: string; }) => ({
+    ...props,
+    visible: state.publicFavorites[props.resourceUuid],
+});
+
+export const PublicFavorite = connect(mapStateToProps)(
+    withStyles(styles)((props: { visible: boolean; className?: string; } & WithStyles<CssRules>) =>
+        props.visible ? <FavoriteIcon className={props.className || props.classes.icon} /> : null
+    ));