import { Alert } from 'antd'; import React, { useMemo } from 'react'; import GroupHeader from './GroupHeader'; import { useGetGroupQuery } from '../../../graphql/group.generated'; import { useGetAllEntitySearchResults } from '../../../utils/customGraphQL/useGetAllEntitySearchResults'; import useUserParams from '../../shared/entitySearch/routingUtils/useUserParams'; import { EntityRelationshipsResult, EntityType, SearchResult } from '../../../types.generated'; import RelatedEntityResults from '../../shared/entitySearch/RelatedEntityResults'; import { Message } from '../../shared/Message'; import GroupMembers from './GroupMembers'; import { LegacyEntityProfile } from '../../shared/LegacyEntityProfile'; import { useEntityRegistry } from '../../useEntityRegistry'; const messageStyle = { marginTop: '10%' }; export enum TabType { Members = 'Members', Ownership = 'Ownership', } const ENABLED_TAB_TYPES = [TabType.Members, TabType.Ownership]; const MEMBER_PAGE_SIZE = 20; /** * Responsible for reading & writing groups. */ export default function GroupProfile() { const entityRegistry = useEntityRegistry(); const { urn } = useUserParams(); const { loading, error, data } = useGetGroupQuery({ variables: { urn, membersCount: MEMBER_PAGE_SIZE } }); const ownershipResult = useGetAllEntitySearchResults({ query: `owners:${data?.corpGroup?.name}`, }); const contentLoading = Object.keys(ownershipResult).some((type) => { return ownershipResult[type].loading; }) || loading; const ownershipForDetails = useMemo(() => { const filteredOwnershipResult: { [key in EntityType]?: Array; } = {}; Object.keys(ownershipResult).forEach((type) => { const entities = ownershipResult[type].data?.search?.searchResults; if (entities && entities.length > 0) { filteredOwnershipResult[type] = ownershipResult[type].data?.search?.searchResults; } }); return filteredOwnershipResult; }, [ownershipResult]); if (error || (!loading && !error && !data)) { return ; } const groupMemberRelationships = data?.corpGroup?.relationships as EntityRelationshipsResult; const getTabs = () => { return [ { name: TabType.Members, path: TabType.Members.toLocaleLowerCase(), content: ( ), }, { name: TabType.Ownership, path: TabType.Ownership.toLocaleLowerCase(), content: , }, ].filter((tab) => ENABLED_TAB_TYPES.includes(tab.name)); }; const description = data?.corpGroup?.info?.description; return ( <> {contentLoading && } {data && data?.corpGroup && ( } tabs={getTabs()} /> )} ); }