/*
* XmlDigitalTeaching v0.0.1
* Copyright ©Wed Jun 12 2024 12:02:25 GMT+0800 (中国标准时间) smile
* Released under the ISC License.
*/
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

// import '../block.scss'
var script = {
  name: 'XmlCatalogRender',
  components: {},
  inject: ['getCatalogList'],
  props: {
    //模式：preview 预览 (默认)，editor 编辑
    mode: {
      type: String,
      default: function () {
        return 'preview';
      }
    },
    //属性中传递过来的块儿数据
    pBlockData: {},
    //块儿数据名
    blockDataName: String,
    //页面类型，取值h5、pc、pad
    pageType: {
      type: String,
      default: 'h5'
    },
    //当前所处组的规则
    currentRule: {
      type: Object,
      default: function () {
        return {};
      }
    },
    ruleIndex: Number,
    extendParams: {
      type: Object,
      default: function () {
        return {};
      }
    }
  },
  data() {
    return {
      blockId: `blockId${Math.random()}`,
      //当前块儿数据，一般用不到，因为一般的块儿中不会在块儿内更改数据
      blockData: {},
      //属性组件名
      propertyComponentsName: 'xml-catalog-property',
      defaultProps: {
        children: 'children',
        label: 'label'
      },
      filteredTree: []
    };
  },
  computed: {
    catalogList() {
      return this.getCatalogList().data;
    }
  },
  watch: {
    pBlockData: {
      handler(newValue) {
        this.$nextTick(() => {
          this.blockData = Object.assign({}, this.blockData, newValue);
          this.$forceUpdate();
          // this.ebookSetList=Object.assign({},this.blockData.ebookSetList);
        });
      },
      deep: true,
      immediate: true
    },
    catalogList: {
      handler(newValue) {
        // this.$nextTick(() => {
        //   this.$refs.tree.filter('unexpected')
        // })
        let origin = newValue || [];
        const filterMenu = menuList => {
          return menuList.filter(item => {
            return item.hiddenFlag !== '1';
          }).map(item => {
            item = Object.assign({}, item);
            if (item.children) {
              item.children = filterMenu(item.children);
            }
            return item;
          });
        };
        this.filteredTree = filterMenu(origin);
      },
      deep: true,
      immediate: true
    }
  },
  created() {
    // this.blockData = Object.assign( this.blockData,this.pBlockData)
  },
  methods: {
    // 此方法必须要，用户注册块儿点击事件
    blockClick() {
      this.$emit('blockclick', {
        blockData: this.blockData,
        dataName: this.blockDataName,
        propertyComponentsName: this.propertyComponentsName,
        blockId: this.blockId,
        ruleIndex: this.ruleIndex
      });
    },
    nodeClick(data, node) {
      this.$EventBus.$emit('treeNodeClick', {
        data,
        node
      });
    },
    filterNode(value, data) {
      // if (!value) return true;
      return data.hiddenFlag !== '1';
    }
  }
};

function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
  if (typeof shadowMode !== 'boolean') {
    createInjectorSSR = createInjector;
    createInjector = shadowMode;
    shadowMode = false;
  }
  // Vue.extend constructor export interop.
  const options = typeof script === 'function' ? script.options : script;
  // render functions
  if (template && template.render) {
    options.render = template.render;
    options.staticRenderFns = template.staticRenderFns;
    options._compiled = true;
    // functional template
    if (isFunctionalTemplate) {
      options.functional = true;
    }
  }
  // scopedId
  if (scopeId) {
    options._scopeId = scopeId;
  }
  let hook;
  if (moduleIdentifier) {
    // server build
    hook = function (context) {
      // 2.3 injection
      context = context ||
      // cached call
      this.$vnode && this.$vnode.ssrContext ||
      // stateful
      this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional
      // 2.2 with runInNewContext: true
      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
        context = __VUE_SSR_CONTEXT__;
      }
      // inject component styles
      if (style) {
        style.call(this, createInjectorSSR(context));
      }
      // register component module identifier for async chunk inference
      if (context && context._registeredComponents) {
        context._registeredComponents.add(moduleIdentifier);
      }
    };
    // used by ssr in case component is cached and beforeCreate
    // never gets called
    options._ssrRegister = hook;
  } else if (style) {
    hook = shadowMode ? function (context) {
      style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));
    } : function (context) {
      style.call(this, createInjector(context));
    };
  }
  if (hook) {
    if (options.functional) {
      // register for functional component in vue file
      const originalRender = options.render;
      options.render = function renderWithStyleInjection(h, context) {
        hook.call(context);
        return originalRender(h, context);
      };
    } else {
      // inject component registration as beforeCreate hook
      const existing = options.beforeCreate;
      options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
    }
  }
  return script;
}

/* script */
const __vue_script__ = script;
/* template */
var __vue_render__ = function () {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    {
      staticClass: "xml-show-catalog xml-group-item",
      class: "xml-catalog-container-" + _vm.pageType,
      attrs: { id: _vm.blockId },
      on: { click: _vm.blockClick },
    },
    [
      _c("el-tree", {
        ref: "tree",
        class: "preview-tree-box-" + _vm.pageType,
        staticStyle: { "margin-top": "0px" },
        attrs: {
          id: "built-in-tree",
          draggable: _vm.blockData.draggable,
          "default-expand-all": true,
          "highlight-current": "",
          data: _vm.filteredTree,
          "node-key": "id",
          props: _vm.defaultProps,
          "filter-node-method": _vm.filterNode,
          "expand-on-click-node": false,
        },
        on: { "node-click": _vm.nodeClick },
        scopedSlots: _vm._u([
          {
            key: "default",
            fn: function (ref) {
              var node = ref.node;
              var data = ref.data;
              return _c("div", { staticClass: "catalog-node-label" }, [
                data.uploadFileUrl
                  ? _c("img", {
                      staticStyle: { width: "15px", height: "15px" },
                      attrs: { src: data.uploadFileUrl, alt: "" },
                    })
                  : _vm._e(),
                _vm._v(" "),
                _c(
                  "div",
                  {
                    class: ["node-label", node.expanded ? "expanded-node" : ""],
                  },
                  [_vm._v(_vm._s(node.label))]
                ),
              ])
            },
          },
        ]),
      }),
    ],
    1
  )
};
var __vue_staticRenderFns__ = [];
__vue_render__._withStripped = true;

  /* style */
  const __vue_inject_styles__ = undefined;
  /* scoped */
  const __vue_scope_id__ = "data-v-61c986fa";
  /* module identifier */
  const __vue_module_identifier__ = undefined;
  /* functional template */
  const __vue_is_functional_template__ = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  const __vue_component__ = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
    __vue_inject_styles__,
    __vue_script__,
    __vue_scope_id__,
    __vue_is_functional_template__,
    __vue_module_identifier__,
    false,
    undefined,
    undefined,
    undefined
  );

let componentNamespace = 'xml';
// 组件前缀命名只能更新一次，防止重复执行修改组件注册出错
let isUpdated = false;
function createNamespace(name, {
  prefix,
  isUnPrefix
}) {
  let useNamespace;
  if (!isUpdated) {
    isUpdated = true;
    useNamespace = prefix || componentNamespace; // 更改前缀
  }
  if (prefix) {
    if (name.indexOf(componentNamespace) === 0) {
      return name.replace(componentNamespace, prefix);
    }
    return useNamespace.charAt(0).toUpperCase() + useNamespace.substr(1) + name;
  }
  if (name.indexOf(componentNamespace) === 0 || name.indexOf(componentNamespace.charAt(0).toUpperCase()) === 0) {
    return name.charAt(0).toUpperCase() + name.substr(1);
  }
  return isUnPrefix ? name.charAt(0).toLowerCase() + name.substr(1) : componentNamespace + name.charAt(0).toUpperCase() + name.substr(1);
}

// 提交
__vue_component__.install = (Vue, options = {}) => {
  Vue.component(createNamespace('catalog-render', {
    prefix: options.prefix
  }), __vue_component__);
};

export { __vue_component__ as default };
