Chip as MuiChip,
Popper as MuiPopper,
Paper as MuiPaper,
- FormControl, InputLabel, StyleRulesCallback, withStyles, RootRef, ListItemText, ListItem, List, FormHelperText
+ FormControl, InputLabel, StyleRulesCallback, withStyles, RootRef, ListItemText, ListItem, List, FormHelperText, Tooltip
} from '@material-ui/core';
import { PopperProps } from '@material-ui/core/Popper';
import { WithStyles } from '@material-ui/core/styles';
onDelete?: (item: Item, index: number) => void;
onSelect?: (suggestion: Suggestion) => void;
renderChipValue?: (item: Item) => string;
+ renderChipTooltip?: (item: Item) => string;
renderSuggestion?: (suggestion: Suggestion) => React.ReactNode;
}
}
return items.map(
- (item, index) =>
- <Chip
- label={this.renderChipValue(item)}
- key={index}
- onDelete={onDelete && !this.props.disabled ? (() => onDelete(item, index)) : undefined} />
+ (item, index) => {
+ const tooltip = this.props.renderChipTooltip ? this.props.renderChipTooltip(item) : '';
+ if (tooltip.length) {
+ return <Tooltip title={tooltip}>
+ <Chip
+ label={this.renderChipValue(item)}
+ key={index}
+ onDelete={onDelete && !this.props.disabled ? (() => onDelete(item, index)) : undefined} />
+ </Tooltip>
+ } else {
+ return <Chip
+ label={this.renderChipValue(item)}
+ key={index}
+ onDelete={onDelete && !this.props.disabled ? (() => onDelete(item, index)) : undefined} />
+ }
+ }
);
}
return parts.join(' ');
};
+export const getUserDetailsString = (user: User) => {
+ let parts: string[] = [];
+ user.username.length && parts.push(user.username);
+ user.email.length && parts.push(`<${user.email}>`);
+ user.uuid.length && parts.push(`(${user.uuid})`);
+ return parts.join(' ');
+};
+
export interface UserResource extends Resource, User {
kind: ResourceKind.USER;
defaultOwnerUuid: string;
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 { getUserDetailsString, getUserDisplayName, UserResource } from 'models/user';
import { Resource, ResourceKind } from 'models/resource';
import { ListResults } from 'services/common-service/common-service';
export interface Participant {
name: string;
+ tooltip: string;
uuid: string;
}
}
};
+const getDisplayTooltip = (item: GroupResource | UserResource) => {
+ switch (item.kind) {
+ case ResourceKind.USER:
+ return getUserDetailsString(item);
+ case ResourceKind.GROUP:
+ return item.name + `(${`(${(item as Resource).uuid})`})`;
+ default:
+ return (item as Resource).uuid;
+ }
+};
+
export const ParticipantSelect = connect()(
class ParticipantSelect extends React.Component<ParticipantSelectProps & DispatchProp, ParticipantSelectState> {
state: ParticipantSelectState = {
onFocus={this.props.onFocus}
onBlur={this.props.onBlur}
renderChipValue={this.renderChipValue}
+ renderChipTooltip={this.renderChipTooltip}
renderSuggestion={this.renderSuggestion}
disabled={this.props.disabled}/>
);
return name || uuid;
}
+ renderChipTooltip(item: Participant) {
+ return item.tooltip;
+ }
+
renderSuggestion(item: ParticipantResource) {
return (
<ListItemText>
this.setState({ value: '', suggestions: [] });
onCreate({
name: '',
+ tooltip: '',
uuid: this.state.value,
});
}
this.setState({ value: '', suggestions: [] });
onSelect({
name: getDisplayName(selection, false),
+ tooltip: getDisplayTooltip(selection),
uuid,
});
}