import React, { useState } from 'react';
import { Button, Typography } from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import styled from 'styled-components/macro';
import { useGetRootGlossaryNodesQuery, useGetRootGlossaryTermsQuery } from '../../graphql/glossary.generated';
import TabToolbar from '../entity/shared/components/styled/TabToolbar';
import GlossaryEntitiesPath from './GlossaryEntitiesPath';
import GlossaryEntitiesList from './GlossaryEntitiesList';
import GlossaryBrowser from './GlossaryBrowser/GlossaryBrowser';
import GlossarySearch from './GlossarySearch';
import { ProfileSidebarResizer } from '../entity/shared/containers/profile/sidebar/ProfileSidebarResizer';
import EmptyGlossarySection from './EmptyGlossarySection';
import CreateGlossaryEntityModal from '../entity/shared/EntityDropdown/CreateGlossaryEntityModal';
import { EntityType } from '../../types.generated';
import { Message } from '../shared/Message';
import { sortGlossaryTerms } from '../entity/glossaryTerm/utils';
import { useEntityRegistry } from '../useEntityRegistry';
import { sortGlossaryNodes } from '../entity/glossaryNode/utils';
export const HeaderWrapper = styled(TabToolbar)`
padding: 15px 45px 10px 24px;
height: auto;
`;
const GlossaryWrapper = styled.div`
display: flex;
flex: 1;
max-height: inherit;
`;
const MainContentWrapper = styled.div`
display: flex;
flex: 1;
flex-direction: column;
`;
export const BrowserWrapper = styled.div<{ width: number }>`
max-height: 100%;
min-width: ${(props) => props.width}px;
`;
export const MAX_BROWSER_WIDTH = 500;
export const MIN_BROWSWER_WIDTH = 200;
function BusinessGlossaryPage() {
const [browserWidth, setBrowserWidth] = useState(window.innerWidth * 0.2);
const { data: termsData, refetch: refetchForTerms, loading: termsLoading } = useGetRootGlossaryTermsQuery();
const { data: nodesData, refetch: refetchForNodes, loading: nodesLoading } = useGetRootGlossaryNodesQuery();
const entityRegistry = useEntityRegistry();
const terms = termsData?.getRootGlossaryTerms?.terms.sort((termA, termB) =>
sortGlossaryTerms(entityRegistry, termA, termB),
);
const nodes = nodesData?.getRootGlossaryNodes?.nodes.sort((nodeA, nodeB) =>
sortGlossaryNodes(entityRegistry, nodeA, nodeB),
);
const hasTermsOrNodes = !!nodes?.length || !!terms?.length;
const [isCreateTermModalVisible, setIsCreateTermModalVisible] = useState(false);
const [isCreateNodeModalVisible, setIsCreateNodeModalVisible] = useState(false);
return (
<>
{(termsLoading || nodesLoading) && (
)}
setBrowserWidth(Math.min(Math.max(width, MIN_BROWSWER_WIDTH), MAX_BROWSER_WIDTH))
}
initialSize={browserWidth}
isSidebarOnLeft
/>
Glossary
{hasTermsOrNodes && }
{!(termsLoading || nodesLoading) && !hasTermsOrNodes && (
)}
{isCreateTermModalVisible && (
setIsCreateTermModalVisible(false)}
refetchData={refetchForTerms}
/>
)}
{isCreateNodeModalVisible && (
setIsCreateNodeModalVisible(false)}
refetchData={refetchForNodes}
/>
)}
>
);
}
export default BusinessGlossaryPage;