feat: tree-select add context size
							parent
							
								
									799eeed346
								
							
						
					
					
						commit
						087dfa2f1b
					
				|  | @ -1,9 +1,10 @@ | |||
| import { computed, inject } from 'vue'; | ||||
| import { computed, h, inject } from 'vue'; | ||||
| import { defaultConfigProvider, configProviderKey } from '../context'; | ||||
| import { DefaultRenderEmpty } from '../renderEmpty'; | ||||
| export default (name: string, props: Record<any, any>) => { | ||||
|   const configProvider = inject(configProviderKey, { | ||||
|     ...defaultConfigProvider, | ||||
|     renderEmpty: () => null, | ||||
|     renderEmpty: (name?: string) => h(DefaultRenderEmpty, { componentName: name }), | ||||
|   }); | ||||
|   const prefixCls = computed(() => configProvider.getPrefixCls(name, props.prefixCls)); | ||||
|   const direction = computed(() => props.direction ?? configProvider.direction?.value); | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ Select component to select value from options. | |||
| | defaultActiveFirstOption | Whether active first option by default | boolean | true |  | | ||||
| | defaultOpen | Initial open state of dropdown | boolean | - |  | | ||||
| | disabled | Whether disabled select | boolean | false |  | | ||||
| | dropdownClassName | className of dropdown menu | string | - |  | | ||||
| | popupClassName | className of dropdown menu | string | - | 4.0 | | ||||
| | dropdownMatchSelectWidth | Determine whether the dropdown menu and the select input are the same width. Default set `min-width` same as input. Will ignore when value less than select width. `false` will disable virtual scroll | boolean \| number | true |  | | ||||
| | dropdownMenuStyle | additional style applied to dropdown menu | object | - |  | | ||||
| | dropdownRender | Customize dropdown content | ({menuNode: VNode, props}) => VNode \| v-slot | - |  | | ||||
|  |  | |||
|  | @ -142,10 +142,11 @@ const Select = defineComponent({ | |||
|     } = useConfigInject('select', props); | ||||
|     const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction); | ||||
|     const mergedSize = computed(() => compactSize.value || contextSize.value); | ||||
|     // style | ||||
|     const [wrapSSR, hashId] = useStyle(prefixCls); | ||||
|     const contextDisabled = useInjectDisabled(); | ||||
|     const mergedDisabled = computed(() => disabled.value ?? contextDisabled.value); | ||||
|     // style | ||||
|     const [wrapSSR, hashId] = useStyle(prefixCls); | ||||
| 
 | ||||
|     const rootPrefixCls = computed(() => getPrefixCls()); | ||||
|     // ===================== Placement ===================== | ||||
|     const placement = computed(() => { | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*zo76T7KQx2UAAAAAAA | |||
| | defaultActiveFirstOption | 是否默认高亮第一个选项。 | boolean | true |  | | ||||
| | defaultOpen | 是否默认展开下拉菜单 | boolean | - |  | | ||||
| | disabled | 是否禁用 | boolean | false |  | | ||||
| | dropdownClassName | 下拉菜单的 className 属性 | string | - |  | | ||||
| | popupClassName | 下拉菜单的 className 属性 | string | - | 4.0 | | ||||
| | dropdownMatchSelectWidth | 下拉菜单和选择器同宽。默认将设置 `min-width`,当值小于选择框宽度时会被忽略。false 时会关闭虚拟滚动 | boolean \| number | true |  | | ||||
| | dropdownMenuStyle | dropdown 菜单自定义样式 | object | - |  | | ||||
| | dropdownRender | 自定义下拉框内容 | ({menuNode: VNode, props}) => VNode \| v-slot | - |  | | ||||
|  |  | |||
|  | @ -97,7 +97,7 @@ const Space = defineComponent({ | |||
|       const horizontalSizeVal = horizontalSize.value; | ||||
|       const latestIndex = len - 1; | ||||
|       return ( | ||||
|         <div {...attrs} class={cn.value} style={style.value}> | ||||
|         <div {...attrs} class={cn.value} style={[style.value, attrs.style as any]}> | ||||
|           {items.map((child, index) => { | ||||
|             let itemStyle: CSSProperties = {}; | ||||
|             if (!supportFlexGap.value) { | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ Tree selection control. | |||
| | allowClear | Whether allow clear | boolean | false |  |  | | ||||
| | defaultValue | To set the initial selected treeNode(s). | string\|string\[] | - |  |  | | ||||
| | disabled | Disabled or not | boolean | false |  |  | | ||||
| | dropdownClassName | className of dropdown menu | string | - |  |  | | ||||
| | popupClassName | className of dropdown menu | string | - |  | 4.0 | | ||||
| | dropdownMatchSelectWidth | Determine whether the dropdown menu and the select input are the same width. Default set `min-width` same as input. Will ignore when value less than select width. `false` will disable virtual scroll | boolean \| number | true |  |  | | ||||
| | dropdownStyle | To set the style of the dropdown menu | object | - |  |  | | ||||
| | fieldNames | Replace the label,value, key and children fields in treeNode with the corresponding fields in treeData | object | {children:'children', label:'title', key:'key', value: 'value' } |  | 3.0.0 | | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import type { App, ExtractPropTypes } from 'vue'; | ||||
| import { computed, ref, watchEffect, defineComponent } from 'vue'; | ||||
| import { computed, ref, defineComponent } from 'vue'; | ||||
| import VcTreeSelect, { | ||||
|   TreeNode, | ||||
|   SHOW_ALL, | ||||
|  | @ -33,6 +33,8 @@ import { booleanType, stringType, objectType, someType, functionType } from '../ | |||
| // CSSINJS | ||||
| import useSelectStyle from '../select/style'; | ||||
| import useStyle from './style'; | ||||
| import { useCompactItemContext } from '../space/Compact'; | ||||
| import { useInjectDisabled } from '../config-provider/DisabledContext'; | ||||
| 
 | ||||
| const getTransitionName = (rootPrefixCls: string, motion: string, transitionName?: string) => { | ||||
|   if (transitionName !== undefined) { | ||||
|  | @ -73,6 +75,9 @@ export function treeSelectProps< | |||
|     replaceFields: objectType<FieldNames>(), | ||||
|     placement: stringType<SelectCommonPlacement>(), | ||||
|     status: stringType<InputStatus>(), | ||||
|     popupClassName: String, | ||||
|     /** @deprecated Please use `popupClassName` instead */ | ||||
|     dropdownClassName: String, | ||||
|     'onUpdate:value': functionType<(value: any) => void>(), | ||||
|     'onUpdate:treeExpandedKeys': functionType<(keys: Key[]) => void>(), | ||||
|     'onUpdate:searchValue': functionType<(value: string) => void>(), | ||||
|  | @ -105,18 +110,21 @@ const TreeSelect = defineComponent({ | |||
|       !(props.treeData === undefined && slots.default), | ||||
|       '`children` of TreeSelect is deprecated. Please use `treeData` instead.', | ||||
|     ); | ||||
|     watchEffect(() => { | ||||
|       devWarning( | ||||
|         props.multiple !== false || !props.treeCheckable, | ||||
|         'TreeSelect', | ||||
|         '`multiple` will always be `true` when `treeCheckable` is true', | ||||
|       ); | ||||
|       devWarning( | ||||
|         props.replaceFields === undefined, | ||||
|         'TreeSelect', | ||||
|         '`replaceFields` is deprecated, please use fieldNames instead', | ||||
|       ); | ||||
|     }); | ||||
|     devWarning( | ||||
|       props.multiple !== false || !props.treeCheckable, | ||||
|       'TreeSelect', | ||||
|       '`multiple` will always be `true` when `treeCheckable` is true', | ||||
|     ); | ||||
|     devWarning( | ||||
|       props.replaceFields === undefined, | ||||
|       'TreeSelect', | ||||
|       '`replaceFields` is deprecated, please use fieldNames instead', | ||||
|     ); | ||||
|     devWarning( | ||||
|       !props.dropdownClassName, | ||||
|       'TreeSelect', | ||||
|       '`dropdownClassName` is deprecated. Please use `popupClassName` instead.', | ||||
|     ); | ||||
| 
 | ||||
|     const formItemContext = useInjectFormItemContext(); | ||||
|     const formItemInputContext = FormItemInputContext.useInject(); | ||||
|  | @ -127,10 +135,15 @@ const TreeSelect = defineComponent({ | |||
|       direction, | ||||
|       virtual, | ||||
|       dropdownMatchSelectWidth, | ||||
|       size, | ||||
|       size: contextSize, | ||||
|       getPopupContainer, | ||||
|       getPrefixCls, | ||||
|       disabled, | ||||
|     } = useConfigInject('select', props); | ||||
|     const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction); | ||||
|     const mergedSize = computed(() => compactSize.value || contextSize.value); | ||||
|     const contextDisabled = useInjectDisabled(); | ||||
|     const mergedDisabled = computed(() => disabled.value ?? contextDisabled.value); | ||||
|     const rootPrefixCls = computed(() => getPrefixCls()); | ||||
|     // ===================== Placement ===================== | ||||
|     const placement = computed(() => { | ||||
|  | @ -160,7 +173,7 @@ const TreeSelect = defineComponent({ | |||
| 
 | ||||
|     const mergedDropdownClassName = computed(() => | ||||
|       classNames( | ||||
|         props.dropdownClassName, | ||||
|         props.popupClassName || props.dropdownClassName, | ||||
|         `${treeSelectPrefixCls.value}-dropdown`, | ||||
|         { | ||||
|           [`${treeSelectPrefixCls.value}-dropdown-rtl`]: direction.value === 'rtl', | ||||
|  | @ -255,13 +268,14 @@ const TreeSelect = defineComponent({ | |||
|       const mergedClassName = classNames( | ||||
|         !customizePrefixCls && treeSelectPrefixCls.value, | ||||
|         { | ||||
|           [`${prefixCls.value}-lg`]: size.value === 'large', | ||||
|           [`${prefixCls.value}-sm`]: size.value === 'small', | ||||
|           [`${prefixCls.value}-lg`]: mergedSize.value === 'large', | ||||
|           [`${prefixCls.value}-sm`]: mergedSize.value === 'small', | ||||
|           [`${prefixCls.value}-rtl`]: direction.value === 'rtl', | ||||
|           [`${prefixCls.value}-borderless`]: !bordered, | ||||
|           [`${prefixCls.value}-in-form-item`]: isFormItemInput, | ||||
|         }, | ||||
|         getStatusClassNames(prefixCls.value, mergedStatus.value, hasFeedback), | ||||
|         compactItemClassnames.value, | ||||
|         attrs.class, | ||||
|         hashId.value, | ||||
|       ); | ||||
|  | @ -274,6 +288,7 @@ const TreeSelect = defineComponent({ | |||
|           <VcTreeSelect | ||||
|             {...attrs} | ||||
|             {...selectProps} | ||||
|             disabled={mergedDisabled.value} | ||||
|             virtual={virtual.value} | ||||
|             dropdownMatchSelectWidth={dropdownMatchSelectWidth.value} | ||||
|             id={id} | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*DfTMRYSDngEAAAAAAA | |||
| | allowClear | 显示清除按钮 | boolean | false |  |  | | ||||
| | defaultValue | 指定默认选中的条目 | string/string\[] | - |  |  | | ||||
| | disabled | 是否禁用 | boolean | false |  |  | | ||||
| | dropdownClassName | 下拉菜单的 className 属性 | string | - |  |  | | ||||
| | popupClassName | 下拉菜单的 className 属性 | string | - |  | 4.0 | | ||||
| | dropdownMatchSelectWidth | 下拉菜单和选择器同宽。默认将设置 `min-width`,当值小于选择框宽度时会被忽略。false 时会关闭虚拟滚动 | boolean \| number | true |  |  | | ||||
| | dropdownStyle | 下拉菜单的样式 | object | - |  |  | | ||||
| | fieldNames | 替换 treeNode 中 label,value,key,children 字段为 treeData 中对应的字段 | object | {children:'children', label:'title', value: 'value' } |  | 3.0.0 | | ||||
|  |  | |||
|  | @ -679,6 +679,7 @@ export default defineComponent({ | |||
|       const restProps = omit(props, [ | ||||
|         'id', | ||||
|         'prefixCls', | ||||
|         'customSlots', | ||||
| 
 | ||||
|         // Value | ||||
|         'value', | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 tangjinzhou
						tangjinzhou