{"version":3,"file":"instance.mjs","sources":["../../../../../../packages/components/modal/src/instance.ts"],"sourcesContent":["import { VNode, createVNode, render as vueRender } from 'vue'\r\nimport { omit } from 'lodash'\r\nimport { isVNode, isString } from '@sgui-plus/utils/util'\r\nimport ModalVue from './modal.vue'\r\nimport type { ModalFnProps, ModalParams } from './modal'\r\n\r\ntype ModalQueueItem = {\r\n  vm: VNode\r\n  destroy?: any\r\n  update?: any\r\n  resolve?: (res: any) => void\r\n  reject?: (reason?: any) => void\r\n}\r\n\r\nconst instances: ModalQueueItem[] = []\r\n\r\nlet seed = 1\r\n\r\nconst confirm = (config: any, extras?: ModalParams) => {\r\n  if (isString(config) || isVNode(config)) {\r\n    config = { content: config }\r\n  }\r\n\r\n  Object.assign(config, extras)\r\n\r\n  const container = document.createDocumentFragment()\r\n  const id = `modal_${seed++}`\r\n\r\n  let currentConfig = {\r\n    id,\r\n    ...omit(config, ['appContext']),\r\n    modelValue: true,\r\n    transfer: true,\r\n    onOk: () => {\r\n      if (typeof config.onOk === 'function') {\r\n        config.onOk(close)\r\n      }\r\n    },\r\n    onHidden: () => {\r\n      if (typeof config.onHidden === 'function') {\r\n        config.onHidden()\r\n      }\r\n      destroy.apply(typeof close)\r\n    }\r\n  } as ModalFnProps\r\n\r\n  let modalInstance: VNode|null = null\r\n\r\n  function destroy() {\r\n    if (modalInstance) {\r\n      vueRender(null, container as any)\r\n      modalInstance.component?.update()\r\n      modalInstance = null\r\n    }\r\n\r\n    for (let i = 0; i < instances.length; i++) {\r\n      const instance = instances[i]\r\n      if (instance.destroy === close) {\r\n        instances.splice(i, 1)\r\n        break\r\n      }\r\n    }\r\n  }\r\n\r\n  function close() {\r\n    update({ modelValue: false })\r\n  }\r\n\r\n  function update(configUpdate) {\r\n    if (typeof configUpdate === 'function') {\r\n      currentConfig = configUpdate(currentConfig)\r\n    } else {\r\n      currentConfig = {\r\n        ...currentConfig,\r\n        ...configUpdate\r\n      }\r\n    }\r\n    if (modalInstance) {\r\n      // @ts-ignore\r\n      Object.assign(modalInstance.component.props, currentConfig)\r\n      modalInstance.component?.update()\r\n      // $forceUpdate 方法在构建后不可用\r\n      // @ts-ignore\r\n      // modalInstance.component.ctx.$forceUpdate()\r\n    }\r\n  }\r\n\r\n  function Wrapper (props: ModalFnProps) {\r\n    return createVNode(ModalVue, { ...props }, { default: () => props.content })\r\n  }\r\n\r\n  function render(props: ModalFnProps) {\r\n    // const vm = createVNode(ModalVue, { ...props }, { default: () => props.content })\r\n    const vm = createVNode(Wrapper, { ...props })\r\n    vm.appContext = config.appContext || vm.appContext\r\n    vueRender(vm, container as any)\r\n    return vm\r\n  }\r\n\r\n  modalInstance = render(currentConfig)\r\n\r\n  instances.push({ vm: modalInstance, destroy: close, update })\r\n\r\n  return {\r\n    destroy: close,\r\n    update\r\n  }\r\n}\r\n\r\nModalVue.confirm = (options: ModalParams = {}) => {\r\n  return confirm(options, {\r\n    modalType: 'confirm',\r\n    promptType: 'confirm'\r\n  })\r\n}\r\n\r\nModalVue.alert = (options: ModalParams = {}) => {\r\n  return confirm(options, {\r\n    modalType: 'alert',\r\n    showCancel: false\r\n  })\r\n}\r\n\r\nModalVue.info = (options: ModalParams = {}) => {\r\n  return confirm(options, {\r\n    promptType: 'info'\r\n  })\r\n}\r\n\r\nModalVue.success = (options: ModalParams = {}) => {\r\n  return confirm(options, {\r\n    promptType: 'success'\r\n  })\r\n}\r\n\r\nModalVue.warning = (options: ModalParams = {}) => {\r\n  return confirm(options, {\r\n    promptType: 'warning'\r\n  })\r\n}\r\n\r\nModalVue.error = (options: ModalParams = {}) => {\r\n  return confirm(options, {\r\n    promptType: 'error'\r\n  })\r\n}\r\n\r\nModalVue.show = (options = {}) => {\r\n  return confirm(options)\r\n}\r\n\r\nModalVue.remove = (id: string) => {\r\n  if (instances.length === 0) {\r\n    return\r\n  }\r\n\r\n  const index = instances.findIndex(item => item.vm.props?.id === id)\r\n\r\n  if (index < 0) {\r\n    return\r\n  }\r\n\r\n  instances[index].destroy()\r\n}\r\n\r\nModalVue.closeAll = () => {\r\n  for (let i = instances.length - 1; i >= 0; i--) {\r\n    instances[i].destroy()\r\n  }\r\n}\r\n\r\nexport default ModalVue\r\n"],"names":["vueRender","render"],"mappings":"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"}