import React from 'react';
import * as ReactDOM from 'react-dom';
import { DEFAULT_CONFIG } from './config';
import FlowMap from './FlowMap';
import { ConfigPropName, Flow, Location } from './types';
import MapContainer from './MapContainer';
import { AppToaster, ColorScheme, Fallback } from './index';
import { Router } from 'react-router-dom';
import { createBrowserHistory } from 'history';
import '@blueprintjs/core/lib/css/blueprint.css';
import '@blueprintjs/select/lib/css/blueprint-select.css';
import '@blueprintjs/icons/lib/css/blueprint-icons.css';
import 'mapbox-gl/dist/mapbox-gl.css';
import { css, Global } from '@emotion/core';
import { Classes, Colors, FocusStyleManager } from '@blueprintjs/core';
FocusStyleManager.onlyShowFocusOnTabs();
const history = createBrowserHistory();
const globalStyles = css`
@import url("https://fonts.googleapis.com/css?family=Sarabun:400,700");
html,
body,
button,
select {
margin: 0;
background-color: ${'#2d3a4c'};
font-size: 13pt;
}
body, * {
font-family: 'Sarabun', sans-serif;
}
a,
a:visited {
color: ${ColorScheme.primary};
}
.${Classes.DARK} {
a,
a:visited {
color: ${Colors.BLUE5};
}
}
.mapboxgl-control-container {
a,
a:visited {
color: ${Colors.DARK_GRAY1};
}
}
section {
margin-bottom: 4em;
}
#no-token-warning {
bottom: 30px;
top: unset !important;
left: 10px !important;
}
`;
class ErrorBoundary extends React.Component<{}, {}> {
state = {hasError: false, error: null};
static getDerivedStateFromError(error: any) {
return {
hasError: true,
error
};
}
componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
console.error(error);
}
render() {
if (this.state.hasError) {
const { error } = this.state;
return (
<>
Oops… Sorry, but something went wrong.
{error && (
{JSON.stringify(error)}
)}
>
);
}
return this.props.children;
}
}
export function init(
{
locations,
flows,
container,
mapboxAccessToken,
clustering = true,
animation = false,
darkMode = false,
}: {
locations: Location[],
flows: Flow[],
container: HTMLElement,
mapboxAccessToken?: string,
clustering?: boolean,
animation?: boolean,
darkMode?: boolean,
},
) {
AppToaster.init(container);
ReactDOM.render(
,
container
);
}