{"version":3,"file":"index.mjs","sources":["../../../../../packages/composables/use-common/index.ts"],"sourcesContent":["import type { VcReadyObject, VcComponentInternalInstance, VcComponentPublicInstance, VcMittEvents, VcViewerProvider } from '@vue-cesium/utils/types'\nimport { inject, onBeforeUnmount, onUnmounted, WatchStopHandle } from 'vue'\nimport mitt, { Emitter } from 'mitt'\nimport { getObjClassName, isEmptyObj, isFunction } from '@vue-cesium/utils/util'\nimport { mergeDescriptors } from '@vue-cesium/utils/merge-descriptors'\nimport { getVcParentInstance } from '@vue-cesium/utils/private/vm'\nimport * as cesiumProps from '@vue-cesium/utils/cesium-props'\nimport { vcKey } from '@vue-cesium/utils/config'\nimport useLog from '../private/use-log'\nimport { useLocale } from '../use-locale'\nimport useEvents from '../use-events'\nimport { isEqual } from 'lodash-unified'\nimport useTimeout from '../private/use-timeout'\nimport { useGlobalConfig } from '../use-global-config'\n\nconst callbackCmpNames = ['Graphics', 'VcEntity', 'Datasource', 'VcOverlayDynamic']\n\nexport default function (props, { emit, attrs }, vcInstance: VcComponentInternalInstance) {\n  const logger = useLog(vcInstance)\n  const { registerTimeout, removeTimeout } = useTimeout()\n  // state\n  vcInstance.alreadyListening = []\n  vcInstance.removeCallbacks = []\n  let unwatchFns: Array<WatchStopHandle> = []\n  vcInstance.mounted = false\n  const vcMitt: Emitter<VcMittEvents> = mitt()\n  vcInstance.vcMitt = vcMitt\n  const $services = inject<VcViewerProvider>(vcKey)\n  const { t } = useLocale()\n\n  if ($services === void 0) {\n    console.error(`${vcInstance.cesiumClass} ${t('vc.loadError')}`)\n    return\n  }\n\n  const parentVcInstance = getVcParentInstance(vcInstance)\n  const eventsState = useEvents(props, vcInstance, logger)\n  vcInstance.children = []\n\n  const entityGraphics = {\n    billboard: true,\n    box: true,\n    corridor: true,\n    cylinder: true,\n    ellipse: true,\n    ellipsoid: true,\n    label: true,\n    model: true,\n    tileset: true,\n    path: true,\n    plane: true,\n    point: true,\n    polygon: true,\n    polyline: true,\n    polylineVolume: true,\n    rectangle: true,\n    wall: true\n  }\n\n  const globalConfig = useGlobalConfig()\n  // methods\n  const beforeLoad = async () => {\n    emit('beforeLoad', vcInstance)\n\n    if (parentVcInstance.nowaiting) {\n      return true\n    } else {\n      await (parentVcInstance.proxy as VcComponentPublicInstance).creatingPromise\n    }\n  }\n\n  const load = async () => {\n    // Returns if it is already loaded. 如果已经加载则返回。\n    if (vcInstance.mounted) {\n      return false\n    }\n\n    logger.debug(`${vcInstance.cesiumClass}---loading`)\n\n    await beforeLoad()\n\n    const { Cesium, viewer } = $services\n    vcInstance.viewer = viewer\n    vcInstance.Cesium = Cesium\n\n    // If you call the unload method to unload the component, the Cesium object of the parent component may be unloaded. You need to load the parent component first.\n    // 如果调用过 unload 方法卸载组件，父组件的 Cesium 对象可能会被卸载 需要先加载父组件。\n    if (!parentVcInstance.cesiumObject && !parentVcInstance.nowaiting) {\n      return await (parentVcInstance.proxy as VcComponentPublicInstance)?.load()\n    }\n\n    setPropsWatcher(true)\n\n    return createCesiumObject().then(async cesiumObject => {\n      vcInstance.cesiumObject = cesiumObject\n      // Load the created Cesium object. 加载创建的 Cesium 对象。\n      return mount().then((): VcReadyObject => {\n        vcInstance.mounted = true\n        parentVcInstance.children.push(vcInstance)\n        Object.assign(vcInstance.proxy, {\n          cesiumObject: vcInstance.cesiumObject\n        })\n        // Trigger the component's 'ready' event. 触发该组件的 'ready' 事件。\n        const readyObj: VcReadyObject = { Cesium, viewer, cesiumObject, vm: vcInstance }\n        emit('ready', readyObj)\n        vcMitt.emit('ready', readyObj)\n        logger.debug(`${vcInstance.cesiumClass}---loaded`)\n        return readyObj\n      })\n    })\n  }\n\n  const beforeUnload = async () => {\n    await vcInstance.unloadingPromise\n  }\n\n  // eslint-disable-next-line arrow-parens\n  const unload = async () => {\n    await beforeUnload()\n\n    // If the component has subcomponents, you need to remove the subcomponents first. 如果该组件带有子组件，需要先移除子组件。\n    for (let i = 0; i < vcInstance.children.length; i++) {\n      const vcChildCmp = vcInstance.children[i].proxy as VcComponentPublicInstance\n      await vcChildCmp.unload()\n    }\n\n    vcInstance.children.length = 0\n    // ensure custom events can be emitted after unmount.\n    // https://github.com/vuejs/core/issues/5674\n    vcInstance.isUnmounted = false\n    return vcInstance.mounted\n      ? unmount().then(async () => {\n          setPropsWatcher(false)\n          vcInstance.cesiumObject = undefined\n          vcInstance.mounted = false\n          vcInstance.removeCallbacks.forEach(removeCallback => {\n            removeCallback()\n          })\n\n          emit('destroyed', vcInstance)\n          vcMitt.emit('destroyed', vcInstance)\n\n          logger.debug(`${vcInstance.cesiumClass}---unmounted`)\n\n          // If the component cannot be rendered without the parent component, the parent component needs to be removed.\n          // 如果该组件的渲染和父组件是绑定在一起的，需要移除父组件。\n          return vcInstance.renderByParent && !vcInstance.unloadingPromise ? (parentVcInstance.proxy as VcComponentPublicInstance).unload() : true\n        })\n      : false\n  }\n  const beforeReload = async () => {\n    await vcInstance.reloadingPromise\n  }\n\n  const reload = async () => {\n    await beforeReload()\n\n    return unload().then(() => {\n      return load()\n    })\n  }\n\n  const mount = async () => {\n    eventsState.registerEvents(true)\n    return vcInstance.mount?.() || true\n  }\n\n  const unmount = async () => {\n    eventsState.registerEvents(false)\n    return vcInstance.unmount?.() || true\n  }\n\n  const createCesiumObject = async () => {\n    logger.debug('do createCesiumObject')\n    if (isFunction(vcInstance.createCesiumObject)) {\n      return vcInstance.createCesiumObject()\n    } else {\n      const options = transformProps(props)\n      return new Cesium[vcInstance.cesiumClass](options)\n    }\n  }\n\n  const deepWatchHandler = (vueProp, watcherOptions) => {\n    let deep = watcherOptions?.deep\n    const {\n      SampledPositionProperty,\n      Appearance,\n      DebugAppearance,\n      MaterialAppearance,\n      PolylineColorAppearance,\n      EllipsoidSurfaceAppearance,\n      PerInstanceColorAppearance,\n      PolylineMaterialAppearance\n    } = Cesium\n\n    if (vueProp === 'position') {\n      // position 要排除 SampledPositionProperty 不然会卡死\n      deep = !((vcInstance.proxy as any)[vueProp] instanceof SampledPositionProperty)\n    } else if (vueProp === 'appearance' || vueProp === 'depthFailAppearance') {\n      // appearance 要排除 Cesium 的类型 不然会卡死\n      const value = (vcInstance.proxy as any)[vueProp]\n      deep = !(\n        value instanceof Appearance ||\n        value instanceof DebugAppearance ||\n        value instanceof MaterialAppearance ||\n        value instanceof PolylineColorAppearance ||\n        value instanceof EllipsoidSurfaceAppearance ||\n        value instanceof PerInstanceColorAppearance ||\n        value instanceof PolylineMaterialAppearance ||\n        getObjClassName(value as any).indexOf('Appearance') !== -1\n      )\n    }\n\n    return deep\n  }\n\n  const setPropsWatcher = register => {\n    if (register) {\n      if (!vcInstance.cesiumClass || !Cesium[vcInstance.cesiumClass]) {\n        return\n      }\n\n      props &&\n        Object.keys(props).forEach(vueProp => {\n          let cesiumProp = vueProp\n          if (vueProp === 'labelStyle' || vueProp === 'wmtsStyle') {\n            cesiumProp = 'style'\n          } else if (vueProp === 'bmKey') {\n            cesiumProp = 'key'\n          }\n          // 如果在vue文件中已经监听了该 prop 这儿不再监听了\n          // If you have listened to the props in the vue file, you will not add any more listeners here.\n          if (vcInstance.proxy?.$options.watch?.[vueProp] || vcInstance.alreadyListening.indexOf(vueProp) !== -1) {\n            return\n          }\n\n          const watcherOptions = vcInstance.proxy?.$options.props[vueProp]?.watcherOptions\n          // returns an unwatch function that stops firing the callback\n          const unwatch = vcInstance.proxy?.$watch(\n            vueProp,\n            async (val, oldVal) => {\n              // Wait for child components to be created.\n              // 等待子组件创建完成。否则在父组件的 `ready` 事件中就改变的属性将不起作用。\n              await (vcInstance.proxy as VcComponentPublicInstance).creatingPromise\n              const { cesiumObject } = vcInstance\n              // Get the writability of the current cesiumobject or the props on its prototype chain to\n              // detect whether the component property responds dynamically or reloads the component when the property changes.\n              // 通过 cesiumObject 对象或它原型链上的 prop 的可写性，以检测属性改变时组件属性是动态响应还是重载组件。\n              const pd = cesiumObject && Object.getOwnPropertyDescriptor(cesiumObject, cesiumProp)\n              const pdProto = cesiumObject && Object.getOwnPropertyDescriptor(Object.getPrototypeOf(cesiumObject), cesiumProp)\n              const hasSetter = (pd && (pd.writable || pd.set)) || (pdProto && (pdProto.writable || pdProto.set))\n              if (hasSetter) {\n                // Attributes are writable and directly respond to changes in attributes.\n                // 属性可写，直接动态响应属性的改变。\n                if (watcherOptions && watcherOptions.cesiumObjectBuilder) {\n                  const newVal = watcherOptions.cesiumObjectBuilder.call(vcInstance, val, vcInstance.viewer.scene.globe.ellipsoid)\n                  // If an exclude condition has been defined for the object, such as \"_callback\", Cesium will automatically handle it internally and no longer need to be assigned.\n                  // 如果对象已经定义了 exclude 条件，如已经定义了“_callback”，Cesium 内部会自动处理的 不用再赋值了。\n                  if (!(Cesium.defined(cesiumObject[cesiumProp]) && Cesium.defined(cesiumObject[cesiumProp]._callback))) {\n                    cesiumObject[cesiumProp] = newVal\n                  }\n                } else {\n                  cesiumObject[cesiumProp] = transformProp(cesiumProp, val)\n                }\n                return true\n              } else {\n                // The attribute is not writable, and the property is changed indirectly through reloading the component.\n                // 属性不可写，通过重加载组件间接实现改变属性\n                if (!isEqual(val, oldVal) || Array.isArray(val)) {\n                  if (attrs['reload-mode'] === 'once' || attrs['reloadMode'] === 'once' || globalConfig.value.reloadMode === 'once') {\n                    // If multiple component properties are changed at once, reload only once after the last property has been changed.\n                    // 如果一瞬间多个组件属性被改变，只在最后一个属性改变完后 reload 一次。\n                    removeTimeout()\n                    registerTimeout(() => {\n                      ;(vcInstance.proxy as VcComponentPublicInstance).reload()\n                    }, 0)\n                  } else {\n                    // If multiple component properties are changed at once, reload them in sequence.\n                    // 如果一瞬间多个组件属性被改变，只在最后一个属性改变完后 reload 一次。\n                    vcInstance.reloadingPromise = new Promise((resolve, reject) => {\n                      ;(vcInstance.proxy as VcComponentPublicInstance)\n                        .reload()\n                        .then(() => {\n                          resolve(true)\n                        })\n                        .catch(e => {\n                          reject(e)\n                        })\n                    })\n                  }\n                }\n              }\n            },\n            {\n              deep: deepWatchHandler(vueProp, watcherOptions)\n            }\n          )\n          unwatchFns.push(unwatch!)\n        })\n    } else {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    }\n  }\n\n  const transformProps = <T>(props: T, childProps?: any) => {\n    const options: any = {}\n    props &&\n      Object.keys(props).forEach(vueProp => {\n        let cesiumProp = vueProp\n        // The properties of the following Cesium instance objects are HTML or Vue reserved words and require special handling.\n        // 以下 Cesium 实例对象的属性是 HTML 或 Vue 保留字，需要特别处理一下。\n        if (vueProp === 'labelStyle' || vueProp === 'wmtsStyle') {\n          cesiumProp = 'style'\n        } else if (vueProp === 'bmKey') {\n          cesiumProp = 'key'\n        }\n\n        if (props[vueProp] === undefined || props[vueProp] === null) {\n          return\n        }\n\n        const className = getObjClassName(props[vueProp])\n\n        // 由于 Cesium 1.96+ 版本不太好获取 Cesium 的 className 了，太耗时影响性能，干脆注释\n        // className.indexOf('Graphics') === -1 &&\n        // 副作用是：通过实体渲染的 point billboard label 等传原生的 Graphics 对象可能会有问题\n        // 可传扁平对象来避免此问题。\n        if (\n          className &&\n          // className.indexOf('Graphics') === -1 &&\n          entityGraphics[cesiumProp] &&\n          (vcInstance.cesiumClass === 'Entity' || vcInstance.cesiumClass.indexOf('DataSource') > 0 || vcInstance.cesiumClass === 'VcOverlayDynamic')\n        ) {\n          options[cesiumProp] = transformProps(props[vueProp], childProps)\n        } else {\n          options[cesiumProp] = transformProp(vueProp, props[vueProp], childProps)\n        }\n      })\n\n    return options as T\n  }\n\n  const transformProp = (prop, value, childProps?) => {\n    const className = getObjClassName(value)\n    if (\n      className &&\n      // className.indexOf('Graphics') === -1 &&\n      entityGraphics[prop] &&\n      (vcInstance.cesiumClass === 'Entity' || vcInstance.cesiumClass.indexOf('DataSource') > 0 || vcInstance.cesiumClass === 'VcOverlayDynamic')\n    ) {\n      return transformProps(value, childProps)\n    } else {\n      const cmpName = vcInstance.proxy?.$options.name\n      let supportCallbackProperty = false\n      if (isFunction(value) && cmpName) {\n        callbackCmpNames.forEach(v => {\n          if (cmpName.indexOf(v) !== -1) {\n            supportCallbackProperty = true\n          }\n        })\n      }\n      const propOption = vcInstance.proxy?.$options.props[prop] || childProps?.[prop] || (cesiumProps[prop] && cesiumProps[prop][prop])\n      return propOption?.watcherOptions && !isEmptyObj(value)\n        ? propOption.watcherOptions.cesiumObjectBuilder.call(vcInstance, value, vcInstance.viewer.scene.globe.ellipsoid)\n        : supportCallbackProperty\n        ? new Cesium.CallbackProperty(value, false)\n        : value\n    }\n  }\n\n  const getServices = () => {\n    return mergeDescriptors({}, $services || {})\n  }\n\n  // lifecycle\n  const creatingPromise = new Promise<VcReadyObject | boolean>((resolve, reject) => {\n    try {\n      let isLoading = false\n      if ($services.viewer) {\n        isLoading = true\n        load()\n          .then(e => {\n            resolve(e)\n            isLoading = false\n          })\n          .catch(e => {\n            emit('unready', e)\n            reject(e)\n          })\n      }\n      parentVcInstance.vcMitt.on('ready', () => {\n        if (!isLoading && !vcInstance.isUnmounted) {\n          load()\n            .then(e => {\n              resolve(e)\n            })\n            .catch(e => {\n              emit('unready', e)\n              reject(e)\n            })\n        }\n      })\n    } catch (e) {\n      emit('unready', e)\n      reject(e)\n    }\n  })\n  logger.debug(`${vcInstance.cesiumClass}---onCreated`)\n  onUnmounted(() => {\n    logger.debug(`${vcInstance.cesiumClass}---onUnmounted`)\n    vcInstance.unloadingPromise = new Promise((resolve, reject) => {\n      unload().then(() => {\n        logger.debug(`${vcInstance.cesiumClass}---unloaded`)\n        resolve(true)\n        vcInstance.isUnmounted = true\n        vcInstance.unloadingPromise = undefined\n        vcMitt.all.clear()\n      })\n    })\n    vcInstance.alreadyListening = []\n  })\n\n  // expose public methods\n  Object.assign(vcInstance.proxy, {\n    creatingPromise,\n    load,\n    unload,\n    reload,\n    getCreatingPromise: () => creatingPromise,\n    getCesiumObject: () => vcInstance.cesiumObject\n  })\n\n  return {\n    $services,\n    load,\n    unload,\n    reload,\n    creatingPromise,\n    transformProp,\n    transformProps,\n    unwatchFns,\n    setPropsWatcher,\n    logger,\n    getServices\n  }\n}\n"],"names":["Cesium","props"],"mappings":"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"}