@tecsinapse/react-web-kit 1.8.0 → 1.10.2

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 (91) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/components/atoms/Button/Button.d.ts +3 -3
  3. package/dist/components/atoms/Button/Button.js.map +1 -1
  4. package/dist/components/atoms/Input/Input.js +5 -3
  5. package/dist/components/atoms/Input/Input.js.map +1 -1
  6. package/dist/components/atoms/Table/Header/THead.js +2 -2
  7. package/dist/components/atoms/Table/Header/THead.js.map +1 -1
  8. package/dist/components/atoms/Tooltip/Tooltip.d.ts +12 -0
  9. package/dist/components/atoms/Tooltip/Tooltip.js +50 -0
  10. package/dist/components/atoms/Tooltip/Tooltip.js.map +1 -0
  11. package/dist/components/atoms/Tooltip/index.d.ts +1 -0
  12. package/dist/components/atoms/Tooltip/index.js +24 -0
  13. package/dist/components/atoms/Tooltip/index.js.map +1 -0
  14. package/dist/components/atoms/Tooltip/styled.d.ts +9 -0
  15. package/dist/components/atoms/Tooltip/styled.js +140 -0
  16. package/dist/components/atoms/Tooltip/styled.js.map +1 -0
  17. package/dist/components/molecules/Drawer/styled.js.map +1 -1
  18. package/dist/components/molecules/InputPassword/InputPassword.js +5 -3
  19. package/dist/components/molecules/InputPassword/InputPassword.js.map +1 -1
  20. package/dist/components/molecules/Menubar/Menubar.js +1 -1
  21. package/dist/components/molecules/Menubar/Menubar.js.map +1 -1
  22. package/dist/components/molecules/Select/Dropdown/Dropdown.d.ts +1 -1
  23. package/dist/components/molecules/Select/Dropdown/Dropdown.js +39 -26
  24. package/dist/components/molecules/Select/Dropdown/Dropdown.js.map +1 -1
  25. package/dist/components/molecules/Select/Dropdown/components/SearchInput.d.ts +8 -0
  26. package/dist/components/molecules/Select/Dropdown/components/SearchInput.js +43 -0
  27. package/dist/components/molecules/Select/Dropdown/components/SearchInput.js.map +1 -0
  28. package/dist/components/molecules/Select/Dropdown/components/index.d.ts +1 -0
  29. package/dist/components/molecules/Select/Dropdown/components/index.js +16 -0
  30. package/dist/components/molecules/Select/Dropdown/components/index.js.map +1 -0
  31. package/dist/components/molecules/Select/Dropdown/styled.d.ts +2 -1
  32. package/dist/components/molecules/Select/Dropdown/styled.js +6 -3
  33. package/dist/components/molecules/Select/Dropdown/styled.js.map +1 -1
  34. package/dist/components/molecules/Select/Select.d.ts +2 -1
  35. package/dist/components/molecules/Select/Select.js +9 -11
  36. package/dist/components/molecules/Select/Select.js.map +1 -1
  37. package/dist/components/molecules/Select/SelectItem/SelectItem.d.ts +3 -3
  38. package/dist/components/molecules/Select/SelectItem/SelectItem.js +10 -9
  39. package/dist/components/molecules/Select/SelectItem/SelectItem.js.map +1 -1
  40. package/dist/components/molecules/Select/functions.d.ts +1 -1
  41. package/dist/components/molecules/Select/functions.js +1 -1
  42. package/dist/components/molecules/Select/functions.js.map +1 -1
  43. package/dist/components/molecules/Select/styled.d.ts +4 -3
  44. package/dist/components/molecules/Select/styled.js +16 -1
  45. package/dist/components/molecules/Select/styled.js.map +1 -1
  46. package/dist/components/molecules/TextArea/TextArea.d.ts +1 -2
  47. package/dist/components/molecules/TextArea/TextArea.js.map +1 -1
  48. package/dist/components/organisms/DataGrid/DataGrid.js +1 -1
  49. package/dist/components/organisms/DataGrid/DataGrid.js.map +1 -1
  50. package/dist/components/organisms/DataGrid/Footer/Footer.js +2 -1
  51. package/dist/components/organisms/DataGrid/Footer/Footer.js.map +1 -1
  52. package/dist/components/organisms/DataGrid/Header/Header.js.map +1 -1
  53. package/dist/components/organisms/DataGrid/Header/utils.d.ts +6 -8
  54. package/dist/components/organisms/DataGrid/Header/utils.js.map +1 -1
  55. package/dist/components/organisms/DataGrid/types.d.ts +2 -1
  56. package/dist/hooks/useClickAwayListener.d.ts +1 -1
  57. package/dist/hooks/useClickAwayListener.js +3 -3
  58. package/dist/hooks/useClickAwayListener.js.map +1 -1
  59. package/dist/index.d.ts +1 -0
  60. package/dist/index.js +17 -1
  61. package/dist/index.js.map +1 -1
  62. package/package.json +3 -3
  63. package/src/components/atoms/Button/Button.tsx +3 -3
  64. package/src/components/atoms/Input/Input.stories.tsx +1 -1
  65. package/src/components/atoms/Input/Input.tsx +65 -57
  66. package/src/components/atoms/Table/Header/THead.tsx +1 -1
  67. package/src/components/atoms/Tooltip/Tooltip.stories.tsx +30 -0
  68. package/src/components/atoms/Tooltip/Tooltip.tsx +51 -0
  69. package/src/components/atoms/Tooltip/index.ts +1 -0
  70. package/src/components/atoms/Tooltip/styled.ts +158 -0
  71. package/src/components/molecules/Drawer/styled.ts +1 -1
  72. package/src/components/molecules/InputPassword/InputPassword.stories.tsx +1 -1
  73. package/src/components/molecules/InputPassword/InputPassword.tsx +24 -22
  74. package/src/components/molecules/Menubar/Menubar.tsx +1 -1
  75. package/src/components/molecules/Select/Dropdown/Dropdown.tsx +45 -28
  76. package/src/components/molecules/Select/Dropdown/components/SearchInput.tsx +26 -0
  77. package/src/components/molecules/Select/Dropdown/components/index.ts +1 -0
  78. package/src/components/molecules/Select/Dropdown/styled.ts +10 -4
  79. package/src/components/molecules/Select/Select.stories.tsx +42 -16
  80. package/src/components/molecules/Select/Select.tsx +16 -12
  81. package/src/components/molecules/Select/SelectItem/SelectItem.tsx +27 -24
  82. package/src/components/molecules/Select/functions.ts +10 -18
  83. package/src/components/molecules/Select/{styled.ts → styled.tsx} +11 -1
  84. package/src/components/molecules/TextArea/TextArea.tsx +1 -2
  85. package/src/components/organisms/DataGrid/DataGrid.tsx +14 -12
  86. package/src/components/organisms/DataGrid/Footer/Footer.tsx +1 -0
  87. package/src/components/organisms/DataGrid/Header/Header.tsx +2 -2
  88. package/src/components/organisms/DataGrid/Header/utils.ts +15 -5
  89. package/src/components/organisms/DataGrid/types.ts +3 -1
  90. package/src/hooks/useClickAwayListener.ts +5 -4
  91. package/src/index.ts +1 -0
@@ -13,7 +13,7 @@ interface SelectItemProps<Data, Type extends 'single' | 'multi'> {
13
13
  onSelect: (
14
14
  option: Type extends 'single' ? Data | undefined : Data[]
15
15
  ) => never | void;
16
- keyExtractor: (t: Data, index: number) => string;
16
+ keyExtractor: (t: Data, index?: number) => string;
17
17
  labelExtractor: (t: Data) => string;
18
18
  index: number;
19
19
  }
@@ -46,33 +46,36 @@ const SelectItem = <Data, Type extends 'single' | 'multi'>({
46
46
  }
47
47
  }, [checkedAll]);
48
48
 
49
- const clickItem = item => {
50
- // TS Workaround since TS won't infer the ternary operator's result type correctly
51
- type OnSelectArg = Parameters<typeof onSelect>[0];
52
- const key: Data = item;
53
- if (Array.isArray(value)) {
54
- const auxChecked = !checked;
55
- setChecked(!checked);
56
- if (auxChecked) {
57
- onSelect([...value, key] as OnSelectArg);
58
- [...value, key].length === lenghtOptions && setCheckedAll(true);
49
+ const clickItem = React.useCallback(
50
+ (item, _value) => {
51
+ // TS Workaround since TS won't infer the ternary operator's result type correctly
52
+ type OnSelectArg = Parameters<typeof onSelect>[0];
53
+ const key: Data = item;
54
+ if (Array.isArray(_value)) {
55
+ const auxChecked = !checked;
56
+ setChecked(!checked);
57
+ if (auxChecked) {
58
+ onSelect([..._value, key] as OnSelectArg);
59
+ [..._value, key].length === lenghtOptions && setCheckedAll(true);
60
+ } else {
61
+ const auxArray: Data[] = [..._value];
62
+ const indexToExclude = auxArray.indexOf(key);
63
+ auxArray.splice(indexToExclude, 1);
64
+ onSelect([...auxArray] as OnSelectArg);
65
+ setCheckedAll(false);
66
+ }
59
67
  } else {
60
- const auxArray: Data[] = [...value];
61
- const indexToExclude = auxArray.indexOf(key);
62
- auxArray.splice(indexToExclude, 1);
63
- onSelect([...auxArray] as OnSelectArg);
64
- setCheckedAll(false);
68
+ onSelect(key as OnSelectArg);
69
+ setDropDownVisible(false);
65
70
  }
66
- } else {
67
- onSelect(key as OnSelectArg);
68
- setDropDownVisible(false);
69
- }
70
- };
71
+ },
72
+ [onSelect, setDropDownVisible, setCheckedAll, setChecked, checked]
73
+ );
71
74
 
72
75
  return (
73
- <ContainerItemSelect onClick={() => clickItem(item)}>
76
+ <ContainerItemSelect onClick={() => clickItem(item, value)}>
74
77
  {isMulti && (
75
- <Checkbox checked={checked} onChange={() => clickItem(item)} />
78
+ <Checkbox checked={checked} onChange={() => clickItem(item, value)} />
76
79
  )}
77
80
  <StyledContainerTextLabel>
78
81
  <Text fontWeight="bold" ellipsizeMode="tail" numberOfLines={1}>
@@ -85,4 +88,4 @@ const SelectItem = <Data, Type extends 'single' | 'multi'>({
85
88
  );
86
89
  };
87
90
 
88
- export default SelectItem;
91
+ export default React.memo(SelectItem) as typeof SelectItem;
@@ -1,24 +1,16 @@
1
1
  export const getDisplayValue = <Data>(
2
- type,
3
- value,
4
- options,
5
- placeholder,
6
- keyExtractor,
7
- labelExtractor
8
- ): Data | Data[] => {
2
+ type: 'multi' | 'single',
3
+ value: Data | Data[] | undefined,
4
+ options: Data[],
5
+ placeholder: string | undefined,
6
+ keyExtractor: (option: Data, idx?: number) => string,
7
+ labelExtractor: (option: Data) => string
8
+ ): Data | Data[] | string | undefined => {
9
9
  if (type === 'multi') {
10
- if (value.length === 0) return placeholder;
10
+ if ((value as Data[]).length === 0) return placeholder;
11
11
  else {
12
- return options
13
- .reduce(
14
- (acc, option, index) =>
15
- value.find(
16
- key => keyExtractor(option, index) == keyExtractor(key, index)
17
- )
18
- ? acc + labelExtractor(option) + ', '
19
- : acc,
20
- ''
21
- )
12
+ return (value as Data[])
13
+ .reduce((acc, option) => acc + labelExtractor(option) + ', ', '')
22
14
  .slice(0, -2);
23
15
  }
24
16
  } else {
@@ -1,5 +1,6 @@
1
1
  import styled from '@emotion/styled';
2
- import { StyleProps } from '@tecsinapse/react-core';
2
+ import { Icon, StyleProps } from '@tecsinapse/react-core';
3
+ import React from 'react';
3
4
 
4
5
  export const StyledContainer = styled('div')<Partial<StyleProps>>`
5
6
  display: flex;
@@ -13,3 +14,12 @@ export const StyledContainer = styled('div')<Partial<StyleProps>>`
13
14
  export const StyledInputContainer = styled('div')<Partial<StyleProps>>`
14
15
  width: 100%;
15
16
  `;
17
+
18
+ export const RightComponent = (
19
+ <Icon
20
+ name="chevron-down"
21
+ type="material-community"
22
+ size="centi"
23
+ style={{ marginRight: 12 }}
24
+ />
25
+ );
@@ -7,8 +7,7 @@ import {
7
7
  } from '@tecsinapse/react-core';
8
8
  import { StyledWebInput } from './styled';
9
9
 
10
- export interface TextAreaProps
11
- extends Omit<ITACore, 'TextComponent' | 'focused'> {}
10
+ export type TextAreaProps = Omit<ITACore, 'TextComponent' | 'focused'>;
12
11
 
13
12
  const TextArea: FC<TextAreaProps> = ({
14
13
  label,
@@ -177,18 +177,20 @@ const DataGrid = <Data extends unknown>({
177
177
  </TBody>
178
178
  )}
179
179
 
180
- <Footer
181
- exportFunction={exportFunction}
182
- exportLabel={exportLabel}
183
- rowsPerPageLabel={rowsPerPageLabel}
184
- rowsPerPage={rowsPerPage}
185
- onRowsPerPageChange={onRowsPerPageChange}
186
- rowsPerPageOptions={rowsPerPageOptions}
187
- rowsCount={rowsCount ?? data.length}
188
- page={page}
189
- onPageChange={onPageChange}
190
- pagination={pagination}
191
- />
180
+ {(Number(rowsCount) > 0 || data.length > 0) && (
181
+ <Footer
182
+ exportFunction={exportFunction}
183
+ exportLabel={exportLabel}
184
+ rowsPerPageLabel={rowsPerPageLabel}
185
+ rowsPerPage={rowsPerPage}
186
+ onRowsPerPageChange={onRowsPerPageChange}
187
+ rowsPerPageOptions={rowsPerPageOptions}
188
+ rowsCount={rowsCount ?? data.length}
189
+ page={page}
190
+ onPageChange={onPageChange}
191
+ pagination={pagination}
192
+ />
193
+ )}
192
194
  </Table>
193
195
  </TableContainer>
194
196
  );
@@ -82,6 +82,7 @@ const Footer: React.FC<DataGridFooterProps> = ({
82
82
  type={'single'}
83
83
  keyExtractor={value => String(value)}
84
84
  labelExtractor={rowsPerPageLabel}
85
+ anchor="top"
85
86
  />
86
87
  </SelectContainer>
87
88
  )}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { Checkbox, Icon, PressableSurface } from '@tecsinapse/react-core';
3
3
  import { Th, THead, Tr } from '../../../atoms/Table';
4
4
  import { CheckboxHeader } from './styled';
5
- import { HeadersType } from '../types';
5
+ import { HeadersType, SortState } from '../types';
6
6
  import {
7
7
  findCurrentItemsOnData,
8
8
  findUnselectedItemsOnData,
@@ -30,7 +30,7 @@ const Header = <Data extends unknown>({
30
30
  selectedRows,
31
31
  onSelected,
32
32
  }: DataGridHeaderProps<Data>): JSX.Element => {
33
- const [sortDirection, setSortDirection] = React.useState<string>(
33
+ const [sortDirection, setSortDirection] = React.useState<SortState>(
34
34
  NEXT_STATE.initial
35
35
  );
36
36
 
@@ -1,17 +1,23 @@
1
- export const NEXT_STATE = {
1
+ import { SortState } from '../types';
2
+
3
+ export const NEXT_STATE: { [key: string]: SortState } = {
2
4
  unsorted: 'ascending',
3
5
  ascending: 'descending',
4
6
  descending: 'unsorted',
5
7
  initial: 'unsorted',
6
8
  };
7
9
 
8
- export const getIconSuffix = state =>
10
+ export const getIconSuffix = (state: SortState): string =>
9
11
  state === 'unsorted' ? 'ascending' : state;
10
12
 
11
- export const getIconColor = state =>
13
+ export const getIconColor = (state: SortState): 'medium' | 'orange' =>
12
14
  state === 'unsorted' ? 'medium' : 'orange';
13
15
 
14
- export const findUnselectedItemsOnData = (selected, data, rowKeyExtractor) =>
16
+ export const findUnselectedItemsOnData = <T>(
17
+ selected: T[],
18
+ data: T[],
19
+ rowKeyExtractor: (t: T) => string
20
+ ): T[] =>
15
21
  selected.length > 0
16
22
  ? data.filter(item =>
17
23
  selected.every(
@@ -20,7 +26,11 @@ export const findUnselectedItemsOnData = (selected, data, rowKeyExtractor) =>
20
26
  )
21
27
  : [];
22
28
 
23
- export const findCurrentItemsOnData = (selected, data, rowKeyExtractor) =>
29
+ export const findCurrentItemsOnData = <T>(
30
+ selected: T[],
31
+ data: T[],
32
+ rowKeyExtractor: (t: T) => string
33
+ ): T[] =>
24
34
  selected.length > 0
25
35
  ? selected.filter(item =>
26
36
  data.some(rowData => rowKeyExtractor(rowData) === rowKeyExtractor(item))
@@ -1,11 +1,13 @@
1
1
  import React from 'react';
2
2
 
3
+ export type SortState = 'ascending' | 'descending' | 'unsorted';
4
+
3
5
  export type HeadersType<Data> = {
4
6
  /** Column header label */
5
7
  label: string;
6
8
  /** Table cell renderer */
7
9
  render: (data: Data) => React.ReactNode;
8
- sort?: (direction: 'ascending' | 'descending' | 'unsorted') => void;
10
+ sort?: (direction: SortState) => void;
9
11
  /** Header alignment */
10
12
  justifyContent?: 'flex-start' | 'center' | 'flex-end';
11
13
  };
@@ -2,17 +2,18 @@ import React from 'react';
2
2
 
3
3
  export const useClickAwayListener = (
4
4
  ref: React.MutableRefObject<any>,
5
- setVisible: React.Dispatch<React.SetStateAction<boolean>>
6
- ) => {
5
+ setVisible: React.Dispatch<React.SetStateAction<boolean>>,
6
+ event: 'mouseup' | 'mousedown' | undefined = 'mousedown'
7
+ ): void => {
7
8
  React.useEffect(() => {
8
9
  const handleClickOutside = event => {
9
10
  if (ref.current && !ref.current.contains(event.target)) {
10
11
  setVisible(false);
11
12
  }
12
13
  };
13
- document.addEventListener('mousedown', handleClickOutside);
14
+ document.addEventListener(event, handleClickOutside);
14
15
  return () => {
15
- document.removeEventListener('mousedown', handleClickOutside);
16
+ document.removeEventListener(event, handleClickOutside);
16
17
  };
17
18
  }, [ref]);
18
19
  };
package/src/index.ts CHANGED
@@ -38,4 +38,5 @@ export {
38
38
  } from './components/organisms/DataGrid';
39
39
  export { Modal, ModalProps } from './components/atoms/Modal';
40
40
  export { TextArea, TextAreaProps } from './components/molecules/TextArea';
41
+ export { Tooltip, ITooltip } from './components/atoms/Tooltip';
41
42
  export * from './hooks';