UNPKG

bootstrap-vue

Version:

With more than 85 components, over 45 available plugins, several directives, and 1000+ icons, BootstrapVue provides one of the most comprehensive implementations of the Bootstrap v4 component and grid system available for Vue.js v2.6, complete with extens

36 lines (32 loc) 970 B
import cloneDeep from './clone-deep' import looseEqual from './loose-equal' import { hasOwnProperty, keys } from './object' const isEmpty = value => !value || keys(value).length === 0 export const makePropWatcher = propName => ({ handler(newValue, oldValue) { if (looseEqual(newValue, oldValue)) { return } if (isEmpty(newValue) || isEmpty(oldValue)) { this[propName] = cloneDeep(newValue) return } for (const key in oldValue) { if (!hasOwnProperty(newValue, key)) { this.$delete(this.$data[propName], key) } } for (const key in newValue) { this.$set(this.$data[propName], key, newValue[key]) } } }) export const makePropCacheMixin = (propName, proxyPropName) => ({ data() { return { [proxyPropName]: cloneDeep(this[propName]) } }, watch: { // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115 [propName]: makePropWatcher(proxyPropName) } })