isActive?: boolean;
hasMargin?: boolean;
iconSize?: number;
+ nameDecorator?: JSX.Element;
}
type ListItemTextIconProps = ListItemTextIconDataProps & WithStyles<CssRules>;
export const ListItemTextIcon = withStyles(styles)(
class extends React.Component<ListItemTextIconProps, {}> {
render() {
- const { classes, isActive, hasMargin, name, icon: Icon, iconSize } = this.props;
+ const { classes, isActive, hasMargin, name, icon: Icon, iconSize, nameDecorator } = this.props;
return (
<Typography component='span' className={classes.root}>
<ListItemIcon className={classnames({
<Icon style={{ fontSize: `${iconSize}rem` }} />
</ListItemIcon>
+ {nameDecorator ? nameDecorator : null}
<ListItemText primary={
- <Typography className={classnames(classes.listItemText, {
+ <Typography className={classnames(classes.listItemText, {
[classes.active]: isActive
})}>
{name}
import { navigateTo } 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';
const renderName = (dispatch: Dispatch, item: { name: string; uuid: string, kind: string }) =>
<Grid container alignItems="center" wrap="nowrap" spacing={16}>
</Grid>
<Grid item>
<Typography color="primary" style={{ width: 'auto', cursor: 'pointer' }} onClick={() => dispatch<any>(navigateTo(item.uuid))}>
+ { item.kind === ResourceKind.PROJECT || item.kind === ResourceKind.COLLECTION
+ ? <IllegalNamingWarning name={item.name} />
+ : null }
{item.name}
</Typography>
</Grid>
import { activateSidePanelTreeItem, toggleSidePanelTreeItemCollapse, SIDE_PANEL_TREE, SidePanelTreeCategory } from '~/store/side-panel-tree/side-panel-tree-actions';
import { openSidePanelContextMenu } from '~/store/context-menu/context-menu-actions';
import { noop } from 'lodash';
+import { ResourceKind } from "~/models/resource";
+import { IllegalNamingWarning } from "~/components/warning/warning";
export interface SidePanelTreeProps {
onItemActivation: (id: string) => void;
sidePanelProgress?: boolean;
(props: SidePanelTreeActionProps) =>
<TreePicker {...props} render={renderSidePanelItem} pickerId={SIDE_PANEL_TREE} />);
-const renderSidePanelItem = (item: TreeItem<ProjectResource>) =>
- <ListItemTextIcon
+const renderSidePanelItem = (item: TreeItem<ProjectResource>) => {
+ const name = typeof item.data === 'string' ? item.data : item.data.name;
+ const warn = typeof item.data !== 'string' && item.data.kind === ResourceKind.PROJECT
+ ? <IllegalNamingWarning name={name} />
+ : undefined;
+ return <ListItemTextIcon
icon={getProjectPickerIcon(item)}
- name={typeof item.data === 'string' ? item.data : item.data.name}
+ name={name}
+ nameDecorator={warn}
isActive={item.active}
hasMargin={true}
iconSize={1.25}
/>;
+};
const getProjectPickerIcon = (item: TreeItem<ProjectResource | string>) =>
typeof item.data === 'string'