import _ from 'lodash'; import React from 'react'; import { DropDownMenuItem } from '../modals/DropDownMenu'; import ConnectionModal from '../modals/ConnectionModal'; import axios from '../utility/axios'; import { filterName } from '@dbgate/datalib'; import ConfirmModal from '../modals/ConfirmModal'; import CreateDatabaseModal from '../modals/CreateDatabaseModal'; function Menu({ data, setOpenedConnections, openedConnections, config, showModal }) { const handleEdit = () => { showModal((modalState) => ); }; const handleDelete = () => { showModal((modalState) => ( axios.post('connections/delete', data)} /> )); }; const handleCreateDatabase = () => { showModal((modalState) => ); }; const handleRefresh = () => { axios.post('server-connections/refresh', { conid: data._id }); }; const handleDisconnect = () => { setOpenedConnections((list) => list.filter((x) => x != data._id)); }; const handleConnect = () => { setOpenedConnections((list) => [...list, data._id]); }; return ( <> {config.runAsPortal == false && ( <> Edit Delete )} {!openedConnections.includes(data._id) && Connect} {openedConnections.includes(data._id) && data.status && ( Refresh )} {openedConnections.includes(data._id) && ( Disconnect )} {openedConnections.includes(data._id) && ( Create database )} ); } const connectionAppObject = (flags) => ( { _id, server, displayName, engine, status }, { openedConnections, setOpenedConnections } ) => { const title = displayName || server; const key = _id; const isExpandable = openedConnections.includes(_id); const icon = 'img server'; const matcher = (filter) => filterName(filter, displayName, server); const { boldCurrentDatabase } = flags || {}; const isBold = boldCurrentDatabase ? ({ currentDatabase }) => { return _.get(currentDatabase, 'connection._id') == _id; } : null; const onClick = () => setOpenedConnections((c) => [...c, _id]); let statusIcon = null; let statusTitle = null; if (openedConnections.includes(_id)) { if (!status) statusIcon = 'icon loading'; else if (status.name == 'pending') statusIcon = 'icon loading'; else if (status.name == 'ok') statusIcon = 'img green-ok'; else statusIcon = 'img red-error'; if (status && status.name == 'error') { statusTitle = status.message; } } return { title, key, icon, Menu, matcher, isBold, isExpandable, onClick, statusIcon, statusTitle, }; }; export default connectionAppObject;