+ linkToUuid?: string;
+ copyValue?: string;
+ uuidEnhancer?: Function;
+}
+
+type DetailsAttributeProps = DetailsAttributeDataProps & WithStyles<CssRules> & FederationConfig & DispatchProp;
+
+const mapStateToProps = ({ auth }: RootState): FederationConfig => ({
+ localCluster: auth.localCluster,
+ remoteHostsConfig: auth.remoteHostsConfig,
+ sessions: auth.sessions
+});
+
+export const DetailsAttribute = connect(mapStateToProps)(withStyles(styles)(
+ class extends React.Component<DetailsAttributeProps> {
+
+ onCopy = (message: string) => {
+ this.props.dispatch(snackbarActions.OPEN_SNACKBAR({
+ message,
+ hideDuration: 2000,
+ kind: SnackbarKind.SUCCESS
+ }));
+ }
+
+ render() {
+ const { uuidEnhancer, link, value, classes, linkToUuid,
+ localCluster, remoteHostsConfig, sessions } = this.props;
+ let valueNode: React.ReactNode;
+
+ if (linkToUuid) {
+ const uuid = uuidEnhancer ? uuidEnhancer(linkToUuid) : linkToUuid;
+ const linkUrl = getNavUrl(linkToUuid || "", { localCluster, remoteHostsConfig, sessions });
+ if (linkUrl[0] === '/') {
+ valueNode = <Link to={linkUrl} className={classes.link}>{uuid}</Link>;
+ } else {
+ valueNode = <a href={linkUrl} className={classes.link} target='_blank'>{uuid}</a>;
+ }
+ } else if (link) {
+ valueNode = <a href={link} className={classes.link} target='_blank'>{value}</a>;
+ } else {
+ valueNode = value;
+ }
+
+ return <DetailsAttributeComponent {...this.props} value={valueNode} onCopy={this.onCopy} />;
+ }
+ }
+));
+
+interface DetailsAttributeComponentProps {
+ value: React.ReactNode;
+ onCopy?: (msg: string) => void;