xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 4.68 kB
Source Map (JSON)
{"version":3,"file":"useLengthLimit.mjs","sources":["../../src/input/useLengthLimit.tsx"],"sourcesContent":["import { computed, ComputedRef, onMounted, watch } from 'vue';\nimport { TdInputProps } from './type';\nimport log from '../_common/js/log';\nimport { getCharacterLength, getUnicodeLength, limitUnicodeMaxLength } from '../_common/js/utils/helper';\nimport isNumber from 'lodash/isNumber';\nimport isObject from 'lodash/isObject';\n\nexport interface UseLengthLimitParams {\n value: string;\n maxlength: number;\n maxcharacter: number;\n allowInputOverMax: boolean;\n status: TdInputProps['status'];\n onValidate: TdInputProps['onValidate'];\n}\n\nexport default function useLengthLimit(params: ComputedRef<UseLengthLimitParams>) {\n // 文本超出数量限制时,是否允许继续输入\n const getValueByLimitNumber = (inputValue: string) => {\n const { allowInputOverMax, maxlength, maxcharacter } = params.value;\n if (!(maxlength || maxcharacter) || allowInputOverMax || !inputValue) return inputValue;\n if (maxlength) {\n // input value could be unicode 😊\n return limitUnicodeMaxLength(inputValue, maxlength);\n }\n if (maxcharacter) {\n const r = getCharacterLength(inputValue, maxcharacter);\n if (isObject(r)) {\n return r.characters;\n }\n }\n };\n\n const limitNumber = computed(() => {\n const { maxlength, maxcharacter, value } = params.value;\n if (isNumber(value)) return String(value);\n if (maxlength && maxcharacter) {\n log.warn('Input', 'Pick one of maxlength and maxcharacter please.');\n }\n if (maxlength) {\n const length = value?.length ? getUnicodeLength(value) : 0;\n return `${length}/${maxlength}`;\n }\n if (maxcharacter) {\n return `${getCharacterLength(value || '')}/${maxcharacter}`;\n }\n return '';\n });\n\n const innerStatus = computed(() => {\n if (limitNumber.value) {\n const [current, total] = limitNumber.value.split('/');\n return Number(current) > Number(total) ? 'error' : '';\n }\n return '';\n });\n\n const tStatus = computed(() => {\n const { status } = params.value;\n return status || innerStatus.value;\n });\n\n const onValidateChange = () => {\n params.value.onValidate?.({\n error: innerStatus.value ? 'exceed-maximum' : undefined,\n });\n };\n\n watch(innerStatus, onValidateChange);\n\n onMounted(() => {\n innerStatus.value && onValidateChange();\n });\n\n return {\n tStatus,\n limitNumber,\n getValueByLimitNumber,\n };\n}\n"],"names":["isObject","log","current","total","error","watch","onMounted","innerStatus","tStatus","limitNumber","getValueByLimitNumber"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,SAAA,cAAA,CAAA,MAAA,EAAA;AAEQ,EAAA,IAAA,qBAAA,GAAA,SAAA,qBAAA,CAAA,UAAA,EAAA;AACJ,IAAA,IAAA,aAAA,GAAA,MAAA,CAAA,KAAA;;;;AACA,IAAA,IAAA,EAAA,SAAA,IAAA,YAAA,CAAA,IAAA,iBAAA,IAAA,CAAA,UAAA,EAAA,OAAA,UAAA,CAAA;AACA,IAAA,IAAA,SAAA,EAAA;AAES,MAAA,OAAA,qBAAA,CAAA,UAAA,EAAA,SAAA,CAAA,CAAA;AACT,KAAA;AACA,IAAA,IAAA,YAAA,EAAA;AACQ,MAAA,IAAA,CAAA,GAAA,kBAAA,CAAA,UAAA,EAAA,YAAA,CAAA,CAAA;AACF,MAAA,IAAAA,UAAA,CAAA,CAAA,CAAA,EAAA;;AAEJ,OAAA;AACF,KAAA;;AAGI,EAAA,IAAA,WAAA,GAAA,QAAA,CAAA,YAAA;AACJ,IAAA,IAAA,cAAA,GAAA,MAAA,CAAA,KAAA;;;;;;AAGMC,MAAAA,GAAAA,CAAAA,IAAAA,CAAAA,OAAAA,EAAAA,gDAAAA,CAAAA,CAAAA;AACN,KAAA;AACA,IAAA,IAAA,SAAA,EAAA;AACE,MAAA,IAAA,MAAA,GAAA,KAAA,KAAA,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,IAAA,KAAA,CAAA,MAAA,GAAA,gBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA;AACA,MAAA,OAAA,EAAA,CAAA,MAAA,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA;AACF,KAAA;AACA,IAAA,IAAA,YAAA,EAAA;;AAEA,KAAA;AACO,IAAA,OAAA,EAAA,CAAA;AACT,GAAA,CAAA,CAAA;AAEM,EAAA,IAAA,WAAA,GAAA,QAAA,CAAA,YAAA;;;;AAEKC,QAAAA,OAAAA,GAAAA,sBAAAA,CAAAA,CAAAA,CAAAA;AAASC,QAAAA,KAAAA,GAAAA,sBAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAChB,MAAA,OAAA,MAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,KAAA,CAAA,GAAA,OAAA,GAAA,EAAA,CAAA;AACF,KAAA;AACO,IAAA,OAAA,EAAA,CAAA;AACT,GAAA,CAAA,CAAA;AAEM,EAAA,IAAA,OAAA,GAAA,QAAA,CAAA,YAAA;AACE,IAAA,IAAA,MAAA,GAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA;AACN,IAAA,OAAA,MAAA,IAAA,WAAA,CAAA,KAAA,CAAA;AACF,GAAA,CAAA,CAAA;AAEA,EAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,GAAA;;AACE,IAAA,CAAA,qBAAA,GAAA,CAAA,cAAA,GAAA,MAAA,CAAA,KAAA,EAAA,UAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,cAAA,EAAA;AACEC,MAAAA,KAAAA,EAAAA,WAAAA,CAAAA,KAAAA,GAAAA,gBAAAA,GAAAA,KAAAA,CAAAA;AACF,KAAA,CAAA,CAAA;;AAGFC,EAAAA,KAAAA,CAAAA,WAAAA,EAAAA,gBAAAA,CAAAA,CAAAA;AAEAC,EAAAA,SAAAA,CAAAA,YAAAA;AACEC,IAAAA,WAAAA,CAAAA,KAAAA,IAAAA,gBAAAA,EAAAA,CAAAA;AACF,GAAA,CAAA,CAAA;;AAGEC,IAAAA,OAAAA,EAAAA,OAAAA;AACAC,IAAAA,WAAAA,EAAAA,WAAAA;AACAC,IAAAA,qBAAAA,EAAAA,qBAAAA;;AAEJ;;;;"}