This is an automated email from the ASF dual-hosted git repository.
pawarprasad123 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push:
new 9df46eb18 ATLAS-5339: Atlas React UI: Clicking Create Entity while on
an Entity Detail Page opens the Edit Form instead of Create Form (#693)
9df46eb18 is described below
commit 9df46eb180eeeac5992909bd2d5257fb5acf0b70
Author: Brijesh Bhalala <[email protected]>
AuthorDate: Wed Jul 15 17:58:02 2026 +0530
ATLAS-5339: Atlas React UI: Clicking Create Entity while on an Entity
Detail Page opens the Edit Form instead of Create Form (#693)
* ATLAS-5339: Atlas React UI: Clicking Create Entity while on an Entity
Detail Page opens the Edit Form instead of Create Form
* ATLAS-5339: Atlas React UI: Clicking Create Entity while on an Entity
Detail Page opens the Edit Form instead of Create Form
---
.../components/CreateDropdown/CreateDropdown.tsx | 1 +
.../__tests__/CreateDropdown.test.tsx | 5 ++-
dashboard/src/views/Entity/EntityForm.tsx | 7 +++-
dashboard/src/views/__tests__/EntityForm.test.tsx | 48 ++++++++++++++++++++++
4 files changed, 57 insertions(+), 4 deletions(-)
diff --git a/dashboard/src/components/CreateDropdown/CreateDropdown.tsx
b/dashboard/src/components/CreateDropdown/CreateDropdown.tsx
index cb32d4e2a..81658bd0d 100644
--- a/dashboard/src/components/CreateDropdown/CreateDropdown.tsx
+++ b/dashboard/src/components/CreateDropdown/CreateDropdown.tsx
@@ -152,6 +152,7 @@ const CreateDropdown = () => {
<EntityForm
open={entityModal}
onClose={() => setEntityModal(false)}
+ isAdd={true}
/>
)}
{classificationModal && (
diff --git
a/dashboard/src/components/CreateDropdown/__tests__/CreateDropdown.test.tsx
b/dashboard/src/components/CreateDropdown/__tests__/CreateDropdown.test.tsx
index fff608e37..7eed8279e 100644
--- a/dashboard/src/components/CreateDropdown/__tests__/CreateDropdown.test.tsx
+++ b/dashboard/src/components/CreateDropdown/__tests__/CreateDropdown.test.tsx
@@ -29,9 +29,9 @@ jest.mock('react-router-dom', () => ({
jest.mock('@views/Entity/EntityForm', () => ({
__esModule: true,
- default: ({ open, onClose }: { open: boolean; onClose: () => void }) =>
+ default: ({ open, onClose, isAdd }: { open: boolean; onClose: () =>
void; isAdd?: boolean }) =>
open ? (
- <div data-testid="entity-form">
+ <div data-testid="entity-form" data-isadd={isAdd ?
'true' : 'false'}>
<button type="button" onClick={onClose}>
Close entity
</button>
@@ -84,6 +84,7 @@ describe('CreateDropdown (header Create menu)', () => {
fireEvent.click(screen.getByText('Entity'))
expect(await
screen.findByTestId('entity-form')).toBeInTheDocument()
+
expect(screen.getByTestId('entity-form')).toHaveAttribute('data-isadd', 'true')
fireEvent.click(screen.getByText('Close entity'))
await waitFor(() => {
diff --git a/dashboard/src/views/Entity/EntityForm.tsx
b/dashboard/src/views/Entity/EntityForm.tsx
index 4cc40497f..d933b0ec1 100644
--- a/dashboard/src/views/Entity/EntityForm.tsx
+++ b/dashboard/src/views/Entity/EntityForm.tsx
@@ -78,15 +78,18 @@ export function reducer(state: State, action: Action):
State {
const EntityForm = ({
open,
- onClose
+ onClose,
+ isAdd = false
}: {
open: boolean;
onClose: () => void;
+ isAdd?: boolean;
}) => {
const key = "atlas.ui.editable.entity.types";
const dispatchApi = useAppDispatch();
const navigate = useNavigate();
- const { guid }: any = useParams();
+ const { guid: urlGuid }: any = useParams();
+ const guid = isAdd ? undefined : urlGuid;
const [_searchParams, setSearchParams] = useSearchParams();
const { entityData = {} }: any = useAppSelector((state: any) =>
state.entity);
diff --git a/dashboard/src/views/__tests__/EntityForm.test.tsx
b/dashboard/src/views/__tests__/EntityForm.test.tsx
index 048de96bf..63d336faf 100644
--- a/dashboard/src/views/__tests__/EntityForm.test.tsx
+++ b/dashboard/src/views/__tests__/EntityForm.test.tsx
@@ -266,6 +266,54 @@ describe('EntityForm - 100% Coverage', () => {
expect(screen.getByTestId('modal-title')).toHaveTextContent('Create entity');
});
+ test('opens in Create mode when isAdd=true even if URL has
guid', async () => {
+ mockGuid = 'detail-page-guid-123';
+ const store = createStore(mockEntityData,
mockSessionData, mockTypeHeaderData);
+ render(
+ <Provider store={store}>
+ <MemoryRouter
initialEntries={['/detailPage/detail-page-guid-123']}>
+ <EntityForm open={true}
onClose={jest.fn()} isAdd={true} />
+ </MemoryRouter>
+ </Provider>
+ );
+
expect(screen.getByTestId('modal-title')).toHaveTextContent('Create entity');
+ expect(mockGetEntity).not.toHaveBeenCalled();
+ });
+
+ test('opens in Edit mode when isAdd=false and URL has guid
(ensures edit behavior is unchanged)', async () => {
+ mockGuid = 'detail-page-guid-123';
+
+ // Mock successful API response for Edit mode
+ mockGetEntity.mockResolvedValue({
+ data: {
+ entity: {
+ guid: 'detail-page-guid-123',
+ typeName: 'DataSet',
+ attributes: { name: 'Test
Entity' }
+ }
+ }
+ });
+ mockGetTypedef.mockResolvedValue({
+ data: { attributeDefs: [],
relationshipAttributeDefs: [] }
+ });
+
+ const store = createStore(mockEntityData,
mockSessionData, mockTypeHeaderData);
+ render(
+ <Provider store={store}>
+ <MemoryRouter
initialEntries={['/detailPage/detail-page-guid-123']}>
+ <EntityForm open={true}
onClose={jest.fn()} isAdd={false} />
+ </MemoryRouter>
+ </Provider>
+ );
+
+ await waitFor(() => {
+
expect(mockGetEntity).toHaveBeenCalledWith('detail-page-guid-123', 'GET', {});
+ });
+ await waitFor(() => {
+
expect(screen.getByTestId('modal-title')).toHaveTextContent('Edit entity');
+ });
+ });
+
test('does not render when open is false', () => {
const store = createStore(mockEntityData,
mockSessionData, mockTypeHeaderData);
render(