import { useContext } from 'react'; import { useParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { makeStyles, Theme } from '@material-ui/core'; import { useNavigationHook } from '@/hooks'; import { ALL_ROUTER_TYPES } from '@/router/Types'; import RouteTabList from '@/components/customTabList/RouteTabList'; import DatabaseTree from '@/pages/databases/tree'; import { ITab } from '@/components/customTabList/Types'; import Partitions from './collections/partitions/Partitions'; import Overview from './collections/overview/Overview'; import Data from './collections/data/CollectionData'; import Segments from './collections/segments/Segments'; import { dataContext, authContext } from '@/context'; import Collections from './collections/Collections'; import StatusIcon, { LoadingType } from '@/components/status/StatusIcon'; import RefreshButton from './RefreshButton'; import CopyButton from '@/components/advancedSearch/CopyButton'; import { CollectionObject } from '@server/types'; const useStyles = makeStyles((theme: Theme) => ({ wrapper: { flexDirection: 'row', }, tree: { boxShadow: 'none', flexBasis: theme.spacing(28), width: theme.spacing(28), flexGrow: 0, flexShrink: 0, height: 'calc(100vh - 96px)', overflow: 'auto', boxSizing: 'border-box', padding: theme.spacing(0, 2, 0, 0), }, tab: { flexGrow: 1, flexShrink: 1, overflowX: 'auto', padding: theme.spacing(0, 2), }, headerIcon: { marginLeft: theme.spacing(0.5), '& svg': { fontSize: 15, color: theme.palette.primary.main, }, }, })); // Databases page(tree and tabs) const Databases = () => { // context const { database, collections, loading, fetchCollection } = useContext(dataContext); // get current collection from url const params = useParams(); const { databaseName = '', collectionName = '', collectionPage = '', } = params; // get style const classes = useStyles(); // update navigation useNavigationHook(ALL_ROUTER_TYPES.DATABASES, { collectionName, databaseName, extra: ( <> { await fetchCollection(collectionName); }} /> ), }); // render return (
{loading ? ( ) : ( )}
{!collectionName && ( )} {collectionName && ( )}
); }; // Database tab pages const DatabasesTab = (props: { databaseName: string; tabClass: string; // tab class }) => { const { databaseName, tabClass } = props; const { t: collectionTrans } = useTranslation('collection'); const dbTab: ITab[] = [ { label: collectionTrans('collections'), component: , path: `collections`, }, ]; const actionDbTab = dbTab.findIndex(t => t.path === databaseName); return ( ); }; // Collection tab pages const CollectionTabs = (props: { collectionPage: string; // current collection page collectionName: string; // current collection name tabClass: string; // tab class collections: CollectionObject[]; // collections }) => { // props const { collectionPage, collectionName, tabClass, collections } = props; // context const { isManaged } = useContext(authContext); // i18n const { t: collectionTrans } = useTranslation('collection'); // collection tabs const collectionTabs: ITab[] = [ { label: collectionTrans('overviewTab'), component: , path: `overview`, }, { label: collectionTrans('dataTab'), component: ( ), path: `data`, }, { label: collectionTrans('partitionTab'), component: , path: `partitions`, }, ]; // get active collection tab const activeColTab = collectionTabs.findIndex(t => t.path === collectionPage); if (!isManaged) { collectionTabs.push({ label: collectionTrans('segmentsTab'), component: , path: `segments`, }); } return ( ); }; export default Databases;