@ithinkdt/core
Version:
iThinkDT Core
32 lines (31 loc) • 960 B
JavaScript
import { unref } from 'vue'
const requiredRuleSymbol = Symbol()
function required(message, { required = true, trigger = ['blur', 'change', 'input'] } = {}) {
return {
[requiredRuleSymbol]: true,
message,
trigger,
validator: (value) => {
if (!unref(required)) return
if (value === undefined || value === null) {
return false
}
if (typeof value === 'string') {
return value.trim() !== ''
}
if (typeof value === 'number' || typeof value === 'bigint') {
return true
}
if (typeof value === 'boolean') {
return value === true
}
if (Array.isArray(value)) {
return value.length > 0
}
},
}
}
function isRequiredRule(rule) {
return rule?.[requiredRuleSymbol] === true
}
export { required, isRequiredRule }