import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { Trans, withNamespaces } from 'react-i18next'; import ReactTable from 'react-table'; import { MODAL_TYPE, CLIENT_ID } from '../../../helpers/constants'; import Card from '../../ui/Card'; import Modal from './Modal'; class Clients extends Component { handleFormAdd = (values) => { this.props.addClient(values); }; handleFormUpdate = (values, name) => { this.props.updateClient(values, name); }; handleSubmit = (values) => { if (this.props.modalType === MODAL_TYPE.EDIT) { this.handleFormUpdate(values, this.props.modalClientName); } else { this.handleFormAdd(values); } }; cellWrap = ({ value }) => (
{value}
); getClient = (name, clients) => { const client = clients.find(item => name === item.name); if (client) { const identifier = client.mac ? CLIENT_ID.MAC : CLIENT_ID.IP; return { identifier, use_global_settings: true, ...client, }; } return { identifier: CLIENT_ID.IP, use_global_settings: true, }; }; getStats = (ip, stats) => { if (stats && stats.top_clients) { return stats.top_clients[ip]; } return ''; }; handleDelete = (data) => { // eslint-disable-next-line no-alert if (window.confirm(this.props.t('client_confirm_delete', { key: data.name }))) { this.props.deleteClient(data); } } columns = [ { Header: this.props.t('table_client'), accessor: 'ip', Cell: (row) => { if (row.original && row.original.mac) { return (
{row.original.mac} (MAC)
); } else if (row.value) { return (
{row.value} (IP)
); } return ''; }, }, { Header: this.props.t('table_name'), accessor: 'name', Cell: this.cellWrap, }, { Header: this.props.t('settings'), accessor: 'use_global_settings', Cell: ({ value }) => { const title = value ? ( settings_global ) : ( settings_custom ); return (
{title}
); }, }, { Header: this.props.t('table_statistics'), accessor: 'statistics', Cell: (row) => { const clientIP = row.original.ip; const clientStats = clientIP && this.getStats(clientIP, this.props.topStats); if (clientStats) { return (
{clientStats}
); } return '–'; }, }, { Header: this.props.t('actions_table_header'), accessor: 'actions', maxWidth: 150, Cell: (row) => { const clientName = row.original.name; const { toggleClientModal, processingDeleting, processingUpdating, t, } = this.props; return (
); }, }, ]; render() { const { t, clients, isModalOpen, modalType, modalClientName, toggleClientModal, processingAdding, processingUpdating, } = this.props; const currentClientData = this.getClient(modalClientName, clients); return ( ); } } Clients.propTypes = { t: PropTypes.func.isRequired, clients: PropTypes.array.isRequired, topStats: PropTypes.object.isRequired, toggleClientModal: PropTypes.func.isRequired, deleteClient: PropTypes.func.isRequired, addClient: PropTypes.func.isRequired, updateClient: PropTypes.func.isRequired, isModalOpen: PropTypes.bool.isRequired, modalType: PropTypes.string.isRequired, modalClientName: PropTypes.string.isRequired, processingAdding: PropTypes.bool.isRequired, processingDeleting: PropTypes.bool.isRequired, processingUpdating: PropTypes.bool.isRequired, }; export default withNamespaces()(Clients);