import _ from 'lodash'; import React from 'react'; import { DropDownMenuItem } from '../modals/DropDownMenu'; import { openNewTab } from '../utility/common'; import { getConnectionInfo } from '../utility/metadataLoaders'; import fullDisplayName from '../utility/fullDisplayName'; import { filterName } from 'dbgate-datalib'; import ImportExportModal from '../modals/ImportExportModal'; import { useSetOpenedTabs } from '../utility/globalState'; import { AppObjectCore } from './AppObjectCore'; import useShowModal from '../modals/showModal'; const icons = { tables: 'img table', views: 'img view', procedures: 'img procedure', functions: 'img function', }; const menus = { tables: [ { label: 'Open data', tab: 'TableDataTab', }, { label: 'Open structure', tab: 'TableStructureTab', }, { label: 'Show CREATE TABLE script', sqlTemplate: 'CREATE TABLE', }, { label: 'Export', isExport: true, }, { label: 'Open in free table editor', isOpenFreeTable: true, }, ], views: [ { label: 'Open data', tab: 'ViewDataTab', }, { label: 'Show CREATE VIEW script', sqlTemplate: 'CREATE OBJECT', }, { label: 'Show CREATE TABLE script', sqlTemplate: 'CREATE TABLE', }, { label: 'Export', isExport: true, }, { label: 'Open in free table editor', isOpenFreeTable: true, }, { label: 'Open structure', tab: 'TableStructureTab', }, ], procedures: [ { label: 'Show CREATE PROCEDURE script', sqlTemplate: 'CREATE OBJECT', }, { label: 'Show EXECUTE script', sqlTemplate: 'EXECUTE PROCEDURE', }, ], functions: [ { label: 'Show CREATE FUNCTION script', sqlTemplate: 'CREATE OBJECT', }, ], }; const defaultTabs = { tables: 'TableDataTab', views: 'ViewDataTab', }; export async function openDatabaseObjectDetail( setOpenedTabs, tabComponent, sqlTemplate, { schemaName, pureName, conid, database, objectTypeField } ) { const connection = await getConnectionInfo({ conid }); const tooltip = `${connection.displayName || connection.server}\n${database}\n${fullDisplayName({ schemaName, pureName, })}`; openNewTab(setOpenedTabs, { title: pureName, tooltip, icon: sqlTemplate ? 'img sql-file' : icons[objectTypeField], tabComponent: sqlTemplate ? 'QueryTab' : tabComponent, props: { schemaName, pureName, conid, database, objectTypeField, initialArgs: sqlTemplate ? { sqlTemplate } : null, }, }); } function Menu({ data }) { const showModal = useShowModal(); const setOpenedTabs = useSetOpenedTabs(); return ( <> {menus[data.objectTypeField].map((menu) => ( { if (menu.isExport) { showModal((modalState) => ( )); } else if (menu.isOpenFreeTable) { const coninfo = await getConnectionInfo(data); openNewTab(setOpenedTabs, { title: data.pureName, icon: 'img free-table', tabComponent: 'FreeTableTab', props: { initialData: { functionName: 'tableReader', props: { connection: { ...coninfo, database: data.database, }, schemaName: data.schemaName, pureName: data.pureName, }, }, }, }); } else { openDatabaseObjectDetail(setOpenedTabs, menu.tab, menu.sqlTemplate, data); } }} > {menu.label} ))} ); } function DatabaseObjectAppObject({ data, commonProps }) { const { conid, database, pureName, schemaName, objectTypeField } = data; const setOpenedTabs = useSetOpenedTabs(); // const Icon = (props) => getIconImage(icons[objectTypeField], props); const onClick = ({ schemaName, pureName }) => { openDatabaseObjectDetail( setOpenedTabs, defaultTabs[objectTypeField], defaultTabs[objectTypeField] ? null : 'CREATE OBJECT', { schemaName, pureName, conid, database, objectTypeField, } ); }; // const matcher = (filter) => filterName(filter, pureName); // const groupTitle = _.startCase(objectTypeField); return ( ); // return { title, key, icon, Menu, onClick, matcher, groupTitle }; } DatabaseObjectAppObject.extractKey = ({ schemaName, pureName }) => schemaName ? `${schemaName}.${pureName}` : pureName; DatabaseObjectAppObject.createMatcher = ({ pureName }) => (filter) => filterName(filter, pureName); // DatabaseObjectAppObject.groupTitle = ({ pureName }) => (filter) => filterName(filter, pureName); export default DatabaseObjectAppObject;