From 798af50d33bc0f1e81e1743fc9832c6aa658be8e Mon Sep 17 00:00:00 2001 From: Pawel Kowalczyk Date: Wed, 24 Apr 2019 12:41:56 +0200 Subject: [PATCH] render-items-from-links-inside-public-favorites-panel Feature #15120 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- .../favorite-panel-middleware-service.ts | 6 +-- .../public-favorites-middleware-service.ts | 37 +++++++++++++++++-- .../public-favorites-actions.ts | 8 ---- .../data-explorer/renderers.tsx | 32 +--------------- .../public-favorites-panel.tsx | 30 +++++++-------- 5 files changed, 53 insertions(+), 60 deletions(-) diff --git a/src/store/favorite-panel/favorite-panel-middleware-service.ts b/src/store/favorite-panel/favorite-panel-middleware-service.ts index e518482b50..868d7b0575 100644 --- a/src/store/favorite-panel/favorite-panel-middleware-service.ts +++ b/src/store/favorite-panel/favorite-panel-middleware-service.ts @@ -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(loadMissingProcessesInformation(response.items)); diff --git a/src/store/public-favorites-panel/public-favorites-middleware-service.ts b/src/store/public-favorites-panel/public-favorites-middleware-service.ts index c69f32b17a..be7f528595 100644 --- a/src/store/public-favorites-panel/public-favorites-middleware-service.ts +++ b/src/store/public-favorites-panel/public-favorites-middleware-service.ts @@ -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(updatePublicFavorites(response.items.map(item => item.headUuid))); + api.dispatch(updatePublicFavorites(response.items.map((item: any) => item.uuid))); } catch (e) { api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); api.dispatch(publicFavoritePanelActions.SET_ITEMS({ diff --git a/src/store/public-favorites/public-favorites-actions.ts b/src/store/public-favorites/public-favorites-actions.ts index b5aa9fcef7..50b9070baf 100644 --- a/src/store/public-favorites/public-favorites-actions.ts +++ b/src/store/public-favorites/public-favorites-actions.ts @@ -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(uuid)(getState().resources); - return resource!.headUuid; - }; - export const getIsAdmin = () => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const resource = getState().auth.user!.isAdmin; diff --git a/src/views-components/data-explorer/renderers.tsx b/src/views-components/data-explorer/renderers.tsx index 87e17c4f8f..5dc1e02aea 100644 --- a/src/views-components/data-explorer/renderers.tsx +++ b/src/views-components/data-explorer/renderers.tsx @@ -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 }) => - - - {renderIcon(item.headKind)} - - - - {item.name} - - - - - - - - - ; - -export const ResourceLinkNameAndIcon = connect( - (state: RootState, props: { uuid: string }) => { - const resource = getResource(props.uuid)(state.resources); - return resource || { name: '', headUuid: '', headKind: '' }; - })(renderLinkNameAndIcon); - -export const ResourceLinkType = connect( - (state: RootState, props: { uuid: string }) => { - const resource = getResource(props.uuid)(state.resources); - return { type: resource ? resource.headKind : '' }; - })((props: { type: string }) => renderType(props.type)); - // Process Resources const resourceRunProcess = (dispatch: Dispatch, uuid: string) => { return ( diff --git a/src/views/public-favorites-panel/public-favorites-panel.tsx b/src/views/public-favorites-panel/public-favorites-panel.tsx index 4a01c6f4b0..ab423a6e1b 100644 --- a/src/views/public-favorites-panel/public-favorites-panel.tsx +++ b/src/views/public-favorites-panel/public-favorites-panel.tsx @@ -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 = (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 = [ { - name: FavoritePanelColumnNames.NAME, + name: PublicFavoritePanelColumnNames.NAME, selected: true, configurable: true, sortDirection: SortDirection.NONE, filters: createTree(), - render: uuid => + render: uuid => }, { name: "Status", @@ -75,21 +75,21 @@ export const publicFavoritePanelColumns: DataColumns = [ render: uuid => }, { - name: FavoritePanelColumnNames.TYPE, + name: PublicFavoritePanelColumnNames.TYPE, selected: true, configurable: true, filters: getSimpleObjectTypeFilters(), - render: uuid => + render: uuid => }, { - name: FavoritePanelColumnNames.FILE_SIZE, + name: PublicFavoritePanelColumnNames.FILE_SIZE, selected: true, configurable: true, filters: createTree(), render: 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(getIsAdmin()); - const kind = resourceKindToContextMenuKind(dispatch(getHeadUuid(resourceUuid)), isAdmin); + const kind = resourceKindToContextMenuKind(resourceUuid, isAdmin); if (kind) { dispatch(openContextMenu(event, { name: '', - uuid: dispatch(getHeadUuid(resourceUuid)), + uuid: resourceUuid, ownerUuid: '', kind: ResourceKind.NONE, menuKind: kind })); } - dispatch(loadDetailsPanel(dispatch(getHeadUuid(resourceUuid)))); + dispatch(loadDetailsPanel(resourceUuid)); }, onDialogOpen: (ownerUuid: string) => { return; }, onItemClick: (uuid: string) => { - dispatch(loadDetailsPanel(dispatch(getHeadUuid(uuid)))); + dispatch(loadDetailsPanel(uuid)); }, onItemDoubleClick: uuid => { - dispatch(navigateTo(dispatch(getHeadUuid(uuid)))); + dispatch(navigateTo(uuid)); } }); -- 2.39.5