import React, { useState } from 'react'; import styled from 'styled-components'; import { Alert, Divider, Input, Select } from 'antd'; import { SearchOutlined } from '@ant-design/icons'; import { ChartGroup } from './ChartGroup'; import { useGetAnalyticsChartsQuery, useGetMetadataAnalyticsChartsQuery } from '../../../graphql/analytics.generated'; import { useGetHighlightsQuery } from '../../../graphql/highlights.generated'; import { Highlight } from './Highlight'; import { Message } from '../../shared/Message'; import { useListDomainsQuery } from '../../../graphql/domain.generated'; import filterSearchQuery from '../../search/utils/filterSearchQuery'; import { ANTD_GRAY } from '../../entity/shared/constants'; import { useUserContext } from '../../context/useUserContext'; const HighlightGroup = styled.div` display: flex; align-items: space-between; justify-content: center; padding-top: 20px; margin-bottom: 10px; `; const MetadataAnalyticsInput = styled.div` display: flex; `; const MetadataAnalyticsPlaceholder = styled.span` margin: 25px; margin-bottom: 50px; font-size: 18px; color: ${ANTD_GRAY[7]}; `; const DomainSelect = styled(Select)` margin-left: 25px; width: 200px; display: inline-block; `; const StyledSearchBar = styled(Input)` &&& { margin-left: 10px; border-radius: 70px; color: ${ANTD_GRAY[7]}; width: 250px; } `; export const AnalyticsPage = () => { const me = useUserContext(); const canManageDomains = me?.platformPrivileges?.createDomains; const { data: chartData, loading: chartLoading, error: chartError } = useGetAnalyticsChartsQuery(); const { data: highlightData, loading: highlightLoading, error: highlightError } = useGetHighlightsQuery(); const { loading: domainLoading, error: domainError, data: domainData, } = useListDomainsQuery({ skip: !canManageDomains, variables: { input: { start: 0, count: 1000, }, }, fetchPolicy: 'no-cache', }); const [domain, setDomain] = useState(''); const [stagedQuery, setStagedQuery] = useState(''); const [query, setQuery] = useState(''); const onDomainChange = (inputDomain) => setDomain(inputDomain); const onStagedQueryChange = (inputQuery) => setStagedQuery(inputQuery); const { loading: metadataAnalyticsLoading, error: metadataAnalyticsError, data: metadataAnalyticsData, } = useGetMetadataAnalyticsChartsQuery({ variables: { input: { entityType: null, domain, query, }, }, skip: domain === '' && query === '', }); const isLoading = highlightLoading || chartLoading || domainLoading || metadataAnalyticsLoading; return ( <> {isLoading && } {highlightError && ( )} {highlightData?.getHighlights?.map((highlight) => ( ))} <> {chartError && ( )} {chartData?.getAnalyticsCharts ?.filter((chartGroup) => chartGroup.groupId === 'GlobalMetadataAnalytics') .map((chartGroup) => ( ))} <> {domainError && ( )} {!chartLoading && ( <> option?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 } > All {domainData?.listDomains?.domains.map((domainChoice) => ( {domainChoice?.properties?.name} ))} { e.stopPropagation(); setQuery(filterSearchQuery(stagedQuery || '')); }} value={stagedQuery} onChange={(e) => onStagedQueryChange(e.target.value)} data-testid="analytics-search-input" prefix={ setQuery(filterSearchQuery(stagedQuery || ''))} /> } /> )} <> {metadataAnalyticsError && ( )} {domain === '' && query === '' ? !chartLoading && ( Please specify domain or query to get granular results ) : metadataAnalyticsData?.getMetadataAnalyticsCharts?.map((chartGroup) => ( ))} <> {chartError && } {!chartLoading && chartData?.getAnalyticsCharts ?.filter((chartGroup) => chartGroup.groupId === 'DataHubUsageAnalytics') .map((chartGroup) => ( <> ))} ); };