From 3a2687e6cc7b9bfdd97d86da30697a35d26db3f3 Mon Sep 17 00:00:00 2001 From: danranVm Date: Wed, 26 Jul 2023 15:06:00 +0800 Subject: [PATCH] feat(comp:tree-select): add searchPlaceholder prop (#1617) --- packages/components/cascader/docs/Api.zh.md | 1 + packages/components/cascader/src/Cascader.tsx | 3 +- packages/components/cascader/src/types.ts | 1 + packages/components/table/demo/ScrollLoad.md | 14 ++ packages/components/table/demo/ScrollLoad.vue | 225 ++++++++++++++++++ .../components/tree-select/docs/Api.zh.md | 2 + .../components/tree-select/src/TreeSelect.tsx | 11 +- .../tree-select/src/content/Content.tsx | 2 + packages/components/tree-select/src/types.ts | 3 + 9 files changed, 260 insertions(+), 2 deletions(-) create mode 100644 packages/components/table/demo/ScrollLoad.md create mode 100644 packages/components/table/demo/ScrollLoad.vue diff --git a/packages/components/cascader/docs/Api.zh.md b/packages/components/cascader/docs/Api.zh.md index a9981cedd..3f7115776 100644 --- a/packages/components/cascader/docs/Api.zh.md +++ b/packages/components/cascader/docs/Api.zh.md @@ -39,6 +39,7 @@ | `searchable` | 是否可搜索 | `boolean \| 'overlay'` | `false` | - | 当为 `true` 时搜索功能集成在选择器上,当为 `overlay` 时,搜索功能集成在悬浮层上 | | `searchFn` | 根据搜索的文本进行筛选 | `boolean \| SelectSearchFn` | `true` | - | 为 `true` 时使用默认的搜索规则, 如果使用远程搜索,应该设置为 `false` | | `separator` | 设置分割符 | `string` | `/` | - | - | +| `searchPlaceholder` | 下拉菜单搜索框的默认文本 | `string` | - | - | - | | `size` | 设置选择器大小 | `'sm' \| 'md' \| 'lg'` | `md` | ✅ | - | | `status` | 手动指定校验状态 | `valid \| invalid \| validating` | - | - | - | | `strategy` | 设置级联策略 | `'all' \| 'parent' \| 'child' \| 'off'` | `'all'` | - | 具体用法参见 [级联策略](#components-cascader-demo-Strategy) | diff --git a/packages/components/cascader/src/Cascader.tsx b/packages/components/cascader/src/Cascader.tsx index ddd3fad96..b68d800da 100644 --- a/packages/components/cascader/src/Cascader.tsx +++ b/packages/components/cascader/src/Cascader.tsx @@ -161,7 +161,7 @@ export default defineComponent({ props.searchable && callEmit(props.onSearch, '') } const renderContent = () => { - const { searchable, overlayRender } = props + const { searchable, overlayRender, searchPlaceholder } = props const searchValue = inputValue.value const prefixCls = mergedPrefixCls.value const panelSlots = { empty: slots.empty, optionLabel: slots.optionLabel } @@ -182,6 +182,7 @@ export default defineComponent({ size="sm" suffix="search" value={searchValue} + placeholder={searchPlaceholder} onClear={handleSearchClear} onInput={handleSearchInput} /> diff --git a/packages/components/cascader/src/types.ts b/packages/components/cascader/src/types.ts index 38e32a35e..f72b5461f 100644 --- a/packages/components/cascader/src/types.ts +++ b/packages/components/cascader/src/types.ts @@ -110,6 +110,7 @@ export const cascaderProps = { strategy: { type: String as PropType, default: 'all' }, suffix: { type: String, default: undefined }, virtual: { type: Boolean, default: false }, + searchPlaceholder: { type: String, default: undefined }, // events 'onUpdate:value': [Function, Array] as PropType void>>, diff --git a/packages/components/table/demo/ScrollLoad.md b/packages/components/table/demo/ScrollLoad.md new file mode 100644 index 000000000..6e73d8678 --- /dev/null +++ b/packages/components/table/demo/ScrollLoad.md @@ -0,0 +1,14 @@ +--- +title: + zh: 滚动加载 + en: Scroll load +order: 22 +--- + +## zh + +滚动加载表格 + +## en + +scroll load table diff --git a/packages/components/table/demo/ScrollLoad.vue b/packages/components/table/demo/ScrollLoad.vue new file mode 100644 index 000000000..d042dec17 --- /dev/null +++ b/packages/components/table/demo/ScrollLoad.vue @@ -0,0 +1,225 @@ + + + diff --git a/packages/components/tree-select/docs/Api.zh.md b/packages/components/tree-select/docs/Api.zh.md index 70e6c2999..258df74dc 100644 --- a/packages/components/tree-select/docs/Api.zh.md +++ b/packages/components/tree-select/docs/Api.zh.md @@ -42,10 +42,12 @@ | `searchable` | 是否开启搜索功能 | `boolean \| 'overlay'` | - | - | 当为 `true` 时搜索功能集成在选择器上,当为 `overlay` 时,搜索功能集成在悬浮层上 | | `showLine` | 是否显示连接线 | `boolean` | `false` | - | 此属性为`tree`的全局配置,修改其即可生效 | | `size` | 设置选择器大小 | `'sm' \| 'md' \| 'lg'` | `md` | ✅ | - | +| `spin` | 是否显示加载中状态 | `boolean \| SpinPublicProps` | `undefined` | - | - | | `status` | 手动指定校验状态 | `valid \| invalid \| validating` | - | - | - | | `suffix` | 设置后缀图标 | `string \| #suffix` | `down` | ✅ | - | | `treeDisabled` | 树的禁用节点的函数 | 参考 [Tree](/components/tree/zh#API) | - | - | - | | `virtual` | 是否开启虚拟滚动 | `boolean` | `false` | - | - | +| `searchPlaceholder` | 下拉菜单搜索框的默认文本 | `string` | - | - | - | | `onChange` | 选择值发生变化时触发 | `(value: any, oldValue: any) => void` | - | - | - | | `onCheck` | 选择框勾选状态发生变化时触发 | `(checked: boolean, node: TreeSelectNode) => void` | - | - | - | | `onDragStart` | `dragstart` 触发时调用 | `(options: TreeDragDropOptions) => void` | - | - | - | diff --git a/packages/components/tree-select/src/TreeSelect.tsx b/packages/components/tree-select/src/TreeSelect.tsx index b12c348f3..5f4ab66ff 100644 --- a/packages/components/tree-select/src/TreeSelect.tsx +++ b/packages/components/tree-select/src/TreeSelect.tsx @@ -7,6 +7,8 @@ import { computed, defineComponent, normalizeClass, provide, ref, watch } from 'vue' +import { isBoolean } from 'lodash-es' + import { useAccessorAndControl } from '@idux/cdk/forms' import { type VirtualScrollToFn } from '@idux/cdk/scroll' import { type VKey, useControlledProp, useState } from '@idux/cdk/utils' @@ -15,6 +17,7 @@ import { ɵSelector, type ɵSelectorInstance } from '@idux/components/_private/s import { useGlobalConfig } from '@idux/components/config' import { useFormItemRegister, useFormSize, useFormStatus } from '@idux/components/form' import { ɵUseOverlayState } from '@idux/components/select' +import { IxSpin } from '@idux/components/spin' import { type TreeInstance } from '@idux/components/tree' import { useGetKey } from '@idux/components/utils' @@ -172,7 +175,13 @@ export default defineComponent({ /> ) - const renderContent = () => + const renderLoading = (children: JSX.Element) => { + const { spin } = props + const spinProps = isBoolean(spin) ? { spinning: spin } : spin + return spinProps ? {children} : children + } + + const renderContent = () => renderLoading() return () => { const overlayProps = { diff --git a/packages/components/tree-select/src/content/Content.tsx b/packages/components/tree-select/src/content/Content.tsx index 9404e100e..af00576e2 100644 --- a/packages/components/tree-select/src/content/Content.tsx +++ b/packages/components/tree-select/src/content/Content.tsx @@ -146,6 +146,7 @@ export default defineComponent({ virtual, searchable, showLine, + searchPlaceholder, onDragstart, onDragend, onDragenter, @@ -247,6 +248,7 @@ export default defineComponent({ size="sm" suffix="search" value={value} + placeholder={searchPlaceholder} onClear={handleClear} onInput={handleInput} /> diff --git a/packages/components/tree-select/src/types.ts b/packages/components/tree-select/src/types.ts index 94f3c6013..10e587e18 100644 --- a/packages/components/tree-select/src/types.ts +++ b/packages/components/tree-select/src/types.ts @@ -13,6 +13,7 @@ import type { ExtractInnerPropTypes, ExtractPublicPropTypes, MaybeArray, VKey } import type { CascaderStrategy } from '@idux/components/cascader' import type { EmptyProps } from '@idux/components/empty' import type { FormSize } from '@idux/components/form' +import type { SpinProps } from '@idux/components/spin' import type { TreeCustomAdditional, TreeDragDropOptions, @@ -77,6 +78,7 @@ export const treeSelectProps = { default: true, }, size: { type: String as PropType, default: undefined }, + spin: { type: [Boolean, Object] as PropType, default: undefined }, showLine: { type: Boolean, default: undefined }, status: String as PropType, suffix: { type: String, default: undefined }, @@ -85,6 +87,7 @@ export const treeSelectProps = { default: undefined, }, virtual: { type: Boolean, default: false }, + searchPlaceholder: { type: String, default: undefined }, // events 'onUpdate:value': [Function, Array] as PropType void>>,