You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
import { basic } from '../mixins/basic'; |
|
import { observe } from '../mixins/observer/index'; |
|
function mapKeys(source, target, map) { |
|
Object.keys(map).forEach(key => { |
|
if (source[key]) { |
|
target[map[key]] = source[key]; |
|
} |
|
}); |
|
} |
|
function VantComponent(vantOptions = {}) { |
|
const options = {}; |
|
mapKeys(vantOptions, options, { |
|
data: 'data', |
|
props: 'properties', |
|
mixins: 'behaviors', |
|
methods: 'methods', |
|
beforeCreate: 'created', |
|
created: 'attached', |
|
mounted: 'ready', |
|
relations: 'relations', |
|
destroyed: 'detached', |
|
classes: 'externalClasses' |
|
}); |
|
const { relation } = vantOptions; |
|
if (relation) { |
|
options.relations = Object.assign(options.relations || {}, { |
|
[`../${relation.name}/index`]: relation |
|
}); |
|
} |
|
// add default externalClasses |
|
options.externalClasses = options.externalClasses || []; |
|
options.externalClasses.push('custom-class'); |
|
// add default behaviors |
|
options.behaviors = options.behaviors || []; |
|
options.behaviors.push(basic); |
|
// map field to form-field behavior |
|
if (vantOptions.field) { |
|
options.behaviors.push('wx://form-field'); |
|
} |
|
// add default options |
|
options.options = { |
|
multipleSlots: true, |
|
addGlobalClass: true |
|
}; |
|
observe(vantOptions, options); |
|
Component(options); |
|
} |
|
export { VantComponent };
|
|
|