@deviceinsight/ng-ui-components 7.21.0 → 7.23.0
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/README.md +104 -9
- package/dist/index.cjs +122 -139
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +122 -139
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/__mocks__/i18n.d.ts.map +1 -1
- package/dist/types/components/chart/Chart.d.ts +11 -3
- package/dist/types/components/chart/Chart.d.ts.map +1 -1
- package/dist/types/components/chart/Chart.stories.d.ts +7 -7
- package/dist/types/components/chart/Chart.stories.d.ts.map +1 -1
- package/dist/types/components/colorpicker/ColorTextInput.d.ts.map +1 -1
- package/dist/types/components/colorpicker/GradientColorPicker.stories.d.ts.map +1 -1
- package/dist/types/components/colorpicker/GridColorPicker.stories.d.ts.map +1 -1
- package/dist/types/components/contentHeader/ContentHeader.d.ts.map +1 -1
- package/dist/types/components/contentHeader/ContentHeader.stories.d.ts.map +1 -1
- package/dist/types/components/infobox/InfoBox.d.ts.map +1 -1
- package/dist/types/components/infobox/InfoBox.stories.d.ts.map +1 -1
- package/dist/types/components/input/DateInput.d.ts.map +1 -1
- package/dist/types/components/input/DateInput.stories.d.ts +2 -1
- package/dist/types/components/input/DateInput.stories.d.ts.map +1 -1
- package/dist/types/components/input/DateTimeInput.d.ts.map +1 -1
- package/dist/types/components/input/DateTimeInput.stories.d.ts +12 -11
- package/dist/types/components/input/DateTimeInput.stories.d.ts.map +1 -1
- package/dist/types/components/input/SelectWithSearch.d.ts.map +1 -1
- package/dist/types/components/input/SelectWithSearch.stories.d.ts.map +1 -1
- package/dist/types/components/input/SelectWithSearchAsync.d.ts +5 -1
- package/dist/types/components/input/SelectWithSearchAsync.d.ts.map +1 -1
- package/dist/types/components/input/SelectWithSearchAsync.stories.d.ts.map +1 -1
- package/dist/types/components/input/UrnInput.d.ts.map +1 -1
- package/dist/types/components/input/UrnInput.stories.d.ts.map +1 -1
- package/dist/types/components/input/ValidatedTextInput.d.ts.map +1 -1
- package/dist/types/components/input/ValidatedTextInput.stories.d.ts.map +1 -1
- package/dist/types/components/link/RouteLink.stories.d.ts.map +1 -1
- package/dist/types/components/multiMenu/MultiMenu.stories.d.ts.map +1 -1
- package/dist/types/components/multiMenu/components/MultiMenuContext.d.ts.map +1 -1
- package/dist/types/components/multiMenu/components/MultiMenuItem.d.ts.map +1 -1
- package/dist/types/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/types/components/pagination/Pagination.stories.d.ts.map +1 -1
- package/dist/types/components/periodpicker/PeriodPicker.stories.d.ts.map +1 -1
- package/dist/types/components/periodpicker/components/MonthPicker.d.ts.map +1 -1
- package/dist/types/components/periodpicker/periods.d.ts.map +1 -1
- package/dist/types/components/prompt/Prompt.stories.d.ts.map +1 -1
- package/dist/types/components/reactable/Reactable.d.ts.map +1 -1
- package/dist/types/components/reactable/Reactable.stories.d.ts.map +1 -1
- package/dist/types/components/reactable/helpers/ReactableTableFilterRow.d.ts.map +1 -1
- package/dist/types/components/reactable/helpers/ReactableTableHeader.d.ts +1 -1
- package/dist/types/components/reactable/helpers/ReactableTableHeader.d.ts.map +1 -1
- package/dist/types/components/reactable/helpers/ReactableTableRow.d.ts.map +1 -1
- package/dist/types/components/reactable/helpers/ReactableTextFilter.d.ts.map +1 -1
- package/dist/types/components/reactableWithClientSidePagination/ReactableWithClientSidePagination.d.ts +7 -1
- package/dist/types/components/reactableWithClientSidePagination/ReactableWithClientSidePagination.d.ts.map +1 -1
- package/dist/types/components/reactableWithClientSidePagination/ReactableWithClientSidePagination.stories.d.ts.map +1 -1
- package/dist/types/components/slider/RcSliderWithTooltip.d.ts.map +1 -1
- package/dist/types/components/slider/Slider.d.ts.map +1 -1
- package/dist/types/components/slider/Slider.stories.d.ts.map +1 -1
- package/dist/types/components/svg/SvgImage.d.ts.map +1 -1
- package/dist/types/components/svg/SvgImage.stories.d.ts.map +1 -1
- package/dist/types/components/svg/utils/getMutableNodeList.d.ts.map +1 -1
- package/dist/types/components/svg/utils/getSvgElement.d.ts +1 -1
- package/dist/types/components/svg/utils/getSvgElement.d.ts.map +1 -1
- package/dist/types/components/svg/utils/transformPositionModifications.d.ts +1 -1
- package/dist/types/components/svg/utils/transformPositionModifications.d.ts.map +1 -1
- package/dist/types/components/svg/utils/validateSvg.d.ts +1 -1
- package/dist/types/components/svg/utils/validateSvg.d.ts.map +1 -1
- package/dist/types/components/tabs/RouteTabs.stories.d.ts.map +1 -1
- package/dist/types/components/treeview/TreeView.d.ts +9 -4
- package/dist/types/components/treeview/TreeView.d.ts.map +1 -1
- package/dist/types/components/treeview/TreeView.stories.d.ts.map +1 -1
- package/dist/types/components/treeview/components/Node.d.ts +2 -5
- package/dist/types/components/treeview/components/Node.d.ts.map +1 -1
- package/dist/types/components/treeview/components/NodeInfo.d.ts.map +1 -1
- package/dist/types/components/upload/FileUpload.d.ts.map +1 -1
- package/dist/types/components/upload/FileUpload.stories.d.ts.map +1 -1
- package/dist/types/components/upload/ImageUpload.d.ts +2 -2
- package/dist/types/components/upload/ImageUpload.d.ts.map +1 -1
- package/dist/types/components/upload/ImageUpload.stories.d.ts +11 -11
- package/dist/types/components/upload/ImageUpload.stories.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modules/messageBox/MessageBox.stories.d.ts.map +1 -1
- package/dist/types/modules/messageBox/messageBox.d.ts.map +1 -1
- package/dist/types/modules/utils/uuidGen.d.ts.map +1 -1
- package/package.json +22 -26
package/dist/index.js
CHANGED
|
@@ -394,9 +394,11 @@ var ValidatedTextInput = class extends React.Component {
|
|
|
394
394
|
//#region src/components/colorpicker/ColorTextInput.tsx
|
|
395
395
|
function ColorTextInput({ value, pattern, onChange, placeholder, style }) {
|
|
396
396
|
const [text, setText] = useState(value);
|
|
397
|
-
|
|
397
|
+
const [lastValue, setLastValue] = useState(value);
|
|
398
|
+
if (value !== lastValue) {
|
|
399
|
+
setLastValue(value);
|
|
398
400
|
setText(value);
|
|
399
|
-
}
|
|
401
|
+
}
|
|
400
402
|
function handleChange(value, valid) {
|
|
401
403
|
setText(value);
|
|
402
404
|
if (valid) onChange(value);
|
|
@@ -527,9 +529,7 @@ function inputToTzDate(value, pattern, timezone) {
|
|
|
527
529
|
var DateInput = forwardRef(({ value, clearable, inline, readOnly, wrapperClassName, onChange, locale, timezone, ...otherProps }, ref) => {
|
|
528
530
|
const [pattern, setPattern] = useState(dayjs.localeData().longDateFormat("L"));
|
|
529
531
|
const { t } = useTranslation();
|
|
530
|
-
const [valid, setValid] = useState(false);
|
|
531
532
|
const [popupOpen, setPopupOpen] = useState(false);
|
|
532
|
-
const [inputText, setInputText] = useState("");
|
|
533
533
|
const debouncedSetPopupActive = useMemo(() => debounce(setPopupOpen, 30), []);
|
|
534
534
|
useEffect(() => {
|
|
535
535
|
const language = locale ?? i18n.language;
|
|
@@ -547,17 +547,22 @@ var DateInput = forwardRef(({ value, clearable, inline, readOnly, wrapperClassNa
|
|
|
547
547
|
t,
|
|
548
548
|
timezone
|
|
549
549
|
]);
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
550
|
+
const [valid, setValid] = useState(() => isInputValid(value, pattern));
|
|
551
|
+
const [inputText, setInputText] = useState(() => value == null ? "" : formattedDate(value));
|
|
552
|
+
const [lastInput, setLastInput] = useState({
|
|
553
|
+
value,
|
|
554
|
+
pattern,
|
|
555
|
+
timezone
|
|
556
|
+
});
|
|
557
|
+
if (!Object.is(value, lastInput.value) || pattern !== lastInput.pattern || timezone !== lastInput.timezone) {
|
|
558
|
+
setLastInput({
|
|
559
|
+
value,
|
|
560
|
+
pattern,
|
|
561
|
+
timezone
|
|
562
|
+
});
|
|
563
|
+
setInputText(value == null ? "" : formattedDate(value));
|
|
555
564
|
setValid(isInputValid(value, pattern));
|
|
556
|
-
}
|
|
557
|
-
useEffect(() => {
|
|
558
|
-
dayjs.locale(locale ?? i18n.language);
|
|
559
|
-
setPattern(dayjs.localeData().longDateFormat("L"));
|
|
560
|
-
}, [locale]);
|
|
565
|
+
}
|
|
561
566
|
const handleInputTextChange = (text) => {
|
|
562
567
|
setInputText(text);
|
|
563
568
|
if (text) {
|
|
@@ -1097,7 +1102,6 @@ var Node = class Node extends Component {
|
|
|
1097
1102
|
super(..._args);
|
|
1098
1103
|
this.state = {
|
|
1099
1104
|
expanded: false,
|
|
1100
|
-
selectionState: this.getSelectionState(),
|
|
1101
1105
|
isLoading: false
|
|
1102
1106
|
};
|
|
1103
1107
|
this.toggleExpand = () => {
|
|
@@ -1123,28 +1127,23 @@ var Node = class Node extends Component {
|
|
|
1123
1127
|
* @param {Props} prevProps
|
|
1124
1128
|
* @param {State} prevState
|
|
1125
1129
|
*/
|
|
1126
|
-
shouldComponentUpdate(
|
|
1127
|
-
const { selectedNodes:
|
|
1128
|
-
const { expanded:
|
|
1130
|
+
shouldComponentUpdate(nextProps, nextState) {
|
|
1131
|
+
const { selectedNodes: nextSelectedNodes, treeSize: nextTreeSize } = nextProps;
|
|
1132
|
+
const { expanded: nextExpanded, isLoading: nextIsLoading } = nextState;
|
|
1129
1133
|
const { selectedNodes, node, treeSize } = this.props;
|
|
1130
|
-
const { expanded,
|
|
1131
|
-
|
|
1132
|
-
if (
|
|
1133
|
-
if (
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
componentDidMount() {
|
|
1137
|
-
this.setState({ selectionState: this.getSelectionState() });
|
|
1138
|
-
}
|
|
1139
|
-
componentDidUpdate() {
|
|
1140
|
-
this.setState({ selectionState: this.getSelectionState() });
|
|
1134
|
+
const { expanded, isLoading } = this.state;
|
|
1135
|
+
const selectionStateChanged = this.getSelectionState(this.props) !== this.getSelectionState(nextProps);
|
|
1136
|
+
if (isLoading !== nextIsLoading) return true;
|
|
1137
|
+
if (treeSize !== nextTreeSize) return true;
|
|
1138
|
+
if (this.isLeaf()) return selectedNodes.includes(node.id) && !nextSelectedNodes.includes(node.id) || !selectedNodes.includes(node.id) && nextSelectedNodes.includes(node.id) || selectionStateChanged;
|
|
1139
|
+
else return selectedNodes.length !== nextSelectedNodes.length || expanded !== nextExpanded || selectionStateChanged;
|
|
1141
1140
|
}
|
|
1142
1141
|
isLeaf() {
|
|
1143
1142
|
const { node } = this.props;
|
|
1144
1143
|
return node.children === void 0;
|
|
1145
1144
|
}
|
|
1146
|
-
getSelectionState() {
|
|
1147
|
-
const { node, selectedNodes } =
|
|
1145
|
+
getSelectionState(props = this.props) {
|
|
1146
|
+
const { node, selectedNodes } = props;
|
|
1148
1147
|
if (this.isLeaf()) return selectedNodes.includes(node.id) ? SelectionState.ALL : SelectionState.NONE;
|
|
1149
1148
|
else {
|
|
1150
1149
|
const leafIds = getAllLeafIds(node);
|
|
@@ -1156,7 +1155,8 @@ var Node = class Node extends Component {
|
|
|
1156
1155
|
}
|
|
1157
1156
|
render() {
|
|
1158
1157
|
const { node, isLastChild, ...commonNodeProps } = this.props;
|
|
1159
|
-
const { expanded,
|
|
1158
|
+
const { expanded, isLoading } = this.state;
|
|
1159
|
+
const selectionState = this.getSelectionState();
|
|
1160
1160
|
return /* @__PURE__ */ jsxs("div", {
|
|
1161
1161
|
className: "node",
|
|
1162
1162
|
children: [/* @__PURE__ */ jsx(NodeInfo, {
|
|
@@ -1187,19 +1187,15 @@ var Node = class Node extends Component {
|
|
|
1187
1187
|
var TreeView = class extends Component {
|
|
1188
1188
|
constructor(..._args) {
|
|
1189
1189
|
super(..._args);
|
|
1190
|
+
this.convert = convertToTree(this.props.dataSetConfig);
|
|
1191
|
+
this.initialTree = this.initTree(this.props.treeData);
|
|
1190
1192
|
this.state = {
|
|
1191
1193
|
treeData: this.props.treeData,
|
|
1192
|
-
tree:
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
path: "/",
|
|
1197
|
-
originalNode: {}
|
|
1198
|
-
},
|
|
1199
|
-
treeSize: 0,
|
|
1200
|
-
selectedNodes: this.props.selectedNodes || []
|
|
1194
|
+
tree: this.initialTree,
|
|
1195
|
+
treeSize: getTreeSize(this.initialTree),
|
|
1196
|
+
selectedNodes: this.props.selectedNodes || [],
|
|
1197
|
+
lastSelectedNodes: this.props.selectedNodes || []
|
|
1201
1198
|
};
|
|
1202
|
-
this.convert = convertToTree(this.props.dataSetConfig);
|
|
1203
1199
|
this.selectNodes = (nodes) => {
|
|
1204
1200
|
const { onSelect } = this.props;
|
|
1205
1201
|
const { selectedNodes } = this.state;
|
|
@@ -1247,19 +1243,15 @@ var TreeView = class extends Component {
|
|
|
1247
1243
|
});
|
|
1248
1244
|
};
|
|
1249
1245
|
}
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
componentDidUpdate(prevProps) {
|
|
1260
|
-
const { selectedNodes: prevNodes } = prevProps;
|
|
1261
|
-
const { selectedNodes } = this.props;
|
|
1262
|
-
if (selectedNodes && prevNodes && prevNodes.length !== selectedNodes.length) this.setState({ selectedNodes });
|
|
1246
|
+
static {
|
|
1247
|
+
this.getDerivedStateFromProps = (props, state) => {
|
|
1248
|
+
const { selectedNodes } = props;
|
|
1249
|
+
if (selectedNodes && selectedNodes.length !== state.lastSelectedNodes.length) return {
|
|
1250
|
+
selectedNodes,
|
|
1251
|
+
lastSelectedNodes: selectedNodes
|
|
1252
|
+
};
|
|
1253
|
+
return null;
|
|
1254
|
+
};
|
|
1263
1255
|
}
|
|
1264
1256
|
initTree(treeData) {
|
|
1265
1257
|
return {
|
|
@@ -1336,9 +1328,11 @@ function Pagination({ onChangePage, page, totalPages, onChangeSize, size }) {
|
|
|
1336
1328
|
useEffect(() => {
|
|
1337
1329
|
changePageDebouncedRef.current = debounce(onChangePage, 500);
|
|
1338
1330
|
}, [onChangePage]);
|
|
1339
|
-
|
|
1331
|
+
const [lastPage, setLastPage] = useState(page);
|
|
1332
|
+
if (page !== lastPage) {
|
|
1333
|
+
setLastPage(page);
|
|
1340
1334
|
setPageRaw(`${page + 1}`);
|
|
1341
|
-
}
|
|
1335
|
+
}
|
|
1342
1336
|
function goToFirstPage() {
|
|
1343
1337
|
onChangePage(0);
|
|
1344
1338
|
}
|
|
@@ -1558,8 +1552,10 @@ var SelectWithSearch = class extends Component {
|
|
|
1558
1552
|
value: this.state.inputValue,
|
|
1559
1553
|
label: this.state.inputValue
|
|
1560
1554
|
};
|
|
1561
|
-
this.setState((prevState) => ({
|
|
1562
|
-
|
|
1555
|
+
this.setState((prevState) => ({
|
|
1556
|
+
options: [newItem, ...prevState.options],
|
|
1557
|
+
inputValue: null
|
|
1558
|
+
}));
|
|
1563
1559
|
onChange(newItem);
|
|
1564
1560
|
});
|
|
1565
1561
|
}
|
|
@@ -2083,16 +2079,27 @@ var ReactableWithClientSidePagination = class extends Component {
|
|
|
2083
2079
|
this.state = {
|
|
2084
2080
|
paginationSettings: paginationSettings || DEFAULT_PAGINATION_SETTINGS,
|
|
2085
2081
|
filterSettings: {},
|
|
2086
|
-
filteredItems: null
|
|
2082
|
+
filteredItems: null,
|
|
2083
|
+
lastSettings: paginationSettings
|
|
2087
2084
|
};
|
|
2088
2085
|
}
|
|
2089
2086
|
componentDidUpdate(prevProps) {
|
|
2090
2087
|
const { items } = this.props;
|
|
2091
2088
|
const { items: prevItems } = prevProps;
|
|
2092
|
-
const settings = this.props.paginationSettings || this.props.initialPaginationSettings;
|
|
2093
|
-
const prevSettings = prevProps.paginationSettings || prevProps.initialPaginationSettings;
|
|
2094
2089
|
if (items && prevItems && items.length !== prevItems.length) this.calculatePageNumber(items, this.state.paginationSettings);
|
|
2095
|
-
|
|
2090
|
+
}
|
|
2091
|
+
static {
|
|
2092
|
+
this.getDerivedStateFromProps = (props, state) => {
|
|
2093
|
+
const settings = props.paginationSettings || props.initialPaginationSettings;
|
|
2094
|
+
if (settings && !isEqual(settings, state.lastSettings)) return {
|
|
2095
|
+
lastSettings: settings,
|
|
2096
|
+
paginationSettings: {
|
|
2097
|
+
...settings,
|
|
2098
|
+
page: 0
|
|
2099
|
+
}
|
|
2100
|
+
};
|
|
2101
|
+
return null;
|
|
2102
|
+
};
|
|
2096
2103
|
}
|
|
2097
2104
|
render() {
|
|
2098
2105
|
const { uniqueItemKey, isLoading, columnDefs, rowDef, tableName, clickable, selectable, selectedItems, onChangeSize } = this.props;
|
|
@@ -2275,20 +2282,17 @@ var ImageUpload = class extends Component {
|
|
|
2275
2282
|
constructor(..._args) {
|
|
2276
2283
|
super(..._args);
|
|
2277
2284
|
this.state = {
|
|
2278
|
-
|
|
2285
|
+
dragOverUrl: void 0,
|
|
2279
2286
|
file: null
|
|
2280
2287
|
};
|
|
2281
2288
|
this.handleDragOver = () => {
|
|
2282
|
-
this.setState({
|
|
2289
|
+
this.setState({ dragOverUrl: this.props.imageUrl });
|
|
2283
2290
|
};
|
|
2284
2291
|
}
|
|
2285
|
-
componentDidUpdate(prevProps) {
|
|
2286
|
-
if (prevProps.imageUrl !== this.props.imageUrl) this.setState({ dragOverPreview: false });
|
|
2287
|
-
}
|
|
2288
2292
|
render() {
|
|
2289
2293
|
const { accept, imageUrl, imageSize, onSelectFile, onRemoveFile, onDownloadFile, ...otherProps } = this.props;
|
|
2290
|
-
const {
|
|
2291
|
-
if (imageUrl && !
|
|
2294
|
+
const { dragOverUrl, file } = this.state;
|
|
2295
|
+
if (imageUrl && !(dragOverUrl !== void 0 && dragOverUrl === imageUrl) && file) return /* @__PURE__ */ jsx(PreviewImage, {
|
|
2292
2296
|
url: imageUrl,
|
|
2293
2297
|
imageSize,
|
|
2294
2298
|
onRemoveFile: () => onRemoveFile?.(file),
|
|
@@ -2298,7 +2302,10 @@ var ImageUpload = class extends Component {
|
|
|
2298
2302
|
else return /* @__PURE__ */ jsx(FileUpload, {
|
|
2299
2303
|
...otherProps,
|
|
2300
2304
|
onRemoveFile: (file) => {
|
|
2301
|
-
this.setState({
|
|
2305
|
+
this.setState({
|
|
2306
|
+
file: null,
|
|
2307
|
+
dragOverUrl: void 0
|
|
2308
|
+
});
|
|
2302
2309
|
onRemoveFile?.(file);
|
|
2303
2310
|
},
|
|
2304
2311
|
onSelectFile: (file) => {
|
|
@@ -2377,9 +2384,17 @@ var formatTime = (timezone, date) => {
|
|
|
2377
2384
|
var DateTimeInput = forwardRef(({ timestamp, timezone, warning, readOnly = false, onChange, ...otherProps }, ref) => {
|
|
2378
2385
|
const [time, setTime] = useState(formatTime(timezone, timestamp));
|
|
2379
2386
|
const timeValue = time == null ? formatTime(timezone, timestamp) : time;
|
|
2380
|
-
|
|
2387
|
+
const [lastInput, setLastInput] = useState({
|
|
2388
|
+
timestamp,
|
|
2389
|
+
timezone
|
|
2390
|
+
});
|
|
2391
|
+
if (timestamp !== lastInput.timestamp || timezone !== lastInput.timezone) {
|
|
2392
|
+
setLastInput({
|
|
2393
|
+
timestamp,
|
|
2394
|
+
timezone
|
|
2395
|
+
});
|
|
2381
2396
|
setTime(formatTime(timezone, timestamp));
|
|
2382
|
-
}
|
|
2397
|
+
}
|
|
2383
2398
|
function handleChangeDate(date, fromTextField) {
|
|
2384
2399
|
const currentDate = dayjs.tz(timestamp, timezone);
|
|
2385
2400
|
onChange(dayjs.tz(date, timezone).set("hour", currentDate.hour()).set("minute", currentDate.minute()).set("second", currentDate.second()).set("millisecond", currentDate.millisecond()).valueOf(), fromTextField);
|
|
@@ -2498,7 +2513,13 @@ var SelectWithSearchAsync = class extends Component {
|
|
|
2498
2513
|
const { currentItem } = this.state;
|
|
2499
2514
|
if (value && (!currentItem || currentItem.value !== value)) {
|
|
2500
2515
|
if (!this.reloadItemFromCache()) searchById(value).then(this.addBackendItemToCache);
|
|
2501
|
-
}
|
|
2516
|
+
}
|
|
2517
|
+
}
|
|
2518
|
+
static {
|
|
2519
|
+
this.getDerivedStateFromProps = (props, state) => {
|
|
2520
|
+
if (!props.value && state.currentItem) return { currentItem: null };
|
|
2521
|
+
return null;
|
|
2522
|
+
};
|
|
2502
2523
|
}
|
|
2503
2524
|
render() {
|
|
2504
2525
|
const { clearable, noResultsMessage, disabled, menuPortalTarget } = this.props;
|
|
@@ -2784,7 +2805,7 @@ function Menu({ onChange, onShowCustomPeriod, periodName, timezone }) {
|
|
|
2784
2805
|
const [visible, setVisible] = useState(false);
|
|
2785
2806
|
const [showDatePicker, setShowDatePicker] = useState(false);
|
|
2786
2807
|
const [showMonthPicker, setShowMonthPicker] = useState(false);
|
|
2787
|
-
const [datePickerDate, setDatePickerDate] = useState(Date.now());
|
|
2808
|
+
const [datePickerDate, setDatePickerDate] = useState(() => Date.now());
|
|
2788
2809
|
function setPeriod(period) {
|
|
2789
2810
|
onChange(period);
|
|
2790
2811
|
setVisible(false);
|
|
@@ -3210,17 +3231,18 @@ function sortModifications(modifications) {
|
|
|
3210
3231
|
//#endregion
|
|
3211
3232
|
//#region src/components/svg/SvgImage.tsx
|
|
3212
3233
|
function useGlobalStyleElement() {
|
|
3213
|
-
const
|
|
3234
|
+
const [styleElement] = useState(() => {
|
|
3235
|
+
const element = document.createElement("style");
|
|
3236
|
+
element.appendChild(document.createTextNode(""));
|
|
3237
|
+
return element;
|
|
3238
|
+
});
|
|
3214
3239
|
useEffect(() => {
|
|
3215
|
-
const styleElement = document.createElement("style");
|
|
3216
|
-
styleElement.appendChild(document.createTextNode(""));
|
|
3217
3240
|
if (document && document.head) document.head.appendChild(styleElement);
|
|
3218
|
-
styleElementRef.current = styleElement;
|
|
3219
3241
|
return () => {
|
|
3220
|
-
if (document && document.head
|
|
3242
|
+
if (document && document.head) document.head.removeChild(styleElement);
|
|
3221
3243
|
};
|
|
3222
|
-
}, []);
|
|
3223
|
-
return
|
|
3244
|
+
}, [styleElement]);
|
|
3245
|
+
return styleElement;
|
|
3224
3246
|
}
|
|
3225
3247
|
function SvgImage({ imageData, modifications, onConflict }) {
|
|
3226
3248
|
const svgWrapperRef = useRef(null);
|
|
@@ -3309,9 +3331,10 @@ var getClickConfiguration = (onClick) => {
|
|
|
3309
3331
|
var Chart = class extends Component {
|
|
3310
3332
|
constructor(..._args) {
|
|
3311
3333
|
super(..._args);
|
|
3312
|
-
this.state = {};
|
|
3334
|
+
this.state = { titleApplied: false };
|
|
3313
3335
|
this.chart = null;
|
|
3314
3336
|
this.ro = null;
|
|
3337
|
+
this.titleTimeoutId = void 0;
|
|
3315
3338
|
this.handleChart = (chart) => {
|
|
3316
3339
|
this.chart = chart;
|
|
3317
3340
|
this.ro = new ResizeObserver(() => {
|
|
@@ -3321,8 +3344,16 @@ var Chart = class extends Component {
|
|
|
3321
3344
|
};
|
|
3322
3345
|
}
|
|
3323
3346
|
componentDidMount() {
|
|
3347
|
+
this.titleTimeoutId = setTimeout(() => this.setState({ titleApplied: true }), 0);
|
|
3348
|
+
}
|
|
3349
|
+
/**
|
|
3350
|
+
* Builds the Highcharts configuration from the props. Everything here is derived, so it is
|
|
3351
|
+
* rebuilt while rendering rather than mirrored into state.
|
|
3352
|
+
*/
|
|
3353
|
+
buildOptions() {
|
|
3324
3354
|
const { type, title, items, tooltipTitle, valueFormatter, onClick } = this.props;
|
|
3325
|
-
this.
|
|
3355
|
+
const { titleApplied } = this.state;
|
|
3356
|
+
return {
|
|
3326
3357
|
...initialOptions,
|
|
3327
3358
|
plotOptions: {
|
|
3328
3359
|
...initialOptions.plotOptions,
|
|
@@ -3339,44 +3370,12 @@ var Chart = class extends Component {
|
|
|
3339
3370
|
...initialOptions.legend,
|
|
3340
3371
|
enabled: type === "pie"
|
|
3341
3372
|
},
|
|
3342
|
-
yAxis: {
|
|
3343
|
-
...initialOptions.yAxis,
|
|
3344
|
-
enabled: type === "column",
|
|
3345
|
-
title: { text: title || "" }
|
|
3346
|
-
},
|
|
3347
|
-
series: [{
|
|
3348
|
-
type,
|
|
3349
|
-
innerSize: "50%",
|
|
3350
|
-
data: items.map(({ label, value }) => [label, value])
|
|
3351
|
-
}]
|
|
3352
|
-
});
|
|
3353
|
-
setTimeout(() => {
|
|
3354
|
-
this.setState({ title: {
|
|
3355
|
-
...initialOptions.title,
|
|
3356
|
-
text: type === "column" ? "" : title || ""
|
|
3357
|
-
} });
|
|
3358
|
-
}, 0);
|
|
3359
|
-
}
|
|
3360
|
-
componentDidUpdate(prevProps) {
|
|
3361
|
-
const { type, title, items, tooltipTitle, valueFormatter, onClick } = this.props;
|
|
3362
|
-
if (title !== prevProps.title) this.setState({
|
|
3363
3373
|
title: {
|
|
3364
|
-
...
|
|
3365
|
-
text: type
|
|
3366
|
-
},
|
|
3367
|
-
yAxis: {
|
|
3368
|
-
...this.state.yAxis,
|
|
3369
|
-
title: { text: title || "" }
|
|
3370
|
-
}
|
|
3371
|
-
});
|
|
3372
|
-
if (type !== prevProps.type) this.setState({
|
|
3373
|
-
legend: {
|
|
3374
|
-
...this.state.legend,
|
|
3375
|
-
enabled: type === "pie"
|
|
3374
|
+
...initialOptions.title,
|
|
3375
|
+
text: titleApplied && type !== "column" ? title || "" : ""
|
|
3376
3376
|
},
|
|
3377
|
-
title: { text: type === "column" ? "" : title || "" },
|
|
3378
3377
|
yAxis: {
|
|
3379
|
-
...
|
|
3378
|
+
...initialOptions.yAxis,
|
|
3380
3379
|
enabled: type === "column",
|
|
3381
3380
|
title: { text: type === "column" ? title || "" : "" }
|
|
3382
3381
|
},
|
|
@@ -3385,35 +3384,19 @@ var Chart = class extends Component {
|
|
|
3385
3384
|
innerSize: "50%",
|
|
3386
3385
|
data: items.map(({ label, value }) => [label, value])
|
|
3387
3386
|
}]
|
|
3388
|
-
}
|
|
3389
|
-
if (!isEqual(items, prevProps.items)) this.setState({ series: [{
|
|
3390
|
-
type,
|
|
3391
|
-
innerSize: "50%",
|
|
3392
|
-
data: items.map(({ label, value }) => [label, value])
|
|
3393
|
-
}] });
|
|
3394
|
-
if (tooltipTitle !== prevProps.tooltipTitle || valueFormatter !== prevProps.valueFormatter || onClick !== prevProps.onClick) this.setState({
|
|
3395
|
-
tooltip: {
|
|
3396
|
-
...initialOptions.tooltip,
|
|
3397
|
-
formatter() {
|
|
3398
|
-
const format = valueFormatter || ((value) => value);
|
|
3399
|
-
return createTooltip(tooltipTitle || "", this.point.name, format(this.point.y));
|
|
3400
|
-
}
|
|
3401
|
-
},
|
|
3402
|
-
plotOptions: {
|
|
3403
|
-
...initialOptions.plotOptions,
|
|
3404
|
-
...getClickConfiguration(onClick)
|
|
3405
|
-
}
|
|
3406
|
-
});
|
|
3387
|
+
};
|
|
3407
3388
|
}
|
|
3408
3389
|
componentWillUnmount() {
|
|
3390
|
+
clearTimeout(this.titleTimeoutId);
|
|
3409
3391
|
if (this.ro && this.chart?.renderTo) this.ro.unobserve(this.chart.renderTo);
|
|
3410
3392
|
this.chart = null;
|
|
3411
3393
|
this.ro = null;
|
|
3412
3394
|
}
|
|
3413
3395
|
render() {
|
|
3396
|
+
const built = this.buildOptions();
|
|
3414
3397
|
return /* @__PURE__ */ jsx(HighchartsReact, {
|
|
3415
3398
|
highcharts: Highcharts,
|
|
3416
|
-
options: this.props.updateOptions ? this.props.updateOptions(
|
|
3399
|
+
options: this.props.updateOptions ? this.props.updateOptions(built) : built,
|
|
3417
3400
|
containerProps: { className: this.props.className },
|
|
3418
3401
|
callback: this.handleChart
|
|
3419
3402
|
});
|