/* eslint-disable react/display-name */ /* eslint-disable react/prop-types */ import React, { useEffect } from 'react'; import PropTypes from 'prop-types'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import ReactTable from 'react-table'; import { getAllBlockedServices } from '../../../../actions/services'; import { initSettings } from '../../../../actions'; import { splitByNewLine, countClientsStatistics, sortIp, getService, } from '../../../../helpers/helpers'; import { MODAL_TYPE } from '../../../../helpers/constants'; import Card from '../../../ui/Card'; import CellWrap from '../../../ui/CellWrap'; import LogsSearchLink from '../../../ui/LogsSearchLink'; import Modal from '../Modal'; const ClientsTable = ({ clients, normalizedTopClients, isModalOpen, modalClientName, modalType, addClient, updateClient, deleteClient, toggleClientModal, processingAdding, processingDeleting, processingUpdating, getStats, supportedTags, }) => { const [t] = useTranslation(); const dispatch = useDispatch(); const services = useSelector((store) => store?.services); const globalSettings = useSelector((store) => store?.settings.settingsList) || {}; const { safesearch } = globalSettings; useEffect(() => { dispatch(getAllBlockedServices()); dispatch(initSettings()); }, []); const handleFormAdd = (values) => { addClient(values); }; const handleFormUpdate = (values, name) => { updateClient(values, name); }; const handleSubmit = (values) => { const config = { ...values }; if (values) { if (values.blocked_services) { config.blocked_services = Object .keys(values.blocked_services) .filter((service) => values.blocked_services[service]); } if (values.upstreams && typeof values.upstreams === 'string') { config.upstreams = splitByNewLine(values.upstreams); } else { config.upstreams = []; } if (values.tags) { config.tags = values.tags.map((tag) => tag.value); } else { config.tags = []; } } if (modalType === MODAL_TYPE.EDIT_FILTERS) { handleFormUpdate(config, modalClientName); } else { handleFormAdd(config); } }; const getOptionsWithLabels = (options) => ( options.map((option) => ({ value: option, label: option, })) ); const getClient = (name, clients) => { const client = clients.find((item) => name === item.name); if (client) { const { upstreams, tags, whois_info, ...values } = client; return { upstreams: (upstreams && upstreams.join('\n')) || '', tags: (tags && getOptionsWithLabels(tags)) || [], ...values, }; } return { ids: [''], tags: [], use_global_settings: true, use_global_blocked_services: true, safe_search: { ...(safesearch || {}) }, }; }; const handleDelete = (data) => { // eslint-disable-next-line no-alert if (window.confirm(t('client_confirm_delete', { key: data.name }))) { deleteClient(data); getStats(); } }; const columns = [ { Header: t('table_client'), accessor: 'ids', minWidth: 150, Cell: (row) => { const { value } = row; return (