saarnilauri/fida-imu

View on GitHub
src/components/hoc/EntityListView.js

Summary

Maintainability
A
1 hr
Test Coverage
import React from 'react'
import PropTypes from 'prop-types'
import ReactTable from 'react-table'
import Modal from '../Modal'

const EntityListView = props => {
  const {
    formatMessage,
    data,
    tableColumns,
    tableSort,
    entity,
    modalIsOpen,
    removeEntity,
    cancelRemove,
  } = props
  return (
    <React.Fragment>
      <ReactTable
        data={data}
        columns={tableColumns}
        defaultSorted={tableSort}
        defaultPageSize={10}
        className="-striped -highlight"
        previousText={formatMessage({ id: 'datatable.pagination.previous' })}
        nextText={formatMessage({ id: 'datatable.pagination.next' })}
        loadingText={formatMessage({ id: 'datatable.loading' })}
        noDataText={formatMessage({ id: `${entity}.datatable.now-rows-found` })}
        pageText={formatMessage({ id: 'datatable.page' })}
        ofText={formatMessage({ id: 'datatable.of' })}
        rowsText={formatMessage({ id: 'datatable.rows' })}
      />
      <Modal
        isOpen={modalIsOpen}
        action={removeEntity}
        cancel={cancelRemove}
        title={formatMessage({ id: 'modal.header.please_confirm' })}
        className="modal-danger"
        titleIcon="exclamation-circle"
        actionBtnIcon="trash"
        cancelBtnTitle={formatMessage({ id: 'modal.actions.cancel' })}
        actionBtnTitle={formatMessage({ id: 'modal.actions.yes_remove' })}
      >
        {formatMessage({ id: `${entity}.list.modal.question.remove` })}
      </Modal>
    </React.Fragment>
  )
}

EntityListView.propTypes = {
  formatMessage: PropTypes.func.isRequired,
  data: PropTypes.array.isRequired,
  tableColumns: PropTypes.array.isRequired,
  tableSort: PropTypes.array.isRequired,
  entity: PropTypes.string.isRequired,
  modalIsOpen: PropTypes.bool,
  removeEntity: PropTypes.func.isRequired,
  cancelRemove: PropTypes.func.isRequired,
}

export default EntityListView