{"version":3,"file":"index.mjs","sources":["../../../../../packages/composables/use-datasources/index.ts"],"sourcesContent":["import { VcComponentInternalInstance } from '@vue-cesium/utils/types'\nimport useCommon from '../use-common'\nimport { mergeDescriptors } from '@vue-cesium/utils/merge-descriptors'\nimport { onUnmounted, provide, watch, WatchStopHandle } from 'vue'\nimport { vcKey } from '@vue-cesium/utils/config'\nimport { cloneDeep, differenceBy } from 'lodash-unified'\nimport { addCustomProperty } from '@vue-cesium/utils/util'\n\nexport default function (props, ctx, vcInstance: VcComponentInternalInstance) {\n  // state\n  vcInstance.cesiumEvents = ['changedEvent', 'errorEvent', 'loadingEvent']\n  if (vcInstance.cesiumClass === 'KmlDataSource') {\n    vcInstance.cesiumEvents.push('refreshEvent')\n    vcInstance.cesiumEvents.push('unsupportedNodeEvent')\n  }\n  vcInstance.cesiumMembersEvents = [\n    {\n      name: 'clock',\n      events: ['definitionChanged']\n    },\n    {\n      name: 'clustering',\n      events: ['clusterEvent']\n    },\n    {\n      name: 'entities',\n      events: ['collectionChanged']\n    }\n  ]\n  const commonState = useCommon(props, ctx, vcInstance)\n\n  if (commonState === void 0) {\n    return\n  }\n  // watcher\n  vcInstance.alreadyListening.push('entities')\n  let unwatchFns: Array<WatchStopHandle> = []\n  unwatchFns.push(\n    watch(\n      () => cloneDeep(props.entities),\n      (newVal, oldVal) => {\n        if (!vcInstance.mounted) {\n          return\n        }\n        const datasource = vcInstance.cesiumObject as Cesium.DataSource\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(v => {\n            const modifyEntity = datasource.entities.getById(v.oldOptions.id)\n            if (v.oldOptions.id === v.newOptions.id) {\n              modifyEntity &&\n                Object.keys(v.newOptions).forEach(prop => {\n                  if (v.oldOptions[prop] !== v.newOptions[prop]) {\n                    modifyEntity[prop] = commonState.transformProp(prop, v.newOptions[prop])\n                  }\n                })\n            } else {\n              // 改了 id\n              datasource.entities.remove(modifyEntity!)\n              const entityOptions = v.newOptions\n              addEntities(datasource, [entityOptions])\n            }\n          })\n        } else {\n          const addeds: any = differenceBy(newVal, oldVal, 'id')\n          const deletes: any = differenceBy(oldVal, newVal, 'id')\n          const deletedEntities: Array<Cesium.Entity> = []\n          for (let i = 0; i < deletes.length; i++) {\n            const deleteEntity = datasource.entities.getById(deletes[i].id)\n            deletedEntities.push(deleteEntity!)\n          }\n\n          deletedEntities.forEach(v => {\n            datasource.entities.remove(v)\n          })\n          addEntities(datasource, addeds)\n        }\n      },\n      {\n        deep: true\n      }\n    )\n  )\n  // methods\n  const addEntities = (datasource, entities) => {\n    for (let i = 0; i < entities.length; i++) {\n      const entityOptions = entities[i]\n      const entityOptionsTransform = commonState.transformProps(entityOptions)\n      const entity = datasource.entities.add(entityOptionsTransform)\n      entityOptions.id !== entity.id && (entityOptions.id = entity.id)\n      addCustomProperty(entity, entityOptionsTransform)\n    }\n  }\n\n  vcInstance.mount = async () => {\n    const dataSources = commonState.$services.dataSources\n    const datasource = vcInstance.cesiumObject as Cesium.DataSource\n    datasource.show = props.show\n    addEntities(datasource, props.entities)\n    return dataSources.add(datasource).then(() => {\n      return true\n    })\n  }\n  vcInstance.unmount = async () => {\n    const dataSources = commonState.$services.dataSources\n    const datasource = vcInstance.cesiumObject as Cesium.DataSource\n    return dataSources && dataSources.remove(datasource, props.destroy)\n  }\n\n  const getServices = () => {\n    return mergeDescriptors(commonState.getServices(), {\n      get datasource() {\n        return vcInstance.cesiumObject as Cesium.DataSource\n      },\n      get entities() {\n        return (vcInstance.cesiumObject as Cesium.DataSource)?.entities\n      }\n    })\n  }\n\n  // life cycle\n  onUnmounted(() => {\n    unwatchFns.forEach(item => item())\n    unwatchFns = []\n  })\n\n  // provide\n  provide(vcKey, getServices())\n\n  return {\n    transformProps: commonState.transformProps,\n    unwatchFns: commonState.unwatchFns,\n    setPropsWatcher: commonState.setPropsWatcher\n  }\n}\n"],"names":[],"mappings":"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"}