terriajs
Version:
Geospatial data visualization platform.
51 lines (44 loc) • 1.61 kB
text/typescript
import { BaseModel } from "../Definition/Model";
import { observable, action } from "mobx";
import defaultValue from "terriajs-cesium/Source/Core/defaultValue";
import defined from "terriajs-cesium/Source/Core/defined";
import GroupMixin from "../../ModelMixins/GroupMixin";
export interface SearchResultOptions {
name?: string;
tooltip?: string;
isImportant?: boolean;
clickAction?: () => void;
catalogItem?: BaseModel;
location?: { longitude: number; latitude: number };
}
export default class SearchResult {
name: string;
tooltip: string | undefined;
isImportant: boolean;
clickAction: (() => void) | undefined;
catalogItem: BaseModel | undefined;
isOpen = false;
type: string = "search_result";
location: { longitude: number; latitude: number } | undefined;
constructor(options: SearchResultOptions) {
this.name = defaultValue(options.name, "Unknown");
this.tooltip = options.tooltip;
this.isImportant = defaultValue(options.isImportant, false);
this.clickAction = options.clickAction;
this.catalogItem = options.catalogItem;
this.location = options.location;
}
toggleOpen() {
if (!defined(this.catalogItem)) {
return;
}
this.isOpen = !this.isOpen;
// Load this group's items (if we haven't already) when it is opened.
if (this.isOpen && GroupMixin.isMixedInto(this.catalogItem)) {
this.catalogItem
.loadMembers()
.then((result) => result.raiseError(this.catalogItem!.terria));
}
}
}