@gridsuite/commons-ui 0.13.1 → 0.14.3

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 CHANGED
@@ -34,10 +34,10 @@ and then rerun npm install.
34
34
  If you want to deploy a new version of commons-ui in the [NPM package registry](https://www.npmjs.com/package/@gridsuite/commons-ui),
35
35
  you need to follow the steps below:
36
36
 
37
- - Update to the new version in [package.json](https://github.com/gridsuite/commons-ui/blob/master/package.json) (example `0.6.0`)
37
+ - Update to the new version in [package.json](https://github.com/gridsuite/commons-ui/blob/main/package.json) (example `0.6.0`)
38
38
  - Build it: `npm install`
39
- - Commit the package.json and package-lock.json files, push to a branch, make a PR, have it reviewed and merged to master.
40
- - Pull and checkout master on your last commit.
39
+ - Commit the package.json and package-lock.json files, push to a branch, make a PR, have it reviewed and merged to main.
40
+ - Pull and checkout main on your last commit.
41
41
  - [Tag your last commit](https://semver.org/) : `git tag <tag>` (example: `v0.6.0`)
42
42
  - Push tag : `git push origin <tag>`
43
43
  - Checkout the tag in a fresh repo copy : `cd $(mktemp -d) && git clone https://github.com/gridsuite/commons-ui.git` then `cd commons-ui && git checkout <tag>`
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+
6
+ var _react = _interopRequireWildcard(require("react"));
7
+
8
+ var _styles = require("@material-ui/core/styles");
9
+
10
+ var _core = require("@material-ui/core");
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _lab = require("@material-ui/lab");
15
+
16
+ var _Search = _interopRequireDefault(require("@material-ui/icons/Search"));
17
+
18
+ var _reactIntl = require("react-intl");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
27
+
28
+ var TERM_MIN_SIZE_BEFORE_SEARCH = 3;
29
+ var useStyles = (0, _styles.makeStyles)({
30
+ title: {
31
+ padding: '0px'
32
+ },
33
+ content: {
34
+ display: 'flex',
35
+ alignItems: 'end',
36
+ padding: '20px',
37
+ paddingRight: '0px'
38
+ }
39
+ });
40
+
41
+ var ElementSearchDialog = function ElementSearchDialog(props) {
42
+ var classes = useStyles();
43
+ var intl = (0, _reactIntl.useIntl)();
44
+ var open = props.open,
45
+ onClose = props.onClose,
46
+ searchingLabel = props.searchingLabel,
47
+ onSearchTermChange = props.onSearchTermChange,
48
+ onSelectionChange = props.onSelectionChange,
49
+ elementsFound = props.elementsFound,
50
+ renderElement = props.renderElement;
51
+
52
+ var _useState = (0, _react.useState)([]),
53
+ elements = _useState[0],
54
+ setElements = _useState[1];
55
+
56
+ var _useState2 = (0, _react.useState)(false),
57
+ expanded = _useState2[0],
58
+ setExpanded = _useState2[1];
59
+
60
+ var _useState3 = (0, _react.useState)(false),
61
+ loading = _useState3[0],
62
+ setLoading = _useState3[1];
63
+
64
+ (0, _react.useEffect)(function () {
65
+ setLoading(false);
66
+ setElements(elementsFound);
67
+ }, [elementsFound]);
68
+
69
+ var handleSearchTermChange = function handleSearchTermChange(term) {
70
+ if (term.length >= TERM_MIN_SIZE_BEFORE_SEARCH) {
71
+ setLoading(true);
72
+ onSearchTermChange(term);
73
+ setExpanded(true);
74
+ } else {
75
+ setElements([]);
76
+ setExpanded(false);
77
+ }
78
+ };
79
+
80
+ return /*#__PURE__*/_react["default"].createElement(_core.Dialog, {
81
+ open: open,
82
+ onClose: onClose,
83
+ "aria-labelledby": "dialog-title-search",
84
+ fullWidth: true
85
+ }, /*#__PURE__*/_react["default"].createElement(_core.DialogTitle, {
86
+ className: classes.title
87
+ }), /*#__PURE__*/_react["default"].createElement(_core.DialogContent, null, /*#__PURE__*/_react["default"].createElement(_lab.Autocomplete, {
88
+ id: "element-search",
89
+ forcePopupIcon: false,
90
+ open: expanded,
91
+ onOpen: function onOpen() {
92
+ setElements([]);
93
+ },
94
+ onClose: function onClose() {
95
+ setExpanded(false);
96
+ },
97
+ fullWidth: true,
98
+ onInputChange: function onInputChange(event, value) {
99
+ return handleSearchTermChange(value);
100
+ },
101
+ onChange: function onChange(event, newValue) {
102
+ return onSelectionChange(newValue);
103
+ },
104
+ getOptionLabel: function getOptionLabel(option) {
105
+ return option.label;
106
+ },
107
+ getOptionSelected: function getOptionSelected(option, value) {
108
+ return option.id === value.id;
109
+ },
110
+ options: elements,
111
+ loading: loading,
112
+ autoHighlight: true,
113
+ noOptionsText: intl.formatMessage({
114
+ id: 'element_search/noResult'
115
+ }),
116
+ renderOption: renderElement,
117
+ renderInput: function renderInput(params) {
118
+ return /*#__PURE__*/_react["default"].createElement(_core.TextField, _extends({
119
+ autoFocus: true
120
+ }, params, {
121
+ label: searchingLabel || intl.formatMessage({
122
+ id: 'element_search/noResult'
123
+ }),
124
+ InputProps: _extends({}, params.InputProps, {
125
+ startAdornment: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Search["default"], {
126
+ color: "disabled"
127
+ }), params.InputProps.startAdornment)
128
+ })
129
+ }));
130
+ }
131
+ })));
132
+ };
133
+
134
+ ElementSearchDialog.propTypes = process.env.NODE_ENV !== "production" ? {
135
+ open: _propTypes["default"].bool.isRequired,
136
+ onClose: _propTypes["default"].func.isRequired,
137
+ searchingLabel: _propTypes["default"].string,
138
+ onSearchTermChange: _propTypes["default"].func.isRequired,
139
+ onSelectionChange: _propTypes["default"].func.isRequired,
140
+ elementsFound: _propTypes["default"].array.isRequired,
141
+ renderElement: _propTypes["default"].func.isRequired
142
+ } : {};
143
+ var _default = ElementSearchDialog;
144
+ exports["default"] = _default;
145
+ module.exports = exports.default;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+
6
+ var _elementSearchDialog = _interopRequireDefault(require("./element-search-dialog"));
7
+
8
+ exports["default"] = _elementSearchDialog["default"];
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
+
12
+ module.exports = exports.default;
@@ -31,6 +31,8 @@ var _ListItemText = _interopRequireDefault(require("@material-ui/core/ListItemTe
31
31
 
32
32
  var _Apps = _interopRequireDefault(require("@material-ui/icons/Apps"));
33
33
 
34
+ var _Search = _interopRequireDefault(require("@material-ui/icons/Search"));
35
+
34
36
  var _FullscreenExit = _interopRequireDefault(require("@material-ui/icons/FullscreenExit"));
35
37
 
36
38
  var _ArrowDropDown = _interopRequireDefault(require("@material-ui/icons/ArrowDropDown"));
@@ -65,6 +67,10 @@ var _MenuList = _interopRequireDefault(require("@material-ui/core/MenuList"));
65
67
 
66
68
  var _ClickAwayListener = _interopRequireDefault(require("@material-ui/core/ClickAwayListener"));
67
69
 
70
+ var _clsx3 = _interopRequireDefault(require("clsx"));
71
+
72
+ var _ElementSearchDialog = _interopRequireDefault(require("../ElementSearchDialog"));
73
+
68
74
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
69
75
 
70
76
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -83,7 +89,6 @@ var useStyles = (0, _styles.makeStyles)(function (theme) {
83
89
  flexShrink: 0,
84
90
  width: 48,
85
91
  height: 48,
86
- cursor: 'pointer',
87
92
  marginBottom: 8
88
93
  },
89
94
  menuIcon: {
@@ -91,7 +96,9 @@ var useStyles = (0, _styles.makeStyles)(function (theme) {
91
96
  height: 24
92
97
  },
93
98
  title: {
94
- marginLeft: 18,
99
+ marginLeft: 18
100
+ },
101
+ clickable: {
95
102
  cursor: 'pointer'
96
103
  },
97
104
  link: {
@@ -199,6 +206,8 @@ var EN = 'EN';
199
206
  var FR = 'FR';
200
207
 
201
208
  var TopBar = function TopBar(_ref) {
209
+ var _clsx, _clsx2;
210
+
202
211
  var appName = _ref.appName,
203
212
  appColor = _ref.appColor,
204
213
  appLogo = _ref.appLogo,
@@ -213,6 +222,12 @@ var TopBar = function TopBar(_ref) {
213
222
  theme = _ref.theme,
214
223
  onEquipmentLabellingClick = _ref.onEquipmentLabellingClick,
215
224
  equipmentLabelling = _ref.equipmentLabelling,
225
+ withElementsSearch = _ref.withElementsSearch,
226
+ searchingLabel = _ref.searchingLabel,
227
+ onSearchTermChange = _ref.onSearchTermChange,
228
+ _onSelectionChange = _ref.onSelectionChange,
229
+ elementsFound = _ref.elementsFound,
230
+ renderElement = _ref.renderElement,
216
231
  onLanguageClick = _ref.onLanguageClick,
217
232
  language = _ref.language;
218
233
  var classes = useStyles();
@@ -237,6 +252,14 @@ var TopBar = function TopBar(_ref) {
237
252
  isMenuOpen = _useState2[0],
238
253
  setMenuOpen = _useState2[1];
239
254
 
255
+ var _useState3 = (0, _react.useState)(false),
256
+ isDialogSearchOpen = _useState3[0],
257
+ setDialogSearchOpen = _useState3[1];
258
+
259
+ var handleClickElementSearch = function handleClickElementSearch() {
260
+ setDialogSearchOpen(true);
261
+ };
262
+
240
263
  var handleToggleSettingsMenu = function handleToggleSettingsMenu() {
241
264
  setAnchorElSettingsMenu(true);
242
265
  setMenuOpen(true);
@@ -311,6 +334,16 @@ var TopBar = function TopBar(_ref) {
311
334
  }
312
335
  };
313
336
 
337
+ (0, _react.useEffect)(function () {
338
+ if (user && withElementsSearch) {
339
+ document.addEventListener('keydown', function (e) {
340
+ if (e.ctrlKey && e.key === 'f') {
341
+ e.preventDefault();
342
+ setDialogSearchOpen(true);
343
+ }
344
+ });
345
+ }
346
+ }, [user, withElementsSearch]);
314
347
  return /*#__PURE__*/_react["default"].createElement(_AppBar["default"], {
315
348
  position: "static",
316
349
  color: "default",
@@ -322,11 +355,11 @@ var TopBar = function TopBar(_ref) {
322
355
  return console.debug('full screen error : ' + e.message);
323
356
  }
324
357
  }), /*#__PURE__*/_react["default"].createElement(_Toolbar["default"], null, /*#__PURE__*/_react["default"].createElement("div", {
325
- className: classes.logo,
358
+ className: (0, _clsx3["default"])(classes.logo, (_clsx = {}, _clsx[classes.clickable] = onLogoClick, _clsx)),
326
359
  onClick: onLogoClick
327
360
  }, appLogo), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
328
361
  variant: "h4",
329
- className: classes.title,
362
+ className: (0, _clsx3["default"])(classes.title, (_clsx2 = {}, _clsx2[classes.clickable] = onLogoClick, _clsx2)),
330
363
  onClick: onLogoClick
331
364
  }, /*#__PURE__*/_react["default"].createElement("span", {
332
365
  style: {
@@ -338,7 +371,23 @@ var TopBar = function TopBar(_ref) {
338
371
  }
339
372
  }, appName)), /*#__PURE__*/_react["default"].createElement("div", {
340
373
  className: classes.grow
341
- }, children), user && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
374
+ }, children), user && withElementsSearch && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_ElementSearchDialog["default"], {
375
+ open: isDialogSearchOpen,
376
+ onClose: function onClose() {
377
+ return setDialogSearchOpen(false);
378
+ },
379
+ searchingLabel: searchingLabel,
380
+ onSearchTermChange: onSearchTermChange,
381
+ onSelectionChange: function onSelectionChange(element) {
382
+ setDialogSearchOpen(false);
383
+
384
+ _onSelectionChange(element);
385
+ },
386
+ elementsFound: elementsFound,
387
+ renderElement: renderElement
388
+ }), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
389
+ onClick: handleClickElementSearch
390
+ }, /*#__PURE__*/_react["default"].createElement(_Search["default"], null)))), user && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
342
391
  "aria-controls": "apps-menu",
343
392
  "aria-haspopup": "true",
344
393
  onClick: handleClickAppsMenu
@@ -348,7 +397,9 @@ var TopBar = function TopBar(_ref) {
348
397
  keepMounted: true,
349
398
  open: Boolean(anchorElAppsMenu),
350
399
  onClose: handleCloseAppsMenu
351
- }, appsAndUrls && appsAndUrls.map(function (item) {
400
+ }, appsAndUrls && appsAndUrls.filter(function (item) {
401
+ return !item.hiddenInAppsMenu;
402
+ }).map(function (item) {
352
403
  return /*#__PURE__*/_react["default"].createElement("a", {
353
404
  key: item.name,
354
405
  href: item.url,
@@ -412,7 +463,8 @@ var TopBar = function TopBar(_ref) {
412
463
  style: {
413
464
  opacity: '1',
414
465
  paddingTop: '10px',
415
- paddingBottom: '10px'
466
+ paddingBottom: '10px',
467
+ backgroundColor: 'transparent'
416
468
  }
417
469
  }, /*#__PURE__*/_react["default"].createElement(_ListItemText["default"], null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
418
470
  className: classes.sizeLabel
@@ -443,7 +495,8 @@ var TopBar = function TopBar(_ref) {
443
495
  opacity: '1',
444
496
  // padding: '0',
445
497
  paddingTop: '10px',
446
- paddingBottom: '10px'
498
+ paddingBottom: '10px',
499
+ backgroundColor: 'transparent'
447
500
  }
448
501
  }, /*#__PURE__*/_react["default"].createElement(_ListItemText["default"], null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
449
502
  className: classes.sizeLabel
@@ -472,7 +525,8 @@ var TopBar = function TopBar(_ref) {
472
525
  style: {
473
526
  opacity: '1',
474
527
  paddingTop: '10px',
475
- paddingBottom: '10px'
528
+ paddingBottom: '10px',
529
+ backgroundColor: 'transparent'
476
530
  }
477
531
  }, /*#__PURE__*/_react["default"].createElement(_ListItemText["default"], null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
478
532
  className: classes.sizeLabel
@@ -557,13 +611,18 @@ TopBar.propTypes = process.env.NODE_ENV !== "production" ? {
557
611
  appColor: _propTypes["default"].string,
558
612
  appLogo: _propTypes["default"].object,
559
613
  user: _propTypes["default"].object,
560
- children: _propTypes["default"].array,
614
+ children: _propTypes["default"].node,
561
615
  appsAndUrls: _propTypes["default"].array,
562
616
  onThemeClick: _propTypes["default"].func,
563
617
  theme: _propTypes["default"].string,
564
618
  onAboutClick: _propTypes["default"].func,
565
619
  onEquipmentLabellingClick: _propTypes["default"].func,
566
620
  equipmentLabelling: _propTypes["default"].bool,
621
+ withElementsSearch: _propTypes["default"].bool,
622
+ searchingLabel: _propTypes["default"].string,
623
+ onSearchTermChange: _propTypes["default"].func,
624
+ onSelectionChange: _propTypes["default"].func,
625
+ elementsFound: _propTypes["default"].array,
567
626
  onLanguageClick: _propTypes["default"].func.isRequired,
568
627
  language: _propTypes["default"].string.isRequired
569
628
  } : {};
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+
6
+ var _react = _interopRequireWildcard(require("react"));
7
+
8
+ var _reactIntl = require("react-intl");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _styles = require("@material-ui/core/styles");
13
+
14
+ var _Dialog = _interopRequireDefault(require("@material-ui/core/Dialog"));
15
+
16
+ var _DialogActions = _interopRequireDefault(require("@material-ui/core/DialogActions"));
17
+
18
+ var _DialogContent = _interopRequireDefault(require("@material-ui/core/DialogContent"));
19
+
20
+ var _DialogContentText = _interopRequireDefault(require("@material-ui/core/DialogContentText"));
21
+
22
+ var _DialogTitle = _interopRequireDefault(require("@material-ui/core/DialogTitle"));
23
+
24
+ var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
25
+
26
+ var _TreeItem = _interopRequireDefault(require("@material-ui/lab/TreeItem"));
27
+
28
+ var _TreeView = _interopRequireDefault(require("@material-ui/lab/TreeView"));
29
+
30
+ var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
31
+
32
+ var _ExpandMore = _interopRequireDefault(require("@material-ui/icons/ExpandMore"));
33
+
34
+ var _ChevronRight = _interopRequireDefault(require("@material-ui/icons/ChevronRight"));
35
+
36
+ var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
37
+
38
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
39
+
40
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
+
42
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
43
+
44
+ /**
45
+ * Copyright (c) 2021, RTE (http://www.rte-france.com)
46
+ * This Source Code Form is subject to the terms of the Mozilla Public
47
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
48
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
49
+ */
50
+ var defaultStyles = {
51
+ dialogPaper: {
52
+ minWidth: '50%'
53
+ },
54
+ labelRoot: {
55
+ display: 'flex',
56
+ alignContent: 'center',
57
+ alignItems: 'center'
58
+ },
59
+ labelText: {
60
+ fontWeight: 'inherit',
61
+ flexGrow: 1
62
+ },
63
+ labelIcon: {
64
+ display: 'flex',
65
+ alignContent: 'center',
66
+ alignItems: 'center',
67
+ marginRight: '4px'
68
+ },
69
+ icon: {}
70
+ };
71
+ /**
72
+ * This callback type is called `onTreeBrowseCallback` and is displayed as a global symbol.
73
+ *
74
+ * @callback onTreeBrowseCallback
75
+ * @param {string} nodeId The id of the node clicked
76
+ */
77
+
78
+ /**
79
+ * TreeViewFinder documentation :
80
+ * Component to choose elements in a flat list or a Tree data structure
81
+ * It is flexible and allow controlled props to let Parent component manage
82
+ * data.
83
+ *
84
+ * @param {Object} classes - CSS classes, please use withStyles API from MaterialUI
85
+ * @param {String} [title] - Title of the Dialog
86
+ * @param {Boolean} open - dialog state boolean handler (Controlled)
87
+ * @param {EventListener} onClose - onClose callback to call when closing dialog
88
+ * @param {Object[]} data - data to feed the component (Controlled).
89
+ * @param {String} data[].id - Uuid of the object in Tree
90
+ * @param {String} data[].parentId - Uuid of the parent node in Tree
91
+ * @param {String} data[].name - name of the node to print in Tree
92
+ * @param {Object[]} [data[].children] - array of children nodes, if undefined, the node is a leaf.
93
+ * @param {String} [data[].icon] - JSX of an icon to display next a node
94
+ * @callback onTreeBrowse - callback to update data prop when walk into Tree
95
+ * @param {Array} [defaultSelected=[]] - selected items at mount (Uncontrolled)
96
+ * @param {Array} [defaultExpanded=[]] - ids of the expanded items at mount (Uncontrolled)
97
+ * @param {String} [validationButtonText=default text] - Customized Validation Button text (default: Add N Elements)
98
+ * @param {Boolean} [onlyLeaves=true] - Allow/Forbid selection only on leaves
99
+ * @param {Boolean} [multiselect=false] - Allow/Forbid multiselection on Tree
100
+ */
101
+
102
+ var TreeViewFinder = function TreeViewFinder(props) {
103
+ var intl = (0, _reactIntl.useIntl)();
104
+ var classes = props.classes,
105
+ title = props.title,
106
+ open = props.open,
107
+ data = props.data,
108
+ defaultExpanded = props.defaultExpanded,
109
+ defaultSelected = props.defaultSelected,
110
+ _onClose = props.onClose,
111
+ onTreeBrowse = props.onTreeBrowse,
112
+ validationButtonText = props.validationButtonText,
113
+ onlyLeaves = props.onlyLeaves,
114
+ multiselect = props.multiselect;
115
+
116
+ var _useState = (0, _react.useState)({}),
117
+ mapPrintedNodes = _useState[0],
118
+ setMapPrintedNodes = _useState[1]; // Controlled expanded for TreeView
119
+
120
+
121
+ var _useState2 = (0, _react.useState)(defaultExpanded),
122
+ expanded = _useState2[0],
123
+ setExpanded = _useState2[1]; // Controlled selected for TreeView
124
+
125
+
126
+ var _useState3 = (0, _react.useState)(defaultSelected),
127
+ selected = _useState3[0],
128
+ setSelected = _useState3[1];
129
+ /* Utilities */
130
+
131
+
132
+ var isSelectable = function isSelectable(node) {
133
+ return onlyLeaves ? isLeaf(node) : true; // otherwise everything is selectable
134
+ };
135
+
136
+ var isLeaf = function isLeaf(node) {
137
+ return node && node.children === undefined;
138
+ };
139
+
140
+ var computeMapPrintedNodes = (0, _react.useCallback)(function (nodes) {
141
+ var newMapPrintedNodes = {};
142
+ nodes.forEach(function (node) {
143
+ newMapPrintedNodes[node.id] = node;
144
+ if (!isLeaf(node)) Object.assign(newMapPrintedNodes, computeMapPrintedNodes(node.children));
145
+ });
146
+ return newMapPrintedNodes;
147
+ }, []); // Effects
148
+
149
+ (0, _react.useEffect)(function () {
150
+ // compute all mapPrintedNodes here from data prop
151
+ // if data changes in current expanded nodes
152
+ var newMapPrintedNodes = computeMapPrintedNodes(data);
153
+ console.debug('data updated, new mapPrintedNodes (nbNodes = ', Object.keys(newMapPrintedNodes).length, ') : ', newMapPrintedNodes);
154
+ setMapPrintedNodes(newMapPrintedNodes);
155
+ }, [data, computeMapPrintedNodes]);
156
+
157
+ var computeSelectedNodes = function computeSelectedNodes() {
158
+ return selected.map(function (nodeId) {
159
+ return mapPrintedNodes[nodeId];
160
+ });
161
+ };
162
+
163
+ var handleNodeToggle = function handleNodeToggle(e, nodeIds) {
164
+ // onTreeBrowse proc only on last node clicked and only when expanded
165
+ nodeIds.every(function (nodeId) {
166
+ if (!expanded.includes(nodeId)) {
167
+ // proc onTreeBrowse here
168
+ onTreeBrowse && onTreeBrowse(nodeId);
169
+ return false; // break loop to call onTreeBrowse only once
170
+ }
171
+
172
+ return true;
173
+ });
174
+ setExpanded(nodeIds); // will proc onNodeSelect then ...
175
+ };
176
+ /* User Interaction management */
177
+
178
+
179
+ var handleNodeSelect = function handleNodeSelect(e, values) {
180
+ // Default management
181
+ if (multiselect) {
182
+ setSelected(values.filter(function (nodeId) {
183
+ return isSelectable(mapPrintedNodes[nodeId]);
184
+ }));
185
+ } else {
186
+ // Toggle selection to allow unselection
187
+ if (selected.includes(values)) setSelected([]);else setSelected(isSelectable(mapPrintedNodes[values]) ? [values] : []);
188
+ }
189
+ };
190
+ /* Render utilities */
191
+
192
+
193
+ var getValidationButtonText = function getValidationButtonText() {
194
+ if (validationButtonText) return validationButtonText;else return intl.formatMessage({
195
+ id: 'treeview_finder/addElementsValidation'
196
+ }, {
197
+ nbElements: selected.length
198
+ });
199
+ };
200
+
201
+ var getNodeIcon = function getNodeIcon(node) {
202
+ if (!node) return null;
203
+ if (isSelectable(node) && selected.find(function (nodeId) {
204
+ return nodeId === node.id;
205
+ })) return /*#__PURE__*/_react["default"].createElement(_Check["default"], {
206
+ className: classes.labelIcon
207
+ });else if (node.icon) return /*#__PURE__*/_react["default"].createElement("div", {
208
+ className: classes.labelIcon
209
+ }, node.icon);else return null;
210
+ };
211
+
212
+ var renderTreeItemLabel = function renderTreeItemLabel(node) {
213
+ return /*#__PURE__*/_react["default"].createElement("div", {
214
+ className: classes.labelRoot
215
+ }, getNodeIcon(node), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
216
+ className: classes.labelText
217
+ }, node.name));
218
+ };
219
+
220
+ var renderTree = function renderTree(node) {
221
+ if (!node) return;
222
+ return /*#__PURE__*/_react["default"].createElement(_TreeItem["default"], {
223
+ key: node.id,
224
+ nodeId: node.id,
225
+ label: renderTreeItemLabel(node)
226
+ }, Array.isArray(node.children) ? node.children.length ? node.children.map(function (child) {
227
+ return renderTree(child);
228
+ }) : [false] // Pass non empty Array here to simulate a child then this node isn't considered as a leaf.
229
+ : null);
230
+ };
231
+
232
+ return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
233
+ open: open,
234
+ onClose: function onClose(e, r) {
235
+ if (r === 'escapeKeyDown' || r === 'backdropClick') {
236
+ _onClose([]);
237
+
238
+ setSelected([]);
239
+ }
240
+ },
241
+ "aria-labelledby": "TreeViewFindertitle",
242
+ classes: {
243
+ paper: classes.dialogPaper
244
+ }
245
+ }, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], {
246
+ id: "TreeViewFindertitle"
247
+ }, title ? title : intl.formatMessage({
248
+ id: 'treeview_finder/finderTitle'
249
+ }, {
250
+ multiselect: multiselect
251
+ })), /*#__PURE__*/_react["default"].createElement(_DialogContent["default"], null, /*#__PURE__*/_react["default"].createElement(_DialogContentText["default"], null, intl.formatMessage({
252
+ id: 'treeview_finder/contentText'
253
+ }, {
254
+ multiselect: multiselect
255
+ })), /*#__PURE__*/_react["default"].createElement(_TreeView["default"] // Controlled props
256
+ , {
257
+ expanded: expanded,
258
+ selected: selected // events
259
+ ,
260
+ onNodeToggle: handleNodeToggle,
261
+ onNodeSelect: handleNodeSelect // Uncontrolled props
262
+ ,
263
+ defaultCollapseIcon: /*#__PURE__*/_react["default"].createElement(_ExpandMore["default"], {
264
+ className: classes.icon
265
+ }),
266
+ defaultExpandIcon: /*#__PURE__*/_react["default"].createElement(_ChevronRight["default"], {
267
+ className: classes.icon
268
+ }),
269
+ multiSelect: multiselect
270
+ }, data && Array.isArray(data) ? data.map(function (child) {
271
+ return renderTree(child);
272
+ }) : null)), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
273
+ variant: "contained",
274
+ style: {
275
+ "float": 'left',
276
+ margin: '5px'
277
+ },
278
+ onClick: function onClick() {
279
+ _onClose([]);
280
+
281
+ setSelected([]);
282
+ }
283
+ }, /*#__PURE__*/_react["default"].createElement(_reactIntl.FormattedMessage, {
284
+ id: "treeview_finder/cancel"
285
+ })), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
286
+ variant: "contained",
287
+ style: {
288
+ "float": 'left',
289
+ margin: '5px'
290
+ },
291
+ onClick: function onClick() {
292
+ _onClose(computeSelectedNodes());
293
+
294
+ setSelected([]);
295
+ },
296
+ disabled: selected.length === 0
297
+ }, getValidationButtonText())));
298
+ };
299
+ /* TreeViewFinder props list */
300
+
301
+
302
+ TreeViewFinder.propTypes = process.env.NODE_ENV !== "production" ? {
303
+ // Controlled
304
+ open: _propTypes["default"].bool.isRequired,
305
+ onClose: _propTypes["default"].func,
306
+ data: _propTypes["default"].arrayOf(_propTypes["default"].shape({
307
+ id: _propTypes["default"].string.isRequired,
308
+ name: _propTypes["default"].string.isRequired,
309
+ children: _propTypes["default"].array
310
+ })).isRequired,
311
+ onTreeBrowse: _propTypes["default"].func,
312
+ //uncontrolled
313
+ classes: _propTypes["default"].object.isRequired,
314
+ title: _propTypes["default"].string,
315
+ validationButtonText: _propTypes["default"].string,
316
+ defaultSelected: _propTypes["default"].arrayOf(_propTypes["default"].string),
317
+ defaultExpanded: _propTypes["default"].arrayOf(_propTypes["default"].string),
318
+ onlyLeaves: _propTypes["default"].bool,
319
+ multiselect: _propTypes["default"].bool
320
+ } : {};
321
+ /* TreeViewFinder props default values */
322
+
323
+ TreeViewFinder.defaultProps = {
324
+ defaultSelected: [],
325
+ defaultExpanded: [],
326
+ onlyLeaves: true,
327
+ multiselect: false
328
+ };
329
+
330
+ var _default = (0, _styles.withStyles)(defaultStyles)(TreeViewFinder);
331
+
332
+ exports["default"] = _default;
333
+ module.exports = exports.default;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+
6
+ var _TreeViewFinder = _interopRequireDefault(require("./TreeViewFinder"));
7
+
8
+ exports["default"] = _TreeViewFinder["default"];
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
+
12
+ module.exports = exports.default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var element_search_en = {
6
+ 'element_search/noResult': 'No result'
7
+ };
8
+ var _default = element_search_en;
9
+ exports["default"] = _default;
10
+ module.exports = exports.default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var element_search_fr = {
6
+ 'element_search/noResult': 'Aucun résultat'
7
+ };
8
+ var _default = element_search_fr;
9
+ exports["default"] = _default;
10
+ module.exports = exports.default;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var equipment_search_en = {
6
+ 'equipment_search/label': 'Search an equipment',
7
+ 'equipment_search/switchTag': 'SWITCH',
8
+ 'equipment_search/busbarSectionTag': 'BBS',
9
+ 'equipment_search/lineTag': 'LINE',
10
+ 'equipment_search/2wtTag': '2W TRANSFO',
11
+ 'equipment_search/3wtTag': '3W TRANSFO',
12
+ 'equipment_search/generatorTag': 'GENERATOR',
13
+ 'equipment_search/batteryTag': 'BATTERY',
14
+ 'equipment_search/loadTag': 'LOAD',
15
+ 'equipment_search/shuntTag': 'SHUNT',
16
+ 'equipment_search/svcTag': 'SVC',
17
+ 'equipment_search/hvdcLinkTag': 'HVDC LINK',
18
+ 'equipment_search/hvdcStationTag': 'HVDC STATION',
19
+ 'equipment_search/voltageLevelTag': 'VOLTAGE LEVEL',
20
+ 'equipment_search/substationTag': 'SUBSTATION'
21
+ };
22
+ var _default = equipment_search_en;
23
+ exports["default"] = _default;
24
+ module.exports = exports.default;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var equipment_search_fr = {
6
+ 'equipment_search/label': 'Rechercher un équipement',
7
+ 'equipment_search/switchTag': 'SWITCH',
8
+ 'equipment_search/busbarSectionTag': 'SJB',
9
+ 'equipment_search/lineTag': 'LIGNE',
10
+ 'equipment_search/2wtTag': 'TRANSFO 2E',
11
+ 'equipment_search/3wtTag': 'TRANSFO 3E',
12
+ 'equipment_search/generatorTag': 'GROUPE',
13
+ 'equipment_search/batteryTag': 'BATTERIE',
14
+ 'equipment_search/loadTag': 'CONSO',
15
+ 'equipment_search/shuntTag': 'MCS',
16
+ 'equipment_search/svcTag': 'CSPR',
17
+ 'equipment_search/hvdcLinkTag': 'LIAISON HVDC',
18
+ 'equipment_search/hvdcStationTag': 'STATION HVDC',
19
+ 'equipment_search/voltageLevelTag': 'POSTE',
20
+ 'equipment_search/substationTag': 'SITE'
21
+ };
22
+ var _default = equipment_search_fr;
23
+ exports["default"] = _default;
24
+ module.exports = exports.default;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var treeview_finder_en = {
6
+ 'treeview_finder/close': 'Close',
7
+ 'treeview_finder/cancel': 'Cancel',
8
+ 'treeview_finder/validate': 'Validate',
9
+ 'treeview_finder/add': 'Add...',
10
+ 'treeview_finder/deleteSelection': 'Delete selection',
11
+ 'treeview_finder/contentText': '{multiselect, select, true {Please choose one or more element(s).} false {Please choose one element.} other {}}',
12
+ 'treeview_finder/finderTitle': '{multiselect, select, true {Please choose one or more element(s).} false {Please choose one element.} other {}}',
13
+ 'treeview_finder/addElementsValidation': '{nbElements, plural, =0 {Please select an element} =1 {Add this element} other{Add # elements}}'
14
+ };
15
+ var _default = treeview_finder_en;
16
+ exports["default"] = _default;
17
+ module.exports = exports.default;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var treeview_finder_fr = {
6
+ 'treeview_finder/close': 'Fermer',
7
+ 'treeview_finder/cancel': 'Annuler',
8
+ 'treeview_finder/validate': 'Valider',
9
+ 'treeview_finder/add': 'Ajouter...',
10
+ 'treeview_finder/deleteSelection': 'Supprimer la selection',
11
+ 'treeview_finder/contentText': '{multiselect, select, true {Veuillez choisir un ou plusieurs éléments.} false {Veuillez choisir un élément.} other {}}',
12
+ 'treeview_finder/finderTitle': '{multiselect, select, true {Veuillez choisir un ou plusieurs éléments.} false {Veuillez choisir un élément.} other {}}',
13
+ 'treeview_finder/addElementsValidation': '{nbElements, plural, =0 {Veuillez sélectionner un élément} =1 {Ajouter cet élément} other {Ajouter # éléments}}'
14
+ };
15
+ var _default = treeview_finder_fr;
16
+ exports["default"] = _default;
17
+ module.exports = exports.default;
package/lib/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- exports.setSignInCallbackError = exports.SIGNIN_CALLBACK_ERROR = exports.setLoggedUser = exports.USER = exports.LANG_FRENCH = exports.LANG_ENGLISH = exports.LANG_SYSTEM = exports.LIGHT_THEME = exports.DARK_THEME = exports.DEFAULT_ROW_HEIGHT = exports.DEFAULT_HEADER_HEIGHT = exports.DEFAULT_CELL_PADDING = exports.getPreLoginPath = exports.dispatchUser = exports.logout = exports.initializeAuthenticationProd = exports.initializeAuthenticationDev = void 0;
4
+ exports.setSignInCallbackError = exports.SIGNIN_CALLBACK_ERROR = exports.setLoggedUser = exports.USER = exports.LANG_FRENCH = exports.LANG_ENGLISH = exports.LANG_SYSTEM = exports.LIGHT_THEME = exports.DARK_THEME = exports.DEFAULT_ROW_HEIGHT = exports.DEFAULT_HEADER_HEIGHT = exports.DEFAULT_CELL_PADDING = exports.getFileIcon = exports.elementType = exports.getPreLoginPath = exports.dispatchUser = exports.logout = exports.initializeAuthenticationProd = exports.initializeAuthenticationDev = exports.equipmentStyles = exports.renderEquipmentForSearchBar = exports.getEquipmentsInfosForSearchBar = exports.EQUIPMENT_TYPE = void 0;
5
+
6
+ var _TreeViewFinder2 = _interopRequireDefault(require("./components/TreeViewFinder"));
7
+
8
+ exports.TreeViewFinder = _TreeViewFinder2["default"];
5
9
 
6
10
  var _TopBar2 = _interopRequireDefault(require("./components/TopBar"));
7
11
 
@@ -27,6 +31,13 @@ var _ReportViewerDialog2 = _interopRequireDefault(require("./components/ReportVi
27
31
 
28
32
  exports.ReportViewerDialog = _ReportViewerDialog2["default"];
29
33
 
34
+ var _EquipmentType = require("./utils/EquipmentType");
35
+
36
+ exports.EQUIPMENT_TYPE = _EquipmentType.EQUIPMENT_TYPE;
37
+ exports.getEquipmentsInfosForSearchBar = _EquipmentType.getEquipmentsInfosForSearchBar;
38
+ exports.renderEquipmentForSearchBar = _EquipmentType.renderEquipmentForSearchBar;
39
+ exports.equipmentStyles = _EquipmentType.equipmentStyles;
40
+
30
41
  var _AuthService = require("./utils/AuthService");
31
42
 
32
43
  exports.initializeAuthenticationDev = _AuthService.initializeAuthenticationDev;
@@ -35,6 +46,11 @@ exports.logout = _AuthService.logout;
35
46
  exports.dispatchUser = _AuthService.dispatchUser;
36
47
  exports.getPreLoginPath = _AuthService.getPreLoginPath;
37
48
 
49
+ var _ElementType = require("./utils/ElementType");
50
+
51
+ exports.elementType = _ElementType.elementType;
52
+ exports.getFileIcon = _ElementType.getFileIcon;
53
+
38
54
  var _MuiVirtualizedTable3 = require("./components/MuiVirtualizedTable/MuiVirtualizedTable");
39
55
 
40
56
  exports.DEFAULT_CELL_PADDING = _MuiVirtualizedTable3.DEFAULT_CELL_PADDING;
@@ -88,4 +104,28 @@ var _tableFr = _interopRequireDefault(require("./components/translations/table-f
88
104
 
89
105
  exports.table_fr = _tableFr["default"];
90
106
 
107
+ var _treeviewFinderEn = _interopRequireDefault(require("./components/translations/treeview-finder-en"));
108
+
109
+ exports.treeview_finder_en = _treeviewFinderEn["default"];
110
+
111
+ var _treeviewFinderFr = _interopRequireDefault(require("./components/translations/treeview-finder-fr"));
112
+
113
+ exports.treeview_finder_fr = _treeviewFinderFr["default"];
114
+
115
+ var _elementSearchEn = _interopRequireDefault(require("./components/translations/element-search-en"));
116
+
117
+ exports.element_search_en = _elementSearchEn["default"];
118
+
119
+ var _elementSearchFr = _interopRequireDefault(require("./components/translations/element-search-fr"));
120
+
121
+ exports.element_search_fr = _elementSearchFr["default"];
122
+
123
+ var _equipmentSearchEn = _interopRequireDefault(require("./components/translations/equipment-search-en"));
124
+
125
+ exports.equipment_search_en = _equipmentSearchEn["default"];
126
+
127
+ var _equipmentSearchFr = _interopRequireDefault(require("./components/translations/equipment-search-fr"));
128
+
129
+ exports.equipment_search_fr = _equipmentSearchFr["default"];
130
+
91
131
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.getFileIcon = getFileIcon;
5
+ exports.elementType = void 0;
6
+
7
+ var _react = _interopRequireDefault(require("react"));
8
+
9
+ var _LibraryBooksOutlined = _interopRequireDefault(require("@material-ui/icons/LibraryBooksOutlined"));
10
+
11
+ var _Description = _interopRequireDefault(require("@material-ui/icons/Description"));
12
+
13
+ var _PanTool = _interopRequireDefault(require("@material-ui/icons/PanTool"));
14
+
15
+ var _FilterList = _interopRequireDefault(require("@material-ui/icons/FilterList"));
16
+
17
+ var _Filter = _interopRequireDefault(require("@material-ui/icons/Filter"));
18
+
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
20
+
21
+ /**
22
+ * Copyright (c) 2021, RTE (http://www.rte-france.com)
23
+ * This Source Code Form is subject to the terms of the Mozilla Public
24
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
25
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
26
+ */
27
+ var elementType = {
28
+ DIRECTORY: 'DIRECTORY',
29
+ STUDY: 'STUDY',
30
+ FILTER: 'FILTER',
31
+ SCRIPT: 'SCRIPT',
32
+ SCRIPT_CONTINGENCY_LIST: 'SCRIPT_CONTINGENCY_LIST',
33
+ FILTERS_CONTINGENCY_LIST: 'FILTERS_CONTINGENCY_LIST'
34
+ };
35
+ exports.elementType = elementType;
36
+
37
+ function getFileIcon(type, theme) {
38
+ switch (type) {
39
+ case elementType.STUDY:
40
+ return /*#__PURE__*/_react["default"].createElement(_LibraryBooksOutlined["default"], {
41
+ className: theme
42
+ });
43
+
44
+ case elementType.SCRIPT_CONTINGENCY_LIST:
45
+ return /*#__PURE__*/_react["default"].createElement(_Description["default"], {
46
+ className: theme
47
+ });
48
+
49
+ case elementType.FILTERS_CONTINGENCY_LIST:
50
+ return /*#__PURE__*/_react["default"].createElement(_PanTool["default"], {
51
+ className: theme
52
+ });
53
+
54
+ case elementType.FILTER:
55
+ return /*#__PURE__*/_react["default"].createElement(_FilterList["default"], {
56
+ className: theme
57
+ });
58
+
59
+ case elementType.SCRIPT:
60
+ return /*#__PURE__*/_react["default"].createElement(_Filter["default"], {
61
+ className: theme
62
+ });
63
+
64
+ case elementType.DIRECTORY:
65
+ // to easily use in TreeView we do not give icons for directories
66
+ return;
67
+
68
+ default:
69
+ console.warn('unknown type [' + type + ']');
70
+ }
71
+ }
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.renderEquipmentForSearchBar = exports.getEquipmentsInfosForSearchBar = exports.EQUIPMENT_TYPE = exports.equipmentStyles = exports.VL_TAG_MAX_SIZE = exports.TYPE_TAG_MAX_SIZE = void 0;
5
+
6
+ var _match = _interopRequireDefault(require("autosuggest-highlight/match"));
7
+
8
+ var _parse = _interopRequireDefault(require("autosuggest-highlight/parse"));
9
+
10
+ var _clsx = _interopRequireDefault(require("clsx"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
+
16
+ /**
17
+ * Copyright (c) 2021, RTE (http://www.rte-france.com)
18
+ * This Source Code Form is subject to the terms of the Mozilla Public
19
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
20
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
21
+ */
22
+ var TYPE_TAG_MAX_SIZE = '120px';
23
+ exports.TYPE_TAG_MAX_SIZE = TYPE_TAG_MAX_SIZE;
24
+ var VL_TAG_MAX_SIZE = '65px';
25
+ exports.VL_TAG_MAX_SIZE = VL_TAG_MAX_SIZE;
26
+
27
+ var equipmentStyles = function equipmentStyles(theme) {
28
+ return {
29
+ equipmentOption: {
30
+ display: 'flex',
31
+ gap: '20px',
32
+ width: '100%',
33
+ margin: '0px',
34
+ padding: '0px',
35
+ alignItems: 'center',
36
+ justifyContent: 'space-between'
37
+ },
38
+ equipmentTag: {
39
+ borderRadius: '10px',
40
+ padding: '4px',
41
+ fontSize: 'x-small',
42
+ textAlign: 'center'
43
+ },
44
+ equipmentTypeTag: {
45
+ width: TYPE_TAG_MAX_SIZE,
46
+ background: 'lightblue'
47
+ },
48
+ equipmentVlTag: {
49
+ width: VL_TAG_MAX_SIZE,
50
+ background: 'lightgray',
51
+ fontStyle: 'italic'
52
+ }
53
+ };
54
+ }; // Must be equivalent as the back enum (Powsybl)
55
+
56
+
57
+ exports.equipmentStyles = equipmentStyles;
58
+ var EQUIPMENT_TYPE = {
59
+ SUBSTATION: {
60
+ name: 'SUBSTATION',
61
+ sortOrder: 0,
62
+ tagLabel: 'equipment_search/substationTag'
63
+ },
64
+ VOLTAGE_LEVEL: {
65
+ name: 'VOLTAGE_LEVEL',
66
+ sortOrder: 1,
67
+ tagLabel: 'equipment_search/voltageLevelTag'
68
+ },
69
+ LINE: {
70
+ name: 'LINE',
71
+ sortOrder: 2,
72
+ tagLabel: 'equipment_search/voltageLevelTag'
73
+ },
74
+ TWO_WINDINGS_TRANSFORMER: {
75
+ name: 'TWO_WINDINGS_TRANSFORMER',
76
+ sortOrder: 3,
77
+ tagLabel: 'equipment_search/2wtTag'
78
+ },
79
+ THREE_WINDINGS_TRANSFORMER: {
80
+ name: 'THREE_WINDINGS_TRANSFORMER',
81
+ sortOrder: 4,
82
+ tagLabel: 'equipment_search/3wtTag'
83
+ },
84
+ HVDC: {
85
+ name: 'HVDC',
86
+ sortOrder: 5,
87
+ tagLabel: 'equipment_search/hvdcLinkTag'
88
+ },
89
+ GENERATOR: {
90
+ name: 'GENERATOR',
91
+ sortOrder: 6,
92
+ tagLabel: 'equipment_search/generatorTag'
93
+ },
94
+ BATTERY: {
95
+ name: 'BATTERY',
96
+ sortOrder: 7,
97
+ tagLabel: 'equipment_search/batteryTag'
98
+ },
99
+ LOAD: {
100
+ name: 'LOAD',
101
+ sortOrder: 8,
102
+ tagLabel: 'equipment_search/loadTag'
103
+ },
104
+ SHUNT_COMPENSATOR: {
105
+ name: 'SHUNT_COMPENSATOR',
106
+ sortOrder: 9,
107
+ tagLabel: 'equipment_search/shuntTag'
108
+ },
109
+ DANGLING_LINE: {
110
+ name: 'DANGLING_LINE',
111
+ sortOrder: 10,
112
+ tagLabel: 'equipment_search/lineTag'
113
+ },
114
+ STATIC_VAR_COMPENSATOR: {
115
+ name: 'STATIC_VAR_COMPENSATOR',
116
+ sortOrder: 11,
117
+ tagLabel: 'equipment_search/svcTag'
118
+ },
119
+ HVDC_CONVERTER_STATION: {
120
+ name: 'HVDC_CONVERTER_STATION',
121
+ sortOrder: 12,
122
+ tagLabel: 'equipment_search/hvdcStationTag'
123
+ },
124
+ BUSBAR_SECTION: {
125
+ name: 'BUSBAR_SECTION',
126
+ sortOrder: 13,
127
+ tagLabel: 'equipment_search/busbarSectionTag'
128
+ },
129
+ BREAKER: {
130
+ name: 'BREAKER',
131
+ sortOrder: 14,
132
+ tagLabel: 'equipment_search/switchTag'
133
+ },
134
+ DISCONNECTOR: {
135
+ name: 'DISCONNECTOR',
136
+ sortOrder: 15,
137
+ tagLabel: 'equipment_search/switchTag'
138
+ },
139
+ LOAD_BREAK_SWITCH: {
140
+ name: 'LOAD_BREAK_SWITCH',
141
+ sortOrder: 16,
142
+ tagLabel: 'equipment_search/switchTag'
143
+ }
144
+ };
145
+ exports.EQUIPMENT_TYPE = EQUIPMENT_TYPE;
146
+
147
+ var getEquipmentsInfosForSearchBar = function getEquipmentsInfosForSearchBar(equipmentsInfos, equipmentLabelling) {
148
+ return equipmentsInfos.flatMap(function (e) {
149
+ var label = equipmentLabelling ? e.name : e.id;
150
+ return e.type === 'SUBSTATION' ? [{
151
+ label: label,
152
+ id: e.id,
153
+ type: e.type
154
+ }] : e.voltageLevelsIds.map(function (vli) {
155
+ return {
156
+ label: label,
157
+ id: e.id,
158
+ type: e.type,
159
+ voltageLevelId: vli
160
+ };
161
+ });
162
+ }).sort(sortEquipments);
163
+ };
164
+
165
+ exports.getEquipmentsInfosForSearchBar = getEquipmentsInfosForSearchBar;
166
+
167
+ var sortEquipments = function sortEquipments(a, b) {
168
+ return EQUIPMENT_TYPE[a.type].sortOrder < EQUIPMENT_TYPE[b.type].sortOrder ? -1 : EQUIPMENT_TYPE[a.type].sortOrder > EQUIPMENT_TYPE[b.type].sortOrder ? 1 : a.label.localeCompare(b.label);
169
+ };
170
+
171
+ var renderEquipmentForSearchBar = function renderEquipmentForSearchBar(classes, intl) {
172
+ return function (element, _ref) {
173
+ var inputValue = _ref.inputValue;
174
+ var matches = (0, _match["default"])(element.label, inputValue);
175
+ var parts = (0, _parse["default"])(element.label, matches);
176
+ return /*#__PURE__*/_react["default"].createElement("div", {
177
+ className: classes.equipmentOption
178
+ }, /*#__PURE__*/_react["default"].createElement("span", {
179
+ className: (0, _clsx["default"])(classes.equipmentTag, classes.equipmentTypeTag)
180
+ }, intl.formatMessage({
181
+ id: EQUIPMENT_TYPE[element.type].tagLabel
182
+ })), /*#__PURE__*/_react["default"].createElement("div", {
183
+ className: classes.equipmentOption
184
+ }, /*#__PURE__*/_react["default"].createElement("span", null, parts.map(function (part, index) {
185
+ return /*#__PURE__*/_react["default"].createElement("span", {
186
+ key: index,
187
+ style: {
188
+ fontWeight: part.highlight ? 'bold' : 'inherit'
189
+ }
190
+ }, part.text);
191
+ })), element.type !== EQUIPMENT_TYPE.SUBSTATION.name && element.type !== EQUIPMENT_TYPE.VOLTAGE_LEVEL.name && /*#__PURE__*/_react["default"].createElement("span", {
192
+ className: (0, _clsx["default"])(classes.equipmentTag, classes.equipmentVlTag)
193
+ }, element.voltageLevelId)));
194
+ };
195
+ };
196
+
197
+ exports.renderEquipmentForSearchBar = renderEquipmentForSearchBar;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gridsuite/commons-ui",
3
- "version": "0.13.1",
3
+ "version": "0.14.3",
4
4
  "description": "common react components for gridsuite applications",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -20,6 +20,7 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@svgr/webpack": "^5.4.0",
23
+ "autosuggest-highlight": "^3.1.1",
23
24
  "clsx": "^1.0.4",
24
25
  "jwt-decode": "^3.0.0",
25
26
  "memoize-one": "^5.1.1",
@@ -40,7 +41,6 @@
40
41
  "react-intl": "^5.0.0"
41
42
  },
42
43
  "devDependencies": {
43
- "notistack": "^1.0.1",
44
44
  "@material-ui/core": "^4.9.5",
45
45
  "@material-ui/icons": "^4.5.1",
46
46
  "@material-ui/lab": "^4.0.0-alpha.56",
@@ -57,6 +57,7 @@
57
57
  "eslint-plugin-react": "^7.21.0",
58
58
  "eslint-plugin-react-hooks": "^4.1.2",
59
59
  "inferno": "^7.4.2",
60
+ "notistack": "^1.0.1",
60
61
  "nwb": "^0.25.x",
61
62
  "prettier": "^2.0.0",
62
63
  "puppeteer": "^10.0.0",