X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/25216cc7acedc987c26a159f0b640210c0ef101e..103b02cad3a181951a3872fa8f6a811a7125fdda:/src/views-components/sharing-dialog/participant-select.tsx diff --git a/src/views-components/sharing-dialog/participant-select.tsx b/src/views-components/sharing-dialog/participant-select.tsx index e7b83060..a826fcd5 100644 --- a/src/views-components/sharing-dialog/participant-select.tsx +++ b/src/views-components/sharing-dialog/participant-select.tsx @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from 'react'; +import React from 'react'; import { Autocomplete } from 'components/autocomplete/autocomplete'; import { connect, DispatchProp } from 'react-redux'; import { ServiceRepository } from 'services/services'; @@ -12,7 +12,7 @@ import { ListItemText, Typography } from '@material-ui/core'; import { noop } from 'lodash/fp'; import { GroupClass, GroupResource } from 'models/group'; import { getUserDisplayName, UserResource } from 'models/user'; -import { ResourceKind } from 'models/resource'; +import { Resource, ResourceKind } from 'models/resource'; import { ListResults } from 'services/common-service/common-service'; export interface Participant { @@ -20,13 +20,16 @@ export interface Participant { uuid: string; } -type ParticipantResource = GroupResource & UserResource; +type ParticipantResource = GroupResource | UserResource; interface ParticipantSelectProps { items: Participant[]; + excludedParticipants?: string[]; label?: string; autofocus?: boolean; onlyPeople?: boolean; + onlyActive?: boolean; + disabled?: boolean; onBlur?: (event: React.FocusEvent) => void; onFocus?: (event: React.FocusEvent) => void; @@ -40,14 +43,14 @@ interface ParticipantSelectState { suggestions: ParticipantResource[]; } -const getDisplayName = (item: GroupResource & UserResource) => { +const getDisplayName = (item: GroupResource | UserResource) => { switch (item.kind) { case ResourceKind.USER: - return getUserDisplayName(item, true); + return getUserDisplayName(item, true, true); case ResourceKind.GROUP: - return item.name; + return item.name + `(${`(${(item as Resource).uuid})`})`; default: - return item.uuid; + return (item as Resource).uuid; } }; @@ -71,11 +74,12 @@ export const ParticipantSelect = connect()( onChange={this.handleChange} onCreate={this.handleCreate} onSelect={this.handleSelect} - onDelete={this.handleDelete} + onDelete={this.props.onDelete && !this.props.disabled ? this.handleDelete : undefined} onFocus={this.props.onFocus} onBlur={this.props.onBlur} renderChipValue={this.renderChipValue} - renderSuggestion={this.renderSuggestion} /> + renderSuggestion={this.renderSuggestion} + disabled={this.props.disabled}/> ); } @@ -130,11 +134,14 @@ export const ParticipantSelect = connect()( const filterUsers = new FilterBuilder() .addILike('any', value) + .addEqual('is_active', this.props.onlyActive || undefined) + .addNotIn('uuid', this.props.excludedParticipants) .getFilters(); const userItems: ListResults = await userService.list({ filters: filterUsers, limit, count: "none" }); const filterGroups = new FilterBuilder() .addNotIn('group_class', [GroupClass.PROJECT, GroupClass.FILTER]) + .addNotIn('uuid', this.props.excludedParticipants) .addILike('name', value) .getFilters();