import Vue from 'vue';
import { DataChartOptions } from './components/data-chart/data-chart-options';
import { CsMap } from './.';
import { GeojsonLayer } from './layers/geojson-layer';
import { LayerServer } from './services/layer-server';
import { GeojsonPlusLayer } from './layers/geojson-plus-layer';
import { OverpassExtension } from './extensions/overpass-extension';
import { TimeInterpolationExtension } from './extensions/time-interpolation-extension';
import { WmsTimeExtension } from './extensions/wms-time-extension';
import { LayerServerService } from './services/layer-server-service';
import { GridLayer } from './layers/grid-layer';
import { IWidget, guidGenerator } from '@csnext/cs-core';
import { MapOptions } from './classes/map-options';
import { MapboxOptions } from 'mapbox-gl';
import { DataChart } from './components/data-chart/data-chart';
import { CreateElement, VNode } from 'vue/types/umd';
// classes
export * from './classes/map-options';
export * from './classes/layer-sources';
export * from './classes/layer-source';
export * from './classes/layer-service';
export * from './datasources/map-datasource';
export * from './datasources/map-layers';
export * from './datasources/stats-datasource';
export * from './classes/imap-layer';
export * from './classes/ilayer-extension';
export * from './classes/layer-service-options';
export * from './classes/ilayer-action';
export * from './classes/layer-style';
export * from './classes/layer-filter';
export * from './interfaces/source';
export * from './classes/layer-legend';
export * from './classes/map-style-definition';
export * from './services/layer-server-options';
// components
export * from './components/layer-selection/layer-selection';
export * from './components/layer-selection/layer-selection-options';
export * from './components/cs-map/cs-map';
export * from './components/data-chart/data-chart';
export * from './components/data-chart/data-chart-options';
export * from './components/cs-map/feature-event-details';
export * from './components/feature-details/feature-details';
export * from './components/feature-details/property-details';
export * from './components/feature-details/property-section';
export * from './components/feature-details/feature-component';
export * from './components/layer-editor/layer-editor';
export * from './components/data-dashboard/data-dashboard';
export * from './components/data-panel/data-panel';
export * from './components/data-list/data-list';
export * from './components/data-sources/data-sources';
export * from './components/data-properties/data-properties';
export * from './components/data-big-text/data-big-text';
export * from './components/feature-preview/feature-preview';
// layers
export * from './layers/base-layer';
export * from './layers/geojson-layer';
export * from './layers/geojson-plus-layer';
export * from './layers/grid-layer';
// charts
export * from './components/data-chart/data-chart';
export * from './components/data-chart/data-chart-options';
// services
export * from './services/layer-server';
export * from './services/layer-server-service';
export * from './services/layer-server-service-options';
export * from './services/feature-action';
// extensions
export * from './extensions/time-interpolation-extension';
export * from './extensions/wms-time-extension';
// utils
export * from './utils/conversion';
CsMap.AddLayerType(new GeojsonLayer());
CsMap.AddLayerType(new GeojsonPlusLayer());
CsMap.AddLayerType(new GridLayer());
CsMap.AddLayerExtension(new OverpassExtension());
CsMap.AddLayerExtension(new TimeInterpolationExtension());
CsMap.AddLayerExtension(new WmsTimeExtension());
CsMap.AddLayerServiceType(new LayerServer());
CsMap.AddLayerServiceType(new LayerServerService());
Vue.component('prop-value', {
props: ['value', 'proptype', 'showUnit'],
render(createElement): VNode {
switch (this.proptype.type) {
case 'number':
if (this.value) {
let value = this.value.toFixed(this.proptype.decimals || 0);
if (this.showUnit && this.proptype.unit) { value+=' ' + this.proptype.unit; }
return createElement('span', value);
} else {
return createElement('span','');
}
break;
case 'url':
return createElement('a', { attrs: { href: this.value } }, 'link')
default:
return createElement('span', this.value);
}
}
});
Vue.component('date-time-value', {
props: ['value'],
render(createElement): VNode {
if (this.value && $cs.i18n) {
return createElement('span', $cs.i18n.d(this.value));
} else {
return createElement('span','');
}
} //{ attrs: { 'class', '' }}, [value]); }
});
// ' {{ value}} {{ proptype.unit }}';
Vue.component('feature-title', {
props: ['feature', 'layer'],
template: '{{feature.properties.Naam}}'
});
export function DataChartWidget(definition: IWidget = {}, options?: DataChartOptions): IWidget {
const widget = {
...{
id: guidGenerator(),
component: DataChart,
options: {} as DataChartOptions
}, ...definition
};
if (options) {
widget.options = { ...widget.options, ...options };
}
return widget;
}
export function MapWidget(definition: IWidget = {}, token: string, options?: MapOptions): IWidget {
const widget = {
...{
id: guidGenerator(),
component: CsMap,
options: {
token,
mbOptions: {
style: 'mapbox://styles/mapbox/light-v10',
center: [4.799119, 52.478137],
zoom: 13,
logoPosition: 'bottom-right'
} as MapboxOptions,
showDraw: false,
showRuler: false,
showBuildings: false,
showGrid: false,
showStyles: true,
showGeocoder: false,
showTraffic: false,
showLegend: true,
showLayers: true,
showLayersWidget: true
} as MapOptions, ...definition
}
};
if (options) {
widget.options = { ...widget.options, ...options };
}
return widget;
}