@mwater/visualization 5.5.0 → 5.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/lib/ColorComponent.js +2 -2
  2. package/lib/MWaterContextComponent.d.ts +1 -1
  3. package/lib/MWaterGlobalFiltersComponent.d.ts +2 -2
  4. package/lib/MWaterGlobalFiltersComponent.js +11 -20
  5. package/lib/MWaterLoaderComponent.d.ts +4 -13
  6. package/lib/MWaterLoaderComponent.js +2 -11
  7. package/lib/TranslationsTabComponent.d.ts +34 -0
  8. package/lib/TranslationsTabComponent.js +256 -0
  9. package/lib/UndoStack.d.ts +2 -1
  10. package/lib/UndoStack.js +12 -6
  11. package/lib/dashboards/DashboardComponent.js +6 -5
  12. package/lib/dashboards/DashboardDesign.d.ts +1 -1
  13. package/lib/dashboards/ServerDashboardDataSource.d.ts +0 -1
  14. package/lib/dashboards/ServerDashboardDataSource.js +0 -25
  15. package/lib/dashboards/SettingsModalComponent.js +9 -233
  16. package/lib/datagrids/DatagridComponent.js +27 -2
  17. package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -3
  18. package/lib/datagrids/DatagridDesignerComponent.js +108 -120
  19. package/lib/datagrids/DatagridViewComponent.js +33 -6
  20. package/lib/datagrids/OrderBysDesignerComponent.d.ts +7 -7
  21. package/lib/datagrids/OrderBysDesignerComponent.js +19 -28
  22. package/lib/index.css +45 -2
  23. package/lib/index.d.ts +5 -5
  24. package/lib/index.js +2 -3
  25. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +8 -1
  26. package/lib/layouts/blocks/BlocksDisplayComponent.js +46 -4
  27. package/lib/maps/BufferLayer.d.ts +0 -13
  28. package/lib/maps/BufferLayer.js +24 -237
  29. package/lib/maps/BufferLayerDesign.d.ts +1 -1
  30. package/lib/maps/BufferLayerDesignerComponent.d.ts +1 -1
  31. package/lib/maps/BufferLayerDesignerComponent.js +2 -7
  32. package/lib/maps/ChoroplethLayer.d.ts +1 -16
  33. package/lib/maps/ChoroplethLayer.js +25 -358
  34. package/lib/maps/ChoroplethLayerDesign.d.ts +5 -2
  35. package/lib/maps/ChoroplethLayerDesigner.d.ts +10 -32
  36. package/lib/maps/ChoroplethLayerDesigner.js +58 -89
  37. package/lib/maps/ClusterLayer.d.ts +0 -9
  38. package/lib/maps/ClusterLayer.js +0 -250
  39. package/lib/maps/DirectMapDataSource.js +1 -48
  40. package/lib/maps/EditHoverOver.d.ts +4 -3
  41. package/lib/maps/EditHoverOver.js +3 -3
  42. package/lib/maps/GridLayer.d.ts +0 -15
  43. package/lib/maps/GridLayer.js +0 -212
  44. package/lib/maps/HoverContent.js +1 -1
  45. package/lib/maps/Layer.d.ts +1 -26
  46. package/lib/maps/Layer.js +0 -13
  47. package/lib/maps/LeafletMapComponent.js +10 -19
  48. package/lib/maps/MapComponent.d.ts +19 -35
  49. package/lib/maps/MapComponent.js +135 -77
  50. package/lib/maps/MapControlComponent.d.ts +4 -5
  51. package/lib/maps/MapControlComponent.js +5 -12
  52. package/lib/maps/MapDesign.d.ts +8 -0
  53. package/lib/maps/MapDesignerComponent.d.ts +2 -0
  54. package/lib/maps/MapDesignerComponent.js +7 -2
  55. package/lib/maps/MapLayerDataSource.d.ts +0 -4
  56. package/lib/maps/MapLayerViewDesignerComponent.d.ts +3 -1
  57. package/lib/maps/MapLayerViewDesignerComponent.js +5 -1
  58. package/lib/maps/MapLayersDesignerComponent.d.ts +2 -0
  59. package/lib/maps/MapLayersDesignerComponent.js +2 -1
  60. package/lib/maps/MapTranslationsTab.d.ts +15 -0
  61. package/lib/maps/MapTranslationsTab.js +47 -0
  62. package/lib/maps/MapUtils.d.ts +11 -0
  63. package/lib/maps/MapUtils.js +57 -1
  64. package/lib/maps/MapViewComponent.d.ts +1 -1
  65. package/lib/maps/MapViewComponent.js +1 -8
  66. package/lib/maps/MarkersLayer.d.ts +1 -14
  67. package/lib/maps/MarkersLayer.js +89 -254
  68. package/lib/maps/MarkersLayerDesign.d.ts +5 -1
  69. package/lib/maps/MarkersLayerDesignerComponent.d.ts +32 -57
  70. package/lib/maps/MarkersLayerDesignerComponent.js +158 -134
  71. package/lib/maps/ServerMapDataSource.d.ts +0 -1
  72. package/lib/maps/ServerMapDataSource.js +0 -25
  73. package/lib/maps/SwitchableTileUrlLayer.d.ts +0 -2
  74. package/lib/maps/SwitchableTileUrlLayer.js +0 -9
  75. package/lib/maps/TileUrlLayer.d.ts +0 -1
  76. package/lib/maps/TileUrlLayer.js +0 -5
  77. package/lib/maps/VectorMapViewComponent.js +13 -10
  78. package/lib/maps/symbols/font-awesome/asterisk.png +0 -0
  79. package/lib/maps/symbols/font-awesome/ban.png +0 -0
  80. package/lib/maps/symbols/font-awesome/beer.png +0 -0
  81. package/lib/maps/symbols/font-awesome/bell.png +0 -0
  82. package/lib/maps/symbols/font-awesome/bolt.png +0 -0
  83. package/lib/maps/symbols/font-awesome/building.png +0 -0
  84. package/lib/maps/symbols/font-awesome/bullseye.png +0 -0
  85. package/lib/maps/symbols/font-awesome/bus.png +0 -0
  86. package/lib/maps/symbols/font-awesome/caret-up.png +0 -0
  87. package/lib/maps/symbols/font-awesome/certificate.png +0 -0
  88. package/lib/maps/symbols/font-awesome/check-circle.png +0 -0
  89. package/lib/maps/symbols/font-awesome/check.png +0 -0
  90. package/lib/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  91. package/lib/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  92. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  93. package/lib/maps/symbols/font-awesome/cloud.png +0 -0
  94. package/lib/maps/symbols/font-awesome/comment.png +0 -0
  95. package/lib/maps/symbols/font-awesome/crosshairs.png +0 -0
  96. package/lib/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  97. package/lib/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  98. package/lib/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  99. package/lib/maps/symbols/font-awesome/female.png +0 -0
  100. package/lib/maps/symbols/font-awesome/file.png +0 -0
  101. package/lib/maps/symbols/font-awesome/flag.png +0 -0
  102. package/lib/maps/symbols/font-awesome/flask.png +0 -0
  103. package/lib/maps/symbols/font-awesome/h-square.png +0 -0
  104. package/lib/maps/symbols/font-awesome/home.png +0 -0
  105. package/lib/maps/symbols/font-awesome/info-circle.png +0 -0
  106. package/lib/maps/symbols/font-awesome/male.png +0 -0
  107. package/lib/maps/symbols/font-awesome/medkit.png +0 -0
  108. package/lib/maps/symbols/font-awesome/mobile.png +0 -0
  109. package/lib/maps/symbols/font-awesome/plus-circle.png +0 -0
  110. package/lib/maps/symbols/font-awesome/plus-square.png +0 -0
  111. package/lib/maps/symbols/font-awesome/plus.png +0 -0
  112. package/lib/maps/symbols/font-awesome/square.png +0 -0
  113. package/lib/maps/symbols/font-awesome/star.png +0 -0
  114. package/lib/maps/symbols/font-awesome/thumbs-down.png +0 -0
  115. package/lib/maps/symbols/font-awesome/thumbs-up.png +0 -0
  116. package/lib/maps/symbols/font-awesome/ticket.png +0 -0
  117. package/lib/maps/symbols/font-awesome/times-circle.png +0 -0
  118. package/lib/maps/symbols/font-awesome/times.png +0 -0
  119. package/lib/maps/symbols/font-awesome/tint.png +0 -0
  120. package/lib/maps/symbols/font-awesome/tree.png +0 -0
  121. package/lib/maps/symbols/font-awesome/university.png +0 -0
  122. package/lib/maps/symbols/font-awesome/usd.png +0 -0
  123. package/lib/maps/symbols/font-awesome/user.png +0 -0
  124. package/lib/maps/symbols/font-awesome/users.png +0 -0
  125. package/lib/maps/symbols/font-awesome/wheelchair.png +0 -0
  126. package/lib/maps/symbols/sdf-ize.sh +93 -0
  127. package/lib/maps/vectorMaps.d.ts +6 -6
  128. package/lib/maps/vectorMaps.js +33 -45
  129. package/lib/mwater_table_selection/IndicatorsListComponent.d.ts +4 -2
  130. package/lib/mwater_table_selection/IndicatorsListComponent.js +103 -34
  131. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.d.ts +18 -0
  132. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.js +80 -0
  133. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.d.ts +26 -0
  134. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.js +237 -51
  135. package/lib/mwater_table_selection/MWaterTableSelectComponent.d.ts +2 -2
  136. package/lib/mwater_table_selection/MWaterTableSelectComponent.js +9 -4
  137. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.d.ts +19 -0
  138. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.js +111 -0
  139. package/lib/quickfilter/QuickfiltersComponent.d.ts +3 -102
  140. package/lib/quickfilter/QuickfiltersComponent.js +53 -110
  141. package/lib/quickfilter/TextLiteralComponent.d.ts +23 -47
  142. package/lib/quickfilter/TextLiteralComponent.js +85 -82
  143. package/lib/widgets/MapWidget.js +6 -3
  144. package/lib/widgets/text/ExprItemEditorComponent.d.ts +3 -8
  145. package/lib/widgets/text/ExprItemEditorComponent.js +36 -33
  146. package/lib/widgets/text/ExprUpdateModalComponent.d.ts +1 -0
  147. package/package.json +3 -4
  148. package/src/ColorComponent.tsx +2 -2
  149. package/src/MWaterContextComponent.tsx +1 -1
  150. package/src/{MWaterGlobalFiltersComponent.ts → MWaterGlobalFiltersComponent.tsx} +32 -33
  151. package/src/{MWaterLoaderComponent.ts → MWaterLoaderComponent.tsx} +17 -18
  152. package/src/TranslationsTabComponent.tsx +429 -0
  153. package/src/UndoStack.ts +14 -6
  154. package/src/dashboards/DashboardComponent.tsx +6 -5
  155. package/src/dashboards/DashboardDesign.ts +1 -1
  156. package/src/dashboards/ServerDashboardDataSource.ts +0 -31
  157. package/src/dashboards/SettingsModalComponent.tsx +27 -383
  158. package/src/datagrids/DatagridComponent.tsx +36 -2
  159. package/src/datagrids/DatagridDesignerComponent.tsx +241 -229
  160. package/src/datagrids/DatagridViewComponent.tsx +44 -7
  161. package/src/datagrids/OrderBysDesignerComponent.tsx +61 -70
  162. package/src/index.css +45 -2
  163. package/src/index.ts +5 -11
  164. package/src/layouts/blocks/BlocksDisplayComponent.tsx +60 -5
  165. package/src/maps/BufferLayer.ts +30 -263
  166. package/src/maps/BufferLayerDesign.ts +1 -1
  167. package/src/maps/BufferLayerDesignerComponent.tsx +2 -7
  168. package/src/maps/ChoroplethLayer.ts +30 -394
  169. package/src/maps/ChoroplethLayerDesign.ts +5 -2
  170. package/src/maps/ChoroplethLayerDesigner.tsx +169 -165
  171. package/src/maps/ClusterLayer.ts +0 -274
  172. package/src/maps/DirectMapDataSource.ts +2 -61
  173. package/src/maps/EditHoverOver.tsx +9 -5
  174. package/src/maps/GridLayer.ts +0 -224
  175. package/src/maps/HoverContent.tsx +1 -1
  176. package/src/maps/Layer.ts +1 -35
  177. package/src/maps/LeafletMapComponent.tsx +10 -19
  178. package/src/maps/MapComponent.tsx +448 -0
  179. package/src/maps/MapControlComponent.tsx +41 -0
  180. package/src/maps/MapDesign.ts +6 -0
  181. package/src/maps/MapDesignerComponent.tsx +18 -1
  182. package/src/maps/MapLayerDataSource.ts +0 -5
  183. package/src/maps/MapLayerViewDesignerComponent.ts +9 -2
  184. package/src/maps/MapLayersDesignerComponent.ts +4 -1
  185. package/src/maps/MapTranslationsTab.tsx +53 -0
  186. package/src/maps/MapUtils.ts +61 -1
  187. package/src/maps/MapViewComponent.tsx +2 -8
  188. package/src/maps/MarkersLayer.ts +101 -275
  189. package/src/maps/MarkersLayerDesign.ts +7 -1
  190. package/src/maps/MarkersLayerDesignerComponent.tsx +436 -0
  191. package/src/maps/ServerMapDataSource.ts +0 -31
  192. package/src/maps/SwitchableTileUrlLayer.tsx +0 -11
  193. package/src/maps/TileUrlLayer.tsx +0 -6
  194. package/src/maps/VectorMapViewComponent.tsx +15 -15
  195. package/src/maps/symbols/font-awesome/asterisk.png +0 -0
  196. package/src/maps/symbols/font-awesome/ban.png +0 -0
  197. package/src/maps/symbols/font-awesome/beer.png +0 -0
  198. package/src/maps/symbols/font-awesome/bell.png +0 -0
  199. package/src/maps/symbols/font-awesome/bolt.png +0 -0
  200. package/src/maps/symbols/font-awesome/building.png +0 -0
  201. package/src/maps/symbols/font-awesome/bullseye.png +0 -0
  202. package/src/maps/symbols/font-awesome/bus.png +0 -0
  203. package/src/maps/symbols/font-awesome/caret-up.png +0 -0
  204. package/src/maps/symbols/font-awesome/certificate.png +0 -0
  205. package/src/maps/symbols/font-awesome/check-circle.png +0 -0
  206. package/src/maps/symbols/font-awesome/check.png +0 -0
  207. package/src/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  208. package/src/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  209. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  210. package/src/maps/symbols/font-awesome/cloud.png +0 -0
  211. package/src/maps/symbols/font-awesome/comment.png +0 -0
  212. package/src/maps/symbols/font-awesome/crosshairs.png +0 -0
  213. package/src/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  214. package/src/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  215. package/src/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  216. package/src/maps/symbols/font-awesome/female.png +0 -0
  217. package/src/maps/symbols/font-awesome/file.png +0 -0
  218. package/src/maps/symbols/font-awesome/flag.png +0 -0
  219. package/src/maps/symbols/font-awesome/flask.png +0 -0
  220. package/src/maps/symbols/font-awesome/h-square.png +0 -0
  221. package/src/maps/symbols/font-awesome/home.png +0 -0
  222. package/src/maps/symbols/font-awesome/info-circle.png +0 -0
  223. package/src/maps/symbols/font-awesome/male.png +0 -0
  224. package/src/maps/symbols/font-awesome/medkit.png +0 -0
  225. package/src/maps/symbols/font-awesome/mobile.png +0 -0
  226. package/src/maps/symbols/font-awesome/plus-circle.png +0 -0
  227. package/src/maps/symbols/font-awesome/plus-square.png +0 -0
  228. package/src/maps/symbols/font-awesome/plus.png +0 -0
  229. package/src/maps/symbols/font-awesome/square.png +0 -0
  230. package/src/maps/symbols/font-awesome/star.png +0 -0
  231. package/src/maps/symbols/font-awesome/thumbs-down.png +0 -0
  232. package/src/maps/symbols/font-awesome/thumbs-up.png +0 -0
  233. package/src/maps/symbols/font-awesome/ticket.png +0 -0
  234. package/src/maps/symbols/font-awesome/times-circle.png +0 -0
  235. package/src/maps/symbols/font-awesome/times.png +0 -0
  236. package/src/maps/symbols/font-awesome/tint.png +0 -0
  237. package/src/maps/symbols/font-awesome/tree.png +0 -0
  238. package/src/maps/symbols/font-awesome/university.png +0 -0
  239. package/src/maps/symbols/font-awesome/usd.png +0 -0
  240. package/src/maps/symbols/font-awesome/user.png +0 -0
  241. package/src/maps/symbols/font-awesome/users.png +0 -0
  242. package/src/maps/symbols/font-awesome/wheelchair.png +0 -0
  243. package/src/maps/symbols/sdf-ize.sh +93 -0
  244. package/src/maps/vectorMaps.tsx +32 -53
  245. package/src/mwater_table_selection/IndicatorsListComponent.tsx +165 -37
  246. package/src/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.tsx +111 -0
  247. package/src/mwater_table_selection/MWaterCompleteTableSelectComponent.tsx +373 -37
  248. package/src/mwater_table_selection/MWaterTableSelectComponent.tsx +12 -8
  249. package/src/mwater_table_selection/MWaterWorkflowsSelectComponent.tsx +159 -0
  250. package/src/quickfilter/{QuickfiltersComponent.ts → QuickfiltersComponent.tsx} +165 -158
  251. package/src/quickfilter/TextLiteralComponent.tsx +197 -0
  252. package/src/widgets/MapWidget.tsx +11 -1
  253. package/src/widgets/text/ExprItemEditorComponent.tsx +83 -77
  254. package/src/widgets/text/ExprUpdateModalComponent.tsx +1 -0
  255. package/test/UndoStackTests.ts +52 -1
  256. package/.storybook/config.js +0 -7
  257. package/.storybook/head.html +0 -3
  258. package/.storybook/webpack.config.js +0 -15
  259. package/src/maps/BingLayer.ts +0 -146
  260. package/src/maps/MapComponent.ts +0 -312
  261. package/src/maps/MapControlComponent.ts +0 -46
  262. package/src/maps/MarkersLayerDesignerComponent.ts +0 -374
  263. package/src/maps/RasterMapViewComponent.ts +0 -345
  264. package/src/quickfilter/TextLiteralComponent.ts +0 -165
  265. package/stories/UpdateableComponent.js +0 -29
  266. package/stories/consoles.js +0 -202
  267. package/stories/dashboards.js +0 -217
  268. package/stories/datagridDesign.js +0 -114
  269. package/stories/datagrids.js +0 -69
  270. package/stories/dates.js +0 -80
  271. package/stories/exprcomponent.js +0 -43
  272. package/stories/index.js +0 -18
  273. package/stories/leaflet.js +0 -59
  274. package/stories/maps.js +0 -24
  275. package/stories/pivotChart.js +0 -235
@@ -1,9 +1,8 @@
1
1
  import PropTypes from "prop-types"
2
2
  import _ from "lodash"
3
3
  import React from "react"
4
- const R = React.createElement
5
4
 
6
- import { DataSource, ExprUtils, Schema } from "@mwater/expressions"
5
+ import { DataSource, ExprUtils, ExprValidator, Schema } from "@mwater/expressions"
7
6
  import { ExprComponent } from "@mwater/expressions-ui"
8
7
  import { TableSelectComponent } from "@mwater/expressions-ui"
9
8
  import { getFormatOptions } from "../../valueFormatter"
@@ -20,6 +19,7 @@ export interface ExprItemEditorComponentProps {
20
19
  exprItem: HtmlItemExpr
21
20
  /** Called with expr item */
22
21
  onChange: (exprItem: HtmlItemExpr) => void
22
+ /** Optional table that will be filtered to have a single row present. Widget designer should optionally account for this */
23
23
  singleRowTable?: string
24
24
  }
25
25
 
@@ -80,85 +80,91 @@ export default class ExprItemEditorComponent extends React.Component<
80
80
  return null
81
81
  }
82
82
 
83
- return R(
84
- "div",
85
- { className: "mb-3" },
86
- R("label", { className: "text-muted" }, T`Format`),
87
- ": ",
88
- R(
89
- "select",
90
- {
91
- value: this.props.exprItem.format != null ? this.props.exprItem.format : getDefaultFormat(exprType),
92
- className: "form-select",
93
- style: { width: "auto", display: "inline-block" },
94
- onChange: this.handleFormatChange
95
- },
96
- _.map(formats, (format) => R("option", { key: format.value, value: format.value }, format.label))
97
- )
83
+ return (
84
+ <div className="mb-3">
85
+ <label className="text-muted">{T`Format`}</label>
86
+ {": "}
87
+ <select
88
+ value={this.props.exprItem.format != null ? this.props.exprItem.format : getDefaultFormat(exprType)}
89
+ className="form-select"
90
+ style={{ width: "auto", display: "inline-block" }}
91
+ onChange={this.handleFormatChange}
92
+ >
93
+ {_.map(formats, (format) => <option key={format.value} value={format.value}>{format.label}</option>)}
94
+ </select>
95
+ </div>
98
96
  )
99
97
  }
100
98
 
101
99
  render() {
102
- return R(
103
- "div",
104
- { style: { paddingBottom: 200 } },
105
- R(
106
- "div",
107
- { className: "mb-3" },
108
- R("label", { className: "text-muted" }, R("i", { className: "fa fa-database" }), " ", T`Data Source`),
109
- ": ",
110
- R(TableSelectComponent, {
111
- schema: this.props.schema,
112
- value: this.state.table,
113
- onChange: this.handleTableChange
114
- }),
115
- R("br")
116
- ),
117
-
118
- this.state.table
119
- ? R(
120
- "div",
121
- { className: "mb-3" },
122
- R("label", { className: "text-muted" }, T`Field`),
123
- ": ",
124
- R(ExprComponent, {
125
- schema: this.props.schema,
126
- dataSource: this.props.dataSource,
127
- table: this.state.table,
128
- types: ["text", "number", "enum", "date", "datetime", "boolean", "enumset", "geometry"],
129
- value: this.props.exprItem.expr,
130
- aggrStatuses: ["individual", "literal", "aggregate"],
131
- onChange: this.handleExprChange
132
- })
133
- )
134
- : undefined,
135
-
136
- this.state.table && this.props.exprItem.expr
137
- ? R(
138
- "div",
139
- { className: "mb-3" },
140
- <Checkbox
141
- key="includeLabel"
142
- value={this.props.exprItem.includeLabel}
143
- onChange={this.handleIncludeLabelChange}
144
- >
145
- {T`Include Label`}
146
- </Checkbox>,
147
-
148
- this.props.exprItem.includeLabel
149
- ? R("input", {
150
- key: "labelText",
151
- className: "form-control",
152
- type: "text",
153
- value: this.props.exprItem.labelText || "",
154
- onChange: this.handleLabelTextChange,
155
- placeholder: new ExprUtils(this.props.schema).summarizeExpr(this.props.exprItem.expr) + ": "
156
- })
157
- : undefined
158
- )
159
- : undefined,
160
-
161
- this.renderFormat()
100
+ const exprValidator = new ExprValidator(this.props.schema)
101
+ const error = exprValidator.validateExpr(this.props.exprItem.expr, {
102
+ table: this.state.table,
103
+ aggrStatuses: ["individual", "literal", "aggregate"]
104
+ })
105
+
106
+ return (
107
+ <div style={{ paddingBottom: 200 }}>
108
+ <div className="mb-3">
109
+ <label className="text-muted"><i className="fa fa-database" /> {T`Data Source`}</label>
110
+ {": "}
111
+ <TableSelectComponent
112
+ schema={this.props.schema}
113
+ value={this.state.table}
114
+ onChange={this.handleTableChange}
115
+ />
116
+ <br />
117
+ </div>
118
+
119
+ {this.state.table
120
+ ? (
121
+ <div className="mb-3">
122
+ <label className="text-muted">{T`Field`}</label>
123
+ {": "}
124
+ <ExprComponent
125
+ schema={this.props.schema}
126
+ dataSource={this.props.dataSource}
127
+ table={this.state.table}
128
+ types={["text", "number", "enum", "date", "datetime", "boolean", "enumset", "geometry"]}
129
+ value={this.props.exprItem.expr}
130
+ aggrStatuses={["individual", "literal", "aggregate"]}
131
+ onChange={this.handleExprChange}
132
+ />
133
+ </div>
134
+ )
135
+ : undefined}
136
+
137
+ {error ? <div className="alert alert-danger">
138
+ <i className="fa fa-exclamation-circle" /> {error}
139
+ </div> : undefined}
140
+
141
+ {this.state.table && this.props.exprItem.expr
142
+ ? (
143
+ <div className="mb-3">
144
+ <Checkbox
145
+ key="includeLabel"
146
+ value={this.props.exprItem.includeLabel}
147
+ onChange={this.handleIncludeLabelChange}
148
+ >
149
+ {T`Include Label`}
150
+ </Checkbox>
151
+
152
+ {this.props.exprItem.includeLabel
153
+ ? <input
154
+ key="labelText"
155
+ className="form-control"
156
+ type="text"
157
+ value={this.props.exprItem.labelText || ""}
158
+ onChange={this.handleLabelTextChange}
159
+ placeholder={new ExprUtils(this.props.schema).summarizeExpr(this.props.exprItem.expr) + ": "}
160
+ />
161
+ : undefined}
162
+ </div>
163
+ )
164
+ : undefined}
165
+
166
+ {this.renderFormat()}
167
+ </div>
162
168
  )
163
169
  }
164
170
  }
@@ -9,6 +9,7 @@ export interface ExprUpdateModalComponentProps {
9
9
  schema: Schema
10
10
  /** Data source to use to get values */
11
11
  dataSource: DataSource
12
+ /** Optional table that will be filtered to have a single row present. Widget designer should optionally account for this */
12
13
  singleRowTable?: string
13
14
  }
14
15
 
@@ -58,7 +58,7 @@ describe("UndoStack", function () {
58
58
  return assert.equal(us.getValue(), this.b)
59
59
  })
60
60
 
61
- return it("pushing new value clears redo stack", function () {
61
+ it("pushing new value clears redo stack", function () {
62
62
  let us = this.undoStack.push(this.a)
63
63
  us = us.push(this.b)
64
64
  us = us.undo()
@@ -70,4 +70,55 @@ describe("UndoStack", function () {
70
70
  us = us.push(this.c)
71
71
  return assert.isFalse(us.canRedo())
72
72
  })
73
+
74
+ it("limits stack depth when maxDepth is set", function () {
75
+ let us = new UndoStack(undefined, undefined, 3)
76
+ us = us.push({ x: 1 })
77
+ us = us.push({ x: 2 })
78
+ us = us.push({ x: 3 })
79
+ us = us.push({ x: 4 })
80
+
81
+ // Should only keep last 3 values
82
+ assert.equal(us.undoStack.length, 3)
83
+ assert.equal(us.getValue().x, 4)
84
+
85
+ // Can undo twice (3 values means 2 undo operations)
86
+ assert.isTrue(us.canUndo())
87
+ us = us.undo()
88
+ assert.equal(us.getValue().x, 3)
89
+ assert.isTrue(us.canUndo())
90
+ us = us.undo()
91
+ assert.equal(us.getValue().x, 2)
92
+
93
+ // Cannot undo anymore (only 1 value left)
94
+ return assert.isFalse(us.canUndo())
95
+ })
96
+
97
+ it("preserves maxDepth through undo and redo operations", function () {
98
+ let us = new UndoStack(undefined, undefined, 5)
99
+ us = us.push({ x: 1 })
100
+ us = us.push({ x: 2 })
101
+
102
+ us = us.undo()
103
+ assert.equal(us.maxDepth, 5)
104
+
105
+ us = us.redo()
106
+ assert.equal(us.maxDepth, 5)
107
+
108
+ us = us.push({ x: 3 })
109
+ return assert.equal(us.maxDepth, 5)
110
+ })
111
+
112
+ return it("works without maxDepth (unlimited)", function () {
113
+ let us = new UndoStack()
114
+
115
+ // Push many values
116
+ for (let i = 0; i < 100; i++) {
117
+ us = us.push({ x: i })
118
+ }
119
+
120
+ // Should keep all values
121
+ assert.equal(us.undoStack.length, 100)
122
+ return assert.equal(us.getValue().x, 99)
123
+ })
73
124
  })
@@ -1,7 +0,0 @@
1
- import { configure } from '@kadira/storybook';
2
-
3
- function loadStories() {
4
- require('../stories');
5
- }
6
-
7
- configure(loadStories, module);
@@ -1,3 +0,0 @@
1
- <link rel="stylesheet" type="text/css" href="dist/css/libs.css">
2
- <link rel="stylesheet" type="text/css" href="dist/css/index.css">
3
- <link rel="stylesheet" type="text/css" href="assets/font-awesome/css/font-awesome.min.css">
@@ -1,15 +0,0 @@
1
- path = require('path');
2
-
3
- module.exports = {
4
- module: {
5
- loaders: [
6
- { test: /\.coffee$/, loader: "coffee-loader" },
7
- ],
8
- },
9
- resolve: {
10
- extensions: ["", ".coffee", ".js", ".json"],
11
- },
12
- externals: {
13
- jquery: "$"
14
- }
15
- };
@@ -1,146 +0,0 @@
1
- /*
2
- Copyright (c) 2011-2014, Pavel Shramov, Bruno Bergot
3
- All rights reserved.
4
-
5
- Redistribution and use in source and binary forms, with or without modification, are
6
- permitted provided that the following conditions are met:
7
-
8
- 1. Redistributions of source code must retain the above copyright notice, this list of
9
- conditions and the following disclaimer.
10
-
11
- 2. Redistributions in binary form must reproduce the above copyright notice, this list
12
- of conditions and the following disclaimer in the documentation and/or other materials
13
- provided with the distribution.
14
-
15
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
16
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
18
- COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
22
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
- */
25
-
26
- import L from "leaflet"
27
-
28
- module.exports = L.TileLayer.extend({
29
- options: {
30
- subdomains: [0, 1, 2, 3],
31
- type: "Aerial",
32
- attribution: "Bing",
33
- culture: "",
34
- maxZoom: 21,
35
- maxNativeZoom: 19
36
- },
37
-
38
- initialize: function (key: any, options: any) {
39
- L.Util.setOptions(this, options)
40
-
41
- this._key = key
42
- this._url = null
43
- this.meta = {}
44
- this.loadMetadata()
45
- },
46
-
47
- tile2quad: function (x: any, y: any, z: any) {
48
- var quad = ""
49
- for (var i = z; i > 0; i--) {
50
- var digit = 0
51
- var mask = 1 << (i - 1)
52
- if ((x & mask) !== 0) digit += 1
53
- if ((y & mask) !== 0) digit += 2
54
- quad = quad + digit
55
- }
56
- return quad
57
- },
58
-
59
- getTileUrl: function (p: any, z: any) {
60
- var zoom = this._getZoomForUrl()
61
- var subdomains = this.options.subdomains,
62
- s = this.options.subdomains[Math.abs((p.x + p.y) % subdomains.length)]
63
- return this._url
64
- .replace("{subdomain}", s)
65
- .replace("{quadkey}", this.tile2quad(p.x, p.y, zoom))
66
- .replace("{culture}", this.options.culture)
67
- },
68
-
69
- loadMetadata: function () {
70
- var _this = this
71
- var url = `https://dev.virtualearth.net/REST/v1/Imagery/Metadata/${this.options.type}?include=ImageryProviders&key=${this._key}&UriScheme=https`
72
-
73
- fetch(url)
74
- .then(response => response.json())
75
- .then(meta => {
76
- _this.meta = meta
77
- if (meta.errorDetails) {
78
- return
79
- }
80
- _this.initMetadata()
81
- })
82
- .catch(error => console.error('Error loading Bing Maps metadata:', error))
83
- },
84
-
85
- initMetadata: function () {
86
- var r = this.meta.resourceSets[0].resources[0]
87
- if (!r) {
88
- console.error("Error loading Bing Maps metadata")
89
- return
90
- }
91
- this.options.subdomains = r.imageUrlSubdomains
92
- this._url = r.imageUrl
93
- this._providers = []
94
- if (r.imageryProviders) {
95
- for (var i = 0; i < r.imageryProviders.length; i++) {
96
- var p = r.imageryProviders[i]
97
- for (var j = 0; j < p.coverageAreas.length; j++) {
98
- var c = p.coverageAreas[j]
99
- var coverage: any = { zoomMin: c.zoomMin, zoomMax: c.zoomMax, active: false }
100
- var bounds = new L.LatLngBounds(
101
- new L.LatLng(c.bbox[0] + 0.01, c.bbox[1] + 0.01),
102
- new L.LatLng(c.bbox[2] - 0.01, c.bbox[3] - 0.01)
103
- )
104
- coverage.bounds = bounds
105
- coverage.attrib = p.attribution
106
- this._providers.push(coverage)
107
- }
108
- }
109
- }
110
- this._update()
111
- },
112
-
113
- _update: function () {
114
- if (this._url === null || !this._map) return
115
- this._update_attribution()
116
- ;(L.TileLayer.prototype as any)._update.apply(this, [])
117
- },
118
-
119
- _update_attribution: function () {
120
- var bounds = this._map.getBounds()
121
- var zoom = this._map.getZoom()
122
- for (var i = 0; i < this._providers.length; i++) {
123
- var p = this._providers[i]
124
- if (zoom <= p.zoomMax && zoom >= p.zoomMin && bounds.intersects(p.bounds)) {
125
- if (!p.active && this._map.attributionControl) this._map.attributionControl.addAttribution(p.attrib)
126
- p.active = true
127
- } else {
128
- if (p.active && this._map.attributionControl) this._map.attributionControl.removeAttribution(p.attrib)
129
- p.active = false
130
- }
131
- }
132
- },
133
-
134
- onRemove: function (map: any) {
135
- if (this._providers) {
136
- for (var i = 0; i < this._providers.length; i++) {
137
- var p = this._providers[i]
138
- if (p.active && this._map.attributionControl) {
139
- this._map.attributionControl.removeAttribution(p.attrib)
140
- p.active = false
141
- }
142
- }
143
- }
144
- L.TileLayer.prototype.onRemove.apply(this, [map])
145
- }
146
- })