@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.
Files changed (153) hide show
  1. package/dist/cjs/Button/BaseButton.cjs.js +1 -1
  2. package/dist/cjs/Button/BaseButton.cjs.js.map +1 -1
  3. package/dist/cjs/ContextMenu/ContextMenu.cjs.js +1 -1
  4. package/dist/cjs/ContextMenu/ContextMenu.cjs.js.map +1 -1
  5. package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js +2 -0
  6. package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js.map +1 -0
  7. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js +1 -1
  8. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js.map +1 -1
  9. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilters.interfaces.cjs.js.map +1 -1
  10. package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js +1 -1
  11. package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js.map +1 -1
  12. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.cjs.js +2 -0
  13. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.cjs.js.map +1 -0
  14. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js +2 -0
  15. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js.map +1 -0
  16. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js +2 -0
  17. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js.map +1 -0
  18. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js +2 -0
  19. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js.map +1 -0
  20. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js +2 -0
  21. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js.map +1 -0
  22. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js +2 -0
  23. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js.map +1 -0
  24. package/dist/cjs/DatePicker/DatePicker.cjs.js +1 -1
  25. package/dist/cjs/DatePicker/DatePicker.cjs.js.map +1 -1
  26. package/dist/cjs/DatePicker/DatePicker.module.scss.cjs.js +1 -1
  27. package/dist/cjs/Form/FormGroup/FormGroup.cjs.js +1 -1
  28. package/dist/cjs/Form/FormGroup/FormGroup.cjs.js.map +1 -1
  29. package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js +1 -1
  30. package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js.map +1 -1
  31. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +1 -1
  32. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -1
  33. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +1 -1
  34. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -1
  35. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js +1 -1
  36. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js.map +1 -1
  37. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js +1 -1
  38. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js.map +1 -1
  39. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js +1 -1
  40. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js.map +1 -1
  41. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
  42. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
  43. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
  44. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
  45. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
  46. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
  47. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
  48. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
  49. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
  50. package/dist/cjs/src/components/DataGrid/testUtils.d.ts +7 -1
  51. package/dist/cjs/src/components/DatePicker/DatePicker.d.ts +4 -1
  52. package/dist/cjs/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
  53. package/dist/cjs/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
  54. package/dist/cjs/src/hooks/useClickOutside.cjs.js +2 -0
  55. package/dist/cjs/src/hooks/useClickOutside.cjs.js.map +1 -0
  56. package/dist/cjs/src/hooks/useClickOutside.d.ts +2 -0
  57. package/dist/cjs/src/index.cjs.js +1 -1
  58. package/dist/cjs/src/index.d.ts +1 -0
  59. package/dist/esm/Button/BaseButton.esm.js +5 -2
  60. package/dist/esm/Button/BaseButton.esm.js.map +1 -1
  61. package/dist/esm/ContextMenu/ContextMenu.esm.js +6 -8
  62. package/dist/esm/ContextMenu/ContextMenu.esm.js.map +1 -1
  63. package/dist/esm/ContextMenu/ContextMenuItem.esm.js +3 -3
  64. package/dist/esm/ContextMenu/ContextMenuItem.esm.js.map +1 -1
  65. package/dist/esm/ContextMenu/ContextMenuItem.module.scss.esm.js +2 -2
  66. package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js +35 -0
  67. package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js.map +1 -0
  68. package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js +16 -7
  69. package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js.map +1 -1
  70. package/dist/esm/DataGrid/DataGridFilters/DataGridFilters.interfaces.esm.js.map +1 -1
  71. package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js +15 -12
  72. package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js.map +1 -1
  73. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js +138 -0
  74. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js.map +1 -0
  75. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js +8 -0
  76. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js.map +1 -0
  77. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js +54 -0
  78. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js.map +1 -0
  79. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js +51 -0
  80. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js.map +1 -0
  81. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js +29 -0
  82. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js.map +1 -0
  83. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js +26 -0
  84. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js.map +1 -0
  85. package/dist/esm/DatePicker/DatePicker.esm.js +3 -1
  86. package/dist/esm/DatePicker/DatePicker.esm.js.map +1 -1
  87. package/dist/esm/DatePicker/DatePicker.module.scss.esm.js +2 -2
  88. package/dist/esm/Form/FormGroup/FormGroup.esm.js +2 -2
  89. package/dist/esm/Form/FormGroup/FormGroup.esm.js.map +1 -1
  90. package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js +1 -1
  91. package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js.map +1 -1
  92. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +9 -5
  93. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -1
  94. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +9 -5
  95. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -1
  96. package/dist/esm/Form/Select/useSelectPositionList.esm.js +8 -11
  97. package/dist/esm/Form/Select/useSelectPositionList.esm.js.map +1 -1
  98. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js +2 -2
  99. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js.map +1 -1
  100. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js +2 -2
  101. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js.map +1 -1
  102. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
  103. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
  104. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
  105. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
  106. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
  107. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
  108. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
  109. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
  110. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
  111. package/dist/esm/src/components/DataGrid/testUtils.d.ts +7 -1
  112. package/dist/esm/src/components/DatePicker/DatePicker.d.ts +4 -1
  113. package/dist/esm/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
  114. package/dist/esm/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
  115. package/dist/esm/src/hooks/useClickOutside.d.ts +2 -0
  116. package/dist/esm/src/hooks/useClickOutside.esm.js +38 -0
  117. package/dist/esm/src/hooks/useClickOutside.esm.js.map +1 -0
  118. package/dist/esm/src/index.d.ts +1 -0
  119. package/dist/esm/src/index.esm.js +1 -0
  120. package/dist/esm/src/index.esm.js.map +1 -1
  121. package/package.json +7 -3
  122. package/src/components/Button/BaseButton.tsx +7 -4
  123. package/src/components/ContextMenu/ContextMenu.tsx +5 -13
  124. package/src/components/DataGrid/DataGridBody/__snapshots__/DataGridBody.test.tsx.snap +4 -4
  125. package/src/components/DataGrid/DataGridFilters/DataGridDateFilter.tsx +65 -0
  126. package/src/components/DataGrid/DataGridFilters/DataGridFilterTag.tsx +25 -5
  127. package/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.ts +18 -1
  128. package/src/components/DataGrid/DataGridFilters/DataGridToolbar.tsx +53 -33
  129. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss +134 -0
  130. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.tsx +267 -0
  131. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.tsx +103 -0
  132. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.tsx +121 -0
  133. package/{dist/esm/src/hooks/useBodyClick.esm.js → src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.ts} +14 -17
  134. package/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.tsx +50 -0
  135. package/src/components/DataGrid/testUtils.ts +48 -15
  136. package/src/components/DatePicker/DatePicker.module.scss +32 -9
  137. package/src/components/DatePicker/DatePicker.tsx +15 -1
  138. package/src/components/Form/FormGroup/FormGroup.tsx +6 -1
  139. package/src/components/Form/FormSelectorWrapper/FormSelectorWrapper.tsx +2 -2
  140. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +13 -13
  141. package/src/components/Form/Select/SingleSelect/Select.tsx +13 -13
  142. package/src/components/Form/Select/useSelectPositionList.ts +8 -12
  143. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.tsx +2 -0
  144. package/src/components/Form/Wrapper/Wrapper/Wrapper.tsx +3 -0
  145. package/src/hooks/{useBodyClick.ts → useClickOutside.ts} +17 -11
  146. package/src/index.ts +1 -0
  147. package/dist/cjs/src/hooks/useBodyClick.cjs.js +0 -2
  148. package/dist/cjs/src/hooks/useBodyClick.cjs.js.map +0 -1
  149. package/dist/cjs/src/hooks/useBodyClick.d.ts +0 -1
  150. package/dist/esm/src/hooks/useBodyClick.d.ts +0 -1
  151. package/dist/esm/src/hooks/useBodyClick.esm.js.map +0 -1
  152. /package/dist/cjs/src/hooks/{useBodyClick.test.d.ts → useClickOutside.test.d.ts} +0 -0
  153. /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
- className={`${classes.button} ${loading ? classes.loading : ""} ${
46
- className ? className : ""
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 { useBodyClick } from "../../hooks/useBodyClick";
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
- useBodyClick(
114
- event => {
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
- showContextMenu
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 icon-button text default button-m"
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 icon-button text default button-m"
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 icon-button text default button-m"
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 icon-button text default button-m"
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: () => void;
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
- or <b> {value.length - 1} other</b>
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 { addButtonCaption = "Add filter" } = translations || {};
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 { DataGridColumnMetadata, Filter, FiltersTranslations } from "./DataGridFilters.interfaces";
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: DataGridColumnMetadata[];
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
- {state.filters.map(filter => (
51
- <DataGridFilter
52
- mode="EDIT"
53
- key={filter.id}
54
- filter={filter}
55
- columnsMetadata={columnsMetadata}
56
- onFilterEdit={filter => {
57
- editFilter(filter);
58
- onFilterEdit && onFilterEdit(filter);
59
- }}
60
- onFilterDelete={id => {
61
- deleteFilter(id);
62
- onFilterDelete && onFilterDelete(id);
63
- }}
64
- tagTranslations={translations?.tag}
65
- popoverTranslations={translations?.popover}
66
- customEditTagContent={customEditTagContent}
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
- <DataGridFilter
71
- mode="ADD"
72
- customEditTagContent={customEditTagContent}
73
- columnsMetadata={columnsMetadata}
74
- onFilterAdd={filter => {
75
- addFilter(filter);
76
- onFilterAdd && onFilterAdd(filter);
77
- }}
78
- tagTranslations={translations?.tag}
79
- popoverTranslations={translations?.popover}
80
- />
81
- {state.filters.length >= 1 && (
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
+ }