webgme-dss
Version:
Design Studio for Dynamic Systems with Modelica as backend
106 lines (93 loc) • 4 kB
JSX
import React, {Component} from 'react';
import PropTypes from 'prop-types';
import {Link} from 'react-router-dom';
import {withStyles} from '@material-ui/core/styles';
import LinearProgress from '@material-ui/core/LinearProgress';
import Tooltip from '@material-ui/core/Tooltip';
import List from '@material-ui/core/List';
import ListItem from '@material-ui/core/ListItem';
import ListItemText from '@material-ui/core/ListItemText';
import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';
import getObjectSorter from '../gme/utils/getObjectSorter';
const styles = {
domainBadge: {
width: 24,
height: 24,
padding: 2,
paddingTop: 12,
},
domainBadgeContainer: {
display: 'inline-flex',
},
};
class ProjectList extends Component {
static propTypes = {
projects: PropTypes.arrayOf(PropTypes.object),
classes: PropTypes.object.isRequired,
gmeClient: PropTypes.object.isRequired,
};
static defaultProps = {
projects: null,
};
render() {
const {projects, classes, gmeClient} = this.props;
let content = (
<div style={{
width: '100%',
marginTop: 30,
}}
>
<LinearProgress/>
<br/>
<LinearProgress color="secondary"/>
<br/>
<LinearProgress/>
</div>);
if (projects) {
content = (
<List>
{projects
.sort(getObjectSorter(['info', 'modifiedAt'], false, true))
.map((project) => {
let domains;
if (project.info.kind && project.info.kind.startsWith('DSS:')) {
domains = project.info.kind.substring('DSS:'.length)
.split(':')
.sort()
.reverse()
.map(domainUri => (
<Tooltip
key={domainUri}
id={domainUri}
placement="left"
title={domainUri.substring('Modelica.'.length)}
>
<img
alt={domainUri}
src={`${gmeClient.mountedPath}/assets/DecoratorSVG/${domainUri}.mini.png`}
className={classes.domainBadge}
/>
</Tooltip>));
}
return (
<Link
key={project._id}
to={`${gmeClient.mountedPath}/p/${project.owner}/${project.name}`}
style={{textDecoration: 'none'}}
>
<ListItem button>
<ListItemText primary={project.name}/>
<ListItemSecondaryAction className={classes.domainBadgeContainer}>
{domains}
</ListItemSecondaryAction>
</ListItem>
</Link>
);
})
}
</List>);
}
return content;
}
}
export default withStyles(styles)(ProjectList);