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;