import { TableColumnReordering, DragDropProvider } from '@devexpress/dx-react-grid-material-ui'

export default withReordering = (WrappedComponent) =>
  observer class WithReordering extends Component
    @propTypes:
      orderedColumnNames: PropTypes.array
      onChangeOrderedColumnNames: PropTypes.func

    @defaultProps:
      orderedColumnNames: []
      onChangeOrderedColumnNames: =>

    onChangeOrderedColumnNames: (orderedColumnNames) =>
      @props.onChangeOrderedColumnNames orderedColumnNames

    render: =>
      if @props.orderedColumnNames.length is 0
        orderedColumnNames = @props.columns.map (column) =>
          column.name
      else
        orderedColumnNames = @props.orderedColumnNames

      <WrappedComponent
        {...@props}
        dragDropProviderComponent={<DragDropProvider />}
        tableColumnReorderingComponent={<TableColumnReordering defaultOrder={orderedColumnNames} onOrderChange={@onChangeOrderedColumnNames} />}
      />
