render-items-from-links-inside-public-favorites-panel 15120-content-from-shared-with-me-cannot-be-added-to-Public-Favorites
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Wed, 24 Apr 2019 10:41:56 +0000 (12:41 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Wed, 24 Apr 2019 10:41:56 +0000 (12:41 +0200)
Feature #15120

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

src/store/favorite-panel/favorite-panel-middleware-service.ts
src/store/public-favorites-panel/public-favorites-middleware-service.ts
src/store/public-favorites/public-favorites-actions.ts
src/views-components/data-explorer/renderers.tsx
src/views/public-favorites-panel/public-favorites-panel.tsx

index e518482b503905d20a455120528fa13681700a64..868d7b05753d0f0b7d9dc0dc006a1f1dd70a639a 100644 (file)
@@ -56,14 +56,14 @@ export class FavoritePanelMiddlewareService extends DataExplorerMiddlewareServic
             }
             try {
                 api.dispatch(progressIndicatorActions.START_WORKING(this.getId()));
-                const resp1 = await this.services.linkService.list({
+                const responseLinks = await this.services.linkService.list({
                     filters: new FilterBuilder()
                         .addEqual("linkClass", 'star')
                         .addEqual('tailUuid', this.services.authService.getUuid()!)
                         .addEqual('tailKind', ResourceKind.USER)
                         .getFilters()
                 }).then(results => results);
-                const uuids = resp1.items.map(it => it.headUuid);
+                const uuids = responseLinks.items.map(it => it.headUuid);
                 const groupItems: any = await this.services.groupsService.list({
                     filters: new FilterBuilder()
                         .addIn("uuid", uuids)
@@ -94,7 +94,7 @@ export class FavoritePanelMiddlewareService extends DataExplorerMiddlewareServic
                     response.itemsAvailable++;
                     response.items.push(it);
                 });
-
+                
                 api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId()));
                 api.dispatch(resourcesActions.SET_RESOURCES(response.items));
                 await api.dispatch<any>(loadMissingProcessesInformation(response.items));
index c69f32b17acbb9430ff80c0f8b18145e218e464a..be7f5285953df1fcf0e2feb36b01792a95cd3174 100644 (file)
@@ -55,7 +55,7 @@ export class PublicFavoritesMiddlewareService extends DataExplorerMiddlewareServ
                 api.dispatch(progressIndicatorActions.START_WORKING(this.getId()));
                 const uuidPrefix = api.getState().config.uuidPrefix;
                 const uuid = `${uuidPrefix}-j7d0g-fffffffffffffff`;
-                const response = await this.services.linkService.list({
+                const responseLinks = await this.services.linkService.list({
                     limit: dataExplorer.rowsPerPage,
                     offset: dataExplorer.page * dataExplorer.rowsPerPage,
                     filters: new FilterBuilder()
@@ -65,15 +65,46 @@ export class PublicFavoritesMiddlewareService extends DataExplorerMiddlewareServ
                         .addIsA("headUuid", typeFilters)
                         .getFilters()
                 });
+                const uuids = responseLinks.items.map(it => it.headUuid);
+                const groupItems: any = await this.services.groupsService.list({
+                    filters: new FilterBuilder()
+                        .addIn("uuid", uuids)
+                        .addILike("name", dataExplorer.searchValue)
+                        .addIsA("uuid", typeFilters)
+                        .getFilters()
+                });
+                const collectionItems: any = await this.services.collectionService.list({
+                    filters: new FilterBuilder()
+                        .addIn("uuid", uuids)
+                        .addILike("name", dataExplorer.searchValue)
+                        .addIsA("uuid", typeFilters)
+                        .getFilters()
+                });
+                const processItems: any = await this.services.containerRequestService.list({
+                    filters: new FilterBuilder()
+                        .addIn("uuid", uuids)
+                        .addILike("name", dataExplorer.searchValue)
+                        .addIsA("uuid", typeFilters)
+                        .getFilters()
+                });
+                const response = groupItems;
+                collectionItems.items.map((it: any) => {
+                    response.itemsAvailable++;
+                    response.items.push(it);
+                });
+                processItems.items.map((it: any) => {
+                    response.itemsAvailable++;
+                    response.items.push(it);
+                });
                 api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId()));
                 api.dispatch(resourcesActions.SET_RESOURCES(response.items));
                 api.dispatch(publicFavoritePanelActions.SET_ITEMS({
-                    items: response.items.map(resource => resource.uuid),
+                    items: response.items.map((resource: any) => resource.uuid),
                     itemsAvailable: response.itemsAvailable,
                     page: Math.floor(response.offset / response.limit),
                     rowsPerPage: response.limit
                 }));
-                api.dispatch<any>(updatePublicFavorites(response.items.map(item => item.headUuid)));
+                api.dispatch<any>(updatePublicFavorites(response.items.map((item: any) => item.uuid)));
             } catch (e) {
                 api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId()));
                 api.dispatch(publicFavoritePanelActions.SET_ITEMS({
index b5aa9fcef70d202bd0ddb2244577b2de86020ebb..50b9070baf0987ab6ec64c4624cf301dee96d02d 100644 (file)
@@ -9,8 +9,6 @@ import { checkPublicFavorite } from "./public-favorites-reducer";
 import { snackbarActions, SnackbarKind } from "~/store/snackbar/snackbar-actions";
 import { ServiceRepository } from "~/services/services";
 import { progressIndicatorActions } from "~/store/progress-indicator/progress-indicator-actions";
-import { getResource } from '~/store/resources/resources';
-import { LinkResource } from "~/models/link";
 
 export const publicFavoritesActions = unionize({
     TOGGLE_PUBLIC_FAVORITE: ofType<{ resourceUuid: string }>(),
@@ -69,12 +67,6 @@ export const updatePublicFavorites = (resourceUuids: string[]) =>
             });
     };
 
-export const getHeadUuid = (uuid: string) =>
-    (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-        const resource = getResource<LinkResource>(uuid)(getState().resources);
-        return resource!.headUuid;
-    };
-
 export const getIsAdmin = () =>
     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
         const resource = getState().auth.user!.isAdmin;
index 87e17c4f8fc811728c5d568a790c7933abe0c44b..5dc1e02aea789f72c55bdb3bd4c1793ec32f1bdd 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { Grid, Typography, withStyles, Tooltip, IconButton, Checkbox, Button } from '@material-ui/core';
+import { Grid, Typography, withStyles, Tooltip, IconButton, Checkbox } from '@material-ui/core';
 import { FavoriteStar, PublicFavoriteStar } from '../favorite-star/favorite-star';
 import { ResourceKind, TrashableResource } from '~/models/resource';
 import { ProjectIcon, CollectionIcon, ProcessIcon, DefaultIcon, WorkflowIcon, ShareIcon } from '~/components/icon/icon';
@@ -327,36 +327,6 @@ export const ResourceLinkUuid = connect(
         return resource || { uuid: '' };
     })(renderUuid);
 
-const renderLinkNameAndIcon = (item: { name: string; headUuid: string, headKind: string }) =>
-    <Grid container alignItems="center" wrap="nowrap" spacing={16}>
-        <Grid item>
-            {renderIcon(item.headKind)}
-        </Grid>
-        <Grid item>
-            <Typography color="primary" style={{ width: 'auto' }}>
-                {item.name}
-            </Typography>
-        </Grid>
-        <Grid item>
-            <Typography variant="caption">
-                <FavoriteStar resourceUuid={item.headUuid} />
-                <PublicFavoriteStar resourceUuid={item.headUuid} />
-            </Typography>
-        </Grid>
-    </Grid>;
-
-export const ResourceLinkNameAndIcon = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<LinkResource>(props.uuid)(state.resources);
-        return resource || { name: '', headUuid: '', headKind: '' };
-    })(renderLinkNameAndIcon);
-
-export const ResourceLinkType = connect(
-    (state: RootState, props: { uuid: string }) => {
-        const resource = getResource<LinkResource>(props.uuid)(state.resources);
-        return { type: resource ? resource.headKind : '' };
-    })((props: { type: string }) => renderType(props.type));
-
 // Process Resources
 const resourceRunProcess = (dispatch: Dispatch, uuid: string) => {
     return (
index 4a01c6f4b0d9a46b35cc9b04b776a4ab84552ade..ab423a6e1b6c10d3106586e8e25cedf1a7235487 100644 (file)
@@ -16,8 +16,8 @@ import {
     ProcessStatus,
     ResourceFileSize,
     ResourceLastModifiedDate,
-    ResourceLinkNameAndIcon,
-    ResourceLinkType
+    ResourceType,
+    ResourceName
 } from '~/views-components/data-explorer/renderers';
 import { PublicFavoriteIcon } from '~/components/icon/icon';
 import { Dispatch } from 'redux';
@@ -31,7 +31,7 @@ import { createTree } from '~/models/tree';
 import { getSimpleObjectTypeFilters } from '~/store/resource-type-filters/resource-type-filters';
 import { PUBLIC_FAVORITE_PANEL_ID } from '~/store/public-favorites-panel/public-favorites-action';
 import { PublicFavoritesState } from '~/store/public-favorites/public-favorites-reducer';
-import { getHeadUuid, getIsAdmin } from '~/store/public-favorites/public-favorites-actions';
+import { getIsAdmin } from '~/store/public-favorites/public-favorites-actions';
 
 type CssRules = "toolbar" | "button";
 
@@ -45,7 +45,7 @@ const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
     },
 });
 
-export enum FavoritePanelColumnNames {
+export enum PublicFavoritePanelColumnNames {
     NAME = "Name",
     STATUS = "Status",
     TYPE = "Type",
@@ -60,12 +60,12 @@ export interface FavoritePanelFilter extends DataTableFilterItem {
 
 export const publicFavoritePanelColumns: DataColumns<string> = [
     {
-        name: FavoritePanelColumnNames.NAME,
+        name: PublicFavoritePanelColumnNames.NAME,
         selected: true,
         configurable: true,
         sortDirection: SortDirection.NONE,
         filters: createTree(),
-        render: uuid => <ResourceLinkNameAndIcon uuid={uuid} />
+        render: uuid => <ResourceName uuid={uuid} />
     },
     {
         name: "Status",
@@ -75,21 +75,21 @@ export const publicFavoritePanelColumns: DataColumns<string> = [
         render: uuid => <ProcessStatus uuid={uuid} />
     },
     {
-        name: FavoritePanelColumnNames.TYPE,
+        name: PublicFavoritePanelColumnNames.TYPE,
         selected: true,
         configurable: true,
         filters: getSimpleObjectTypeFilters(),
-        render: uuid => <ResourceLinkType uuid={uuid} />
+        render: uuid => <ResourceType uuid={uuid} />
     },
     {
-        name: FavoritePanelColumnNames.FILE_SIZE,
+        name: PublicFavoritePanelColumnNames.FILE_SIZE,
         selected: true,
         configurable: true,
         filters: createTree(),
         render: uuid => <ResourceFileSize uuid={uuid} />
     },
     {
-        name: FavoritePanelColumnNames.LAST_MODIFIED,
+        name: PublicFavoritePanelColumnNames.LAST_MODIFIED,
         selected: true,
         configurable: true,
         sortDirection: SortDirection.DESC,
@@ -115,24 +115,24 @@ const mapStateToProps = ({ publicFavorites }: RootState): PublicFavoritePanelDat
 const mapDispatchToProps = (dispatch: Dispatch): PublicFavoritePanelActionProps => ({
     onContextMenu: (event, resourceUuid) => {
         const isAdmin = dispatch<any>(getIsAdmin());
-        const kind = resourceKindToContextMenuKind(dispatch<any>(getHeadUuid(resourceUuid)), isAdmin);
+        const kind = resourceKindToContextMenuKind(resourceUuid, isAdmin);
         if (kind) {
             dispatch<any>(openContextMenu(event, {
                 name: '',
-                uuid: dispatch<any>(getHeadUuid(resourceUuid)),
+                uuid: resourceUuid,
                 ownerUuid: '',
                 kind: ResourceKind.NONE,
                 menuKind: kind
             }));
         }
-        dispatch<any>(loadDetailsPanel(dispatch<any>(getHeadUuid(resourceUuid))));
+        dispatch<any>(loadDetailsPanel(resourceUuid));
     },
     onDialogOpen: (ownerUuid: string) => { return; },
     onItemClick: (uuid: string) => {
-        dispatch<any>(loadDetailsPanel(dispatch<any>(getHeadUuid(uuid))));
+        dispatch<any>(loadDetailsPanel(uuid));
     },
     onItemDoubleClick: uuid => {
-        dispatch<any>(navigateTo(dispatch<any>(getHeadUuid(uuid))));
+        dispatch<any>(navigateTo(uuid));
     }
 });