groundfloor-react-ui 1.0.10 → 1.0.13

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
@@ -11,10 +11,15 @@ npm install groundfloor-react-ui --save
11
11
  ```
12
12
 
13
13
  ```
14
- Add this default theme colo and styles if needed.
14
+ Add this default theme color and styles if needed.
15
15
 
16
16
  import defaultStyles from 'groundfloor-react-ui/components/constants/defaultStyle';
17
17
  import defaultThemeColor from 'groundfloor-react-ui/components/constants/defaultThemeColor';
18
+
19
+ For use DateSelect add the below css file to your root
20
+ import 'react-datepicker/dist/react-datepicker.css';
21
+ For use Overlay, Tooltip and ButtonPopup add the below css file to your root
22
+ import 'react-popper-tooltip/dist/styles.css';
18
23
  ```
19
24
 
20
25
  ## Pre-requisites
@@ -0,0 +1 @@
1
+ <svg id="f46636c4-9d90-4c06-8f72-5c02d35ff376" data-name="a9011979-1776-4746-bb61-6eae84c3e8ab" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20.6 24"><defs><style>.b78a75cf-ef1e-49e2-8d45-bd32a83f2ff9{fill:#2e56f4;}</style></defs><path class="b78a75cf-ef1e-49e2-8d45-bd32a83f2ff9" d="M15.4,0H0V24H20.6V5.1Zm3.5,22.3H1.7V1.7H14.4l4.5,4.6Z"/><rect class="b78a75cf-ef1e-49e2-8d45-bd32a83f2ff9" x="3.6" y="3.5" width="7.6" height="1.59"/><rect class="b78a75cf-ef1e-49e2-8d45-bd32a83f2ff9" x="3.6" y="6.5" width="10.6" height="1.59"/><path class="b78a75cf-ef1e-49e2-8d45-bd32a83f2ff9" d="M13.7,16.8v-.5a4.3,4.3,0,0,0,0-1.6v-.5l1.4-.7A6.2,6.2,0,0,0,14,11.8l-1.3.7-.4-.3-1.4-.8h-.5V9.8a7.4,7.4,0,0,0-2.1,0v1.5H7.8l-1.4.8-.4.3-1.3-.7a6.2,6.2,0,0,0-1.1,1.7l1.4.7v.5a4.3,4.3,0,0,0,0,1.6v.5l-1.4.7a6.2,6.2,0,0,0,1.1,1.7L6,18.5l.4.3,1.4.8.5.2v1.4a7.4,7.4,0,0,0,2.1,0V19.8l.5-.2a3.9,3.9,0,0,0,1.4-.8l.4-.3,1.3.7a6.2,6.2,0,0,0,1.1-1.7ZM9.4,18.3a2.9,2.9,0,0,1-2.9-2.8,2.9,2.9,0,1,1,2.9,2.8Z"/></svg>
@@ -25,6 +25,7 @@ import {
25
25
  MultiColumnDiv,
26
26
  } from '../DesignComponent';
27
27
  import { Table } from '../Tables';
28
+ import { HeaderComponent } from './HeaderComponent';
28
29
 
29
30
  export const FormComponent = ({ formData, ...props }) => {
30
31
  const header = (item) => {
@@ -150,7 +151,9 @@ export const FormComponent = ({ formData, ...props }) => {
150
151
  const passwordInput = (item) => {
151
152
  return <PasswordInput {...item} {...props} />;
152
153
  };
153
-
154
+ const headerComponentInput = (item) => {
155
+ return <HeaderComponent {...item} {...props} />;
156
+ };
154
157
  const handleSubmit = () => {
155
158
  console.log('form submit');
156
159
  };
@@ -201,6 +204,8 @@ export const FormComponent = ({ formData, ...props }) => {
201
204
  return tableInput(item);
202
205
  case 'passwordInput':
203
206
  return passwordInput(item);
207
+ case 'headerComponent':
208
+ return headerComponentInput(item);
204
209
  default:
205
210
  break;
206
211
  }
@@ -2,7 +2,7 @@ import React from 'react'
2
2
  import defaultThemeColor from '../constants/defaultThemeColor'
3
3
  import userIcon from "../../assets/icons/users.svg";
4
4
 
5
- export const HeaderComponent = ({ title, subtitle, wrapperstyle }) => {
5
+ export const HeaderComponent = ({ title, subtitle, wrapperstyle, imgLink, imgStyle }) => {
6
6
 
7
7
  const titleStyle = {
8
8
  'fontSize': '26px',
@@ -24,11 +24,11 @@ export const HeaderComponent = ({ title, subtitle, wrapperstyle }) => {
24
24
 
25
25
  return <div style={wrapperstyle}>
26
26
  <div style={titleStyle}>
27
- <img src={userIcon} alt="userIcon" srcset="" />
27
+ <img src={imgLink || userIcon} alt="userIcon" srcset="" style={imgStyle} />
28
28
  <h4>{title}</h4>
29
29
  </div>
30
30
  <div style={subtitleStyle}>
31
31
  <p>{subtitle}</p>
32
32
  </div>
33
33
  </div>
34
- }
34
+ }
@@ -3,7 +3,6 @@ import PropTypes from 'prop-types';
3
3
  import styled, { useTheme } from 'styled-components';
4
4
  import defaultThemeColor from '../constants/defaultThemeColor';
5
5
  import { usePopperTooltip } from 'react-popper-tooltip';
6
- import 'react-popper-tooltip/dist/styles.css';
7
6
 
8
7
  /**
9
8
  * Primary UI component for user interaction
@@ -49,6 +49,7 @@ import fileUpload from '../../assets/icons/file-upload.svg'
49
49
  import eyeHide from '../../assets/icons/eye-hide.svg'
50
50
  import eyeView from '../../assets/icons/eye-hide-view.svg'
51
51
  import fileIcon from '../../assets/icons/file-icon.svg'
52
+ import defaultIcon from '../../assets/icons/default.svg'
52
53
 
53
54
 
54
55
  /** icon name should be kebab-case, e.g "plus-outline" */
@@ -97,6 +98,7 @@ const iconObj = {
97
98
  'eye-hide': eyeHide,
98
99
  'eye-show': eyeView,
99
100
  'file-icon': fileIcon,
101
+ 'default-icon': defaultIcon,
100
102
  }
101
103
 
102
104
  const StyledSVGIcon = styled(ReactSVG)`
@@ -92,6 +92,7 @@ export const CheckBoxInput = ({
92
92
  setOptions,
93
93
  inline,
94
94
  wrapperStyle,
95
+ isRequired,
95
96
  ...props
96
97
  }) => {
97
98
  useEffect(() => {
@@ -121,13 +122,27 @@ export const CheckBoxInput = ({
121
122
 
122
123
  return (
123
124
  <div style={returnedTarget} {...props}>
124
- <Label
125
- themeColor={defaultThemeColor}
126
- customStyles={labelStyle}
127
- type={'check-label'}
128
- text={label}
129
- {...props}
130
- />
125
+
126
+ <div style={{ display: 'flex' }}>
127
+ <Label
128
+ themeColor={defaultThemeColor}
129
+ customStyles={labelStyle}
130
+ type={'check-label'}
131
+ text={label}
132
+ {...props}
133
+ />
134
+
135
+ {isRequired && (
136
+ <div
137
+ style={{
138
+ marginLeft: '4px',
139
+ color: `${defaultThemeColor.variant['error']}`,
140
+ }}
141
+ >
142
+ *
143
+ </div>
144
+ )}
145
+ </div>
131
146
  <ParentDiv
132
147
  style={{ display: 'flex', flexWrap: 'wrap' }}
133
148
  inline={inline}
@@ -250,6 +265,10 @@ CheckBoxInput.propTypes = {
250
265
  * CheckBox checked value changeHandler
251
266
  */
252
267
  getCheckedArr: PropTypes.func,
268
+ /**
269
+ * mandatory field or not
270
+ */
271
+ isRequired: PropTypes.bool,
253
272
  };
254
273
 
255
274
  CheckBoxInput.defaultProps = {
@@ -265,4 +284,5 @@ CheckBoxInput.defaultProps = {
265
284
  checkedTextColor: `${defaultThemeColor.neutral['neutral-1']}`,
266
285
  defaultBorderColor: '#D4D7E3',
267
286
  checkedCheckBoxColor: `${defaultThemeColor.primary['primary-1']}`,
287
+ isRequired: true
268
288
  };
@@ -1,6 +1,5 @@
1
1
  import React, { useState, useEffect, useRef } from 'react';
2
2
  import DatePicker from 'react-datepicker';
3
- import 'react-datepicker/dist/react-datepicker.css';
4
3
  import PropTypes from 'prop-types';
5
4
  import styled from 'styled-components';
6
5
  import defaultThemeColor from '../constants/defaultThemeColor';
@@ -149,7 +148,7 @@ const Wrapper = styled.div`
149
148
  `;
150
149
 
151
150
  Wrapper.defaultProps = {
152
- theme: defaultThemeColor,
151
+ theme: defaultThemeColor,
153
152
  };
154
153
 
155
154
  const CalendarHeaderDiv = styled.div`
@@ -219,7 +218,7 @@ const DropDownList = styled('ul')`
219
218
  }
220
219
  `;
221
220
  DropDownList.defaultProps = {
222
- theme: defaultThemeColor,
221
+ theme: defaultThemeColor,
223
222
  };
224
223
 
225
224
  const ListItem = styled('li')`
@@ -234,224 +233,224 @@ const ListItem = styled('li')`
234
233
  `;
235
234
 
236
235
  export const DateSelect = ({ startDate, setStartDate, disabled, ...props }) => {
237
- const theme = defaultThemeColor;
238
-
239
- const months = [
240
- 'January',
241
- 'February',
242
- 'March',
243
- 'April',
244
- 'May',
245
- 'June',
246
- 'July',
247
- 'August',
248
- 'September',
249
- 'October',
250
- 'November',
251
- 'December',
252
- ];
253
- var years = [];
254
- for (var i = 2010; i <= new Date().getFullYear() + 10; i++) {
255
- years.push(i);
256
- }
236
+ const theme = defaultThemeColor;
237
+
238
+ const months = [
239
+ 'January',
240
+ 'February',
241
+ 'March',
242
+ 'April',
243
+ 'May',
244
+ 'June',
245
+ 'July',
246
+ 'August',
247
+ 'September',
248
+ 'October',
249
+ 'November',
250
+ 'December',
251
+ ];
252
+ var years = [];
253
+ for (var i = 2010; i <= new Date().getFullYear() + 10; i++) {
254
+ years.push(i);
255
+ }
257
256
 
258
- const refMonth = useRef(null);
259
- const refYear = useRef(null);
260
- const [isOpen, setIsOpen] = useState(false);
261
- const [isOpenYear, setIsOpenYear] = useState(false);
262
- const [hover, setHover] = useState(false);
263
- const [hoverYear, setHoverYear] = useState(false);
264
- const [selectedYear, setSelectedYear] = useState(startDate.getFullYear());
265
- const [selectedMonth, setSelectedMonth] = useState(
266
- months[startDate.getMonth()]
267
- );
268
-
269
- useEffect(() => {
270
- setSelectedMonth(months[startDate.getMonth()]);
271
- setSelectedYear(startDate.getFullYear());
272
- }, [startDate]);
273
-
274
- useEffect(() => {
275
- document.addEventListener('click', handleClickOutsideMonth, true);
276
-
277
- return () => {
278
- document.removeEventListener('click', handleClickOutsideMonth, true);
279
- };
280
- }, []);
281
-
282
- const handleClickOutsideMonth = (event) => {
283
- if (refMonth.current && !refMonth.current.contains(event.target)) {
284
- setIsOpen(false);
285
- }
257
+ const refMonth = useRef(null);
258
+ const refYear = useRef(null);
259
+ const [isOpen, setIsOpen] = useState(false);
260
+ const [isOpenYear, setIsOpenYear] = useState(false);
261
+ const [hover, setHover] = useState(false);
262
+ const [hoverYear, setHoverYear] = useState(false);
263
+ const [selectedYear, setSelectedYear] = useState(startDate.getFullYear());
264
+ const [selectedMonth, setSelectedMonth] = useState(
265
+ months[startDate.getMonth()]
266
+ );
267
+
268
+ useEffect(() => {
269
+ setSelectedMonth(months[startDate.getMonth()]);
270
+ setSelectedYear(startDate.getFullYear());
271
+ }, [startDate]);
272
+
273
+ useEffect(() => {
274
+ document.addEventListener('click', handleClickOutsideMonth, true);
275
+
276
+ return () => {
277
+ document.removeEventListener('click', handleClickOutsideMonth, true);
286
278
  };
279
+ }, []);
287
280
 
288
- const handleClickOutsideYear = (event) => {
289
- if (refYear.current && !refYear.current.contains(event.target)) {
290
- setIsOpenYear(false);
291
- }
292
- };
281
+ const handleClickOutsideMonth = (event) => {
282
+ if (refMonth.current && !refMonth.current.contains(event.target)) {
283
+ setIsOpen(false);
284
+ }
285
+ };
293
286
 
294
- useEffect(() => {
295
- document.addEventListener('click', handleClickOutsideYear, true);
296
-
297
- return () => {
298
- document.removeEventListener('click', handleClickOutsideYear, true);
299
- };
300
- }, []);
301
-
302
- return (
303
- <Wrapper disabled={disabled} {...props}>
304
- <DatePicker
305
- selected={startDate}
306
- dateFormat='dd/MM/yyyy'
307
- useWeekdaysShort={true}
308
- onChange={(date) => setStartDate(date)}
309
- placeholderText={'select date'}
310
- adjustDateOnChange
311
- disabled={disabled}
312
- dropdownMode='select'
313
- renderCustomHeader={({ date, changeYear, changeMonth }) => {
314
- return (
315
- <CalendarHeaderDiv>
316
- <div style={{ display: 'flex' }}>
317
- <DropDownContainer ref={refMonth}>
318
- <DropDownHeader
319
- onClick={() => {
320
- setIsOpen(!isOpen);
321
- setIsOpenYear(false);
322
- }}
323
- >
324
- <span
325
- onMouseEnter={() => setHover(true)}
326
- onMouseLeave={() => setHover(false)}
327
- style={{
328
- color: `${hover ? theme.variant['primary-1'] : theme.textColor
329
- }`,
330
- }}
331
- >
332
- {months[date.getMonth()]}
333
- </span>
334
- <IconDiv>
335
- <Icon
336
- icon='triangle-down'
337
- color={hover ? 'blue' : 'black'}
338
- size={7}
339
- />
340
- </IconDiv>
341
- </DropDownHeader>
342
- {isOpen && (
343
- <DropDownListContainer>
344
- <DropDownList onMouseEnter={() => setHover(true)}>
345
- {months.map((option, index) => (
346
- <ListItem
347
- selectedMonth={selectedMonth}
348
- onClick={() => {
349
- setHover(false);
350
- changeMonth(index);
351
- setIsOpen(false);
352
- setSelectedMonth(months[index]);
353
- }}
354
- key={Math.random()}
355
- >
356
- <span
357
- style={{
358
- color: `${selectedMonth === option
359
- ? theme.variant['primary-1']
360
- : theme.textColor
361
- }`,
362
- }}
363
- >
364
- {option}
365
- </span>
366
- </ListItem>
367
- ))}
368
- </DropDownList>
369
- </DropDownListContainer>
370
- )}
371
- </DropDownContainer>
372
- <DropDownContainer ref={refYear}>
373
- <DropDownHeader
374
- style={{ marginLeft: '28px' }}
375
- onClick={() => {
376
- setIsOpenYear(!isOpenYear);
377
- setIsOpen(false);
378
- }}
379
- >
380
- <span
381
- onMouseEnter={() => setHoverYear(true)}
382
- onMouseLeave={() => setHoverYear(false)}
383
- style={{
384
- color: `${hoverYear
385
- ? theme.variant['primary-1']
386
- : theme.textColor
387
- }`,
388
- }}
389
- >
390
- {date.getFullYear()}
391
- </span>
392
- <IconDiv>
393
- <Icon
394
- icon='triangle-down'
395
- color={hoverYear ? 'blue' : 'black'}
396
- size={7}
397
- />
398
- </IconDiv>
399
- </DropDownHeader>
400
- {isOpenYear && (
401
- <DropDownListContainer>
402
- <DropDownList onMouseEnter={() => setHoverYear(true)}>
403
- {years.map((option, index) => (
404
- <ListItem
405
- onClick={() => {
406
- setHoverYear(false);
407
- changeYear(option);
408
- setSelectedYear(option);
409
- setIsOpenYear(false);
410
- }}
411
- key={Math.random()}
412
- >
413
- <span
414
- style={{
415
- color: `${selectedYear === option
416
- ? theme.variant['primary-1']
417
- : theme.textColor
418
- }`,
419
- }}
420
- >
421
- {option}
422
- </span>
423
- </ListItem>
424
- ))}
425
- </DropDownList>
426
- </DropDownListContainer>
427
- )}
428
- </DropDownContainer>
429
- </div>
430
- </CalendarHeaderDiv>
431
- );
432
- }}
433
- />
434
- </Wrapper>
435
- );
287
+ const handleClickOutsideYear = (event) => {
288
+ if (refYear.current && !refYear.current.contains(event.target)) {
289
+ setIsOpenYear(false);
290
+ }
291
+ };
292
+
293
+ useEffect(() => {
294
+ document.addEventListener('click', handleClickOutsideYear, true);
295
+
296
+ return () => {
297
+ document.removeEventListener('click', handleClickOutsideYear, true);
298
+ };
299
+ }, []);
300
+
301
+ return (
302
+ <Wrapper disabled={disabled} {...props}>
303
+ <DatePicker
304
+ selected={startDate}
305
+ dateFormat='dd/MM/yyyy'
306
+ useWeekdaysShort={true}
307
+ onChange={(date) => setStartDate(date)}
308
+ placeholderText={'select date'}
309
+ adjustDateOnChange
310
+ disabled={disabled}
311
+ dropdownMode='select'
312
+ renderCustomHeader={({ date, changeYear, changeMonth }) => {
313
+ return (
314
+ <CalendarHeaderDiv>
315
+ <div style={{ display: 'flex' }}>
316
+ <DropDownContainer ref={refMonth}>
317
+ <DropDownHeader
318
+ onClick={() => {
319
+ setIsOpen(!isOpen);
320
+ setIsOpenYear(false);
321
+ }}
322
+ >
323
+ <span
324
+ onMouseEnter={() => setHover(true)}
325
+ onMouseLeave={() => setHover(false)}
326
+ style={{
327
+ color: `${hover ? theme.variant['primary-1'] : theme.textColor
328
+ }`,
329
+ }}
330
+ >
331
+ {months[date.getMonth()]}
332
+ </span>
333
+ <IconDiv>
334
+ <Icon
335
+ icon='triangle-down'
336
+ color={hover ? 'blue' : 'black'}
337
+ size={7}
338
+ />
339
+ </IconDiv>
340
+ </DropDownHeader>
341
+ {isOpen && (
342
+ <DropDownListContainer>
343
+ <DropDownList onMouseEnter={() => setHover(true)}>
344
+ {months.map((option, index) => (
345
+ <ListItem
346
+ selectedMonth={selectedMonth}
347
+ onClick={() => {
348
+ setHover(false);
349
+ changeMonth(index);
350
+ setIsOpen(false);
351
+ setSelectedMonth(months[index]);
352
+ }}
353
+ key={Math.random()}
354
+ >
355
+ <span
356
+ style={{
357
+ color: `${selectedMonth === option
358
+ ? theme.variant['primary-1']
359
+ : theme.textColor
360
+ }`,
361
+ }}
362
+ >
363
+ {option}
364
+ </span>
365
+ </ListItem>
366
+ ))}
367
+ </DropDownList>
368
+ </DropDownListContainer>
369
+ )}
370
+ </DropDownContainer>
371
+ <DropDownContainer ref={refYear}>
372
+ <DropDownHeader
373
+ style={{ marginLeft: '28px' }}
374
+ onClick={() => {
375
+ setIsOpenYear(!isOpenYear);
376
+ setIsOpen(false);
377
+ }}
378
+ >
379
+ <span
380
+ onMouseEnter={() => setHoverYear(true)}
381
+ onMouseLeave={() => setHoverYear(false)}
382
+ style={{
383
+ color: `${hoverYear
384
+ ? theme.variant['primary-1']
385
+ : theme.textColor
386
+ }`,
387
+ }}
388
+ >
389
+ {date.getFullYear()}
390
+ </span>
391
+ <IconDiv>
392
+ <Icon
393
+ icon='triangle-down'
394
+ color={hoverYear ? 'blue' : 'black'}
395
+ size={7}
396
+ />
397
+ </IconDiv>
398
+ </DropDownHeader>
399
+ {isOpenYear && (
400
+ <DropDownListContainer>
401
+ <DropDownList onMouseEnter={() => setHoverYear(true)}>
402
+ {years.map((option, index) => (
403
+ <ListItem
404
+ onClick={() => {
405
+ setHoverYear(false);
406
+ changeYear(option);
407
+ setSelectedYear(option);
408
+ setIsOpenYear(false);
409
+ }}
410
+ key={Math.random()}
411
+ >
412
+ <span
413
+ style={{
414
+ color: `${selectedYear === option
415
+ ? theme.variant['primary-1']
416
+ : theme.textColor
417
+ }`,
418
+ }}
419
+ >
420
+ {option}
421
+ </span>
422
+ </ListItem>
423
+ ))}
424
+ </DropDownList>
425
+ </DropDownListContainer>
426
+ )}
427
+ </DropDownContainer>
428
+ </div>
429
+ </CalendarHeaderDiv>
430
+ );
431
+ }}
432
+ />
433
+ </Wrapper>
434
+ );
436
435
  };
437
436
 
438
437
  DateSelect.propTypes = {
439
- /**
440
- * Date Props in GMT Format
441
- */
442
- startDate: PropTypes.any,
443
- /**
444
- * Date onChange Function
445
- */
446
- setStartDate: PropTypes.func,
447
- /**
448
- * Disable property of DateSelect
449
- */
450
- disabled: PropTypes.bool,
438
+ /**
439
+ * Date Props in GMT Format
440
+ */
441
+ startDate: PropTypes.any,
442
+ /**
443
+ * Date onChange Function
444
+ */
445
+ setStartDate: PropTypes.func,
446
+ /**
447
+ * Disable property of DateSelect
448
+ */
449
+ disabled: PropTypes.bool,
451
450
  };
452
451
 
453
452
  DateSelect.defaultProps = {
454
- startDate: '',
455
- setStartDate: () => { },
456
- disabled: false,
453
+ startDate: '',
454
+ setStartDate: () => { },
455
+ disabled: false,
457
456
  };
@@ -396,6 +396,7 @@ export const DropdownSelect = ({
396
396
  placeholder={placeHolder}
397
397
  onChange={setSelectedValue}
398
398
  isLoading={isLoading}
399
+ isDisabled={isDisabled}
399
400
  {...props}
400
401
  />
401
402
  ) : dropdownType === 'asyncMultiSelect' ? (
@@ -415,6 +416,7 @@ export const DropdownSelect = ({
415
416
  placeholder={placeHolder}
416
417
  styles={stylesComp}
417
418
  isMulti={true}
419
+ isDisabled={isDisabled}
418
420
  hideSelectedOptions={false}
419
421
  closeMenuOnSelect={false}
420
422
  isSearchable={true}