empower-container 0.1.13 → 0.1.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. package/{src/main → dist}/assets/Asset.d.ts +0 -0
  2. package/{src/main → dist}/assets/Asset.js +0 -0
  3. package/{src/main → dist}/assets/Asset.tsx +0 -0
  4. package/{src/main → dist}/assets/icons/icon-check-white-sm.svg +0 -0
  5. package/{src/main → dist}/assets/images/icon-arrowdown-graydark.svg +0 -0
  6. package/{src/main → dist}/assets/images/icon-arrowleft-graydark.svg +0 -0
  7. package/{src/main → dist}/assets/images/icon-arrowright-graydark.svg +0 -0
  8. package/{src/main → dist}/assets/images/icon-arrowup-graydark.svg +0 -0
  9. package/{src/main → dist}/assets/images/icon-check-graydark.svg +0 -0
  10. package/{src/main → dist/cjs}/DatetimeFormatter.d.ts +0 -0
  11. package/{src/main → dist/cjs}/DatetimeFormatter.js +0 -0
  12. package/{src/main → dist/cjs}/Information.d.ts +0 -0
  13. package/dist/cjs/Information.js +63 -0
  14. package/{src/main → dist/cjs}/MenuBar.d.ts +0 -0
  15. package/dist/cjs/MenuBar.js +537 -0
  16. package/{src/main → dist/cjs}/Modal.d.ts +0 -0
  17. package/dist/cjs/Modal.js +32 -0
  18. package/dist/cjs/assets/Asset.d.ts +16 -0
  19. package/dist/cjs/assets/Asset.js +30 -0
  20. package/{src/main → dist/cjs}/constants/Constant.d.ts +0 -0
  21. package/dist/cjs/constants/Constant.js +35 -0
  22. package/{src/main → dist/cjs}/index.d.ts +0 -0
  23. package/{src/main → dist/cjs}/index.js +0 -0
  24. package/{src/main → dist/cjs}/inputs/Input.d.ts +0 -0
  25. package/{src/main → dist/cjs}/inputs/Input.js +7 -36
  26. package/{src/main → dist/cjs}/inputs/InputSelectionHandler.d.ts +0 -0
  27. package/{src/main → dist/cjs}/inputs/InputSelectionHandler.js +3 -3
  28. package/{src/main → dist/cjs}/inputs/Select.d.ts +0 -0
  29. package/{src/main → dist/cjs}/inputs/Select.js +11 -64
  30. package/dist/esm/DatetimeFormatter.d.ts +3 -0
  31. package/{src/main/DatetimeFormatter.tsx → dist/esm/DatetimeFormatter.js} +132 -139
  32. package/dist/esm/Information.d.ts +10 -0
  33. package/dist/esm/Information.js +38 -0
  34. package/dist/esm/MenuBar.d.ts +24 -0
  35. package/dist/esm/MenuBar.js +532 -0
  36. package/dist/esm/Modal.d.ts +33 -0
  37. package/dist/esm/Modal.js +27 -0
  38. package/dist/esm/assets/Asset.d.ts +16 -0
  39. package/dist/esm/assets/Asset.js +27 -0
  40. package/dist/esm/constants/Constant.d.ts +15 -0
  41. package/{src/main → dist/esm}/constants/Constant.js +9 -21
  42. package/{src/main/index.tsx → dist/esm/index.d.ts} +1 -3
  43. package/dist/esm/index.js +3 -0
  44. package/dist/esm/inputs/Input.d.ts +25 -0
  45. package/dist/esm/inputs/Input.js +104 -0
  46. package/dist/esm/inputs/InputSelectionHandler.d.ts +3 -0
  47. package/dist/esm/inputs/InputSelectionHandler.js +31 -0
  48. package/dist/esm/inputs/Select.d.ts +28 -0
  49. package/dist/esm/inputs/Select.js +399 -0
  50. package/{src → dist}/scss/components/_modal.scss +0 -0
  51. package/{src → dist}/scss/elements/_button.scss +0 -0
  52. package/{src → dist}/scss/elements/_index.scss +0 -0
  53. package/{src → dist}/scss/elements/_popover.scss +0 -0
  54. package/{src → dist}/scss/foundation/_colors.scss +0 -0
  55. package/{src → dist}/scss/foundation/_mixins.scss +0 -0
  56. package/{src → dist}/scss/foundation/_normalize.scss +0 -0
  57. package/{src → dist}/scss/foundation/_settings.scss +0 -0
  58. package/{src → dist}/scss/foundation/_typography.scss +0 -0
  59. package/{src → dist}/scss/library/_information.scss +0 -0
  60. package/{src → dist}/scss/library/_input.scss +0 -0
  61. package/{src → dist}/scss/library/_menubar.scss +0 -0
  62. package/{src → dist}/scss/library/_select.scss +0 -0
  63. package/{src → dist}/scss/style.scss +0 -0
  64. package/package.json +1 -1
  65. package/public/favicon.ico +0 -0
  66. package/public/index.html +0 -43
  67. package/public/logo192.png +0 -0
  68. package/public/logo512.png +0 -0
  69. package/public/manifest.json +0 -25
  70. package/public/robots.txt +0 -3
  71. package/src/index.tsx +0 -15
  72. package/src/main/Information.js +0 -65
  73. package/src/main/Information.tsx +0 -112
  74. package/src/main/MenuBar.js +0 -651
  75. package/src/main/MenuBar.tsx +0 -1074
  76. package/src/main/Modal.js +0 -24
  77. package/src/main/Modal.tsx +0 -83
  78. package/src/main/inputs/Input.tsx +0 -193
  79. package/src/main/inputs/InputSelectionHandler.tsx +0 -21
  80. package/src/main/inputs/Select.tsx +0 -654
  81. package/src/main/tsconfig.common.json +0 -34
  82. package/src/main/tsconfig.json +0 -35
  83. package/src/sample/App.css +0 -38
  84. package/src/sample/App.d.ts +0 -3
  85. package/src/sample/App.js +0 -13
  86. package/src/sample/App.test.d.ts +0 -1
  87. package/src/sample/App.test.js +0 -13
  88. package/src/sample/App.test.tsx +0 -9
  89. package/src/sample/App.tsx +0 -15
  90. package/src/sample/TestMenuBar.d.ts +0 -3
  91. package/src/sample/TestMenuBar.js +0 -529
  92. package/src/sample/TestMenuBar.tsx +0 -380
  93. package/src/sample/react-app-env.d.ts +0 -1
  94. package/src/sample/reportWebVitals.d.ts +0 -3
  95. package/src/sample/reportWebVitals.js +0 -38
  96. package/src/sample/reportWebVitals.ts +0 -15
  97. package/src/sample/setupTests.d.ts +0 -1
  98. package/src/sample/setupTests.js +0 -7
  99. package/src/sample/setupTests.ts +0 -5
  100. package/src/sample/tsconfig.json +0 -36
@@ -1,654 +0,0 @@
1
- import React, { useState, Fragment } from "react";
2
- import '../../scss/style.scss';
3
-
4
- // Imports
5
- import { SVG_BACK, SVG_CLOSE_GRAY, SVG_ARROWLEFT, SVG_ARROWRIGHT, SVG_CHECK, SVG_ARROWDOWN } from '../assets/Asset';
6
-
7
- interface IPropsPopover{
8
- id:String,
9
- className:String
10
- open: Boolean,
11
- origin?:String,
12
- onClick:(event:React.MouseEvent<HTMLDivElement, MouseEvent>) => void,
13
- }
14
-
15
-
16
- export const Popover: React.FC<IPropsPopover> = ({ open, origin, children, onClick }) => {
17
-
18
- return (
19
- <Fragment>
20
- {
21
- open &&
22
- <Fragment>
23
- <div className="em-overlay" onClick={e=>onClick(e)}>
24
- </div>
25
- <div className="em-popover" style={origin !== undefined && origin === "right" ? { right: 200 + 'px' } : { left: 0 + 'px' }}>
26
- {children}
27
- </div>
28
- </Fragment>
29
- }
30
- </Fragment>
31
- )
32
- }
33
-
34
-
35
-
36
- interface IPropsDropDown {
37
- config: {
38
- id: string | keyof Object,
39
- type: string,
40
- value?: string | Array<string> | any,
41
- placeholder?: string,
42
- label?: string,
43
- readOnly?: boolean,
44
- disabled?: boolean,
45
- options?: Array<string | object> | object | any
46
-
47
-
48
- },
49
- customClass?: string,
50
- hideClearIcon: boolean,
51
- isEmployeeSelection: boolean,
52
-
53
- onChanged?: (event: React.ChangeEvent<HTMLInputElement>
54
- | React.MouseEvent<HTMLDivElement, MouseEvent>
55
- | React.MouseEvent<HTMLInputElement, MouseEvent>
56
- | React.KeyboardEvent<HTMLInputElement>
57
- | undefined
58
- | any, val?: string | any) => void,
59
-
60
- }
61
-
62
-
63
-
64
- const Dropdown: React.FC<IPropsDropDown> = ({ config, customClass, onChanged, isEmployeeSelection, hideClearIcon }) => {
65
- let { disabled, options, type, value, placeholder, id } = { ...config };
66
- // React Hook
67
- let [dropdownPopover, setDropdownPopover] = useState<Boolean>(false);
68
- let [optionsArray, setOptionsArray] = useState<any>(options ? options : []);
69
- let [selectTemporaryValue, setSelectTemporaryValue] = useState<string>("");
70
- let [keyOption, setKeyOption] = useState<any>(null);
71
- let [objectKeyOption, setObjectKeyOption] = useState<any>(null);
72
-
73
-
74
- // Dropdown Config Variable
75
- let dropdownClass = disabled && disabled.constructor === Boolean ? 'em-input-field input-disabled' : 'em-input-field';
76
-
77
- let multiSelectValue = type === 'multi-select' ? (
78
- value && value.constructor === Array && value.length > 0 ? (
79
- getSelectInputValue(value)
80
- ) : ''
81
- ) : '';
82
-
83
- const selectedValue = value && (value.constructor === String || value.constructor === Number) && value !== "" ? (
84
- getSelectInputValue(value)
85
- ) : value && value.constructor === Array && value.length > 0 ? (
86
- getSelectInputValue(value)
87
- ) : placeholder && placeholder.constructor === String ? placeholder : '-';
88
-
89
-
90
-
91
- /**
92
- * popoverRequestHandler
93
- * hide and show the options popover
94
- * @param {*} e - event
95
- * @param {*} action - it can be either on-focus or on-blur
96
- */
97
- function popoverRequestHandler(e: React.KeyboardEvent<HTMLInputElement>
98
- | React.MouseEvent<HTMLOptionElement, MouseEvent>
99
- | React.FocusEvent<HTMLInputElement, Element>
100
- | React.MouseEvent<HTMLInputElement, MouseEvent>
101
- | React.MouseEvent<HTMLOptionElement, MouseEvent>
102
- | React.MouseEvent<HTMLDivElement, MouseEvent>
103
- | React.FocusEvent<HTMLInputElement, HTMLDivElement>
104
- | any, action: string) {
105
- if (action === 'on-focus') {
106
- type === 'select' ? setOptionsArray(options) : filterOptions(selectTemporaryValue, value);
107
- setDropdownPopover(e.currentTarget)
108
- setKeyOption(null);
109
- setObjectKeyOption(null);
110
- } else {
111
- setDropdownPopover(false);
112
- setSelectTemporaryValue("");
113
- }
114
- }
115
-
116
- /**
117
- * optionSelectionHandler
118
- * manipulate the selected options
119
- * @param {*} e - event
120
- * @param {*} opt - selected option from the list
121
- * return Object/Array - the selected manipulated values from the list
122
- */
123
- function optionSelectionHandler(e: React.MouseEvent<HTMLInputElement, MouseEvent>
124
- | React.KeyboardEvent<HTMLInputElement>
125
- | React.MouseEvent<HTMLDivElement, MouseEvent>
126
- | React.MouseEvent<HTMLOptionElement, MouseEvent>
127
- | any, opt: any) {
128
-
129
-
130
- if (type && type === 'select') {
131
- popoverRequestHandler(e, 'on-blur');
132
- return onChanged ? onChanged(e, opt.value) : false;
133
- } else if (type && type === 'multi-select') {
134
- let valueCopy= value ? selectedOptions([...value]) : []
135
-
136
-
137
- if (opt === 'select-all') {
138
- let notSelectedOptions = [];
139
- if (optionsArray.constructor === Array) {
140
- notSelectedOptions = optionsArray.filter((item:any) => {
141
- return valueCopy.indexOf(item) < 0;
142
- });
143
- if (notSelectedOptions.length > 0) {
144
- valueCopy = [...valueCopy, ...notSelectedOptions];
145
- } else {
146
- valueCopy = optionsArray.filter((item:any) => {
147
- return valueCopy.indexOf(item) < -1;
148
- });
149
- }
150
- } else if (optionsArray.constructor === Object) {
151
- let mergeOptions:Array<string> = [];
152
- Object.values(optionsArray).map((optval:any) => {
153
- mergeOptions = [...mergeOptions, ...optval.options];
154
- return optval;
155
- });
156
- notSelectedOptions = mergeOptions.filter((item:any) => {
157
- return valueCopy.indexOf(item) < 0;
158
- });
159
- if (notSelectedOptions.length > 0) {
160
- valueCopy = [...valueCopy, ...notSelectedOptions];
161
- } else {
162
- valueCopy = mergeOptions.filter((item:any) => {
163
- return valueCopy.indexOf(item) < -1;
164
- });
165
- }
166
- }
167
- } else {
168
- let optIdx = valueCopy.indexOf(opt);
169
- if (optIdx >= 0) {
170
- valueCopy.splice(optIdx, 1);
171
- } else {
172
- valueCopy = [...valueCopy, opt];
173
- }
174
- }
175
- valueCopy = valueCopy.map((item:any):any => {
176
- return item.value;
177
- });
178
- filterOptions(selectTemporaryValue, valueCopy);
179
- e.selected = valueCopy;
180
- return onChanged ? onChanged(e) : false;
181
- }
182
- }
183
-
184
- /**
185
- * inputChangedHandler
186
- * get the current value from the input text field
187
- * @param {*} e - event which will be used to get the changed value
188
- */
189
- function inputChangedHandler(e: React.ChangeEvent<HTMLInputElement>) {
190
- setKeyOption(null);
191
- setObjectKeyOption(null);
192
- setSelectTemporaryValue(e.target.value);
193
- filterOptions(e.target.value, value);
194
- }
195
-
196
- /**
197
- * getSelectInputValue
198
- * manipulate the selected multiple values into string
199
- * @param {*} val - multi-select selected value
200
- * return String - the converted string from multi-select array values
201
- */
202
- function getSelectInputValue (val: Array<string> | string[] | any){
203
- if (type === 'multi-select' && val.constructor === Array) {
204
- let selectedLabels = selectedOptions(val);
205
- if (val.length < 6) {
206
- selectedLabels = selectedLabels.map((item:any) => {
207
- return item.label
208
- });
209
- } else {
210
- selectedLabels = [val.length + (isEmployeeSelection ? ' employees' : ' Selected Item(s)')];
211
- }
212
-
213
- return selectedLabels.join(', ');
214
- } else if (type === 'select' && (val.constructor === String || val.constructor === Number)) {
215
- let optArray= selectedOptions(val);
216
- return optArray.length > 0 ? (optArray[0] as any).label : val.toString();
217
- } else {
218
- return '';
219
- }
220
- }
221
-
222
-
223
- /**
224
- * selectedOptions
225
- * get the selected options from the values given
226
- * @param {*} val - values selected
227
- * return String - converted values into string
228
- */
229
- function selectedOptions (val: string[] | number| any) {
230
- var selectedOptionValue:Array<string | object> = [];
231
- if (options && options.constructor === Array) {
232
- selectedOptionValue = options.filter((item:any) => {
233
- return (val && val.constructor === Array && val.indexOf(item.value) > -1) || item.value === val;
234
- });
235
- } else if (options && options.constructor === Object) {
236
- let mergeOptions:Array<object> = [];
237
- Object.values(options).map((optval:any) => {
238
- mergeOptions = [...mergeOptions, ...optval.options];
239
- return optval;
240
- });
241
- selectedOptionValue = mergeOptions.filter((item:any) => {
242
- return (val && val.constructor === Array && val.indexOf(item.value) > -1) || item.value === val;
243
- });
244
- }
245
- return selectedOptionValue;
246
- }
247
-
248
- /**
249
- * filterOptions (for multi-select only)
250
- * filter the options to search specific values
251
- * @param {*} search - type value from the input text field
252
- * @param {*} values - selected values of multi-select
253
- */
254
- function filterOptions(search: string, values: any) {
255
- let selectedOptionsVariable = null;
256
- if (type === 'multi-select') {
257
- if (optionsArray && optionsArray.constructor === Array) {
258
- selectedOptionsVariable = selectedOptions(values);
259
- if (options && options.constructor===Array && options.length > 0) {
260
- optionsArray = options.filter((item:any) => {
261
- return values.indexOf(item.value) < 0 && item.label.toLowerCase().search(search.toLowerCase()) > -1;
262
- });
263
- }
264
-
265
- values = selectedOptionsVariable.filter((item:any) => {
266
- return item.label.toLowerCase().search(search.toLowerCase()) > -1;
267
- })
268
- setOptionsArray([...values, ...optionsArray]);
269
- } else if (optionsArray && optionsArray.constructor === Object) {
270
- let optionsArrayCopy:{[index: string]:any} = {};
271
- selectedOptionsVariable = selectedOptions(values);
272
- if (selectedOptionsVariable.length > 0) {
273
- selectedOptionsVariable = selectedOptionsVariable.filter((item:any) => {
274
- return item.label.toLowerCase().search(search.toLowerCase()) > -1;
275
- })
276
- if (selectedOptionsVariable.length > 0) {
277
- optionsArrayCopy['selected-values'] = { label: 'Selected', options: selectedOptionsVariable }
278
- }
279
- }
280
- if (options && options.constructor === Object && Object.keys(options).length > 0) {
281
- Object.keys(options).map((optgroup: any) => {
282
- let filterOptionsArray:Array<string> = [];
283
-
284
-
285
- if (options[optgroup].label.toLowerCase().search(search.toLowerCase()) > -1) {
286
- filterOptionsArray = options[optgroup].options.filter((item:any) => {
287
- return values.indexOf(item.value) < 0;
288
- });
289
- } else {
290
- filterOptionsArray = options[optgroup].options.filter((item:any) => {
291
- return values.indexOf(item.value) < 0 && item.label.toLowerCase().search(search.toLowerCase()) > -1;
292
- });
293
- }
294
-
295
-
296
-
297
-
298
-
299
- if (filterOptionsArray.length > 0) {
300
- optionsArrayCopy[optgroup] = { label: options[optgroup].label, options: filterOptionsArray };
301
- }
302
- return optgroup;
303
- });
304
- }
305
-
306
- setOptionsArray(optionsArrayCopy);
307
- }
308
- } else {
309
- if (optionsArray && optionsArray.constructor === Array) {
310
- optionsArray = options.filter((item:any) => {
311
- return item.label.toLowerCase().search(search.toLowerCase()) > -1;
312
- });
313
- setOptionsArray([...optionsArray]);
314
- } else if (optionsArray && optionsArray.constructor === Object) {
315
- let optionsArrayCopy:{[index: string]:any} = {};
316
- Object.keys(options).map((optgroup:any) => {
317
- if (options[optgroup]?.label.toLowerCase().search(search.toLowerCase()) > -1) {
318
- optionsArrayCopy[optgroup] = { ...options[optgroup] };
319
- } else {
320
- let filterOptionsArray = options[optgroup].options.filter((item:any) => {
321
- return item.label.toLowerCase().search(search.toLowerCase()) > -1;
322
- });
323
- if (filterOptionsArray.length > 0) {
324
- optionsArrayCopy[optgroup] = { label: options[optgroup].label, options: filterOptionsArray };
325
- }
326
- }
327
- return optgroup;
328
- });
329
- setOptionsArray(optionsArrayCopy);
330
- }
331
- }
332
- }
333
-
334
- /**
335
- * handleCheckedOptions
336
- * determine if the item from the options were selected
337
- * @param {*} opt - item from the options
338
- * return Boolean - selected/not
339
- */
340
- function handleCheckedOptions(opt: any): boolean {
341
- if (opt === 'select-all') {
342
- var notSelectedOptions = null;
343
- if (value && value.constructor === Array) {
344
- if (optionsArray.constructor === Array) {
345
- notSelectedOptions = optionsArray.filter((item:any) => {
346
- return value.indexOf(item.value) < 0;
347
- });
348
- } else if (optionsArray.constructor === Object) {
349
- let mergeOptions:Array<string> = [];
350
- Object.values(optionsArray).map((optval:any) => {
351
- mergeOptions = [...mergeOptions, ...optval.options];
352
- return optval;
353
- });
354
- notSelectedOptions = mergeOptions.filter((item:any) => {
355
- return value.indexOf(item.value) < 0;
356
- });
357
- }
358
- }
359
- return notSelectedOptions && notSelectedOptions.length === 0 ? true : false;
360
- } else {
361
- return value && value.constructor === Array && value.filter((val:any) => (opt.value === val)).length > 0 ? true : false;
362
- }
363
- }
364
-
365
-
366
- function handleKeyPress(event: React.KeyboardEvent<HTMLInputElement>) {
367
- let updatedKey:any;
368
- if (Boolean(dropdownPopover)) {
369
- if (optionsArray && optionsArray.constructor === Array && optionsArray.length > 0) {
370
- if (event.key === 'ArrowDown') {
371
- if (keyOption === null) {
372
- setKeyOption(0);
373
- } else {
374
- updatedKey = (keyOption + 1) >= optionsArray.length ? (optionsArray.length - 1) : keyOption + 1;
375
- setKeyOption(updatedKey);
376
- }
377
- } else if (event.key === 'ArrowUp') {
378
- if (keyOption === null) {
379
- setKeyOption(0);
380
- } else {
381
- updatedKey = keyOption > 0 ? (keyOption - 1) : 0;
382
- setKeyOption(updatedKey);
383
- }
384
- } else if (event.key === 'Enter') {
385
- if (keyOption !== null && optionsArray[keyOption]) {
386
- optionSelectionHandler(event, optionsArray[keyOption]);
387
- }
388
- }
389
- } else if (optionsArray && optionsArray.constructor === Object && Object.keys(optionsArray).length > 0) {
390
- let optionsKeyArray = Object.keys(optionsArray);
391
- if (event.key === 'ArrowDown') {
392
- if (keyOption === null || objectKeyOption === null) {
393
- setKeyOption(0);
394
- setObjectKeyOption(0);
395
- } else {
396
- if (optionsArray[optionsKeyArray[objectKeyOption]].options.length <= keyOption + 1) {
397
- if (objectKeyOption + 1 < optionsKeyArray.length) {
398
- setKeyOption(0);
399
- setObjectKeyOption(objectKeyOption + 1);
400
- }
401
- } else {
402
- setKeyOption(keyOption + 1)
403
- }
404
- }
405
- } else if (event.key === 'ArrowUp') {
406
- if (keyOption === null || objectKeyOption === null) {
407
- setKeyOption(0);
408
- setObjectKeyOption(0);
409
- } else {
410
- if (keyOption > 0) {
411
- setKeyOption(keyOption - 1);
412
- } else {
413
- if (objectKeyOption > 0) {
414
- let updatedKey = optionsArray[optionsKeyArray[objectKeyOption - 1]].options.length - 1;
415
- setKeyOption(updatedKey);
416
- setObjectKeyOption(objectKeyOption - 1);
417
- }
418
- }
419
- }
420
- } else if (event.key === 'Enter') {
421
- if (keyOption !== null && objectKeyOption !== null && optionsArray[optionsKeyArray[objectKeyOption]].options[keyOption]) {
422
- optionSelectionHandler(event, optionsArray[optionsKeyArray[objectKeyOption]].options[keyOption]);
423
- }
424
- }
425
- }
426
- } else {
427
- if (event.key === 'Enter' || event.key === 'ArrowDown') {
428
- popoverRequestHandler(event, 'on-focus')
429
- }
430
- }
431
- }
432
-
433
- /**
434
- * clearValuesHandler
435
- * reset value into null and return it to parent
436
- * @param {*} event - event
437
- */
438
- const clearValuesHandler = (event: React.MouseEvent<HTMLDivElement, MouseEvent>| any):any=> {
439
- event && event.preventDefault();
440
- return onChanged && onChanged(event);
441
- }
442
-
443
- return (
444
- <div className={'em-select ' + customClass}>
445
- <div className={dropdownClass} id={id && id.constructor === String ? id : 'select-default-id'} data-testid={id && id.constructor === String ? id : 'select-default-id'}>
446
- {
447
- type === 'select' ? (
448
- <input
449
- className="em-select-input"
450
- data-testid={id && id.constructor === String ? `select-input-${id}` : 'select-input-default-id'}
451
- id={id && id.constructor === String ? `${id}-select-input-default-id` : "select-input-default-id"}
452
- type="text"
453
- onFocus={event => popoverRequestHandler(event, 'on-focus')}
454
- onClick={event => popoverRequestHandler(event, 'on-focus')}
455
- onChange={event => inputChangedHandler(event)}
456
- value={value ? selectedValue : selectTemporaryValue}
457
- placeholder={selectedValue}
458
- autoComplete={'off'}
459
- disabled={disabled ? disabled : false}
460
- onKeyDown={event => handleKeyPress(event)} />
461
- ) : (
462
- <input
463
- className="em-select-input"
464
- data-testid={id && id.constructor === String ? `${id}-multi-select-input` : "multi-select-input-default-id"}
465
- id={id && id.constructor === String ? `${id}-multi-select-input-default-id` : "multi-select-input-default-id"}
466
- type="text"
467
- onClick={event => popoverRequestHandler(event, 'on-focus')}
468
- placeholder={selectedValue}
469
- autoComplete={'off'}
470
- value={value && value.length > 0 ? multiSelectValue : ""}
471
- disabled={disabled ? disabled : false}
472
- readOnly />
473
- )
474
-
475
- }
476
-
477
- {
478
- type === 'select' ? (
479
- disabled ? (
480
- <div data-testid={'dropdown-icon'} className="em-field-icon">
481
- {SVG_ARROWDOWN}
482
- </div>
483
- ) : (
484
- value && value !== "" && !hideClearIcon ? (
485
- <div data-testid={'clear-icon'} onClick={event => clearValuesHandler(event)} className='em-field-icon'>
486
- {SVG_CLOSE_GRAY}
487
- </div>
488
- ) : (
489
- <div data-testid={'dropdown-icon'} className="em-field-icon" onClick={event => popoverRequestHandler(event, 'on-focus')}>
490
- {SVG_ARROWDOWN}
491
- </div>
492
- )
493
- )
494
- ) : null
495
- }
496
- </div>
497
- <Popover
498
- id="select-popover"
499
- className={Boolean(dropdownPopover) ? 'open-popover' : ''}
500
- open={Boolean(dropdownPopover)}
501
- onClick={(event:any) => popoverRequestHandler(event, 'on-blur')}>
502
- <div className="em-select-popover">
503
- {
504
- type === 'multi-select' ? (
505
- <div className="em-select-search e-input">
506
- <input
507
- id="multi-select-input-search"
508
- type="text"
509
- onFocus={event => popoverRequestHandler(event, 'on-focus')}
510
- onChange={event => inputChangedHandler(event)}
511
- placeholder={"Search"}
512
- value={selectTemporaryValue}
513
- disabled={disabled ? disabled : false}
514
- autoComplete="off" />
515
- </div>
516
- ) : null
517
- }
518
- {
519
- optionsArray && optionsArray.constructor === Array && optionsArray.length > 0 ? (
520
- // Default array display of options
521
- <Fragment>
522
- {
523
- type === 'select' ? (
524
- optionsArray.map((opt:any, idx:number) => (
525
- <option className={keyOption === idx ? 'is-highlighted' : ''} key={idx}
526
- onClick={event => optionSelectionHandler(event, opt)}>
527
- {opt.label}
528
- </option>
529
- ))
530
- ) : type === 'multi-select' ? (
531
- <Fragment>
532
- <div className="em-select-multiple">
533
- <div className="em-select-all">
534
- {
535
- optionsArray.length > 1 ? (
536
- <div className="em-select-check" key='select-all' onClick={event => optionSelectionHandler(event, 'select-all')}>
537
- <input
538
- type="checkbox"
539
- checked={handleCheckedOptions('select-all')}
540
- id='select-all'
541
- readOnly
542
- autoComplete="off" />
543
- <label htmlFor=""></label>
544
- <span>Select All</span>
545
- </div>
546
- ) : null
547
- }
548
- </div>
549
- <div className="em-select-checklist">
550
- {
551
- optionsArray.map((opt:any, idx:number) => (
552
- <div id='option-div' className="em-select-check" key={idx} onClick={event => optionSelectionHandler(event, opt)}>
553
- <input
554
- type="checkbox"
555
- checked={handleCheckedOptions(opt)}
556
- id={opt.value}
557
- readOnly
558
- autoComplete="off"
559
- />
560
- <label htmlFor=""></label>
561
- <span >{opt.label}</span>
562
- </div>
563
- ))
564
- }
565
- </div>
566
- </div>
567
- </Fragment>
568
- ) : <Fragment>No options</Fragment>
569
- }
570
- </Fragment>
571
- ) : optionsArray && optionsArray.constructor === Object && Object.keys(optionsArray).length > 0 ? (
572
- // Display of options when grouped (*its only applicable on select type)
573
- <Fragment>
574
- {
575
- type === 'select' ? (
576
- Object.keys(optionsArray).map((id, grpIdx) => (
577
- <optgroup key={id} label={optionsArray[id].label ? optionsArray[id].label : 'Invalid Group Label'}>
578
- {
579
- optionsArray[id].options && optionsArray[id].options.constructor === Array && optionsArray[id].options.length > 0 ? (
580
- optionsArray[id].options.map((opt:any, idx:number) => (
581
- <option key={idx} className={(grpIdx === objectKeyOption && keyOption === idx) ? 'is-highlighted' : ''} onClick={event => optionSelectionHandler(event, opt)}>
582
- {opt.label}
583
- </option>
584
- ))
585
- ) : null
586
- }
587
- </optgroup>
588
- ))
589
- ) : type === 'multi-select' ? (
590
- <Fragment>
591
- <div className="em-select-multiple">
592
- <div className="em-select-all">
593
- {
594
- Object.keys(optionsArray).length > 1 || (
595
- Object.keys(optionsArray).length === 1 && optionsArray[Object.keys(optionsArray)[0]].options && optionsArray[Object.keys(optionsArray)[0]].options.constructor === Array && optionsArray[Object.keys(optionsArray)[0]].options.length > 1) ? (
596
- <div className="em-select-check" key='select-all' onClick={event => optionSelectionHandler(event, 'select-all')}>
597
- <input
598
- type="checkbox"
599
- checked={handleCheckedOptions('select-all')}
600
- id='select-all'
601
- readOnly
602
- autoComplete="off"
603
- />
604
- <label htmlFor=""></label>
605
- <span>Select All</span>
606
- </div>
607
- ) : null
608
- }
609
- </div>
610
- {
611
- Object.keys(optionsArray).map(id => (
612
- <Fragment key={id}>
613
- <div className="em-select-checklist">
614
- {
615
- id !== 'selected-values' ? (
616
- <optgroup label={optionsArray[id].label ? optionsArray[id].label : 'Invalid Group Label'} />
617
- ) : null
618
- }
619
- {
620
- optionsArray[id].options && optionsArray[id].options.constructor === Array && optionsArray[id].options.length > 0 ? (
621
- optionsArray[id].options.map((opt:any, idx:number) => (
622
- <div id='option-div' className="em-select-check" key={idx} onClick={event => optionSelectionHandler(event, opt)}>
623
- <input
624
- type="checkbox"
625
- // checked={handleCheckedOptions(opt)}
626
- checked={value}
627
- id={opt.value}
628
- readOnly
629
- autoComplete="off"
630
- />
631
- <label htmlFor=""></label>
632
- <span>{opt.label}</span>
633
- </div>
634
- ))
635
- ) : <Fragment>No options</Fragment>
636
- }
637
- </div>
638
- </Fragment>
639
- ))
640
- }
641
- </div>
642
- </Fragment>
643
- ) : <Fragment>No options</Fragment>
644
- }
645
- </Fragment>
646
- ) : <div className="em-noresult">No options</div>
647
- }
648
- </div>
649
- </Popover>
650
- </div>
651
- );
652
- }
653
-
654
- export default Dropdown;