@evergis/react 4.0.14 → 4.0.20
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/elements/ElementSvg/index.d.ts +1 -2
- package/dist/components/Dashboard/elements/registry.d.ts +1 -1
- package/dist/components/Dashboard/types.d.ts +1 -1
- package/dist/index.js +91 -28
- package/dist/index.js.map +1 -1
- package/dist/react.esm.js +91 -28
- package/dist/react.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { QueryLayerServiceInfoDc } from '@evergis/api';
|
|
3
3
|
import { ClientFeatureAttribute, ContainerProps } from '../../types';
|
|
4
|
-
interface ElementSvgProps extends ContainerProps {
|
|
4
|
+
export interface ElementSvgProps extends ContainerProps {
|
|
5
5
|
layerInfo?: QueryLayerServiceInfoDc;
|
|
6
6
|
attributes?: ClientFeatureAttribute[];
|
|
7
7
|
}
|
|
8
8
|
export declare const ElementSvg: FC<ElementSvgProps>;
|
|
9
|
-
export {};
|
|
@@ -2,7 +2,7 @@ export declare const elementComponents: {
|
|
|
2
2
|
readonly control: import('react').FC<import('..').ContainerProps>;
|
|
3
3
|
readonly image: import('react').FC<import('..').ContainerProps>;
|
|
4
4
|
readonly slideshow: import('react').FC<import('./ElementSlideshow/types').DashboardSlideshowProps>;
|
|
5
|
-
readonly svg: import('react').FC<import('
|
|
5
|
+
readonly svg: import('react').FC<import('./ElementSvg').ElementSvgProps>;
|
|
6
6
|
readonly icon: import('react').FC<import('..').ContainerProps>;
|
|
7
7
|
readonly tooltip: import('react').FC<import('..').ContainerProps>;
|
|
8
8
|
readonly tags: import('react').FC<import('..').ContainerProps>;
|
|
@@ -33,7 +33,7 @@ export interface ConfigRelatedResource {
|
|
|
33
33
|
fileName?: string;
|
|
34
34
|
methodName?: string;
|
|
35
35
|
}
|
|
36
|
-
export interface ConfigControl extends Pick<ConfigOptions, "relatedDataSource" | "minValue" | "maxValue" | "step" | "label" | "placeholder" | "width"> {
|
|
36
|
+
export interface ConfigControl extends Pick<ConfigOptions, "relatedDataSource" | "minValue" | "maxValue" | "step" | "label" | "placeholder" | "width" | "variants"> {
|
|
37
37
|
type: "dropdown" | "checkbox" | "chips" | "string";
|
|
38
38
|
attributeName?: string;
|
|
39
39
|
targetAttributeName?: string;
|
package/dist/index.js
CHANGED
|
@@ -4204,7 +4204,9 @@ function getLinePoints(numPoints, svgLine) {
|
|
|
4204
4204
|
else {
|
|
4205
4205
|
interval = lineLength / (numPoints - 1);
|
|
4206
4206
|
}
|
|
4207
|
-
return range(numPoints)
|
|
4207
|
+
return range(numPoints)
|
|
4208
|
+
.filter(d => d * interval)
|
|
4209
|
+
.map(d => {
|
|
4208
4210
|
const value = d * interval;
|
|
4209
4211
|
const { x, y } = svgLine.getPointAtLength(value);
|
|
4210
4212
|
return [x, y];
|
|
@@ -4225,7 +4227,9 @@ function wrap() {
|
|
|
4225
4227
|
const useChartChange = ({ dataSources, chartId, width, height, relatedAttributes, defaultColor, fontColor, markers, showMarkers, }) => {
|
|
4226
4228
|
const { t } = useGlobalContext();
|
|
4227
4229
|
const { layerInfos } = useWidgetContext();
|
|
4228
|
-
const strokeColors = relatedAttributes
|
|
4230
|
+
const strokeColors = relatedAttributes
|
|
4231
|
+
.filter(({ chartAxis }) => chartAxis === "y")
|
|
4232
|
+
.map(({ axisColor }) => axisColor);
|
|
4229
4233
|
const ref = React.useRef({
|
|
4230
4234
|
path: null,
|
|
4231
4235
|
area: null,
|
|
@@ -4246,13 +4250,15 @@ const useChartChange = ({ dataSources, chartId, width, height, relatedAttributes
|
|
|
4246
4250
|
const customize = React.useCallback(({ svg }) => {
|
|
4247
4251
|
svg.style("overflow", "visible");
|
|
4248
4252
|
svg
|
|
4249
|
-
.selectAll(`.${charts.lineChartClassNames.lineChartXScaleGlobal} line,
|
|
4250
|
-
.${charts.lineChartClassNames.lineChartYScaleGlobal} line,
|
|
4253
|
+
.selectAll(`.${charts.lineChartClassNames.lineChartXScaleGlobal} line,
|
|
4254
|
+
.${charts.lineChartClassNames.lineChartYScaleGlobal} line,
|
|
4251
4255
|
.domain`)
|
|
4252
4256
|
.each((_, index, nodes) => {
|
|
4253
4257
|
nodes[index].remove();
|
|
4254
4258
|
});
|
|
4255
|
-
svg
|
|
4259
|
+
svg
|
|
4260
|
+
.selectAll(`.${charts.lineChartClassNames.lineChartXScaleGlobal} .tick`)
|
|
4261
|
+
.each((_, index, nodes) => {
|
|
4256
4262
|
if (!index) {
|
|
4257
4263
|
nodes[index].style.textAnchor = "start";
|
|
4258
4264
|
}
|
|
@@ -4273,16 +4279,28 @@ const useChartChange = ({ dataSources, chartId, width, height, relatedAttributes
|
|
|
4273
4279
|
}
|
|
4274
4280
|
}
|
|
4275
4281
|
});
|
|
4276
|
-
svg
|
|
4282
|
+
svg
|
|
4283
|
+
.selectAll(`.${charts.lineChartClassNames.lineChartXScaleGlobal} .tick text`)
|
|
4284
|
+
.attr("y", 16);
|
|
4277
4285
|
svg
|
|
4278
4286
|
.selectAll(`.${charts.lineChartClassNames.lineChartYScaleGlobal} .tick text`)
|
|
4279
4287
|
.text(item => {
|
|
4280
4288
|
if (!item)
|
|
4281
4289
|
return 0;
|
|
4282
4290
|
const dataSource = dataSources?.find(({ name }) => name === relatedAttributes[0].dataSourceName);
|
|
4283
|
-
const layerInfo = dataSource
|
|
4291
|
+
const layerInfo = dataSource
|
|
4292
|
+
? layerInfos.find(({ name }) => name === dataSource.layerName)
|
|
4293
|
+
: null;
|
|
4284
4294
|
const attribute = layerInfo?.layerDefinition.attributes[relatedAttributes[0].attributeName];
|
|
4285
|
-
return attribute
|
|
4295
|
+
return attribute
|
|
4296
|
+
? formatAttributeValue({
|
|
4297
|
+
t,
|
|
4298
|
+
type: attribute.type,
|
|
4299
|
+
value: item,
|
|
4300
|
+
stringFormat: attribute.stringFormat,
|
|
4301
|
+
noUnits: true,
|
|
4302
|
+
})
|
|
4303
|
+
: item;
|
|
4286
4304
|
})
|
|
4287
4305
|
.each(wrap);
|
|
4288
4306
|
svg.selectAll(".tick text").attr("style", `color: ${fontColor}`);
|
|
@@ -4304,11 +4322,11 @@ const useChartChange = ({ dataSources, chartId, width, height, relatedAttributes
|
|
|
4304
4322
|
.attr("fill", `url(#${gradientId})`)
|
|
4305
4323
|
.attr("stroke-width", "0")
|
|
4306
4324
|
.attr("fill-opacity", FILL_OPACITY);
|
|
4307
|
-
defs.push(`
|
|
4308
|
-
<linearGradient id="${gradientId}" x1="0" y1="0" x2="0" y2="1">
|
|
4309
|
-
<stop offset="0" stop-color="${color}" stop-opacity="1" />
|
|
4310
|
-
<stop offset="1" stop-color="${color}" stop-opacity="0" />
|
|
4311
|
-
</linearGradient>
|
|
4325
|
+
defs.push(`
|
|
4326
|
+
<linearGradient id="${gradientId}" x1="0" y1="0" x2="0" y2="1">
|
|
4327
|
+
<stop offset="0" stop-color="${color}" stop-opacity="1" />
|
|
4328
|
+
<stop offset="1" stop-color="${color}" stop-opacity="0" />
|
|
4329
|
+
</linearGradient>
|
|
4312
4330
|
`);
|
|
4313
4331
|
ref.current = {
|
|
4314
4332
|
path: newPath,
|
|
@@ -4318,7 +4336,19 @@ const useChartChange = ({ dataSources, chartId, width, height, relatedAttributes
|
|
|
4318
4336
|
onChange();
|
|
4319
4337
|
});
|
|
4320
4338
|
svg.append("defs").html(() => defs.join(""));
|
|
4321
|
-
}, [
|
|
4339
|
+
}, [
|
|
4340
|
+
fontColor,
|
|
4341
|
+
dataSources,
|
|
4342
|
+
layerInfos,
|
|
4343
|
+
relatedAttributes,
|
|
4344
|
+
chartId,
|
|
4345
|
+
strokeColors,
|
|
4346
|
+
defaultColor,
|
|
4347
|
+
width,
|
|
4348
|
+
onChange,
|
|
4349
|
+
showMarkers,
|
|
4350
|
+
markers,
|
|
4351
|
+
]);
|
|
4322
4352
|
return [customize, onChange];
|
|
4323
4353
|
};
|
|
4324
4354
|
|
|
@@ -8466,11 +8496,19 @@ const ElementChart = React.memo(({ type, elementConfig, renderElement }) => {
|
|
|
8466
8496
|
const ElementChips = React.memo(({ type, elementConfig }) => {
|
|
8467
8497
|
const { attributes } = useWidgetContext(type);
|
|
8468
8498
|
const { attributeName, options, style } = elementConfig || {};
|
|
8469
|
-
const { separator, bgColor, fontColor, fontSize, colorAttribute } = options || {};
|
|
8499
|
+
const { separator, bgColor, fontColor, fontSize, colorAttribute, variants, } = options || {};
|
|
8470
8500
|
const valueAttr = getAttributeByName(attributeName, attributes);
|
|
8471
8501
|
const colorAttr = getAttributeByName(colorAttribute, attributes);
|
|
8472
|
-
const tags =
|
|
8473
|
-
|
|
8502
|
+
const tags = React.useMemo(() => {
|
|
8503
|
+
if (variants?.length) {
|
|
8504
|
+
return variants.map(({ text, color }) => ({
|
|
8505
|
+
text,
|
|
8506
|
+
color,
|
|
8507
|
+
}));
|
|
8508
|
+
}
|
|
8509
|
+
return (valueAttr?.value?.split(separator || ",") ?? []).map(text => ({ text, color: undefined }));
|
|
8510
|
+
}, [variants, valueAttr?.value, separator]);
|
|
8511
|
+
return (jsxRuntime.jsx(DashboardChipsContainer, { style: style, children: tags.map(tag => (jsxRuntime.jsx(DashboardChip$1, { text: tag.text, "$bgColor": tag.color || colorAttr?.value || bgColor, "$fontColor": fontColor, "$fontSize": fontSize, "$isDefault": !tag.color && !colorAttr?.value }, tag.text))) }));
|
|
8474
8512
|
});
|
|
8475
8513
|
|
|
8476
8514
|
const ElementControl = ({ elementConfig }) => {
|
|
@@ -8484,6 +8522,9 @@ const ElementControl = ({ elementConfig }) => {
|
|
|
8484
8522
|
const attribute = React.useMemo(() => attributes?.find(({ name }) => name === control?.targetAttributeName), [attributes, control?.targetAttributeName]);
|
|
8485
8523
|
const dataSource = React.useMemo(() => getDataSource(relatedDataSource, dataSources), [relatedDataSource, dataSources]);
|
|
8486
8524
|
const items = React.useMemo(() => {
|
|
8525
|
+
if (control?.variants) {
|
|
8526
|
+
return control.variants;
|
|
8527
|
+
}
|
|
8487
8528
|
if (!dataSource?.features?.length || !attributeName) {
|
|
8488
8529
|
return [];
|
|
8489
8530
|
}
|
|
@@ -8491,14 +8532,23 @@ const ElementControl = ({ elementConfig }) => {
|
|
|
8491
8532
|
value: item.properties?.[attributeName] || "",
|
|
8492
8533
|
text: item.properties?.[control?.attributeName || attributeName] || "",
|
|
8493
8534
|
}));
|
|
8494
|
-
}, [
|
|
8535
|
+
}, [
|
|
8536
|
+
control?.variants,
|
|
8537
|
+
control?.attributeName,
|
|
8538
|
+
dataSource?.features,
|
|
8539
|
+
attributeName,
|
|
8540
|
+
]);
|
|
8495
8541
|
const isDisabled = React.useMemo(() => {
|
|
8496
8542
|
const attr = layerInfo?.configuration?.attributesConfiguration?.attributes?.find(item => item.attributeName === control?.targetAttributeName);
|
|
8497
8543
|
return !attr?.isEditable;
|
|
8498
8544
|
}, [
|
|
8499
8545
|
control?.targetAttributeName,
|
|
8500
|
-
layerInfo?.configuration
|
|
8546
|
+
layerInfo?.configuration
|
|
8547
|
+
?.attributesConfiguration?.attributes,
|
|
8501
8548
|
]);
|
|
8549
|
+
const currentValue = controls?.[control?.targetAttributeName] ??
|
|
8550
|
+
attribute?.value ??
|
|
8551
|
+
defaultValue;
|
|
8502
8552
|
const handleChange = React.useCallback(([option]) => {
|
|
8503
8553
|
if (control?.targetAttributeName && changeControls) {
|
|
8504
8554
|
changeControls({
|
|
@@ -8506,9 +8556,7 @@ const ElementControl = ({ elementConfig }) => {
|
|
|
8506
8556
|
});
|
|
8507
8557
|
}
|
|
8508
8558
|
}, [changeControls, control?.targetAttributeName]);
|
|
8509
|
-
return (jsxRuntime.jsx(uilibGl.Dropdown, { zIndex: 1000, width: `${width ?? DEFAULT_DROPDOWN_WIDTH}px`, label: label, options: items, value:
|
|
8510
|
-
attribute?.value ??
|
|
8511
|
-
defaultValue, placeholder: placeholder, disabled: isDisabled, onChange: handleChange }));
|
|
8559
|
+
return (jsxRuntime.jsx(uilibGl.Dropdown, { zIndex: 1000, width: `${width ?? DEFAULT_DROPDOWN_WIDTH}px`, label: label, options: items, value: currentValue, placeholder: placeholder, disabled: isDisabled, onChange: handleChange }));
|
|
8512
8560
|
};
|
|
8513
8561
|
|
|
8514
8562
|
const StyledIconFontSizeMixin = styled.css `
|
|
@@ -8578,7 +8626,7 @@ const ElementLegend = React.memo(({ type, element, elementConfig }) => {
|
|
|
8578
8626
|
return axes.map(({ alias, axisColor }) => {
|
|
8579
8627
|
return {
|
|
8580
8628
|
name: alias,
|
|
8581
|
-
color: axisColor
|
|
8629
|
+
color: axisColor,
|
|
8582
8630
|
};
|
|
8583
8631
|
});
|
|
8584
8632
|
}
|
|
@@ -8590,8 +8638,16 @@ const ElementLegend = React.memo(({ type, element, elementConfig }) => {
|
|
|
8590
8638
|
const attribute = getAttributeByName(item.name, attributes);
|
|
8591
8639
|
return { ...item, name: attribute?.alias || item.name };
|
|
8592
8640
|
});
|
|
8593
|
-
}, [
|
|
8594
|
-
|
|
8641
|
+
}, [
|
|
8642
|
+
attributes,
|
|
8643
|
+
axes,
|
|
8644
|
+
data,
|
|
8645
|
+
options.chartType,
|
|
8646
|
+
relatedDataSources,
|
|
8647
|
+
dataSources,
|
|
8648
|
+
]);
|
|
8649
|
+
return !chartElement?.options?.expanded ||
|
|
8650
|
+
expandedContainers?.[chartElement.id] ? (jsxRuntime.jsx(ChartLegend, { data: legendData, loading: loading, chartElement: chartElement, twoColumns: twoColumns, fontSize: fontSize, type: type })) : null;
|
|
8595
8651
|
});
|
|
8596
8652
|
|
|
8597
8653
|
const ExternalLink = styled(uilibGl.IconButton).attrs(() => ({
|
|
@@ -10606,7 +10662,9 @@ const useChartData = ({ element, type }) => {
|
|
|
10606
10662
|
const dataSource = configDataSources.find(({ name }) => name === dataSourceName);
|
|
10607
10663
|
const layerInfo = layerInfos?.find(item => item?.name === dataSource?.layerName);
|
|
10608
10664
|
const featureDataSource = getDataSource(dataSourceName, dataSources);
|
|
10609
|
-
const hasLayerInfo = !!layerInfo ||
|
|
10665
|
+
const hasLayerInfo = !!layerInfo ||
|
|
10666
|
+
!!featureDataSource?.attributeDefinition ||
|
|
10667
|
+
!!featureDataSource?.features?.length;
|
|
10610
10668
|
return {
|
|
10611
10669
|
items: hasLayerInfo
|
|
10612
10670
|
? getDataFromRelatedFeatures({
|
|
@@ -10616,7 +10674,11 @@ const useChartData = ({ element, type }) => {
|
|
|
10616
10674
|
relatedConfig: relatedAxis,
|
|
10617
10675
|
dataSource: featureDataSource,
|
|
10618
10676
|
layerInfo: layerInfo ||
|
|
10619
|
-
{
|
|
10677
|
+
{
|
|
10678
|
+
layerDefinition: {
|
|
10679
|
+
attributes: featureDataSource.attributeDefinition,
|
|
10680
|
+
},
|
|
10681
|
+
},
|
|
10620
10682
|
})
|
|
10621
10683
|
: null,
|
|
10622
10684
|
color: axisColor,
|
|
@@ -10626,7 +10688,8 @@ const useChartData = ({ element, type }) => {
|
|
|
10626
10688
|
layerInfo,
|
|
10627
10689
|
};
|
|
10628
10690
|
})
|
|
10629
|
-
.filter(({ items }) => items === null ||
|
|
10691
|
+
.filter(({ items }) => items === null ||
|
|
10692
|
+
(items?.length && !items.every(({ value }) => value === null)));
|
|
10630
10693
|
}
|
|
10631
10694
|
return [
|
|
10632
10695
|
{
|