Skip to content

Commit 21e6d07

Browse files
committed
fix(ui): disable event when loading
1 parent 240aab9 commit 21e6d07

8 files changed

Lines changed: 49 additions & 17 deletions

File tree

packages/ui/src/components/auto-complete/AutoComplete.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ function AutoComplete<T extends DAutoCompleteItem>(
448448
ref={vsScrollRef}
449449
id={listId}
450450
className={`${dPrefix}auto-complete__list`}
451+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
451452
tabIndex={-1}
452453
role="listbox"
453454
aria-activedescendant={isUndefined(focusItem) ? undefined : getItemId(focusItem.value)}

packages/ui/src/components/cascader/Cascader.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,7 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
411411
{hasSearch ? (
412412
<DTreeSearchPanel
413413
id={listId}
414+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
414415
dGetItemId={getItemId}
415416
dList={searchList}
416417
dFocusItem={searchFocusItem}
@@ -442,7 +443,8 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
442443
></DTreeSearchPanel>
443444
) : (
444445
<DList
445-
dListId={listId}
446+
id={listId}
447+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
446448
dGetItemId={getItemId}
447449
dList={renderNodes}
448450
dFocusItem={noSearchFocusItem}

packages/ui/src/components/cascader/List.tsx

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ import { getClassName } from '../../utils';
1414
import { DCheckbox } from '../checkbox';
1515
import { DVirtualScroll } from '../virtual-scroll';
1616

17-
export interface DListProps<V extends DId, T extends DCascaderItem<V>> {
18-
dListId?: string;
17+
export interface DListProps<V extends DId, T extends DCascaderItem<V>> extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
1918
dGetItemId: (value: V) => string;
2019
dList: AbstractTreeNode<V, T>[];
2120
dFocusItem: AbstractTreeNode<V, T> | undefined;
@@ -29,8 +28,20 @@ export interface DListProps<V extends DId, T extends DCascaderItem<V>> {
2928
}
3029

3130
export function DList<V extends DId, T extends DCascaderItem<V>>(props: DListProps<V, T>): JSX.Element | null {
32-
const { dListId, dGetItemId, dList, dFocusItem, dCustomItem, dMultiple, dFocusVisible, dRoot, onClickItem, onFocusChange, onKeyDown$ } =
33-
props;
31+
const {
32+
dGetItemId,
33+
dList,
34+
dFocusItem,
35+
dCustomItem,
36+
dMultiple,
37+
dFocusVisible,
38+
dRoot,
39+
onClickItem,
40+
onFocusChange,
41+
onKeyDown$,
42+
43+
...restProps
44+
} = props;
3445

3546
//#region Context
3647
const dPrefix = usePrefixConfig();
@@ -187,15 +198,21 @@ export function DList<V extends DId, T extends DCascaderItem<V>>(props: DListPro
187198
dPadding={4}
188199
>
189200
{({ vsScrollRef, vsRender, vsOnScroll }) => (
201+
// eslint-disable-next-line jsx-a11y/aria-activedescendant-has-tabindex
190202
<ul
191203
ref={vsScrollRef}
192-
id={dListId}
193-
className={`${dPrefix}cascader__list`}
194-
tabIndex={-1}
195-
role="listbox"
196-
aria-multiselectable={dMultiple}
197-
aria-activedescendant={dRoot && !isUndefined(dFocusItem) ? dGetItemId(dFocusItem.id) : undefined}
198-
onScroll={vsOnScroll}
204+
{...restProps}
205+
className={getClassName(restProps.className, `${dPrefix}cascader__list`)}
206+
tabIndex={restProps.tabIndex ?? -1}
207+
role={restProps.role ?? 'listbox'}
208+
aria-multiselectable={restProps['aria-multiselectable'] ?? dMultiple}
209+
aria-activedescendant={
210+
restProps['aria-activedescendant'] ?? (dRoot && !isUndefined(dFocusItem) ? dGetItemId(dFocusItem.id) : undefined)
211+
}
212+
onScroll={(e) => {
213+
restProps.onScroll?.(e);
214+
vsOnScroll(e);
215+
}}
199216
>
200217
{dList.length === 0 ? (
201218
<li className={`${dPrefix}cascader__empty`}>
@@ -208,7 +225,7 @@ export function DList<V extends DId, T extends DCascaderItem<V>>(props: DListPro
208225
)}
209226
</DVirtualScroll>
210227
{inFocusNode && !inFocusNode.origin.loading && inFocusNode.children && (
211-
<DList {...props} dListId={undefined} dList={inFocusNode.children} dRoot={false}></DList>
228+
<DList {...props} id={undefined} dList={inFocusNode.children} dRoot={false}></DList>
212229
)}
213230
</>
214231
);

packages/ui/src/components/select/Select.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ function Select<V extends DId, T extends DSelectItem<V>>(
565565
ref={vsScrollRef}
566566
id={listId}
567567
className={`${dPrefix}select__list`}
568+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
568569
tabIndex={-1}
569570
role="listbox"
570571
aria-multiselectable={dMultiple}

packages/ui/src/components/table/TableFilter.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ function TableFilter<V extends DId, T extends DTableFilterItem<V>>(
314314
ref={vsScrollRef}
315315
id={listId}
316316
className={`${dPrefix}table__filter-list`}
317+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
317318
tabIndex={-1}
318319
role="listbox"
319320
aria-multiselectable={dMultiple}

packages/ui/src/components/transfer/Panel.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,12 @@ export function DPanel<V extends DId, T extends DTransferItem<V>>(props: DPanelP
128128
onScrollEnd={onScrollBottom}
129129
>
130130
{({ vsScrollRef, vsRender, vsOnScroll }) => (
131-
<ul ref={vsScrollRef} className={`${dPrefix}transfer__list`} onScroll={vsOnScroll}>
131+
<ul
132+
ref={vsScrollRef}
133+
className={`${dPrefix}transfer__list`}
134+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
135+
onScroll={vsOnScroll}
136+
>
132137
{dList.length === 0 ? <DEmpty className={`${dPrefix}transfer__empty`}></DEmpty> : vsRender}
133138
</ul>
134139
)}

packages/ui/src/components/tree-select/TreeSelect.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ function TreeSelect<V extends DId, T extends DTreeItem<V>>(
443443
{hasSearch ? (
444444
<DTreeSearchPanel
445445
id={listId}
446+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
446447
dGetItemId={getItemId}
447448
dList={searchList}
448449
dFocusItem={searchFocusItem}
@@ -468,6 +469,7 @@ function TreeSelect<V extends DId, T extends DTreeItem<V>>(
468469
) : (
469470
<DTreePanel
470471
id={listId}
472+
style={{ pointerEvents: dLoading ? 'none' : undefined }}
471473
dGetGroupId={getGroupId}
472474
dGetItemId={getItemId}
473475
dList={renderNodes}

packages/ui/src/components/tree/SearchPanel.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,12 @@ export function DSearchPanel<V extends DId, T extends DTreeItem<V>>(props: DSear
166166
className={getClassName(restProps.className, `${dPrefix}tree__search-list`)}
167167
tabIndex={restProps.tabIndex ?? -1}
168168
role={restProps.role ?? 'listbox'}
169-
aria-multiselectable={dMultiple}
170-
aria-activedescendant={isUndefined(dFocusItem) ? undefined : dGetItemId(dFocusItem.value)}
171-
onScroll={vsOnScroll}
169+
aria-multiselectable={restProps['aria-multiselectable'] ?? dMultiple}
170+
aria-activedescendant={restProps['aria-activedescendant'] ?? (isUndefined(dFocusItem) ? undefined : dGetItemId(dFocusItem.value))}
171+
onScroll={(e) => {
172+
restProps.onScroll?.(e);
173+
vsOnScroll(e);
174+
}}
172175
>
173176
{dList.length === 0 ? (
174177
<li className={`${dPrefix}tree__search-empty`}>

0 commit comments

Comments
 (0)