{"version":3,"file":"index.mjs","sources":["../../../../../packages/composables/use-datasources/index.ts"],"sourcesContent":["import { VcComponentInternalInstance } from 'casc-cesium-utils/types'\nimport useCommon from '../use-common'\nimport { mergeDescriptors } from 'casc-cesium-utils/merge-descriptors'\nimport { onUnmounted, provide, watch, WatchStopHandle } from 'vue'\nimport { vcKey } from 'casc-cesium-utils/config'\nimport { cloneDeep, differenceBy } from 'lodash-unified'\nimport { addCustomProperty } from 'casc-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":";;;;;;;AAMe,uBAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE;AAChD,EAAE,UAAU,CAAC,YAAY,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AAC3E,EAAE,IAAI,UAAU,CAAC,WAAW,KAAK,eAAe,EAAE;AAClD,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACjD,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACzD,GAAG;AACH,EAAE,UAAU,CAAC,mBAAmB,GAAG;AACnC,IAAI;AACJ,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,MAAM,EAAE,CAAC,mBAAmB,CAAC;AACnC,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,YAAY;AACxB,MAAM,MAAM,EAAE,CAAC,cAAc,CAAC;AAC9B,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,UAAU;AACtB,MAAM,MAAM,EAAE,CAAC,mBAAmB,CAAC;AACnC,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AACxD,EAAE,IAAI,WAAW,KAAK,KAAK,CAAC,EAAE;AAC9B,IAAI,OAAO;AACX,GAAG;AACH,EAAE,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/C,EAAE,IAAI,UAAU,GAAG,EAAE,CAAC;AACtB,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK;AAC7E,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC7B,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC;AAC/C,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;AACzC,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC1B,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;AACpE,UAAU,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAY,UAAU,EAAE,OAAO;AAC/B,YAAY,UAAU;AACtB,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO;AACP,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC9B,QAAQ,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE;AACjD,UAAU,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACtE,YAAY,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC3D,cAAc,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,aAAa;AACb,WAAW,CAAC,CAAC;AACb,SAAS,MAAM;AACf,UAAU,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACnD,UAAU,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC;AAC7C,UAAU,WAAW,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACnD,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACxD,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,EAAE,CAAC;AACjC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,QAAQ,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,QAAQ,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3C,OAAO;AACP,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACrC,QAAQ,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtC,OAAO,CAAC,CAAC;AACT,MAAM,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACtC,KAAK;AACL,GAAG,EAAE;AACL,IAAI,IAAI,EAAE,IAAI;AACd,GAAG,CAAC,CAAC,CAAC;AACN,EAAE,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,QAAQ,KAAK;AAChD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxC,MAAM,MAAM,sBAAsB,GAAG,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAC/E,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACrE,MAAM,aAAa,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACvE,MAAM,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AACxD,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,UAAU,CAAC,KAAK,GAAG,YAAY;AACjC,IAAI,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;AAC1D,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC;AAC/C,IAAI,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACjC,IAAI,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5C,IAAI,OAAO,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM;AAClD,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,UAAU,CAAC,OAAO,GAAG,YAAY;AACnC,IAAI,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;AAC1D,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC;AAC/C,IAAI,OAAO,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACxE,GAAG,CAAC;AACJ,EAAE,MAAM,WAAW,GAAG,MAAM;AAC5B,IAAI,OAAO,gBAAgB,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;AACvD,MAAM,IAAI,UAAU,GAAG;AACvB,QAAQ,OAAO,UAAU,CAAC,YAAY,CAAC;AACvC,OAAO;AACP,MAAM,IAAI,QAAQ,GAAG;AACrB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,YAAY,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;AAC7E,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,WAAW,CAAC,MAAM;AACpB,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AACzC,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAChC,EAAE,OAAO;AACT,IAAI,cAAc,EAAE,WAAW,CAAC,cAAc;AAC9C,IAAI,UAAU,EAAE,WAAW,CAAC,UAAU;AACtC,IAAI,eAAe,EAAE,WAAW,CAAC,eAAe;AAChD,GAAG,CAAC;AACJ;;;;"}