Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ Change Log
* Provide a fallback name for an `ArcGisServerCatalogItem`
* Ensure `CesiumTileLayer.getTileUrl` returns a string.
* Adds methods `removeModelReferences` to Terria & ViewState for unregistering and removing models from different parts of the UI.
* Add basic support for various error provider services, implementing support for Rollbar.
* Add trait to enabling hiding legends for a `CatalogMember` in the workbench.
* Added new help menu item on how to navigate 3d data
* Add traits to customize color blending and highlight color for `Cesium3DTilesCatalogItem`
Expand Down
29 changes: 29 additions & 0 deletions lib/Models/RollbarErrorProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import isDefined from "../Core/isDefined";
import Terria from "./Terria";
import Rollbar from "rollbar";

interface RollbarErrorProviderOptions {
terria: Terria;
}

export default class RollbarErrorProvider {
terria: Terria;
errorProvider: any;

constructor(options: RollbarErrorProviderOptions) {
this.terria = options.terria;

if (!isDefined(this.terria.configParameters.rollbarAccessToken)) {
console.log(
"A rollbarAccessToken must be configured in the config.json to use the rollbar error provider"
);
return;
}
this.errorProvider = new Rollbar({
accessToken: this.terria.configParameters.rollbarAccessToken,
captureUncaught: true,
captureUnhandledRejections: true,
enabled: process.env.NODE_ENV === "production"
});
}
}
4 changes: 3 additions & 1 deletion lib/Models/Terria.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ interface ConfigParameters {
magdaReferenceHeaders?: MagdaReferenceHeaders;
locationSearchBoundingBox?: number[];
googleAnalyticsKey?: string;
rollbarAccessToken?: string;
}

interface StartOptions {
Expand Down Expand Up @@ -191,7 +192,8 @@ export default class Terria {
experimentalFeatures: undefined,
magdaReferenceHeaders: undefined,
locationSearchBoundingBox: undefined,
googleAnalyticsKey: undefined
googleAnalyticsKey: undefined,
rollbarAccessToken: undefined
};

@observable
Expand Down
6 changes: 6 additions & 0 deletions lib/ReactViewModels/ViewState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ interface ViewStateOptions {
terria: Terria;
catalogSearchProvider: any;
locationSearchProviders: any[];
errorHandlingProvider?: any;
}

/**
Expand Down Expand Up @@ -65,6 +66,8 @@ export default class ViewState {

@observable workbenchWithOpenControls: string | undefined = undefined;

errorProvider: any | null = null;

// default value is null, because user has not made decision to show or
// not show story
// will be explicitly set to false when user 1. dismiss story
Expand Down Expand Up @@ -128,6 +131,9 @@ export default class ViewState {
locationSearchProviders: options.locationSearchProviders
});

this.errorProvider = options.errorHandlingProvider
? options.errorHandlingProvider
: null;
this.terria = terria;

// Show errors to the user as notifications.
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@
"react-transition-group": "^4.3.0",
"resolve-url-loader": "^3.0.1",
"retry": "^0.12.0",
"rollbar": "^2.15.0",
"sass-loader": "^7.1.0",
"simple-statistics": "^7.0.1",
"string-replace-loader": "^2.1.1",
Expand Down
16 changes: 16 additions & 0 deletions test/ReactViewModels/ViewStateSpec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Terria from "../../lib/Models/Terria";
import ViewState from "../../lib/ReactViewModels/ViewState";
import RollbarErrorProvider from "../../lib/Models/RollbarErrorProvider";
import SimpleCatalogItem from "../Helpers/SimpleCatalogItem";

describe("ViewState", function() {
Expand Down Expand Up @@ -30,4 +31,19 @@ describe("ViewState", function() {
expect(viewState.userDataPreviewedItem).toBeUndefined();
});
});

describe("error provider", function() {
it("creates an empty error provider by default", function() {
expect(viewState.errorProvider).toBeNull();
});

it("can create an error provider with rollbar", function() {
terria.configParameters.rollbarAccessToken = "123";
viewState.errorProvider = new RollbarErrorProvider({
terria: viewState.terria
});
expect(viewState.errorProvider).toBeDefined();
expect(viewState.errorProvider.errorProvider).toBeDefined();
});
});
});