155 lines
3.5 KiB
JavaScript
155 lines
3.5 KiB
JavaScript
import warning from 'warning'
|
|
|
|
function getDisplayName (WrappedComponent) {
|
|
return WrappedComponent.name || 'WrappedComponent'
|
|
}
|
|
|
|
export function argumentContainer (Container, WrappedComponent) {
|
|
/* eslint no-param-reassign:0 */
|
|
Container.name = `Form_${getDisplayName(WrappedComponent)}`
|
|
Container.WrappedComponent = WrappedComponent
|
|
Container.props = { ...Container.props, ...WrappedComponent.props }
|
|
return Container
|
|
}
|
|
|
|
export function identity (obj) {
|
|
return obj
|
|
}
|
|
|
|
export function flattenArray (arr) {
|
|
return Array.prototype.concat.apply([], arr)
|
|
}
|
|
|
|
export function treeTraverse (path = '', tree, isLeafNode, errorMessage, callback) {
|
|
if (isLeafNode(path, tree)) {
|
|
callback(path, tree)
|
|
} else if (tree === undefined || tree === null) {
|
|
// Do nothing
|
|
} else if (Array.isArray(tree)) {
|
|
tree.forEach((subTree, index) => treeTraverse(
|
|
`${path}[${index}]`,
|
|
subTree,
|
|
isLeafNode,
|
|
errorMessage,
|
|
callback
|
|
))
|
|
} else { // It's object and not a leaf node
|
|
if (typeof tree !== 'object') {
|
|
warning(false, errorMessage)
|
|
return
|
|
}
|
|
Object.keys(tree).forEach(subTreeKey => {
|
|
const subTree = tree[subTreeKey]
|
|
treeTraverse(
|
|
`${path}${path ? '.' : ''}${subTreeKey}`,
|
|
subTree,
|
|
isLeafNode,
|
|
errorMessage,
|
|
callback
|
|
)
|
|
})
|
|
}
|
|
}
|
|
|
|
export function flattenFields (maybeNestedFields, isLeafNode, errorMessage) {
|
|
const fields = {}
|
|
treeTraverse(undefined, maybeNestedFields, isLeafNode, errorMessage, (path, node) => {
|
|
fields[path] = node
|
|
})
|
|
return fields
|
|
}
|
|
|
|
export function normalizeValidateRules (validate, rules, validateTrigger) {
|
|
const validateRules = validate.map((item) => {
|
|
const newItem = {
|
|
...item,
|
|
trigger: item.trigger || [],
|
|
}
|
|
if (typeof newItem.trigger === 'string') {
|
|
newItem.trigger = [newItem.trigger]
|
|
}
|
|
return newItem
|
|
})
|
|
if (rules) {
|
|
validateRules.push({
|
|
trigger: validateTrigger ? [].concat(validateTrigger) : [],
|
|
rules,
|
|
})
|
|
}
|
|
return validateRules
|
|
}
|
|
|
|
export function getValidateTriggers (validateRules) {
|
|
return validateRules
|
|
.filter(item => !!item.rules && item.rules.length)
|
|
.map(item => item.trigger)
|
|
.reduce((pre, curr) => pre.concat(curr), [])
|
|
}
|
|
|
|
export function getValueFromEvent (e) {
|
|
// To support custom element
|
|
if (!e || !e.target) {
|
|
return e
|
|
}
|
|
const { target } = e
|
|
return target.type === 'checkbox' ? target.checked : target.value
|
|
}
|
|
|
|
export function getErrorStrs (errors) {
|
|
if (errors) {
|
|
return errors.map((e) => {
|
|
if (e && e.message) {
|
|
return e.message
|
|
}
|
|
return e
|
|
})
|
|
}
|
|
return errors
|
|
}
|
|
|
|
export function getParams (ns, opt, cb) {
|
|
let names = ns
|
|
let options = opt
|
|
let callback = cb
|
|
if (cb === undefined) {
|
|
if (typeof names === 'function') {
|
|
callback = names
|
|
options = {}
|
|
names = undefined
|
|
} else if (Array.isArray(names)) {
|
|
if (typeof options === 'function') {
|
|
callback = options
|
|
options = {}
|
|
} else {
|
|
options = options || {}
|
|
}
|
|
} else {
|
|
callback = options
|
|
options = names || {}
|
|
names = undefined
|
|
}
|
|
}
|
|
return {
|
|
names,
|
|
options,
|
|
callback,
|
|
}
|
|
}
|
|
|
|
export function isEmptyObject (obj) {
|
|
return Object.keys(obj).length === 0
|
|
}
|
|
|
|
export function hasRules (validate) {
|
|
if (validate) {
|
|
return validate.some((item) => {
|
|
return item.rules && item.rules.length
|
|
})
|
|
}
|
|
return false
|
|
}
|
|
|
|
export function startsWith (str, prefix) {
|
|
return str.lastIndexOf(prefix, 0) === 0
|
|
}
|