Skip to content

Commit a9069d4

Browse files
authored
feat(React): Powering lineage page through graphql endpoint (datahub-project#2099)
1 parent 2e8ebcf commit a9069d4

File tree

10 files changed

+160
-168
lines changed

10 files changed

+160
-168
lines changed

datahub-web-react/src/components/browse/BrowseResults.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import { Col, Pagination, Row } from 'antd';
2+
import { Col, Divider, Pagination, Row } from 'antd';
33
import { Content } from 'antd/lib/layout/layout';
44
import { BrowseResultGroup, EntityType, Entity } from '../../types.generated';
55
import BrowseResultCard from './BrowseResultCard';
@@ -43,7 +43,10 @@ export const BrowseResults = ({
4343
</Col>
4444
))}
4545
{entities.map((entity) => (
46-
<Col span={24}>{entityRegistry.renderBrowse(type, entity)}</Col>
46+
<Col span={24}>
47+
{entityRegistry.renderBrowse(type, entity)}
48+
<Divider />
49+
</Col>
4750
))}
4851
<Col span={24}>
4952
<Pagination

datahub-web-react/src/components/entity/dataset/profile/Lineage.tsx

+13-10
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,36 @@
11
import { List, Space, Typography } from 'antd';
22
import React from 'react';
3-
import { Dataset, EntityType } from '../../../../types.generated';
3+
import { DownstreamLineage, EntityType, UpstreamLineage } from '../../../../types.generated';
44
import { useEntityRegistry } from '../../../useEntityRegistry';
55
import { PreviewType } from '../../Entity';
66

77
export type Props = {
8-
upstreamEntities: Dataset[];
9-
downstreamEntities: Dataset[];
8+
upstreamLineage?: UpstreamLineage | null;
9+
downstreamLineage?: DownstreamLineage | null;
1010
};
1111

12-
export default function Lineage({ upstreamEntities, downstreamEntities }: Props) {
12+
export default function Lineage({ upstreamLineage, downstreamLineage }: Props) {
1313
const entityRegistry = useEntityRegistry();
14+
const upstreamEntities = upstreamLineage?.upstreams.map((upstream) => upstream.dataset);
15+
const downstreamEntities = downstreamLineage?.downstreams.map((downstream) => downstream.dataset);
16+
1417
return (
1518
<Space direction="vertical" style={{ width: '100%' }} size="large">
1619
<List
1720
bordered
1821
dataSource={upstreamEntities}
1922
header={<Typography.Title level={3}>Upstream</Typography.Title>}
20-
renderItem={(item) => {
21-
return entityRegistry.renderPreview(EntityType.Dataset, PreviewType.PREVIEW, item);
22-
}}
23+
renderItem={(item) => (
24+
<List.Item>{entityRegistry.renderPreview(EntityType.Dataset, PreviewType.PREVIEW, item)}</List.Item>
25+
)}
2326
/>
2427
<List
2528
bordered
2629
dataSource={downstreamEntities}
2730
header={<Typography.Title level={3}>Downstream</Typography.Title>}
28-
renderItem={(item) => {
29-
return entityRegistry.renderPreview(EntityType.Dataset, PreviewType.PREVIEW, item);
30-
}}
31+
renderItem={(item) => (
32+
<List.Item>{entityRegistry.renderPreview(EntityType.Dataset, PreviewType.PREVIEW, item)}</List.Item>
33+
)}
3134
/>
3235
</Space>
3336
);

datahub-web-react/src/components/entity/dataset/profile/Profile.tsx

+9-8
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { Dataset } from '../../../../types.generated';
77
import LineageView from './Lineage';
88
import PropertiesView from './Properties';
99
import DocumentsView from './Documentation';
10-
import { sampleDownstreamEntities, sampleUpstreamEntities } from './stories/lineageEntities';
1110
import DatasetHeader from './DatasetHeader';
1211

1312
export enum TabType {
@@ -30,7 +29,14 @@ export const Profile = ({ urn }: { urn: string }): JSX.Element => {
3029

3130
const getHeader = (dataset: Dataset) => <DatasetHeader dataset={dataset} />;
3231

33-
const getTabs = ({ ownership, properties, institutionalMemory, schema }: Dataset) => {
32+
const getTabs = ({
33+
ownership,
34+
upstreamLineage,
35+
downstreamLineage,
36+
properties,
37+
institutionalMemory,
38+
schema,
39+
}: Dataset) => {
3440
return [
3541
{
3642
name: TabType.Ownership,
@@ -53,12 +59,7 @@ export const Profile = ({ urn }: { urn: string }): JSX.Element => {
5359
{
5460
name: TabType.Lineage,
5561
path: TabType.Lineage.toLowerCase(),
56-
content: (
57-
<LineageView
58-
upstreamEntities={sampleUpstreamEntities}
59-
downstreamEntities={sampleDownstreamEntities}
60-
/>
61-
),
62+
content: <LineageView upstreamLineage={upstreamLineage} downstreamLineage={downstreamLineage} />,
6263
},
6364
{
6465
name: TabType.Properties,

datahub-web-react/src/components/entity/dataset/profile/__tests__/Lineage.test.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import React from 'react';
22
import { render } from '@testing-library/react';
33
import Lineage from '../Lineage';
4-
import { sampleUpstreamEntities, sampleDownstreamEntities } from '../stories/lineageEntities';
4+
import { sampleDownstreamLineage, sampleUpstreamLineage } from '../stories/lineageEntities';
55
import TestPageContainer from '../../../../../utils/test-utils/TestPageContainer';
66

77
describe('Lineage', () => {
88
it('renders', () => {
99
const { getByText } = render(
1010
<TestPageContainer>
11-
<Lineage upstreamEntities={sampleUpstreamEntities} downstreamEntities={sampleDownstreamEntities} />,
11+
<Lineage upstreamLineage={sampleUpstreamLineage} downstreamLineage={sampleDownstreamLineage} />,
1212
</TestPageContainer>,
1313
);
1414
expect(getByText('Upstream HiveDataset')).toBeInTheDocument();

datahub-web-react/src/components/entity/dataset/profile/stories/Lineage.stories.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Story, Meta } from '@storybook/react';
33

44
import TestPageContainer from '../../../../../utils/test-utils/TestPageContainer';
55
import Lineage, { Props } from '../Lineage';
6-
import { sampleUpstreamEntities, sampleDownstreamEntities } from './lineageEntities';
6+
import { sampleDownstreamLineage, sampleUpstreamLineage } from './lineageEntities';
77

88
export default {
99
title: 'Dataset Profile / Lineage',
@@ -13,7 +13,7 @@ export default {
1313
const Template: Story<Props> = (args) => <Lineage {...args} />;
1414

1515
export const UpstreamAndDownstream = Template.bind({});
16-
UpstreamAndDownstream.args = { upstreamEntities: sampleUpstreamEntities, downstreamEntities: sampleDownstreamEntities };
16+
UpstreamAndDownstream.args = { upstreamLineage: sampleUpstreamLineage, downstreamLineage: sampleDownstreamLineage };
1717
UpstreamAndDownstream.decorators = [
1818
(InnerStory) => (
1919
<TestPageContainer>

datahub-web-react/src/components/entity/dataset/profile/stories/lineageEntities.ts

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { EntityType, FabricType, PlatformNativeType } from '../../../../../types.generated';
1+
import {
2+
DatasetLineageType,
3+
DownstreamLineage,
4+
EntityType,
5+
FabricType,
6+
PlatformNativeType,
7+
UpstreamLineage,
8+
} from '../../../../../types.generated';
29

310
export const sampleUpstreamEntities = [
411
{
@@ -85,3 +92,19 @@ export const sampleDownstreamEntities = [
8592
},
8693
},
8794
];
95+
96+
export const sampleUpstreamLineage = {
97+
upstreams: sampleUpstreamEntities.map((entity) => ({
98+
dataset: entity,
99+
type: DatasetLineageType.Transformed,
100+
created: { time: 0 },
101+
})),
102+
} as UpstreamLineage;
103+
104+
export const sampleDownstreamLineage = {
105+
downstreams: sampleDownstreamEntities.map((entity) => ({
106+
dataset: entity,
107+
type: DatasetLineageType.Transformed,
108+
created: { time: 0 },
109+
})),
110+
} as DownstreamLineage;

datahub-web-react/src/components/preview/DefaultPreviewCard.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Divider, Space } from 'antd';
1+
import { Space } from 'antd';
22
import React from 'react';
33
import { Link } from 'react-router-dom';
44

@@ -10,13 +10,12 @@ interface Props extends React.PropsWithChildren<any> {
1010
export default function DefaultPreviewCard({ title, url, children }: Props) {
1111
return (
1212
<Space direction="vertical" style={{ width: '100%' }}>
13-
<div style={{ padding: '0% 5%' }}>
13+
<div style={{ padding: '8px' }}>
1414
<Link to={url} style={{ color: '#0073b1' }} type="link">
1515
{title}
1616
</Link>
1717
{children}
1818
</div>
19-
<Divider />
2019
</Space>
2120
);
2221
}

datahub-web-react/src/components/search/SearchPage.tsx

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import React from 'react';
22
import * as QueryString from 'query-string';
33
import { useHistory, useLocation, useParams } from 'react-router';
4-
import { Affix, Col, Row, Tabs, Layout } from 'antd';
4+
import { Affix, Col, Row, Tabs, Layout, List } from 'antd';
5+
56
import { SearchablePage } from './SearchablePage';
67
import { useGetSearchResultsQuery } from '../../graphql/search.generated';
78
import { SearchResults } from './SearchResults';
@@ -67,9 +68,13 @@ export const SearchPage = () => {
6768
navigateToSearchUrl({ type: activeType, query, page: newPage, filters, history, entityRegistry });
6869
};
6970

70-
const toSearchResults = (elements: any) => {
71-
return elements.map((element: any) => entityRegistry.renderSearchResult(activeType, element));
72-
};
71+
const toSearchResults = (elements: any) => (
72+
<List
73+
dataSource={elements}
74+
renderItem={(item) => <List.Item>{entityRegistry.renderSearchResult(activeType, item)}</List.Item>}
75+
bordered
76+
/>
77+
);
7378

7479
const searchResults = toSearchResults(data?.search?.entities || []);
7580

datahub-web-react/src/components/search/SearchResults.tsx

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ interface Props {
66
pageStart: number;
77
pageSize: number;
88
totalResults: number;
9-
results: Array<JSX.Element>;
9+
results: React.ReactNode;
1010
onChangePage: (page: number) => void;
1111
}
1212

1313
export const SearchResults = ({ typeName, pageStart, pageSize, totalResults, results, onChangePage }: Props) => {
1414
return (
1515
<Card
16-
style={{ border: '1px solid #d2d2d2' }}
1716
title={<h1 style={{ marginBottom: '0px' }}>{typeName}</h1>}
18-
bodyStyle={{ padding: '24px 0px' }}
1917
extra={
2018
<div style={{ color: 'grey' }}>
2119
Showing {pageStart * pageSize} - {pageStart * pageSize + pageSize} of {totalResults} results

0 commit comments

Comments
 (0)