vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 10.6 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/primitive-collections/primitive-collection/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-09-16 09:28:13\n * @LastEditTime: 2022-03-28 10:04:35\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\primitive-collections\\primitive-collection\\index.ts\n */\nimport type { ExtractPropTypes, PropType, VNode, WatchStopHandle } from 'vue'\nimport { createCommentVNode, defineComponent, getCurrentInstance, h, onUnmounted, watch } from 'vue'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance } from '@vue-cesium/utils/types'\nimport { usePrimitiveCollections } from '@vue-cesium/composables'\nimport { 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 { cloneDeep, differenceBy } from 'lodash-unified'\nimport { PolygonPrimitive } from '@vue-cesium/shared'\nimport { primitiveCollectionEmits } from '@vue-cesium/utils/emits'\nimport { VcPolygonProps } from '../polygon'\n\nexport const primitiveCollectionProps = {\n ...show,\n destroyPrimitives: {\n type: Boolean,\n default: true\n },\n ...enableMouseEvent,\n polygons: {\n type: Array as PropType<Array<VcPolygonProps>>,\n default: () => []\n }\n}\nexport default defineComponent({\n name: 'VcCollectionPrimitive',\n props: primitiveCollectionProps,\n emits: primitiveCollectionEmits,\n setup(props, ctx) {\n // state\n const instance = getCurrentInstance() as VcComponentInternalInstance\n instance.cesiumClass = 'PrimitiveCollection'\n const primitiveCollectionsState = usePrimitiveCollections(props, ctx, instance)\n\n if (primitiveCollectionsState === void 0) {\n return\n }\n\n // watcher\n instance.alreadyListening.push('polygons')\n let unwatchFns: Array<WatchStopHandle> = []\n\n unwatchFns.push(\n watch(\n () => cloneDeep(props.polygons),\n (newVal, oldVal) => {\n if (!instance.mounted) {\n return\n }\n const primitiveCollection = instance.cesiumObject as Cesium.PrimitiveCollection\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 modifyPolygon = primitiveCollection._primitives.find(v => v._id === modify.oldOptions.id)\n modifyPolygon &&\n Object.keys(modify.newOptions).forEach(prop => {\n if (modify.oldOptions[prop] !== modify.newOptions[prop]) {\n modifyPolygon[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 deletePolygons: Array<PolygonPrimitive> = []\n for (let i = 0; i < deletes.length; i++) {\n const deletePolygon = primitiveCollection._primitives.find((v: any) => v.id === deletes[i].id)\n deletePolygon && deletePolygons.push(deletePolygon)\n }\n\n deletePolygons.forEach(v => {\n primitiveCollection.remove(v)\n })\n\n addPolygons(primitiveCollection, addeds)\n }\n },\n {\n deep: true\n }\n )\n )\n\n // methods\n const addPolygons = (primitiveCollection: Cesium.PrimitiveCollection, polygons) => {\n for (let i = 0; i < polygons.length; i++) {\n const polygonOptions = polygons[i] as PolygonPrimitive\n polygonOptions.id = Cesium.defined(polygonOptions.id) ? polygonOptions.id : Cesium.createGuid()\n const polygonOptionsTransform = primitiveCollectionsState.transformProps(polygonOptions)\n const polygonPrimitive = new PolygonPrimitive(polygonOptionsTransform)\n ;(polygonPrimitive as any)._vcParent = primitiveCollection\n addCustomProperty(polygonPrimitive, polygonOptionsTransform)\n primitiveCollection.add(polygonPrimitive)\n }\n }\n\n instance.createCesiumObject = async () => {\n const options = primitiveCollectionsState.transformProps(props)\n const primitiveCollection = new Cesium.PrimitiveCollection(options)\n addPolygons(primitiveCollection, props.polygons)\n return primitiveCollection\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 VcCollectionPrimitiveProps = {\n /**\n * Determines if the primitives in the collection will be shown.\n * Default value: true\n */\n show?: boolean\n /**\n * Determines if primitives in the collection are destroyed when they are removed.\n * Default value: true\n */\n destroyPrimitives?: 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 polygons collections. The structure of the array object is the same as the attribute of the [`vc-polygon`](https://zouyaoji.top/vue-cesium/#/en-US/component/primitives/vc-collection-primitive#vcpolygon-props) component.\n */\n polygons?: Array<VcPolygonProps>\n}\n\nexport type VcCollectionPrimitiveRef = VcComponentPublicInstance<VcCollectionPrimitiveProps>\n\nexport interface VcCollectionPrimitiveSlots {\n /**\n * This is where Primitive content goes.\n */\n default: () => VNode[]\n}\n"],"names":[],"mappings":"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"}