UNPKG

terriajs

Version:

Geospatial data visualization platform.

85 lines 3.94 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { action, computed, isObservableArray, makeObservable, observable } from "mobx"; import DeveloperError from "terriajs-cesium/Source/Core/DeveloperError"; import RuntimeError from "terriajs-cesium/Source/Core/RuntimeError"; import Result from "../../Core/Result"; import TerriaError from "../../Core/TerriaError"; import LocationSearchProviderMixin from "../../ModelMixins/SearchProviders/LocationSearchProviderMixin"; import { SearchBarTraits } from "../../Traits/SearchProviders/SearchBarTraits"; import CommonStrata from "../Definition/CommonStrata"; import CreateModel from "../Definition/CreateModel"; import updateModelFromJson from "../Definition/updateModelFromJson"; import SearchProviderFactory from "./SearchProviderFactory"; import upsertSearchProviderFromJson from "./upsertSearchProviderFromJson"; export class SearchBarModel extends CreateModel(SearchBarTraits) { terria; locationSearchProviders = observable.map(); catalogSearchProvider; constructor(terria) { super("search-bar-model", terria); this.terria = terria; makeObservable(this); } updateModelConfig(config) { if (config) { updateModelFromJson(this, CommonStrata.definition, config); } return this; } initializeSearchProviders(searchProviders) { const errors = []; if (!isObservableArray(searchProviders)) { errors.push(new TerriaError({ sender: SearchProviderFactory, title: "SearchProviders", message: { key: "searchProvider.noSearchProviders" } })); } searchProviders?.forEach((searchProvider) => { const loadedModel = upsertSearchProviderFromJson(SearchProviderFactory, this.terria, CommonStrata.definition, searchProvider).pushErrorTo(errors); if (LocationSearchProviderMixin.isMixedInto(loadedModel)) { loadedModel.showWarning(); } }); return new Result(undefined, TerriaError.combine(errors, "An error occurred while loading search providers")); } /** * Add new SearchProvider to the list of SearchProviders. */ addSearchProvider(model) { if (model.uniqueId === undefined) { throw new DeveloperError("A SearchProvider without a `uniqueId` cannot be added."); } if (this.locationSearchProviders.has(model.uniqueId)) { throw new RuntimeError("A SearchProvider with the specified ID already exists."); } if (!LocationSearchProviderMixin.isMixedInto(model)) { throw new RuntimeError("SearchProvider must be a LocationSearchProvider."); } this.locationSearchProviders.set(model.uniqueId, model); } get locationSearchProvidersArray() { return [...this.locationSearchProviders.entries()] .filter((entry) => { return LocationSearchProviderMixin.isMixedInto(entry[1]); }) .map(function (entry) { return entry[1]; }); } } __decorate([ observable ], SearchBarModel.prototype, "catalogSearchProvider", void 0); __decorate([ action ], SearchBarModel.prototype, "addSearchProvider", null); __decorate([ computed ], SearchBarModel.prototype, "locationSearchProvidersArray", null); //# sourceMappingURL=SearchBarModel.js.map