{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/primitive-collections/polyline-collection/index.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType, VNode, WatchStopHandle } from 'vue'\nimport { createCommentVNode, defineComponent, getCurrentInstance, h, onUnmounted, watch } from 'vue'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance, VcPickEvent, VcReadyObject } from '@vue-cesium/utils/types'\nimport { usePrimitiveCollections } from '@vue-cesium/composables'\nimport { cloneDeep, differenceBy } from 'lodash-unified'\nimport { modelMatrix, debugShowBoundingVolume, show, enableMouseEvent } from '@vue-cesium/utils/cesium-props'\nimport { addCustomProperty, kebabCase } from '@vue-cesium/utils/util'\nimport { hSlot } from '@vue-cesium/utils/private/render'\nimport { primitiveCollectionEmits } from '@vue-cesium/utils/emits'\nimport { VcPolylineProps } from '../polyline'\n\nconst polylineCollectionProps = {\n  ...modelMatrix,\n  ...debugShowBoundingVolume,\n  ...show,\n  ...enableMouseEvent,\n  polylines: {\n    type: Array as PropType<Array<VcPolylineProps>>,\n    default: () => []\n  }\n}\nexport default defineComponent({\n  name: 'VcCollectionPolyline',\n  props: polylineCollectionProps,\n  emits: primitiveCollectionEmits,\n  setup(props, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'PolylineCollection'\n    const primitiveCollectionsState = usePrimitiveCollections(props, ctx, instance)\n\n    if (primitiveCollectionsState === void 0) {\n      return\n    }\n    // watcher\n    instance.alreadyListening.push('polylines')\n    let unwatchFns: Array<WatchStopHandle> = []\n    unwatchFns.push(\n      watch(\n        () => cloneDeep(props.polylines),\n        (newVal, oldVal) => {\n          if (!instance.mounted) {\n            return\n          }\n          const polylineCollection = instance.cesiumObject as Cesium.PolylineCollection\n\n          if (newVal.length === oldVal.length) {\n            // 视为修改操作\n            // Treated as modified\n            const modifies: Array<any> = []\n            for (let i = 0; i < newVal.length; i++) {\n              const options = newVal[i]\n              const oldOptions = oldVal[i]\n\n              if (JSON.stringify(options) !== JSON.stringify(oldOptions)) {\n                modifies.push({\n                  newOptions: options,\n                  oldOptions: oldOptions\n                })\n              }\n            }\n\n            modifies.forEach(modify => {\n              const modifyPolyline = polylineCollection._polylines.find(v => v.id === modify.oldOptions.id)\n              modifyPolyline &&\n                Object.keys(modify.newOptions).forEach(prop => {\n                  if (modify.oldOptions[prop] !== modify.newOptions[prop]) {\n                    modifyPolyline[prop] = primitiveCollectionsState.transformProp(prop, modify.newOptions[prop])\n                  }\n                })\n            })\n          } else {\n            const addeds: any = differenceBy(newVal, oldVal, 'id')\n            const deletes: any = differenceBy(oldVal, newVal, 'id')\n            const deletePolylines: Array<Cesium.Polyline> = []\n            for (let i = 0; i < deletes.length; i++) {\n              const deletePolyline = polylineCollection._polylines.find(v => v.id === deletes[i].id)\n              deletePolyline && deletePolylines.push(deletePolyline)\n            }\n\n            deletePolylines.forEach(v => {\n              polylineCollection.remove(v)\n            })\n\n            addPolylines(polylineCollection, addeds)\n          }\n        },\n        {\n          deep: true\n        }\n      )\n    )\n    // methods\n    const addPolylines = (polylineCollection: Cesium.PolylineCollection, polylines) => {\n      for (let i = 0; i < polylines.length; i++) {\n        const polylineOptions = polylines[i] as Cesium.Polyline\n        polylineOptions.id = Cesium.defined(polylineOptions.id) ? polylineOptions.id : Cesium.createGuid()\n        const polylineOptionsTransform = primitiveCollectionsState.transformProps(polylineOptions)\n        const polyline = polylineCollection.add(polylineOptionsTransform)\n        addCustomProperty(polyline, polylineOptionsTransform)\n      }\n    }\n    instance.createCesiumObject = async () => {\n      const options = primitiveCollectionsState.transformProps(props)\n      const polylineCollection = new Cesium.PolylineCollection(options)\n\n      addPolylines(polylineCollection, props.polylines)\n      return polylineCollection\n    }\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    })\n\n    const name = instance.proxy?.$options.name || ''\n    return () =>\n      ctx.slots.default\n        ? h(\n            'i',\n            {\n              class: kebabCase(name),\n              style: { display: 'none !important' }\n            },\n            hSlot(ctx.slots.default)\n          )\n        : createCommentVNode(kebabCase(name))\n  }\n})\n\nexport type VcCollectionPolylineProps = {\n  /**\n   * Determines if the polylines in the collection will be shown.\n   * Default Value: true\n   */\n  show?: boolean\n  /**\n   * The 4x4 transformation matrix that transforms each polyline from model to world coordinates.\n   */\n  modelMatrix?: Cesium.Matrix4\n  /**\n   * For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n   * Default Value: false\n   */\n  debugShowBoundingVolume?: boolean\n  /**\n   * Specifies whether to respond to mouse pick events.\n   * Default Value: true\n   */\n  enableMouseEvent?: boolean\n  /**\n   * Specify an array of polylines collections. The structure of the array object is the same as the attribute of the [`vc-polyline`](https://zouyaoji.top/vue-cesium/#/en-US/component/primitives/vc-collection-polyline#vcpolyline-props) component.\n   */\n  polylines?: Array<VcPolylineProps>\n  /**\n   * Triggers before the VcCollectionPolyline is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcCollectionPolyline is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcCollectionPolyline is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the mouse is pressed on this collection.\n   */\n  onMousedown?: (evt: VcPickEvent) => void\n  /**\n   * Triggers when the mouse bounces up on this collection.\n   */\n  onMouseup?: (evt: VcPickEvent) => void\n  /**\n   * Triggers when the mouse clicks on this collection.\n   */\n  onClick?: (evt: VcPickEvent) => void\n  /**\n   * Triggers when the mouse clicks outside this collection.\n   */\n  onClickout?: (evt: VcPickEvent) => void\n  /**\n   * Triggers when the left mouse button double-clicks this collection.\n   */\n  onDblclick?: (evt: VcPickEvent) => void\n  /**\n   * Triggers when the mouse moves on this collection.\n   */\n  onMousemove?: (evt: VcPickEvent) => void\n  /**\n   * Triggers when the mouse moves over to this collection.\n   */\n  onMouseover?: (evt: VcPickEvent) => void\n  /**\n   * Triggers when the mouse moves out of this collection.\n   */\n  onMouseout?: (evt: VcPickEvent) => void\n}\n\nexport type VcCollectionPolylineRef = VcComponentPublicInstance<VcCollectionPolylineProps>\n\nexport interface VcCollectionPolylineSlots {\n  /**\n   * Slot for vc-polyline.\n   */\n  default: () => VNode[]\n}\n"],"names":[],"mappings":"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"}