From: Stephen Smith Date: Thu, 24 Mar 2022 00:30:40 +0000 (-0400) Subject: 18559: Combine firstName and lastName users column, add link navigation, fix sorting X-Git-Tag: 2.4.0~1^2~22 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/09b2d7a937291e1e74d773a4227c4cfc63c30972 18559: Combine firstName and lastName users column, add link navigation, fix sorting Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- diff --git a/src/store/users/user-panel-middleware-service.ts b/src/store/users/user-panel-middleware-service.ts index 4496cbd2..2a742353 100644 --- a/src/store/users/user-panel-middleware-service.ts +++ b/src/store/users/user-panel-middleware-service.ts @@ -75,13 +75,23 @@ export const getOrder = (dataExplorer: DataExplorer) => { const sortDirection = sortColumn && sortColumn.sortDirection === SortDirection.ASC ? OrderDirection.ASC : OrderDirection.DESC; - const columnName = sortColumn && sortColumn.name === UserPanelColumnNames.LAST_NAME ? "lastName" : "firstName"; - return order - .addOrder(sortDirection, columnName) - .getOrder(); - } else { - return order.getOrder(); + switch (sortColumn.name) { + case UserPanelColumnNames.NAME: + order.addOrder(sortDirection, "firstName") + .addOrder(sortDirection, "lastName"); + break; + case UserPanelColumnNames.UUID: + order.addOrder(sortDirection, "uuid"); + break; + case UserPanelColumnNames.EMAIL: + order.addOrder(sortDirection, "email"); + break; + case UserPanelColumnNames.USERNAME: + order.addOrder(sortDirection, "username"); + break; + } } + return order.getOrder(); }; export const setItems = (listResults: ListResults) => @@ -94,4 +104,4 @@ const couldNotFetchUsers = () => snackbarActions.OPEN_SNACKBAR({ message: 'Could not fetch users.', kind: SnackbarKind.ERROR - }); \ No newline at end of file + }); diff --git a/src/views-components/data-explorer/renderers.tsx b/src/views-components/data-explorer/renderers.tsx index 7cdd9b83..5068355b 100644 --- a/src/views-components/data-explorer/renderers.tsx +++ b/src/views-components/data-explorer/renderers.tsx @@ -23,7 +23,7 @@ import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions'; import { getUserFullname, getUserDisplayName, User, UserResource } from 'models/user'; import { toggleIsActive, toggleIsAdmin } from 'store/users/users-actions'; import { LinkClass, LinkResource } from 'models/link'; -import { navigateTo, navigateToGroupDetails } from 'store/navigation/navigation-action'; +import { navigateTo, navigateToGroupDetails, navigateToUserProfile } from 'store/navigation/navigation-action'; import { withResourceData } from 'views-components/data-explorer/with-resources'; import { CollectionResource } from 'models/collection'; import { IllegalNamingWarning } from 'components/warning/warning'; @@ -161,14 +161,22 @@ export const ResourceLastName = connect( return resource || { lastName: '' }; })(renderLastName); -const renderFullName = (item: { firstName: string, lastName: string }) => - {(item.firstName + " " + item.lastName).trim()}; +const renderFullName = (dispatch: Dispatch ,item: { uuid: string, firstName: string, lastName: string }, link?: boolean) => { + const displayName = (item.firstName + " " + item.lastName).trim() || item.uuid; + return link ? dispatch(navigateToUserProfile(item.uuid))}> + {displayName} + : + {displayName}; +} -export const ResourceFullName = connect( - (state: RootState, props: { uuid: string }) => { +export const UserResourceFullName = connect( + (state: RootState, props: { uuid: string, link?: boolean }) => { const resource = getResource(props.uuid)(state.resources); - return resource || { firstName: '', lastName: '' }; - })(renderFullName); + return {item: resource || { uuid: '', firstName: '', lastName: '' }, link: props.link}; + })((props: {item: {uuid: string, firstName: string, lastName: string}, link?: boolean} & DispatchProp) => renderFullName(props.dispatch, props.item, props.link)); const renderUuid = (item: { uuid: string }) => diff --git a/src/views/user-panel/user-panel.tsx b/src/views/user-panel/user-panel.tsx index cbb59a33..3bece2f1 100644 --- a/src/views/user-panel/user-panel.tsx +++ b/src/views/user-panel/user-panel.tsx @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; -import { WithStyles, withStyles, Tabs, Tab, Paper, Button, Grid } from '@material-ui/core'; +import { WithStyles, withStyles, Paper, Button, Grid } from '@material-ui/core'; import { DataExplorer } from "views-components/data-explorer/data-explorer"; import { connect, DispatchProp } from 'react-redux'; import { DataColumns } from 'components/data-table/data-table'; @@ -12,8 +12,7 @@ import { SortDirection } from 'components/data-table/data-column'; import { openContextMenu } from "store/context-menu/context-menu-actions"; import { getResource, ResourcesState } from "store/resources/resources"; import { - ResourceFirstName, - ResourceLastName, + UserResourceFullName, ResourceUuid, ResourceEmail, ResourceIsActive, @@ -45,8 +44,7 @@ const styles = withStyles(theme => ({ })); export enum UserPanelColumnNames { - FIRST_NAME = "First Name", - LAST_NAME = "Last Name", + NAME = "First Name", UUID = "Uuid", EMAIL = "Email", ACTIVE = "Active", @@ -57,20 +55,12 @@ export enum UserPanelColumnNames { export const userPanelColumns: DataColumns = [ { - name: UserPanelColumnNames.FIRST_NAME, + name: UserPanelColumnNames.NAME, selected: true, configurable: true, sortDirection: SortDirection.NONE, filters: createTree(), - render: uuid => - }, - { - name: UserPanelColumnNames.LAST_NAME, - selected: true, - configurable: true, - sortDirection: SortDirection.NONE, - filters: createTree(), - render: uuid => + render: uuid => }, { name: UserPanelColumnNames.UUID, @@ -92,7 +82,6 @@ export const userPanelColumns: DataColumns = [ name: UserPanelColumnNames.ACTIVE, selected: true, configurable: true, - sortDirection: SortDirection.NONE, filters: createTree(), render: uuid => }, @@ -100,7 +89,6 @@ export const userPanelColumns: DataColumns = [ name: UserPanelColumnNames.ADMIN, selected: true, configurable: false, - sortDirection: SortDirection.NONE, filters: createTree(), render: uuid => }, @@ -146,7 +134,7 @@ export const UserPanel = compose( return