import Vue, { PropType } from 'vue';
import deepMerge from 'deepmerge';
import type { Customizable, Options } from './types';
/**
* Mixin that merge default options with options passed as props
* @example
* Usage in your component:
* mixins: [ customizable({ btn: { color: 'primary' } }) ]
*
*
*
* Final API
*
*/
export function customizable(defaultOptions: Options): Customizable {
return Vue.extend({
props: {
vuetifyOptions: {
type: Object as PropType,
default: undefined
}
},
computed: {
options(): Options {
if (this.vuetifyOptions) {
return deepMerge(defaultOptions, this.vuetifyOptions);
}
return defaultOptions;
}
}
});
}
export type { Options };