mirror of
https://github.com/datahub-project/datahub.git
synced 2025-11-03 12:16:10 +00:00
fix(ui/v2): Remove code around usage and storage features (#13049)
This commit is contained in:
parent
3fd0e37111
commit
c971cdaebc
@ -85,19 +85,6 @@ export const getChartPopularityTier = (viewCountPercentileLast30Days, uniqueUser
|
||||
return PopularityTier.TIER_4;
|
||||
};
|
||||
|
||||
export const getQueryPopularityTier = (runsPercentileLast30days: number) => {
|
||||
if (runsPercentileLast30days > 80) {
|
||||
return PopularityTier.TIER_1;
|
||||
}
|
||||
if (runsPercentileLast30days > 30) {
|
||||
return PopularityTier.TIER_2;
|
||||
}
|
||||
if (runsPercentileLast30days > 0) {
|
||||
return PopularityTier.TIER_3;
|
||||
}
|
||||
return PopularityTier.TIER_4;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns true if the user "exists", e.g. there exists some information about
|
||||
* the user in DataHub already.
|
||||
|
||||
@ -141,9 +141,7 @@ export default function QueriesListSection({
|
||||
createdDateColumn,
|
||||
powersColumn,
|
||||
usedByColumn,
|
||||
popularityColumn,
|
||||
columnsColumn,
|
||||
lastRunColumn,
|
||||
editColumn,
|
||||
} = useQueryTableColumns({
|
||||
queries,
|
||||
@ -166,11 +164,11 @@ export default function QueriesListSection({
|
||||
editColumn,
|
||||
];
|
||||
|
||||
const popularQueriesColumns = [queryTextColumn(), usedByColumn, lastRunColumn, columnsColumn, popularityColumn];
|
||||
const popularQueriesColumns = [queryTextColumn(), usedByColumn, columnsColumn];
|
||||
|
||||
const downstreamQueriesColumns = [queryTextColumn(550), powersColumn, lastRunColumn];
|
||||
const downstreamQueriesColumns = [queryTextColumn(550), powersColumn];
|
||||
|
||||
const recentQueriesColumns = [queryTextColumn(550), lastRunColumn];
|
||||
const recentQueriesColumns = [queryTextColumn(550)];
|
||||
|
||||
const pagionationOptions: false | TablePaginationConfig = showPagination
|
||||
? ({
|
||||
|
||||
@ -54,17 +54,8 @@ export default function QueriesTab() {
|
||||
/**
|
||||
* Fetch the List of Popular Queries
|
||||
*/
|
||||
const {
|
||||
popularQueries,
|
||||
loading: popularQueriesLoading,
|
||||
pagination: popularQueriesPagination,
|
||||
total,
|
||||
sorting: popularSorting,
|
||||
selectedUsersFilter,
|
||||
setSelectedUsersFilter,
|
||||
selectedColumnsFilter,
|
||||
setSelectedColumnsFilter,
|
||||
} = usePopularQueries({ entityUrn, siblingUrn, filterText });
|
||||
const { selectedUsersFilter, setSelectedUsersFilter, selectedColumnsFilter, setSelectedColumnsFilter } =
|
||||
usePopularQueries({ entityUrn, siblingUrn, filterText });
|
||||
|
||||
/**
|
||||
* Fetch the List of Downstream Queries
|
||||
@ -90,18 +81,9 @@ export default function QueriesTab() {
|
||||
};
|
||||
|
||||
// can add something about initalLoading if there was never data, or have state that is like finishedInitialLoad = false, with useEffect
|
||||
const isLoading =
|
||||
!entityUrn ||
|
||||
highlightedQueriesLoading ||
|
||||
popularQueriesLoading ||
|
||||
downstreamQueriesLoading ||
|
||||
recentQueriesLoading;
|
||||
const isLoading = !entityUrn || highlightedQueriesLoading || downstreamQueriesLoading || recentQueriesLoading;
|
||||
const showEmptyView =
|
||||
!isLoading &&
|
||||
!recentQueries.length &&
|
||||
!highlightedQueries.length &&
|
||||
!downstreamQueries.length &&
|
||||
!popularQueries.length;
|
||||
!isLoading && !recentQueries.length && !highlightedQueries.length && !downstreamQueries.length;
|
||||
|
||||
// shared props with all of the QueriesListSection components below
|
||||
const props = {
|
||||
@ -159,19 +141,6 @@ export default function QueriesTab() {
|
||||
onButtonClick={() => setShowQueryBuilder(true)}
|
||||
/>
|
||||
)}
|
||||
{(popularQueries.length > 0 || popularQueriesLoading) && (
|
||||
<QueriesListSection
|
||||
title="Popular Queries"
|
||||
section={QueriesTabSection.Popular}
|
||||
tooltip="The most popular queries that were run against this dataset"
|
||||
queries={popularQueries}
|
||||
loading={popularQueriesLoading}
|
||||
totalQueries={total}
|
||||
pagination={popularQueriesPagination}
|
||||
sorting={popularSorting}
|
||||
{...props}
|
||||
/>
|
||||
)}
|
||||
{downstreamQueries.length > 0 && (
|
||||
<QueriesListSection
|
||||
title="Downstream Queries"
|
||||
|
||||
@ -7,7 +7,6 @@ import SearchFilter from '../../../../../../searchV2/filters/SearchFilter';
|
||||
import SelectedSearchFilters from '../../../../../../searchV2/filters/SelectedSearchFilters';
|
||||
import { UnionType } from '../../../../../../searchV2/utils/constants';
|
||||
import { ANTD_GRAY_V2, REDESIGN_COLORS } from '../../../../constants';
|
||||
import useUsersFilter from './useUsersFilter';
|
||||
import useColumnsFilter from './useColumnsFilter';
|
||||
|
||||
const ColumnsFilterWrapper = styled.div`
|
||||
@ -33,18 +32,11 @@ interface Props {
|
||||
export default function QueryFilters({
|
||||
selectedColumnsFilter,
|
||||
setSelectedColumnsFilter,
|
||||
setSelectedUsersFilter,
|
||||
setSelectedUsersFilter, // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
selectedUsersFilter,
|
||||
setPage,
|
||||
}: Props) {
|
||||
const onChangeFilters = (newFilters: FacetFilterInput[]) => {
|
||||
const usedByFilter = newFilters.find((f) => f.field === 'topUsersLast30DaysFeature');
|
||||
if (usedByFilter) {
|
||||
setSelectedUsersFilter(usedByFilter);
|
||||
} else {
|
||||
setSelectedUsersFilter({ field: 'topUsersLast30DaysFeature', values: [] });
|
||||
}
|
||||
|
||||
const columnsFilter = newFilters.find((f) => f.field === 'entities');
|
||||
if (columnsFilter) {
|
||||
setSelectedColumnsFilter(columnsFilter);
|
||||
@ -55,15 +47,13 @@ export default function QueryFilters({
|
||||
setPage(1);
|
||||
};
|
||||
|
||||
const usersFilter = useUsersFilter({ selectedColumnsFilter, selectedUsersFilter });
|
||||
const columnsFilter = useColumnsFilter({ selectedColumnsFilter, selectedUsersFilter, setSelectedColumnsFilter });
|
||||
|
||||
const filterPredicates: FilterPredicate[] = convertToAvailableFilterPredictes(
|
||||
[selectedUsersFilter, selectedColumnsFilter],
|
||||
[usersFilter, columnsFilter],
|
||||
[columnsFilter],
|
||||
);
|
||||
let selectedFilters: FacetFilterInput[] = selectedColumnsFilter.values?.length ? [selectedColumnsFilter] : [];
|
||||
selectedFilters = selectedUsersFilter.values?.length ? [...selectedFilters, selectedUsersFilter] : selectedFilters;
|
||||
const selectedFilters: FacetFilterInput[] = selectedColumnsFilter.values?.length ? [selectedColumnsFilter] : [];
|
||||
|
||||
const labelStyle = {
|
||||
backgroundColor: ANTD_GRAY_V2[15],
|
||||
@ -77,21 +67,13 @@ export default function QueryFilters({
|
||||
filter={columnsFilter}
|
||||
filterPredicates={filterPredicates}
|
||||
onChangeFilters={onChangeFilters}
|
||||
activeFilters={[selectedColumnsFilter, selectedUsersFilter]}
|
||||
activeFilters={[selectedColumnsFilter]}
|
||||
labelStyle={selectedColumnsFilter.values?.length ? undefined : labelStyle}
|
||||
shouldUseAggregationsFromFilter
|
||||
/>
|
||||
<SearchFilter
|
||||
filter={usersFilter}
|
||||
filterPredicates={filterPredicates}
|
||||
onChangeFilters={onChangeFilters}
|
||||
activeFilters={[selectedUsersFilter, selectedColumnsFilter]}
|
||||
labelStyle={selectedUsersFilter.values?.length ? undefined : labelStyle}
|
||||
shouldUseAggregationsFromFilter
|
||||
/>
|
||||
</FiltersWrapper>
|
||||
<SelectedSearchFilters
|
||||
availableFilters={[columnsFilter, usersFilter]}
|
||||
availableFilters={[columnsFilter]}
|
||||
selectedFilters={selectedFilters}
|
||||
unionType={UnionType.AND}
|
||||
onChangeFilters={onChangeFilters}
|
||||
|
||||
@ -1,56 +0,0 @@
|
||||
import { useEntityRegistryV2 } from '../../../../../../useEntityRegistry';
|
||||
import { useEntityData } from '../../../../../../entity/shared/EntityContext';
|
||||
import { EntityType, FacetFilterInput, QuerySource } from '../../../../../../../types.generated';
|
||||
import { useAggregateAcrossEntitiesQuery } from '../../../../../../../graphql/search.generated';
|
||||
import { getAndFilters } from '../utils/filterQueries';
|
||||
|
||||
interface Props {
|
||||
selectedColumnsFilter: FacetFilterInput;
|
||||
selectedUsersFilter: FacetFilterInput;
|
||||
}
|
||||
|
||||
export default function useUsersFilter({ selectedColumnsFilter, selectedUsersFilter }: Props) {
|
||||
const entityRegistry = useEntityRegistryV2();
|
||||
const { entityData } = useEntityData();
|
||||
const entityUrn = entityData?.urn;
|
||||
const siblingUrn = entityData?.siblingsSearch?.searchResults?.[0]?.entity?.urn;
|
||||
|
||||
const values = siblingUrn ? [entityUrn as string, siblingUrn] : [entityUrn as string];
|
||||
const entityFilter = { field: 'entities', values };
|
||||
const sourceFilter = { field: 'source', values: [QuerySource.System] };
|
||||
const andFilters = getAndFilters(selectedColumnsFilter, { ...selectedUsersFilter, values: [] }, [
|
||||
entityFilter,
|
||||
sourceFilter,
|
||||
]);
|
||||
const { data } = useAggregateAcrossEntitiesQuery({
|
||||
variables: {
|
||||
input: {
|
||||
facets: ['topUsersLast30DaysFeature'],
|
||||
query: '*',
|
||||
types: [EntityType.Query],
|
||||
orFilters: [{ and: andFilters }],
|
||||
searchFlags: {
|
||||
maxAggValues: 100,
|
||||
},
|
||||
},
|
||||
},
|
||||
skip: !entityUrn,
|
||||
});
|
||||
|
||||
const aggregations = data?.aggregateAcrossEntities?.facets?.find(
|
||||
(facet) => facet.field === 'topUsersLast30DaysFeature',
|
||||
)?.aggregations;
|
||||
|
||||
const userAggregations =
|
||||
aggregations
|
||||
?.map((agg) => ({
|
||||
value: agg.entity?.urn || agg.value,
|
||||
displayName: agg.entity?.urn ? entityRegistry.getDisplayName(agg.entity.type, agg.entity) : agg.value,
|
||||
count: agg.count,
|
||||
}))
|
||||
?.sort((aggA, aggB) => aggB.count - aggA.count) || [];
|
||||
|
||||
const usersFilter = { aggregations: userAggregations, displayName: 'Users', field: 'topUsersLast30DaysFeature' };
|
||||
|
||||
return usersFilter;
|
||||
}
|
||||
@ -1,7 +1,6 @@
|
||||
import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined';
|
||||
import EditOutlinedIcon from '@mui/icons-material/EditOutlined';
|
||||
import { Modal, Typography, message } from 'antd';
|
||||
import { Popover } from '@components';
|
||||
import React, { useState } from 'react';
|
||||
import styled from 'styled-components';
|
||||
import MarkdownViewer from '@src/app/entity/shared/components/legacy/MarkdownViewer';
|
||||
@ -10,11 +9,6 @@ import { CorpUser, EntityType } from '../../../../../../types.generated';
|
||||
import { useEntityRegistryV2 } from '../../../../../useEntityRegistry';
|
||||
import ActorAvatar from '../../../ActorAvatar';
|
||||
import { ActionButton } from '../../../containers/profile/sidebar/SectionActionButton';
|
||||
import {
|
||||
getBarsStatusFromPopularityTier,
|
||||
getQueryPopularityTier,
|
||||
} from '../../../containers/profile/sidebar/shared/utils';
|
||||
import { PopularityBars } from '../Schema/components/SchemaFieldDrawer/PopularityBars';
|
||||
import QueryBuilderModal from './QueryBuilderModal';
|
||||
import { Query } from './types';
|
||||
|
||||
@ -182,37 +176,10 @@ export const EditDeleteColumn = ({ query, hoveredQueryUrn, onEdited, onDeleted }
|
||||
);
|
||||
};
|
||||
|
||||
/*
|
||||
* Popularity Column
|
||||
*/
|
||||
|
||||
const PopularityWrapper = styled.div`
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
`;
|
||||
|
||||
interface PopularityColumnProps {
|
||||
interface ColumnProps {
|
||||
query: Query;
|
||||
}
|
||||
|
||||
export const PopularityColumn = ({ query }: PopularityColumnProps) => {
|
||||
const { runsPercentileLast30days } = query;
|
||||
if (!runsPercentileLast30days) return null;
|
||||
const tier = getQueryPopularityTier(runsPercentileLast30days);
|
||||
const status = getBarsStatusFromPopularityTier(tier);
|
||||
return (
|
||||
<Popover
|
||||
content={
|
||||
<>This query has been run more than {runsPercentileLast30days}% of other queries in the last 30 days.</>
|
||||
}
|
||||
>
|
||||
<PopularityWrapper>
|
||||
<PopularityBars status={status} />
|
||||
</PopularityWrapper>
|
||||
</Popover>
|
||||
);
|
||||
};
|
||||
|
||||
const ColumnsWrapper = styled.div`
|
||||
text-align: right;
|
||||
`;
|
||||
@ -220,6 +187,6 @@ const ColumnsWrapper = styled.div`
|
||||
/*
|
||||
* Columns Column
|
||||
*/
|
||||
export const ColumnsColumn = ({ query }: PopularityColumnProps) => {
|
||||
export const ColumnsColumn = ({ query }: ColumnProps) => {
|
||||
return <ColumnsWrapper>{query.columns?.length ?? 0}</ColumnsWrapper>;
|
||||
};
|
||||
|
||||
@ -17,7 +17,6 @@ export type Query = {
|
||||
createdBy?: CorpUser | null;
|
||||
poweredEntity?: Entity;
|
||||
usedBy?: CorpUser[];
|
||||
runsPercentileLast30days?: number | null;
|
||||
columns?: SchemaFieldEntity[];
|
||||
};
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { useState } from 'react';
|
||||
import { useListQueriesQuery } from '../../../../../../graphql/query.generated';
|
||||
import { FacetFilterInput, QueryEntity, QuerySource, SortOrder } from '../../../../../../types.generated';
|
||||
import { FacetFilterInput, QueryEntity, QuerySource } from '../../../../../../types.generated';
|
||||
import { filterQueries, getAndFilters, getQueryEntitiesFilter } from './utils/filterQueries';
|
||||
import usePagination from '../../../../../sharedV2/pagination/usePagination';
|
||||
import { DEFAULT_PAGE_SIZE } from './utils/constants';
|
||||
@ -13,16 +13,9 @@ interface Props {
|
||||
siblingUrn?: string;
|
||||
filterText: string;
|
||||
defaultSelectedColumns?: string[];
|
||||
defaultSelectedUsers?: string[];
|
||||
}
|
||||
|
||||
export const usePopularQueries = ({
|
||||
entityUrn,
|
||||
siblingUrn,
|
||||
filterText,
|
||||
defaultSelectedColumns,
|
||||
defaultSelectedUsers,
|
||||
}: Props) => {
|
||||
export const usePopularQueries = ({ entityUrn, siblingUrn, filterText, defaultSelectedColumns }: Props) => {
|
||||
const columnFromQueryParam = useQueryParamValue('column') as string | null;
|
||||
const siblingColumnFromQueryParam = useQueryParamValue('siblingColumn') as string | null;
|
||||
let columnsFromQueryParams = columnFromQueryParam ? [decodeURI(columnFromQueryParam)] : [];
|
||||
@ -34,7 +27,7 @@ export const usePopularQueries = ({
|
||||
values: [...(columnsFromQueryParams.length ? columnsFromQueryParams : defaultSelectedColumns || [])],
|
||||
};
|
||||
const [selectedColumnsFilter, setSelectedColumnsFilter] = useState<FacetFilterInput>(defaultColumnsFilter);
|
||||
const defaultUsersFilter = { field: 'topUsersLast30DaysFeature', values: [...(defaultSelectedUsers || [])] };
|
||||
const defaultUsersFilter = { field: '', values: [] }; // Not supported
|
||||
const [selectedUsersFilter, setSelectedUsersFilter] = useState<FacetFilterInput>(defaultUsersFilter);
|
||||
|
||||
const pagination = usePagination(DEFAULT_PAGE_SIZE);
|
||||
@ -50,11 +43,7 @@ export const usePopularQueries = ({
|
||||
start,
|
||||
count,
|
||||
source: QuerySource.System,
|
||||
sortInput:
|
||||
sortField && sortOrder
|
||||
? { sortCriterion: { field: sortField, sortOrder } }
|
||||
: { sortCriterion: { field: 'runsPercentileLast30days', sortOrder: SortOrder.Descending } },
|
||||
|
||||
sortInput: sortField && sortOrder ? { sortCriterion: { field: sortField, sortOrder } } : null,
|
||||
orFilters: [{ and: andFilters }],
|
||||
},
|
||||
},
|
||||
|
||||
@ -1,16 +1,14 @@
|
||||
import moment from 'moment';
|
||||
import React from 'react';
|
||||
import styled from 'styled-components';
|
||||
import { Tooltip } from '@components';
|
||||
import { Query } from './types';
|
||||
import QueryComponent from './Query';
|
||||
import { EditDeleteColumn, QueryCreatedBy, QueryDescription, PopularityColumn, ColumnsColumn } from './queryColumns';
|
||||
import { EditDeleteColumn, QueryCreatedBy, QueryDescription, ColumnsColumn } from './queryColumns';
|
||||
import { CorpUser, Entity } from '../../../../../../types.generated';
|
||||
import { EntityLink } from '../../../../../homeV2/reference/sections/EntityLink';
|
||||
import { useEntityRegistryV2 } from '../../../../../useEntityRegistry';
|
||||
import { Sorting } from '../../../../../sharedV2/sorting/useSorting';
|
||||
import TopUsersFacepile from '../../../containers/profile/sidebar/shared/TopUsersFacepile';
|
||||
import { toRelativeTimeString } from '../../../../../shared/time/timeUtils';
|
||||
|
||||
const UsersWrapper = styled.div`
|
||||
display: flex;
|
||||
@ -145,7 +143,7 @@ export default function useQueryTableColumns({
|
||||
key: 'usedBy',
|
||||
className: 'usedBy',
|
||||
sorter: shouldRelyOnBackendSorting
|
||||
? false // we don't support sorting by topUsersLast30DaysFeature on backend since it is a text field
|
||||
? false
|
||||
: (queryA, queryB) => {
|
||||
if (!queryA.usedBy || !queryA.usedBy[0] || !queryB.usedBy || !queryB.usedBy[0]) return 0;
|
||||
const usedByA = entityRegistry.getDisplayName(queryA.usedBy[0].type, queryA.usedBy[0]);
|
||||
@ -161,17 +159,6 @@ export default function useQueryTableColumns({
|
||||
},
|
||||
};
|
||||
|
||||
const popularityColumn = {
|
||||
title: 'Popularity',
|
||||
key: 'popularity',
|
||||
field: 'runsPercentileLast30days',
|
||||
width: 110,
|
||||
sorter: shouldRelyOnBackendSorting
|
||||
? true
|
||||
: (queryA, queryB) => queryA.runsPercentileLast30days - queryB.runsPercentileLast30days,
|
||||
render: (query: Query) => <PopularityColumn query={query} />,
|
||||
};
|
||||
|
||||
const columnsColumn = {
|
||||
title: 'Columns',
|
||||
key: 'columns',
|
||||
@ -179,25 +166,6 @@ export default function useQueryTableColumns({
|
||||
render: (query: Query) => <ColumnsColumn query={query} />,
|
||||
};
|
||||
|
||||
const lastRunColumn = {
|
||||
title: 'Last Run',
|
||||
dataIndex: 'lastRun',
|
||||
key: 'lastRun',
|
||||
field: 'lastExecutedAtFeature',
|
||||
className: 'lastRun',
|
||||
sorter: shouldRelyOnBackendSorting ? true : (queryA, queryB) => queryA.lastRun - queryB.lastRun,
|
||||
render: (lastRun: string) => {
|
||||
if (!lastRun) return null;
|
||||
return (
|
||||
<div>
|
||||
<Tooltip title={moment(lastRun).format('MM/DD/YYYY')}>
|
||||
{toRelativeTimeString(new Date(lastRun).getTime())}
|
||||
</Tooltip>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
const editColumn = {
|
||||
title: '',
|
||||
key: 'edit',
|
||||
@ -220,9 +188,7 @@ export default function useQueryTableColumns({
|
||||
createdDateColumn,
|
||||
powersColumn,
|
||||
usedByColumn,
|
||||
popularityColumn,
|
||||
columnsColumn,
|
||||
lastRunColumn,
|
||||
editColumn,
|
||||
};
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import NoStatsAvailble from '../../../../../../../../images/no-stats-available.s
|
||||
import { useBaseEntity, useRouteToTab } from '../../../../../../../entity/shared/EntityContext';
|
||||
import { ANTD_GRAY } from '../../../../../constants';
|
||||
import Query from '../../../Queries/Query';
|
||||
import { PopularityColumn, QueryCreatedBy } from '../../../Queries/queryColumns';
|
||||
import { QueryCreatedBy } from '../../../Queries/queryColumns';
|
||||
import { usePopularQueries } from '../../../Queries/usePopularQueries';
|
||||
import { GetDatasetQuery } from '../../../../../../../../graphql/dataset.generated';
|
||||
import Loading from '../../../../../../../shared/Loading';
|
||||
@ -57,15 +57,6 @@ const SubtitleSection = styled.div`
|
||||
flex-direction: row;
|
||||
`;
|
||||
|
||||
const PopularityLabel = styled.span`
|
||||
line-height: 26px;
|
||||
margin-right: 8px;
|
||||
`;
|
||||
|
||||
const PopularityColumnContainer = styled.div`
|
||||
margin-bottom: 5px;
|
||||
`;
|
||||
|
||||
const QUERIES_TO_SHOW = 6;
|
||||
|
||||
const SeeAllButton = styled(Button)`
|
||||
@ -173,12 +164,6 @@ export default function SchemaFieldQueriesSidebarTab({ properties: { fieldPath }
|
||||
)}
|
||||
on {moment(query.lastRun).format('MM/DD/YYYY')}
|
||||
</SubtitleSection>
|
||||
<SubtitleSection>
|
||||
<PopularityLabel>Popularity</PopularityLabel>
|
||||
<PopularityColumnContainer>
|
||||
<PopularityColumn query={query} />
|
||||
</PopularityColumnContainer>
|
||||
</SubtitleSection>
|
||||
</QuerySubtitleContainer>
|
||||
</StyledQueryCard>
|
||||
</StyledQueryContainer>
|
||||
|
||||
@ -11,11 +11,7 @@ import { HorizontalListSkeletons } from '../../../../HorizontalListSkeletons';
|
||||
import { Section } from '../Section';
|
||||
import { INSIGHT_CARD_MIN_WIDTH } from './cards/SearchListInsightCard';
|
||||
import { InsightStatusProvider } from './InsightStatusProvider';
|
||||
import { MOST_FREQUENTLY_UPDATED_ID, MostFrequentlyUpdated } from './cards/MostFrequentlyUpdated';
|
||||
import { MOST_QUERIED_ID, MostQueriedCard } from './cards/MostQueriedCard';
|
||||
import { MOST_ROWS_ID, MostRowsCard } from './cards/MostRowsCard';
|
||||
import { MOST_USERS_ID, MostUsersCard } from './cards/MostUsersCard';
|
||||
import { MOST_VIEWED_DASHBOARDS_ID, MostViewedDashboardsCard } from './cards/MostViewedDashboards';
|
||||
import { POPULAR_GLOSSARY_TERMS_ID, PopularGlossaryTerms } from './cards/PopularGlossaryTerms';
|
||||
import { RECENTLY_CREATED_DATASETS_ID, RecentlyCreatedDatasetsCard } from './cards/RecentlyCreatedDatasetsCard';
|
||||
import { RECENTLY_UPDATED_ID, RecentlyUpdatedDatasetsCard } from './cards/RecentlyUpdatedDatasetsCard';
|
||||
@ -30,27 +26,6 @@ type InsightSection = {
|
||||
};
|
||||
|
||||
const ALL_INSIGHTS: InsightSection[] = [
|
||||
{
|
||||
id: MOST_USERS_ID,
|
||||
component: MostUsersCard,
|
||||
personas: [
|
||||
PersonaType.TECHNICAL_USER,
|
||||
PersonaType.DATA_ENGINEER,
|
||||
PersonaType.DATA_STEWARD,
|
||||
PersonaType.DATA_LEADER,
|
||||
],
|
||||
},
|
||||
{
|
||||
id: MOST_VIEWED_DASHBOARDS_ID,
|
||||
component: MostViewedDashboardsCard,
|
||||
personas: [
|
||||
PersonaType.BUSINESS_USER,
|
||||
PersonaType.DATA_STEWARD,
|
||||
PersonaType.DATA_LEADER,
|
||||
PersonaType.TECHNICAL_USER,
|
||||
PersonaType.DATA_ENGINEER,
|
||||
],
|
||||
},
|
||||
{
|
||||
id: POPULAR_GLOSSARY_TERMS_ID,
|
||||
component: PopularGlossaryTerms,
|
||||
@ -62,27 +37,6 @@ const ALL_INSIGHTS: InsightSection[] = [
|
||||
PersonaType.BUSINESS_USER,
|
||||
],
|
||||
},
|
||||
{
|
||||
id: MOST_QUERIED_ID,
|
||||
component: MostQueriedCard,
|
||||
personas: [
|
||||
PersonaType.BUSINESS_USER,
|
||||
PersonaType.TECHNICAL_USER,
|
||||
PersonaType.DATA_ENGINEER,
|
||||
PersonaType.DATA_STEWARD,
|
||||
PersonaType.DATA_LEADER,
|
||||
],
|
||||
},
|
||||
{
|
||||
id: MOST_FREQUENTLY_UPDATED_ID,
|
||||
component: MostFrequentlyUpdated,
|
||||
personas: [
|
||||
PersonaType.TECHNICAL_USER,
|
||||
PersonaType.DATA_ENGINEER,
|
||||
PersonaType.DATA_STEWARD,
|
||||
PersonaType.DATA_LEADER,
|
||||
],
|
||||
},
|
||||
{
|
||||
id: RECENTLY_UPDATED_ID,
|
||||
component: RecentlyUpdatedDatasetsCard,
|
||||
|
||||
@ -1,19 +0,0 @@
|
||||
import React from 'react';
|
||||
import { buildMostUpdatedFilters, buildMostUpdatedSort } from './useGetMostUpdated';
|
||||
import { SearchListInsightCard } from './SearchListInsightCard';
|
||||
import { EntityType } from '../../../../../../../../types.generated';
|
||||
|
||||
export const MOST_FREQUENTLY_UPDATED_ID = 'MostFrequentlyUpdated';
|
||||
|
||||
export const MostFrequentlyUpdated = () => {
|
||||
return (
|
||||
<SearchListInsightCard
|
||||
id={MOST_FREQUENTLY_UPDATED_ID}
|
||||
tip="Tables with the most changes in the past month"
|
||||
title="Most Updated"
|
||||
types={[EntityType.Dataset]}
|
||||
filters={buildMostUpdatedFilters()}
|
||||
sort={buildMostUpdatedSort()}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@ -1,19 +0,0 @@
|
||||
import React from 'react';
|
||||
import { buildMostQueriedFilters, buildMostQueriedSort } from './useGetMostQueried';
|
||||
import { SearchListInsightCard } from './SearchListInsightCard';
|
||||
import { EntityType } from '../../../../../../../../types.generated';
|
||||
|
||||
export const MOST_QUERIED_ID = 'MostQueried';
|
||||
|
||||
export const MostQueriedCard = () => {
|
||||
return (
|
||||
<SearchListInsightCard
|
||||
id={MOST_QUERIED_ID}
|
||||
tip="Tables with the most queries in the past month"
|
||||
title="Most Queried"
|
||||
types={[EntityType.Dataset]}
|
||||
filters={buildMostQueriedFilters()}
|
||||
sort={buildMostQueriedSort()}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@ -1,19 +0,0 @@
|
||||
import React from 'react';
|
||||
import { EntityType } from '../../../../../../../../types.generated';
|
||||
import { SearchListInsightCard } from './SearchListInsightCard';
|
||||
import { buildMostUsersFilters, buildMostUsersSort } from './useGetMostUsers';
|
||||
|
||||
export const MOST_USERS_ID = 'MostUsers';
|
||||
|
||||
export const MostUsersCard = () => {
|
||||
return (
|
||||
<SearchListInsightCard
|
||||
id={MOST_USERS_ID}
|
||||
tip="Tables with the most unique users in the past month"
|
||||
types={[EntityType.Dataset]}
|
||||
title="Most Popular Tables"
|
||||
filters={buildMostUsersFilters()}
|
||||
sort={buildMostUsersSort()}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@ -1,19 +0,0 @@
|
||||
import React from 'react';
|
||||
import { EntityType } from '../../../../../../../../types.generated';
|
||||
import { SearchListInsightCard } from './SearchListInsightCard';
|
||||
import { buildMostViewedDashboardsFilter, buildMostViewedDashboardsSort } from './useGetMostViewedDashboards';
|
||||
|
||||
export const MOST_VIEWED_DASHBOARDS_ID = 'MostViewedDashboards';
|
||||
|
||||
export const MostViewedDashboardsCard = () => {
|
||||
return (
|
||||
<SearchListInsightCard
|
||||
id={MOST_VIEWED_DASHBOARDS_ID}
|
||||
tip="Dashboards with the most views in the past month"
|
||||
types={[EntityType.Dashboard]}
|
||||
title="Most Viewed Dashboards"
|
||||
filters={buildMostViewedDashboardsFilter()}
|
||||
sort={buildMostViewedDashboardsSort()}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@ -1,26 +0,0 @@
|
||||
import { FilterOperator, SortCriterion, SortOrder } from '../../../../../../../../types.generated';
|
||||
import { FilterSet } from '../../../../../../../entityV2/shared/components/styled/search/types';
|
||||
import { UnionType } from '../../../../../../../searchV2/utils/constants';
|
||||
|
||||
const MIN_QUERIES = '10';
|
||||
|
||||
export const buildMostQueriedFilters = (): FilterSet => {
|
||||
return {
|
||||
unionType: UnionType.AND,
|
||||
filters: [
|
||||
{
|
||||
field: 'usageCountLast30DaysFeature',
|
||||
values: [MIN_QUERIES],
|
||||
condition: FilterOperator.GreaterThanOrEqualTo,
|
||||
negated: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
};
|
||||
|
||||
export const buildMostQueriedSort = (): SortCriterion => {
|
||||
return {
|
||||
field: 'usageCountLast30DaysFeature',
|
||||
sortOrder: SortOrder.Descending,
|
||||
};
|
||||
};
|
||||
@ -1,26 +0,0 @@
|
||||
import { FilterOperator, SortCriterion, SortOrder } from '../../../../../../../../types.generated';
|
||||
import { FilterSet } from '../../../../../../../entityV2/shared/components/styled/search/types';
|
||||
import { UnionType } from '../../../../../../../searchV2/utils/constants';
|
||||
|
||||
const MIN_UPDATES = '10';
|
||||
|
||||
export const buildMostUpdatedFilters = (): FilterSet => {
|
||||
return {
|
||||
unionType: UnionType.AND,
|
||||
filters: [
|
||||
{
|
||||
field: 'writeCountLast30DaysFeature',
|
||||
values: [MIN_UPDATES],
|
||||
condition: FilterOperator.GreaterThanOrEqualTo,
|
||||
negated: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
};
|
||||
|
||||
export const buildMostUpdatedSort = (): SortCriterion => {
|
||||
return {
|
||||
field: 'writeCountLast30DaysFeature',
|
||||
sortOrder: SortOrder.Descending,
|
||||
};
|
||||
};
|
||||
@ -1,26 +0,0 @@
|
||||
import { FilterOperator, SortCriterion, SortOrder } from '../../../../../../../../types.generated';
|
||||
import { FilterSet } from '../../../../../../../entityV2/shared/components/styled/search/types';
|
||||
import { UnionType } from '../../../../../../../searchV2/utils/constants';
|
||||
|
||||
const MIN_USERS = '2';
|
||||
|
||||
export const buildMostUsersFilters = (): FilterSet => {
|
||||
return {
|
||||
unionType: UnionType.AND,
|
||||
filters: [
|
||||
{
|
||||
field: 'uniqueUserCountLast30DaysFeature',
|
||||
values: [MIN_USERS],
|
||||
condition: FilterOperator.GreaterThanOrEqualTo,
|
||||
negated: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
};
|
||||
|
||||
export const buildMostUsersSort = (): SortCriterion => {
|
||||
return {
|
||||
field: 'uniqueUserCountLast30DaysFeature',
|
||||
sortOrder: SortOrder.Descending,
|
||||
};
|
||||
};
|
||||
@ -1,26 +0,0 @@
|
||||
import { FilterOperator, SortCriterion, SortOrder } from '../../../../../../../../types.generated';
|
||||
import { FilterSet } from '../../../../../../../entityV2/shared/components/styled/search/types';
|
||||
import { UnionType } from '../../../../../../../searchV2/utils/constants';
|
||||
|
||||
const MIN_QUERIES = '1';
|
||||
|
||||
export const buildMostViewedDashboardsFilter = (): FilterSet => {
|
||||
return {
|
||||
unionType: UnionType.AND,
|
||||
filters: [
|
||||
{
|
||||
field: 'viewCountLast30DaysFeature',
|
||||
values: [MIN_QUERIES],
|
||||
condition: FilterOperator.GreaterThanOrEqualTo,
|
||||
negated: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
};
|
||||
|
||||
export const buildMostViewedDashboardsSort = (): SortCriterion => {
|
||||
return {
|
||||
field: 'viewCountLast30DaysFeature',
|
||||
sortOrder: SortOrder.Descending,
|
||||
};
|
||||
};
|
||||
@ -24,32 +24,3 @@ export const SORT_OPTIONS = {
|
||||
sortOrder: SortOrder.Descending,
|
||||
},
|
||||
};
|
||||
|
||||
// Extensions
|
||||
export const ROW_COUNT_FIELD = 'rowCountFeature';
|
||||
export const SIZE_IN_BYTES_FIELD = 'sizeInBytesFeature';
|
||||
export const QUERY_COUNT = 'queryCountLast30DaysFeature';
|
||||
export const UPDATE_COUNT = 'writeCountLast30DaysFeature';
|
||||
|
||||
export const DATASET_FEATURES_SORT_OPTIONS = {
|
||||
[`${ROW_COUNT_FIELD}_${SortOrder.Descending}`]: {
|
||||
label: 'Table Row Count',
|
||||
field: ROW_COUNT_FIELD,
|
||||
sortOrder: SortOrder.Descending,
|
||||
},
|
||||
[`${SIZE_IN_BYTES_FIELD}_${SortOrder.Descending}`]: {
|
||||
label: 'Table Size (Bytes)',
|
||||
field: SIZE_IN_BYTES_FIELD,
|
||||
sortOrder: SortOrder.Descending,
|
||||
},
|
||||
[`${QUERY_COUNT}_${SortOrder.Descending}`]: {
|
||||
label: 'Table Query Count (Last 30 Days)',
|
||||
field: QUERY_COUNT,
|
||||
sortOrder: SortOrder.Descending,
|
||||
},
|
||||
[`${UPDATE_COUNT}_${SortOrder.Descending}`]: {
|
||||
label: 'Table Update Count (Last 30 Days)',
|
||||
field: UPDATE_COUNT,
|
||||
sortOrder: SortOrder.Descending,
|
||||
},
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user