ivue-material-plus
Version:
A high quality UI components Library with Vue.js
1 lines • 5.29 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../src/hooks/use-form-item/index.ts"],"sourcesContent":["import {\r\n inject,\r\n ref,\r\n onMounted,\r\n watch,\r\n toRef,\r\n onUnmounted,\r\n computed,\r\n} from 'vue';\r\nimport type { WatchStopHandle, ComputedRef, Ref } from 'vue';\r\n\r\n// 生成随机id\r\nimport { useId } from '../use-id';\r\n\r\n// type\r\nimport { FormContextKey } from '../../components/ivue-form/types/form';\r\nimport {\r\n FormItemContextKey,\r\n FormItemContext,\r\n} from '../../components/ivue-form/types/form-item';\r\n\r\n// 获取表单 inject\r\nexport const useFormItem = () => {\r\n const form = inject(FormContextKey, undefined);\r\n const formItem = inject(FormItemContextKey, undefined);\r\n\r\n return {\r\n form,\r\n formItem,\r\n };\r\n};\r\n\r\nexport type IUseFormItemInputCommonProps = {\r\n id?: string;\r\n label?: string | number | boolean | Record<string, any>;\r\n};\r\n\r\n// 设置表单item输入框id\r\nexport const useFormItemInputId = (\r\n props: Partial<IUseFormItemInputCommonProps>,\r\n {\r\n formItemContext,\r\n disableIdGeneration,\r\n disableIdManagement,\r\n }: {\r\n formItemContext?: FormItemContext;\r\n disableIdGeneration?: ComputedRef<boolean> | Ref<boolean>;\r\n disableIdManagement?: ComputedRef<boolean> | Ref<boolean>;\r\n },\r\n slots?\r\n) => {\r\n // 禁用 ID 生成\r\n if (!disableIdGeneration) {\r\n disableIdGeneration = ref<boolean>(false);\r\n }\r\n\r\n // 禁用 ID 管理\r\n if (!disableIdManagement) {\r\n disableIdManagement = ref<boolean>(false);\r\n }\r\n\r\n // 取消watch\r\n let idUnwatch: WatchStopHandle | undefined = undefined;\r\n\r\n // data\r\n\r\n // 输入框id\r\n const inputId = ref<string>();\r\n\r\n // computed\r\n\r\n // 获取表单item的标签名称\r\n const isLabeledByFormItem = computed<boolean>(() => {\r\n return !!(\r\n !props.label &&\r\n formItemContext &&\r\n formItemContext.inputIds &&\r\n formItemContext.inputIds?.length <= 1\r\n );\r\n });\r\n\r\n // onMounted\r\n // 如果没有作为 prop 提供,则为 IvueFormItem 标签生成 id\r\n onMounted(() => {\r\n // 有自定义input插槽\r\n if (slots && slots.input && slots.input()) {\r\n return;\r\n }\r\n\r\n idUnwatch = watch(\r\n [toRef(props, 'id')],\r\n ([id]: [string]) => {\r\n const newId =\r\n id ?? (!disableIdGeneration.value ? useId().value : undefined);\r\n\r\n if (formItemContext?.removeInputId) {\r\n // 删除输入框id\r\n inputId.value && formItemContext.removeInputId(inputId.value);\r\n\r\n // 添加输入框id\r\n if (\r\n !disableIdManagement?.value &&\r\n !disableIdGeneration.value &&\r\n newId\r\n ) {\r\n formItemContext.addInputId(newId);\r\n }\r\n }\r\n\r\n inputId.value = newId;\r\n },\r\n {\r\n immediate: true,\r\n }\r\n );\r\n });\r\n\r\n // onUnmounted\r\n onUnmounted(() => {\r\n idUnwatch && idUnwatch();\r\n\r\n // 删除输入框id\r\n if (formItemContext?.removeInputId) {\r\n inputId.value && formItemContext.removeInputId(inputId.value);\r\n }\r\n });\r\n\r\n return {\r\n isLabeledByFormItem,\r\n inputId,\r\n };\r\n};\r\n"],"names":[],"mappings":";;;;;AAsBO,MAAM,cAAc,MAAM;AAC/B,EAAM,MAAA,IAAA,GAAO,MAAO,CAAA,cAAA,EAAgB,KAAS,CAAA,CAAA,CAAA;AAC7C,EAAM,MAAA,QAAA,GAAW,MAAO,CAAA,kBAAA,EAAoB,KAAS,CAAA,CAAA,CAAA;AAErD,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AACF,EAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,KACA,EAAA;AAAA,EACE,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AACF,CAAA,EAKA,KACG,KAAA;AAEH,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IAAA,mBAAA,GAAsB,IAAa,KAAK,CAAA,CAAA;AAAA,GAC1C;AAGA,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IAAA,mBAAA,GAAsB,IAAa,KAAK,CAAA,CAAA;AAAA,GAC1C;AAGA,EAAA,IAAI,SAAyC,GAAA,KAAA,CAAA,CAAA;AAK7C,EAAA,MAAM,UAAU,GAAY,EAAA,CAAA;AAK5B,EAAM,MAAA,mBAAA,GAAsB,SAAkB,MAAM;AAxEtD,IAAA,IAAA,EAAA,CAAA;AAyEI,IAAO,OAAA,CAAC,EACN,CAAC,KAAM,CAAA,KAAA,IACP,eACA,IAAA,eAAA,CAAgB,QAChB,IAAA,CAAA,CAAA,EAAA,GAAA,eAAA,CAAgB,QAAhB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA0B,MAAU,KAAA,CAAA,CAAA,CAAA;AAAA,GAEvC,CAAA,CAAA;AAID,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,KAAS,IAAA,KAAA,CAAM,KAAS,IAAA,KAAA,CAAM,OAAS,EAAA;AACzC,MAAA,OAAA;AAAA,KACF;AAEA,IAAY,SAAA,GAAA,KAAA;AAAA,MACV,CAAC,KAAA,CAAM,KAAO,EAAA,IAAI,CAAC,CAAA;AAAA,MACnB,CAAC,CAAC,EAAE,CAAgB,KAAA;AAClB,QAAA,MAAM,QACJ,EAAO,IAAA,IAAA,GAAA,EAAA,GAAA,CAAC,oBAAoB,KAAQ,GAAA,KAAA,GAAQ,KAAQ,GAAA,KAAA,CAAA,CAAA;AAEtD,QAAA,IAAI,mDAAiB,aAAe,EAAA;AAElC,UAAA,OAAA,CAAQ,KAAS,IAAA,eAAA,CAAgB,aAAc,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAG5D,UAAA,IACE,EAAC,mBAAqB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,KAAA,CAAA,IACtB,CAAC,mBAAA,CAAoB,SACrB,KACA,EAAA;AACA,YAAA,eAAA,CAAgB,WAAW,KAAK,CAAA,CAAA;AAAA,WAClC;AAAA,SACF;AAEA,QAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAA;AAAA,OAClB;AAAA,MACA;AAAA,QACE,SAAW,EAAA,IAAA;AAAA,OACb;AAAA,KACF,CAAA;AAAA,GACD,CAAA,CAAA;AAGD,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,SAAA,IAAa,SAAU,EAAA,CAAA;AAGvB,IAAA,IAAI,mDAAiB,aAAe,EAAA;AAClC,MAAA,OAAA,CAAQ,KAAS,IAAA,eAAA,CAAgB,aAAc,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,KAC9D;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,mBAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}