tenjin-ui-kit 0.3.70 → 0.3.72-dev

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.
Files changed (203) hide show
  1. package/common/hooks/apiHooks.js +155 -0
  2. package/common/hooks/newApiHook.js +188 -0
  3. package/{dist/common → common}/utils/security/index.js +2 -2
  4. package/{dist/common → common}/utils/security/securityConfig.js +1 -2
  5. package/components/Canvas.js +330 -0
  6. package/components/DragBox/index.js +40 -0
  7. package/components/InputWithChip/index.js +294 -0
  8. package/{dist/components → components}/RightContext/index.js +19 -28
  9. package/components/WorkFlow.js +42 -0
  10. package/components/WorkFlowBuilder.js +115 -0
  11. package/components/alert/Style.js +20 -0
  12. package/components/alert/index.js +67 -0
  13. package/{dist/components → components}/attachment/index.js +21 -28
  14. package/{dist/components → components}/authenticationProvider/AuthError.js +3 -4
  15. package/{dist/components → components}/authenticationProvider/AuthLoader.js +3 -4
  16. package/components/authenticationProvider/index.js +110 -0
  17. package/{dist/components → components}/avatar/index.js +13 -14
  18. package/components/avatar/styles.js +91 -0
  19. package/components/breadCrumbs/index.js +169 -0
  20. package/{dist/components → components}/breadCrumbs/style.js +1 -4
  21. package/{dist/components → components}/browsingTestCaseLayout/DetailsViewLayout/DetailsViewContent/index.js +5 -6
  22. package/{dist/components → components}/browsingTestCaseLayout/DetailsViewLayout/DetailsViewContent/style.js +5 -8
  23. package/{dist/components → components}/browsingTestCaseLayout/DetailsViewLayout/DetailsViewHeader/index.js +4 -5
  24. package/{dist/components → components}/browsingTestCaseLayout/TreeViewLayout/TreeViewContent/Index.js +4 -5
  25. package/{dist/components → components}/browsingTestCaseLayout/TreeViewLayout/TreeViewHeader/Index.js +5 -6
  26. package/components/browsingTestCaseLayout/TreeViewLayout/TreeViewHeader/style.js +23 -0
  27. package/{dist/components → components}/browsingTestCaseLayout/index.js +25 -30
  28. package/components/button/index.js +133 -0
  29. package/{dist/components → components}/chatBotModal/index.js +36 -45
  30. package/components/checkBox/index.js +29 -0
  31. package/{dist/components → components}/combobox/index.js +51 -72
  32. package/components/divider/index.js +37 -0
  33. package/{dist/components → components}/editableField/index.js +19 -28
  34. package/{dist/components → components}/error/index.js +6 -12
  35. package/components/errorBoundary/index.js +140 -0
  36. package/components/fileUploader/index.js +151 -0
  37. package/components/fileUploader/style.js +57 -0
  38. package/components/filter/ValueSelector.js +333 -0
  39. package/{dist/components → components}/filter/index.js +26 -33
  40. package/{dist/components → components}/iconButton/index.js +3 -4
  41. package/components/input/index.js +167 -0
  42. package/components/layout/index.js +94 -0
  43. package/components/layout/main/index.js +24 -0
  44. package/components/layout/main/style.js +19 -0
  45. package/{dist/components → components}/layout/pageContent/index.js +6 -7
  46. package/components/layout/sidebar/FlatMenu.js +64 -0
  47. package/components/layout/sidebar/GroupedIconMenu.js +233 -0
  48. package/components/layout/sidebar/GroupedMenu.js +57 -0
  49. package/components/layout/sidebar/ProjectMenu.js +223 -0
  50. package/components/layout/sidebar/index.js +88 -0
  51. package/components/layout/sidebar/style.js +149 -0
  52. package/components/layout/topBar/ProjectTopbar.js +388 -0
  53. package/components/layout/topBar/UserAvatar.js +138 -0
  54. package/components/layout/topBar/index.js +121 -0
  55. package/{dist/components → components}/loader/index.js +9 -12
  56. package/components/menu/index.js +71 -0
  57. package/{dist/components → components}/modal/Modal.js +5 -6
  58. package/components/modal/index.js +88 -0
  59. package/components/modal/style.js +65 -0
  60. package/components/optionMenu/index.js +105 -0
  61. package/components/pagination/index.js +114 -0
  62. package/components/pagination/style.js +33 -0
  63. package/components/paginationUpdated/index.js +74 -0
  64. package/components/paper/index.js +43 -0
  65. package/components/paper/style.js +31 -0
  66. package/components/reactSelect/index.js +195 -0
  67. package/components/reactSelect/style.js +130 -0
  68. package/components/richTextEditor/index.js +64 -0
  69. package/components/select/GroupedSelect.js +167 -0
  70. package/components/select/SimpleSelect.js +184 -0
  71. package/{dist/components → components}/select/index.js +38 -54
  72. package/components/simpleSelect/index.js +53 -0
  73. package/{dist/components → components}/sort/index.js +19 -22
  74. package/{dist/components → components}/switch/index.js +10 -11
  75. package/components/switch/style.js +39 -0
  76. package/{dist/components → components}/switch/switch.js +17 -23
  77. package/components/table/ReactTable.js +101 -0
  78. package/components/table/SimpleTable.js +117 -0
  79. package/components/table/index.js +381 -0
  80. package/components/text/index.js +65 -0
  81. package/{dist/components → components}/timeStamp/index.js +4 -6
  82. package/components/timeStamp/style.js +20 -0
  83. package/components/topBar/index.js +169 -0
  84. package/{dist/components → components}/tree/index.js +29 -47
  85. package/components/tree/style.js +29 -0
  86. package/components/valuePicker/ValueSelector.js +205 -0
  87. package/{dist/components → components}/valuePicker/index.js +19 -26
  88. package/{dist/components → components}/wrapperLayout/layout/index.js +4 -5
  89. package/{dist/components → components}/wrapperLayout/main/index.js +4 -5
  90. package/{dist/components → components}/wrapperLayout/main/pageContainer/index.js +4 -5
  91. package/components/wrapperLayout/main/sideBar/index.js +272 -0
  92. package/components/wrapperLayout/main/sideBar/style.js +190 -0
  93. package/{dist/components → components}/wrapperLayout/topBar/UserAvatar.js +4 -5
  94. package/components/wrapperLayout/topBar/avatar.js +55 -0
  95. package/components/wrapperLayout/topBar/index.js +196 -0
  96. package/{dist/components → components}/wrapperLayout/topBar/menuIcon.js +4 -5
  97. package/components/wrapperLayout/topBar/style.js +74 -0
  98. package/http/index.js +133 -0
  99. package/{dist/index.js → index.js} +53 -55
  100. package/package.json +5 -3
  101. package/{dist/templates → templates}/listPage/index.js +36 -57
  102. package/{dist/themes → themes}/default.js +5 -7
  103. package/{dist/themes → themes}/defaultSmall.js +2 -3
  104. package/{dist/themes → themes}/responsiveTheme.js +6 -8
  105. package/.dockerignore +0 -6
  106. package/.storybook/main.js +0 -16
  107. package/.storybook/preview.js +0 -11
  108. package/Dockerfile +0 -17
  109. package/Jenkinsfile +0 -66
  110. package/build/asset-manifest.json +0 -16
  111. package/build/favicon.ico +0 -0
  112. package/build/index.html +0 -1
  113. package/build/logo192.png +0 -0
  114. package/build/logo512.png +0 -0
  115. package/build/manifest.json +0 -25
  116. package/build/robots.txt +0 -3
  117. package/build/static/css/main.522396f6.css +0 -2
  118. package/build/static/css/main.522396f6.css.map +0 -1
  119. package/build/static/js/787.18cf14d0.chunk.js +0 -2
  120. package/build/static/js/787.18cf14d0.chunk.js.map +0 -1
  121. package/build/static/js/main.d71fecac.js +0 -3
  122. package/build/static/js/main.d71fecac.js.LICENSE.txt +0 -50
  123. package/build/static/js/main.d71fecac.js.map +0 -1
  124. package/build/static/media/logo.6ce24c58023cc2f8fd88fe9d219db6c6.svg +0 -1
  125. package/build/tenjinLogo.png +0 -0
  126. package/dist/common/hooks/apiHooks.js +0 -223
  127. package/dist/common/hooks/newApiHook.js +0 -270
  128. package/dist/components/Canvas.js +0 -254
  129. package/dist/components/DragBox/index.js +0 -45
  130. package/dist/components/InputWithChip/index.js +0 -187
  131. package/dist/components/WorkFlow.js +0 -47
  132. package/dist/components/WorkFlowBuilder.js +0 -130
  133. package/dist/components/alert/Style.js +0 -23
  134. package/dist/components/alert/index.js +0 -69
  135. package/dist/components/authenticationProvider/index.js +0 -166
  136. package/dist/components/avatar/styles.js +0 -94
  137. package/dist/components/breadCrumbs/index.js +0 -180
  138. package/dist/components/browsingTestCaseLayout/TreeViewLayout/TreeViewHeader/style.js +0 -26
  139. package/dist/components/button/index.js +0 -140
  140. package/dist/components/checkBox/index.js +0 -30
  141. package/dist/components/divider/index.js +0 -41
  142. package/dist/components/errorBoundary/index.js +0 -160
  143. package/dist/components/fileUploader/index.js +0 -156
  144. package/dist/components/fileUploader/style.js +0 -60
  145. package/dist/components/filter/ValueSelector.js +0 -405
  146. package/dist/components/input/index.js +0 -174
  147. package/dist/components/layout/index.js +0 -98
  148. package/dist/components/layout/main/index.js +0 -27
  149. package/dist/components/layout/main/style.js +0 -22
  150. package/dist/components/layout/sidebar/FlatMenu.js +0 -64
  151. package/dist/components/layout/sidebar/GroupedIconMenu.js +0 -246
  152. package/dist/components/layout/sidebar/GroupedMenu.js +0 -67
  153. package/dist/components/layout/sidebar/ProjectMenu.js +0 -230
  154. package/dist/components/layout/sidebar/index.js +0 -91
  155. package/dist/components/layout/sidebar/style.js +0 -154
  156. package/dist/components/layout/topBar/ProjectTopbar.js +0 -338
  157. package/dist/components/layout/topBar/UserAvatar.js +0 -145
  158. package/dist/components/layout/topBar/index.js +0 -132
  159. package/dist/components/menu/index.js +0 -80
  160. package/dist/components/modal/index.js +0 -91
  161. package/dist/components/modal/style.js +0 -68
  162. package/dist/components/optionMenu/index.js +0 -112
  163. package/dist/components/pagination/index.js +0 -129
  164. package/dist/components/pagination/style.js +0 -36
  165. package/dist/components/paginationUpdated/index.js +0 -75
  166. package/dist/components/paper/index.js +0 -44
  167. package/dist/components/paper/style.js +0 -34
  168. package/dist/components/reactSelect/index.js +0 -212
  169. package/dist/components/reactSelect/style.js +0 -163
  170. package/dist/components/richTextEditor/index.js +0 -83
  171. package/dist/components/select/GroupedSelect.js +0 -183
  172. package/dist/components/select/SimpleSelect.js +0 -212
  173. package/dist/components/simpleSelect/index.js +0 -56
  174. package/dist/components/switch/style.js +0 -42
  175. package/dist/components/table/ReactTable.js +0 -118
  176. package/dist/components/table/SimpleTable.js +0 -136
  177. package/dist/components/table/index.js +0 -256
  178. package/dist/components/text/index.js +0 -67
  179. package/dist/components/timeStamp/style.js +0 -23
  180. package/dist/components/topBar/index.js +0 -176
  181. package/dist/components/tree/style.js +0 -32
  182. package/dist/components/valuePicker/ValueSelector.js +0 -273
  183. package/dist/components/wrapperLayout/main/sideBar/index.js +0 -262
  184. package/dist/components/wrapperLayout/main/sideBar/style.js +0 -196
  185. package/dist/components/wrapperLayout/topBar/avatar.js +0 -57
  186. package/dist/components/wrapperLayout/topBar/index.js +0 -182
  187. package/dist/components/wrapperLayout/topBar/style.js +0 -77
  188. package/dist/http/index.js +0 -226
  189. package/public/favicon.ico +0 -0
  190. package/public/index.html +0 -43
  191. package/public/logo192.png +0 -0
  192. package/public/logo512.png +0 -0
  193. package/public/manifest.json +0 -25
  194. package/public/robots.txt +0 -3
  195. package/public/tenjinLogo.png +0 -0
  196. /package/{dist/assets → assets}/images/MicrosoftTeams-image (1).png +0 -0
  197. /package/{dist/assets → assets}/images/tenjin-4.0-logo.png +0 -0
  198. /package/{dist/components → components}/RightContext/index.css +0 -0
  199. /package/{dist/components → components}/browsingTestCaseLayout/style.css +0 -0
  200. /package/{dist/components → components}/errorBoundary/Error.jpg +0 -0
  201. /package/{dist/components → components}/iconButton/style.js +0 -0
  202. /package/{dist/components → components}/richTextEditor/style.js +0 -0
  203. /package/{dist/components → components}/wrapperLayout/layout/style.js +0 -0
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _material = require("@mui/material");
9
+ var _styles = require("@mui/material/styles");
10
+ var _fi = require("react-icons/fi");
11
+ var _text = _interopRequireDefault(require("../text"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
15
+ const FileInput = (0, _styles.styled)("input")({
16
+ display: "none"
17
+ });
18
+ const DropzoneContainer = (0, _styles.styled)(_material.Container)({
19
+ width: "27.3rem",
20
+ height: "9.3rem",
21
+ display: "flex",
22
+ flexDirection: "column",
23
+ alignItems: "center",
24
+ justifyContent: "center",
25
+ padding: "2rem",
26
+ border: "1.5px dashed #ACACAC",
27
+ borderRadius: "0.5rem",
28
+ "&:hover": {
29
+ cursor: "pointer",
30
+ backgroundColor: "#f5f5f5"
31
+ }
32
+ });
33
+ const DropzoneText = (0, _styles.styled)("p")({
34
+ margin: "1rem",
35
+ display: "flex",
36
+ justifyContent: "center",
37
+ alignItems: "center",
38
+ flexDirection: "column",
39
+ gap: "1rem"
40
+ });
41
+ const FileUploader = props => {
42
+ var _selectedFile$, _selectedFile$2, _selectedFile$3;
43
+ const selectedFile = props.selectedFile,
44
+ setSelectedFile = props.setSelectedFile,
45
+ key = props.key;
46
+ const fileInputRef = (0, _react.useRef)(null);
47
+
48
+ // const handleFileInput = (e) => {
49
+ // e.target.files[0] && setSelectedFile(e.target.files);
50
+ // };
51
+ const handleFileInput = e => {
52
+ // e.target.files[0] && setSelectedFile(e.target.files);
53
+ const selectedFile = e.target.files[0];
54
+ if (selectedFile) {
55
+ var _selectedFile$name;
56
+ const excludedExtensions = [".zip", ".exe", ".batch", ".webm", ".mp4", ".mp3", ".bat", ".js", ".vbs", ".html", ".scr", ".cmd", ".rar", ".svg", ".lnk"];
57
+ const fileExtension = selectedFile === null || selectedFile === void 0 || (_selectedFile$name = selectedFile.name) === null || _selectedFile$name === void 0 || (_selectedFile$name = _selectedFile$name.split(".")) === null || _selectedFile$name === void 0 || (_selectedFile$name = _selectedFile$name.pop()) === null || _selectedFile$name === void 0 ? void 0 : _selectedFile$name.toLowerCase();
58
+ if (excludedExtensions.some(ext => selectedFile.name.endsWith(ext))) {
59
+ alert("Selected file type .".concat(fileExtension, " is not allowed."));
60
+ e.target.value = null;
61
+ } else {
62
+ e.target.files[0] && setSelectedFile(e.target.files);
63
+ }
64
+ }
65
+ };
66
+ const handleDrop = e => {
67
+ e.preventDefault();
68
+ e.stopPropagation();
69
+ // setSelectedFile(e.dataTransfer.files);
70
+ const droppedFiles = e.dataTransfer.files;
71
+ if (droppedFiles.length > 0) {
72
+ var _droppedFiles$;
73
+ const excludedExtensions = [".zip", ".exe", ".batch", ".webm", ".mp4", ".mp3", ".bat", ".js", ".vbs", ".html", ".scr", ".cmd", ".rar", ".svg", ".lnk"];
74
+ const fileExtension = (_droppedFiles$ = droppedFiles[0]) === null || _droppedFiles$ === void 0 || (_droppedFiles$ = _droppedFiles$.name) === null || _droppedFiles$ === void 0 || (_droppedFiles$ = _droppedFiles$.split(".")) === null || _droppedFiles$ === void 0 || (_droppedFiles$ = _droppedFiles$.pop()) === null || _droppedFiles$ === void 0 ? void 0 : _droppedFiles$.toLowerCase();
75
+ if (excludedExtensions !== null && excludedExtensions !== void 0 && excludedExtensions.some(ext => {
76
+ var _droppedFiles$2;
77
+ return (_droppedFiles$2 = droppedFiles[0]) === null || _droppedFiles$2 === void 0 || (_droppedFiles$2 = _droppedFiles$2.name) === null || _droppedFiles$2 === void 0 ? void 0 : _droppedFiles$2.endsWith(ext);
78
+ })) {
79
+ alert("Selected file type .".concat(fileExtension, " is not allowed."));
80
+ } else {
81
+ setSelectedFile(droppedFiles);
82
+ }
83
+ }
84
+ };
85
+ const handleDragOver = e => {
86
+ e.preventDefault();
87
+ e.stopPropagation();
88
+ };
89
+ const handleClick = e => {
90
+ e.preventDefault();
91
+ fileInputRef.current.click();
92
+ };
93
+ return /*#__PURE__*/_react.default.createElement(_material.Grid, {
94
+ container: true,
95
+ justifyContent: "center"
96
+ }, /*#__PURE__*/_react.default.createElement(_material.Grid, {
97
+ item: true,
98
+ xs: 12
99
+ }, /*#__PURE__*/_react.default.createElement(DropzoneContainer, {
100
+ onClick: handleClick,
101
+ onDrop: handleDrop,
102
+ onDragOver: handleDragOver
103
+ }, /*#__PURE__*/_react.default.createElement(DropzoneText, null, !(selectedFile !== null && selectedFile !== void 0 && selectedFile.length) > 0 ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_fi.FiUpload, {
104
+ size: "1.9rem",
105
+ color: "#44409A"
106
+ }), /*#__PURE__*/_react.default.createElement(_text.default, {
107
+ bold: true,
108
+ fontWeight: "400",
109
+ fontSize: "1rem"
110
+ }, "Drag and Drop or ", /*#__PURE__*/_react.default.createElement("b", null, "Choose File"), " to Upload")) : (selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.length) > 1 ? /*#__PURE__*/_react.default.createElement("ul", null, Array.from(selectedFile).map((file, index) => {
111
+ var _file$name;
112
+ return /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
113
+ arrow: true,
114
+ placement: "top",
115
+ title: (file === null || file === void 0 || (_file$name = file.name) === null || _file$name === void 0 ? void 0 : _file$name.length) > 25 ? file === null || file === void 0 ? void 0 : file.name : ""
116
+ }, /*#__PURE__*/_react.default.createElement(_text.default, {
117
+ sx: {
118
+ width: "220px",
119
+ whiteSpace: "nowrap",
120
+ overflow: "hidden",
121
+ textOverflow: "ellipsis",
122
+ fontWeight: 400,
123
+ fontSize: "1rem"
124
+ },
125
+ key: index
126
+ }, file === null || file === void 0 ? void 0 : file.name));
127
+ })) : /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
128
+ arrow: true,
129
+ placement: "top",
130
+ title: ((_selectedFile$ = selectedFile[0]) === null || _selectedFile$ === void 0 || (_selectedFile$ = _selectedFile$.name) === null || _selectedFile$ === void 0 ? void 0 : _selectedFile$.length) > 25 ? (_selectedFile$2 = selectedFile[0]) === null || _selectedFile$2 === void 0 ? void 0 : _selectedFile$2.name : ""
131
+ }, /*#__PURE__*/_react.default.createElement(_text.default, {
132
+ sx: {
133
+ width: "220px",
134
+ whiteSpace: "nowrap",
135
+ overflow: "hidden",
136
+ textOverflow: "ellipsis",
137
+ fontWeight: 400,
138
+ fontSize: "1rem",
139
+ display: "flex",
140
+ justifyContent: "center"
141
+ }
142
+ }, (_selectedFile$3 = selectedFile[0]) === null || _selectedFile$3 === void 0 ? void 0 : _selectedFile$3.name)))), /*#__PURE__*/_react.default.createElement(FileInput, _extends({
143
+ type: "file",
144
+ accept: "image/*",
145
+ onChange: handleFileInput,
146
+ id: "fileInput",
147
+ ref: fileInputRef,
148
+ key: key
149
+ }, props))));
150
+ };
151
+ var _default = exports.default = FileUploader;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _styles = require("@mui/styles");
8
+ var _default2 = _interopRequireDefault(require("../../themes/default"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ var _default = exports.default = (0, _styles.makeStyles)(() => ({
11
+ modalContentWrapper: {
12
+ position: "absolute",
13
+ backgroundColor: _default2.default.palette.background.paper,
14
+ borderRadius: "3px",
15
+ boxShadow: _default2.default.shadows[5],
16
+ top: "10%",
17
+ "&:focus": {
18
+ outline: "none"
19
+ },
20
+ margin: "auto"
21
+ },
22
+ default: {
23
+ width: "400px",
24
+ left: "calc(50% - 400px / 2)"
25
+ },
26
+ large: {
27
+ width: "600px",
28
+ left: "calc(50% - 600px / 2)"
29
+ },
30
+ xlarge: {
31
+ width: "800px",
32
+ left: "calc(50% - 800px / 2)"
33
+ },
34
+ fullscreen: {
35
+ width: "98%",
36
+ left: "1%",
37
+ top: "10px"
38
+ },
39
+ header: {
40
+ display: "flex",
41
+ alignItems: "center",
42
+ padding: "0.4rem 1rem",
43
+ borderBottom: "1px solid #ccc",
44
+ "& .title": {
45
+ flexGrow: 1,
46
+ fontWeight: 500
47
+ },
48
+ "& .modalCloseTrigger": {
49
+ cursor: "pointer"
50
+ }
51
+ },
52
+ content: {
53
+ padding: "0.4rem 1rem",
54
+ maxHeight: "calc(100vh - 170px)",
55
+ overflowY: "auto"
56
+ }
57
+ }));
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _material = require("@mui/material");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var colors = _interopRequireWildcard(require("@mui/material/colors"));
11
+ var _button = _interopRequireDefault(require("../button"));
12
+ var _text = _interopRequireDefault(require("../text"));
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
16
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
17
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
18
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
20
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
21
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
22
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
24
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
25
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
+ const determineSelectedOptions = (options, selectedIds, valueKey) => {
27
+ if (!options || options.length < 1) return [];
28
+ if (!selectedIds || selectedIds.length < 1) return options;
29
+ return options.map(o => _objectSpread(_objectSpread({}, o), {}, {
30
+ selected: selectedIds.includes(o[valueKey])
31
+ }));
32
+ };
33
+ const ValueSelector = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
34
+ let options = _ref.options,
35
+ valueKey = _ref.valueKey,
36
+ displayKey = _ref.displayKey,
37
+ avatarKey = _ref.avatarKey,
38
+ colorKey = _ref.colorKey,
39
+ onChange = _ref.onChange,
40
+ multiple = _ref.multiple,
41
+ defaultSelectedOptionIds = _ref.defaultSelectedOptionIds,
42
+ fetchData = _ref.fetchData,
43
+ showClearItems = _ref.showClearItems,
44
+ showAvatar = _ref.showAvatar,
45
+ setSearch = _ref.setSearch,
46
+ inputRef = _ref.inputRef,
47
+ searchText = _ref.searchText;
48
+ const theme = (0, _material.useTheme)();
49
+ const _useState = (0, _react.useState)(false),
50
+ _useState2 = _slicedToArray(_useState, 2),
51
+ loading = _useState2[0],
52
+ setLoading = _useState2[1];
53
+ const _useState3 = (0, _react.useState)([]),
54
+ _useState4 = _slicedToArray(_useState3, 2),
55
+ localOptions = _useState4[0],
56
+ setLocalOptions = _useState4[1];
57
+ const _useState5 = (0, _react.useState)(""),
58
+ _useState6 = _slicedToArray(_useState5, 2),
59
+ filter = _useState6[0],
60
+ setFilter = _useState6[1];
61
+ const _useState7 = (0, _react.useState)([]),
62
+ _useState8 = _slicedToArray(_useState7, 2),
63
+ filteredLocalOptions = _useState8[0],
64
+ setFilteredLocalOptions = _useState8[1];
65
+ const _useState9 = (0, _react.useState)(-1),
66
+ _useState0 = _slicedToArray(_useState9, 2),
67
+ activeIndex = _useState0[0],
68
+ setActiveIndex = _useState0[1];
69
+ const itemRefs = (0, _react.useRef)([]);
70
+ const clearBtnRef = (0, _react.useRef)(null);
71
+ const _useState1 = (0, _react.useState)(false),
72
+ _useState10 = _slicedToArray(_useState1, 2),
73
+ clearFocused = _useState10[0],
74
+ setClearFocused = _useState10[1];
75
+ (0, _react.useImperativeHandle)(ref, () => ({
76
+ handleKeyDown: e => {
77
+ if (e.key === "Tab") {
78
+ e.preventDefault();
79
+ e.stopPropagation();
80
+ if (clearFocused) {
81
+ setClearFocused(false);
82
+ requestAnimationFrame(() => {
83
+ var _inputRef$current;
84
+ inputRef === null || inputRef === void 0 || (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
85
+ });
86
+ return;
87
+ }
88
+ setClearFocused(true);
89
+ setActiveIndex(-1);
90
+ return;
91
+ }
92
+ if (!["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) return;
93
+ if (e.key === "ArrowDown") {
94
+ e.preventDefault();
95
+ if (clearFocused) {
96
+ setClearFocused(false);
97
+ setActiveIndex(0);
98
+ return;
99
+ }
100
+ setActiveIndex(prev => {
101
+ if (filteredLocalOptions.length === 0) return -1;
102
+ return prev < filteredLocalOptions.length - 1 ? prev + 1 : 0;
103
+ });
104
+ } else if (e.key === "ArrowUp") {
105
+ e.preventDefault();
106
+ if (clearFocused) {
107
+ setClearFocused(false);
108
+ setActiveIndex(0);
109
+ return;
110
+ }
111
+ setActiveIndex(prev => {
112
+ if (filteredLocalOptions.length === 0) return -1;
113
+ return prev > 0 ? prev - 1 : filteredLocalOptions.length - 1;
114
+ });
115
+ } else if (e.key === "Enter") {
116
+ e.preventDefault();
117
+ if (clearFocused) {
118
+ handleClearSelection();
119
+ return;
120
+ }
121
+ if (activeIndex >= 0 && activeIndex < filteredLocalOptions.length) {
122
+ handleSelection(filteredLocalOptions[activeIndex]);
123
+ }
124
+ }
125
+ }
126
+ }));
127
+ (0, _react.useEffect)(() => {
128
+ if (activeIndex >= 0 && itemRefs.current[activeIndex]) {
129
+ itemRefs.current[activeIndex].scrollIntoView({
130
+ block: "nearest"
131
+ });
132
+ }
133
+ }, [activeIndex]);
134
+ (0, _react.useEffect)(() => {
135
+ resolveOptions();
136
+ }, []);
137
+ const fetchAsyncData = async () => {
138
+ setLoading(true);
139
+ let response = null;
140
+ if (fetchData) {
141
+ response = await fetchData();
142
+ } else {
143
+ response = [];
144
+ }
145
+ setLoading(false);
146
+ return response;
147
+ };
148
+ const resolveOptions = async () => {
149
+ let tempOptions = [];
150
+ if (fetchData) {
151
+ tempOptions = await fetchAsyncData();
152
+ } else {
153
+ tempOptions = [...options];
154
+ }
155
+ setLocalOptions(determineSelectedOptions(tempOptions, defaultSelectedOptionIds, valueKey));
156
+ };
157
+ const filterOptions = () => {
158
+ if (filter) {
159
+ setFilteredLocalOptions(localOptions.filter(o => {
160
+ let searchTarget = o[displayKey].toLowerCase();
161
+ return searchTarget.includes(filter.toLowerCase());
162
+ }));
163
+ } else {
164
+ setFilteredLocalOptions([...localOptions]);
165
+ }
166
+ };
167
+ (0, _react.useEffect)(() => {
168
+ filterOptions();
169
+ // eslint-disable-next-line react-hooks/exhaustive-deps
170
+ }, [localOptions, filter]);
171
+ const handleSelection = option => {
172
+ let newOptions = [];
173
+ if (multiple) {
174
+ newOptions = localOptions.map(o => o[valueKey] === option[valueKey] ? _objectSpread(_objectSpread({}, o), {}, {
175
+ selected: o.selected ? false : true
176
+ }) : o);
177
+ } else {
178
+ newOptions = localOptions.map(o => o[valueKey] === option[valueKey] ? _objectSpread(_objectSpread({}, o), {}, {
179
+ selected: true
180
+ }) : _objectSpread(_objectSpread({}, o), {}, {
181
+ selected: false
182
+ }));
183
+ }
184
+ onChange(newOptions.filter(o => o.selected));
185
+ setLocalOptions(newOptions);
186
+ };
187
+ const handleClearSelection = () => {
188
+ let newOptions = localOptions.map(l => _objectSpread(_objectSpread({}, l), {}, {
189
+ selected: false
190
+ }));
191
+ onChange([]);
192
+ setLocalOptions(newOptions);
193
+ setSearch("");
194
+ };
195
+ (0, _react.useEffect)(() => {
196
+ const clearFocus = () => {
197
+ setClearFocused(false);
198
+ };
199
+ window.addEventListener("mousedown", clearFocus);
200
+ return () => {
201
+ window.removeEventListener("mousedown", clearFocus);
202
+ };
203
+ }, []);
204
+ (0, _react.useEffect)(() => {
205
+ if (searchText) {
206
+ setFilteredLocalOptions(localOptions.filter(o => {
207
+ var _o$displayKey;
208
+ return (_o$displayKey = o[displayKey]) === null || _o$displayKey === void 0 ? void 0 : _o$displayKey.toLowerCase().includes(searchText.toLowerCase());
209
+ }));
210
+ } else {
211
+ setFilteredLocalOptions(localOptions);
212
+ }
213
+ }, [localOptions, searchText]);
214
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.List, {
215
+ dense: true,
216
+ disablePadding: true,
217
+ sx: {
218
+ // height: "25ch",
219
+ minHeight: "4ch",
220
+ maxHeight: "30ch",
221
+ overflow: "auto"
222
+ }
223
+ }, loading ? /*#__PURE__*/_react.default.createElement(_material.ListItem, {
224
+ dense: true,
225
+ key: "loader"
226
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
227
+ sx: {
228
+ fontStyle: "italic"
229
+ }
230
+ }, /*#__PURE__*/_react.default.createElement(_text.default, null, "Fetching options..."))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
231
+ sx: {
232
+ padding: "0rem 0.5rem"
233
+ }
234
+ }, (filteredLocalOptions === null || filteredLocalOptions === void 0 ? void 0 : filteredLocalOptions.length) === 0 ? /*#__PURE__*/_react.default.createElement(_text.default, {
235
+ color: "secondary"
236
+ }, "No Data") : filteredLocalOptions.map((o, index) => {
237
+ const altVal = o[avatarKey] === "/" ? " " : o[displayKey];
238
+ const bgcAvatar = colors[o[colorKey]] ? colors[o[colorKey]][500] : "red";
239
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
240
+ key: o[valueKey]
241
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItem, {
242
+ dense: true,
243
+ disablePadding: true,
244
+ ref: el => itemRefs.current[index] = el,
245
+ sx: _objectSpread(_objectSpread({}, o.selected && {
246
+ backgroundColor: "#F5FAFF"
247
+ }), activeIndex === index && {
248
+ backgroundColor: theme.palette.action.hover
249
+ })
250
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItemButton, {
251
+ disableRipple: true,
252
+ dense: true,
253
+ onClick: () => handleSelection(o),
254
+ onMouseEnter: () => setActiveIndex(index)
255
+ }, multiple && /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, {
256
+ sx: {
257
+ minWidth: "initial"
258
+ }
259
+ }), showAvatar && /*#__PURE__*/_react.default.createElement(_material.ListItemAvatar, null, /*#__PURE__*/_react.default.createElement(_material.Avatar, {
260
+ sx: {
261
+ bgcolor: bgcAvatar
262
+ },
263
+ alt: altVal,
264
+ src: o[avatarKey]
265
+ })), /*#__PURE__*/_react.default.createElement(_material.ListItemText, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
266
+ sx: {
267
+ display: "flex",
268
+ flexDirection: "row",
269
+ alignItems: "center"
270
+ },
271
+ gap: 1
272
+ }, o === null || o === void 0 ? void 0 : o.icon, /*#__PURE__*/_react.default.createElement(_material.Box, {
273
+ display: "flex",
274
+ justifyContent: "space-between",
275
+ width: "100%"
276
+ }, /*#__PURE__*/_react.default.createElement(_text.default, {
277
+ semibold: true,
278
+ variant: "caption"
279
+ }, o[displayKey]), /*#__PURE__*/_react.default.createElement(_text.default, {
280
+ style: {
281
+ fontSize: 10
282
+ }
283
+ }, o.selected && "✓")))))), o.selected && /*#__PURE__*/_react.default.createElement(_material.Divider, {
284
+ sx: {
285
+ background: "#d3d3d3"
286
+ }
287
+ }));
288
+ })))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
289
+ dense: true,
290
+ disablePadding: true,
291
+ sx: {
292
+ padding: 0,
293
+ margin: 0,
294
+ display: "flex",
295
+ justifyContent: "flex-end",
296
+ borderTop: "0.5px solid lightgrey"
297
+ }
298
+ }, /*#__PURE__*/_react.default.createElement(_button.default, {
299
+ disableRipple: true,
300
+ onClick: handleClearSelection,
301
+ variant: "text",
302
+ style: {
303
+ cursor: "pointer",
304
+ justifySelf: "end",
305
+ border: clearFocused ? "2px solid ".concat(theme.palette.primary.main) : "2px solid transparent",
306
+ borderRadius: 4
307
+ }
308
+ }, /*#__PURE__*/_react.default.createElement(_material.Box, {
309
+ sx: {
310
+ color: theme.palette.primary.main
311
+ },
312
+ style: {
313
+ display: "flex",
314
+ justifySelf: "flex-end"
315
+ }
316
+ // pt={"0.5rem"}
317
+ }, /*#__PURE__*/_react.default.createElement(_text.default, {
318
+ semibold: true,
319
+ variant: "caption"
320
+ }, "Clear Selection"))))));
321
+ });
322
+ ValueSelector.propTypes = {
323
+ label: _propTypes.default.string.isRequired,
324
+ options: _propTypes.default.array,
325
+ valueKey: _propTypes.default.string,
326
+ displayKey: _propTypes.default.string,
327
+ onChange: _propTypes.default.func.isRequired,
328
+ multiple: _propTypes.default.bool,
329
+ optionsContainerWidth: _propTypes.default.string,
330
+ defaultSelectedOptionIds: _propTypes.default.array,
331
+ fetchData: _propTypes.default.func
332
+ };
333
+ var _default = exports.default = ValueSelector;