DeepSeeWeb is an Angular UI layer for IRIS BI (DeepSee) dashboards
Detailed information about map usage can be found here: Map widget
To use old map widget (will be removed in future versions) add oldmap=1
to query parameters.
In DSW version 4.0.13 map widget has been changed:
Note, that new charts looks a bit different, also new font helps with readability. Compare UI of DSW 3.x vs DSW 4.x:
DSW 3.x
DSW 4.x
This is newly rewritten DeepSeeWeb with TypeScript & Angular 10!
Current version is alpha!
Some features of new version:
Now user can clearly see and navigate to dashboards via breadcrumbs, changing namespace, etc.
Query parameter “ns” for namespace was gone. Now url constructed by following rule
“/namespace/folder/folder/…/dashboard.dashboard”,
eg. http://mysite.com/dsw/#/IRISAPP/Test/Countries.dashboard
Now user can easly see options available for each screen and change settings
This features will be implemented soon and are to be included in RC
zpm "install dsw"
You can set your endpoint and namespace in an appropriate file config.json located in the root directory
Sometimes after installation you can see umlyauts in the client. like in the shot:
To fix this there are tow ways:
Or:
zw ^%SYS("CSP","DefaultFileCharset")
This setting should be “utf-8”. If there is another setting, save it somewhere and change to “utf-8”
So this should fix it:
set ^%SYS("CSP","DefaultFileCharset")="utf-8"
Widgets can be embedded in other pages. Easiest way to embed a widget is to navigate to the widget, set it into a desired state, press RMB to open context menu and press Share
button. It would show a url for embedding.
Embedded URL is generated as follows. Start with a dashboard URL and add required widget
parameter. Optionally add other URL parameters. All parameter values MUST be URL escaped. Available parameters are:
Name | Value | Value, escaped | Description |
---|---|---|---|
widget | 1 | 1 | Which widget from the dashboard to show (in order of widget definition). |
FILTERS | TARGET:*;FILTER:[period].[H1].[period].&[10\] |
TARGET:*;FILTER:[period].[H1].[period].%26[104] |
Filters to use. Follows InterSystems BI FILTERS url parameter. |
variables | variable1.value1 variable1.value1~variable2.XYZ |
variable1.value1 variable1.value1~variable2.XYZ |
Provide pivot variable values. Variables are separated by ~ . Variable and value are separated by . . |
drilldown | level1 level1~level2 [regionD].[H1].[regionL].&[23]~[regionD].[H1].[rayonL].&[56043] |
level1 level1~level2 [regionD].[H1].[regionL].%26[23]~[regionD].[H1].[rayonL].%26[56043] |
Drilldown on a widget. Drilldown levels are separated by ~ . |
noheader | 1 |
1 |
Do not display header information. Defaults to 0 . |
datasource | map/weights.pivot |
map%2Fweights.pivot |
What datasource to use for widget. |
Embedded widgets interact with a parent in two ways:
dsw
object for shared widgets:// Define dsw object in a parent window using this interface: export interface IDSW { onFilter: (e: IWidgetEvent) => void; onDrill: (e: IWidgetEvent) => void; } // Widget event export interface IWidgetEvent { index: number; widget: IWidgetInfo; drills?: IWidgetDrill[]; filters?: string; }
// Example:
window.dsw = {
onDrill: (data) => {
// handle drill event here
},
onFilter: (data) => {
// handle filter event here
}
}
// Extended interface for widget event export interface IWidgetEvent { type: WidgetEventType; index: number; widget: IWidgetInfo; drills?: IWidgetDrill[]; filters?: string; datasource?: string; }
// Example listener in parent
window.addEventListener('message', e => {
const event = e.data as IWidgetEvent;
switch (event.type) {
case 'drill':
// code ...
break;
case 'filter':
// code ...
break;
case 'datasource':
// code ...
break;
}
});
// hide map controls, assuming widget in iframe element
iframe.postMessage({ type: 'map.applyStyle', selector: '.ol-control', style: 'display', value:'none' });
disableContextMenu=1
data property to disable DSW context menu on any widget. Also, context menu can be disabled on shared widget by passing url parameter disableContextMenu=1
Map can show polygons or markers depending on data source.
If data contains latitude/longitude fields map will display markers, otherwise polygons are shown.
Without setting GeoJSON file, will use bundled /assets/countries.json
file with world countries.
To create a map widget you’ll need:
/assets/countries.json
file by default if no custom file exists on server. For default mode ignore step 2.map
and name equal to the GeoJSON file. For default mode name doesn’t matter.polygonFile
data property with value equal to file name of polygons file.Map widget can work with following data sources:
Simple data variant 1.
Keys(name of a country) defined as Axis 2, Axis 1 contain numeric value
Simple data variant 2.
Axis 1 contains pairs [country-name, value]
, Axis 2 can hold anything
Complex data
Markers data. Data with latitude/longitude fields
In this mode map will display simple data.
Axis 2 must contains countries names and Axis 1 contains numeric values:
Example:
Axis 1: “Count”
Axis 2: “Iceland”, “Madagascar”, “Venezuela”
Iceland | 12 |
Madagascar | 15 |
Venezuela | 10 |
Axis 1 contains pairs [country-name, value]
, Axis 2 can hold anything.
Example:
Axis 1: “Name”, “Count”
Axis 2: “Id 1”, “Id 2”, “Id 3”
Id 1 | Iceland | 12 |
Id 2 | Madagascar | 15 |
Id 3 | Venezuela | 10 |
In this mode map can use any data source to display polygons. But some fields must exists in data source to be able to link data with polygons and display colors.
Required fields:
name
property.You can use field with different names as well. In this case use key
/value
data properties and define field names as values of these properties respectively.
Example 1:
Custom1 | Key | Value | Custom2 | |
---|---|---|---|---|
Id 1 | 10 | Iceland | 12 | test1 |
Id 2 | 20 | Madagascar | 15 | test2 |
Id 3 | 30 | Venezuela | 10 | test3 |
Example 2:
Custom1 | Field33 | Field44 | Custom2 | |
---|---|---|---|---|
Id 1 | 10 | Iceland | 12 | test1 |
Id 2 | 20 | Madagascar | 15 | test2 |
Id 3 | 30 | Venezuela | 10 | test3 |
Data property key
= “Field33”, data property value
= “Field44”
Map can display markers(pins) on coordinates specified in data.
Widget data source, must contain fields Latitude
/Longitude
in EPSG:4326 projection.
You can use field with different names as well. In this case use latitude
/longitude
data properties and define field names as values of these properties respectively.
Other fields can hold any data. This data will be displayed in a marker tooltip:
Example 1:
Revenue | Latitude | Units Sold | Longitude | |
---|---|---|---|---|
Id 1 | 1032.32 | 51.53 | 12 | 4.86 |
Id 2 | 2045.46 | 52.35 | 15 | -122.09 |
Id 3 | 5630.12 | 47.67 | 10 | -76.59 |
Example 2:
Revenue | Lat | Units Sold | Lon | |
---|---|---|---|---|
Id 1 | 1032.32 | 51.53 | 12 | 4.86 |
Id 2 | 2045.46 | 52.35 | 15 | -122.09 |
Id 3 | 5630.12 | 47.67 | 10 | -76.59 |
Data property latitude
= “Lat”, data property longitude
= “Lon”
Map supports following data properties, that can be used for customization:
Data Property | Type | Description | Value | Default |
---|---|---|---|---|
key | dataproperty | Define custom name of key field. Value from this field used to link data to GeoJSON polygon name property |
Datasource column name | “Key” |
value | dataproperty | Define custom name of value field. Value from this field used to calculate color of polygon | Datasource column name | “Value” |
tileUrl | dataproperty | Tile server URL | https://tile-c.openstreetmap.fr/hot/{z}/{x}/{y}.png | |
polygonFile | dataproperty | File name with a JS or GeoJSON polygons. Requested from the root of a default web app for a namespace | Path with filename | Widget name |
latitude | dataproperty | Define custom name of latitude field. Used for marker mode | Datasource column name | “Latitude” |
longitude | dataproperty | Define custom name of longitude field. Used for marker mode | Datasource column name | “Longitude” |
tooltip | dataproperty | Define name of field with custom tooltip text. Tooltip appears when user’s cursor hovers over a polygon or marker. | Datasource column name | “TooltipValue” |
coordsJsFile | deprecated | Use polygonFile instead |
||
tooltipProperty | deprecated | Use tooltip instead |
Datasource column name | Row name |
coordsProperty | deprecated | Use key instead |
Datasource column name | |
colorProperty | deprecated | Use value instead |
No longer supported:
Data Property | Type | Description | Value | Default |
---|---|---|---|---|
popupProperty | deprecated | Define custom popup. Tooltip appears when user’s cursor presses LMB on a polygon and there’s no DRILLDOWN. | Datasource column name | Row name |
colorFormula | deprecated | Formula used to calculate polygon color. | hsl((255-x)/255 * 120, 100%, 50%) rgb(x, 255-x, 0) |
|
polygonTitleProperty | deprecated | Define custom polygon title | Datasource column name | |
markerPopupContentProperty | deprecated | Deprecated by a popupProperty dataproperty | ||
colorClientProperty | deprecated | Deprecated by a colorProperty dataproperty |
DeepSeeWeb allows modification of exist widgets and custom widget registration as well.
For base widget class methods and properties description please read Addons.
To setup custom widget simply copy widget js file to /addons
folder.
For custom widget example, please look at https://github.com/intersystems-community/DeepSeeWeb/blob/master/src/factories/customWidget.js. This is simple custom widget that represents html5 canvas for drawing.
User can create or use custom themes, more about it here: Custom themes.
Though DeepSeeWeb source goes with MIT License it uses hicharts.js for visualisation of several widgets so please obey the Highcharts license when use DeepSeeWeb for commercial applications.
According to Highcharts license it’s free for non-commercial usage
At least NodeJS v16.14.0 required to build application.
npm i
dist
folder will contain built appHere is the article on InterSystems Developer Community describing DSW features and capabilites.