element-plus/packages/hooks/use-form-item/index.ts
三咲智子 bbd16a08e9
refactor(hooks): refactor hooks (#4253)
* refactor(hooks): remove use-css-var

* refactor(hooks): remove use-events

* refactor(hooks): remove use-migrating

* refactor(hooks): remove use-transition

* refactor(hooks): named export useAttrs

* refactor(hooks): named export useFocus

* refactor(hooks): refactor useFormItem

* refactor(hooks): refactor useGlobalConfig

* refactor(hooks): refactor useLocale

* refactor(hooks): refactor useLockscreen

* refactor(hooks): refactor useModal

* refactor(hooks): refactor useModelToggle

* refactor(hooks): refactor usePreventGlobal

* refactor(hooks): refactor useRestoreActive

* refactor(hooks): refactor useTeleport

* refactor(hooks): refactor useThrottleRender

* refactor(hooks): refactor useTimeout

* refactor(hooks): refactor useTransitionFallthrogh
2021-11-29 15:58:44 +08:00

55 lines
1.5 KiB
TypeScript

import { inject, computed, getCurrentInstance, unref } from 'vue'
import { elFormKey, elFormItemKey } from '@element-plus/tokens'
import { buildProps, componentSize } from '@element-plus/utils/props'
import { useGlobalConfig } from '@element-plus/utils/util'
import type { ExtractPropTypes } from 'vue'
import type { MaybeRef } from '@vueuse/core'
const sizes = ['', ...componentSize] as const
export const useFormItemProps = buildProps({
size: {
type: String,
values: sizes,
default: '',
},
disabled: Boolean,
} as const)
export type UseFormItemProps = ExtractPropTypes<typeof useFormItemProps>
export type LocalFallbacks = {
size?: MaybeRef<UseFormItemProps['size'] | undefined>
disabled?: MaybeRef<UseFormItemProps['disabled'] | undefined>
}
export const useFormItem = ({ size, disabled }: LocalFallbacks = {}) => {
const vm = getCurrentInstance()!
const $ELEMENT = useGlobalConfig()
const props = vm.proxy?.$props as UseFormItemProps
const form = inject(elFormKey, undefined)
const formItem = inject(elFormItemKey, undefined)
return {
size: computed(() => {
// TODO, fallback to default size like 'medium/large' instead of empty string
return (
props.size ||
unref(size) ||
formItem?.size ||
form?.size ||
$ELEMENT.size ||
''
)
}),
disabled: computed(() => {
return (
props.disabled === true || unref(disabled) || form?.disabled || false
)
}),
form,
formItem,
}
}