<template>
  <component
    :is="renderComponent"
    v-if="isRender"
    ref="extensionComponent"
    v-bind="$props"
    v-on="$listeners"
  ></component>
</template>

<!-- 组件方式编写插件，全域管控 -->
<script>
import ExtensionEngine from '../engine/engine.js'
import Vue from 'vue'
export default {
  name: 'Extension',
  props: {
    component: {
      type: String,
      required: true
    }
  },
  data() {
    return {}
  },
  computed: {
    isRender() {
      // 校验是否开放此组件

      const ExtensionComponent = Vue.options.components[this.component]

      if (ExtensionComponent) {
        return ExtensionEngine.getInstance().validateBlock(
          ExtensionComponent.extendOptions.extension,
          ExtensionComponent.extendOptions.block
        )
      } else {
        return false
      }
    },
    renderComponent() {
      return this.component
    }
  },
  methods: {
    // 代理插件方法，代理插件方法，若插件未开发此方法，或者没有权限使用此方法，则控制台报错，无法使用此方法，并不做响应，具体的响应机制后续可以拓展
  }
}
</script>

<style></style>
