Next
diff --git a/datahub-web-react/src/app/ingest/source/builder/DefineRecipeStep.tsx b/datahub-web-react/src/app/ingest/source/builder/DefineRecipeStep.tsx
index c16193b061b793..e6aded01b55575 100644
--- a/datahub-web-react/src/app/ingest/source/builder/DefineRecipeStep.tsx
+++ b/datahub-web-react/src/app/ingest/source/builder/DefineRecipeStep.tsx
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from 'react';
-import { Alert, Button, message, Space, Typography } from 'antd';
+import { Alert, message, Space, Typography } from 'antd';
import styled from 'styled-components';
+import { Button } from '@src/alchemy-components';
import { StepProps } from './types';
import { getPlaceholderRecipe, getSourceConfigs, jsonToYaml } from '../utils';
import { YamlEditor } from './YamlEditor';
@@ -140,7 +141,7 @@ export const DefineRecipeStep = ({ state, updateState, goTo, prev, ingestionSour
known problem the DataHub team is working to solve!
- setShowLookerBanner(false)}>
+ setShowLookerBanner(false)}>
I have set up LookML ingestion!
@@ -161,10 +162,10 @@ export const DefineRecipeStep = ({ state, updateState, goTo, prev, ingestionSour
-
+
Previous
-
+
Next
diff --git a/datahub-web-react/src/app/ingest/source/builder/NameSourceStep.tsx b/datahub-web-react/src/app/ingest/source/builder/NameSourceStep.tsx
index 68e6c8d3436fb9..53a66f9cca0566 100644
--- a/datahub-web-react/src/app/ingest/source/builder/NameSourceStep.tsx
+++ b/datahub-web-react/src/app/ingest/source/builder/NameSourceStep.tsx
@@ -1,4 +1,5 @@
-import { Button, Checkbox, Collapse, Form, Input, Tooltip, Typography } from 'antd';
+import { Checkbox, Collapse, Form, Input, Typography } from 'antd';
+import { Button, Tooltip } from '@components';
import React from 'react';
import styled from 'styled-components';
import { SourceBuilderState, StepProps, StringMapEntryInput } from './types';
@@ -255,9 +256,12 @@ export const NameSourceStep = ({ state, updateState, prev, submit }: StepProps)
- Previous
+
+ Previous
+
0)}
onClick={() => onClickCreate(false)}
@@ -268,7 +272,6 @@ export const NameSourceStep = ({ state, updateState, prev, submit }: StepProps)
0)}
onClick={() => onClickCreate(true)}
- type="primary"
>
Save & Run
diff --git a/datahub-web-react/src/app/ingest/source/builder/RecipeBuilder.tsx b/datahub-web-react/src/app/ingest/source/builder/RecipeBuilder.tsx
index 2d0bfe340c5065..16327b6c8b44de 100644
--- a/datahub-web-react/src/app/ingest/source/builder/RecipeBuilder.tsx
+++ b/datahub-web-react/src/app/ingest/source/builder/RecipeBuilder.tsx
@@ -1,5 +1,6 @@
import React, { useState } from 'react';
-import { Button, message, Typography } from 'antd';
+import { message, Typography } from 'antd';
+import { Button } from '@src/alchemy-components';
import YAML from 'yamljs';
import { CodeOutlined, FormOutlined } from '@ant-design/icons';
import styled from 'styled-components/macro';
@@ -45,6 +46,7 @@ const Title = styled(Typography.Title)`
const ButtonsWrapper = styled.div`
display: flex;
justify-content: flex-end;
+ gap: 16px;
`;
const HeaderContainer = styled.div`
@@ -94,7 +96,8 @@ function RecipeBuilder(props: Props) {
switchViews(true)}
data-testid="recipe-builder-form-button"
@@ -102,7 +105,8 @@ function RecipeBuilder(props: Props) {
Form
switchViews(false)}
data-testid="recipe-builder-yaml-button"
@@ -128,10 +132,10 @@ function RecipeBuilder(props: Props) {
-
+
Previous
-
+
Next
diff --git a/datahub-web-react/src/app/ingest/source/builder/RecipeForm/RecipeForm.tsx b/datahub-web-react/src/app/ingest/source/builder/RecipeForm/RecipeForm.tsx
index 528c1fe4a6a9e2..09dd52dd01a419 100644
--- a/datahub-web-react/src/app/ingest/source/builder/RecipeForm/RecipeForm.tsx
+++ b/datahub-web-react/src/app/ingest/source/builder/RecipeForm/RecipeForm.tsx
@@ -1,6 +1,7 @@
import React, { Fragment } from 'react';
-import { Button, Collapse, Form, message, Tooltip, Typography } from 'antd';
+import { Collapse, Form, message, Typography } from 'antd';
+import { Button, Tooltip } from '@components';
import { get } from 'lodash';
import YAML from 'yamljs';
import { ApiOutlined, FilterOutlined, QuestionCircleOutlined, SettingOutlined } from '@ant-design/icons';
@@ -230,12 +231,10 @@ function RecipeForm(props: Props) {
-
+
Previous
-
- Next
-
+ Next
);
diff --git a/datahub-web-react/src/app/ingest/source/builder/RecipeForm/TestConnection/TestConnectionButton.tsx b/datahub-web-react/src/app/ingest/source/builder/RecipeForm/TestConnection/TestConnectionButton.tsx
index b1bd4d6c3838d6..3062c2ad262887 100644
--- a/datahub-web-react/src/app/ingest/source/builder/RecipeForm/TestConnection/TestConnectionButton.tsx
+++ b/datahub-web-react/src/app/ingest/source/builder/RecipeForm/TestConnection/TestConnectionButton.tsx
@@ -1,7 +1,7 @@
import { CheckCircleOutlined } from '@ant-design/icons';
-import { Button, message } from 'antd';
+import { message } from 'antd';
+import { Button } from '@src/alchemy-components';
import React, { useEffect, useState } from 'react';
-import { green } from '@ant-design/colors';
import {
useCreateTestConnectionRequestMutation,
useGetIngestionExecutionRequestLazyQuery,
@@ -108,8 +108,8 @@ function TestConnectionButton(props: Props) {
return (
<>
-
-
+
+
Test Connection
{isModalVisible && (
diff --git a/datahub-web-react/src/app/ingest/source/builder/SelectTemplateStep.tsx b/datahub-web-react/src/app/ingest/source/builder/SelectTemplateStep.tsx
index e014cdcc8e2240..5b4b526bb91fed 100644
--- a/datahub-web-react/src/app/ingest/source/builder/SelectTemplateStep.tsx
+++ b/datahub-web-react/src/app/ingest/source/builder/SelectTemplateStep.tsx
@@ -1,8 +1,9 @@
import React, { useState } from 'react';
-import { Button, Input } from 'antd';
+import { Input } from 'antd';
import { FormOutlined, SearchOutlined } from '@ant-design/icons';
import styled from 'styled-components';
+import { Button } from '@src/alchemy-components';
import { SourceConfig, SourceBuilderState, StepProps } from './types';
import { IngestionSourceBuilderStep } from './steps';
import useGetSourceLogoUrl from './useGetSourceLogoUrl';
@@ -23,10 +24,6 @@ const Section = styled.div`
overflow: hidden;
`;
-const CancelButton = styled(Button)`
- max-width: 120px;
-`;
-
const SearchBarContainer = styled.div`
display: flex;
justify-content: end;
@@ -134,7 +131,9 @@ export const SelectTemplateStep = ({ state, updateState, goTo, cancel, ingestion
))}
- Cancel
+
+ Cancel
+
);
};
diff --git a/datahub-web-react/src/app/lineage/manage/ManageLineageModal.tsx b/datahub-web-react/src/app/lineage/manage/ManageLineageModal.tsx
index ed792724ebedf7..5648838bb5e0d6 100644
--- a/datahub-web-react/src/app/lineage/manage/ManageLineageModal.tsx
+++ b/datahub-web-react/src/app/lineage/manage/ManageLineageModal.tsx
@@ -107,8 +107,8 @@ export default function ManageLineageModal({
});
}
})
- .catch(() => {
- message.error('Error updating lineage');
+ .catch((error) => {
+ message.error(error.message || 'Error updating lineage');
});
}
diff --git a/datahub-web-react/src/app/lineageV2/LineageEntityNode/NodeContents.tsx b/datahub-web-react/src/app/lineageV2/LineageEntityNode/NodeContents.tsx
index d735bced034a5f..14614bc0451d54 100644
--- a/datahub-web-react/src/app/lineageV2/LineageEntityNode/NodeContents.tsx
+++ b/datahub-web-react/src/app/lineageV2/LineageEntityNode/NodeContents.tsx
@@ -1,4 +1,5 @@
import { LoadingOutlined } from '@ant-design/icons';
+import VersioningBadge from '@app/entityV2/shared/versioning/VersioningBadge';
import ContainerPath from '@app/lineageV2/LineageEntityNode/ContainerPath';
import GhostEntityMenu from '@app/lineageV2/LineageEntityNode/GhostEntityMenu';
import SchemaFieldNodeContents from '@app/lineageV2/LineageEntityNode/SchemaFieldNodeContents';
@@ -222,6 +223,12 @@ const PropertyBadgeWrapper = styled.div`
top: -16px;
`;
+const StyledVersioningBadge = styled(VersioningBadge)`
+ padding: 0 4px;
+ line-height: 1;
+ max-width: 100px;
+`;
+
interface Props {
urn: string;
type: EntityType;
@@ -441,6 +448,15 @@ function NodeContents(props: Props & LineageEntity & DisplayedColumns) {
title={entity?.name}
highlightText={searchQuery}
highlightColor={highlightColor}
+ extra={
+ entity?.versionProperties && (
+
+ )
+ }
/>
{entity?.deprecation?.deprecated && (
([0, []]);
const [hideTransformations, setHideTransformations] = useShouldHideTransformations();
- const [showDataProcessInstances, setShowDataProcessInstances] = useState(false);
+ const [showDataProcessInstances, setShowDataProcessInstances] = useShouldShowDataProcessInstances();
const [showGhostEntities, setShowGhostEntities] = useState(false);
diff --git a/datahub-web-react/src/app/lineageV2/LineageFilterNode/useFetchFilterNodeContents.ts b/datahub-web-react/src/app/lineageV2/LineageFilterNode/useFetchFilterNodeContents.ts
index cdfd7f66f3a1ff..75a2b024aab017 100644
--- a/datahub-web-react/src/app/lineageV2/LineageFilterNode/useFetchFilterNodeContents.ts
+++ b/datahub-web-react/src/app/lineageV2/LineageFilterNode/useFetchFilterNodeContents.ts
@@ -1,12 +1,12 @@
-import { DBT_URN } from '@app/ingest/source/builder/constants';
import { useGetLineageTimeParams } from '@app/lineage/utils/useGetLineageTimeParams';
import { LineageNodesContext } from '@app/lineageV2/common';
import computeOrFilters from '@app/lineageV2/LineageFilterNode/computeOrFilters';
+import { DEFAULT_IGNORE_AS_HOPS, DEFAULT_SEARCH_FLAGS } from '@app/lineageV2/useSearchAcrossLineage';
import { DEGREE_FILTER_NAME } from '@app/search/utils/constants';
import { useContext } from 'react';
import { PlatformFieldsFragment } from '../../../graphql/fragments.generated';
import { useAggregateAcrossLineageQuery } from '../../../graphql/search.generated';
-import { AggregationMetadata, EntityType, LineageDirection } from '../../../types.generated';
+import { AggregationMetadata, LineageDirection } from '../../../types.generated';
import { ENTITY_SUB_TYPE_FILTER_NAME, FILTER_DELIMITER, PLATFORM_FILTER_NAME } from '../../searchV2/utils/constants';
export type PlatformAggregate = readonly [string, number, PlatformFieldsFragment];
@@ -25,7 +25,7 @@ export default function useFetchFilterNodeContents(parent: string, direction: Li
const orFilters = computeOrFilters(
[{ field: DEGREE_FILTER_NAME, values: ['1'] }],
hideTransformations,
- showDataProcessInstances,
+ !showDataProcessInstances,
);
const { data } = useAggregateAcrossLineageQuery({
skip,
@@ -39,15 +39,10 @@ export default function useFetchFilterNodeContents(parent: string, direction: Li
lineageFlags: {
startTimeMillis,
endTimeMillis,
- ignoreAsHops: [
- {
- entityType: EntityType.Dataset,
- platforms: [DBT_URN],
- },
- { entityType: EntityType.DataJob },
- ],
+ ignoreAsHops: DEFAULT_IGNORE_AS_HOPS,
},
searchFlags: {
+ ...DEFAULT_SEARCH_FLAGS,
skipCache: true, // TODO: Figure how to get around not needing this
},
},
diff --git a/datahub-web-react/src/app/lineageV2/manualLineage/ManageLineageModal.tsx b/datahub-web-react/src/app/lineageV2/manualLineage/ManageLineageModal.tsx
index 9f70de2b6f675e..dd5a995dd56a76 100644
--- a/datahub-web-react/src/app/lineageV2/manualLineage/ManageLineageModal.tsx
+++ b/datahub-web-react/src/app/lineageV2/manualLineage/ManageLineageModal.tsx
@@ -1,7 +1,8 @@
import { LoadingOutlined } from '@ant-design/icons';
import React, { useContext, useEffect, useState } from 'react';
-import { Button, message, Modal } from 'antd';
+import { message, Modal } from 'antd';
import styled from 'styled-components/macro';
+import { Button } from '@src/alchemy-components';
import { toTitleCase } from '../../../graphql-mock/helper';
import { EventType } from '../../analytics';
import analytics from '../../analytics/analytics';
@@ -85,9 +86,8 @@ export default function ManageLineageModal({ node, direction, closeModal, refetc
});
}
})
- .catch((e) => {
- message.error('Error updating lineage');
- console.warn(e);
+ .catch((error) => {
+ message.error(error.message || 'Error updating lineage');
});
}
@@ -101,11 +101,11 @@ export default function ManageLineageModal({ node, direction, closeModal, refetc
open
footer={
-
+
Cancel
- Save Changes
+ Save
}
diff --git a/datahub-web-react/src/app/lineageV2/types.ts b/datahub-web-react/src/app/lineageV2/types.ts
index 4a2d41bb4b8020..71a270d353825d 100644
--- a/datahub-web-react/src/app/lineageV2/types.ts
+++ b/datahub-web-react/src/app/lineageV2/types.ts
@@ -11,6 +11,7 @@ import {
SchemaMetadata,
Status,
StructuredProperties,
+ VersionProperties,
} from '@types';
export enum LineageAssetType {
@@ -67,6 +68,7 @@ export interface FetchedEntityV2 {
inputFields?: InputFields;
canEditLineage?: boolean;
health?: Health[];
+ versionProperties?: VersionProperties;
lineageAssets?: Map;
lineageSiblingIcon?: string;
containers?: GenericEntityProperties[];
diff --git a/datahub-web-react/src/app/lineageV2/useSearchAcrossLineage.ts b/datahub-web-react/src/app/lineageV2/useSearchAcrossLineage.ts
index eb52ce71f0fd5d..bd354617770e4b 100644
--- a/datahub-web-react/src/app/lineageV2/useSearchAcrossLineage.ts
+++ b/datahub-web-react/src/app/lineageV2/useSearchAcrossLineage.ts
@@ -22,6 +22,24 @@ import {
const PER_HOP_LIMIT = 2;
+export const DEFAULT_IGNORE_AS_HOPS = [
+ {
+ entityType: EntityType.Dataset,
+ platforms: [DBT_URN],
+ },
+ {
+ entityType: EntityType.SchemaField,
+ platforms: [DBT_URN],
+ },
+ { entityType: EntityType.DataJob },
+ { entityType: EntityType.DataProcessInstance },
+];
+
+export const DEFAULT_SEARCH_FLAGS = {
+ groupingSpec: { groupingCriteria: [] },
+ filterNonLatestVersions: false,
+};
+
/**
* Fetches the lineage structure for a given urn and direction, and updates the nodes map with the results.
* @param urn Urn for which to fetch lineage
@@ -68,22 +86,11 @@ export default function useSearchAcrossLineage(
startTimeMillis,
endTimeMillis,
entitiesExploredPerHopLimit: PER_HOP_LIMIT,
- ignoreAsHops: [
- {
- entityType: EntityType.Dataset,
- platforms: [DBT_URN],
- },
- {
- entityType: EntityType.SchemaField,
- platforms: [DBT_URN],
- },
- { entityType: EntityType.DataJob },
- { entityType: EntityType.DataProcessInstance },
- ],
+ ignoreAsHops: DEFAULT_IGNORE_AS_HOPS,
},
searchFlags: {
+ ...DEFAULT_SEARCH_FLAGS,
skipCache: !!skipCache,
- groupingSpec: { groupingCriteria: [] },
},
};
diff --git a/datahub-web-react/src/app/lineageV2/useShouldShowDataProcessInstances.ts b/datahub-web-react/src/app/lineageV2/useShouldShowDataProcessInstances.ts
new file mode 100644
index 00000000000000..50356ec8cd1c53
--- /dev/null
+++ b/datahub-web-react/src/app/lineageV2/useShouldShowDataProcessInstances.ts
@@ -0,0 +1,26 @@
+import { useCallback, useState } from 'react';
+
+export default function useShouldShowDataProcessInstances(): [boolean, (value: boolean) => void] {
+ const defaultValue = inLocalStorage() ? loadFromLocalStorage() : true;
+ const [showInstances, setShowInstances] = useState(defaultValue);
+ const setter = useCallback((value: boolean) => {
+ setShowInstances(value);
+ saveToLocalStorage(value);
+ }, []);
+
+ return [showInstances, setter];
+}
+
+const SHOW_DATA_PROCESS_INSTANCES_KEY = 'lineageV2__showDataProcessInstances';
+
+function inLocalStorage(): boolean {
+ return localStorage.getItem(SHOW_DATA_PROCESS_INSTANCES_KEY) !== null;
+}
+
+function loadFromLocalStorage(): boolean {
+ return localStorage.getItem(SHOW_DATA_PROCESS_INSTANCES_KEY) === 'true';
+}
+
+function saveToLocalStorage(showInstances: boolean) {
+ localStorage.setItem(SHOW_DATA_PROCESS_INSTANCES_KEY, String(showInstances));
+}
diff --git a/datahub-web-react/src/app/permissions/policy/PolicyBuilderModal.tsx b/datahub-web-react/src/app/permissions/policy/PolicyBuilderModal.tsx
index 7471aa476dc23e..3989a2c4c598e2 100644
--- a/datahub-web-react/src/app/permissions/policy/PolicyBuilderModal.tsx
+++ b/datahub-web-react/src/app/permissions/policy/PolicyBuilderModal.tsx
@@ -1,6 +1,7 @@
import React, { useState } from 'react';
import styled from 'styled-components/macro';
-import { Button, Modal, Steps } from 'antd';
+import { Modal, Steps } from 'antd';
+import { Button } from '@src/alchemy-components';
import PolicyPrivilegeForm from './PolicyPrivilegeForm';
import PolicyTypeForm from './PolicyTypeForm';
import PolicyActorForm from './PolicyActorForm';
@@ -182,16 +183,20 @@ export default function PolicyBuilderModal({ policy, setPolicy, open, onClose, o
{activeStep.content}
- {activeStepIndex > 0 && prev()}>Previous }
+ {activeStepIndex > 0 && (
+ prev()}>
+ Previous
+
+ )}
{activeStepIndex < policySteps.length - 1 && activeStep.complete && (
- next()}>
+ next()}>
Next
)}
{activeStepIndex === policySteps.length - 1 && activeStep.complete && (
-
+
Save
)}
diff --git a/datahub-web-react/src/app/permissions/roles/ManageRoles.tsx b/datahub-web-react/src/app/permissions/roles/ManageRoles.tsx
index 151d23300c7ba8..671831fe4f5361 100644
--- a/datahub-web-react/src/app/permissions/roles/ManageRoles.tsx
+++ b/datahub-web-react/src/app/permissions/roles/ManageRoles.tsx
@@ -1,5 +1,6 @@
import React, { useEffect, useMemo, useState } from 'react';
-import { Button, Empty, message, Pagination, Tooltip, Typography } from 'antd';
+import { Empty, message, Pagination, Typography } from 'antd';
+import { Button, Tooltip } from '@components';
import styled from 'styled-components';
import * as QueryString from 'query-string';
import { useLocation } from 'react-router';
@@ -197,12 +198,13 @@ export const ManageRoles = () => {
{
setIsBatchAddRolesModalVisible(true);
setFocusRole(record.role);
}}
>
- ADD USERS
+ Add Users
diff --git a/datahub-web-react/src/app/searchV2/SearchBar.tsx b/datahub-web-react/src/app/searchV2/SearchBar.tsx
index 937113102506cc..8f7ffb5d10d7a2 100644
--- a/datahub-web-react/src/app/searchV2/SearchBar.tsx
+++ b/datahub-web-react/src/app/searchV2/SearchBar.tsx
@@ -1,9 +1,9 @@
import React, { useEffect, useMemo, useState, useRef, useCallback } from 'react';
-import { Input, AutoComplete, Button, Skeleton } from 'antd';
+import { Input, AutoComplete, Skeleton } from 'antd';
import { CloseCircleFilled, SearchOutlined } from '@ant-design/icons';
import styled from 'styled-components/macro';
import { useHistory } from 'react-router';
-import { colors } from '@src/alchemy-components';
+import { Button, colors } from '@src/alchemy-components';
import { AutoCompleteResultForEntity, FacetFilterInput, ScenarioType } from '../../types.generated';
import { EntityRegistry } from '../../entityRegistryContext';
import filterSearchQuery from './utils/filterSearchQuery';
@@ -333,7 +333,7 @@ export const SearchBar = ({
value: 'explore-all-unique-key',
type: '',
label: (
-
+
Explore all →
),
diff --git a/datahub-web-react/src/app/searchV2/filters/AddFilterDropdown.tsx b/datahub-web-react/src/app/searchV2/filters/AddFilterDropdown.tsx
index af856f5dde42b3..7a8dc0f8736f28 100644
--- a/datahub-web-react/src/app/searchV2/filters/AddFilterDropdown.tsx
+++ b/datahub-web-react/src/app/searchV2/filters/AddFilterDropdown.tsx
@@ -1,7 +1,7 @@
/* eslint-disable import/no-cycle */
import { PlusOutlined } from '@ant-design/icons';
-import { Button, Dropdown, Menu } from 'antd';
-import { Popover } from '@components';
+import { Dropdown, Menu } from 'antd';
+import { Button, Popover } from '@components';
import React, { useState } from 'react';
import styled from 'styled-components';
import { IconStyleType } from '../../entity/Entity';
@@ -95,7 +95,8 @@ export default function AddFilterDropdown({ fields = DEFAULT_FILTER_FIELDS, onAd
menu={{ items }}
dropdownRender={(menu) => {menu} }
>
- }>
+
+
Add filter
diff --git a/datahub-web-react/src/app/searchV2/filters/SearchFiltersBuilder.tsx b/datahub-web-react/src/app/searchV2/filters/SearchFiltersBuilder.tsx
index 6abdd0a5101757..3f4f16fdeca3c1 100644
--- a/datahub-web-react/src/app/searchV2/filters/SearchFiltersBuilder.tsx
+++ b/datahub-web-react/src/app/searchV2/filters/SearchFiltersBuilder.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import styled from 'styled-components';
-import { TextButton } from './styledComponents';
+import { Button } from '@src/alchemy-components';
// eslint-disable-next-line import/no-cycle
import SelectedFilter from './SelectedFilter';
import { FilterField, FilterPredicate } from './types';
@@ -140,9 +140,9 @@ export default function SearchFiltersBuilder({
{showAddFilter && !vertical && addFilter}
{showClearAll && (
-
- clear all
-
+
+ Clear all
+
)}
{showUnionType && hydratedFilters?.length >= 2 && (
diff --git a/datahub-web-react/src/app/settingsV2/CreateTokenModal.tsx b/datahub-web-react/src/app/settingsV2/CreateTokenModal.tsx
index 53c877629d1a27..734d3d72fc93f0 100644
--- a/datahub-web-react/src/app/settingsV2/CreateTokenModal.tsx
+++ b/datahub-web-react/src/app/settingsV2/CreateTokenModal.tsx
@@ -1,7 +1,8 @@
import React, { useState, useEffect } from 'react';
-import { message, Button, Input, Modal, Typography, Form, Select } from 'antd';
+import { message, Input, Modal, Typography, Form, Select } from 'antd';
import styled from 'styled-components';
import { red } from '@ant-design/colors';
+import { Button } from '@src/alchemy-components';
import { useEnterKeyListener } from '../shared/useEnterKeyListener';
import { ACCESS_TOKEN_DURATIONS, getTokenExpireDate } from './utils';
@@ -9,6 +10,7 @@ import { useCreateAccessTokenMutation } from '../../graphql/auth.generated';
import { AccessTokenDuration, AccessTokenType, CreateAccessTokenInput } from '../../types.generated';
import { AccessTokenModal } from './AccessTokenModal';
import analytics, { EventType } from '../analytics';
+import { ModalButtonContainer } from '../shared/button/styledComponents';
type Props = {
currentUserUrn: string;
@@ -130,12 +132,16 @@ export default function CreateTokenModal({
visible={visible}
onCancel={onModalClose}
footer={
- <>
-
+
+
Cancel
Create
- >
+
}
>
{isThemeV2 && !isShowNavBarRedesign && (
-
- Log Out
-
+
+
+ Log Out
+
+
)}
diff --git a/datahub-web-react/src/app/settingsV2/posts/CreatePostModal.tsx b/datahub-web-react/src/app/settingsV2/posts/CreatePostModal.tsx
index cda7ab131c46aa..3010d5fa3ded7b 100644
--- a/datahub-web-react/src/app/settingsV2/posts/CreatePostModal.tsx
+++ b/datahub-web-react/src/app/settingsV2/posts/CreatePostModal.tsx
@@ -1,5 +1,7 @@
import React, { useEffect, useState } from 'react';
-import { Button, Form, message, Modal } from 'antd';
+import { Form, message, Modal } from 'antd';
+import { Button } from '@src/alchemy-components';
+import { ModalButtonContainer } from '@src/app/shared/button/styledComponents';
import CreatePostForm from './CreatePostForm';
import {
CREATE_POST_BUTTON_ID,
@@ -156,12 +158,11 @@ export default function CreatePostModal({ onClose, onCreate, editData, onEdit }:
onCancel={onCloseModal}
width={700}
footer={
- <>
-
+
+
Cancel
{!editData ? 'Create' : 'Update'}
- >
+
}
>
-
+
+
Cancel
Add
- >
+
}
getContainer={getModalDomContainer}
>
diff --git a/datahub-web-react/src/app/sharedV2/search/DownloadButton.tsx b/datahub-web-react/src/app/sharedV2/search/DownloadButton.tsx
index 677ff48e9abda5..1ffcc53b85756d 100644
--- a/datahub-web-react/src/app/sharedV2/search/DownloadButton.tsx
+++ b/datahub-web-react/src/app/sharedV2/search/DownloadButton.tsx
@@ -1,23 +1,11 @@
import { DownloadOutlined } from '@ant-design/icons';
-import { Button } from 'antd';
-import { Tooltip } from '@components';
+import { Button, Tooltip } from '@components';
import React from 'react';
import styled from 'styled-components';
-import { SEARCH_COLORS } from '../../entityV2/shared/constants';
-const DownloadCsvButton = styled(Button)`
- font-size: 8px;
- padding-left: 12px;
- padding-right: 12px;
- background-color: ${SEARCH_COLORS.TITLE_PURPLE};
- color: #ffffff;
- :hover {
- background-color: #ffffff;
- color: ${SEARCH_COLORS.TITLE_PURPLE};
- border: 1px solid ${SEARCH_COLORS.TITLE_PURPLE};
- }
+const StyledButton = styled(Button)`
height: 28px;
- margin: 0px 8px;
+ margin: 0px 4px 0px 4px;
`;
type Props = {
@@ -29,14 +17,10 @@ type Props = {
export default function DownloadButton({ setShowDownloadAsCsvModal, isDownloadingCsv, disabled }: Props) {
return (
- setShowDownloadAsCsvModal(true)}
- disabled={isDownloadingCsv || disabled}
- >
+ setShowDownloadAsCsvModal(true)} disabled={isDownloadingCsv || disabled}>
{isDownloadingCsv ? 'Downloading...' : null}
-
+
);
}
diff --git a/datahub-web-react/src/app/sharedV2/search/EditButton.tsx b/datahub-web-react/src/app/sharedV2/search/EditButton.tsx
index e8d2c84767f463..5ca368eca727a7 100644
--- a/datahub-web-react/src/app/sharedV2/search/EditButton.tsx
+++ b/datahub-web-react/src/app/sharedV2/search/EditButton.tsx
@@ -1,22 +1,11 @@
-import { EditOutlined } from '@ant-design/icons';
-import { Button } from 'antd';
-import { Tooltip } from '@components';
import React from 'react';
+import { EditOutlined } from '@ant-design/icons';
+import { Button, Tooltip } from '@components';
import styled from 'styled-components';
-import { SEARCH_COLORS } from '../../entityV2/shared/constants';
const StyledButton = styled(Button)`
- font-size: 8px;
- padding-left: 12px;
- padding-right: 12px;
- background-color: ${SEARCH_COLORS.TITLE_PURPLE};
- color: #ffffff;
- :hover {
- background-color: #ffffff;
- color: ${SEARCH_COLORS.TITLE_PURPLE};
- border: 1px solid ${SEARCH_COLORS.TITLE_PURPLE};
- }
height: 28px;
+ margin: 0px 4px 0px 4px;
`;
type Props = {
@@ -27,7 +16,11 @@ type Props = {
export default function EditButton({ setShowSelectMode, disabled }: Props) {
return (
- setShowSelectMode(true)} disabled={disabled}>
+ setShowSelectMode(true)}
+ disabled={disabled}
+ data-testid="search-results-edit-button"
+ >
diff --git a/datahub-web-react/src/app/sharedV2/text/OverflowTitle.tsx b/datahub-web-react/src/app/sharedV2/text/OverflowTitle.tsx
index ef65834ff52b35..b9e563b6e16bee 100644
--- a/datahub-web-react/src/app/sharedV2/text/OverflowTitle.tsx
+++ b/datahub-web-react/src/app/sharedV2/text/OverflowTitle.tsx
@@ -23,6 +23,10 @@ const Wrapper = styled.div<{ scale: number; computedRatio: boolean }>`
}
`;
+const ExtraWrapper = styled.span`
+ margin-left: 0.4em;
+`;
+
const MIN_SCALE = 2 / 3;
const TOOLTIP_THRESHOLD = 0.8; // Show tooltip if text is smaller than TOOLTIP_THRESHOLD em
@@ -30,11 +34,19 @@ interface Props {
title?: string;
highlightText?: string;
highlightColor?: string;
+ extra?: React.ReactNode;
className?: string;
placement?: TooltipProps['placement'];
}
-export default function OverflowTitle({ title, highlightText, highlightColor, className, placement = 'top' }: Props) {
+export default function OverflowTitle({
+ title,
+ highlightText,
+ highlightColor,
+ extra,
+ className,
+ placement = 'top',
+}: Props) {
const [scale, setScale] = React.useState(1);
const [ratio, setRatio] = React.useState(undefined);
@@ -59,6 +71,7 @@ export default function OverflowTitle({ title, highlightText, highlightColor, cl
{title}
+ {!!extra && {extra} }
diff --git a/datahub-web-react/src/conf/index.ts b/datahub-web-react/src/conf/index.ts
index 771f4e1bc81960..796f5773e48896 100644
--- a/datahub-web-react/src/conf/index.ts
+++ b/datahub-web-react/src/conf/index.ts
@@ -1,7 +1,23 @@
+// Dayjs is missing core functionality without this. It causes issues in setting default value of antd datepicker without.
+import dayjs from 'dayjs';
+import advancedFormat from 'dayjs/plugin/advancedFormat';
+import customParseFormat from 'dayjs/plugin/customParseFormat';
+import localeData from 'dayjs/plugin/localeData';
+import weekday from 'dayjs/plugin/weekday';
+import weekOfYear from 'dayjs/plugin/weekOfYear';
+import weekYear from 'dayjs/plugin/weekYear';
+
+import * as Browse from './Browse';
import * as Global from './Global';
import * as Search from './Search';
-import * as Browse from './Browse';
+
+dayjs.extend(customParseFormat);
+dayjs.extend(advancedFormat);
+dayjs.extend(weekday);
+dayjs.extend(localeData);
+dayjs.extend(weekOfYear);
+dayjs.extend(weekYear);
// TODO: A way to populate configs without code changes?
// TOOD: Entity-oriented configurations?
-export { Global as GlobalCfg, Search as SearchCfg, Browse as BrowseCfg };
+export { Browse as BrowseCfg, Global as GlobalCfg, Search as SearchCfg };
diff --git a/datahub-web-react/src/graphql/lineage.graphql b/datahub-web-react/src/graphql/lineage.graphql
index 5daf200fef5fc7..00a4dfc4675b99 100644
--- a/datahub-web-react/src/graphql/lineage.graphql
+++ b/datahub-web-react/src/graphql/lineage.graphql
@@ -694,6 +694,11 @@ fragment entityLineageV2 on Entity {
...lineageV2Result
}
}
+ ... on SupportsVersions {
+ versionProperties {
+ ...versionProperties
+ }
+ }
... on SchemaFieldEntity {
fieldPath
parent {
diff --git a/datahub-web-react/yarn.lock b/datahub-web-react/yarn.lock
index 8d4560c375ce4e..3979565abaca27 100644
--- a/datahub-web-react/yarn.lock
+++ b/datahub-web-react/yarn.lock
@@ -4694,6 +4694,11 @@
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311"
integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==
+"@types/trusted-types@^2.0.7":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
+ integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==
+
"@types/turndown@^5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@types/turndown/-/turndown-5.0.1.tgz#fcda7b02cda4c9d445be1440036df20f335b9387"
@@ -7097,10 +7102,12 @@ domino@^2.1.6:
resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe"
integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==
-dompurify@^2.5.4:
- version "2.5.4"
- resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.4.tgz#347e91070963b22db31c7c8d0ce9a0a2c3c08746"
- integrity sha512-l5NNozANzaLPPe0XaAwvg3uZcHtDBnziX/HjsY1UcDj1MxTK8Dd0Kv096jyPK5HRzs/XM5IMj20dW8Fk+HnbUA==
+dompurify@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.4.tgz#af5a5a11407524431456cf18836c55d13441cd8e"
+ integrity sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==
+ optionalDependencies:
+ "@types/trusted-types" "^2.0.7"
dot-case@^3.0.4:
version "3.0.4"
diff --git a/docker/datahub-gms/Dockerfile b/docker/datahub-gms/Dockerfile
index 232802a6bad8b8..c5e00aa40e471a 100644
--- a/docker/datahub-gms/Dockerfile
+++ b/docker/datahub-gms/Dockerfile
@@ -49,11 +49,11 @@ COPY --from=binary /go/bin/dockerize /usr/local/bin
ENV LD_LIBRARY_PATH="/lib:/lib64"
FROM base AS prod-install
-COPY war.war /datahub/datahub-gms/bin/war.war
COPY metadata-models/src/main/resources/entity-registry.yml /datahub/datahub-gms/resources/entity-registry.yml
COPY docker/datahub-gms/start.sh /datahub/datahub-gms/scripts/start.sh
COPY docker/monitoring/client-prometheus-config.yaml /datahub/datahub-gms/scripts/prometheus-config.yaml
RUN chmod +x /datahub/datahub-gms/scripts/start.sh
+COPY war.war /datahub/datahub-gms/bin/war.war
FROM base AS dev-install
# Dummy stage for development. Assumes code is built on your machine and mounted to this image.
diff --git a/docker/kafka-setup/Dockerfile b/docker/kafka-setup/Dockerfile
index 9eecf71228c56d..efb2319bd38fca 100644
--- a/docker/kafka-setup/Dockerfile
+++ b/docker/kafka-setup/Dockerfile
@@ -1,4 +1,4 @@
-ARG KAFKA_DOCKER_VERSION=7.8.1
+ARG KAFKA_DOCKER_VERSION=7.9.0
# Defining custom repo urls for use in enterprise environments. Re-used between stages below.
ARG ALPINE_REPO_URL=http://dl-cdn.alpinelinux.org/alpine
diff --git a/docs-website/.gitignore b/docs-website/.gitignore
index 482a7644292ae0..8befa30d04b8af 100644
--- a/docs-website/.gitignore
+++ b/docs-website/.gitignore
@@ -3,6 +3,7 @@
/docs
/genDocs
/genStatic
+# note that genStatic is no longer used
# Generated GraphQL
/graphql/combined.graphql
diff --git a/docs-website/build.gradle b/docs-website/build.gradle
index 1be790695e87e6..1cc02977e58e99 100644
--- a/docs-website/build.gradle
+++ b/docs-website/build.gradle
@@ -83,7 +83,6 @@ task yarnInstall(type: YarnTask) {
task yarnGenerate(type: YarnTask, dependsOn: [yarnInstall,
generateGraphQLSchema, generateJsonSchema,
':metadata-ingestion:modelDocGen', ':metadata-ingestion:docGen',
- ':python-build:buildWheels',
]) {
inputs.files(projectMdFiles)
outputs.cacheIf { true }
diff --git a/docs-website/docusaurus.config.js b/docs-website/docusaurus.config.js
index 4349c9b0bc44a2..9c3a3fa338dcef 100644
--- a/docs-website/docusaurus.config.js
+++ b/docs-website/docusaurus.config.js
@@ -11,7 +11,7 @@ module.exports = {
favicon: "img/favicon.ico",
organizationName: "datahub-project", // Usually your GitHub org/user name.
projectName: "datahub", // Usually your repo name.
- staticDirectories: ["static", "genStatic"],
+ staticDirectories: ["static"],
stylesheets: ["https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700&display=swap"],
headTags: [
{
@@ -167,7 +167,7 @@ module.exports = {
position: "right",
items: [
{
- to: "/slack",
+ href: "https://pages.acryl.io/slack?utm_source=docs&utm_medium=header&utm_campaign=docs_header",
label: "Join Slack",
},
{
@@ -189,7 +189,7 @@ module.exports = {
],
},
{
- href: "/slack",
+ href: "https://pages.acryl.io/slack?utm_source=docs&utm_medium=header&utm_campaign=docs_header",
html: `