@onewelcome/react-lib-components 8.6.0 → 8.7.0
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/Button/BaseButton.cjs.js +1 -1
- package/dist/cjs/Button/BaseButton.cjs.js.map +1 -1
- package/dist/cjs/ContextMenu/ContextMenu.cjs.js +1 -1
- package/dist/cjs/ContextMenu/ContextMenu.cjs.js.map +1 -1
- package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js.map +1 -0
- 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/DataGridFilters.interfaces.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/DateTimePicker/DateTimePicker.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.cjs.js.map +1 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js.map +1 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js.map +1 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js.map +1 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js.map +1 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js +2 -0
- package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js.map +1 -0
- package/dist/cjs/DatePicker/DatePicker.cjs.js +1 -1
- package/dist/cjs/DatePicker/DatePicker.cjs.js.map +1 -1
- package/dist/cjs/DatePicker/DatePicker.module.scss.cjs.js +1 -1
- package/dist/cjs/Form/FormGroup/FormGroup.cjs.js +1 -1
- package/dist/cjs/Form/FormGroup/FormGroup.cjs.js.map +1 -1
- package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js +1 -1
- package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js.map +1 -1
- package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +1 -1
- package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -1
- package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +1 -1
- package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -1
- package/dist/cjs/Form/Select/useSelectPositionList.cjs.js +1 -1
- package/dist/cjs/Form/Select/useSelectPositionList.cjs.js.map +1 -1
- package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js +1 -1
- package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js.map +1 -1
- package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js +1 -1
- package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js.map +1 -1
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
- package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
- package/dist/cjs/src/components/DataGrid/testUtils.d.ts +7 -1
- package/dist/cjs/src/components/DatePicker/DatePicker.d.ts +4 -1
- package/dist/cjs/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
- package/dist/cjs/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
- package/dist/cjs/src/hooks/useClickOutside.cjs.js +2 -0
- package/dist/cjs/src/hooks/useClickOutside.cjs.js.map +1 -0
- package/dist/cjs/src/hooks/useClickOutside.d.ts +2 -0
- package/dist/cjs/src/index.cjs.js +1 -1
- package/dist/cjs/src/index.d.ts +1 -0
- package/dist/esm/Button/BaseButton.esm.js +5 -2
- package/dist/esm/Button/BaseButton.esm.js.map +1 -1
- package/dist/esm/ContextMenu/ContextMenu.esm.js +6 -8
- package/dist/esm/ContextMenu/ContextMenu.esm.js.map +1 -1
- package/dist/esm/ContextMenu/ContextMenuItem.esm.js +3 -3
- package/dist/esm/ContextMenu/ContextMenuItem.esm.js.map +1 -1
- package/dist/esm/ContextMenu/ContextMenuItem.module.scss.esm.js +2 -2
- package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js +35 -0
- package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js.map +1 -0
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js +16 -7
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DataGridFilters.interfaces.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js +15 -12
- package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js.map +1 -1
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js +138 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js.map +1 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js +8 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js.map +1 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js +54 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js.map +1 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js +51 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js.map +1 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js +29 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js.map +1 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js +26 -0
- package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js.map +1 -0
- package/dist/esm/DatePicker/DatePicker.esm.js +3 -1
- package/dist/esm/DatePicker/DatePicker.esm.js.map +1 -1
- package/dist/esm/DatePicker/DatePicker.module.scss.esm.js +2 -2
- package/dist/esm/Form/FormGroup/FormGroup.esm.js +2 -2
- package/dist/esm/Form/FormGroup/FormGroup.esm.js.map +1 -1
- package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js +1 -1
- package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js.map +1 -1
- package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +9 -5
- package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -1
- package/dist/esm/Form/Select/SingleSelect/Select.esm.js +9 -5
- package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -1
- package/dist/esm/Form/Select/useSelectPositionList.esm.js +8 -11
- package/dist/esm/Form/Select/useSelectPositionList.esm.js.map +1 -1
- package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js +2 -2
- package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js.map +1 -1
- package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js +2 -2
- package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js.map +1 -1
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
- package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
- package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
- package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
- package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
- package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
- package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
- package/dist/esm/src/components/DataGrid/testUtils.d.ts +7 -1
- package/dist/esm/src/components/DatePicker/DatePicker.d.ts +4 -1
- package/dist/esm/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
- package/dist/esm/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
- package/dist/esm/src/hooks/useClickOutside.d.ts +2 -0
- package/dist/esm/src/hooks/useClickOutside.esm.js +38 -0
- package/dist/esm/src/hooks/useClickOutside.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 +7 -3
- package/src/components/Button/BaseButton.tsx +7 -4
- package/src/components/ContextMenu/ContextMenu.tsx +5 -13
- package/src/components/DataGrid/DataGridBody/__snapshots__/DataGridBody.test.tsx.snap +4 -4
- package/src/components/DataGrid/DataGridFilters/DataGridDateFilter.tsx +65 -0
- package/src/components/DataGrid/DataGridFilters/DataGridFilterTag.tsx +25 -5
- package/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.ts +18 -1
- package/src/components/DataGrid/DataGridFilters/DataGridToolbar.tsx +53 -33
- package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss +134 -0
- package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.tsx +267 -0
- package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.tsx +103 -0
- package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.tsx +121 -0
- package/{dist/esm/src/hooks/useBodyClick.esm.js → src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.ts} +14 -17
- package/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.tsx +50 -0
- package/src/components/DataGrid/testUtils.ts +48 -15
- package/src/components/DatePicker/DatePicker.module.scss +32 -9
- package/src/components/DatePicker/DatePicker.tsx +15 -1
- package/src/components/Form/FormGroup/FormGroup.tsx +6 -1
- package/src/components/Form/FormSelectorWrapper/FormSelectorWrapper.tsx +2 -2
- package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +13 -13
- package/src/components/Form/Select/SingleSelect/Select.tsx +13 -13
- package/src/components/Form/Select/useSelectPositionList.ts +8 -12
- package/src/components/Form/Wrapper/InputWrapper/InputWrapper.tsx +2 -0
- package/src/components/Form/Wrapper/Wrapper/Wrapper.tsx +3 -0
- package/src/hooks/{useBodyClick.ts → useClickOutside.ts} +17 -11
- package/src/index.ts +1 -0
- package/dist/cjs/src/hooks/useBodyClick.cjs.js +0 -2
- package/dist/cjs/src/hooks/useBodyClick.cjs.js.map +0 -1
- package/dist/cjs/src/hooks/useBodyClick.d.ts +0 -1
- package/dist/esm/src/hooks/useBodyClick.d.ts +0 -1
- package/dist/esm/src/hooks/useBodyClick.esm.js.map +0 -1
- /package/dist/cjs/src/hooks/{useBodyClick.test.d.ts → useClickOutside.test.d.ts} +0 -0
- /package/dist/esm/src/hooks/{useBodyClick.test.d.ts → useClickOutside.test.d.ts} +0 -0
|
@@ -26,7 +26,7 @@ export interface Props extends ComponentPropsWithRef<"button"> {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
const BaseButtonComponent: ForwardRefRenderFunction<HTMLButtonElement, Props> = (
|
|
29
|
-
{ children, type = "button", className, loading, disabled, ...rest },
|
|
29
|
+
{ children, type = "button", className, loading, disabled, hidden, ...rest },
|
|
30
30
|
ref
|
|
31
31
|
) => {
|
|
32
32
|
const validTypes = ["submit", "button", "reset"];
|
|
@@ -36,15 +36,18 @@ const BaseButtonComponent: ForwardRefRenderFunction<HTMLButtonElement, Props> =
|
|
|
36
36
|
`You have entered an invalid button type. Expected 'submit', 'button' or 'reset' got ${type}`
|
|
37
37
|
);
|
|
38
38
|
|
|
39
|
+
const buttonClasses = [classes.button];
|
|
40
|
+
loading && buttonClasses.push(classes.loading);
|
|
41
|
+
className && buttonClasses.push(className);
|
|
42
|
+
|
|
39
43
|
return (
|
|
40
44
|
<button
|
|
41
45
|
{...rest}
|
|
42
46
|
disabled={isDisabled}
|
|
43
47
|
ref={ref}
|
|
44
48
|
type={type}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}`}
|
|
49
|
+
hidden={hidden}
|
|
50
|
+
className={hidden ? "" : buttonClasses.join(" ")}
|
|
48
51
|
>
|
|
49
52
|
{loading ? (
|
|
50
53
|
<Fragment>
|
|
@@ -31,7 +31,7 @@ import { Props as IconButtonProps } from "../Button/IconButton";
|
|
|
31
31
|
import { Popover, Props as PopoverProps } from "../Popover/Popover";
|
|
32
32
|
import { Placement, Offset } from "../../hooks/usePosition";
|
|
33
33
|
import classes from "./ContextMenu.module.scss";
|
|
34
|
-
import {
|
|
34
|
+
import { useClickOutside } from "../../hooks/useClickOutside";
|
|
35
35
|
import { Props as ContextMenuItemProps } from "./ContextMenuItem";
|
|
36
36
|
import { createPortal } from "react-dom";
|
|
37
37
|
import { useGetDomRoot } from "../../hooks/useGetDomRoot";
|
|
@@ -110,19 +110,11 @@ const ContextMenuComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
|
|
|
110
110
|
setShouldClick
|
|
111
111
|
});
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
showContextMenu &&
|
|
117
|
-
anchorEl.current !== event.target &&
|
|
118
|
-
anchorEl.current !== (event.target as HTMLElement).parentElement
|
|
119
|
-
);
|
|
120
|
-
},
|
|
121
|
-
() => {
|
|
113
|
+
useClickOutside(anchorEl, () => {
|
|
114
|
+
if (showContextMenu) {
|
|
122
115
|
setShowContextMenu(false);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
);
|
|
116
|
+
}
|
|
117
|
+
}, [showContextMenu]);
|
|
126
118
|
|
|
127
119
|
useFocusAnchorElement(
|
|
128
120
|
anchorEl,
|
|
@@ -45,7 +45,7 @@ exports[`DataGridBody should render renders without crashing 1`] = `
|
|
|
45
45
|
aria-controls="consent_menu_Paweł-menu"
|
|
46
46
|
aria-expanded="false"
|
|
47
47
|
aria-haspopup="true"
|
|
48
|
-
class="button
|
|
48
|
+
class="button icon-button text default button-m"
|
|
49
49
|
id="consent_menu_Paweł"
|
|
50
50
|
tabindex="0"
|
|
51
51
|
title="Actions for Paweł"
|
|
@@ -109,7 +109,7 @@ exports[`DataGridBody should render renders without crashing 1`] = `
|
|
|
109
109
|
aria-controls="consent_menu_Michał-menu"
|
|
110
110
|
aria-expanded="false"
|
|
111
111
|
aria-haspopup="true"
|
|
112
|
-
class="button
|
|
112
|
+
class="button icon-button text default button-m"
|
|
113
113
|
id="consent_menu_Michał"
|
|
114
114
|
tabindex="0"
|
|
115
115
|
title="Actions for Michał"
|
|
@@ -173,7 +173,7 @@ exports[`DataGridBody should render renders without crashing 1`] = `
|
|
|
173
173
|
aria-controls="consent_menu_Daniel-menu"
|
|
174
174
|
aria-expanded="false"
|
|
175
175
|
aria-haspopup="true"
|
|
176
|
-
class="button
|
|
176
|
+
class="button icon-button text default button-m"
|
|
177
177
|
id="consent_menu_Daniel"
|
|
178
178
|
tabindex="0"
|
|
179
179
|
title="Actions for Daniel"
|
|
@@ -237,7 +237,7 @@ exports[`DataGridBody should render renders without crashing 1`] = `
|
|
|
237
237
|
aria-controls="consent_menu_Jasha-menu"
|
|
238
238
|
aria-expanded="false"
|
|
239
239
|
aria-haspopup="true"
|
|
240
|
-
class="button
|
|
240
|
+
class="button icon-button text default button-m"
|
|
241
241
|
id="consent_menu_Jasha"
|
|
242
242
|
tabindex="0"
|
|
243
243
|
title="Actions for Jasha"
|
|
@@ -0,0 +1,65 @@
|
|
|
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 React, { Fragment, useRef, useState } from "react";
|
|
18
|
+
import { DataGridFilterTag } from "./DataGridFilterTag";
|
|
19
|
+
import { createPortal } from "react-dom";
|
|
20
|
+
import { DateTimePicker } from "./DateTimePicker/DateTimePicker";
|
|
21
|
+
import { useGetDomRoot } from "../../../hooks/useGetDomRoot";
|
|
22
|
+
import { DateTimeFilter } from "./DataGridFilters.interfaces";
|
|
23
|
+
|
|
24
|
+
type Props = {
|
|
25
|
+
domRoot?: HTMLElement;
|
|
26
|
+
dateFilterValue?: DateTimeFilter;
|
|
27
|
+
onDateFilterValueChange?: (dateTimeFilter: DateTimeFilter) => void;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const DataGridDateFilter = ({
|
|
31
|
+
domRoot,
|
|
32
|
+
dateFilterValue,
|
|
33
|
+
onDateFilterValueChange
|
|
34
|
+
}: Props) => {
|
|
35
|
+
const triggerRef = useRef<HTMLButtonElement>(null);
|
|
36
|
+
const popoverRef = useRef<HTMLDivElement>(null);
|
|
37
|
+
const wrappingDivRef = useRef<HTMLDivElement>(null);
|
|
38
|
+
const { root } = useGetDomRoot(domRoot, wrappingDivRef);
|
|
39
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
40
|
+
const [tagCaption, setTagCaption] = useState("Last 30 seconds");
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<Fragment>
|
|
44
|
+
<DataGridFilterTag
|
|
45
|
+
triggerRef={triggerRef}
|
|
46
|
+
ref={wrappingDivRef}
|
|
47
|
+
dateTagCaption={tagCaption}
|
|
48
|
+
mode={"ADD_DATE"}
|
|
49
|
+
onFilterOpen={() => setIsOpen(true)}
|
|
50
|
+
/>
|
|
51
|
+
{createPortal(
|
|
52
|
+
<DateTimePicker
|
|
53
|
+
popoverRef={popoverRef}
|
|
54
|
+
onTagCaptionChange={setTagCaption}
|
|
55
|
+
anchorRef={wrappingDivRef}
|
|
56
|
+
isOpen={isOpen}
|
|
57
|
+
setPickerOpen={setIsOpen}
|
|
58
|
+
dateFilterValue={dateFilterValue}
|
|
59
|
+
onDateFilterValueChange={onDateFilterValueChange}
|
|
60
|
+
/>,
|
|
61
|
+
root
|
|
62
|
+
)}
|
|
63
|
+
</Fragment>
|
|
64
|
+
);
|
|
65
|
+
};
|
|
@@ -26,12 +26,13 @@ export interface DataGridFilterTagProps extends ComponentPropsWithRef<"div"> {
|
|
|
26
26
|
triggerRef: React.Ref<HTMLButtonElement>;
|
|
27
27
|
filter?: Filter;
|
|
28
28
|
mode: FilterEditorMode;
|
|
29
|
-
onFilterRemove
|
|
29
|
+
onFilterRemove?: () => void;
|
|
30
30
|
onFilterOpen: () => void;
|
|
31
31
|
translations?: TagTranslations;
|
|
32
|
+
dateTagCaption?: string;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
const EditTagContent = ({ filter }: { filter: Filter }) => {
|
|
35
|
+
const EditTagContent = ({ filter, or, other }: { filter: Filter; or: string; other: string }) => {
|
|
35
36
|
const { column, operator, value } = filter;
|
|
36
37
|
|
|
37
38
|
return (
|
|
@@ -39,7 +40,11 @@ const EditTagContent = ({ filter }: { filter: Filter }) => {
|
|
|
39
40
|
{column} {operator} {value.length > 0 && <b>{value[0]}</b>}
|
|
40
41
|
{value.length >= 2 && (
|
|
41
42
|
<>
|
|
42
|
-
|
|
43
|
+
{" "}
|
|
44
|
+
{or}{" "}
|
|
45
|
+
<b>
|
|
46
|
+
{value.length - 1} {other}
|
|
47
|
+
</b>
|
|
43
48
|
</>
|
|
44
49
|
)}
|
|
45
50
|
</Fragment>
|
|
@@ -57,14 +62,21 @@ export const DataGridFilterTagComponent: ForwardRefRenderFunction<
|
|
|
57
62
|
onFilterRemove,
|
|
58
63
|
onFilterOpen,
|
|
59
64
|
translations,
|
|
65
|
+
dateTagCaption,
|
|
60
66
|
customEditTagContent,
|
|
61
67
|
...rest
|
|
62
68
|
}: DataGridFilterTagProps,
|
|
63
69
|
ref
|
|
64
70
|
) => {
|
|
65
|
-
const {
|
|
71
|
+
const {
|
|
72
|
+
addButtonCaption = "Add filter",
|
|
73
|
+
or = "or",
|
|
74
|
+
other = "other",
|
|
75
|
+
dateIs = "Date is"
|
|
76
|
+
} = translations || {};
|
|
66
77
|
const shouldRenderAddTag = mode === "ADD";
|
|
67
78
|
const shouldRenderEditTag = mode === "EDIT" && filter;
|
|
79
|
+
const shouldRenderAddDateTag = mode === "ADD_DATE";
|
|
68
80
|
|
|
69
81
|
return (
|
|
70
82
|
<div {...rest} ref={ref} className={classes["filter-wrapper"]}>
|
|
@@ -87,10 +99,18 @@ export const DataGridFilterTagComponent: ForwardRefRenderFunction<
|
|
|
87
99
|
{customEditTagContent ? (
|
|
88
100
|
React.cloneElement(customEditTagContent, { filter })
|
|
89
101
|
) : (
|
|
90
|
-
<EditTagContent filter={filter} />
|
|
102
|
+
<EditTagContent filter={filter} or={or} other={other} />
|
|
91
103
|
)}
|
|
92
104
|
</Typography>
|
|
93
105
|
)}
|
|
106
|
+
{shouldRenderAddDateTag && (
|
|
107
|
+
<Fragment>
|
|
108
|
+
<Icon icon={Icons.Calendar} />
|
|
109
|
+
<Typography variant="body" className={classes["caption"]}>
|
|
110
|
+
{dateIs} <b>{dateTagCaption}</b>
|
|
111
|
+
</Typography>
|
|
112
|
+
</Fragment>
|
|
113
|
+
)}
|
|
94
114
|
</button>
|
|
95
115
|
{shouldRenderEditTag && (
|
|
96
116
|
<RemoveButton className={classes["remove-button"]} onRemove={onFilterRemove} />
|
|
@@ -42,7 +42,7 @@ export type FiltersState = {
|
|
|
42
42
|
filters: Filter[];
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
export type FilterEditorMode = "ADD" | "EDIT";
|
|
45
|
+
export type FilterEditorMode = "ADD" | "EDIT" | "ADD_DATE";
|
|
46
46
|
|
|
47
47
|
export enum DefaultOperators {
|
|
48
48
|
is = "is",
|
|
@@ -72,6 +72,9 @@ export interface PopoverTranslations {
|
|
|
72
72
|
|
|
73
73
|
export interface TagTranslations {
|
|
74
74
|
addButtonCaption?: string;
|
|
75
|
+
or?: string;
|
|
76
|
+
other?: string;
|
|
77
|
+
dateIs?: string;
|
|
75
78
|
}
|
|
76
79
|
|
|
77
80
|
export interface ToolbarTranslations {
|
|
@@ -88,3 +91,17 @@ export interface KeyValuePair<TKey = string, TValue = string> {
|
|
|
88
91
|
key: TKey;
|
|
89
92
|
value: TValue;
|
|
90
93
|
}
|
|
94
|
+
|
|
95
|
+
export type DateTimeFilterType =
|
|
96
|
+
| "THIRTY_SECONDS"
|
|
97
|
+
| "ONE_MINUTE"
|
|
98
|
+
| "FIVE_MINUTES"
|
|
99
|
+
| "ONE_HOUR"
|
|
100
|
+
| "TWENTY_FOUR_HOURS"
|
|
101
|
+
| "CUSTOM";
|
|
102
|
+
|
|
103
|
+
export interface DateTimeFilter {
|
|
104
|
+
fromDate: string;
|
|
105
|
+
toDate: string;
|
|
106
|
+
type: DateTimeFilterType;
|
|
107
|
+
}
|
|
@@ -17,13 +17,21 @@
|
|
|
17
17
|
import React, { Fragment } from "react";
|
|
18
18
|
import { DataGridFilter } from "./DataGridFilter";
|
|
19
19
|
import classes from "./DataGridToolbar.module.scss";
|
|
20
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
DataGridColumnMetadata,
|
|
22
|
+
DateTimeFilter,
|
|
23
|
+
Filter,
|
|
24
|
+
FiltersTranslations
|
|
25
|
+
} from "./DataGridFilters.interfaces";
|
|
21
26
|
import { Typography } from "../../Typography/Typography";
|
|
22
27
|
import { useFiltersReducer } from "./useFiltersReducer";
|
|
28
|
+
import { DataGridDateFilter } from "./DataGridDateFilter";
|
|
23
29
|
|
|
24
30
|
export interface DataGridToolbarProps {
|
|
25
|
-
columnsMetadata
|
|
31
|
+
columnsMetadata?: DataGridColumnMetadata[];
|
|
26
32
|
customEditTagContent?: React.ReactElement;
|
|
33
|
+
dateFilterValue?: DateTimeFilter;
|
|
34
|
+
onDateFilterValueChange?: (dateTimeFilter: DateTimeFilter) => void;
|
|
27
35
|
filterValues?: Filter[];
|
|
28
36
|
translations?: FiltersTranslations;
|
|
29
37
|
onFilterAdd?: (filter: Filter) => void;
|
|
@@ -39,6 +47,8 @@ export const DataGridToolbar = ({
|
|
|
39
47
|
onFilterAdd,
|
|
40
48
|
onFilterEdit,
|
|
41
49
|
onFilterDelete,
|
|
50
|
+
dateFilterValue,
|
|
51
|
+
onDateFilterValueChange,
|
|
42
52
|
onFiltersClear,
|
|
43
53
|
customEditTagContent
|
|
44
54
|
}: DataGridToolbarProps) => {
|
|
@@ -47,38 +57,41 @@ export const DataGridToolbar = ({
|
|
|
47
57
|
const { clearButtonCaption = "Clear all filters" } = translations?.toolbar || {};
|
|
48
58
|
return (
|
|
49
59
|
<Fragment>
|
|
50
|
-
{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
{columnsMetadata &&
|
|
61
|
+
state.filters.map(filter => (
|
|
62
|
+
<DataGridFilter
|
|
63
|
+
mode="EDIT"
|
|
64
|
+
key={filter.id}
|
|
65
|
+
filter={filter}
|
|
66
|
+
columnsMetadata={columnsMetadata}
|
|
67
|
+
onFilterEdit={filter => {
|
|
68
|
+
editFilter(filter);
|
|
69
|
+
onFilterEdit && onFilterEdit(filter);
|
|
70
|
+
}}
|
|
71
|
+
onFilterDelete={id => {
|
|
72
|
+
deleteFilter(id);
|
|
73
|
+
onFilterDelete && onFilterDelete(id);
|
|
74
|
+
}}
|
|
75
|
+
tagTranslations={translations?.tag}
|
|
76
|
+
popoverTranslations={translations?.popover}
|
|
77
|
+
customEditTagContent={customEditTagContent}
|
|
78
|
+
/>
|
|
79
|
+
))}
|
|
69
80
|
<div className={classes["actions-wrapper"]}>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
{columnsMetadata && (
|
|
82
|
+
<DataGridFilter
|
|
83
|
+
mode="ADD"
|
|
84
|
+
customEditTagContent={customEditTagContent}
|
|
85
|
+
columnsMetadata={columnsMetadata}
|
|
86
|
+
onFilterAdd={filter => {
|
|
87
|
+
addFilter(filter);
|
|
88
|
+
onFilterAdd && onFilterAdd(filter);
|
|
89
|
+
}}
|
|
90
|
+
tagTranslations={translations?.tag}
|
|
91
|
+
popoverTranslations={translations?.popover}
|
|
92
|
+
/>
|
|
93
|
+
)}
|
|
94
|
+
{columnsMetadata && state.filters.length >= 1 && (
|
|
82
95
|
<button
|
|
83
96
|
type="button"
|
|
84
97
|
className={classes["clear-button"]}
|
|
@@ -92,6 +105,13 @@ export const DataGridToolbar = ({
|
|
|
92
105
|
</Typography>
|
|
93
106
|
</button>
|
|
94
107
|
)}
|
|
108
|
+
|
|
109
|
+
{dateFilterValue && (
|
|
110
|
+
<DataGridDateFilter
|
|
111
|
+
dateFilterValue={dateFilterValue}
|
|
112
|
+
onDateFilterValueChange={onDateFilterValueChange}
|
|
113
|
+
/>
|
|
114
|
+
)}
|
|
95
115
|
</div>
|
|
96
116
|
</Fragment>
|
|
97
117
|
);
|
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
.popover {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
align-items: flex-start;
|
|
21
|
+
|
|
22
|
+
min-width: 40rem;
|
|
23
|
+
|
|
24
|
+
.content-wrapper {
|
|
25
|
+
display: flex;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.aside {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
|
|
32
|
+
width: 9.25rem;
|
|
33
|
+
border-right: 1px solid var(--color-blue-grey100);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.aside-menu {
|
|
37
|
+
margin: 0.5rem 0;
|
|
38
|
+
padding: 0;
|
|
39
|
+
|
|
40
|
+
white-space: nowrap;
|
|
41
|
+
|
|
42
|
+
list-style: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.aside-menu-item {
|
|
46
|
+
height: 2rem;
|
|
47
|
+
|
|
48
|
+
button {
|
|
49
|
+
padding: 0.5rem 0.75rem;
|
|
50
|
+
|
|
51
|
+
font-size: 0.75rem;
|
|
52
|
+
line-height: 1rem;
|
|
53
|
+
text-align: start;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.controls {
|
|
58
|
+
display: flex;
|
|
59
|
+
flex-direction: column;
|
|
60
|
+
gap: 2rem;
|
|
61
|
+
flex-grow: 1;
|
|
62
|
+
|
|
63
|
+
padding: 2rem 2rem 0 2rem;
|
|
64
|
+
|
|
65
|
+
&.has-error {
|
|
66
|
+
//left it in px - height + margin of the error text span in the input wrapper
|
|
67
|
+
gap: calc(2rem - 15.5681px);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.controls-panel {
|
|
72
|
+
display: flex;
|
|
73
|
+
gap: 2rem;
|
|
74
|
+
|
|
75
|
+
& > * {
|
|
76
|
+
flex-grow: 1;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&.set-height {
|
|
80
|
+
min-height: 17.5rem;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.actions {
|
|
85
|
+
display: flex;
|
|
86
|
+
justify-content: space-between;
|
|
87
|
+
gap: 1rem;
|
|
88
|
+
flex-grow: 1;
|
|
89
|
+
|
|
90
|
+
width: calc(100% - 3rem);
|
|
91
|
+
border-top: 1px solid var(--color-blue-grey100);
|
|
92
|
+
padding: 1rem 1.5rem;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.input {
|
|
96
|
+
margin-top: 0;
|
|
97
|
+
max-width: 14rem;
|
|
98
|
+
|
|
99
|
+
label {
|
|
100
|
+
font-size: 0.75rem;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.nav {
|
|
105
|
+
position: absolute;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.next-button {
|
|
109
|
+
position: absolute;
|
|
110
|
+
left: 27.3125rem;
|
|
111
|
+
top: 0;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.prev-button {
|
|
115
|
+
position: absolute;
|
|
116
|
+
top: 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.month-caption {
|
|
120
|
+
width: 100%;
|
|
121
|
+
height: 2.5rem;
|
|
122
|
+
margin: 0;
|
|
123
|
+
padding: 0.75rem 0;
|
|
124
|
+
|
|
125
|
+
font-size: 0.75rem;
|
|
126
|
+
font-weight: 500;
|
|
127
|
+
line-height: 1rem;
|
|
128
|
+
text-align: center;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.error-message {
|
|
133
|
+
font-size: 0.625rem;
|
|
134
|
+
}
|