{"version":3,"file":"index.mjs","sources":["../../../../../packages/composables/use-common/index.ts"],"sourcesContent":["import type { VcReadyObject, VcComponentInternalInstance, VcComponentPublicInstance, VcMittEvents, VcViewerProvider } from 'casc-cesium-utils/types'\nimport { inject, onUnmounted, WatchStopHandle } from 'vue'\nimport mitt, { Emitter } from 'mitt'\nimport { getObjClassName, isEmptyObj, isFunction, removeEmpty } from 'casc-cesium-utils/util'\nimport { mergeDescriptors } from 'casc-cesium-utils/merge-descriptors'\nimport { getVcParentInstance } from 'casc-cesium-utils/private/vm'\nimport * as cesiumProps from 'casc-cesium-utils/cesium-props'\nimport { vcKey } from 'casc-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.proxy as VcComponentPublicInstance }\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\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          emit('destroyed', vcInstance)\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.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":[],"mappings":"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"}