Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
2ff6c81
feat(glossary-import): implement comprehensive import feature with ut…
brock-acryl Nov 1, 2025
5d58460
feat(glossary): add import functionality and enhance glossary UI with…
brock-acryl Nov 1, 2025
96f64ba
refactor(glossary): remove unused export CSV action from GlossarySidebar
brock-acryl Nov 1, 2025
adc8c93
fix(glossary-import): update entity filtering logic to include only '…
brock-acryl Nov 1, 2025
91b3f69
refactor(glossary): remove unused export CSV action from GlossaryCont…
brock-acryl Nov 1, 2025
fb9fb69
refactor(glossary-import): update imports and type definitions for co…
brock-acryl Nov 3, 2025
bdbdaa9
fix(glossary-import): update displayed name in GlossaryImportList to …
brock-acryl Nov 3, 2025
f783d5b
refactor(glossary-import): clean up logging and improve error message…
brock-acryl Nov 3, 2025
dc118da
Merge branch 'master' into glossary-import-ui-only-v2
brock-acryl Nov 3, 2025
3da88ab
feat(glossary-import): add term source validation and dropdown handli…
brock-acryl Nov 3, 2025
7cd3e33
feat(glossary-navigation): add click action for "Create Term Group" i…
brock-acryl Nov 3, 2025
353beee
feat(glossary-import): implement comprehensive Cypress tests for glos…
brock-acryl Nov 3, 2025
0821a6b
feat(glossary-import): add toast notifications for import completion …
brock-acryl Nov 3, 2025
3ed1bde
refactor(glossary-import): remove conflict handling UI and update bad…
brock-acryl Nov 3, 2025
3bce76a
refactor(glossary-import): streamline utility functions and remove de…
brock-acryl Nov 3, 2025
fb9a25d
refactor(glossary-import): simplify entity processing and enhance uti…
brock-acryl Nov 3, 2025
5bb1411
refactor(glossary-import): optimize imports and streamline component …
brock-acryl Nov 3, 2025
bb883c1
Merge branch 'master' into glossary-import-ui-only-v2
brock-acryl Nov 3, 2025
752aa97
fix(tests): clean up whitespace in useCreateFile test file
brock-acryl Nov 4, 2025
383304a
refactor(tests): enhance glossary import tests by replacing hardcoded…
brock-acryl Nov 4, 2025
9bd4137
feat(tests): add new test weights for various components in Cypress t…
brock-acryl Nov 4, 2025
4374d73
fix(tests): improve glossary import test stability by adding visibili…
brock-acryl Nov 4, 2025
0ee40bb
fix(tests): enhance glossary import tests by replacing hardcoded wait…
brock-acryl Nov 4, 2025
10dc9ed
fix(tests): enhance glossary tests by replacing static waits with dyn…
brock-acryl Nov 5, 2025
4c987a3
fix(tests): update glossary tests to ensure modal visibility checks a…
brock-acryl Nov 6, 2025
86bab53
fix(tests): unify modal visibility checks across glossary test files …
brock-acryl Nov 6, 2025
ab5b85f
fix(tests): enhance glossary import tests by adding dynamic visibilit…
brock-acryl Nov 8, 2025
d2a77a1
feat(tests): expand glossary import tests with new scenarios for upda…
brock-acryl Nov 8, 2025
e26677d
chore(tests): remove obsolete glossary test files to streamline test …
brock-acryl Nov 8, 2025
7eb997a
added missing test files back
brock-acryl Nov 8, 2025
ecde7b7
refactor(glossary): rename "Create Term Group" to "Create Glossary" i…
brock-acryl Nov 9, 2025
fe7c3c0
refactor(tests): remove redundant glossary term group creation and st…
brock-acryl Nov 10, 2025
af5d793
feat(tests): update glossary import tests to include new import scena…
brock-acryl Nov 10, 2025
16d80bc
refactor(glossary): remove unused import for BUSINESS_GLOSSARY_CREATE…
brock-acryl Nov 10, 2025
5895d88
fix(WizardPage): correct file upload handling by ensuring upload erro…
brock-acryl Nov 10, 2025
a63b686
Merge branch 'master' into glossary-import-ui-only-v2
brock-acryl Nov 10, 2025
63e7cc1
feat(glossary): add CSV import feature for glossary terms with detail…
brock-acryl Nov 10, 2025
7cf5e8b
docs(glossary): enhance CSV import section with improved formatting a…
brock-acryl Nov 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions datahub-web-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"@types/dompurify": "^2.3.3",
"@types/js-cookie": "^2.2.6",
"@types/node": "^12.19.9",
"@types/papaparse": "^5.3.16",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
"@types/react-router": "^5.1.8",
Expand Down Expand Up @@ -75,6 +76,7 @@
"moment": "^2.29.4",
"moment-timezone": "^0.5.35",
"monaco-editor": "^0.28.1",
"papaparse": "^5.5.3",
"phosphor-react": "^1.4.1",
"prosemirror-autocomplete": "^0.4.3",
"query-string": "^6.13.8",
Expand Down
2 changes: 2 additions & 0 deletions datahub-web-react/src/app/SearchRoutes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { EntityPage } from '@app/entity/EntityPage';
import { EntityPage as EntityPageV2 } from '@app/entityV2/EntityPage';
import GlossaryRoutes from '@app/glossary/GlossaryRoutes';
import GlossaryRoutesV2 from '@app/glossaryV2/GlossaryRoutes';
import WizardPage from '@app/glossaryV2/import/WizardPage/WizardPage';
import StructuredProperties from '@app/govern/structuredProperties/StructuredProperties';
import { ManageIngestionPage } from '@app/ingest/ManageIngestionPage';
import { ManageIngestionPage as ManageIngestionPageV2 } from '@app/ingestV2/ManageIngestionPage';
Expand Down Expand Up @@ -118,6 +119,7 @@ export const SearchRoutes = (): JSX.Element => {
{!showIngestV2 && <Route path={PageRoutes.INGESTION} render={() => <ManageIngestionPage />} />}
{showIngestV2 && <Route path={PageRoutes.INGESTION} render={() => <ManageIngestionPageV2 />} />}

<Route path={PageRoutes.GLOSSARY_IMPORT} render={() => <WizardPage />} />
<Route path={PageRoutes.SETTINGS} render={() => (isThemeV2 ? <SettingsPageV2 /> : <SettingsPage />)} />
<Route
path={`${PageRoutes.GLOSSARY}*`}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ function CreateGlossaryEntityModal(props: Props) {
const entityRegistry = useEntityRegistry();
const [stagedId, setStagedId] = useState<string | undefined>(undefined);
const [stagedName, setStagedName] = useState('');
const [selectedParentUrn, setSelectedParentUrn] = useState(entityData.urn);
const [selectedParentUrn, setSelectedParentUrn] = useState<string | undefined>(
canSelectParentUrn ? entityData.urn || '' : undefined,
);
const [documentation, setDocumentation] = useState('');
const [isDocumentationModalVisible, setIsDocumentationModalVisible] = useState(false);
const [createButtonDisabled, setCreateButtonDisabled] = useState(true);
Expand Down Expand Up @@ -190,7 +192,7 @@ function CreateGlossaryEntityModal(props: Props) {
>
<StyledItem name="parent">
<NodeParentSelect
selectedParentUrn={selectedParentUrn}
selectedParentUrn={selectedParentUrn || ''}
setSelectedParentUrn={setSelectedParentUrn}
/>
</StyledItem>
Expand Down
52 changes: 40 additions & 12 deletions datahub-web-react/src/app/glossaryV2/GlossaryContentProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { Button } from '@components';
import { FileTextOutlined, FolderOutlined, UploadOutlined } from '@ant-design/icons';
import { Button, Dropdown } from '@components';
import { MenuProps } from 'antd';
import React from 'react';
import { useHistory } from 'react-router-dom';
import styled from 'styled-components/macro';

import EmptyGlossarySection from '@app/glossaryV2/EmptyGlossarySection';
import GlossaryEntitiesList from '@app/glossaryV2/GlossaryEntitiesList';
import { BUSINESS_GLOSSARY_CREATE_TERM_GROUP_ID } from '@app/onboarding/config/BusinessGlossaryOnboardingConfig';
import { PageRoutes } from '@conf/Global';
import { PageTitle } from '@src/alchemy-components/components/PageTitle';

import { GlossaryNodeFragment } from '@graphql/fragments.generated';
Expand Down Expand Up @@ -55,6 +58,29 @@ const GlossaryContentProvider = (props: Props) => {
nodesLoading,
} = props;

const history = useHistory();

const dropdownItems: MenuProps['items'] = [
{
key: 'create-group',
label: 'Create Glossary',
icon: <FolderOutlined />,
onClick: () => setIsCreateNodeModalVisible(true),
},
{
key: 'create-term',
label: 'Create Term',
icon: <FileTextOutlined />,
onClick: () => setIsCreateTermModalVisible(true),
},
{
key: 'import',
label: 'Import CSV',
icon: <UploadOutlined />,
onClick: () => history.push(PageRoutes.GLOSSARY_IMPORT),
},
];

return (
<MainContentWrapper data-testid="glossary-entities-list">
<HeaderWrapper data-testid="glossaryPageV2">
Expand All @@ -63,16 +89,18 @@ const GlossaryContentProvider = (props: Props) => {
subTitle="Classify your data assets and columns using data dictionaries"
/>
<ButtonContainer>
<Button
data-testid="add-term-group-button-v2"
id={BUSINESS_GLOSSARY_CREATE_TERM_GROUP_ID}
size="md"
icon={{ icon: 'Add', source: 'material' }}
// can not be disabled on acryl-main due to ability to propose
onClick={() => setIsCreateNodeModalVisible(true)}
>
Create Glossary
</Button>
<Dropdown menu={{ items: dropdownItems }} trigger={['click']} placement="bottomRight">
<Button
id="create-glossary-object-button"
data-testid="create-glossary-object-button"
name="Create"
size="md"
icon={{ icon: 'Add', source: 'material' }}
// can not be disabled on acryl-main due to ability to propose
>
Create Glossary
</Button>
</Dropdown>
</ButtonContainer>
</HeaderWrapper>
<ListWrapper>
Expand Down
56 changes: 46 additions & 10 deletions datahub-web-react/src/app/glossaryV2/GlossarySidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { Button, Tooltip } from '@components';
import { FileTextOutlined, FolderOutlined, UploadOutlined } from '@ant-design/icons';
import { Button, Dropdown, Tooltip } from '@components';
import { MenuProps } from 'antd';
import React, { useState } from 'react';
import { useHistory } from 'react-router-dom';
import styled from 'styled-components/macro';

import { useUserContext } from '@app/context/useUserContext';
Expand All @@ -10,6 +13,7 @@ import GlossarySearch from '@app/glossaryV2/GlossarySearch';
import { SidebarWrapper } from '@app/sharedV2/sidebar/components';
import useSidebarWidth from '@app/sharedV2/sidebar/useSidebarWidth';
import { useShowNavBarRedesign } from '@app/useShowNavBarRedesign';
import { PageRoutes } from '@conf/Global';

import { useGetRootGlossaryNodesQuery } from '@graphql/glossary.generated';
import { EntityType } from '@types';
Expand Down Expand Up @@ -53,15 +57,38 @@ type Props = {

export default function GlossarySidebar({ isEntityProfile }: Props) {
const [isCreateNodeModalVisible, setIsCreateNodeModalVisible] = useState(false);
const [isCreateTermModalVisible, setIsCreateTermModalVisible] = useState(false);

const { refetch: refetchForNodes } = useGetRootGlossaryNodesQuery();
const history = useHistory();

const user = useUserContext();
const canManageGlossaries = user?.platformPrivileges?.manageGlossaries;

const width = useSidebarWidth(0.2);
const isShowNavBarRedesign = useShowNavBarRedesign();

const dropdownItems: MenuProps['items'] = [
{
key: 'create-group',
label: 'Create Glossary',
icon: <FolderOutlined />,
onClick: () => setIsCreateNodeModalVisible(true),
},
{
key: 'create-term',
label: 'Create Term',
icon: <FileTextOutlined />,
onClick: () => setIsCreateTermModalVisible(true),
},
{
key: 'import',
label: 'Import CSV',
icon: <UploadOutlined />,
onClick: () => history.push(PageRoutes.GLOSSARY_IMPORT),
},
];

return (
<>
<StyledSidebarWrapper
Expand All @@ -72,15 +99,16 @@ export default function GlossarySidebar({ isEntityProfile }: Props) {
>
<SidebarTitleWrapper>
<GlossaryTitle>Business Glossary</GlossaryTitle>
<Tooltip title="Create Glossary" placement="left" showArrow={false}>
<StyledButton
variant="filled"
color="violet"
isCircle
icon={{ icon: 'Plus', source: 'phosphor' }}
onClick={() => setIsCreateNodeModalVisible(true)}
data-testid="create-glossary-button"
/>
<Tooltip title="Glossary Actions" placement="left" showArrow={false}>
<Dropdown menu={{ items: dropdownItems }} trigger={['click']} placement="bottomRight">
<StyledButton
id="create-glossary-object-button-sidebar"
data-testid="create-glossary-object-button-sidebar"
variant="text"
color="gray"
icon={{ icon: 'DotsThreeVertical', source: 'phosphor' }}
/>
</Dropdown>
</Tooltip>
</SidebarTitleWrapper>
<GlossarySearch />
Expand All @@ -95,6 +123,14 @@ export default function GlossarySidebar({ isEntityProfile }: Props) {
canSelectParentUrn={false}
/>
)}
{isCreateTermModalVisible && (
<CreateGlossaryEntityModal
entityType={EntityType.GlossaryTerm}
canCreateGlossaryEntity={!!canManageGlossaries}
onClose={() => setIsCreateTermModalVisible(false)}
refetchData={refetchForNodes}
/>
)}
</>
);
}
Loading
Loading