import { createOption, destroyOption, assemOption } from './util'

const props = {
  label: { type: [String, Number, Boolean], default: '' },
  visible: { type: Boolean, default: null },
  className: [String, Function],
  disabled: Boolean
}

const watch = {}
Object.keys(props).forEach(name => {
  watch[name] = function (value) {
    this.optionConfig.update(name, value)
  }
})

export default {
  name: 'VxeOptgroup',
  props,
  provide () {
    return {
      $xeoptgroup: this
    }
  },
  inject: {
    $xeselect: {
      default: null
    }
  },
  computed: {
    vSize () {
      return this.size || this.$parent.size || this.$parent.vSize
    }
  },
  watch,
  mounted () {
    assemOption(this)
  },
  created () {
    this.optionConfig = createOption(this.$xeselect, this)
  },
  destroyed () {
    destroyOption(this)
  },
  render (h) {
    return h('div', this.$slots.default)
  }
}
