Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
0a7272a
feat(ui): add TableV2 as Untitled UI migration wrapper for Table comp…
harsh-vador Mar 4, 2026
35ca467
fix failing test
harsh-vador Mar 4, 2026
397eaac
fix failing spec
harsh-vador Mar 4, 2026
eacda5a
address gitar
harsh-vador Mar 4, 2026
a440764
fix failing specs
harsh-vador Mar 4, 2026
dd9d090
add support for custom cell classname, pagination, scroll
harsh-vador Mar 6, 2026
e4ec416
address gitar
harsh-vador Mar 6, 2026
e68dcd8
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 6, 2026
ae9c76a
address gitar
harsh-vador Mar 6, 2026
32a18ca
address gitar
harsh-vador Mar 6, 2026
7b822d7
fix unit test
harsh-vador Mar 6, 2026
f88081c
address gitar comments
harsh-vador Mar 7, 2026
17b000d
fix failing spec
harsh-vador Mar 7, 2026
f1d686b
address gitar
harsh-vador Mar 7, 2026
9bb6aff
fix failing spec
harsh-vador Mar 8, 2026
de8157f
address gitar
harsh-vador Mar 8, 2026
222c3e2
address hover changes
harsh-vador Mar 9, 2026
885acf3
address gitar
harsh-vador Mar 10, 2026
039f89b
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 10, 2026
0ec948e
add expand support and replace in SchemaTable
harsh-vador Mar 10, 2026
5c510e3
address gitar
harsh-vador Mar 10, 2026
cbd9f4f
fix unit test
harsh-vador Mar 10, 2026
e28952f
address gitar
harsh-vador Mar 12, 2026
6a8a04a
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 12, 2026
26e9b7a
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 12, 2026
eb01759
add support for drag and drop of rows and header level filter
harsh-vador Mar 13, 2026
bf110c6
add truncation support and address gitar
harsh-vador Mar 13, 2026
eef267f
fix failing spec
harsh-vador Mar 13, 2026
4e4c218
fix failing tests
harsh-vador Mar 14, 2026
25bc605
fix failing spec
harsh-vador Mar 16, 2026
0e258c6
add support in api ednpoint schema
harsh-vador Mar 16, 2026
26c6e79
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 16, 2026
6a20c72
fix failing unit tests
harsh-vador Mar 16, 2026
ab516fa
address gitar
harsh-vador Mar 17, 2026
44c6e35
update core comp yarn
harsh-vador Mar 17, 2026
a81f97f
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 17, 2026
d9d269b
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 17, 2026
55ac315
update yarn.lock
harsh-vador Mar 17, 2026
b27cf09
address gitar
harsh-vador Mar 17, 2026
47d5329
fix failing unit test
harsh-vador Mar 17, 2026
cceb0c2
address gitaar
harsh-vador Mar 17, 2026
92ad62b
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 17, 2026
93bb5c5
address gitar
harsh-vador Mar 17, 2026
13f9429
remove unwanted code
harsh-vador Mar 18, 2026
8d73bbd
Merge branch 'main' into untitledui-table-migration
harsh-vador Mar 24, 2026
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

Large diffs are not rendered by default.

1,380 changes: 690 additions & 690 deletions openmetadata-ui-core-components/src/main/resources/ui/yarn.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions openmetadata-ui/src/main/resources/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@
"react-papaparse": "^4.1.0",
"react-quill-new": "^3.4.0",
"react-reflex": "^4.1.0",
"react-resizable": "^3.1.3",
"react-router-dom": "^6.30.2",
"reactflow": "^11.10.2",
"reactjs-localstorage": "^1.0.1",
Expand Down Expand Up @@ -208,6 +209,7 @@
"@types/react": "^18.2.55",
"@types/react-dom": "^18.2.19",
"@types/react-grid-layout": "^1.3.5",
"@types/react-resizable": "^3.0.8",
"@types/react-test-renderer": "^17.0.0",
"@types/reactjs-localstorage": "^1.0.0",
"@types/recharts": "^1.8.23",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ test.describe('Bulk Edit Entity', () => {

// Verify Details updated
await expect(
page.getByRole('cell', { name: 'Playwright Table column' })
page.getByRole('gridcell', { name: 'Playwright Table column' })
).toBeVisible();

// Verify Tags
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,7 @@ test.describe('Glossary Bulk Operations', () => {
await termCheckboxes.first().check();

// Look for bulk action toolbar
const bulkActionBar = page.locator(
'[data-testid="bulk-actions"], .ant-table-selection'
);
const bulkActionBar = page.locator('[data-testid="bulk-actions"]');

if (await bulkActionBar.isVisible()) {
await expect(bulkActionBar).toBeVisible();
Expand Down Expand Up @@ -156,7 +154,7 @@ test.describe('Glossary Bulk Operations', () => {
await expect(parentRow).toBeVisible();

// Click on the expand icon within the parent row to show children
const expandIcon = parentRow.locator('.ant-table-row-expand-icon');
const expandIcon = parentRow.locator('[data-testid="expand-icon"]');

if (await expandIcon.isVisible()) {
await expandIcon.click();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ test.describe('Glossary P3 Tests', () => {
// Search should not crash - either shows results, table, or empty state
const table = page.getByTestId('glossary-term-table');
const emptyState = page.getByText(/no.*term.*found|no.*result/i);
const tableRows = page.locator('tbody .ant-table-row');
const tableRows = page.locator('tbody tr[role="row"]');

// eslint-disable-next-line playwright/no-wait-for-timeout -- search results need time to render after special character input
await page.waitForTimeout(1000);
Expand Down Expand Up @@ -687,7 +687,9 @@ test.describe('Glossary P3 Tests', () => {
// If there are terms, try to expand some levels
if (await table.isVisible({ timeout: 2000 }).catch(() => false)) {
for (let i = 0; i < Math.min(termIds.length, 2); i++) {
const expandIcon = page.locator('.ant-table-row-expand-icon').first();
const expandIcon = page
.locator('[data-testid="expand-icon"]')
.first();

if (
await expandIcon.isVisible({ timeout: 2000 }).catch(() => false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ test.describe('Glossary tests', () => {

await searchResponse;
const table = page.getByTestId('glossary-terms-table');
const filteredTerms = await table.locator('tbody .ant-table-row').count();
const filteredTerms = await table.locator('tbody tr[role="row"]').count();

expect(filteredTerms).toBe(1);
await expect(
Expand All @@ -107,7 +107,7 @@ test.describe('Glossary tests', () => {
await partialSearchResponse;

const partialFilteredTerms = await table
.locator('tbody .ant-table-row')
.locator('tbody tr[role="row"]')
.count();

expect(partialFilteredTerms).toBeGreaterThan(0);
Expand Down Expand Up @@ -146,7 +146,7 @@ test.describe('Glossary tests', () => {

const nestedTable = page.getByTestId('glossary-terms-table');
const filteredTerms = await nestedTable
.locator('tbody .ant-table-row')
.locator('tbody tr[role="row"]')
.count();

expect(filteredTerms).toBe(5);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,7 @@ test.describe('Glossary Status Filter - Large Dataset', () => {
allowedStatuses: string[],
maxRows?: number
) => {
const rows = page.locator(
'tbody.ant-table-tbody > tr:not([aria-hidden="true"])'
);
const rows = page.locator('tbody.react-aria-TableBody > tr[role="row"]');
const rowCount = await rows.count();
const checkCount = maxRows ? Math.min(rowCount, maxRows) : rowCount;

Expand Down Expand Up @@ -176,9 +174,7 @@ test.describe('Glossary Status Filter - Large Dataset', () => {

// Reusable helper to get row count
const getRowCount = async (page: Page) => {
const rows = page.locator(
'tbody.ant-table-tbody > tr:not([aria-hidden="true"])'
);
const rows = page.locator('tbody.react-aria-TableBody > tr[role="row"]');

return rows.count();
};
Expand Down Expand Up @@ -341,9 +337,7 @@ test.describe('Glossary Status Filter - Large Dataset', () => {
test('should return matching terms for search query', async ({ page }) => {
await performSearch(page, 'Term_');

const rows = page.locator(
'tbody.ant-table-tbody > tr:not([aria-hidden="true"])'
);
const rows = page.locator('tbody.react-aria-TableBody > tr[role="row"]');
const rowCount = await rows.count();

expect(rowCount).toBeGreaterThan(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,19 +155,6 @@ test.describe('Glossary Status Filter - Nested Terms', () => {
await page.locator('.ant-table-row').first().waitFor({ state: 'visible' });
};

// Helper to collapse a specific term in the table
const collapseTerm = async (page: Page, termName: string) => {
const termRow = page.locator(`[data-row-key*="${termName}"]`).first();
const collapseIcon = termRow.locator(
'.ant-table-row-expand-icon.ant-table-row-expand-icon-expanded'
);

if (await collapseIcon.isVisible()) {
await collapseIcon.click();
await collapseIcon.waitFor({ state: 'detached' }).catch(() => {});
}
};

// Helper to verify term is visible in table
const verifyTermVisible = async (page: Page, displayName: string) => {
const term = page.getByTestId(displayName);
Expand Down Expand Up @@ -214,9 +201,7 @@ test.describe('Glossary Status Filter - Nested Terms', () => {

// Helper to get row count
const getRowCount = async (page: Page) => {
const rows = page.locator(
'tbody.ant-table-tbody > tr:not([aria-hidden="true"])'
);
const rows = page.locator('tbody tr[role="row"]:not([aria-hidden="true"])');

return rows.count();
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ test.describe('Large Glossary Performance Tests', () => {
.locator('.glossary-terms-scroll-container [data-testid="loader"]')
.waitFor({ state: 'detached' });

const initialTerms = await page.locator('tbody .ant-table-row').count();
const initialTerms = await page.locator('tbody tr[role="row"]').count();

expect(initialTerms).toBe(50);

Expand All @@ -115,7 +115,7 @@ test.describe('Large Glossary Performance Tests', () => {

// Verify more terms are loaded

const afterScrollTerms = await page.locator('tbody .ant-table-row').count();
const afterScrollTerms = await page.locator('tbody tr[role="row"]').count();

expect(afterScrollTerms).toBe(100);
});
Expand All @@ -129,7 +129,7 @@ test.describe('Large Glossary Performance Tests', () => {
await waitForAllLoadersToDisappear(page);
// Verify filtered results

const filteredTerms = await page.locator('tbody .ant-table-row').count();
const filteredTerms = await page.locator('tbody tr[role="row"]').count();

expect(filteredTerms).toBeGreaterThan(0);
expect(filteredTerms).toBeLessThan(20); // Should show Term_5, Term_50-59, etc.
Expand All @@ -143,7 +143,7 @@ test.describe('Large Glossary Performance Tests', () => {

// Verify all terms are shown again

const allTerms = await page.locator('tbody .ant-table-row').count();
const allTerms = await page.locator('tbody tr[role="row"]').count();

// 51 because there is one additional row which is not rendered
expect(allTerms).toBeGreaterThanOrEqual(50);
Expand Down Expand Up @@ -326,25 +326,15 @@ test.describe('Large Glossary Performance Tests', () => {

await confirmationDragAndDropGlossary(page, 'Term_10', 'Term_1');

await expect(
page.getByRole('cell', {
name: 'Term_10',
exact: true,
})
).not.toBeVisible();
await expect(page.getByTestId('Term_10')).not.toBeVisible();

const termRes = page.waitForResponse('/api/v1/glossaryTerms?*');

// verify the term is moved under the parent term
await page.getByTestId('expand-collapse-all-button').click();
await termRes;

await expect(
page.getByRole('cell', {
name: 'Term_10',
exact: true,
})
).toBeVisible();
await expect(page.getByTestId('Term_10')).toBeVisible();
});
});

Expand Down Expand Up @@ -421,9 +411,7 @@ test.describe('Large Glossary Child Term Performace', () => {
page.getByText('Term_1_Child_3', { exact: true })
).toBeVisible();

const initialTerms = await page
.locator('tbody .ant-table-row-level-1')
.count();
const initialTerms = await page.locator('tbody tr[data-level="1"]').count();

// 51 because last row contain button to view next 50 terms
expect(initialTerms).toBe(51);
Expand All @@ -441,9 +429,7 @@ test.describe('Large Glossary Child Term Performace', () => {
page.getByText('Term_1_Child_54', { exact: true })
).toBeVisible();

const finalTerms = await page
.locator('tbody .ant-table-row-level-1')
.count();
const finalTerms = await page.locator('tbody tr[data-level="1"]').count();

expect(finalTerms).toBe(100);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,11 @@ test.describe(

await waitForAllLoadersToDisappear(page);

expect(await page.locator('.ant-table-row').count()).toBe(15);
expect(
await page
.locator('tbody.ant-table-tbody > tr:not([aria-hidden="true"])')
.count()
).toBe(15);
});

test('Table search with sorting should work', async ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,7 @@ test.describe(

// Verify the team is moved under the business team
await openDragDropDropdown(page, droppableTeamName);
const movedTeam = page.locator(
`.ant-table-row-level-1[data-row-key="${teamNameGroup}"]`
);
const movedTeam = page.locator(`tr[data-row-key="${teamNameGroup}"]`);

await expect(movedTeam).toBeVisible();
});
Expand All @@ -183,17 +181,12 @@ test.describe(
// Open department team dropdown as it is moved under it from last test
await openDragDropDropdown(page, teamNameDepartment);

await dragAndDropElement(
page,
teamNameGroup,
'.ant-table-thead > tr',
true
);
await dragAndDropElement(page, teamNameGroup, 'thead tr', true);
await confirmationDragAndDropTeam(page, teamNameGroup, 'Organization');

// Verify the team is moved under the table level
const movedTeam = page.locator(
`.ant-table-row-level-0[data-row-key="${teamNameGroup}"]`
`tr[data-level="0"][data-row-key="${teamNameGroup}"]`
);
await movedTeam.scrollIntoViewIfNeeded();

Expand Down
Loading
Loading