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;