@evergis/react 4.0.130 → 4.0.132
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.
- package/dist/components/Dashboard/components/Chart/styled.d.ts +7 -0
- package/dist/components/Dashboard/constants.d.ts +27 -0
- package/dist/components/Dashboard/hooks/index.d.ts +1 -0
- package/dist/components/Dashboard/hooks/useDataSourceLoading.d.ts +2 -0
- package/dist/components/Dashboard/hooks/useGlobalContext.d.ts +2 -0
- package/dist/components/Dashboard/types.d.ts +13 -0
- package/dist/components/Dashboard/utils/applyQueryFilters.d.ts +3 -1
- package/dist/components/Dashboard/utils/formatDataSourceCondition.d.ts +5 -1
- package/dist/components/Dashboard/utils/getMapViewDataSources.d.ts +7 -0
- package/dist/components/Dashboard/utils/index.d.ts +2 -0
- package/dist/components/Dashboard/utils/toConditionsArray.d.ts +2 -0
- package/dist/contexts/GlobalContext/types.d.ts +4 -0
- package/dist/index.js +376 -241
- package/dist/index.js.map +1 -1
- package/dist/react.esm.js +369 -243
- package/dist/react.esm.js.map +1 -1
- package/package.json +2 -2
- package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredData.d.ts +0 -28
- package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredDataDraft.d.ts +0 -25
- package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredDataSave.d.ts +0 -17
- package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredDataSchema.d.ts +0 -11
- package/dist/components/Dashboard/containers/StructuredDataContainer/utils/viewScroll.d.ts +0 -17
- package/dist/components/Dashboard/elements/ElementTable/hooks/useSurfaceColor.d.ts +0 -16
- package/dist/components/Dashboard/elements/ElementTable/useCellEditing.d.ts +0 -15
- package/dist/components/Dashboard/elements/ElementTable/useTableView.d.ts +0 -16
- package/dist/components/Dashboard/elements/ElementTable/utils/surfaceColor.d.ts +0 -13
package/dist/react.esm.js
CHANGED
|
@@ -2,7 +2,7 @@ import styled, { createGlobalStyle, css, useTheme } from 'styled-components';
|
|
|
2
2
|
import { Icon, IconButtonInnerChild, IconButton, Flex, transition, Chip, shadows, Description, Divider, Popup, Menu, IconToggleButton, LinearProgress, Tooltip as Tooltip$1, IconToggle, Preview, LegendToggler, DropdownField, MultiSelectContainer, IconButtonButton, useDragAndDropEffect, FlatButton, DraggableTreeContainer, DraggableTree, FlexSpan, Dialog, DialogTitle, ActionsGroup, DialogContent, DialogActions, RaisedButton, UploaderItemArea, UploaderTitleWrapper, ThemeProvider, darkTheme, CircularProgress, Switch, AutoComplete, Input, Slider, Dropdown, Checkbox, DatePicker, getLocale, H2, Blank, Popover, NumberInput, Uploader, NumberRangeSlider, useAsyncAutocomplete, RangeNumberInput, TreeDropdown, defaultTheme, dateFormat } from '@evergis/uilib-gl';
|
|
3
3
|
import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
4
4
|
import { isValidElement, Fragment, createContext, memo, useRef, useState, useCallback, useEffect, useContext, useMemo, createElement, useLayoutEffect, forwardRef } from 'react';
|
|
5
|
-
import { lineChartClassNames, BarChart as BarChart$1,
|
|
5
|
+
import { barChartClassNames, lineChartClassNames, BarChart as BarChart$1, LineChart, PieChart } from '@evergis/charts';
|
|
6
6
|
import { AttributeType, AttributeIconType, generateId, STORAGE_TOKEN_KEY, parseJwt, STORAGE_REFRESH_TOKEN_KEY, RemoteTaskStatus, AttributeConfigurationType, LayerServiceType, OgcGeometryType, StringSubType } from '@evergis/api';
|
|
7
7
|
import { isNil, isEmpty, uniqueId, isEqual, unescape } from 'lodash';
|
|
8
8
|
import { Color as Color$1, ColorScale } from '@evergis/color';
|
|
@@ -73,205 +73,6 @@ const AddFeatureButton = ({ title, icon = "feature_add" /* , layerName, geometry
|
|
|
73
73
|
return (jsx(IconButton, { kind: icon, primary: true, onClick: handleAddFeature, children: title }));
|
|
74
74
|
};
|
|
75
75
|
|
|
76
|
-
const ChartTooltipTable = styled.table.withConfig({ displayName: "ChartTooltipTable", componentId: "sc-1fk3ts5" }) `
|
|
77
|
-
td {
|
|
78
|
-
padding: 0;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
tr:not(:last-child) td {
|
|
82
|
-
padding-bottom: 0.375rem;
|
|
83
|
-
}
|
|
84
|
-
`;
|
|
85
|
-
const ChartTooltip = styled(Flex).withConfig({ displayName: "ChartTooltip", componentId: "sc-1iyyyv7" }) `
|
|
86
|
-
flex-wrap: nowrap;
|
|
87
|
-
background: rgb(48, 69, 79);
|
|
88
|
-
border-radius: 0.25rem;
|
|
89
|
-
color: white;
|
|
90
|
-
|
|
91
|
-
:not(:last-child) {
|
|
92
|
-
margin-bottom: 0.25rem;
|
|
93
|
-
}
|
|
94
|
-
`;
|
|
95
|
-
const ChartTooltipLabel = styled.div.withConfig({ displayName: "ChartTooltipLabel", componentId: "sc-gl0qxz" }) `
|
|
96
|
-
margin-right: 0.25rem;
|
|
97
|
-
`;
|
|
98
|
-
const ChartTooltipColor = styled.div.withConfig({ displayName: "ChartTooltipColor", componentId: "sc-tmvvbh" }) `
|
|
99
|
-
width: 0.625rem;
|
|
100
|
-
height: 0.625rem;
|
|
101
|
-
background-color: ${({ $color }) => $color};
|
|
102
|
-
border-radius: ${({ theme: { borderRadius } }) => borderRadius.smallest};
|
|
103
|
-
margin-right: 0.25rem;
|
|
104
|
-
`;
|
|
105
|
-
const ChartLegendColor$1 = styled.div.withConfig({ displayName: "ChartLegendColor", componentId: "sc-l66k4q" }) `
|
|
106
|
-
width: 0.5rem;
|
|
107
|
-
height: 0.5rem;
|
|
108
|
-
background-color: ${({ $color }) => $color};
|
|
109
|
-
border-radius: 0.125rem;
|
|
110
|
-
`;
|
|
111
|
-
const ChartLegendValue = styled.div.withConfig({ displayName: "ChartLegendValue", componentId: "sc-1d7z775" }) `
|
|
112
|
-
opacity: 0.65;
|
|
113
|
-
`;
|
|
114
|
-
const ChartTooltipRow = styled(Flex).withConfig({ displayName: "ChartTooltipRow", componentId: "sc-ih1uc5" }) `
|
|
115
|
-
display: flex;
|
|
116
|
-
flex-direction: row;
|
|
117
|
-
flex-wrap: nowrap;
|
|
118
|
-
align-items: center;
|
|
119
|
-
margin-top: 0.5rem;
|
|
120
|
-
line-height: 0;
|
|
121
|
-
|
|
122
|
-
${ChartLegendColor$1} {
|
|
123
|
-
margin-right: 0.25rem;
|
|
124
|
-
}
|
|
125
|
-
`;
|
|
126
|
-
const ChartTooltipName = styled.div.withConfig({ displayName: "ChartTooltipName", componentId: "sc-sm4g0t" }) `
|
|
127
|
-
margin-right: 1rem;
|
|
128
|
-
opacity: 0.65;
|
|
129
|
-
`;
|
|
130
|
-
const PieChartCenter = styled.div.withConfig({ displayName: "PieChartCenter", componentId: "sc-1le93jy" }) `
|
|
131
|
-
position: absolute;
|
|
132
|
-
top: 50%;
|
|
133
|
-
left: 50%;
|
|
134
|
-
transform: translate(-50%, -50%);
|
|
135
|
-
text-align: center;
|
|
136
|
-
font-weight: bold;
|
|
137
|
-
font-size: 1.5rem;
|
|
138
|
-
`;
|
|
139
|
-
const ChartWrapperContainer = styled.div.withConfig({ displayName: "ChartWrapperContainer", componentId: "sc-1f4x9zv" }) `
|
|
140
|
-
position: relative;
|
|
141
|
-
width: 100%;
|
|
142
|
-
`;
|
|
143
|
-
/*
|
|
144
|
-
* fill-режим: обёртка забирает всю доступную ячейку (её высоту задаёт флекс-цепочка, а не контент графика),
|
|
145
|
-
* на неё вешается ref для ResizeObserver — меряем обе оси без цикла. Плоский div (не Flex uilib), как соседний
|
|
146
|
-
* ChartWrapperContainer, чтобы ref гарантированно дошёл до DOM-узла. Тело графика центрируется внутри.
|
|
147
|
-
*/
|
|
148
|
-
const ChartFillMeasure = styled.div.withConfig({ displayName: "ChartFillMeasure", componentId: "sc-1r4oerb" }) `
|
|
149
|
-
position: relative;
|
|
150
|
-
display: flex;
|
|
151
|
-
align-items: center;
|
|
152
|
-
justify-content: center;
|
|
153
|
-
width: 100%;
|
|
154
|
-
height: 100%;
|
|
155
|
-
min-width: 0;
|
|
156
|
-
min-height: 0;
|
|
157
|
-
overflow: hidden;
|
|
158
|
-
|
|
159
|
-
/* SVG по умолчанию inline, поэтому под ним остаётся зазор базовой линии (~4px при line-height
|
|
160
|
-
18.4px): вне fill его скрывал запас высоты, а тело, точно заполнившее ячейку, из-за него
|
|
161
|
-
вылезает за нижнюю границу. Блочный SVG зазора не даёт. */
|
|
162
|
-
svg {
|
|
163
|
-
display: block;
|
|
164
|
-
}
|
|
165
|
-
`;
|
|
166
|
-
const Tooltip = styled.div.withConfig({ displayName: "Tooltip", componentId: "sc-1va8cy3" }) `
|
|
167
|
-
position: relative;
|
|
168
|
-
border-radius: 0.25rem;
|
|
169
|
-
background-color: rgba(28, 33, 48);
|
|
170
|
-
padding: 0.5rem;
|
|
171
|
-
box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.15);
|
|
172
|
-
font-size: 0.75rem;
|
|
173
|
-
transform: ${({ transform }) => transform};
|
|
174
|
-
color: white;
|
|
175
|
-
|
|
176
|
-
:before {
|
|
177
|
-
position: absolute;
|
|
178
|
-
display: block;
|
|
179
|
-
content: "";
|
|
180
|
-
width: 0;
|
|
181
|
-
height: 0;
|
|
182
|
-
}
|
|
183
|
-
`;
|
|
184
|
-
const LineChartStyles = createGlobalStyle `
|
|
185
|
-
.dashboardLineChartTooltip.${lineChartClassNames.lineChartMouseLabel} {
|
|
186
|
-
.${lineChartClassNames.lineChartLabelFlex} {
|
|
187
|
-
justify-content: center;
|
|
188
|
-
align-items: flex-end;
|
|
189
|
-
|
|
190
|
-
${Tooltip} {
|
|
191
|
-
margin: 0 0 12px 0;
|
|
192
|
-
|
|
193
|
-
:before {
|
|
194
|
-
top: auto;
|
|
195
|
-
bottom: 0;
|
|
196
|
-
left: 50%;
|
|
197
|
-
transform: translate(-50%, 100%);
|
|
198
|
-
border-left: 4px solid transparent;
|
|
199
|
-
border-right: 4px solid transparent;
|
|
200
|
-
border-top: 4px solid rgba(28, 33, 48, 0.9);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
.${lineChartClassNames.lineChartYScaleGlobal}, .${lineChartClassNames.lineChartXScaleGlobal} {
|
|
207
|
-
.domain {
|
|
208
|
-
visibility: hidden;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.tick {
|
|
212
|
-
text {
|
|
213
|
-
fill: ${({ theme: { palette } }) => palette.textDisabled};
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
line {
|
|
217
|
-
visibility: hidden;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
.${lineChartClassNames.lineChartXScaleGlobal} {
|
|
223
|
-
.tick {
|
|
224
|
-
:first-of-type {
|
|
225
|
-
text {
|
|
226
|
-
text-anchor: start;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
:last-of-type {
|
|
231
|
-
text {
|
|
232
|
-
text-anchor: end;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
.${lineChartClassNames.lineChartLine} {
|
|
239
|
-
stroke-width: 2px;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
.${lineChartClassNames.lineChartLabel} {
|
|
243
|
-
color: ${({ theme: { palette } }) => palette.textPrimary};
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
.${lineChartClassNames.lineChartMouseCircle} {
|
|
247
|
-
stroke: #ffffff;
|
|
248
|
-
stroke-width: 2px;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
.${lineChartClassNames.lineChartGridLineX} {
|
|
252
|
-
stroke: ${({ theme: { palette } }) => palette.element};
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
text {
|
|
256
|
-
fill: ${({ theme: { palette } }) => palette.textDisabled};
|
|
257
|
-
}
|
|
258
|
-
`;
|
|
259
|
-
const StyledBarChart = styled(BarChart$1).withConfig({ displayName: "StyledBarChart", componentId: "sc-1l1kx80" }) `
|
|
260
|
-
.domain {
|
|
261
|
-
display: none;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
.tick {
|
|
265
|
-
text {
|
|
266
|
-
fill: ${({ theme: { palette } }) => palette.textDisabled};
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
line {
|
|
270
|
-
visibility: hidden;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
`;
|
|
274
|
-
|
|
275
76
|
function range(start, stop, step) {
|
|
276
77
|
start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
|
|
277
78
|
|
|
@@ -3539,6 +3340,18 @@ const DEFAULT_CHART_ANGLE = 4;
|
|
|
3539
3340
|
const DEFAULT_CHART_HEIGHT = 90;
|
|
3540
3341
|
const STACK_BAR_TOTAL_HEIGHT = 20;
|
|
3541
3342
|
const FILTER_PREFIX = "%";
|
|
3343
|
+
/** Имя системного геометрического фильтра — выделение, нарисованное пользователем на карте. */
|
|
3344
|
+
const GEOMETRY_FILTER_NAME = "geometry";
|
|
3345
|
+
/** Имя системного фильтра «экстент видимой области карты» (EWKT, `SRID=3857`). */
|
|
3346
|
+
const EXTENT_FILTER_NAME = "extent";
|
|
3347
|
+
/** Имя системного фильтра «уровень зума карты» (целое число). */
|
|
3348
|
+
const ZOOM_FILTER_NAME = "zoom";
|
|
3349
|
+
/**
|
|
3350
|
+
* Системные фильтры текущего вида карты. Их значения приходят не из `SelectedFilters`, а из
|
|
3351
|
+
* `GlobalContext`, поэтому имена зарезервированы: одноимённый пользовательский фильтр будет
|
|
3352
|
+
* перехвачен системной подстановкой — ровно как в случае `geometry`.
|
|
3353
|
+
*/
|
|
3354
|
+
const MAP_VIEW_FILTER_NAMES = [EXTENT_FILTER_NAME, ZOOM_FILTER_NAME];
|
|
3542
3355
|
const PROVIDER_PREFIX = "$";
|
|
3543
3356
|
var ProviderPrefix;
|
|
3544
3357
|
(function (ProviderPrefix) {
|
|
@@ -3574,6 +3387,22 @@ const ATTRIBUTE_ICON_ELEMENT_TYPES = {
|
|
|
3574
3387
|
const EMPTY_DATA_SOURCE_LAYER_INFO = {
|
|
3575
3388
|
configuration: { attributesConfiguration: { attributes: [] } },
|
|
3576
3389
|
};
|
|
3390
|
+
/**
|
|
3391
|
+
* z-index плавающих слоёв дашборда: тултипы графиков и выпадающие списки фильтров.
|
|
3392
|
+
*
|
|
3393
|
+
* Тултипы графиков (`@evergis/charts`) и поповеры дропдаунов рендерятся порталом в `body`, где
|
|
3394
|
+
* их собственные z-index (100 у Bar/Line, 103 у Pie) ниже модального окна `Dialog` из
|
|
3395
|
+
* `@evergis/uilib-gl` (110) — внутри модалки дашборда они уходили под окно.
|
|
3396
|
+
*/
|
|
3397
|
+
const DASHBOARD_OVERLAY_Z_INDEX = 1000;
|
|
3398
|
+
/**
|
|
3399
|
+
* Стиль контейнера тултипа `PieChart`: там z-index проставляется инлайном (103), поэтому поднять
|
|
3400
|
+
* его CSS-классом нельзя — только через `tooltipStyle`. Ключ пишем в CSS-нотации: значение уходит
|
|
3401
|
+
* в `d3.selection.style()` → `setProperty`, а camelCase он не понимает.
|
|
3402
|
+
*/
|
|
3403
|
+
const PIE_CHART_TOOLTIP_STYLE = {
|
|
3404
|
+
"z-index": `${DASHBOARD_OVERLAY_Z_INDEX}`,
|
|
3405
|
+
};
|
|
3577
3406
|
const DEFAULT_DROPDOWN_WIDTH = 312;
|
|
3578
3407
|
const DEFAULT_FILTER_PADDING = 12;
|
|
3579
3408
|
/** Базовый отступ обёртки контейнера. Снимается, когда контейнер занимает ячейку целиком. */
|
|
@@ -3607,6 +3436,217 @@ const CONTAINER_BODY_FILL_STYLE = {
|
|
|
3607
3436
|
*/
|
|
3608
3437
|
const CONTAINERS_GROUP_DEFAULTS = { boxSizing: "border-box" };
|
|
3609
3438
|
|
|
3439
|
+
const ChartTooltipTable = styled.table.withConfig({ displayName: "ChartTooltipTable", componentId: "sc-1fk3ts5" }) `
|
|
3440
|
+
td {
|
|
3441
|
+
padding: 0;
|
|
3442
|
+
}
|
|
3443
|
+
|
|
3444
|
+
tr:not(:last-child) td {
|
|
3445
|
+
padding-bottom: 0.375rem;
|
|
3446
|
+
}
|
|
3447
|
+
`;
|
|
3448
|
+
const ChartTooltip = styled(Flex).withConfig({ displayName: "ChartTooltip", componentId: "sc-1iyyyv7" }) `
|
|
3449
|
+
flex-wrap: nowrap;
|
|
3450
|
+
background: rgb(48, 69, 79);
|
|
3451
|
+
border-radius: 0.25rem;
|
|
3452
|
+
color: white;
|
|
3453
|
+
|
|
3454
|
+
:not(:last-child) {
|
|
3455
|
+
margin-bottom: 0.25rem;
|
|
3456
|
+
}
|
|
3457
|
+
`;
|
|
3458
|
+
const ChartTooltipLabel = styled.div.withConfig({ displayName: "ChartTooltipLabel", componentId: "sc-gl0qxz" }) `
|
|
3459
|
+
margin-right: 0.25rem;
|
|
3460
|
+
`;
|
|
3461
|
+
const ChartTooltipColor = styled.div.withConfig({ displayName: "ChartTooltipColor", componentId: "sc-tmvvbh" }) `
|
|
3462
|
+
width: 0.625rem;
|
|
3463
|
+
height: 0.625rem;
|
|
3464
|
+
background-color: ${({ $color }) => $color};
|
|
3465
|
+
border-radius: ${({ theme: { borderRadius } }) => borderRadius.smallest};
|
|
3466
|
+
margin-right: 0.25rem;
|
|
3467
|
+
`;
|
|
3468
|
+
const ChartLegendColor$1 = styled.div.withConfig({ displayName: "ChartLegendColor", componentId: "sc-l66k4q" }) `
|
|
3469
|
+
width: 0.5rem;
|
|
3470
|
+
height: 0.5rem;
|
|
3471
|
+
background-color: ${({ $color }) => $color};
|
|
3472
|
+
border-radius: 0.125rem;
|
|
3473
|
+
`;
|
|
3474
|
+
const ChartLegendValue = styled.div.withConfig({ displayName: "ChartLegendValue", componentId: "sc-1d7z775" }) `
|
|
3475
|
+
opacity: 0.65;
|
|
3476
|
+
`;
|
|
3477
|
+
const ChartTooltipRow = styled(Flex).withConfig({ displayName: "ChartTooltipRow", componentId: "sc-ih1uc5" }) `
|
|
3478
|
+
display: flex;
|
|
3479
|
+
flex-direction: row;
|
|
3480
|
+
flex-wrap: nowrap;
|
|
3481
|
+
align-items: center;
|
|
3482
|
+
margin-top: 0.5rem;
|
|
3483
|
+
line-height: 0;
|
|
3484
|
+
|
|
3485
|
+
${ChartLegendColor$1} {
|
|
3486
|
+
margin-right: 0.25rem;
|
|
3487
|
+
}
|
|
3488
|
+
`;
|
|
3489
|
+
const ChartTooltipName = styled.div.withConfig({ displayName: "ChartTooltipName", componentId: "sc-sm4g0t" }) `
|
|
3490
|
+
margin-right: 1rem;
|
|
3491
|
+
opacity: 0.65;
|
|
3492
|
+
`;
|
|
3493
|
+
const PieChartCenter = styled.div.withConfig({ displayName: "PieChartCenter", componentId: "sc-1le93jy" }) `
|
|
3494
|
+
position: absolute;
|
|
3495
|
+
top: 50%;
|
|
3496
|
+
left: 50%;
|
|
3497
|
+
transform: translate(-50%, -50%);
|
|
3498
|
+
text-align: center;
|
|
3499
|
+
font-weight: bold;
|
|
3500
|
+
font-size: 1.5rem;
|
|
3501
|
+
`;
|
|
3502
|
+
const ChartWrapperContainer = styled.div.withConfig({ displayName: "ChartWrapperContainer", componentId: "sc-1f4x9zv" }) `
|
|
3503
|
+
position: relative;
|
|
3504
|
+
width: 100%;
|
|
3505
|
+
`;
|
|
3506
|
+
/*
|
|
3507
|
+
* fill-режим: обёртка забирает всю доступную ячейку (её высоту задаёт флекс-цепочка, а не контент графика),
|
|
3508
|
+
* на неё вешается ref для ResizeObserver — меряем обе оси без цикла. Плоский div (не Flex uilib), как соседний
|
|
3509
|
+
* ChartWrapperContainer, чтобы ref гарантированно дошёл до DOM-узла. Тело графика центрируется внутри.
|
|
3510
|
+
*/
|
|
3511
|
+
const ChartFillMeasure = styled.div.withConfig({ displayName: "ChartFillMeasure", componentId: "sc-1r4oerb" }) `
|
|
3512
|
+
position: relative;
|
|
3513
|
+
display: flex;
|
|
3514
|
+
align-items: center;
|
|
3515
|
+
justify-content: center;
|
|
3516
|
+
width: 100%;
|
|
3517
|
+
height: 100%;
|
|
3518
|
+
min-width: 0;
|
|
3519
|
+
min-height: 0;
|
|
3520
|
+
overflow: hidden;
|
|
3521
|
+
|
|
3522
|
+
/* SVG по умолчанию inline, поэтому под ним остаётся зазор базовой линии (~4px при line-height
|
|
3523
|
+
18.4px): вне fill его скрывал запас высоты, а тело, точно заполнившее ячейку, из-за него
|
|
3524
|
+
вылезает за нижнюю границу. Блочный SVG зазора не даёт. */
|
|
3525
|
+
svg {
|
|
3526
|
+
display: block;
|
|
3527
|
+
}
|
|
3528
|
+
`;
|
|
3529
|
+
const Tooltip = styled.div.withConfig({ displayName: "Tooltip", componentId: "sc-1va8cy3" }) `
|
|
3530
|
+
position: relative;
|
|
3531
|
+
border-radius: 0.25rem;
|
|
3532
|
+
background-color: rgba(28, 33, 48);
|
|
3533
|
+
padding: 0.5rem;
|
|
3534
|
+
box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.15);
|
|
3535
|
+
font-size: 0.75rem;
|
|
3536
|
+
transform: ${({ transform }) => transform};
|
|
3537
|
+
color: white;
|
|
3538
|
+
|
|
3539
|
+
:before {
|
|
3540
|
+
position: absolute;
|
|
3541
|
+
display: block;
|
|
3542
|
+
content: "";
|
|
3543
|
+
width: 0;
|
|
3544
|
+
height: 0;
|
|
3545
|
+
}
|
|
3546
|
+
`;
|
|
3547
|
+
/**
|
|
3548
|
+
* Тултипы графиков рендерятся в `body` со своим z-index (100 у Bar и Line) — ниже модального окна
|
|
3549
|
+
* `Dialog` из `@evergis/uilib-gl` (110), поэтому в модалке дашборда они уходили под окно. Класс
|
|
3550
|
+
* дублируем, чтобы правило перебило стили `@evergis/charts` по специфичности, а не по порядку
|
|
3551
|
+
* подключения.
|
|
3552
|
+
*/
|
|
3553
|
+
const ChartTooltipStyles = createGlobalStyle `
|
|
3554
|
+
.${barChartClassNames.barChartMouseTooltip}.${barChartClassNames.barChartMouseTooltip},
|
|
3555
|
+
.${lineChartClassNames.lineChartMouseLabel}.${lineChartClassNames.lineChartMouseLabel} {
|
|
3556
|
+
z-index: ${DASHBOARD_OVERLAY_Z_INDEX};
|
|
3557
|
+
}
|
|
3558
|
+
`;
|
|
3559
|
+
const LineChartStyles = createGlobalStyle `
|
|
3560
|
+
.dashboardLineChartTooltip.${lineChartClassNames.lineChartMouseLabel} {
|
|
3561
|
+
.${lineChartClassNames.lineChartLabelFlex} {
|
|
3562
|
+
justify-content: center;
|
|
3563
|
+
align-items: flex-end;
|
|
3564
|
+
|
|
3565
|
+
${Tooltip} {
|
|
3566
|
+
margin: 0 0 12px 0;
|
|
3567
|
+
|
|
3568
|
+
:before {
|
|
3569
|
+
top: auto;
|
|
3570
|
+
bottom: 0;
|
|
3571
|
+
left: 50%;
|
|
3572
|
+
transform: translate(-50%, 100%);
|
|
3573
|
+
border-left: 4px solid transparent;
|
|
3574
|
+
border-right: 4px solid transparent;
|
|
3575
|
+
border-top: 4px solid rgba(28, 33, 48, 0.9);
|
|
3576
|
+
}
|
|
3577
|
+
}
|
|
3578
|
+
}
|
|
3579
|
+
}
|
|
3580
|
+
|
|
3581
|
+
.${lineChartClassNames.lineChartYScaleGlobal}, .${lineChartClassNames.lineChartXScaleGlobal} {
|
|
3582
|
+
.domain {
|
|
3583
|
+
visibility: hidden;
|
|
3584
|
+
}
|
|
3585
|
+
|
|
3586
|
+
.tick {
|
|
3587
|
+
text {
|
|
3588
|
+
fill: ${({ theme: { palette } }) => palette.textDisabled};
|
|
3589
|
+
}
|
|
3590
|
+
|
|
3591
|
+
line {
|
|
3592
|
+
visibility: hidden;
|
|
3593
|
+
}
|
|
3594
|
+
}
|
|
3595
|
+
}
|
|
3596
|
+
|
|
3597
|
+
.${lineChartClassNames.lineChartXScaleGlobal} {
|
|
3598
|
+
.tick {
|
|
3599
|
+
:first-of-type {
|
|
3600
|
+
text {
|
|
3601
|
+
text-anchor: start;
|
|
3602
|
+
}
|
|
3603
|
+
}
|
|
3604
|
+
|
|
3605
|
+
:last-of-type {
|
|
3606
|
+
text {
|
|
3607
|
+
text-anchor: end;
|
|
3608
|
+
}
|
|
3609
|
+
}
|
|
3610
|
+
}
|
|
3611
|
+
}
|
|
3612
|
+
|
|
3613
|
+
.${lineChartClassNames.lineChartLine} {
|
|
3614
|
+
stroke-width: 2px;
|
|
3615
|
+
}
|
|
3616
|
+
|
|
3617
|
+
.${lineChartClassNames.lineChartLabel} {
|
|
3618
|
+
color: ${({ theme: { palette } }) => palette.textPrimary};
|
|
3619
|
+
}
|
|
3620
|
+
|
|
3621
|
+
.${lineChartClassNames.lineChartMouseCircle} {
|
|
3622
|
+
stroke: #ffffff;
|
|
3623
|
+
stroke-width: 2px;
|
|
3624
|
+
}
|
|
3625
|
+
|
|
3626
|
+
.${lineChartClassNames.lineChartGridLineX} {
|
|
3627
|
+
stroke: ${({ theme: { palette } }) => palette.element};
|
|
3628
|
+
}
|
|
3629
|
+
|
|
3630
|
+
text {
|
|
3631
|
+
fill: ${({ theme: { palette } }) => palette.textDisabled};
|
|
3632
|
+
}
|
|
3633
|
+
`;
|
|
3634
|
+
const StyledBarChart = styled(BarChart$1).withConfig({ displayName: "StyledBarChart", componentId: "sc-1l1kx80" }) `
|
|
3635
|
+
.domain {
|
|
3636
|
+
display: none;
|
|
3637
|
+
}
|
|
3638
|
+
|
|
3639
|
+
.tick {
|
|
3640
|
+
text {
|
|
3641
|
+
fill: ${({ theme: { palette } }) => palette.textDisabled};
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3644
|
+
line {
|
|
3645
|
+
visibility: hidden;
|
|
3646
|
+
}
|
|
3647
|
+
}
|
|
3648
|
+
`;
|
|
3649
|
+
|
|
3610
3650
|
const StackBarContainer = styled(Flex).withConfig({ displayName: "StackBarContainer", componentId: "sc-stc97k" }) `
|
|
3611
3651
|
flex-wrap: nowrap;
|
|
3612
3652
|
width: 100%;
|
|
@@ -4219,7 +4259,7 @@ const getSelectedFilterValue = (filterName, selectedFilters, defaultValue) => {
|
|
|
4219
4259
|
: selectedFilters?.[filterName]?.value) ?? defaultValue);
|
|
4220
4260
|
};
|
|
4221
4261
|
|
|
4222
|
-
const applyQueryFilters = ({ parameters: configParameters, filters: configFilters, selectedFilters, geometry, attributes, layerInfo, dataSources, projectDataSources, }) => {
|
|
4262
|
+
const applyQueryFilters = ({ parameters: configParameters, filters: configFilters, selectedFilters, geometry, extent, zoomLevel, attributes, layerInfo, dataSources, projectDataSources, }) => {
|
|
4223
4263
|
if (!configParameters) {
|
|
4224
4264
|
return {};
|
|
4225
4265
|
}
|
|
@@ -4264,12 +4304,27 @@ const applyQueryFilters = ({ parameters: configParameters, filters: configFilter
|
|
|
4264
4304
|
const [filterName, filterProp] = filterFullName.includes(".") ? filterFullName.split(".") : [filterFullName, null];
|
|
4265
4305
|
const configFilter = getConfigFilter(filterName, configFilters);
|
|
4266
4306
|
const { defaultValue, relatedDataSource, attributeAlias } = configFilter || {};
|
|
4267
|
-
if (filterName ===
|
|
4307
|
+
if (filterName === GEOMETRY_FILTER_NAME && geometry && !geometry.includes("()") && geometry.endsWith(")")) {
|
|
4268
4308
|
return {
|
|
4269
4309
|
...result,
|
|
4270
4310
|
[key]: geometry,
|
|
4271
4311
|
};
|
|
4272
4312
|
}
|
|
4313
|
+
// Системные фильтры вида карты: значение приходит из `GlobalContext`, а не из `SelectedFilters`,
|
|
4314
|
+
// поэтому резолвятся до веток `.min` / `.max` / `.property` — как `geometry` выше.
|
|
4315
|
+
if (filterName === EXTENT_FILTER_NAME && extent) {
|
|
4316
|
+
return {
|
|
4317
|
+
...result,
|
|
4318
|
+
[key]: extent,
|
|
4319
|
+
};
|
|
4320
|
+
}
|
|
4321
|
+
// Единственная нестроковая системная подстановка: уровень зума уходит числом.
|
|
4322
|
+
if (filterName === ZOOM_FILTER_NAME && !isNil(zoomLevel)) {
|
|
4323
|
+
return {
|
|
4324
|
+
...result,
|
|
4325
|
+
[key]: zoomLevel,
|
|
4326
|
+
};
|
|
4327
|
+
}
|
|
4273
4328
|
if (configParameters[key].endsWith(".max")) {
|
|
4274
4329
|
return {
|
|
4275
4330
|
...result,
|
|
@@ -4487,13 +4542,22 @@ const applyFiltersToCondition = ({ condition, name, defaultValue, filters, isSin
|
|
|
4487
4542
|
return applyTreeFilterToCondition(condition, name, rawValue, isSingle);
|
|
4488
4543
|
}
|
|
4489
4544
|
const hasFilter = filters[name] !== undefined && !!filters[name].value?.toString().length;
|
|
4545
|
+
const filterName = `${FILTER_PREFIX}${name}`;
|
|
4546
|
+
// Пока фильтр не применён, границы `%name.min` / `%name.max` берём из range-дефолта конфига
|
|
4547
|
+
// (`defaultValue: [from, to]`) — иначе в условие ушёл бы весь массив вместо своей границы.
|
|
4548
|
+
// Проверка плейсхолдеров обязательна: у array-фильтра массивный дефолт подставляется целиком.
|
|
4549
|
+
const rangeDefault = !hasFilter &&
|
|
4550
|
+
Array.isArray(defaultValue) &&
|
|
4551
|
+
(condition.includes(`${filterName}.min`) || condition.includes(`${filterName}.max`))
|
|
4552
|
+
? defaultValue
|
|
4553
|
+
: null;
|
|
4490
4554
|
const min = formatConditionValue({
|
|
4491
|
-
value: hasFilter ? filters[name].min : null,
|
|
4555
|
+
value: hasFilter ? filters[name].min : rangeDefault?.[0] ?? null,
|
|
4492
4556
|
checkQuotes: !isSingle,
|
|
4493
4557
|
isSetParams,
|
|
4494
4558
|
});
|
|
4495
4559
|
const max = formatConditionValue({
|
|
4496
|
-
value: hasFilter ? filters[name].max : null,
|
|
4560
|
+
value: hasFilter ? filters[name].max : rangeDefault?.[1] ?? null,
|
|
4497
4561
|
checkQuotes: !isSingle,
|
|
4498
4562
|
isSetParams,
|
|
4499
4563
|
});
|
|
@@ -4503,7 +4567,6 @@ const applyFiltersToCondition = ({ condition, name, defaultValue, filters, isSin
|
|
|
4503
4567
|
checkQuotes: !isSingle,
|
|
4504
4568
|
isSetParams,
|
|
4505
4569
|
});
|
|
4506
|
-
const filterName = `${FILTER_PREFIX}${name}`;
|
|
4507
4570
|
const hasMin = min !== "" && min !== null && min !== undefined;
|
|
4508
4571
|
const hasMax = max !== "" && max !== null && max !== undefined;
|
|
4509
4572
|
let result = condition;
|
|
@@ -4520,7 +4583,7 @@ const applyFiltersToCondition = ({ condition, name, defaultValue, filters, isSin
|
|
|
4520
4583
|
}
|
|
4521
4584
|
return isSingle && isNumeric(result) ? Number(result) : result;
|
|
4522
4585
|
};
|
|
4523
|
-
const applyVarsToCondition = ({ section, configFilters, filters, attributes, layerParams, eqlParameters, geometry, isSetParams, }) => {
|
|
4586
|
+
const applyVarsToCondition = ({ section, configFilters, filters, attributes, layerParams, eqlParameters, geometry, extent, zoomLevel, isSetParams, }) => {
|
|
4524
4587
|
if (!section?.length)
|
|
4525
4588
|
return [];
|
|
4526
4589
|
const isSingle = typeof section === "string";
|
|
@@ -4529,6 +4592,17 @@ const applyVarsToCondition = ({ section, configFilters, filters, attributes, lay
|
|
|
4529
4592
|
if (geometry && !geometry.includes("()") && geometry.endsWith(")")) {
|
|
4530
4593
|
result[index] = result[index].replace(new RegExp("%geometry"), `'${geometry}'`);
|
|
4531
4594
|
}
|
|
4595
|
+
// Системные фильтры вида карты подставляются ДО цикла по `configFilters`: одноимённый
|
|
4596
|
+
// пользовательский фильтр не должен перехватывать `%extent` / `%zoom`. Lookahead `(?![\w.])`
|
|
4597
|
+
// оставляет фильтрам составные формы (`%zoomLevel`, `%extent_id`, `%zoom.min`) — та же
|
|
4598
|
+
// граница, что уже разводит `%name` и `%name2.l1` в `getUpdatingDataSources`.
|
|
4599
|
+
if (extent) {
|
|
4600
|
+
result[index] = result[index].replace(new RegExp(`${FILTER_PREFIX}${EXTENT_FILTER_NAME}(?![\\w.])`, "g"), `'${extent}'`);
|
|
4601
|
+
}
|
|
4602
|
+
// Зум — число, кавычки не ставим.
|
|
4603
|
+
if (!isNil(zoomLevel)) {
|
|
4604
|
+
result[index] = result[index].replace(new RegExp(`${FILTER_PREFIX}${ZOOM_FILTER_NAME}(?![\\w.])`, "g"), String(zoomLevel));
|
|
4605
|
+
}
|
|
4532
4606
|
if (configFilters?.length) {
|
|
4533
4607
|
configFilters.forEach(filter => {
|
|
4534
4608
|
result[index] = applyFiltersToCondition({
|
|
@@ -4557,7 +4631,7 @@ const applyVarsToCondition = ({ section, configFilters, filters, attributes, lay
|
|
|
4557
4631
|
});
|
|
4558
4632
|
return isSingle ? result?.[0] : result;
|
|
4559
4633
|
};
|
|
4560
|
-
const formatSingleCondition = (condition, { configFilters, filters, attributes, eqlParameters, layerParams, geometry }) => {
|
|
4634
|
+
const formatSingleCondition = (condition, { configFilters, filters, attributes, eqlParameters, layerParams, geometry, extent, zoomLevel, }) => {
|
|
4561
4635
|
const setParams = condition.match(new RegExp("\\$\\([^)]+\\)", "g"));
|
|
4562
4636
|
const setParamsSection = applyVarsToCondition({
|
|
4563
4637
|
section: setParams,
|
|
@@ -4567,6 +4641,8 @@ const formatSingleCondition = (condition, { configFilters, filters, attributes,
|
|
|
4567
4641
|
eqlParameters,
|
|
4568
4642
|
layerParams,
|
|
4569
4643
|
geometry,
|
|
4644
|
+
extent,
|
|
4645
|
+
zoomLevel,
|
|
4570
4646
|
isSetParams: true,
|
|
4571
4647
|
});
|
|
4572
4648
|
const splitter = " AND ";
|
|
@@ -4579,6 +4655,8 @@ const formatSingleCondition = (condition, { configFilters, filters, attributes,
|
|
|
4579
4655
|
eqlParameters,
|
|
4580
4656
|
layerParams,
|
|
4581
4657
|
geometry,
|
|
4658
|
+
extent,
|
|
4659
|
+
zoomLevel,
|
|
4582
4660
|
});
|
|
4583
4661
|
return setParamsSection?.length && conditionSection.length
|
|
4584
4662
|
? [setParamsSection.join(""), conditionSection.join(splitter)].join(" ")
|
|
@@ -6356,7 +6434,7 @@ const useAttachmentItems = ({ type, elementConfig, valueOverride, }) => {
|
|
|
6356
6434
|
};
|
|
6357
6435
|
|
|
6358
6436
|
const useGlobalContext = () => {
|
|
6359
|
-
const { t, language, themeName, api, ewktGeometry, notification } = useContext(GlobalContext) || {};
|
|
6437
|
+
const { t, language, themeName, api, ewktGeometry, ewktExtent, zoomLevel, notification } = useContext(GlobalContext) || {};
|
|
6360
6438
|
const translate = useCallback((value, options) => {
|
|
6361
6439
|
if (t)
|
|
6362
6440
|
return t(value, options);
|
|
@@ -6368,8 +6446,10 @@ const useGlobalContext = () => {
|
|
|
6368
6446
|
themeName,
|
|
6369
6447
|
api,
|
|
6370
6448
|
ewktGeometry,
|
|
6449
|
+
ewktExtent,
|
|
6450
|
+
zoomLevel,
|
|
6371
6451
|
notification,
|
|
6372
|
-
}), [language, translate, api, ewktGeometry, themeName, notification]);
|
|
6452
|
+
}), [language, translate, api, ewktGeometry, ewktExtent, zoomLevel, themeName, notification]);
|
|
6373
6453
|
};
|
|
6374
6454
|
|
|
6375
6455
|
const GRID_TILE_SIZE = "4.5rem";
|
|
@@ -7175,10 +7255,17 @@ const useDashboardHeader = () => {
|
|
|
7175
7255
|
};
|
|
7176
7256
|
};
|
|
7177
7257
|
|
|
7258
|
+
// Полноэкранная заглушка допустима только пока не пришёл ни один источник: дальше страницу
|
|
7259
|
+
// и модалку наполняют сами контейнеры — у каждого свой ContainerLoading / ChartLoading.
|
|
7260
|
+
const useDataSourceLoading = (type) => {
|
|
7261
|
+
const { dataSources, isLoading } = useWidgetContext(type);
|
|
7262
|
+
const { currentPage } = useWidgetPage(type);
|
|
7263
|
+
return useMemo(() => !!currentPage?.dataSources?.length && !dataSources?.length && !!isLoading, [currentPage?.dataSources?.length, dataSources?.length, isLoading]);
|
|
7264
|
+
};
|
|
7265
|
+
|
|
7178
7266
|
/* eslint-disable max-lines */
|
|
7179
|
-
const toConditionsArray = (value) => Array.isArray(value) ? value : value ? [value] : [];
|
|
7180
7267
|
const useDataSources = ({ type: widgetType, config, attributes, filters, layerParams, eqlParameters, }) => {
|
|
7181
|
-
const { ewktGeometry, api } = useGlobalContext();
|
|
7268
|
+
const { ewktGeometry, ewktExtent, zoomLevel, api } = useGlobalContext();
|
|
7182
7269
|
const { dataSources, layerInfo } = useWidgetContext(widgetType);
|
|
7183
7270
|
const { dataSources: projectDataSources } = useWidgetContext(WidgetType.Dashboard);
|
|
7184
7271
|
const { filters: configFilters, dataSources: configDataSources } = config || {};
|
|
@@ -7206,6 +7293,8 @@ const useDataSources = ({ type: widgetType, config, attributes, filters, layerPa
|
|
|
7206
7293
|
attributes,
|
|
7207
7294
|
filters: configFilters,
|
|
7208
7295
|
geometry: ewktGeometry,
|
|
7296
|
+
extent: ewktExtent,
|
|
7297
|
+
zoomLevel,
|
|
7209
7298
|
layerInfo,
|
|
7210
7299
|
dataSources,
|
|
7211
7300
|
projectDataSources,
|
|
@@ -7280,6 +7369,8 @@ const useDataSources = ({ type: widgetType, config, attributes, filters, layerPa
|
|
|
7280
7369
|
configFilters,
|
|
7281
7370
|
filters: selectedFilters,
|
|
7282
7371
|
geometry: ewktGeometry,
|
|
7372
|
+
extent: ewktExtent,
|
|
7373
|
+
zoomLevel,
|
|
7283
7374
|
attributes,
|
|
7284
7375
|
layerParams,
|
|
7285
7376
|
eqlParameters,
|
|
@@ -7301,6 +7392,8 @@ const useDataSources = ({ type: widgetType, config, attributes, filters, layerPa
|
|
|
7301
7392
|
dataSources,
|
|
7302
7393
|
configFilters,
|
|
7303
7394
|
ewktGeometry,
|
|
7395
|
+
ewktExtent,
|
|
7396
|
+
zoomLevel,
|
|
7304
7397
|
api,
|
|
7305
7398
|
attributes,
|
|
7306
7399
|
layerParams,
|
|
@@ -12685,7 +12778,7 @@ const EditStringContainer = ({ type, elementConfig, renderElement, }) => {
|
|
|
12685
12778
|
onControlChange(String(lastSelected?.value ?? ""));
|
|
12686
12779
|
setValue(lastSelected?.text ?? "");
|
|
12687
12780
|
}, [onControlChange, setValue]);
|
|
12688
|
-
return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: control?.relatedDataSource ? (jsx(AutoComplete, { value: value, options: options, width: "100%", onChange: onChange, onSelect: onSelect })) : (jsx(Input, { value: controlValue, width: "100%", onChange: (e) => onControlChange(e.target.value) })) })] }));
|
|
12781
|
+
return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: control?.relatedDataSource ? (jsx(AutoComplete, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, value: value, options: options, width: "100%", onChange: onChange, onSelect: onSelect })) : (jsx(Input, { value: controlValue, width: "100%", onChange: (e) => onControlChange(e.target.value) })) })] }));
|
|
12689
12782
|
};
|
|
12690
12783
|
|
|
12691
12784
|
const EditNumberContainer = ({ type, elementConfig, renderElement, }) => {
|
|
@@ -12698,7 +12791,7 @@ const EditDropdownContainer = ({ type, elementConfig, renderElement, }) => {
|
|
|
12698
12791
|
const { value, control, items, onChange } = useEditControl(type, elementConfig);
|
|
12699
12792
|
const { id, style } = elementConfig || {};
|
|
12700
12793
|
const optionsList = useMemo(() => items.map(item => ({ text: item, value: item })), [items]);
|
|
12701
|
-
return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(Dropdown, { zIndex:
|
|
12794
|
+
return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(Dropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, label: control?.label, placeholder: control?.placeholder, options: optionsList, value: value, width: `${control?.width ?? DEFAULT_DROPDOWN_WIDTH}px`, onChange: ([option]) => onChange(option.value) }) })] }));
|
|
12702
12795
|
};
|
|
12703
12796
|
|
|
12704
12797
|
const CheckboxWrapper = styled(ContainerValue).withConfig({ displayName: "CheckboxWrapper", componentId: "sc-169umb6" }) `
|
|
@@ -12739,7 +12832,7 @@ const EditDateContainer = ({ type, elementConfig, renderElement, }) => {
|
|
|
12739
12832
|
const { withTime } = options || {};
|
|
12740
12833
|
const dateValue = useMemo(() => (value ? new Date(value) : undefined), [value]);
|
|
12741
12834
|
const handleChange = useCallback((date) => onChange(date.toISOString()), [onChange]);
|
|
12742
|
-
return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(DatePicker, { value: dateValue, locale: getLocale(language), withTime: withTime ?? false, withHeader: true, width: "100%", onChange: handleChange }) })] }));
|
|
12835
|
+
return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(DatePicker, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, value: dateValue, locale: getLocale(language), withTime: withTime ?? false, withHeader: true, width: "100%", onChange: handleChange }) })] }));
|
|
12743
12836
|
};
|
|
12744
12837
|
|
|
12745
12838
|
const AddButton = ({ multiple = true, accept, onSelectFiles, onSelectFromCatalog, onSelectFromLink, }) => {
|
|
@@ -13887,7 +13980,7 @@ const ElementControl = ({ elementConfig }) => {
|
|
|
13887
13980
|
});
|
|
13888
13981
|
}
|
|
13889
13982
|
}, [changeControls, control?.targetAttributeName]);
|
|
13890
|
-
return (jsx(Dropdown, { zIndex:
|
|
13983
|
+
return (jsx(Dropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: toCssSize(width) ?? "100%", label: label, options: items, value: currentValue, placeholder: placeholder, disabled: isDisabled, onChange: handleChange }));
|
|
13891
13984
|
};
|
|
13892
13985
|
|
|
13893
13986
|
const StyledIconFontSizeMixin = css `
|
|
@@ -14061,7 +14154,7 @@ const LocalLink = memo(({ link, style }) => {
|
|
|
14061
14154
|
navigator.clipboard.writeText(link);
|
|
14062
14155
|
toggleOpen();
|
|
14063
14156
|
}, [link, toggleOpen]);
|
|
14064
|
-
return (jsx(Popover, { open: isOpen, zIndex:
|
|
14157
|
+
return (jsx(Popover, { open: isOpen, zIndex: DASHBOARD_OVERLAY_Z_INDEX, onRequestClose: toggleOpen, anchorOrigin: "bottom-right", targetOrigin: "top-right", anchor: jsx(LocalLinkButton, { onClick: toggleOpen }), children: jsxs(LocalLinkBlank, { children: [jsx(Link, { href: link, target: "_blank", rel: "noreferrer", style: style, children: link }), jsx(LocalLinkCopy, { children: jsx(IconButton, { kind: "copy", onClick: onCopy, children: t("copy", { ns: "dashboard", defaultValue: "Копировать" }) }) })] }) }));
|
|
14065
14158
|
});
|
|
14066
14159
|
|
|
14067
14160
|
const ElementLink = memo(({ type, elementConfig }) => {
|
|
@@ -14682,7 +14775,7 @@ const TableCell = memo(({ attribute, row, canEdit, onChange }) => {
|
|
|
14682
14775
|
}
|
|
14683
14776
|
const renderEditor = () => {
|
|
14684
14777
|
if (type === AttributeType.DateTime) {
|
|
14685
|
-
return (jsx(DatePicker, { focus: true, value: dateValue, locale: getLocale(language), withTime: withTime, withHeader: true, width: "100%", onChange: date => handleChange(date.toISOString()) }));
|
|
14778
|
+
return (jsx(DatePicker, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, focus: true, value: dateValue, locale: getLocale(language), withTime: withTime, withHeader: true, width: "100%", onChange: date => handleChange(date.toISOString()) }));
|
|
14686
14779
|
}
|
|
14687
14780
|
if (NUMBER_EDITOR_TYPES.includes(type)) {
|
|
14688
14781
|
return (jsx(NumberInput, { autoFocus: true, value: value === null || value === undefined ? null : Number(value), width: "100%", numeralDecimalScale: INTEGER_ATTRIBUTE_TYPES.includes(type) ? 0 : undefined, onChange: next => handleChange(next) }));
|
|
@@ -15470,7 +15563,8 @@ const getRenderElement = ({ t, config, elementConfig, attributes = [], layerInfo
|
|
|
15470
15563
|
|
|
15471
15564
|
const ElementModal = memo(({ type = WidgetType.Dashboard, elementConfig }) => {
|
|
15472
15565
|
const { config } = useWidgetConfig(type);
|
|
15473
|
-
const { expandedContainers, attributes
|
|
15566
|
+
const { expandedContainers, attributes } = useWidgetContext(type);
|
|
15567
|
+
const isDataSourceLoading = useDataSourceLoading(type);
|
|
15474
15568
|
const [isOpen, setIsOpen] = useState(false);
|
|
15475
15569
|
const { options } = elementConfig || {};
|
|
15476
15570
|
const { modalId, icon } = options || {};
|
|
@@ -15490,7 +15584,7 @@ const ElementModal = memo(({ type = WidgetType.Dashboard, elementConfig }) => {
|
|
|
15490
15584
|
return null;
|
|
15491
15585
|
const { options: modalOptions } = modalConfig;
|
|
15492
15586
|
const { title, maxWidth, minWidth, minHeight } = modalOptions || {};
|
|
15493
|
-
return (jsxs(Fragment$1, { children: [jsx(ModalIcon, { kind: icon || "new_window", onClick: handleOpen, children: title }), jsxs(Dialog, { maxWidth: maxWidth, minWidth: minWidth, minHeight: minHeight, isOpen: isOpen, modal: true, onCloseRequest: handleClose, style: { paddingBottom: "2rem" }, children: [jsx(DialogTitle, { children: jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [!!title && jsx("span", { children: title }), jsx(IconButton, { kind: "close", onClick: handleClose })] }) }), jsx(DialogContent, { children:
|
|
15587
|
+
return (jsxs(Fragment$1, { children: [jsx(ModalIcon, { kind: icon || "new_window", onClick: handleOpen, children: title }), jsxs(Dialog, { maxWidth: maxWidth, minWidth: minWidth, minHeight: minHeight, isOpen: isOpen, modal: true, onCloseRequest: handleClose, style: { paddingBottom: "2rem" }, children: [jsx(DialogTitle, { children: jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [!!title && jsx("span", { children: title }), jsx(IconButton, { kind: "close", onClick: handleClose })] }) }), jsx(DialogContent, { children: isDataSourceLoading ? (jsx(DashboardLoading, {})) : (jsx(Container, { isColumn: true, noBorders: true, children: jsx(ContainerChildren, { type: type, items: modalContent, isMain: true, renderElement: renderElement }) })) })] })] }));
|
|
15494
15588
|
});
|
|
15495
15589
|
|
|
15496
15590
|
const elementComponents = {
|
|
@@ -15759,7 +15853,7 @@ const TextFilter = ({ type, filter }) => {
|
|
|
15759
15853
|
}, [filterName, filters]);
|
|
15760
15854
|
if (!configFilter)
|
|
15761
15855
|
return null;
|
|
15762
|
-
return (jsx(TextFilterContainer, { children: jsx(AutoComplete, { value: value, placeholder: placeholder, options: variants || options, zIndex:
|
|
15856
|
+
return (jsx(TextFilterContainer, { children: jsx(AutoComplete, { value: value, placeholder: placeholder, options: variants || options, zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: getFilterWidth(width), menuHeight: height ? `${height}px` : "10rem", withInfiniteScroll: !variants, infiniteScrollProps: variants ? undefined : infiniteScrollProps, multiSelect: multiSelect, selected: selected, setOptions: variants ? undefined : setOptions, onChange: onChange, onSelect: onSelect, onGetInnerRef: ref => (suggestRef.current = ref), asyncCallback: variants ? undefined : search, onBlur: onBlur, onKeyUp: isFreeTextInput || (variants && !variants.length) ? onKeyUp : undefined }) }));
|
|
15763
15857
|
};
|
|
15764
15858
|
|
|
15765
15859
|
const getListOptions = (items, filterName, configFilters) => {
|
|
@@ -15805,7 +15899,7 @@ const DropdownFilter = ({ type, filter, elementConfig }) => {
|
|
|
15805
15899
|
}, [changeFilters, filterName]);
|
|
15806
15900
|
if (!configFilter && !variants)
|
|
15807
15901
|
return null;
|
|
15808
|
-
return (jsx(Dropdown, { zIndex:
|
|
15902
|
+
return (jsx(Dropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: getFilterWidth(width), value: value, placeholder: placeholder, options: filterOptions, onChange: onChange }));
|
|
15809
15903
|
};
|
|
15810
15904
|
|
|
15811
15905
|
const CheckboxFilter = ({ type, filter, elementConfig }) => {
|
|
@@ -16075,7 +16169,7 @@ const BarChartFilter = ({ type, config, elementConfig, filter }) => {
|
|
|
16075
16169
|
return (jsx(ThemeProvider, { children: jsx(TooltipContainer, { children: group.groupName === group.value.toString() ? group.value : [group.groupName, group.value].join(": ") }) }));
|
|
16076
16170
|
}, []);
|
|
16077
16171
|
const totalHeight = height + BAR_CHART_HEADER_HEIGHT + BAR_CHART_FOOTER_MARGIN;
|
|
16078
|
-
return (
|
|
16172
|
+
return (jsxs(ChartWrapper, { height: totalHeight, loading: loading, style: style, children: [jsx(ChartTooltipStyles, {}), jsxs(BarChartWrapper, { height: totalHeight, children: [jsxs(BarChartFilterHeader, { height: BAR_CHART_HEADER_HEIGHT, children: [jsxs(BarChartFilterArrows, { children: [jsx(IconButton, { kind: "prev", disabled: prevDisabled, onClick: onPrev }), jsx(IconButton, { kind: "next", disabled: nextDisabled, onClick: onNext })] }), renderSelectedRange] }), jsx(BarChartContainer, { barHeight: barHeight, marginBottom: DEFAULT_BAR_CHART_MARGINS.bottom, children: jsx(BarChart, { data: data, margin: DEFAULT_BAR_CHART_MARGINS, height: height, barWidth: barWidth, barPadding: padding, xAxisPadding: 0, yAxisPadding: 0, selectable: !loading, dynamicTooltipEnable: true, isBarTooltip: true, renderTooltip: renderTooltip, ...rest }) })] })] }));
|
|
16079
16173
|
};
|
|
16080
16174
|
|
|
16081
16175
|
const DEFAULT_FROM_DATA = { minFromData: null, maxFromData: null };
|
|
@@ -16085,6 +16179,7 @@ const RangeDateFilter = ({ type, filter }) => {
|
|
|
16085
16179
|
const { currentPage } = useWidgetPage(type);
|
|
16086
16180
|
const [value, setValue] = useState([undefined, undefined]);
|
|
16087
16181
|
const isInit = useRef(false);
|
|
16182
|
+
const isDefaultApplied = useRef(false);
|
|
16088
16183
|
const updateDebounce = useDebouncedCallback(FILTER_UPDATE_DEBOUNCE);
|
|
16089
16184
|
const { filters: configFilters } = currentPage;
|
|
16090
16185
|
const { filterName, label, minValue, maxValue, withTime } = filter.options;
|
|
@@ -16097,28 +16192,42 @@ const RangeDateFilter = ({ type, filter }) => {
|
|
|
16097
16192
|
maxFromData: !prev.maxFromData ? date : date > prev.maxFromData ? date : prev.maxFromData
|
|
16098
16193
|
};
|
|
16099
16194
|
}, DEFAULT_FROM_DATA) || DEFAULT_FROM_DATA, [configFilter?.attributeValue, dataSource?.features]);
|
|
16100
|
-
const minDate = useMemo(() => minValue || minFromData
|
|
16101
|
-
const maxDate = useMemo(() => maxValue || maxFromData
|
|
16195
|
+
const minDate = useMemo(() => minValue || minFromData?.toISOString(), [minFromData, minValue]);
|
|
16196
|
+
const maxDate = useMemo(() => maxValue || maxFromData?.toISOString(), [maxFromData, maxValue]);
|
|
16197
|
+
// Диапазон по умолчанию: `defaultValue: [from, to]` из конфига фильтра — начальное значение
|
|
16198
|
+
// и точка сброса. Границы календаря (min/max) при этом не меняются; незаданная граница
|
|
16199
|
+
// дефолта падает на них же — как было до появления `defaultValue`.
|
|
16200
|
+
const defaultRange = useMemo(() => {
|
|
16201
|
+
const [from, to] = (Array.isArray(configFilter?.defaultValue) ? configFilter.defaultValue : []);
|
|
16202
|
+
return [getDate(from)?.toISOString() ?? minDate, getDate(to)?.toISOString() ?? maxDate];
|
|
16203
|
+
}, [configFilter?.defaultValue, maxDate, minDate]);
|
|
16102
16204
|
const isEmpty = useMemo(() => isNil(value?.[0]) && isNil(value?.[1]), [value]);
|
|
16103
|
-
const isDefault = useMemo(() => value?.[0] ===
|
|
16205
|
+
const isDefault = useMemo(() => value?.[0] === defaultRange[0] && value?.[1] === defaultRange[1], [defaultRange, value]);
|
|
16104
16206
|
const reset = useCallback(() => {
|
|
16105
|
-
|
|
16207
|
+
const [from, to] = defaultRange;
|
|
16208
|
+
setValue([from, to]);
|
|
16106
16209
|
changeFilters({
|
|
16107
16210
|
[filterName]: {
|
|
16108
|
-
value: [
|
|
16109
|
-
min:
|
|
16110
|
-
max:
|
|
16211
|
+
value: [from, to],
|
|
16212
|
+
min: from,
|
|
16213
|
+
max: to
|
|
16111
16214
|
}
|
|
16112
16215
|
}, configFilter?.resetFilters);
|
|
16113
|
-
}, [changeFilters, configFilter?.resetFilters,
|
|
16216
|
+
}, [changeFilters, configFilter?.resetFilters, defaultRange, filterName]);
|
|
16114
16217
|
const onChange = useCallback((newValue) => {
|
|
16115
16218
|
setValue([newValue[0].toISOString(), newValue[1].toISOString()]);
|
|
16116
16219
|
}, []);
|
|
16220
|
+
// Дефолт применяем однократно — как только обе границы диапазона известны. С `defaultValue`
|
|
16221
|
+
// это происходит сразу, без него — после подгрузки фич связанного источника данных.
|
|
16117
16222
|
useEffect(() => {
|
|
16118
|
-
if (
|
|
16119
|
-
|
|
16120
|
-
|
|
16121
|
-
|
|
16223
|
+
if (isDefaultApplied.current)
|
|
16224
|
+
return;
|
|
16225
|
+
const [from, to] = defaultRange;
|
|
16226
|
+
if (isNil(from) || isNil(to))
|
|
16227
|
+
return;
|
|
16228
|
+
isDefaultApplied.current = true;
|
|
16229
|
+
reset();
|
|
16230
|
+
}, [defaultRange, reset]);
|
|
16122
16231
|
useEffect(() => {
|
|
16123
16232
|
if (!isInit.current) {
|
|
16124
16233
|
isInit.current = true;
|
|
@@ -16136,7 +16245,7 @@ const RangeDateFilter = ({ type, filter }) => {
|
|
|
16136
16245
|
}, [value]); // eslint-disable-line
|
|
16137
16246
|
if (!configFilter)
|
|
16138
16247
|
return null;
|
|
16139
|
-
return (jsx(RangeNumberInput, { label: label || t("interval", { ns: "dashboard", defaultValue: "Интервал" }), selectedOption: { range: true }, minDate: getDate(minDate), maxDate: getDate(maxDate), value: [getDate(value[0]), getDate(value[1])], zIndex:
|
|
16248
|
+
return (jsx(RangeNumberInput, { label: label || t("interval", { ns: "dashboard", defaultValue: "Интервал" }), selectedOption: { range: true }, minDate: getDate(minDate), maxDate: getDate(maxDate), value: [getDate(value[0]), getDate(value[1])], zIndex: DASHBOARD_OVERLAY_Z_INDEX, prefix: jsx(Icon, { kind: "date", disabled: true }), suffix: !isEmpty && !isDefault && jsx(StyledIconButton, { kind: "error", onClick: reset }), withTime: withTime, isDate: true, onChange: onChange }));
|
|
16140
16249
|
};
|
|
16141
16250
|
|
|
16142
16251
|
const getJustifyContent = (align) => {
|
|
@@ -16780,7 +16889,7 @@ const useTreeFilter = (type, filter) => {
|
|
|
16780
16889
|
|
|
16781
16890
|
const TreeFilter = ({ type, filter }) => {
|
|
16782
16891
|
const { width, placeholder, multiSelect, loading, data, setData, expanded, setExpanded, onLoadChildren, selectedIds, selectedCount, selectedLabel, searchValue, onSearchChange, onOpen, onClose, onToggleSelect, onReset, onSave, dirty, } = useTreeFilter(type, filter);
|
|
16783
|
-
return (jsx(TreeFilterContainer, { children: jsx(TreeDropdown, { zIndex:
|
|
16892
|
+
return (jsx(TreeFilterContainer, { children: jsx(TreeDropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: getFilterWidth(width), placeholder: placeholder, multiSelect: multiSelect, loading: loading, data: data, setData: setData, expanded: expanded, setExpanded: setExpanded, onLoadChildren: onLoadChildren, selectedIds: selectedIds, selectedCount: selectedCount, selectedLabel: selectedLabel, searchValue: searchValue, onSearchChange: onSearchChange, onOpen: onOpen, onClose: onClose, onToggleSelect: onToggleSelect, onReset: onReset, onSave: onSave, dirty: dirty }) }));
|
|
16784
16893
|
};
|
|
16785
16894
|
|
|
16786
16895
|
const getFilterComponent = (filterType) => {
|
|
@@ -16842,6 +16951,25 @@ const getFilterValue = ({ selectedFilters, configFilters, filterName, newValue,
|
|
|
16842
16951
|
return valueType === "single" ? newValue : valueType === "range" ? [newValue, newValue] : [newValue];
|
|
16843
16952
|
};
|
|
16844
16953
|
|
|
16954
|
+
/** Условие источника задаётся строкой или массивом строк — приводим к массиву для единообразного обхода. */
|
|
16955
|
+
const toConditionsArray = (value) => Array.isArray(value) ? value : value ? [value] : [];
|
|
16956
|
+
|
|
16957
|
+
const MAP_VIEW_PLACEHOLDERS = MAP_VIEW_FILTER_NAMES.map(name => `${FILTER_PREFIX}${name}`);
|
|
16958
|
+
// Та же граница, что и при подстановке в `formatDataSourceCondition`: составные формы
|
|
16959
|
+
// (`%zoomLevel`, `%extent_id`, `%zoom.min`) принадлежат пользовательским фильтрам, не карте.
|
|
16960
|
+
const hasMapViewPlaceholder = (value) => MAP_VIEW_PLACEHOLDERS.some(placeholder => new RegExp(`${placeholder}(?![\\w.])`).test(value));
|
|
16961
|
+
/**
|
|
16962
|
+
* Источники, чей запрос зависит от текущего вида карты — в `parameters` или `condition` у них
|
|
16963
|
+
* есть `%extent` / `%zoom`. Перезапрашивают при движении карты только их: иначе каждый пан
|
|
16964
|
+
* дёргал бы все запросы страницы.
|
|
16965
|
+
*/
|
|
16966
|
+
const getMapViewDataSources = (dataSources) => dataSources?.filter(({ parameters, condition }) => {
|
|
16967
|
+
const hasInParameters = Object.values(parameters ?? {}).some(value => typeof value === "string" && MAP_VIEW_PLACEHOLDERS.includes(value));
|
|
16968
|
+
if (hasInParameters)
|
|
16969
|
+
return true;
|
|
16970
|
+
return toConditionsArray(condition).some(hasMapViewPlaceholder);
|
|
16971
|
+
}) ?? [];
|
|
16972
|
+
|
|
16845
16973
|
const getFormattedAttributes = (t, data, attributes, config) => {
|
|
16846
16974
|
const showOtherItems = config?.options?.otherItems < data?.length;
|
|
16847
16975
|
const otherIndex = config?.options?.otherItems + 1;
|
|
@@ -17318,7 +17446,7 @@ const Chart = memo(({ config, element, elementConfig, type, renderElement }) =>
|
|
|
17318
17446
|
?.map(item => ({
|
|
17319
17447
|
...item,
|
|
17320
17448
|
color: formatFilterColor(item.name, item.color, defaultColor),
|
|
17321
|
-
})) || []), width: pieSide, height: pieSide, padAngle: angle, outerRadius: radius, cornerRadius: cornerRadius, renderTooltip: renderPieChartTooltip, withTooltip: true, onClick: filterName ? item => onFilter(item.name) : undefined, children: showTotal && (jsx(PieChartCenter, { children: totalWord || roundTotalSum(+totalSum) })) }) }));
|
|
17449
|
+
})) || []), width: pieSide, height: pieSide, padAngle: angle, outerRadius: radius, cornerRadius: cornerRadius, renderTooltip: renderPieChartTooltip, tooltipStyle: PIE_CHART_TOOLTIP_STYLE, withTooltip: true, onClick: filterName ? item => onFilter(item.name) : undefined, children: showTotal && (jsx(PieChartCenter, { children: totalWord || roundTotalSum(+totalSum) })) }) }));
|
|
17322
17450
|
}
|
|
17323
17451
|
const barChartData = getDataFromFilterItems(data[0]?.items);
|
|
17324
17452
|
// Тот же случай, что у stack: обёртка выше тела на подписи оси X (margin.bottom). В fill
|
|
@@ -17378,7 +17506,7 @@ const Chart = memo(({ config, element, elementConfig, type, renderElement }) =>
|
|
|
17378
17506
|
]);
|
|
17379
17507
|
if (!isVisibleContainer(id, expandable, expanded, expandedContainers))
|
|
17380
17508
|
return null;
|
|
17381
|
-
const chartBody = (
|
|
17509
|
+
const chartBody = (jsxs(ChartWrapper, { width: isPieChart && fill ? pieSide : width, height: isStackBar ? "auto" : isPieChart ? (fill ? pieSide : width) : chartHeight, column: column, loading: loading, children: [jsx(ChartTooltipStyles, {}), renderChart] }));
|
|
17382
17510
|
if (!fill)
|
|
17383
17511
|
return chartBody;
|
|
17384
17512
|
// fill: тело центрируется в измеряемой обёртке, ref которой питает ResizeObserver обеими осями.
|
|
@@ -17418,11 +17546,9 @@ const DashboardLoading = memo(() => {
|
|
|
17418
17546
|
});
|
|
17419
17547
|
|
|
17420
17548
|
const Dashboard = memo(({ type = WidgetType.Dashboard, noBorders }) => {
|
|
17421
|
-
const
|
|
17422
|
-
const { currentPage } = useWidgetPage(type);
|
|
17549
|
+
const isDataSourceLoading = useDataSourceLoading(type);
|
|
17423
17550
|
const isDiffPage = useDiffPage(type);
|
|
17424
|
-
|
|
17425
|
-
if (dataSourceLoading || isDiffPage) {
|
|
17551
|
+
if (isDataSourceLoading || isDiffPage) {
|
|
17426
17552
|
return (jsx(DashboardLoading, {}));
|
|
17427
17553
|
}
|
|
17428
17554
|
return (jsx(PagesContainer, { type: type, noBorders: noBorders }));
|
|
@@ -18049,5 +18175,5 @@ const DEFAULT_HEATMAP_STYLE = {
|
|
|
18049
18175
|
],
|
|
18050
18176
|
};
|
|
18051
18177
|
|
|
18052
|
-
export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddButtonRow, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CONTAINERS_GROUP_DEFAULTS, CONTAINER_BODY_ATTRIBUTE, CONTAINER_BODY_FILL_STYLE, CameraContainer, Chart, ChartContainer, ChartLegend, ChartLoading, Container, ContainerChildren, ContainerLoading, ContainerRoot, ContainerTemplate, ContainerWrapper, ContainersGroupContainer, DEFAULT_ATTRIBUTE_NAME, DEFAULT_BARCHART_RADIUS, DEFAULT_BASE_MAP, DEFAULT_BLUR, DEFAULT_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_RADIUS, DEFAULT_CIRCLE_STROKE_WIDTH, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_BASE, DEFAULT_FILL_EXTRUSION_HEIGHT, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_EXTRUSION_VERTICAL_GRADIENT, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_GRID_GAP, DEFAULT_HEATMAP_COLOR, DEFAULT_HEATMAP_INTENSITY, DEFAULT_HEATMAP_RADIUS, DEFAULT_HEATMAP_STYLE, DEFAULT_HEATMAP_WEIGHT, DEFAULT_ICON_ANCHOR, DEFAULT_ICON_OVERLAP, DEFAULT_ICON_PADDING, DEFAULT_ICON_ROTATE, DEFAULT_ICON_SIZE, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_STYLE, DEFAULT_LINE_WIDTH, DEFAULT_LNG, DEFAULT_OPACITY, DEFAULT_PAGES_CONFIG, DEFAULT_PIECHART_RADIUS, DEFAULT_SYMBOL_COLOR, DEFAULT_SYMBOL_HALO_COLOR, DEFAULT_SYMBOL_PLACEMENT, DEFAULT_SYMBOL_SPACING, DEFAULT_SYMBOL_STYLE, DEFAULT_TEXT_ANCHOR, DEFAULT_TEXT_JUSTIFY, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_TRANSFORM, DEFAULT_TRACK_FR, DEFAULT_TRANSLATE, DEFAULT_ZOOM, DRAG_THRESHOLD_PX, Dashboard, DashboardCheckbox, DashboardChip, DashboardContent, DashboardContext, DashboardDefaultHeader, DashboardHeader, DashboardLoading, DashboardPlaceholder, DashboardPlaceholderWrap, DashboardProvider, DashboardWrapper, DataSourceContainer, DataSourceError, DataSourceErrorContainer, DataSourceInnerContainer, DataSourceProgressContainer, DateFormat, DefaultAttributesContainer, DefaultHeaderContainer, DefaultHeaderWrapper, DividerContainer, EMPTY_DATA_SOURCE_LAYER_INFO, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTable, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FR_PRECISION, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GRID_AUTO_FILL_DEFAULTS, GRID_CELL_ATTR, GRID_CELL_ID_PREFIX, GRID_DRAGGING_ATTR, GRID_DRAG_SOURCE_ATTR, GRID_DROP_TARGET_ATTR, GRID_FILL_DEFAULTS, GRID_HANDLE_ATTR, GRID_HANDLE_PROPS, GRID_ROW_ID_PREFIX, GlobalContext, GlobalProvider, GridRowContainer, HANDLE_BLEED_PX, Header, HeaderContainer, HeaderFontColorMixin, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroupList, LayerIcon, LayerIconContainer, LayerListContainer, LayerTree, LayersContainer, LayersListWrapper, LinearProgressContainer, LogTerminal, LogoContainer, MAX_CHART_WIDTH, MAX_TRACKS, MIN_TRACK_PX, MIN_TRACK_RATIO, Map$1 as Map, MapContext, MapProvider, NO_CELL_DRAG_SELECTOR, NO_CONTENT_VALUE, NUMERIC_ATTRIBUTE_TYPES, NoLiveSnapshotContainer, OBJECT_FITS, OVERFLOWS, OneColumnContainer, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, QUERY_DESCRIPTION_CACHE_TTL, RoundedBackgroundContainer, SAVE_HOOK_RESULT_DURATION, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, StructuredDataContainer, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TITLE_SLOT_IDS, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, VIEW_MODES, WidgetType, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyTreeFilterToCondition, applyVarsToCondition, asAttributeName, asChartId, asContainerId, asDataSourceName, asFilterName, asLayerName, asModalId, asResourceId, asTabId, buildGridTemplate, buildTrackTemplate, checkEqualOrIncludes, checkIsLoading, collectConfigIds, containsNodeId, createConfigLayer, createConfigPage, createGridCell, createGridIdFactory, createGridRow, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, findCellContext, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getAverageTrackSize, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDataSourceLayerInfo, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getImageUrl, getLayerClientStyle, getLayerInfo, getLayerInfoAttribute, getLayerInfoFromDataSources, getLayoutChildren, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getTrackSize, getTrackSizeKey, getTrackSizes, getWrapperSizeStyle, hexToRgba, isEmptyElementValue, isEmptyValue, isFeaturesFilterValue, isFillSize, isFrSize, isGridNode, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isRootOwningContainer, isTreeFilterValue, isVisibleContainer, mapNodeById, mergeAttributeConfigurations, metersPerPixel, noMarginMixin, numberOptions, parseFrValue, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, removeTracks, replaceNodesByIds, rgbToHex, roundFr, roundTotalSum, setLayoutChildren, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toCssSize, toFrSize, toPxNumber, toRenderableValue, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, updateDataSource, useAfterSave, useAppHeight, useAttachmentItems, useAttachmentPreviewImages, useAutoCompleteControl, useBeforeSave, useChartChange, useChartData, useContainerAttributes, useContainerRoot, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSources, useDebouncedCallback, useDiffPage, useEditGroupAttributes, useEqualTileWidth, useExpandableContainers, useExportPdf, useFeatureSaveHooks, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useIconsFromLayers, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRemoteTask, useRenderElement, useResizeBox, useSavePrototypeBuilder, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useWrapperSize, useZoomToFeatures, useZoomToPoint, withTrackSize };
|
|
18178
|
+
export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddButtonRow, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CONTAINERS_GROUP_DEFAULTS, CONTAINER_BODY_ATTRIBUTE, CONTAINER_BODY_FILL_STYLE, CameraContainer, Chart, ChartContainer, ChartLegend, ChartLoading, Container, ContainerChildren, ContainerLoading, ContainerRoot, ContainerTemplate, ContainerWrapper, ContainersGroupContainer, DASHBOARD_OVERLAY_Z_INDEX, DEFAULT_ATTRIBUTE_NAME, DEFAULT_BARCHART_RADIUS, DEFAULT_BASE_MAP, DEFAULT_BLUR, DEFAULT_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_RADIUS, DEFAULT_CIRCLE_STROKE_WIDTH, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_BASE, DEFAULT_FILL_EXTRUSION_HEIGHT, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_EXTRUSION_VERTICAL_GRADIENT, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_GRID_GAP, DEFAULT_HEATMAP_COLOR, DEFAULT_HEATMAP_INTENSITY, DEFAULT_HEATMAP_RADIUS, DEFAULT_HEATMAP_STYLE, DEFAULT_HEATMAP_WEIGHT, DEFAULT_ICON_ANCHOR, DEFAULT_ICON_OVERLAP, DEFAULT_ICON_PADDING, DEFAULT_ICON_ROTATE, DEFAULT_ICON_SIZE, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_STYLE, DEFAULT_LINE_WIDTH, DEFAULT_LNG, DEFAULT_OPACITY, DEFAULT_PAGES_CONFIG, DEFAULT_PIECHART_RADIUS, DEFAULT_SYMBOL_COLOR, DEFAULT_SYMBOL_HALO_COLOR, DEFAULT_SYMBOL_PLACEMENT, DEFAULT_SYMBOL_SPACING, DEFAULT_SYMBOL_STYLE, DEFAULT_TEXT_ANCHOR, DEFAULT_TEXT_JUSTIFY, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_TRANSFORM, DEFAULT_TRACK_FR, DEFAULT_TRANSLATE, DEFAULT_ZOOM, DRAG_THRESHOLD_PX, Dashboard, DashboardCheckbox, DashboardChip, DashboardContent, DashboardContext, DashboardDefaultHeader, DashboardHeader, DashboardLoading, DashboardPlaceholder, DashboardPlaceholderWrap, DashboardProvider, DashboardWrapper, DataSourceContainer, DataSourceError, DataSourceErrorContainer, DataSourceInnerContainer, DataSourceProgressContainer, DateFormat, DefaultAttributesContainer, DefaultHeaderContainer, DefaultHeaderWrapper, DividerContainer, EMPTY_DATA_SOURCE_LAYER_INFO, EXTENT_FILTER_NAME, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTable, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FR_PRECISION, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GEOMETRY_FILTER_NAME, GRID_AUTO_FILL_DEFAULTS, GRID_CELL_ATTR, GRID_CELL_ID_PREFIX, GRID_DRAGGING_ATTR, GRID_DRAG_SOURCE_ATTR, GRID_DROP_TARGET_ATTR, GRID_FILL_DEFAULTS, GRID_HANDLE_ATTR, GRID_HANDLE_PROPS, GRID_ROW_ID_PREFIX, GlobalContext, GlobalProvider, GridRowContainer, HANDLE_BLEED_PX, Header, HeaderContainer, HeaderFontColorMixin, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroupList, LayerIcon, LayerIconContainer, LayerListContainer, LayerTree, LayersContainer, LayersListWrapper, LinearProgressContainer, LogTerminal, LogoContainer, MAP_VIEW_FILTER_NAMES, MAX_CHART_WIDTH, MAX_TRACKS, MIN_TRACK_PX, MIN_TRACK_RATIO, Map$1 as Map, MapContext, MapProvider, NO_CELL_DRAG_SELECTOR, NO_CONTENT_VALUE, NUMERIC_ATTRIBUTE_TYPES, NoLiveSnapshotContainer, OBJECT_FITS, OVERFLOWS, OneColumnContainer, PIE_CHART_TOOLTIP_STYLE, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, QUERY_DESCRIPTION_CACHE_TTL, RoundedBackgroundContainer, SAVE_HOOK_RESULT_DURATION, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, StructuredDataContainer, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TITLE_SLOT_IDS, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, VIEW_MODES, WidgetType, ZOOM_FILTER_NAME, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyTreeFilterToCondition, applyVarsToCondition, asAttributeName, asChartId, asContainerId, asDataSourceName, asFilterName, asLayerName, asModalId, asResourceId, asTabId, buildGridTemplate, buildTrackTemplate, checkEqualOrIncludes, checkIsLoading, collectConfigIds, containsNodeId, createConfigLayer, createConfigPage, createGridCell, createGridIdFactory, createGridRow, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, findCellContext, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getAverageTrackSize, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDataSourceLayerInfo, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getImageUrl, getLayerClientStyle, getLayerInfo, getLayerInfoAttribute, getLayerInfoFromDataSources, getLayoutChildren, getMapViewDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getTrackSize, getTrackSizeKey, getTrackSizes, getWrapperSizeStyle, hexToRgba, isEmptyElementValue, isEmptyValue, isFeaturesFilterValue, isFillSize, isFrSize, isGridNode, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isRootOwningContainer, isTreeFilterValue, isVisibleContainer, mapNodeById, mergeAttributeConfigurations, metersPerPixel, noMarginMixin, numberOptions, parseFrValue, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, removeTracks, replaceNodesByIds, rgbToHex, roundFr, roundTotalSum, setLayoutChildren, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toConditionsArray, toCssSize, toFrSize, toPxNumber, toRenderableValue, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, updateDataSource, useAfterSave, useAppHeight, useAttachmentItems, useAttachmentPreviewImages, useAutoCompleteControl, useBeforeSave, useChartChange, useChartData, useContainerAttributes, useContainerRoot, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSourceLoading, useDataSources, useDebouncedCallback, useDiffPage, useEditGroupAttributes, useEqualTileWidth, useExpandableContainers, useExportPdf, useFeatureSaveHooks, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useIconsFromLayers, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRemoteTask, useRenderElement, useResizeBox, useSavePrototypeBuilder, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useWrapperSize, useZoomToFeatures, useZoomToPoint, withTrackSize };
|
|
18053
18179
|
//# sourceMappingURL=react.esm.js.map
|