@deviceinsight/ng-ui-components 7.22.0 → 7.24.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 +161 -165
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +161 -165
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -3
- 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 +24 -28
package/dist/index.js
CHANGED
|
@@ -56,7 +56,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
56
56
|
}
|
|
57
57
|
return to;
|
|
58
58
|
};
|
|
59
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
59
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
|
|
60
60
|
value: mod,
|
|
61
61
|
enumerable: true
|
|
62
62
|
}) : target, mod));
|
|
@@ -77,8 +77,10 @@ var setGlobalErrorMessageBoxOptions = (options) => {
|
|
|
77
77
|
globalErrorMessageBoxOptions = options;
|
|
78
78
|
};
|
|
79
79
|
var storeGroupName = (groupName, toastId) => {
|
|
80
|
-
if (groupName)
|
|
81
|
-
|
|
80
|
+
if (groupName) {
|
|
81
|
+
if (groupNamesToToastIds[groupName]) groupNamesToToastIds[groupName] = [...groupNamesToToastIds[groupName], toastId];
|
|
82
|
+
else groupNamesToToastIds[groupName] = [toastId];
|
|
83
|
+
}
|
|
82
84
|
};
|
|
83
85
|
var messageBoxSuccess = (content, options, groupName) => {
|
|
84
86
|
const toastId = toast.success(content, {
|
|
@@ -254,8 +256,10 @@ function convertToTree({ childNodeKey, idKey, displayNameKey, typeKey, lazyLoada
|
|
|
254
256
|
*/
|
|
255
257
|
function patchNode(node, patch) {
|
|
256
258
|
let patchedChildren;
|
|
257
|
-
if (patch.children !== void 0)
|
|
258
|
-
|
|
259
|
+
if (patch.children !== void 0) {
|
|
260
|
+
if (node.children !== void 0) patchedChildren = [...node.children, ...patch.children];
|
|
261
|
+
else patchedChildren = [...patch.children];
|
|
262
|
+
}
|
|
259
263
|
return {
|
|
260
264
|
...node,
|
|
261
265
|
...patch,
|
|
@@ -394,9 +398,11 @@ var ValidatedTextInput = class extends React.Component {
|
|
|
394
398
|
//#region src/components/colorpicker/ColorTextInput.tsx
|
|
395
399
|
function ColorTextInput({ value, pattern, onChange, placeholder, style }) {
|
|
396
400
|
const [text, setText] = useState(value);
|
|
397
|
-
|
|
401
|
+
const [lastValue, setLastValue] = useState(value);
|
|
402
|
+
if (value !== lastValue) {
|
|
403
|
+
setLastValue(value);
|
|
398
404
|
setText(value);
|
|
399
|
-
}
|
|
405
|
+
}
|
|
400
406
|
function handleChange(value, valid) {
|
|
401
407
|
setText(value);
|
|
402
408
|
if (valid) onChange(value);
|
|
@@ -527,9 +533,7 @@ function inputToTzDate(value, pattern, timezone) {
|
|
|
527
533
|
var DateInput = forwardRef(({ value, clearable, inline, readOnly, wrapperClassName, onChange, locale, timezone, ...otherProps }, ref) => {
|
|
528
534
|
const [pattern, setPattern] = useState(dayjs.localeData().longDateFormat("L"));
|
|
529
535
|
const { t } = useTranslation();
|
|
530
|
-
const [valid, setValid] = useState(false);
|
|
531
536
|
const [popupOpen, setPopupOpen] = useState(false);
|
|
532
|
-
const [inputText, setInputText] = useState("");
|
|
533
537
|
const debouncedSetPopupActive = useMemo(() => debounce(setPopupOpen, 30), []);
|
|
534
538
|
useEffect(() => {
|
|
535
539
|
const language = locale ?? i18n.language;
|
|
@@ -547,17 +551,22 @@ var DateInput = forwardRef(({ value, clearable, inline, readOnly, wrapperClassNa
|
|
|
547
551
|
t,
|
|
548
552
|
timezone
|
|
549
553
|
]);
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
554
|
+
const [valid, setValid] = useState(() => isInputValid(value, pattern));
|
|
555
|
+
const [inputText, setInputText] = useState(() => value == null ? "" : formattedDate(value));
|
|
556
|
+
const [lastInput, setLastInput] = useState({
|
|
557
|
+
value,
|
|
558
|
+
pattern,
|
|
559
|
+
timezone
|
|
560
|
+
});
|
|
561
|
+
if (!Object.is(value, lastInput.value) || pattern !== lastInput.pattern || timezone !== lastInput.timezone) {
|
|
562
|
+
setLastInput({
|
|
563
|
+
value,
|
|
564
|
+
pattern,
|
|
565
|
+
timezone
|
|
566
|
+
});
|
|
567
|
+
setInputText(value == null ? "" : formattedDate(value));
|
|
555
568
|
setValid(isInputValid(value, pattern));
|
|
556
|
-
}
|
|
557
|
-
useEffect(() => {
|
|
558
|
-
dayjs.locale(locale ?? i18n.language);
|
|
559
|
-
setPattern(dayjs.localeData().longDateFormat("L"));
|
|
560
|
-
}, [locale]);
|
|
569
|
+
}
|
|
561
570
|
const handleInputTextChange = (text) => {
|
|
562
571
|
setInputText(text);
|
|
563
572
|
if (text) {
|
|
@@ -820,8 +829,9 @@ function RouteLink({ to, confirm, className, title, children, keyboardShortcut,
|
|
|
820
829
|
pushRoute();
|
|
821
830
|
}
|
|
822
831
|
};
|
|
832
|
+
const href = history.createHref(typeof to === "string" ? { pathname: to } : to);
|
|
823
833
|
return /* @__PURE__ */ jsx("a", {
|
|
824
|
-
href
|
|
834
|
+
href,
|
|
825
835
|
onClick: handleClickEvent,
|
|
826
836
|
className: `di route-link ${className || ""}`,
|
|
827
837
|
title: title ? t(title.id, { defaultValue: title.defaultValue }) : void 0,
|
|
@@ -1062,8 +1072,9 @@ var NodeInfo = class extends React.PureComponent {
|
|
|
1062
1072
|
}
|
|
1063
1073
|
render() {
|
|
1064
1074
|
const { node, node: { name }, leafNode, expanded, isLastChild, onExpand, selectionState, isLoading } = this.props;
|
|
1075
|
+
const selected = selectionState === SelectionState.ALL;
|
|
1065
1076
|
return /* @__PURE__ */ jsxs("div", {
|
|
1066
|
-
className: `node-info ${
|
|
1077
|
+
className: `node-info ${selected ? "selected" : ""}`,
|
|
1067
1078
|
children: [
|
|
1068
1079
|
isLastChild !== void 0 && /* @__PURE__ */ jsx(Skeleton, { lastChild: isLastChild }),
|
|
1069
1080
|
/* @__PURE__ */ jsx(NodeImage, {
|
|
@@ -1097,7 +1108,6 @@ var Node = class Node extends Component {
|
|
|
1097
1108
|
super(..._args);
|
|
1098
1109
|
this.state = {
|
|
1099
1110
|
expanded: false,
|
|
1100
|
-
selectionState: this.getSelectionState(),
|
|
1101
1111
|
isLoading: false
|
|
1102
1112
|
};
|
|
1103
1113
|
this.toggleExpand = () => {
|
|
@@ -1123,28 +1133,23 @@ var Node = class Node extends Component {
|
|
|
1123
1133
|
* @param {Props} prevProps
|
|
1124
1134
|
* @param {State} prevState
|
|
1125
1135
|
*/
|
|
1126
|
-
shouldComponentUpdate(
|
|
1127
|
-
const { selectedNodes:
|
|
1128
|
-
const { expanded:
|
|
1136
|
+
shouldComponentUpdate(nextProps, nextState) {
|
|
1137
|
+
const { selectedNodes: nextSelectedNodes, treeSize: nextTreeSize } = nextProps;
|
|
1138
|
+
const { expanded: nextExpanded, isLoading: nextIsLoading } = nextState;
|
|
1129
1139
|
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() });
|
|
1140
|
+
const { expanded, isLoading } = this.state;
|
|
1141
|
+
const selectionStateChanged = this.getSelectionState(this.props) !== this.getSelectionState(nextProps);
|
|
1142
|
+
if (isLoading !== nextIsLoading) return true;
|
|
1143
|
+
if (treeSize !== nextTreeSize) return true;
|
|
1144
|
+
if (this.isLeaf()) return selectedNodes.includes(node.id) && !nextSelectedNodes.includes(node.id) || !selectedNodes.includes(node.id) && nextSelectedNodes.includes(node.id) || selectionStateChanged;
|
|
1145
|
+
else return selectedNodes.length !== nextSelectedNodes.length || expanded !== nextExpanded || selectionStateChanged;
|
|
1141
1146
|
}
|
|
1142
1147
|
isLeaf() {
|
|
1143
1148
|
const { node } = this.props;
|
|
1144
1149
|
return node.children === void 0;
|
|
1145
1150
|
}
|
|
1146
|
-
getSelectionState() {
|
|
1147
|
-
const { node, selectedNodes } =
|
|
1151
|
+
getSelectionState(props = this.props) {
|
|
1152
|
+
const { node, selectedNodes } = props;
|
|
1148
1153
|
if (this.isLeaf()) return selectedNodes.includes(node.id) ? SelectionState.ALL : SelectionState.NONE;
|
|
1149
1154
|
else {
|
|
1150
1155
|
const leafIds = getAllLeafIds(node);
|
|
@@ -1156,7 +1161,8 @@ var Node = class Node extends Component {
|
|
|
1156
1161
|
}
|
|
1157
1162
|
render() {
|
|
1158
1163
|
const { node, isLastChild, ...commonNodeProps } = this.props;
|
|
1159
|
-
const { expanded,
|
|
1164
|
+
const { expanded, isLoading } = this.state;
|
|
1165
|
+
const selectionState = this.getSelectionState();
|
|
1160
1166
|
return /* @__PURE__ */ jsxs("div", {
|
|
1161
1167
|
className: "node",
|
|
1162
1168
|
children: [/* @__PURE__ */ jsx(NodeInfo, {
|
|
@@ -1187,19 +1193,15 @@ var Node = class Node extends Component {
|
|
|
1187
1193
|
var TreeView = class extends Component {
|
|
1188
1194
|
constructor(..._args) {
|
|
1189
1195
|
super(..._args);
|
|
1196
|
+
this.convert = convertToTree(this.props.dataSetConfig);
|
|
1197
|
+
this.initialTree = this.initTree(this.props.treeData);
|
|
1190
1198
|
this.state = {
|
|
1191
1199
|
treeData: this.props.treeData,
|
|
1192
|
-
tree:
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
path: "/",
|
|
1197
|
-
originalNode: {}
|
|
1198
|
-
},
|
|
1199
|
-
treeSize: 0,
|
|
1200
|
-
selectedNodes: this.props.selectedNodes || []
|
|
1200
|
+
tree: this.initialTree,
|
|
1201
|
+
treeSize: getTreeSize(this.initialTree),
|
|
1202
|
+
selectedNodes: this.props.selectedNodes || [],
|
|
1203
|
+
lastSelectedNodes: this.props.selectedNodes || []
|
|
1201
1204
|
};
|
|
1202
|
-
this.convert = convertToTree(this.props.dataSetConfig);
|
|
1203
1205
|
this.selectNodes = (nodes) => {
|
|
1204
1206
|
const { onSelect } = this.props;
|
|
1205
1207
|
const { selectedNodes } = this.state;
|
|
@@ -1247,19 +1249,15 @@ var TreeView = class extends Component {
|
|
|
1247
1249
|
});
|
|
1248
1250
|
};
|
|
1249
1251
|
}
|
|
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 });
|
|
1252
|
+
static {
|
|
1253
|
+
this.getDerivedStateFromProps = (props, state) => {
|
|
1254
|
+
const { selectedNodes } = props;
|
|
1255
|
+
if (selectedNodes && selectedNodes.length !== state.lastSelectedNodes.length) return {
|
|
1256
|
+
selectedNodes,
|
|
1257
|
+
lastSelectedNodes: selectedNodes
|
|
1258
|
+
};
|
|
1259
|
+
return null;
|
|
1260
|
+
};
|
|
1263
1261
|
}
|
|
1264
1262
|
initTree(treeData) {
|
|
1265
1263
|
return {
|
|
@@ -1336,9 +1334,11 @@ function Pagination({ onChangePage, page, totalPages, onChangeSize, size }) {
|
|
|
1336
1334
|
useEffect(() => {
|
|
1337
1335
|
changePageDebouncedRef.current = debounce(onChangePage, 500);
|
|
1338
1336
|
}, [onChangePage]);
|
|
1339
|
-
|
|
1337
|
+
const [lastPage, setLastPage] = useState(page);
|
|
1338
|
+
if (page !== lastPage) {
|
|
1339
|
+
setLastPage(page);
|
|
1340
1340
|
setPageRaw(`${page + 1}`);
|
|
1341
|
-
}
|
|
1341
|
+
}
|
|
1342
1342
|
function goToFirstPage() {
|
|
1343
1343
|
onChangePage(0);
|
|
1344
1344
|
}
|
|
@@ -1558,8 +1558,10 @@ var SelectWithSearch = class extends Component {
|
|
|
1558
1558
|
value: this.state.inputValue,
|
|
1559
1559
|
label: this.state.inputValue
|
|
1560
1560
|
};
|
|
1561
|
-
this.setState((prevState) => ({
|
|
1562
|
-
|
|
1561
|
+
this.setState((prevState) => ({
|
|
1562
|
+
options: [newItem, ...prevState.options],
|
|
1563
|
+
inputValue: null
|
|
1564
|
+
}));
|
|
1563
1565
|
onChange(newItem);
|
|
1564
1566
|
});
|
|
1565
1567
|
}
|
|
@@ -1766,10 +1768,12 @@ var ReactableTableHeader = class extends Component {
|
|
|
1766
1768
|
this.getClassName = (columnDef) => {
|
|
1767
1769
|
const { paginationSettings, tableName } = this.props;
|
|
1768
1770
|
const className = getClassName(tableName, columnDef.name);
|
|
1769
|
-
if (columnDef.sortable)
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1771
|
+
if (columnDef.sortable) {
|
|
1772
|
+
if (columnDef.name === paginationSettings.sort.property) {
|
|
1773
|
+
if (paginationSettings.sort.direction === "ASC") return `${className} sortable sortAsc`;
|
|
1774
|
+
else return `${className} sortable sortDes`;
|
|
1775
|
+
} else return `${className} sortable`;
|
|
1776
|
+
} else return `${className}`;
|
|
1773
1777
|
};
|
|
1774
1778
|
this.printLabel = (label) => {
|
|
1775
1779
|
if (isTranslationDescriptor(label)) return /* @__PURE__ */ jsx(Trans, {
|
|
@@ -2057,17 +2061,19 @@ var ReactableWithClientSidePagination = class extends Component {
|
|
|
2057
2061
|
};
|
|
2058
2062
|
this.handleSelectChange = (selected, item) => {
|
|
2059
2063
|
const { onSelectedItemsChange, selectedItems = [], uniqueItemKey } = this.props;
|
|
2060
|
-
if (onSelectedItemsChange)
|
|
2061
|
-
|
|
2062
|
-
|
|
2064
|
+
if (onSelectedItemsChange) {
|
|
2065
|
+
if (selected) onSelectedItemsChange(selectedItems.concat(uniqueItemKey(item)));
|
|
2066
|
+
else onSelectedItemsChange(selectedItems.filter((key) => key !== uniqueItemKey(item)));
|
|
2067
|
+
} else console.warn("ReactableWithClientSidePagination: onSelectedItemsChange property is missing");
|
|
2063
2068
|
};
|
|
2064
2069
|
this.handleSelectAllChange = (selectedAll) => {
|
|
2065
2070
|
const { onSelectedItemsChange, items, selectedItems = [], uniqueItemKey } = this.props;
|
|
2066
2071
|
const { filteredItems } = this.state;
|
|
2067
2072
|
const visibleItems = (filteredItems || items || []).map(uniqueItemKey);
|
|
2068
|
-
if (onSelectedItemsChange)
|
|
2069
|
-
|
|
2070
|
-
|
|
2073
|
+
if (onSelectedItemsChange) {
|
|
2074
|
+
if (selectedAll) onSelectedItemsChange(uniqWith([...selectedItems, ...visibleItems], isEqual).sort());
|
|
2075
|
+
else onSelectedItemsChange(difference(selectedItems, visibleItems));
|
|
2076
|
+
} else console.warn("ReactableWithClientSidePagination: onSelectedItemsChange property is missing");
|
|
2071
2077
|
};
|
|
2072
2078
|
this.areSelectedAll = () => {
|
|
2073
2079
|
const { items, selectedItems, uniqueItemKey } = this.props;
|
|
@@ -2083,21 +2089,33 @@ var ReactableWithClientSidePagination = class extends Component {
|
|
|
2083
2089
|
this.state = {
|
|
2084
2090
|
paginationSettings: paginationSettings || DEFAULT_PAGINATION_SETTINGS,
|
|
2085
2091
|
filterSettings: {},
|
|
2086
|
-
filteredItems: null
|
|
2092
|
+
filteredItems: null,
|
|
2093
|
+
lastSettings: paginationSettings
|
|
2087
2094
|
};
|
|
2088
2095
|
}
|
|
2089
2096
|
componentDidUpdate(prevProps) {
|
|
2090
2097
|
const { items } = this.props;
|
|
2091
2098
|
const { items: prevItems } = prevProps;
|
|
2092
|
-
const settings = this.props.paginationSettings || this.props.initialPaginationSettings;
|
|
2093
|
-
const prevSettings = prevProps.paginationSettings || prevProps.initialPaginationSettings;
|
|
2094
2099
|
if (items && prevItems && items.length !== prevItems.length) this.calculatePageNumber(items, this.state.paginationSettings);
|
|
2095
|
-
|
|
2100
|
+
}
|
|
2101
|
+
static {
|
|
2102
|
+
this.getDerivedStateFromProps = (props, state) => {
|
|
2103
|
+
const settings = props.paginationSettings || props.initialPaginationSettings;
|
|
2104
|
+
if (settings && !isEqual(settings, state.lastSettings)) return {
|
|
2105
|
+
lastSettings: settings,
|
|
2106
|
+
paginationSettings: {
|
|
2107
|
+
...settings,
|
|
2108
|
+
page: 0
|
|
2109
|
+
}
|
|
2110
|
+
};
|
|
2111
|
+
return null;
|
|
2112
|
+
};
|
|
2096
2113
|
}
|
|
2097
2114
|
render() {
|
|
2098
2115
|
const { uniqueItemKey, isLoading, columnDefs, rowDef, tableName, clickable, selectable, selectedItems, onChangeSize } = this.props;
|
|
2116
|
+
const finalColumnDefs = selectable ? extendColumnDefsWithCheckboxes(columnDefs, this.handleSelectChange, this.handleSelectAllChange, this.areSelectedAll(), selectedItems || [], uniqueItemKey) : columnDefs;
|
|
2099
2117
|
return /* @__PURE__ */ jsx(Reactable, {
|
|
2100
|
-
columnDefs:
|
|
2118
|
+
columnDefs: finalColumnDefs,
|
|
2101
2119
|
rowDef,
|
|
2102
2120
|
uniqueItemKey,
|
|
2103
2121
|
paginationSettings: this.state.paginationSettings,
|
|
@@ -2275,20 +2293,17 @@ var ImageUpload = class extends Component {
|
|
|
2275
2293
|
constructor(..._args) {
|
|
2276
2294
|
super(..._args);
|
|
2277
2295
|
this.state = {
|
|
2278
|
-
|
|
2296
|
+
dragOverUrl: void 0,
|
|
2279
2297
|
file: null
|
|
2280
2298
|
};
|
|
2281
2299
|
this.handleDragOver = () => {
|
|
2282
|
-
this.setState({
|
|
2300
|
+
this.setState({ dragOverUrl: this.props.imageUrl });
|
|
2283
2301
|
};
|
|
2284
2302
|
}
|
|
2285
|
-
componentDidUpdate(prevProps) {
|
|
2286
|
-
if (prevProps.imageUrl !== this.props.imageUrl) this.setState({ dragOverPreview: false });
|
|
2287
|
-
}
|
|
2288
2303
|
render() {
|
|
2289
2304
|
const { accept, imageUrl, imageSize, onSelectFile, onRemoveFile, onDownloadFile, ...otherProps } = this.props;
|
|
2290
|
-
const {
|
|
2291
|
-
if (imageUrl && !
|
|
2305
|
+
const { dragOverUrl, file } = this.state;
|
|
2306
|
+
if (imageUrl && !(dragOverUrl !== void 0 && dragOverUrl === imageUrl) && file) return /* @__PURE__ */ jsx(PreviewImage, {
|
|
2292
2307
|
url: imageUrl,
|
|
2293
2308
|
imageSize,
|
|
2294
2309
|
onRemoveFile: () => onRemoveFile?.(file),
|
|
@@ -2298,7 +2313,10 @@ var ImageUpload = class extends Component {
|
|
|
2298
2313
|
else return /* @__PURE__ */ jsx(FileUpload, {
|
|
2299
2314
|
...otherProps,
|
|
2300
2315
|
onRemoveFile: (file) => {
|
|
2301
|
-
this.setState({
|
|
2316
|
+
this.setState({
|
|
2317
|
+
file: null,
|
|
2318
|
+
dragOverUrl: void 0
|
|
2319
|
+
});
|
|
2302
2320
|
onRemoveFile?.(file);
|
|
2303
2321
|
},
|
|
2304
2322
|
onSelectFile: (file) => {
|
|
@@ -2377,9 +2395,17 @@ var formatTime = (timezone, date) => {
|
|
|
2377
2395
|
var DateTimeInput = forwardRef(({ timestamp, timezone, warning, readOnly = false, onChange, ...otherProps }, ref) => {
|
|
2378
2396
|
const [time, setTime] = useState(formatTime(timezone, timestamp));
|
|
2379
2397
|
const timeValue = time == null ? formatTime(timezone, timestamp) : time;
|
|
2380
|
-
|
|
2398
|
+
const [lastInput, setLastInput] = useState({
|
|
2399
|
+
timestamp,
|
|
2400
|
+
timezone
|
|
2401
|
+
});
|
|
2402
|
+
if (timestamp !== lastInput.timestamp || timezone !== lastInput.timezone) {
|
|
2403
|
+
setLastInput({
|
|
2404
|
+
timestamp,
|
|
2405
|
+
timezone
|
|
2406
|
+
});
|
|
2381
2407
|
setTime(formatTime(timezone, timestamp));
|
|
2382
|
-
}
|
|
2408
|
+
}
|
|
2383
2409
|
function handleChangeDate(date, fromTextField) {
|
|
2384
2410
|
const currentDate = dayjs.tz(timestamp, timezone);
|
|
2385
2411
|
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 +2524,13 @@ var SelectWithSearchAsync = class extends Component {
|
|
|
2498
2524
|
const { currentItem } = this.state;
|
|
2499
2525
|
if (value && (!currentItem || currentItem.value !== value)) {
|
|
2500
2526
|
if (!this.reloadItemFromCache()) searchById(value).then(this.addBackendItemToCache);
|
|
2501
|
-
}
|
|
2527
|
+
}
|
|
2528
|
+
}
|
|
2529
|
+
static {
|
|
2530
|
+
this.getDerivedStateFromProps = (props, state) => {
|
|
2531
|
+
if (!props.value && state.currentItem) return { currentItem: null };
|
|
2532
|
+
return null;
|
|
2533
|
+
};
|
|
2502
2534
|
}
|
|
2503
2535
|
render() {
|
|
2504
2536
|
const { clearable, noResultsMessage, disabled, menuPortalTarget } = this.props;
|
|
@@ -2565,7 +2597,7 @@ var MultiMenuItem = class extends React.PureComponent {
|
|
|
2565
2597
|
};
|
|
2566
2598
|
//#endregion
|
|
2567
2599
|
//#region src/components/periodpicker/components/Inputs.tsx
|
|
2568
|
-
var ONE_HOUR =
|
|
2600
|
+
var ONE_HOUR = 36e5;
|
|
2569
2601
|
function Inputs({ period, onChange, readOnly, locale, timezone }) {
|
|
2570
2602
|
const [showWarningTarget, setShowWarningTarget] = useState("");
|
|
2571
2603
|
const warningTimeoutRef = useRef(void 0);
|
|
@@ -2774,7 +2806,7 @@ function createLastXDays(days, timezone) {
|
|
|
2774
2806
|
tsEnd: dayjs().endOf("day").valueOf()
|
|
2775
2807
|
};
|
|
2776
2808
|
}
|
|
2777
|
-
var DAY_TO_MILLIS =
|
|
2809
|
+
var DAY_TO_MILLIS = 864e5;
|
|
2778
2810
|
function periodToDays({ tsStart, tsEnd }) {
|
|
2779
2811
|
return Math.round((tsEnd - tsStart + 1) / DAY_TO_MILLIS);
|
|
2780
2812
|
}
|
|
@@ -2784,7 +2816,7 @@ function Menu({ onChange, onShowCustomPeriod, periodName, timezone }) {
|
|
|
2784
2816
|
const [visible, setVisible] = useState(false);
|
|
2785
2817
|
const [showDatePicker, setShowDatePicker] = useState(false);
|
|
2786
2818
|
const [showMonthPicker, setShowMonthPicker] = useState(false);
|
|
2787
|
-
const [datePickerDate, setDatePickerDate] = useState(Date.now());
|
|
2819
|
+
const [datePickerDate, setDatePickerDate] = useState(() => Date.now());
|
|
2788
2820
|
function setPeriod(period) {
|
|
2789
2821
|
onChange(period);
|
|
2790
2822
|
setVisible(false);
|
|
@@ -3210,17 +3242,18 @@ function sortModifications(modifications) {
|
|
|
3210
3242
|
//#endregion
|
|
3211
3243
|
//#region src/components/svg/SvgImage.tsx
|
|
3212
3244
|
function useGlobalStyleElement() {
|
|
3213
|
-
const
|
|
3245
|
+
const [styleElement] = useState(() => {
|
|
3246
|
+
const element = document.createElement("style");
|
|
3247
|
+
element.appendChild(document.createTextNode(""));
|
|
3248
|
+
return element;
|
|
3249
|
+
});
|
|
3214
3250
|
useEffect(() => {
|
|
3215
|
-
const styleElement = document.createElement("style");
|
|
3216
|
-
styleElement.appendChild(document.createTextNode(""));
|
|
3217
3251
|
if (document && document.head) document.head.appendChild(styleElement);
|
|
3218
|
-
styleElementRef.current = styleElement;
|
|
3219
3252
|
return () => {
|
|
3220
|
-
if (document && document.head
|
|
3253
|
+
if (document && document.head) document.head.removeChild(styleElement);
|
|
3221
3254
|
};
|
|
3222
|
-
}, []);
|
|
3223
|
-
return
|
|
3255
|
+
}, [styleElement]);
|
|
3256
|
+
return styleElement;
|
|
3224
3257
|
}
|
|
3225
3258
|
function SvgImage({ imageData, modifications, onConflict }) {
|
|
3226
3259
|
const svgWrapperRef = useRef(null);
|
|
@@ -3309,9 +3342,10 @@ var getClickConfiguration = (onClick) => {
|
|
|
3309
3342
|
var Chart = class extends Component {
|
|
3310
3343
|
constructor(..._args) {
|
|
3311
3344
|
super(..._args);
|
|
3312
|
-
this.state = {};
|
|
3345
|
+
this.state = { titleApplied: false };
|
|
3313
3346
|
this.chart = null;
|
|
3314
3347
|
this.ro = null;
|
|
3348
|
+
this.titleTimeoutId = void 0;
|
|
3315
3349
|
this.handleChart = (chart) => {
|
|
3316
3350
|
this.chart = chart;
|
|
3317
3351
|
this.ro = new ResizeObserver(() => {
|
|
@@ -3321,8 +3355,16 @@ var Chart = class extends Component {
|
|
|
3321
3355
|
};
|
|
3322
3356
|
}
|
|
3323
3357
|
componentDidMount() {
|
|
3358
|
+
this.titleTimeoutId = setTimeout(() => this.setState({ titleApplied: true }), 0);
|
|
3359
|
+
}
|
|
3360
|
+
/**
|
|
3361
|
+
* Builds the Highcharts configuration from the props. Everything here is derived, so it is
|
|
3362
|
+
* rebuilt while rendering rather than mirrored into state.
|
|
3363
|
+
*/
|
|
3364
|
+
buildOptions() {
|
|
3324
3365
|
const { type, title, items, tooltipTitle, valueFormatter, onClick } = this.props;
|
|
3325
|
-
this.
|
|
3366
|
+
const { titleApplied } = this.state;
|
|
3367
|
+
return {
|
|
3326
3368
|
...initialOptions,
|
|
3327
3369
|
plotOptions: {
|
|
3328
3370
|
...initialOptions.plotOptions,
|
|
@@ -3339,44 +3381,12 @@ var Chart = class extends Component {
|
|
|
3339
3381
|
...initialOptions.legend,
|
|
3340
3382
|
enabled: type === "pie"
|
|
3341
3383
|
},
|
|
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
3384
|
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"
|
|
3385
|
+
...initialOptions.title,
|
|
3386
|
+
text: titleApplied && type !== "column" ? title || "" : ""
|
|
3376
3387
|
},
|
|
3377
|
-
title: { text: type === "column" ? "" : title || "" },
|
|
3378
3388
|
yAxis: {
|
|
3379
|
-
...
|
|
3389
|
+
...initialOptions.yAxis,
|
|
3380
3390
|
enabled: type === "column",
|
|
3381
3391
|
title: { text: type === "column" ? title || "" : "" }
|
|
3382
3392
|
},
|
|
@@ -3385,35 +3395,20 @@ var Chart = class extends Component {
|
|
|
3385
3395
|
innerSize: "50%",
|
|
3386
3396
|
data: items.map(({ label, value }) => [label, value])
|
|
3387
3397
|
}]
|
|
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
|
-
});
|
|
3398
|
+
};
|
|
3407
3399
|
}
|
|
3408
3400
|
componentWillUnmount() {
|
|
3401
|
+
clearTimeout(this.titleTimeoutId);
|
|
3409
3402
|
if (this.ro && this.chart?.renderTo) this.ro.unobserve(this.chart.renderTo);
|
|
3410
3403
|
this.chart = null;
|
|
3411
3404
|
this.ro = null;
|
|
3412
3405
|
}
|
|
3413
3406
|
render() {
|
|
3407
|
+
const built = this.buildOptions();
|
|
3408
|
+
const options = this.props.updateOptions ? this.props.updateOptions(built) : built;
|
|
3414
3409
|
return /* @__PURE__ */ jsx(HighchartsReact, {
|
|
3415
3410
|
highcharts: Highcharts,
|
|
3416
|
-
options
|
|
3411
|
+
options,
|
|
3417
3412
|
containerProps: { className: this.props.className },
|
|
3418
3413
|
callback: this.handleChart
|
|
3419
3414
|
});
|
|
@@ -3510,12 +3505,13 @@ function useLimitStyling(limit, min, max) {
|
|
|
3510
3505
|
if (!containerEl) throw new Error(".rc-slider-rail element missing");
|
|
3511
3506
|
const disabledAreaEl = containerEl?.querySelector(`.disabled-area-element`);
|
|
3512
3507
|
const sliderWidth = containerEl.getBoundingClientRect().width;
|
|
3513
|
-
if (disabledAreaEl)
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
|
|
3508
|
+
if (disabledAreaEl) {
|
|
3509
|
+
if (limit == null) disabledAreaEl.remove();
|
|
3510
|
+
else {
|
|
3511
|
+
const width = Math.round((max - limit) / (max - min) * sliderWidth);
|
|
3512
|
+
disabledAreaEl.style.width = `${width}px`;
|
|
3513
|
+
}
|
|
3514
|
+
} else if (limit != null) {
|
|
3519
3515
|
const width = Math.round((max - limit) / (max - min) * sliderWidth);
|
|
3520
3516
|
const disabledAreaEl = document.createElement("div");
|
|
3521
3517
|
disabledAreaEl.classList.add("disabled-area-element");
|