// 文件名按照按钮id例如workflow$myAttention,并且换成a-b-c的模式，将特殊字符也换成-
const buttonHandlers = { js: {}, vue: {} }
const promisesForVue = {}
const ctx = require.context('./', false, /\.js$|\.vue$/, 'lazy')

ctx.keys().forEach((fileName) => {
  if (fileName === './index.js') return
  const name = fileName
    // 去除开头的 "./"
    .replace(/^\.\//, '')
    // 去掉扩展名
    .replace(/\.\w+$/, '')
    .replace(/-/g, '')
  if (fileName.endsWith('.js')) {
    buttonHandlers.js[name] = () => ctx(/* webpackChunkName: "[request]" */ fileName)
  } else {
    buttonHandlers.vue[name] = () => {
      if (!promisesForVue[name]) {
        // 对于组件的处理，做一次就行了，所以把promise缓存下来
        promisesForVue[name] = ctx(/* webpackChunkName: "[request]" */ fileName).then((module) => {
          module.default.inject = {
            webform: { default: () => {} },
          }
          // 外边多包一层div，避免modal销毁的时候，DOM结构就找不到了
          const render = module.default.render
          module.default.render = function(h, context) {
            return h('div', [render.call(this, h, context)])
          }
          return module
        })
      }
      return promisesForVue[name]
    }
  }
})

export default buttonHandlers
