Skip to content
Snippets Groups Projects
ListView.jsx 2.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • import React from 'react'
    import { withStyles } from '@material-ui/core/styles'
    
    import Container from '@src/js/components/common/form/Container.jsx'
    
    import FolderIcon from '@material-ui/icons/FolderOpen'
    
    import FileIcon from '@material-ui/icons/InsertDriveFileOutlined'
    
    import autoBind from 'auto-bind'
    
    
    const styles = theme => ({
    
        borderSpacing: '0',
        fontFamily: theme.typography.fontFamily,
        '& tbody > tr:hover': {
          backgroundColor: '#0000000a'
        },
    
      },
      tableHeader: {
        textAlign: 'left'
      },
      nameColumn: {
        textAlign: 'left'
      },
      sizeColumn: {
        width: '11rem',
        textAlign: 'left'
      },
      modifiedColumn: {
        width: '11rem',
        textAlign: 'right'
    
    vkovtun's avatar
    vkovtun committed
      },
      icon: {
    
        verticalAlign: 'middle',
        fontSize: '2.5rem'
    
    vkovtun's avatar
    vkovtun committed
      },
      text: {
        fontSize: theme.typography.body2.fontSize,
        lineHeight: theme.typography.body2.fontSize
      },
      listContainer: {
        flex: '1 1 100%'
      },
      tableRow: {
        fontSize: theme.typography.body1.fontSize,
    
        height: '2rem'
    
    vkovtun's avatar
    vkovtun committed
      },
      tableData: {
    
    vkovtun's avatar
    vkovtun committed
    class ListView extends React.Component {
    
    
      constructor(props, context) {
        super(props, context)
        autoBind(this)
    
    
        const { configuration } = this.props
    
        this.extensionToIconType = new Map(
          configuration.flatMap(
            (configObject) => configObject.extensions.map(extension => [extension, configObject.icon])
          )
        )
    
    vkovtun's avatar
    vkovtun committed
        const { classes } = this.props
    
    
    vkovtun's avatar
    vkovtun committed
          return <FolderIcon className={classes.icon} />
    
          const iconType = this.extensionToIconType.get(file.name.substring(file.name.lastIndexOf(".") + 1))
          return iconType ? React.createElement(iconType, { className: classes.icon }) : <FileIcon className={classes.icon} />
    
      render() {
        const { classes, files } = this.props
    
        /* Create strings in messages. */
        return (
          <Container>
            <table className={classes.content}>
              <thead>
    
    vkovtun's avatar
    vkovtun committed
                <tr className={classes.tableRow}>
    
                  <th className={`${classes.tableData} ${classes.tableHeader}`}>Name</th>
                  <th className={`${classes.tableData} ${classes.tableHeader}`}>Size</th>
                  <th className={`${classes.tableData} ${classes.modifiedColumn} ${classes.tableHeader}`}>Modified</th>
    
                </tr>
              </thead>
              <tbody>
                {files.map((file, index) =>
    
    vkovtun's avatar
    vkovtun committed
                  <tr key={index} className={classes.tableRow}>
                    <td className={`${classes.tableData} ${classes.nameColumn}`}>{<>{this.getIcon(file)} {file.name}</>}</td>
                    <td className={`${classes.tableData} ${classes.sizeColumn}`}>{file.folder ? '-' : file.size}</td>
                    <td className={`${classes.tableData} ${classes.modifiedColumn}`}>{file.lastModifiedTime.toLocaleString()}</td>
    
    vkovtun's avatar
    vkovtun committed
    export default withStyles(styles)(ListView)