groundfloor-react-ui 1.0.11 → 1.0.14

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>
@@ -36,6 +36,7 @@ const StyledButton = styled.button`
36
36
  border-radius: 5px;
37
37
  font-size: ${({ size }) => sizes[size].fontSize};
38
38
  display: flex;
39
+ outline: none;
39
40
  align-items: center;
40
41
  width: ${({ block }) => (block ? '100%' : 'auto')};
41
42
  cursor: pointer;
@@ -35,6 +35,7 @@ const StyledButton = styled.button`
35
35
  font-size: ${({ size }) => sizes[size].fontSize};
36
36
  border-radius: 5px;
37
37
  display: flex;
38
+ outline: none;
38
39
  align-items: center;
39
40
  width: ${({ block }) => (block ? '100%' : 'auto')};
40
41
  cursor: pointer;
@@ -18,6 +18,7 @@ const StyledButton = styled.button`
18
18
  border-radius: 10.5px;
19
19
  font-size: 14px;
20
20
  line-height: 17px;
21
+ outline: none;
21
22
  display: flex;
22
23
  align-items: center;
23
24
  width: ${({ block }) => block ? '100%' : 'auto'};
@@ -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)`
@@ -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
  };
@@ -7,7 +7,6 @@ import getDefaultStyles from '../constants/utils';
7
7
  import { Label } from '../Label';
8
8
  import { Icon } from '../Icon';
9
9
  import { useState } from 'react';
10
- import { useEffect } from 'react';
11
10
 
12
11
  const TextWrapper = styled.div`
13
12
  //Set the styles from the default styles object
@@ -42,6 +41,8 @@ const TextWrapper = styled.div`
42
41
 
43
42
  const Input = styled.input`
44
43
  width: inherit;
44
+ -webkit-text-security: ${({ showEye }) => showEye ? 'none' : 'disc'} ;
45
+
45
46
  //Set the styles from the default styles object
46
47
  ${({ theme, defaultInputStyle }) => {
47
48
  return getDefaultStyles(theme, defaultInputStyle);
@@ -53,6 +54,7 @@ const Input = styled.input`
53
54
  .sc-furwcr bxRAoq {
54
55
  color: ${defaultThemeColor.variant['neutral-3']};
55
56
  }
57
+
56
58
  `;
57
59
 
58
60
  const inline = css`
@@ -120,7 +122,7 @@ export const PasswordInput = ({
120
122
  <div
121
123
  style={{
122
124
  display: 'flex',
123
- justifyContent: 'center',
125
+ justifyContent: 'start',
124
126
  alignItems: 'start',
125
127
  }}
126
128
  >
@@ -135,7 +137,8 @@ export const PasswordInput = ({
135
137
  >
136
138
  <Input
137
139
  inputStyle={inputStyle}
138
- type={showEye ? 'text' : 'password'}
140
+ type={'text'}
141
+ showEye={showEye}
139
142
  defaultInputStyle={'input-wrapper'}
140
143
  {...props}
141
144
  />