@onewelcome/react-lib-components 8.0.0 → 8.1.1
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/dist/cjs/DataGrid/DataGrid.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGrid.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridFilter.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridFilter.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridFilter.module.scss.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterPopover.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterPopover.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.module.scss.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbarWrapper.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbarWrapper.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/useFiltersReducer.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/useFiltersReducer.cjs.js.map +1 -0
- package/dist/cjs/DataGrid/DataGridHeader/DataGridHeaderCell.cjs.js +1 -1
- package/dist/cjs/DataGrid/DataGridHeader/DataGridHeaderCell.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridHeader/DataGridHeaderCell.module.scss.cjs.js +1 -1
- package/dist/cjs/Icon/Icon.cjs.js +1 -1
- package/dist/cjs/Icon/Icon.cjs.js.map +1 -1
- package/dist/cjs/Icon/Icon.module.scss.cjs.js +1 -1
- package/dist/cjs/Notifications/BaseModal/BaseModal.cjs.js +1 -1
- package/dist/cjs/Notifications/BaseModal/BaseModal.cjs.js.map +1 -1
- package/dist/cjs/src/components/DataGrid/DataGrid.d.ts +5 -1
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilter.d.ts +3 -3
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilterPopover.d.ts +3 -2
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +2 -1
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridToolbarWrapper.d.ts +8 -5
- package/dist/cjs/src/components/DataGrid/DataGridFilters/useFiltersReducer.d.ts +8 -0
- package/dist/cjs/src/components/DataGrid/DataGridFilters/useFiltersReducer.test.d.ts +1 -0
- package/dist/cjs/src/components/DataGrid/testUtils.d.ts +1 -0
- package/dist/cjs/src/components/Icon/Icon.d.ts +3 -1
- package/dist/cjs/src/hooks/useRepeatFocus.cjs.js +2 -0
- package/dist/cjs/src/hooks/useRepeatFocus.cjs.js.map +1 -0
- package/dist/cjs/src/index.cjs.js +1 -1
- package/dist/cjs/src/index.d.ts +1 -0
- package/dist/esm/DataGrid/DataGrid.esm.js +5 -5
- package/dist/esm/DataGrid/DataGrid.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilter.esm.js +7 -14
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilter.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilter.module.scss.esm.js +2 -2
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilterPopover.esm.js +11 -3
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilterPopover.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js +5 -7
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js +16 -31
- package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.module.scss.esm.js +2 -2
- package/dist/esm/DataGrid/DataGridFilters/DataGridToolbarWrapper.esm.js +4 -2
- package/dist/esm/DataGrid/DataGridFilters/DataGridToolbarWrapper.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/useFiltersReducer.esm.js +59 -0
- package/dist/esm/DataGrid/DataGridFilters/useFiltersReducer.esm.js.map +1 -0
- package/dist/esm/DataGrid/DataGridHeader/DataGridHeaderCell.esm.js +3 -5
- package/dist/esm/DataGrid/DataGridHeader/DataGridHeaderCell.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridHeader/DataGridHeaderCell.module.scss.esm.js +2 -2
- package/dist/esm/Icon/Icon.esm.js +2 -0
- package/dist/esm/Icon/Icon.esm.js.map +1 -1
- package/dist/esm/Icon/Icon.module.scss.esm.js +2 -2
- package/dist/esm/Notifications/BaseModal/BaseModal.esm.js +1 -1
- package/dist/esm/Notifications/BaseModal/BaseModal.esm.js.map +1 -1
- package/dist/esm/src/components/DataGrid/DataGrid.d.ts +5 -1
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilter.d.ts +3 -3
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilterPopover.d.ts +3 -2
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +2 -1
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridToolbarWrapper.d.ts +8 -5
- package/dist/esm/src/components/DataGrid/DataGridFilters/useFiltersReducer.d.ts +8 -0
- package/dist/esm/src/components/DataGrid/DataGridFilters/useFiltersReducer.test.d.ts +1 -0
- package/dist/esm/src/components/DataGrid/testUtils.d.ts +1 -0
- package/dist/esm/src/components/Icon/Icon.d.ts +3 -1
- package/dist/esm/{Notifications/BaseModal → src/hooks}/useRepeatFocus.esm.js +12 -1
- package/dist/esm/src/hooks/useRepeatFocus.esm.js.map +1 -0
- package/dist/esm/src/index.d.ts +1 -0
- package/dist/esm/src/index.esm.js +1 -0
- package/dist/esm/src/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/DataGrid/DataGrid.tsx +26 -7
- package/src/components/DataGrid/DataGridFilters/DataGridFilter.module.scss +21 -11
- package/src/components/DataGrid/DataGridFilters/DataGridFilter.tsx +15 -19
- package/src/components/DataGrid/DataGridFilters/DataGridFilterPopover.tsx +15 -2
- package/src/components/DataGrid/DataGridFilters/DataGridFilterTag.tsx +18 -7
- package/src/components/DataGrid/DataGridFilters/DataGridToolbar.module.scss +39 -22
- package/src/components/DataGrid/DataGridFilters/DataGridToolbar.tsx +23 -42
- package/src/components/DataGrid/DataGridFilters/DataGridToolbarWrapper.tsx +10 -5
- package/src/components/DataGrid/DataGridFilters/useFiltersReducer.tsx +66 -0
- package/src/components/DataGrid/DataGridHeader/DataGridHeaderCell.module.scss +8 -1
- package/src/components/DataGrid/DataGridHeader/DataGridHeaderCell.tsx +3 -8
- package/src/components/DataGrid/testUtils.ts +14 -16
- package/src/components/Icon/Icon.module.scss +8 -0
- package/src/components/Icon/Icon.tsx +3 -1
- package/src/components/Notifications/BaseModal/BaseModal.tsx +1 -1
- package/src/font/icomoon.eot +0 -0
- package/src/font/icomoon.svg +2 -0
- package/src/font/icomoon.ttf +0 -0
- package/src/font/icomoon.woff +0 -0
- package/src/font/selection.json +1 -1
- package/src/{components/Notifications/BaseModal → hooks}/useRepeatFocus.tsx +12 -2
- package/src/index.ts +1 -0
- package/dist/cjs/Notifications/BaseModal/useRepeatFocus.cjs.js +0 -2
- package/dist/cjs/Notifications/BaseModal/useRepeatFocus.cjs.js.map +0 -1
- package/dist/esm/Notifications/BaseModal/useRepeatFocus.esm.js.map +0 -1
- /package/dist/cjs/src/{components/Notifications/BaseModal → hooks}/useRepeatFocus.d.ts +0 -0
- /package/dist/esm/src/{components/Notifications/BaseModal → hooks}/useRepeatFocus.d.ts +0 -0
|
@@ -18,37 +18,54 @@
|
|
|
18
18
|
|
|
19
19
|
.wrapper {
|
|
20
20
|
display: flex;
|
|
21
|
-
align-items:
|
|
22
|
-
justify-content:
|
|
23
|
-
flex-wrap: wrap;
|
|
21
|
+
align-items: flex-start;
|
|
22
|
+
justify-content: space-between;
|
|
24
23
|
gap: 0.5rem;
|
|
25
24
|
width: 100%;
|
|
26
25
|
padding-bottom: 1rem;
|
|
27
26
|
|
|
28
|
-
.
|
|
29
|
-
min-width: 7rem;
|
|
30
|
-
flex-basis: 15rem;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.actions-wrapper {
|
|
27
|
+
.filter-section {
|
|
34
28
|
display: flex;
|
|
35
29
|
align-items: center;
|
|
36
30
|
justify-content: flex-start;
|
|
31
|
+
flex-wrap: wrap;
|
|
37
32
|
gap: 0.5rem;
|
|
38
|
-
|
|
33
|
+
width: 100%;
|
|
34
|
+
flex-grow: 1;
|
|
39
35
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
cursor: pointer;
|
|
44
|
-
@include mixins.focusVisibleOutline($outlineOffset: 0);
|
|
45
|
-
|
|
46
|
-
.caption {
|
|
47
|
-
margin: 0;
|
|
48
|
-
font-size: var(--font-size-data-grid);
|
|
49
|
-
line-height: var(--data-grid-line-height);
|
|
50
|
-
text-decoration: underline;
|
|
51
|
-
color: var(--color-primary500);
|
|
36
|
+
.searchbar {
|
|
37
|
+
min-width: 7rem;
|
|
38
|
+
flex-basis: 15rem;
|
|
52
39
|
}
|
|
40
|
+
|
|
41
|
+
.actions-wrapper {
|
|
42
|
+
display: flex;
|
|
43
|
+
align-items: center;
|
|
44
|
+
justify-content: flex-start;
|
|
45
|
+
gap: 0.5rem;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.clear-button {
|
|
49
|
+
background: none;
|
|
50
|
+
border: none;
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
@include mixins.focusVisibleOutline($outlineOffset: 0);
|
|
53
|
+
|
|
54
|
+
.caption {
|
|
55
|
+
margin: 0;
|
|
56
|
+
font-size: var(--font-size-data-grid);
|
|
57
|
+
line-height: var(--data-grid-line-height);
|
|
58
|
+
text-decoration: underline;
|
|
59
|
+
color: var(--color-primary500);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.button-section {
|
|
65
|
+
flex-shrink: 0;
|
|
66
|
+
display: flex;
|
|
67
|
+
justify-content: center;
|
|
68
|
+
align-items: center;
|
|
69
|
+
gap: 0.5rem;
|
|
53
70
|
}
|
|
54
71
|
}
|
|
@@ -14,20 +14,16 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import React, { Fragment
|
|
17
|
+
import React, { Fragment } from "react";
|
|
18
18
|
import { DataGridFilter } from "./DataGridFilter";
|
|
19
19
|
import classes from "./DataGridToolbar.module.scss";
|
|
20
|
-
import {
|
|
21
|
-
DataGridColumnMetadata,
|
|
22
|
-
Filter,
|
|
23
|
-
FiltersAction,
|
|
24
|
-
FiltersState,
|
|
25
|
-
FiltersTranslations
|
|
26
|
-
} from "./DataGridFilters.interfaces";
|
|
20
|
+
import { DataGridColumnMetadata, Filter, FiltersTranslations } from "./DataGridFilters.interfaces";
|
|
27
21
|
import { Typography } from "../../Typography/Typography";
|
|
22
|
+
import { useFiltersReducer } from "./useFiltersReducer";
|
|
28
23
|
|
|
29
24
|
export interface DataGridToolbarProps {
|
|
30
25
|
columnsMetadata: DataGridColumnMetadata[];
|
|
26
|
+
customEditTagContent?: React.ReactElement;
|
|
31
27
|
filterValues?: Filter[];
|
|
32
28
|
translations?: FiltersTranslations;
|
|
33
29
|
onFilterAdd?: (filter: Filter) => void;
|
|
@@ -36,32 +32,6 @@ export interface DataGridToolbarProps {
|
|
|
36
32
|
onFiltersClear?: () => void;
|
|
37
33
|
}
|
|
38
34
|
|
|
39
|
-
const filtersReducer = (state: FiltersState, action: FiltersAction): FiltersState => {
|
|
40
|
-
switch (action.type) {
|
|
41
|
-
case "add":
|
|
42
|
-
return { ...state, filters: [...state.filters, { ...action.payload }] };
|
|
43
|
-
case "edit":
|
|
44
|
-
return {
|
|
45
|
-
...state,
|
|
46
|
-
filters: [
|
|
47
|
-
...state.filters.map(value => {
|
|
48
|
-
if (value.id === action.payload.id) {
|
|
49
|
-
return action.payload;
|
|
50
|
-
}
|
|
51
|
-
return value;
|
|
52
|
-
})
|
|
53
|
-
]
|
|
54
|
-
};
|
|
55
|
-
case "remove":
|
|
56
|
-
return {
|
|
57
|
-
...state,
|
|
58
|
-
filters: [...state.filters.filter(value => value.id !== action.payload.id)]
|
|
59
|
-
};
|
|
60
|
-
case "clear":
|
|
61
|
-
return { ...state, filters: [] };
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
|
|
65
35
|
export const DataGridToolbar = ({
|
|
66
36
|
columnsMetadata,
|
|
67
37
|
filterValues,
|
|
@@ -69,9 +39,11 @@ export const DataGridToolbar = ({
|
|
|
69
39
|
onFilterAdd,
|
|
70
40
|
onFilterEdit,
|
|
71
41
|
onFilterDelete,
|
|
72
|
-
onFiltersClear
|
|
42
|
+
onFiltersClear,
|
|
43
|
+
customEditTagContent
|
|
73
44
|
}: DataGridToolbarProps) => {
|
|
74
|
-
const
|
|
45
|
+
const { state, addFilter, editFilter, deleteFilter, clearFilters } =
|
|
46
|
+
useFiltersReducer(filterValues);
|
|
75
47
|
const { clearButtonCaption = "Clear all filters" } = translations?.toolbar || {};
|
|
76
48
|
return (
|
|
77
49
|
<Fragment>
|
|
@@ -81,19 +53,28 @@ export const DataGridToolbar = ({
|
|
|
81
53
|
key={filter.id}
|
|
82
54
|
filter={filter}
|
|
83
55
|
columnsMetadata={columnsMetadata}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
56
|
+
onFilterEdit={filter => {
|
|
57
|
+
editFilter(filter);
|
|
58
|
+
onFilterEdit && onFilterEdit(filter);
|
|
59
|
+
}}
|
|
60
|
+
onFilterDelete={id => {
|
|
61
|
+
deleteFilter(id);
|
|
62
|
+
onFilterDelete && onFilterDelete(id);
|
|
63
|
+
}}
|
|
87
64
|
tagTranslations={translations?.tag}
|
|
88
65
|
popoverTranslations={translations?.popover}
|
|
66
|
+
customEditTagContent={customEditTagContent}
|
|
89
67
|
/>
|
|
90
68
|
))}
|
|
91
69
|
<div className={classes["actions-wrapper"]}>
|
|
92
70
|
<DataGridFilter
|
|
93
71
|
mode="ADD"
|
|
72
|
+
customEditTagContent={customEditTagContent}
|
|
94
73
|
columnsMetadata={columnsMetadata}
|
|
95
|
-
|
|
96
|
-
|
|
74
|
+
onFilterAdd={filter => {
|
|
75
|
+
addFilter(filter);
|
|
76
|
+
onFilterAdd && onFilterAdd(filter);
|
|
77
|
+
}}
|
|
97
78
|
tagTranslations={translations?.tag}
|
|
98
79
|
popoverTranslations={translations?.popover}
|
|
99
80
|
/>
|
|
@@ -102,7 +83,7 @@ export const DataGridToolbar = ({
|
|
|
102
83
|
type="button"
|
|
103
84
|
className={classes["clear-button"]}
|
|
104
85
|
onClick={() => {
|
|
105
|
-
|
|
86
|
+
clearFilters();
|
|
106
87
|
onFiltersClear && onFiltersClear();
|
|
107
88
|
}}
|
|
108
89
|
>
|
|
@@ -14,18 +14,23 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import React, { ComponentPropsWithRef, ForwardRefRenderFunction } from "react";
|
|
17
|
+
import React, { ComponentPropsWithRef, ForwardRefRenderFunction, ReactElement } from "react";
|
|
18
18
|
import classes from "./DataGridToolbar.module.scss";
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
import { Button } from "../../Button/Button";
|
|
20
|
+
import { ButtonProps } from "../../..";
|
|
21
|
+
interface Props extends ComponentPropsWithRef<"div"> {
|
|
22
|
+
filters?: React.JSX.Element;
|
|
23
|
+
buttons?: ReactElement<ButtonProps, typeof Button> | ReactElement<ButtonProps, typeof Button>[];
|
|
24
|
+
}
|
|
21
25
|
|
|
22
26
|
export const DataGridToolbarWrapperComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
|
|
23
|
-
{ children, ...rest },
|
|
27
|
+
{ children, filters, buttons, ...rest },
|
|
24
28
|
ref
|
|
25
29
|
) => {
|
|
26
30
|
return (
|
|
27
31
|
<div ref={ref} className={classes["wrapper"]} {...rest}>
|
|
28
|
-
{
|
|
32
|
+
<div className={classes["filter-section"]}>{filters}</div>
|
|
33
|
+
<div className={classes["button-section"]}>{buttons}</div>
|
|
29
34
|
</div>
|
|
30
35
|
);
|
|
31
36
|
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 OneWelcome B.V.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { useReducer } from "react";
|
|
18
|
+
import { Filter, FiltersAction, FiltersState } from "./DataGridFilters.interfaces";
|
|
19
|
+
|
|
20
|
+
export const useFiltersReducer = (filterValues: Filter[] | undefined) => {
|
|
21
|
+
const filtersReducer = (state: FiltersState, action: FiltersAction): FiltersState => {
|
|
22
|
+
switch (action.type) {
|
|
23
|
+
case "add":
|
|
24
|
+
return { ...state, filters: [...state.filters, { ...action.payload }] };
|
|
25
|
+
case "edit":
|
|
26
|
+
return {
|
|
27
|
+
...state,
|
|
28
|
+
filters: [
|
|
29
|
+
...state.filters.map(value => {
|
|
30
|
+
if (value.id === action.payload.id) {
|
|
31
|
+
return action.payload;
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
})
|
|
35
|
+
]
|
|
36
|
+
};
|
|
37
|
+
case "remove":
|
|
38
|
+
return {
|
|
39
|
+
...state,
|
|
40
|
+
filters: [...state.filters.filter(value => value.id !== action.payload.id)]
|
|
41
|
+
};
|
|
42
|
+
case "clear":
|
|
43
|
+
return { ...state, filters: [] };
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const [state, dispatch] = useReducer(filtersReducer, { filters: filterValues || [] });
|
|
48
|
+
|
|
49
|
+
const addFilter = (filter: Filter) =>
|
|
50
|
+
dispatch({
|
|
51
|
+
type: "add",
|
|
52
|
+
payload: filter
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const editFilter = (filter: Filter) =>
|
|
56
|
+
dispatch({
|
|
57
|
+
type: "edit",
|
|
58
|
+
payload: filter
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const deleteFilter = (id: string) => dispatch({ type: "remove", payload: { id } });
|
|
62
|
+
|
|
63
|
+
const clearFilters = () => dispatch({ type: "clear" });
|
|
64
|
+
|
|
65
|
+
return { state, addFilter, deleteFilter, editFilter, clearFilters };
|
|
66
|
+
};
|
|
@@ -62,11 +62,18 @@
|
|
|
62
62
|
|
|
63
63
|
.indicator {
|
|
64
64
|
color: var(--greyed-out);
|
|
65
|
+
transition: transform 0.2s ease-in-out;
|
|
66
|
+
transform: rotate(0deg);
|
|
65
67
|
|
|
66
|
-
&.
|
|
68
|
+
&.ascending {
|
|
67
69
|
color: var(--color-primary);
|
|
68
70
|
}
|
|
69
71
|
|
|
72
|
+
&.descending {
|
|
73
|
+
color: var(--color-primary);
|
|
74
|
+
transform: rotate(180deg);
|
|
75
|
+
}
|
|
76
|
+
|
|
70
77
|
&.hidden {
|
|
71
78
|
visibility: hidden;
|
|
72
79
|
}
|
|
@@ -41,21 +41,16 @@ const DataGridHeaderCellComponent: ForwardRefRenderFunction<HTMLTableCellElement
|
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
const sortingIndicator = () => {
|
|
44
|
-
const getSortingIndicatorClasses = (
|
|
44
|
+
const getSortingIndicatorClasses = () => {
|
|
45
45
|
const sortingIndicatorClasses = [classes["indicator"]];
|
|
46
46
|
activeSortDirection &&
|
|
47
47
|
sortingIndicatorClasses.push(
|
|
48
|
-
activeSortDirection ===
|
|
48
|
+
activeSortDirection === "ASC" ? classes["ascending"] : classes["descending"]
|
|
49
49
|
);
|
|
50
50
|
return sortingIndicatorClasses;
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
return (
|
|
54
|
-
<Fragment>
|
|
55
|
-
<Icon className={getSortingIndicatorClasses("ASC").join(" ")} icon={Icons.TriangleUp} />
|
|
56
|
-
<Icon className={getSortingIndicatorClasses("DESC").join(" ")} icon={Icons.TriangleDown} />
|
|
57
|
-
</Fragment>
|
|
58
|
-
);
|
|
53
|
+
return <Icon className={getSortingIndicatorClasses().join(" ")} icon={Icons.ArrowUp} />;
|
|
59
54
|
};
|
|
60
55
|
|
|
61
56
|
const innerContent = (
|
|
@@ -16,28 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
import { useEffect, useState } from "react";
|
|
18
18
|
import { Filter } from "./DataGridFilters/DataGridFilters.interfaces";
|
|
19
|
+
import { useFiltersReducer } from "./DataGridFilters/useFiltersReducer";
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* @scope .
|
|
22
23
|
* @scopeException stories/DataGrid/DataGrid.stories.tsx
|
|
23
24
|
*/
|
|
24
25
|
export const useMockFilteringLogic = <T>(data: T[], filterValues: Filter[] | undefined) => {
|
|
25
|
-
const
|
|
26
|
+
const { state, addFilter, editFilter, deleteFilter, clearFilters } =
|
|
27
|
+
useFiltersReducer(filterValues);
|
|
26
28
|
|
|
27
29
|
const [gridData, setGridData] = useState(data);
|
|
28
30
|
|
|
29
|
-
const onFilterAdd = (filter: Filter) => {
|
|
30
|
-
setFilters(prev => [...prev, filter]);
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const onFilterEdit = (filter: Filter) =>
|
|
34
|
-
setFilters(prev => prev.map(f => (f.id === filter.id ? filter : f)));
|
|
35
|
-
|
|
36
|
-
const onFilterDelete = (id: string) =>
|
|
37
|
-
setFilters(prev => [...prev.filter(value => value.id !== id)]);
|
|
38
|
-
|
|
39
|
-
const onFiltersClear = () => setFilters([]);
|
|
40
|
-
|
|
41
31
|
const operatorPredicateMap = {
|
|
42
32
|
is: (v1: string, v2: string) => v1 === v2,
|
|
43
33
|
"is not": (v1: string, v2: string) => v1 !== v2
|
|
@@ -47,7 +37,7 @@ export const useMockFilteringLogic = <T>(data: T[], filterValues: Filter[] | und
|
|
|
47
37
|
const filteredData = data
|
|
48
38
|
.map((row: T) => {
|
|
49
39
|
let shouldBeDiscarded: boolean[] = [];
|
|
50
|
-
filters.forEach(filter => {
|
|
40
|
+
state.filters.forEach(filter => {
|
|
51
41
|
shouldBeDiscarded = [
|
|
52
42
|
...shouldBeDiscarded,
|
|
53
43
|
!filter.value.reduce((acc, val) => {
|
|
@@ -71,7 +61,15 @@ export const useMockFilteringLogic = <T>(data: T[], filterValues: Filter[] | und
|
|
|
71
61
|
return val !== undefined;
|
|
72
62
|
}) as T[];
|
|
73
63
|
setGridData(filteredData);
|
|
74
|
-
}, [filters]);
|
|
64
|
+
}, [state.filters]);
|
|
75
65
|
|
|
76
|
-
return {
|
|
66
|
+
return {
|
|
67
|
+
onFilterAdd: addFilter,
|
|
68
|
+
onFilterEdit: editFilter,
|
|
69
|
+
onFilterDelete: deleteFilter,
|
|
70
|
+
onFiltersClear: clearFilters,
|
|
71
|
+
gridData,
|
|
72
|
+
setGridData,
|
|
73
|
+
filters: state.filters
|
|
74
|
+
};
|
|
77
75
|
};
|
|
@@ -98,7 +98,9 @@ export enum Icons {
|
|
|
98
98
|
FileAltIcon = "file-alt",
|
|
99
99
|
AddCircle = "add-circle",
|
|
100
100
|
ZoomIn = "zoom-in",
|
|
101
|
-
ZoomOut = "zoom-out"
|
|
101
|
+
ZoomOut = "zoom-out",
|
|
102
|
+
ArrowUp = "arrow-up",
|
|
103
|
+
ExternalLink = "external-link"
|
|
102
104
|
}
|
|
103
105
|
|
|
104
106
|
type Tag = "span" | "div" | "i";
|
|
@@ -27,7 +27,7 @@ import { createPortal } from "react-dom";
|
|
|
27
27
|
import { useGetDomRoot } from "../../../hooks/useGetDomRoot";
|
|
28
28
|
import classes from "./BaseModal.module.scss";
|
|
29
29
|
import { labelId, descriptionId } from "./BaseModalContext";
|
|
30
|
-
import { useRepeatFocus } from "
|
|
30
|
+
import { useRepeatFocus } from "../../../hooks/useRepeatFocus";
|
|
31
31
|
|
|
32
32
|
const SCROLL_PROPERTY_NAME = "overflow";
|
|
33
33
|
const SCROLL_PROPERTY_VALUE = "hidden";
|
package/src/font/icomoon.eot
CHANGED
|
Binary file
|
package/src/font/icomoon.svg
CHANGED
|
@@ -86,5 +86,7 @@
|
|
|
86
86
|
<glyph unicode="" glyph-name="add-circle" d="M512 960c-282.624 0-512-229.376-512-512s229.376-512 512-512c282.624 0 512 229.376 512 512s-229.376 512-512 512zM767.999 396.8h-204.8v-204.8h-102.4v204.8h-204.8v102.4h204.8v204.8h102.4v-204.8h204.8v-102.4z" />
|
|
87
87
|
<glyph unicode="" glyph-name="ZoomOut" d="M731.85 315.975h-46.258l-16.391 15.808c57.379 66.744 91.917 153.395 91.917 247.657 0 210.187-170.371 380.561-380.557 380.561s-380.561-170.374-380.561-380.561c0-210.187 170.374-380.557 380.561-380.557 94.262 0 180.913 34.538 247.657 91.917l15.808-16.391v-46.258l292.736-292.151 87.239 87.239-292.151 292.736zM380.561 315.975c-145.784 0-263.465 117.681-263.465 263.465s117.681 263.465 263.465 263.465c145.784 0 263.465-117.681 263.465-263.465s-117.681-263.465-263.465-263.465zM234.192 608.713h292.738v-58.548h-292.738v58.548z" />
|
|
88
88
|
<glyph unicode="" glyph-name="ZoomIn" d="M731.85 315.975h-46.258l-16.391 15.808c57.379 66.744 91.917 153.395 91.917 247.657 0 210.187-170.371 380.561-380.557 380.561s-380.561-170.374-380.561-380.561c0-210.187 170.374-380.557 380.561-380.557 94.262 0 180.913 34.538 247.657 91.917l15.808-16.391v-46.258l292.736-292.151 87.239 87.239-292.151 292.736zM380.561 315.975c-145.784 0-263.465 117.681-263.465 263.465s117.681 263.465 263.465 263.465c145.784 0 263.465-117.681 263.465-263.465s-117.681-263.465-263.465-263.465zM409.835 725.809h-58.548v-117.095h-117.095v-58.548h117.095v-117.095h58.548v117.095h117.095v58.548h-117.095v117.095z" />
|
|
89
|
+
<glyph unicode="" glyph-name="arrow-up" d="M0.001 448.003l90.24-90.24 357.76 357.117v-778.879h128.002v778.879l357.12-357.762 90.877 90.885-512.002 511.996-511.996-511.996z" />
|
|
90
|
+
<glyph unicode="" glyph-name="external-link" d="M910.225 49.775h-796.448v796.448h398.223v113.777h-398.223c-63.146 0-113.777-51.2-113.777-113.777v-796.448c0-62.575 50.631-113.775 113.777-113.775h796.448c62.575 0 113.775 51.2 113.775 113.775v398.225h-113.775v-398.225zM625.777 960v-113.777h204.232l-559.218-559.218 80.213-80.213 559.221 559.218v-204.232h113.775v398.223h-398.223z" />
|
|
89
91
|
<glyph unicode="" glyph-name="eye-blocked" d="M945.942 945.942c-18.746 18.744-49.136 18.744-67.882 0l-202.164-202.164c-51.938 15.754-106.948 24.222-163.896 24.222-223.318 0-416.882-130.042-512-320 41.122-82.124 100.648-153.040 173.022-207.096l-158.962-158.962c-18.746-18.746-18.746-49.136 0-67.882 9.372-9.374 21.656-14.060 33.94-14.060s24.568 4.686 33.942 14.058l864 864c18.744 18.746 18.744 49.138 0 67.884zM416 640c42.24 0 78.082-27.294 90.92-65.196l-121.724-121.724c-37.902 12.838-65.196 48.68-65.196 90.92 0 53.020 42.98 96 96 96zM110.116 448c38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.862 7.3-9.962-27.328-15.412-56.822-15.412-87.596 0-54.89 17.286-105.738 46.7-147.418l-60.924-60.924c-52.446 36.842-97.202 83.882-131.66 138.342zM768 518c0 27.166-4.256 53.334-12.102 77.898l-321.808-321.808c24.568-7.842 50.742-12.090 77.91-12.090 141.382 0 256 114.618 256 256zM830.026 670.026l-69.362-69.362c1.264-0.786 2.53-1.568 3.786-2.368 60.162-38.374 111.142-89.774 149.434-150.296-38.292-60.522-89.274-111.922-149.436-150.296-75.594-48.218-162.89-73.704-252.448-73.704-38.664 0-76.902 4.76-113.962 14.040l-76.894-76.894c59.718-21.462 123.95-33.146 190.856-33.146 223.31 0 416.876 130.042 512 320-45.022 89.916-112.118 166.396-193.974 222.026z" />
|
|
90
92
|
</font></defs></svg>
|
package/src/font/icomoon.ttf
CHANGED
|
Binary file
|
package/src/font/icomoon.woff
CHANGED
|
Binary file
|