Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
0e01dce
chore(ui): supportive PR
chirag-madlani Apr 24, 2026
bd253d5
fix issue with DataAssetAsynList
chirag-madlani Apr 27, 2026
126afd0
Merge branch 'main' into feat-ai-automations
chirag-madlani Apr 27, 2026
015e3cc
fix(ui): address review comments for DataAssetAsyncSelectList, Schedu…
Copilot Apr 27, 2026
731fcc6
fix(ui): address further review feedback - scroll guard, selectedValu…
Copilot Apr 27, 2026
cf45bbf
Merge branch 'main' into feat-ai-automations
chirag-madlani Apr 30, 2026
0d214de
fix dataAssetAsyncList
chirag-madlani Apr 30, 2026
2f94811
fix UI tests
chirag-madlani May 4, 2026
196578c
Merge branch 'main' into feat-ai-automations
chirag-madlani May 4, 2026
b492dc2
fix metric playwright
chirag-madlani May 4, 2026
93a9e51
address comments
chirag-madlani May 4, 2026
c3c7ab8
fix custom property spec failure
chirag-madlani May 4, 2026
3f72887
Merge branch 'main' into feat-ai-automations
chirag-madlani May 4, 2026
e6490eb
fix type for popover
chirag-madlani May 4, 2026
4ad0db2
fix build
chirag-madlani May 4, 2026
a1fa888
Merge branch 'main' into feat-ai-automations
chirag-madlani May 4, 2026
6e1946c
fix metric failure
chirag-madlani May 4, 2026
91b143a
Merge branch 'main' into feat-ai-automations
chirag-madlani May 4, 2026
77cee6f
fix(ui): address latest review comments - Popover import, dedup, func…
Copilot May 4, 2026
55947bf
fix(ui): extract createPlaceholderOption utility, consistent id/value…
Copilot May 4, 2026
6c96f70
fix type error
chirag-madlani May 5, 2026
dfb4d3a
Merge branch 'main' into feat-ai-automations
chirag-madlani May 15, 2026
6c8f458
Merge branch 'main' into feat-ai-automations
chirag-madlani May 26, 2026
4c2dd39
Merge branch 'main' into feat-ai-automations
chirag-madlani Jun 1, 2026
cbdb8ca
apply checkstyle
chirag-madlani Jun 1, 2026
b8f1218
fix checkstyle
chirag-madlani Jun 1, 2026
9332b56
fix failing spec
chirag-madlani Jun 4, 2026
293fff2
Merge branch 'main' into feat-ai-automations
chirag-madlani Jun 4, 2026
1f46ecb
Merge branch 'main' into feat-ai-automations
chirag-madlani Jun 5, 2026
71d9188
Merge branch 'main' into feat-ai-automations
chirag-madlani Jun 8, 2026
c739f0d
Merge branch 'main' into feat-ai-automations
chirag-madlani Jun 9, 2026
f20773a
Merge branch 'main' into feat-ai-automations
chirag-madlani Jun 15, 2026
1880756
fix build
chirag-madlani Jun 15, 2026
038693d
Merge branch 'main' into feat-ai-automations
chirag-madlani Jun 22, 2026
efbb831
fix(ui): resolve build/test failures in DataAssetSelectList migration
chirag-madlani Jun 22, 2026
f4840bc
Merge remote-tracking branch 'origin/main' into feat-ai-automations
chirag-madlani Jun 29, 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
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { IconComponentType } from '@/components/base/badges/badge-types';
import { HintText } from '@/components/base/input/hint-text';
import { Label } from '@/components/base/input/label';
import type { PopoverProps } from '@/components/base/select/popover';
import { Popover } from '@/components/base/select/popover';
import {
type SelectItemType,
Expand Down Expand Up @@ -109,6 +110,7 @@ export interface AutocompleteProps
onSearchChange?: (value: string) => void;
maxVisibleItems?: number;
multiple?: boolean;
popoverProps?: Partial<Omit<PopoverProps, 'size' | 'className'>>;
allowsCreation?: boolean;
hideDropdown?: boolean;
}
Comment thread
chirag-madlani marked this conversation as resolved.
Expand Down Expand Up @@ -363,6 +365,7 @@ export const AutocompleteBase = ({
hideDropdown = false,
name: _name,
className: _className,
popoverProps,
...props
}: AutocompleteProps) => {
const { contains } = useFilter({ sensitivity: 'base' });
Expand Down Expand Up @@ -549,6 +552,7 @@ export const AutocompleteBase = ({

{!hideDropdown && (
<Popover
{...popoverProps}
className={popoverClassName}
size="md"
style={{ width: popoverWidth }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type { HTMLAttributes, ReactNode } from 'react';
import { cx } from '@/utils/cx';
import type { HTMLAttributes, ReactNode } from 'react';

type Gap = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '8' | '10' | '12';

Expand Down Expand Up @@ -111,15 +111,15 @@ export const GridItem = ({
...props
}: GridItemProps) => {
const clampedStart =
start !== undefined ? clamp(start, 1, GRID_COLUMNS) : undefined;
start === undefined ? undefined : clamp(start, 1, GRID_COLUMNS);
const maxSpan =
clampedStart !== undefined ? GRID_COLUMNS - clampedStart + 1 : GRID_COLUMNS;
clampedStart === undefined ? GRID_COLUMNS : GRID_COLUMNS - clampedStart + 1;
const clampedSpan = clamp(span, 1, maxSpan);

const gridColumn =
clampedStart !== undefined
? `${clampedStart} / span ${clampedSpan}`
: `span ${clampedSpan}`;
clampedStart === undefined
? `span ${clampedSpan}`
: `${clampedStart} / span ${clampedSpan}`;

return (
<div {...props} className={cx(className)} style={{ gridColumn, ...style }}>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { cx } from '@/utils/cx';
import type { RefAttributes } from 'react';
import type { PopoverProps as AriaPopoverProps } from 'react-aria-components';
import { Popover as AriaPopover } from 'react-aria-components';
import { cx } from '@/utils/cx';

interface PopoverProps extends AriaPopoverProps, RefAttributes<HTMLElement> {
export interface PopoverProps
extends AriaPopoverProps,
RefAttributes<HTMLElement> {
size: 'sm' | 'md';
}

Expand Down
25 changes: 16 additions & 9 deletions openmetadata-ui/src/main/resources/ui/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@
background: #fafafa;
display: flex;
flex-direction: column;
font-family:
-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
sans-serif;
color: #535862;
z-index: 0;
}
Expand Down Expand Up @@ -289,13 +289,20 @@
</div>
<div class="om-boot-shell__body">
<aside class="om-boot-shell__sidebar">
<div class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
<div class="om-boot-shell__skeleton om-boot-shell__skeleton--short"></div>
<div class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
<div class="om-boot-shell__skeleton om-boot-shell__skeleton--short"></div>
<div class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
<div class="om-boot-shell__skeleton om-boot-shell__skeleton--short"></div>
<div class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
<div
class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
<div
class="om-boot-shell__skeleton om-boot-shell__skeleton--short"></div>
<div
class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
<div
class="om-boot-shell__skeleton om-boot-shell__skeleton--short"></div>
<div
class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
<div
class="om-boot-shell__skeleton om-boot-shell__skeleton--short"></div>
<div
class="om-boot-shell__skeleton om-boot-shell__skeleton--medium"></div>
</aside>
<main class="om-boot-shell__main">
<div class="om-boot-shell__title"></div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -589,7 +589,11 @@ ALL_ENTITIES.forEach(({ key, makeInstance }) => {
user.getUserName()
)}*`;
const searchResponse = page.waitForResponse(searchApi);
await page.locator('#entityReference').clear();
// Remove existing selections if any
await page
.getByTestId('asset-select-list')
.getByRole('button')
.click();
await page.locator('#entityReference').fill(user.getUserName());
await searchResponse;
await page
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
);
await page.click('[data-testid="tags-container"] [data-testid="add-tag"]');

await page.waitForSelector('[data-testid="tag-selector"] input', {

Check warning on line 107 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForSelector()
state: 'visible',
});
const searchTagResponse = page.waitForResponse(
Expand Down Expand Up @@ -144,12 +144,9 @@
.first()
.click();

await page.waitForSelector(
'[data-testid="asset-select-list"] > .ant-select-selector input',
{ state: 'visible' }
);
await page.locator('[data-testid="asset-select-list"] input').waitFor();
await page.fill(
'[data-testid="asset-select-list"] > .ant-select-selector input',
'[data-testid="asset-select-list"] input',
dataAsset.entity.name
);
await page
Expand All @@ -162,9 +159,7 @@
const response = await updateKnowledgePage;
expect(response.status()).toBe(200);

await page.waitForSelector(`[data-testid="${dataAsset.entity.name}"]`, {
state: 'visible',
});
await page.getByTestId(`asset-select-list`).locator(`input`).waitFor();
await page.click(`[data-testid="${dataAsset.entity.name}"]`);

await page.getByRole('link', { name: title }).click();
Expand Down Expand Up @@ -349,7 +344,7 @@
await hierarchyElement.hover();
await page.mouse.wheel(0, -9999);

await page.waitForTimeout(500);

Check warning on line 347 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForTimeout()

// Retry mechanism for pagination
let elementCount = await article.count();
Expand All @@ -359,7 +354,7 @@
while (elementCount === 0 && retryCount < maxRetries) {
await page.locator('[data-testid="knowledge-pages-hierarchy"]').hover();
await page.mouse.wheel(0, 500);
await page.waitForTimeout(500);

Check warning on line 357 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForTimeout()

// Create fresh locator and check if the article is now visible after this retry
const freshArticle = page.getByTestId(`page-node-${articleTitle}`);
Expand Down Expand Up @@ -390,7 +385,7 @@

// Click on Conversations tab
await page.getByRole('tab', { name: 'Conversations' }).click();
await page.waitForSelector('[data-testid="editor-wrapper"]');

Check warning on line 388 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForSelector()

// Create message with mention
const messageWithMention = `${message} @${userName}`;
Expand Down Expand Up @@ -433,7 +428,7 @@
await page.locator('[data-testid="task-notifications"]').click();

// Wait for notification dropdown to appear
await page.waitForSelector('[data-testid="notification-heading"]', {

Check warning on line 431 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForSelector()
state: 'visible',
});

Expand Down Expand Up @@ -544,12 +539,12 @@
export const getEditor = async (page: Page, waitForWrapper = false) => {
if (waitForWrapper) {
await waitForAllLoadersToDisappear(page);
await page.waitForSelector('#block-editor-wrapper', {

Check warning on line 542 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForSelector()
state: 'visible',
});
}

await page.waitForSelector('.ProseMirror[contenteditable="true"]', {

Check warning on line 547 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForSelector()
state: 'visible',
});
return page.locator('.ProseMirror[contenteditable="true"]').first();
Expand Down Expand Up @@ -663,7 +658,7 @@
if (isInCode) {
await page.keyboard.press(SHORTCUTS.selectWord);

await page.waitForSelector('.menu-wrapper', {

Check warning on line 661 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForSelector()
state: 'visible',
});

Expand All @@ -687,7 +682,7 @@

await selectLastWord(page, linkText.split(' ').length, editor);

await page.waitForSelector('.menu-wrapper', {

Check warning on line 685 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForSelector()
state: 'visible',
});

Expand Down Expand Up @@ -845,7 +840,7 @@
const taskItem = editor.locator('li').filter({ hasText: taskText });
const checkbox = taskItem.locator('input[type="checkbox"]');
await checkbox.click();
await page.waitForTimeout(100);

Check warning on line 843 in openmetadata-ui/src/main/resources/ui/playwright/utils/KnowledgeCenter.ts

View workflow job for this annotation

GitHub Actions / checkstyle

Unexpected use of page.waitForTimeout()
};

export const createCallout = async (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ export const setValueForProperty = async (data: {
val
)}*`;
await page.route(searchApi, (route) => route.continue());
await container.locator('#entityReference').clear();
await page.getByTestId('asset-select-list').getByRole('button').click();
const searchEntity = page.waitForResponse(searchApi);
await container.locator('#entityReference').fill(val);
await searchEntity;
Expand Down Expand Up @@ -1411,7 +1411,7 @@ export const updateCustomPropertyInRightPanel = async (data: {
val
)}*`;
await page.route(searchApi, (route) => route.continue());
await page.locator('#entityReference').clear();
await page.getByTestId('asset-select-list').getByRole('button').click();
const searchEntity = page.waitForResponse(searchApi);
await page.locator('#entityReference').fill(val);
await searchEntity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,25 +155,22 @@ export const updateRelatedMetric = async (
}

await page
.locator('[data-testid="asset-select-list"] > .ant-select-selector input')
.locator('[data-testid="asset-select-list"] input')
.waitFor({ state: 'visible' });

const apiPromise = page.waitForResponse(
'/api/v1/search/query?q=*&index=metric&*'
);

await page.fill(
'[data-testid="asset-select-list"] > .ant-select-selector input',
'[data-testid="asset-select-list"] input',
dataAsset.entity.name
);

await apiPromise;

await page
.locator('.ant-select-item-option-content', {
hasText: dataAsset.entity.name,
})
.click();
await page.getByTestId(`option-${dataAsset.entity.name}`).waitFor();
await page.getByTestId(`option-${dataAsset.entity.name}`).click();

// perform click outside to close the select options and make click to button
await clickOutside(page);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,9 @@ self.addEventListener('activate', (event) => {
.then((names) =>
Promise.all(
names
.filter((name) => name.startsWith('om-assets-') && name !== ASSET_CACHE)
.filter(
(name) => name.startsWith('om-assets-') && name !== ASSET_CACHE
)
.map((name) => caches.delete(name))
)
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,7 @@ describe('DynamicHeightWidget', () => {
resizeCallback([{ contentRect: { height: 0 } }]);

// (0 + GRID_VERTICAL_MARGIN) / (GRID_ROW_HEIGHT + GRID_VERTICAL_MARGIN) = 16/116
expect(mockOnHeightChange).toHaveBeenCalledWith(
'test-widget',
16 / 116
);
expect(mockOnHeightChange).toHaveBeenCalledWith('test-widget', 16 / 116);
});

it('handles very large height values', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { DefaultOptionType } from 'antd/lib/select';
import type {
PopoverProps,
SelectItemType,
} from '@openmetadata/ui-core-components';
import { CSSProperties } from 'react';
import { SearchIndex } from '../../../enums/search.enum';
import { EntityReference } from '../../../generated/entity/type';
import { Paging } from '../../../generated/type/paging';

export interface DataAssetOption extends DefaultOptionType {
export interface DataAssetOption extends SelectItemType {
reference: EntityReference;
displayName: string;
name?: string;
value: string;
}

export interface FetchOptionsResponse {
Expand All @@ -27,17 +32,18 @@ export interface FetchOptionsResponse {
}

export interface DataAssetAsyncSelectListProps {
mode?: 'multiple';
multiple?: boolean;
autoFocus?: boolean;
id?: string;
className?: string;
placeholder?: string;
popoverClassName?: string;
popoverProps?: Partial<PopoverProps>;
value?: DataAssetOption | DataAssetOption[] | string | string[];
debounceTimeout?: number;
defaultValue?: string[];
initialOptions?: DataAssetOption[];
searchIndex?: SearchIndex;
onChange?: (option: DataAssetOption | DataAssetOption[]) => void;
onChange?: (option: DataAssetOption | DataAssetOption[] | null) => void;
filterFqns?: string[];
queryFilter?: Record<string, unknown>;
popupClassName?: string;
Expand Down
Loading
Loading