react-restyle-components 0.1.58 → 0.1.60

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 (79) hide show
  1. package/lib/package.json +4 -5
  2. package/package.json +5 -6
  3. package/src/App.css +38 -0
  4. package/src/App.test.tsx +9 -0
  5. package/src/App.tsx +26 -0
  6. package/src/core-components/atoms/buttons/button.stories.tsx +42 -0
  7. package/src/core-components/atoms/buttons/buttons.component.tsx +33 -0
  8. package/src/core-components/atoms/buttons/buttons.test.tsx +13 -0
  9. package/src/core-components/atoms/check-box/checkBox.component.tsx +54 -0
  10. package/src/core-components/atoms/check-box/checkBox.stories.tsx +29 -0
  11. package/src/core-components/atoms/check-box/checkBox.test.tsx +11 -0
  12. package/src/core-components/atoms/date-picker/date-picker.component.tsx +60 -0
  13. package/src/core-components/atoms/date-picker/date-picker.stories.tsx +23 -0
  14. package/src/core-components/atoms/date-picker/date-picker.test.tsx +17 -0
  15. package/src/core-components/atoms/form/form.component.tsx +604 -0
  16. package/src/core-components/atoms/form/form.test.tsx +120 -0
  17. package/src/core-components/atoms/icons/icons.component.tsx +65 -0
  18. package/src/core-components/atoms/icons/icons.stories.tsx +24 -0
  19. package/src/core-components/atoms/icons/icons.test.tsx +15 -0
  20. package/src/core-components/atoms/input/input-otp.component.tsx +107 -0
  21. package/src/core-components/atoms/input/input-otp.styles.css +35 -0
  22. package/src/core-components/atoms/input/input-pin.component.tsx +144 -0
  23. package/src/core-components/atoms/input/input-pin.stories.tsx +25 -0
  24. package/src/core-components/atoms/input/input-pin.test.tsx +30 -0
  25. package/src/core-components/atoms/input/input.component.tsx +74 -0
  26. package/src/core-components/atoms/input/input.stories.tsx +26 -0
  27. package/src/core-components/atoms/input/input.styles.css +35 -0
  28. package/src/core-components/atoms/input/input.test.tsx +32 -0
  29. package/src/core-components/atoms/input-dropdown/input-dropdown.component.tsx +91 -0
  30. package/src/core-components/atoms/input-dropdown/input-dropdown.stories.tsx +22 -0
  31. package/src/core-components/atoms/input-dropdown/input-dropdown.test.tsx +16 -0
  32. package/src/core-components/atoms/loader/loader.component.tsx +78 -0
  33. package/src/core-components/atoms/loader/loader.stories.tsx +18 -0
  34. package/src/core-components/atoms/loader/loader.test.tsx +9 -0
  35. package/src/core-components/atoms/radio/radio.component.tsx +48 -0
  36. package/src/core-components/atoms/radio/radio.stories.tsx +27 -0
  37. package/src/core-components/atoms/radio/radio.test.tsx +11 -0
  38. package/src/core-components/atoms/stepper/stepper.component.tsx +72 -0
  39. package/src/core-components/atoms/stepper/stepper.stories.tsx +23 -0
  40. package/src/core-components/atoms/stepper/stepper.test.tsx +14 -0
  41. package/src/core-components/atoms/tabs/tabs.component.tsx +41 -0
  42. package/src/core-components/atoms/tabs/tabs.stories.tsx +27 -0
  43. package/src/core-components/atoms/tabs/tabs.test.tsx +19 -0
  44. package/src/core-components/atoms/timer/timer.component.tsx +89 -0
  45. package/src/core-components/atoms/timer/timer.test.tsx +16 -0
  46. package/src/core-components/atoms/tooltip/tooltip.component.test.tsx +10 -0
  47. package/src/core-components/atoms/tooltip/tooltip.component.tsx +54 -0
  48. package/src/core-components/atoms/tooltip/tooltip.stories.tsx +18 -0
  49. package/src/core-components/index.ts +21 -0
  50. package/src/core-components/molecules/auto-complete-filter-multiple-select-multiple-fields-display/auto-complete-filter-multiple-select-multiple-fields-display.component.test.tsx +18 -0
  51. package/src/core-components/molecules/auto-complete-filter-multiple-select-multiple-fields-display/auto-complete-filter-multiple-select-multiple-fields-display.component.tsx +182 -0
  52. package/src/core-components/molecules/auto-complete-filter-multiple-select-multiple-fields-display/auto-complete-filter-multiple-select-multiple-fields-display.stories.tsx +55 -0
  53. package/src/core-components/molecules/auto-complete-filter-single-select-multiple-fields-display/auto-complete-filter-single-select-multiple-fields-display.component.test.tsx +23 -0
  54. package/src/core-components/molecules/auto-complete-filter-single-select-multiple-fields-display/auto-complete-filter-single-select-multiple-fields-display.component.tsx +190 -0
  55. package/src/core-components/molecules/auto-complete-filter-single-select-multiple-fields-display/auto-complete-filter-single-select-multiple-fields-display.stories.tsx +35 -0
  56. package/src/core-components/molecules/css-multiline-input/css-multiline-input.component.tsx +135 -0
  57. package/src/core-components/molecules/css-multiline-input/css-multiline-input.stories.tsx +18 -0
  58. package/src/core-components/molecules/css-multiline-input/css-multiline-input.test.tsx +11 -0
  59. package/src/core-components/molecules/css-multiline-input/css-properties.ts +177 -0
  60. package/src/core-utils/index.ts +1 -0
  61. package/src/core-utils/unit-test.utils.tsx +12 -0
  62. package/src/custom.d.ts +4 -0
  63. package/src/index.css +17 -0
  64. package/src/index.ts +1 -0
  65. package/src/index.tsx +18 -0
  66. package/src/library/assets/svg/DownArrow.svg +14 -0
  67. package/src/library/assets/svg/UpArrow.svg +14 -0
  68. package/src/library/assets/svg/checkedBox.svg +14 -0
  69. package/src/library/assets/svg/checkedRadio.svg +13 -0
  70. package/src/library/assets/svg/datePicker.svg +3 -0
  71. package/src/library/assets/svg/index.ts +38 -0
  72. package/src/library/assets/svg/timer copy.svg +3 -0
  73. package/src/library/assets/svg/timer.svg +3 -0
  74. package/src/library/assets/svg/unCheckbox.svg +3 -0
  75. package/src/library/assets/svg/uncheckRadio.svg +3 -0
  76. package/src/logo.svg +1 -0
  77. package/src/react-app-env.d.ts +1 -0
  78. package/src/reportWebVitals.ts +16 -0
  79. package/src/setupTests.ts +5 -0
@@ -0,0 +1,604 @@
1
+ import React, {useState, useEffect, Ref} from 'react';
2
+ import classNames from 'classnames';
3
+
4
+ interface LabelProps {
5
+ htmlFor: string;
6
+ hasError?: boolean;
7
+ style?: any;
8
+ children?: React.ReactNode;
9
+ }
10
+
11
+ export const Label: React.FunctionComponent<LabelProps> = (props) => (
12
+ <>
13
+ <label
14
+ htmlFor={props.htmlFor}
15
+ className={`${
16
+ props.hasError ? 'text-red-400' : 'text-current'
17
+ } block text-3xs font-medium mb-1`}
18
+ style={{...props.style}}
19
+ >
20
+ {props.children}
21
+ </label>
22
+ </>
23
+ );
24
+
25
+ interface InputWrapperProps {
26
+ id?: string;
27
+ label?: string;
28
+ className?: string;
29
+ hasError?: boolean;
30
+ style?: any;
31
+ ref?: any;
32
+ children?: React.ReactNode;
33
+ }
34
+
35
+ export const InputWrapper: React.FunctionComponent<InputWrapperProps> = (
36
+ props: InputWrapperProps
37
+ ) => (
38
+ <div className={props.className} ref={props.ref}>
39
+ <Label
40
+ htmlFor={props.id || ''}
41
+ hasError={props.hasError}
42
+ style={{...props.style}}
43
+ >
44
+ <span className="dark:text-white w-10">{props.label}</span>
45
+ </Label>
46
+ {props.children}
47
+ </div>
48
+ );
49
+
50
+ interface InputProps extends InputWrapperProps {
51
+ value?: any;
52
+ defaultValue?: any;
53
+ name?: string;
54
+ placeholder?: string;
55
+ type?: string;
56
+ required?: boolean;
57
+ disabled?: boolean;
58
+ className?: string;
59
+ labelClassName?: string;
60
+ rows?: number;
61
+ style?: any;
62
+ wrapperStyle?: any;
63
+ hasError?: boolean;
64
+ pattern?: any;
65
+ maxLength?: number;
66
+ isAutoFocus?: boolean;
67
+ input2isBlurEnable?: boolean;
68
+ onChange?: (e: any) => void;
69
+ onBlur?: (e: any) => void;
70
+ onKeyDown?: (e: any) => void;
71
+ onKeyUp?: (e: any) => void;
72
+ inputRef?: any;
73
+ }
74
+
75
+ export const Input = React.forwardRef((props: InputProps, ref: Ref<any>) => {
76
+ const handleKeyPress = (e) => {
77
+ const key = e.key;
78
+ const regex = props.pattern;
79
+ if (regex && !regex?.test(key)) {
80
+ e.preventDefault();
81
+ }
82
+ };
83
+ return (
84
+ <InputWrapper
85
+ label={props.label}
86
+ id={props.id}
87
+ hasError={props.hasError}
88
+ style={props.wrapperStyle}
89
+ className={props.labelClassName}
90
+ >
91
+ <input
92
+ type={props.type || 'text'}
93
+ id={props.id}
94
+ ref={props.inputRef}
95
+ data-testid="INPT"
96
+ autoFocus={props?.isAutoFocus || false}
97
+ name={props.name}
98
+ style={props.style}
99
+ defaultValue={props.defaultValue}
100
+ placeholder={props.placeholder}
101
+ required={props.required || false}
102
+ disabled={props.disabled || false}
103
+ autoComplete="given-name"
104
+ maxLength={props.maxLength}
105
+ value={props.value}
106
+ onChange={(e) => props.onChange && props.onChange(e.target.value)}
107
+ onKeyPress={(e) => handleKeyPress(e)}
108
+ className={`${
109
+ props.className
110
+ } leading-4 p-2 dark:bg-boxdark focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
111
+ props.hasError ? 'border-red ' : 'border-gray-300'
112
+ } rounded-md `}
113
+ onBlur={(e) => props.onBlur && props.onBlur(e.target.value)}
114
+ onKeyDown={props.onKeyDown && props.onKeyDown}
115
+ />
116
+ </InputWrapper>
117
+ );
118
+ });
119
+
120
+ export const InputPassword = React.forwardRef(
121
+ (props: InputProps, ref: Ref<any>) => {
122
+ const [showPassword, setShowPassword] = useState(false);
123
+
124
+ const handleMouseDown = () => {
125
+ setShowPassword(true);
126
+ };
127
+
128
+ const handleMouseUp = () => {
129
+ setShowPassword(false);
130
+ };
131
+
132
+ return (
133
+ <InputWrapper
134
+ label={props.label}
135
+ id={props.id}
136
+ hasError={props.hasError}
137
+ style={props.wrapperStyle}
138
+ className={props.labelClassName}
139
+ >
140
+ <div className="flex items-center relative">
141
+ <input
142
+ type={showPassword ? 'text' : 'password'}
143
+ id={props.id}
144
+ ref={props.inputRef}
145
+ data-testid="INPT"
146
+ autoFocus={props?.isAutoFocus || false}
147
+ name={props.name}
148
+ style={props.style}
149
+ defaultValue={props.defaultValue}
150
+ placeholder={props.placeholder}
151
+ required={props.required || false}
152
+ disabled={props.disabled || false}
153
+ autoComplete="given-name"
154
+ maxLength={props.maxLength}
155
+ value={props.value}
156
+ onChange={(e) => props.onChange && props.onChange(e.target.value)}
157
+ // onKeyPress={e => handleKeyPress(e)}
158
+ className={`${
159
+ props.className
160
+ } leading-4 p-2 focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
161
+ props.hasError ? 'border-red ' : 'border-gray-300'
162
+ } rounded-md dark:bg-boxdark`}
163
+ onBlur={(e) => props.onBlur && props.onBlur(e.target.value)}
164
+ onKeyDown={props.onKeyDown && props.onKeyDown}
165
+ />
166
+ <div className="flex absolute right-3">
167
+ <svg
168
+ className="h-6 dark:bg-boxdark"
169
+ fill="none"
170
+ xmlns="http://www.w3.org/2000/svg"
171
+ viewBox="0 0 576 512"
172
+ onMouseDown={handleMouseDown}
173
+ onMouseUp={handleMouseUp}
174
+ onMouseLeave={handleMouseUp}
175
+ >
176
+ {showPassword ? (
177
+ <path
178
+ fill="currentColor"
179
+ d="M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"
180
+ />
181
+ ) : (
182
+ <path
183
+ fill="currentColor"
184
+ d="M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"
185
+ />
186
+ )}
187
+ </svg>
188
+ </div>
189
+ </div>
190
+ </InputWrapper>
191
+ );
192
+ }
193
+ );
194
+
195
+ export const Input1 = React.forwardRef((props: InputProps, ref: Ref<any>) => {
196
+ const handleKeyPress = (e) => {
197
+ const key = e.key;
198
+ const regex = props.pattern;
199
+ if (regex && !regex?.test(key)) {
200
+ e.preventDefault();
201
+ }
202
+ };
203
+
204
+ return (
205
+ <InputWrapper
206
+ label={props.label}
207
+ id={props.id}
208
+ hasError={props.hasError}
209
+ style={props.wrapperStyle}
210
+ className={props.labelClassName}
211
+ >
212
+ <input
213
+ type={props.type || 'text'}
214
+ id={props.id}
215
+ ref={props.inputRef}
216
+ data-testid="INPT"
217
+ autoFocus={props?.isAutoFocus || false}
218
+ name={props.name}
219
+ style={props.style}
220
+ defaultValue={props.defaultValue}
221
+ placeholder={props.placeholder}
222
+ required={props.required || false}
223
+ disabled={props.disabled || false}
224
+ autoComplete="given-name"
225
+ maxLength={props.maxLength}
226
+ value={props.value}
227
+ onChange={(e) => props.onChange && props.onChange(e.target.value)}
228
+ onKeyPress={(e) => handleKeyPress(e)}
229
+ className={`${
230
+ props.className
231
+ } leading-4 p-2 focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
232
+ props.hasError ? 'border-red ' : 'border-gray-300'
233
+ } rounded-md dark:text-black`}
234
+ onBlur={(e) => props.onBlur && props.onBlur(e)}
235
+ onKeyDown={props.onKeyDown}
236
+ />
237
+ </InputWrapper>
238
+ );
239
+ });
240
+
241
+ export const Input2 = React.forwardRef((props: InputProps, ref: Ref<any>) => {
242
+ const [isBlur, setIsBlur] = useState(true);
243
+ const handleKeyPress = (e) => {
244
+ const key = e.key;
245
+ const regex = props.pattern;
246
+ if (regex && !regex?.test(key)) {
247
+ e.preventDefault();
248
+ }
249
+ };
250
+
251
+ const handleBlur = (value: string) => {
252
+ props.onBlur && isBlur && props.onBlur(value);
253
+ };
254
+
255
+ return (
256
+ <InputWrapper
257
+ label={props.label}
258
+ id={props.id}
259
+ hasError={props.hasError}
260
+ style={props.wrapperStyle}
261
+ className={props.labelClassName}
262
+ >
263
+ <input
264
+ type={props.type || 'text'}
265
+ id={props.id}
266
+ ref={props.inputRef}
267
+ data-testid="INPT"
268
+ autoFocus={props?.isAutoFocus || false}
269
+ name={props.name}
270
+ style={props.style}
271
+ defaultValue={props.defaultValue}
272
+ placeholder={props.placeholder}
273
+ required={props.required || false}
274
+ disabled={props.disabled || false}
275
+ autoComplete="given-name"
276
+ maxLength={props.maxLength}
277
+ value={props.value}
278
+ onChange={(e) => {
279
+ setIsBlur(true);
280
+ props.onChange && props.onChange(e.target.value);
281
+ }}
282
+ onKeyPress={(e) => handleKeyPress(e)}
283
+ className={`${
284
+ props.className
285
+ } leading-4 p-2 focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
286
+ props.hasError ? 'border-red ' : 'border-gray-300'
287
+ } rounded-md dark:text-black`}
288
+ onKeyDown={(e: any) => {
289
+ if (e.keyCode == 13) {
290
+ setIsBlur(false);
291
+ props.onBlur && props.onBlur(e.target.value);
292
+ }
293
+ props.onKeyDown && props.onKeyDown(e);
294
+ }}
295
+ onBlur={(e) => {
296
+ handleBlur(e.target.value);
297
+ }}
298
+ />
299
+ </InputWrapper>
300
+ );
301
+ });
302
+
303
+ export const MultilineInput = (props: InputProps) => (
304
+ <InputWrapper label={props.label} id={props.id} className={props.className}>
305
+ <textarea
306
+ id={props.id}
307
+ autoComplete="given-name"
308
+ value={props.value}
309
+ disabled={props.disabled}
310
+ style={props.style}
311
+ rows={props.rows}
312
+ onKeyUp={props.onKeyUp && props.onKeyUp}
313
+ placeholder={props.placeholder}
314
+ onChange={(e) => props.onChange && props.onChange(e.target.value)}
315
+ onBlur={(e) => props.onBlur && props.onBlur(e.target.value)}
316
+ className={`leading-4 p-2 focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
317
+ props.hasError ? 'border-red ' : 'border-gray-300'
318
+ } rounded-md dark:bg-boxdark`}
319
+ defaultValue={props.defaultValue}
320
+ />
321
+ </InputWrapper>
322
+ );
323
+
324
+ export const MultilineInput1 = (props: InputProps) => (
325
+ <InputWrapper label={props.label} id={props.id} className={props.className}>
326
+ <textarea
327
+ id={props.id}
328
+ autoComplete="given-name"
329
+ value={props.value}
330
+ disabled={props.disabled}
331
+ style={props.style}
332
+ rows={props.rows}
333
+ placeholder={props.placeholder}
334
+ onChange={(e) => props.onChange && props.onChange(e.target.value)}
335
+ onBlur={(e) => props.onBlur && props.onBlur(e)}
336
+ className={`leading-4 p-2 focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
337
+ props.hasError ? 'border-red ' : 'border-gray-300'
338
+ } rounded-md`}
339
+ defaultValue={props.defaultValue}
340
+ />
341
+ </InputWrapper>
342
+ );
343
+
344
+ interface InputRadioProps extends InputWrapperProps {
345
+ values?: any[];
346
+ value?: string;
347
+ name?: string;
348
+ required?: boolean;
349
+ disabled?: boolean;
350
+ labelStyle?: any;
351
+ onChange?: (e: any) => void;
352
+ }
353
+
354
+ export const InputRadio = (props: InputRadioProps) => (
355
+ <InputWrapper label={props.label} id={props.id} style={props.labelStyle}>
356
+ {props.values?.map((item, key) => (
357
+ <div
358
+ className="flex items-center gap-2"
359
+ key={key}
360
+ onClick={() => {
361
+ props.onChange && props.onChange(item.value);
362
+ }}
363
+ >
364
+ <input
365
+ key={key}
366
+ type="radio"
367
+ id={props.id}
368
+ name={props.name}
369
+ value={item.value}
370
+ checked={item.value == props.value ? true : false}
371
+ onChange={() => props.onChange && props.onChange(item.value)}
372
+ className="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600"
373
+ />
374
+ <Label htmlFor={props.id || ''} style={{marginTop: 6}}>
375
+ {item.label}
376
+ </Label>
377
+ </div>
378
+ ))}
379
+ </InputWrapper>
380
+ );
381
+
382
+ interface InputDateProps extends InputWrapperProps {
383
+ value?: any;
384
+ name?: string;
385
+ placeholder?: string;
386
+ disabled?: boolean;
387
+ hasError?: boolean;
388
+ format?: string;
389
+ use12Hours?: boolean;
390
+ isCalenderOpen?: boolean;
391
+ minDate?: Date;
392
+ maxDate?: Date;
393
+ onChange?: (e: any) => void;
394
+ onCalendarToggle?: (status: boolean) => void;
395
+ onFocusRemove?: (date: any) => void;
396
+ }
397
+
398
+ export const InputDate = ({
399
+ name,
400
+ value,
401
+ placeholder,
402
+ use12Hours = true,
403
+ label,
404
+ id,
405
+ hasError,
406
+ disabled,
407
+ format,
408
+ onChange,
409
+ onFocusRemove,
410
+ }: InputDateProps) => (
411
+ <InputWrapper label={label} id={id} hasError={hasError}>
412
+ <input
413
+ type="date"
414
+ id={id}
415
+ name={name}
416
+ disabled={disabled || false}
417
+ value={value}
418
+ onChange={(e) => onChange && onChange(e)}
419
+ className={`leading-4 p-2 focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
420
+ hasError ? 'border-red ' : 'border-gray-300'
421
+ } rounded-md`}
422
+ />
423
+ </InputWrapper>
424
+ );
425
+
426
+ export const CheckBox = (props) => {
427
+ return (
428
+ <div>
429
+ <input
430
+ key={props.id}
431
+ onClick={props.handleCheckChieldElement}
432
+ type="checkbox"
433
+ checked={props.isChecked}
434
+ value={props.value}
435
+ />{' '}
436
+ {props.value}
437
+ </div>
438
+ );
439
+ };
440
+
441
+ interface InputFileProps extends InputWrapperProps {
442
+ value?: any;
443
+ name?: string;
444
+ placeholder?: string;
445
+ disabled?: boolean;
446
+ accept?: string;
447
+ multiple?: boolean;
448
+ hasError?: boolean;
449
+ onChange?: (e: any) => void;
450
+ }
451
+
452
+ export const InputFile = (props: InputFileProps) => (
453
+ <InputWrapper label={props.label} id={props.id}>
454
+ <input
455
+ type="file"
456
+ id={props.id}
457
+ name={props.name}
458
+ disabled={props.disabled || false}
459
+ accept={props.accept}
460
+ value={props.value}
461
+ onChange={(e) => props.onChange && props.onChange(e)}
462
+ className={`leading-4 p-2 focus:outline-none focus:ring block w-full shadow-sm sm:text-base border-2 ${
463
+ props.hasError ? 'border-red ' : 'border-gray-300'
464
+ } rounded-md`}
465
+ multiple={props.multiple}
466
+ />
467
+ </InputWrapper>
468
+ );
469
+
470
+ interface ToggleProps extends InputWrapperProps {
471
+ disabled?: boolean;
472
+ isToggleLabel?: boolean;
473
+ defaultChecked?: boolean;
474
+ className?: string;
475
+ icons?: any;
476
+ value?: boolean;
477
+ name?: string;
478
+ onChange?: (e: boolean) => void;
479
+ style?: any;
480
+ }
481
+
482
+ export const Toggle = (props: ToggleProps) => {
483
+ const [toggle, setToggle] = useState(props.value);
484
+ const {onChange, disabled, className, isToggleLabel = true} = props;
485
+
486
+ useEffect(() => {
487
+ setToggle(props.value);
488
+ }, [props.value]);
489
+
490
+ const triggerToggle = () => {
491
+ if (disabled) {
492
+ return;
493
+ }
494
+ setToggle(!toggle);
495
+ if (typeof onChange === 'function') {
496
+ onChange(!toggle);
497
+ }
498
+ };
499
+
500
+ const toggleClasses = classNames(
501
+ 'wrg-toggle ',
502
+ {
503
+ 'wrg-toggle--checked': toggle,
504
+ 'wrg-toggle--disabled': disabled,
505
+ },
506
+ className
507
+ );
508
+
509
+ return (
510
+ <InputWrapper label={props.label} id={props.id} style={props.style}>
511
+ <div onClick={triggerToggle} className={toggleClasses}>
512
+ <div
513
+ className={
514
+ 'wrg-toggle-container ' +
515
+ (toggle ? 'bg-green-700' : 'bg-black dark:bg-white')
516
+ }
517
+ >
518
+ {isToggleLabel && (
519
+ <>
520
+ <div className="wrg-toggle-check">
521
+ <span className="text-white ml-1">Yes</span>
522
+ </div>
523
+ <div className="wrg-toggle-uncheck">
524
+ <span className="dark:text-black">No</span>
525
+ </div>
526
+ </>
527
+ )}
528
+ </div>
529
+ <div
530
+ className={`wrg-toggle-circle dark:bg-black ${
531
+ toggle ? 'ml-1' : 'mr-1'
532
+ } `}
533
+ ></div>
534
+ <input
535
+ type="checkbox"
536
+ aria-label="Toggle Button"
537
+ className="wrg-toggle-input"
538
+ />
539
+ </div>
540
+ </InputWrapper>
541
+ );
542
+ };
543
+
544
+ export const DeliveryScheduleToggle = (props: ToggleProps) => {
545
+ const [toggle, setToggle] = useState(props.value);
546
+ const {onChange, disabled, className, isToggleLabel = true} = props;
547
+
548
+ useEffect(() => {
549
+ setToggle(props.value);
550
+ }, [props.value]);
551
+
552
+ const triggerToggle = () => {
553
+ if (disabled) {
554
+ return;
555
+ }
556
+ setToggle(!toggle);
557
+ if (typeof onChange === 'function') {
558
+ onChange(!toggle);
559
+ }
560
+ };
561
+
562
+ const toggleClasses = classNames(
563
+ 'wrg-toggle1 ',
564
+ {
565
+ 'wrg-toggle--checked1': toggle,
566
+ 'wrg-toggle--disabled1': disabled,
567
+ },
568
+ className
569
+ );
570
+
571
+ return (
572
+ <InputWrapper label={props.label} id={props.id} style={props.style}>
573
+ <div onClick={triggerToggle} className={toggleClasses}>
574
+ <div
575
+ className={
576
+ 'wrg-toggle-container1 ' +
577
+ (toggle ? 'bg-green-700' : 'bg-black dark:bg-white')
578
+ }
579
+ >
580
+ {isToggleLabel && (
581
+ <>
582
+ <div className="wrg-toggle-check1">
583
+ <span className="text-white ml-1">Departments</span>
584
+ </div>
585
+ <div className="wrg-toggle-uncheck1">
586
+ <span className="dark:text-black">Patients</span>
587
+ </div>
588
+ </>
589
+ )}
590
+ </div>
591
+ <div
592
+ className={`wrg-toggle-circle1 dark:bg-black ${
593
+ toggle ? 'ml-1' : 'mr-1'
594
+ } `}
595
+ ></div>
596
+ <input
597
+ type="checkbox"
598
+ aria-label="Toggle Button"
599
+ className="wrg-toggle-input1"
600
+ />
601
+ </div>
602
+ </InputWrapper>
603
+ );
604
+ };