@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.
- package/CHANGELOG.md +64 -0
- package/dist/components/atoms/Button/Button.d.ts +3 -3
- package/dist/components/atoms/Button/Button.js.map +1 -1
- package/dist/components/atoms/Input/Input.js +5 -3
- package/dist/components/atoms/Input/Input.js.map +1 -1
- package/dist/components/atoms/Table/Header/THead.js +2 -2
- package/dist/components/atoms/Table/Header/THead.js.map +1 -1
- package/dist/components/atoms/Tooltip/Tooltip.d.ts +12 -0
- package/dist/components/atoms/Tooltip/Tooltip.js +50 -0
- package/dist/components/atoms/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/atoms/Tooltip/index.d.ts +1 -0
- package/dist/components/atoms/Tooltip/index.js +24 -0
- package/dist/components/atoms/Tooltip/index.js.map +1 -0
- package/dist/components/atoms/Tooltip/styled.d.ts +9 -0
- package/dist/components/atoms/Tooltip/styled.js +140 -0
- package/dist/components/atoms/Tooltip/styled.js.map +1 -0
- package/dist/components/molecules/Drawer/styled.js.map +1 -1
- package/dist/components/molecules/InputPassword/InputPassword.js +5 -3
- package/dist/components/molecules/InputPassword/InputPassword.js.map +1 -1
- package/dist/components/molecules/Menubar/Menubar.js +1 -1
- package/dist/components/molecules/Menubar/Menubar.js.map +1 -1
- package/dist/components/molecules/Select/Dropdown/Dropdown.d.ts +1 -1
- package/dist/components/molecules/Select/Dropdown/Dropdown.js +39 -26
- package/dist/components/molecules/Select/Dropdown/Dropdown.js.map +1 -1
- package/dist/components/molecules/Select/Dropdown/components/SearchInput.d.ts +8 -0
- package/dist/components/molecules/Select/Dropdown/components/SearchInput.js +43 -0
- package/dist/components/molecules/Select/Dropdown/components/SearchInput.js.map +1 -0
- package/dist/components/molecules/Select/Dropdown/components/index.d.ts +1 -0
- package/dist/components/molecules/Select/Dropdown/components/index.js +16 -0
- package/dist/components/molecules/Select/Dropdown/components/index.js.map +1 -0
- package/dist/components/molecules/Select/Dropdown/styled.d.ts +2 -1
- package/dist/components/molecules/Select/Dropdown/styled.js +6 -3
- package/dist/components/molecules/Select/Dropdown/styled.js.map +1 -1
- package/dist/components/molecules/Select/Select.d.ts +2 -1
- package/dist/components/molecules/Select/Select.js +9 -11
- package/dist/components/molecules/Select/Select.js.map +1 -1
- package/dist/components/molecules/Select/SelectItem/SelectItem.d.ts +3 -3
- package/dist/components/molecules/Select/SelectItem/SelectItem.js +10 -9
- package/dist/components/molecules/Select/SelectItem/SelectItem.js.map +1 -1
- package/dist/components/molecules/Select/functions.d.ts +1 -1
- package/dist/components/molecules/Select/functions.js +1 -1
- package/dist/components/molecules/Select/functions.js.map +1 -1
- package/dist/components/molecules/Select/styled.d.ts +4 -3
- package/dist/components/molecules/Select/styled.js +16 -1
- package/dist/components/molecules/Select/styled.js.map +1 -1
- package/dist/components/molecules/TextArea/TextArea.d.ts +1 -2
- package/dist/components/molecules/TextArea/TextArea.js.map +1 -1
- package/dist/components/organisms/DataGrid/DataGrid.js +1 -1
- package/dist/components/organisms/DataGrid/DataGrid.js.map +1 -1
- package/dist/components/organisms/DataGrid/Footer/Footer.js +2 -1
- package/dist/components/organisms/DataGrid/Footer/Footer.js.map +1 -1
- package/dist/components/organisms/DataGrid/Header/Header.js.map +1 -1
- package/dist/components/organisms/DataGrid/Header/utils.d.ts +6 -8
- package/dist/components/organisms/DataGrid/Header/utils.js.map +1 -1
- package/dist/components/organisms/DataGrid/types.d.ts +2 -1
- package/dist/hooks/useClickAwayListener.d.ts +1 -1
- package/dist/hooks/useClickAwayListener.js +3 -3
- package/dist/hooks/useClickAwayListener.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/components/atoms/Button/Button.tsx +3 -3
- package/src/components/atoms/Input/Input.stories.tsx +1 -1
- package/src/components/atoms/Input/Input.tsx +65 -57
- package/src/components/atoms/Table/Header/THead.tsx +1 -1
- package/src/components/atoms/Tooltip/Tooltip.stories.tsx +30 -0
- package/src/components/atoms/Tooltip/Tooltip.tsx +51 -0
- package/src/components/atoms/Tooltip/index.ts +1 -0
- package/src/components/atoms/Tooltip/styled.ts +158 -0
- package/src/components/molecules/Drawer/styled.ts +1 -1
- package/src/components/molecules/InputPassword/InputPassword.stories.tsx +1 -1
- package/src/components/molecules/InputPassword/InputPassword.tsx +24 -22
- package/src/components/molecules/Menubar/Menubar.tsx +1 -1
- package/src/components/molecules/Select/Dropdown/Dropdown.tsx +45 -28
- package/src/components/molecules/Select/Dropdown/components/SearchInput.tsx +26 -0
- package/src/components/molecules/Select/Dropdown/components/index.ts +1 -0
- package/src/components/molecules/Select/Dropdown/styled.ts +10 -4
- package/src/components/molecules/Select/Select.stories.tsx +42 -16
- package/src/components/molecules/Select/Select.tsx +16 -12
- package/src/components/molecules/Select/SelectItem/SelectItem.tsx +27 -24
- package/src/components/molecules/Select/functions.ts +10 -18
- package/src/components/molecules/Select/{styled.ts → styled.tsx} +11 -1
- package/src/components/molecules/TextArea/TextArea.tsx +1 -2
- package/src/components/organisms/DataGrid/DataGrid.tsx +14 -12
- package/src/components/organisms/DataGrid/Footer/Footer.tsx +1 -0
- package/src/components/organisms/DataGrid/Header/Header.tsx +2 -2
- package/src/components/organisms/DataGrid/Header/utils.ts +15 -5
- package/src/components/organisms/DataGrid/types.ts +3 -1
- package/src/hooks/useClickAwayListener.ts +5 -4
- 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
|
|
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 =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
auxArray.splice(indexToExclude, 1);
|
|
63
|
-
onSelect([...auxArray] as OnSelectArg);
|
|
64
|
-
setCheckedAll(false);
|
|
68
|
+
onSelect(key as OnSelectArg);
|
|
69
|
+
setDropDownVisible(false);
|
|
65
70
|
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
);
|
|
@@ -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<
|
|
33
|
+
const [sortDirection, setSortDirection] = React.useState<SortState>(
|
|
34
34
|
NEXT_STATE.initial
|
|
35
35
|
);
|
|
36
36
|
|
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
|
|
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 = (
|
|
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 = (
|
|
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:
|
|
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(
|
|
14
|
+
document.addEventListener(event, handleClickOutside);
|
|
14
15
|
return () => {
|
|
15
|
-
document.removeEventListener(
|
|
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';
|