Skip to content
Snippets Groups Projects
GridColumnsConfig.jsx 3.97 KiB
Newer Older
  • Learn to ignore specific revisions
  • import _ from 'lodash'
    import React from 'react'
    
    import { withStyles } from '@material-ui/core/styles'
    
    import { DragDropContext, Droppable } from 'react-beautiful-dnd'
    
    import Mask from '@src/js/components/common/loading/Mask.jsx'
    
    import Container from '@src/js/components/common/form/Container.jsx'
    
    import Button from '@src/js/components/common/form/Button.jsx'
    import GridColumnsConfigRow from '@src/js/components/common/grid/GridColumnsConfigRow.jsx'
    
    import messages from '@src/js/common/messages.js'
    
        alignItems: 'center',
        paddingRight: theme.spacing(1)
    
        marginBottom: theme.spacing(1),
        '& button': {
          marginRight: theme.spacing(1)
        }
    
      handleDragEnd(result) {
        if (!result.destination) {
          return
        }
        this.props.onOrderChange(result.source.index, result.destination.index)
      }
    
    
      handleShowAll() {
        this.handleVisibleChangeAll(true)
      }
    
      handleHideAll() {
        this.handleVisibleChangeAll(false)
      }
    
      handleVisibleChangeAll(visibility) {
        const { columns, onVisibleChange } = this.props
    
        const visibilityMap = columns.reduce((map, column) => {
          map[column.name] = visibility
          return map
        }, {})
    
        onVisibleChange(visibilityMap)
      }
    
    
              color='default'
              variant='outlined'
              onClick={this.handleOpen}
    
              open={Boolean(el)}
              anchorEl={el}
              onClose={this.handleClose}
              anchorOrigin={{
    
                <Container square={true}>{this.renderColumns()}</Container>
    
    
      renderColumns() {
        const { classes, columns, columnsVisibility, onVisibleChange } = this.props
        return (
          <div>
    
            <div className={classes.buttons}>
              <Button
                label={messages.get(messages.SHOW_ALL)}
                onClick={this.handleShowAll}
              />
              <Button
                label={messages.get(messages.HIDE_ALL)}
                onClick={this.handleHideAll}
              />
            </div>
    
            <DragDropContext onDragEnd={this.handleDragEnd}>
              <Droppable droppableId='root'>
                {provided => (
                  <ol
                    ref={provided.innerRef}
                    {...provided.droppableProps}
    
                        key={column.name}
                        column={column}
                        visible={columnsVisibility[column.name]}
                        index={index}
                        onVisibleChange={onVisibleChange}
                      />
                    ))}
                    {provided.placeholder}
                  </ol>
                )}
              </Droppable>
            </DragDropContext>
          </div>
        )
      }
    
    export default _.flow(withStyles(styles))(GridColumnsConfig)