@centreon/ui 23.10.119 → 23.10.120

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 (70) hide show
  1. package/package.json +16 -12
  2. package/src/Button/Save/StartIcon.tsx +3 -3
  3. package/src/Dashboard/Item.tsx +1 -1
  4. package/src/Dashboard/Layout.tsx +2 -2
  5. package/src/FileDropZone/index.tsx +3 -1
  6. package/src/Form/Inputs/CheckboxGroup.tsx +1 -4
  7. package/src/Form/Inputs/index.tsx +1 -1
  8. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
  9. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/index.tsx +5 -4
  10. package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
  11. package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +1 -1
  12. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
  13. package/src/Graph/LineChart/InteractiveComponents/Annotations/Annotation/index.tsx +2 -3
  14. package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
  15. package/src/Graph/LineChart/Legend/useLegend.ts +5 -5
  16. package/src/Graph/LineChart/LineChart.tsx +5 -2
  17. package/src/Graph/LineChart/helpers/doc.ts +16 -13
  18. package/src/Graph/LineChart/helpers/index.ts +1 -1
  19. package/src/Graph/LineChart/index.stories.tsx +1 -2
  20. package/src/Graph/SingleBar/Thresholds.tsx +2 -2
  21. package/src/Graph/Text/Text.stories.tsx +60 -4
  22. package/src/Graph/common/timeSeries/index.ts +3 -3
  23. package/src/InputField/Select/Autocomplete/Connected/index.tsx +10 -7
  24. package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
  25. package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
  26. package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
  27. package/src/InputField/Select/IconPopover/index.tsx +2 -2
  28. package/src/InputField/Select/index.tsx +1 -1
  29. package/src/Listing/Header/ListingHeader.tsx +1 -1
  30. package/src/Listing/index.stories.tsx +12 -1
  31. package/src/Listing/index.tsx +1 -1
  32. package/src/RichTextEditor/RichTextEditor.cypress.spec.tsx +100 -52
  33. package/src/RichTextEditor/RichTextEditor.tsx +21 -4
  34. package/src/RichTextEditor/plugins/ToolbarPlugin/AlignPicker.tsx +21 -20
  35. package/src/RichTextEditor/plugins/ToolbarPlugin/BlockButtons.tsx +35 -77
  36. package/src/RichTextEditor/plugins/ToolbarPlugin/FormatButtons.tsx +29 -83
  37. package/src/RichTextEditor/plugins/ToolbarPlugin/LinkButton.tsx +106 -0
  38. package/src/RichTextEditor/plugins/ToolbarPlugin/ListButton.tsx +155 -0
  39. package/src/RichTextEditor/plugins/ToolbarPlugin/MacrosButton.tsx +23 -39
  40. package/src/RichTextEditor/plugins/ToolbarPlugin/ToolbarPlugin.styles.ts +24 -14
  41. package/src/RichTextEditor/plugins/ToolbarPlugin/UndoRedoButtons.tsx +6 -0
  42. package/src/RichTextEditor/plugins/ToolbarPlugin/index.tsx +5 -10
  43. package/src/RichTextEditor/translatedLabels.ts +3 -0
  44. package/src/SortableItems/index.tsx +2 -7
  45. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +8 -3
  46. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
  47. package/src/TimePeriods/DateTimePickerInput.tsx +45 -17
  48. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
  49. package/src/TimePeriods/helpers/index.ts +1 -1
  50. package/src/TimePeriods/index.tsx +2 -2
  51. package/src/api/QueryProvider.tsx +1 -1
  52. package/src/api/TestQueryProvider.tsx +1 -1
  53. package/src/api/useFetchQuery/index.ts +28 -24
  54. package/src/api/useMutationQuery/index.ts +39 -17
  55. package/src/components/DataTable/Item/DataTableItem.tsx +2 -2
  56. package/src/components/Form/AccessRights/__fixtures__/contactAccessRight.mock.ts +2 -0
  57. package/src/components/Form/AccessRights/useAccessRightsForm.utils.ts +1 -1
  58. package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
  59. package/src/components/ItemComposition/ItemComposition.tsx +4 -2
  60. package/src/components/Menu/Button/MenuButton.tsx +4 -2
  61. package/src/components/Menu/MenuItem.tsx +5 -3
  62. package/src/components/Menu/MenuItems.tsx +4 -3
  63. package/src/index.ts +1 -0
  64. package/src/queryParameters/url/index.ts +5 -1
  65. package/src/utils/index.ts +0 -1
  66. package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
  67. package/src/utils/useLicenseExpirationWarning.ts +18 -18
  68. package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
  69. package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
  70. package/src/utils/useDateTimePickerAdapter.ts +0 -309
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@centreon/ui",
3
- "version": "23.10.119",
3
+ "version": "23.10.120",
4
4
  "description": "Centreon UI Components",
5
5
  "scripts": {
6
6
  "eslint": "eslint ./src --ext .js,.jsx,.ts,.tsx --max-warnings 0",
@@ -12,6 +12,7 @@
12
12
  "test:ci": "jest --silent --reporter=jest-junit",
13
13
  "cypress:ui": "cypress open --component --browser=chrome",
14
14
  "cypress:cli:updateSnapshot": "pnpm cypress:cli --env updateSnapshots=true",
15
+ "cypress:run:coverage": "cypress run --component --browser=chrome --env codeCoverageTasksRegistered=true",
15
16
  "cypress:cli": "cypress run --component --browser=chrome",
16
17
  "tokens:transform": "TS_NODE_PROJECT=tsconfig.node.json ts-node style-dictionary.transform.ts"
17
18
  },
@@ -73,13 +74,13 @@
73
74
  "@testing-library/react-hooks": "^8.0.1",
74
75
  "@types/cypress": "^1.1.3",
75
76
  "@types/jest": "^27.5.0",
76
- "@types/ramda": "^0.28.12",
77
+ "@types/ramda": "^0.29.6",
77
78
  "@types/react": "^18.0.26",
78
79
  "@types/testing-library__jest-dom": "^5.14.6",
79
80
  "@vitejs/plugin-react": "^4.0.0",
80
81
  "@vitejs/plugin-react-swc": "^3.3.0",
81
82
  "axios-mock-adapter": "^1.21.4",
82
- "cypress": "^12.8.0",
83
+ "cypress": "^13.3.1",
83
84
  "identity-obj-proxy": "^3.0.0",
84
85
  "jest-transform-stub": "^2.0.0",
85
86
  "mochawesome": "^7.1.3",
@@ -97,16 +98,18 @@
97
98
  "ts-node": "^10.9.1",
98
99
  "use-resize-observer": "^9.1.0",
99
100
  "vite": "^4.3.5",
101
+ "vite-plugin-istanbul": "^5.0.0",
100
102
  "vite-plugin-svgr": "^3.2.0",
101
103
  "vite-plugin-turbosnap": "^1.0.2"
102
104
  },
103
105
  "dependencies": {
104
- "@lexical/link": "0.11.3",
105
- "@lexical/list": "^0.11.3",
106
- "@lexical/react": "0.11.3",
107
- "@lexical/rich-text": "^0.11.3",
108
- "@lexical/selection": "0.11.3",
109
- "@lexical/utils": "0.11.3",
106
+ "@lexical/html": "^0.12.2",
107
+ "@lexical/link": "^0.12.2",
108
+ "@lexical/list": "^0.12.2",
109
+ "@lexical/react": "^0.12.2",
110
+ "@lexical/rich-text": "^0.12.2",
111
+ "@lexical/selection": "^0.12.2",
112
+ "@lexical/utils": "^0.12.2",
110
113
  "@react-spring/web": "^9.7.3",
111
114
  "@visx/curve": "^2.1.0",
112
115
  "@visx/group": "^3.3.0",
@@ -118,8 +121,9 @@
118
121
  "anylogger": "^1.0.11",
119
122
  "d3-array": "3.2.0",
120
123
  "humanize-duration": "^3.27.3",
121
- "lexical": "0.11.3",
122
- "notistack": "^2.0.8",
124
+ "lexical": "^0.12.2",
125
+ "notistack": "^3.0.1",
126
+ "ramda": "0.29.1",
123
127
  "react-grid-layout": "^1.3.4",
124
128
  "react-html-parser": "^2.0.2",
125
129
  "react-resizable": "^3.0.5",
@@ -135,7 +139,7 @@
135
139
  "@mui/icons-material": "5.x",
136
140
  "@mui/material": "5.x",
137
141
  "@mui/styles": "5.x",
138
- "@tanstack/react-query": "4.x",
142
+ "@tanstack/react-query": "5.x",
139
143
  "axios": "0.x",
140
144
  "dayjs": "1.x",
141
145
  "formik": "2.x",
@@ -15,9 +15,9 @@ interface Props {
15
15
 
16
16
  const StartIcon = ({ startIconConfig }: Props): JSX.Element | null =>
17
17
  cond<Array<StartIconConfigProps>, JSX.Element | null>([
18
- [pipe(propEq('hasLabel', true), not), always(null)],
19
- [propEq('succeeded', true), always(<CheckIcon />)],
20
- [propEq('loading', true), always(<SaveIcon />)],
18
+ [pipe(propEq(true, 'hasLabel'), not), always(null)],
19
+ [propEq(true, 'succeeded'), always(<CheckIcon />)],
20
+ [propEq(true, 'loading'), always(<SaveIcon />)],
21
21
  [T, always(<SaveIcon />)]
22
22
  ])(startIconConfig);
23
23
 
@@ -27,7 +27,7 @@ interface DashboardItemProps {
27
27
  style?: CSSProperties;
28
28
  }
29
29
 
30
- const Item = forwardRef(
30
+ const Item = forwardRef<HTMLDivElement, DashboardItemProps>(
31
31
  (
32
32
  {
33
33
  children,
@@ -23,7 +23,7 @@ interface DashboardLayoutProps<T> {
23
23
  layout: Array<T>;
24
24
  }
25
25
 
26
- const Layout = <T extends Layout>({
26
+ const DashboardLayout = <T extends Layout>({
27
27
  children,
28
28
  changeLayout,
29
29
  displayGrid,
@@ -76,4 +76,4 @@ const Layout = <T extends Layout>({
76
76
  });
77
77
  };
78
78
 
79
- export default Layout;
79
+ export default DashboardLayout;
@@ -98,7 +98,9 @@ const getExtensions = cond([
98
98
  [T, identity]
99
99
  ]) as (accept: string) => Array<string>;
100
100
 
101
- export const transformFileListToArray = (files: FileList | null): Array<File> =>
101
+ export const transformFileListToArray = (
102
+ files: FileList | null
103
+ ): Array<File> =>
102
104
  isNil(files)
103
105
  ? []
104
106
  : (Array(files.length)
@@ -46,10 +46,7 @@ const CheckboxGroup = ({
46
46
  return;
47
47
  }
48
48
 
49
- setFieldValue(
50
- fieldName,
51
- value?.filter((elm) => !equals(elm, label))
52
- );
49
+ setFieldValue(fieldName, value?.filter((elm) => !equals(elm, label)));
53
50
  };
54
51
 
55
52
  return useMemoComponent({
@@ -185,7 +185,7 @@ const Inputs = ({
185
185
  const hasGroupTitle = R.not(R.isNil(groupName));
186
186
 
187
187
  const groupProps = hasGroupTitle
188
- ? R.find(R.propEq('name', groupName), groups)
188
+ ? R.find(R.propEq(groupName, 'name'), groups)
189
189
  : ({} as Group);
190
190
 
191
191
  const isFirstElement = areGroupsOpen || R.equals(index, 0);
@@ -1,7 +1,7 @@
1
1
  import { Shape } from '@visx/visx';
2
2
  import { isEmpty, isNil } from 'ramda';
3
3
 
4
- import { Circle } from './models';
4
+ import { Circle as CircleModel } from './models';
5
5
  import useCoordinateCircle from './useCoordinateCircle';
6
6
 
7
7
  const Circle = ({
@@ -11,7 +11,7 @@ const Circle = ({
11
11
  timeSeries,
12
12
  getX,
13
13
  getCountDisplayedCircles
14
- }: Circle): JSX.Element | null => {
14
+ }: CircleModel): JSX.Element | null => {
15
15
  const coordinates = useCoordinateCircle({
16
16
  getCountDisplayedCircles,
17
17
  getX,
@@ -130,10 +130,11 @@ const WrapperThresholdLines = ({
130
130
 
131
131
  return (
132
132
  <g>
133
- {filteredThresholdLines.map((element) =>
134
- element?.map(({ Component, props, key }) => (
135
- <Component {...props} id={key} key={key} />
136
- ))
133
+ {filteredThresholdLines.map(
134
+ (element) =>
135
+ element?.map(({ Component, props, key }) => (
136
+ <Component {...props} id={key} key={key} />
137
+ ))
137
138
  )}
138
139
  </g>
139
140
  );
@@ -2,7 +2,7 @@ import { equals, isNil } from 'ramda';
2
2
 
3
3
  import { getUnits, getYScale } from '../../common/timeSeries';
4
4
  import { Line } from '../../common/timeSeries/models';
5
- import { Thresholds } from '../../common/models';
5
+ import { Thresholds as ThresholdsModel } from '../../common/models';
6
6
 
7
7
  import { ThresholdLine } from './ThresholdLine';
8
8
 
@@ -13,7 +13,7 @@ interface Props {
13
13
  rightScale: (value: number) => number;
14
14
  showTooltip: (props) => void;
15
15
  thresholdUnit?: string;
16
- thresholds: Thresholds;
16
+ thresholds: ThresholdsModel;
17
17
  width: number;
18
18
  }
19
19
 
@@ -28,7 +28,7 @@ const useFilterLines = ({
28
28
  linesGraph,
29
29
  setLinesGraph
30
30
  }: UseFilterLines): Result => {
31
- const displayedLines = reject(propEq('display', false), linesGraph ?? lines);
31
+ const displayedLines = reject(propEq(false, 'display'), linesGraph ?? lines);
32
32
  const filterLines = (): Array<Line> => {
33
33
  const lineOriginMetric = findLineOfOriginMetricThreshold(lines);
34
34
 
@@ -2,7 +2,7 @@ import { Shape } from '@visx/visx';
2
2
 
3
3
  import { grey } from '@mui/material/colors';
4
4
 
5
- import { GuidingLines } from './models';
5
+ import { GuidingLines as GuidingLinesModel } from './models';
6
6
  import useTickGraph from './useTickGraph';
7
7
 
8
8
  const GuidingLines = ({
@@ -10,7 +10,7 @@ const GuidingLines = ({
10
10
  xScale,
11
11
  graphHeight,
12
12
  graphWidth
13
- }: GuidingLines): JSX.Element | null => {
13
+ }: GuidingLinesModel): JSX.Element | null => {
14
14
  const { positionX, positionY } = useTickGraph({
15
15
  timeSeries,
16
16
  xScale
@@ -43,9 +43,8 @@ const Annotation = ({
43
43
 
44
44
  const setAnnotationHovered = useSetAtom(annotationHoveredAtom);
45
45
 
46
- const content = `${truncate(event.content)} (${t(labelBy)} ${
47
- event.contact?.name
48
- })`;
46
+ const content = `${truncate(event.content)} (${t(labelBy)} ${event.contact
47
+ ?.name})`;
49
48
 
50
49
  return (
51
50
  <g>
@@ -26,7 +26,7 @@ const EventAnnotations = ({
26
26
  color,
27
27
  annotationHoveredId
28
28
  }: Props): JSX.Element => {
29
- const events = filter(propEq('type', type), data);
29
+ const events = filter(propEq(type, 'type'), data);
30
30
 
31
31
  return (
32
32
  <>
@@ -27,15 +27,15 @@ interface Props {
27
27
  }
28
28
 
29
29
  const useLegend = ({ lines, setLinesGraph }: Props): LegendActions => {
30
- const displayedLines = reject(propEq('display', false), lines);
30
+ const displayedLines = reject(propEq(false, 'display'), lines);
31
31
  const getLineByMetric = (metric_id: number): Line =>
32
- find(propEq('metric_id', metric_id), lines) as Line;
32
+ find(propEq(metric_id, 'metric_id'), lines) as Line;
33
33
 
34
34
  const toggleMetricLine = (metric_id): void => {
35
35
  const line = getLineByMetric(metric_id);
36
36
 
37
37
  setLinesGraph([
38
- ...reject(propEq('metric_id', metric_id), lines),
38
+ ...reject(propEq(metric_id, 'metric_id'), lines),
39
39
  { ...line, display: !line.display }
40
40
  ]);
41
41
  };
@@ -43,7 +43,7 @@ const useLegend = ({ lines, setLinesGraph }: Props): LegendActions => {
43
43
  const highlightLine = (metric_id): void => {
44
44
  const fadedLines = map((line) => ({ ...line, highlight: false }), lines);
45
45
  const data = [
46
- ...reject(propEq('metric_id', metric_id), fadedLines),
46
+ ...reject(propEq(metric_id, 'metric_id'), fadedLines),
47
47
  { ...getLineByMetric(metric_id), highlight: true }
48
48
  ];
49
49
 
@@ -93,7 +93,7 @@ const useLegend = ({ lines, setLinesGraph }: Props): LegendActions => {
93
93
 
94
94
  const newLines = lines.map((line) => ({
95
95
  ...line,
96
- display: find(propEq('metric_id', line.metric_id), lines)?.display ?? true
96
+ display: find(propEq(line.metric_id, 'metric_id'), lines)?.display ?? true
97
97
  }));
98
98
 
99
99
  setLinesGraph(newLines);
@@ -34,6 +34,8 @@ import { useIntersection } from './useLineChartIntersection';
34
34
  import { CurveType } from './BasicComponents/Lines/models';
35
35
  import Thresholds from './BasicComponents/Thresholds';
36
36
 
37
+ const extraMargin = 10;
38
+
37
39
  interface Props extends LineChartProps {
38
40
  curve: CurveType;
39
41
  graphData: Data;
@@ -92,7 +94,8 @@ const LineChart = ({
92
94
  showTooltip: showThresholdTooltip
93
95
  } = Tooltip.useTooltip();
94
96
 
95
- const graphWidth = width > 0 ? width - margin.left - margin.right : 0;
97
+ const graphWidth =
98
+ width > 0 ? width - margin.left - margin.right - extraMargin : 0;
96
99
  const graphHeight =
97
100
  (height || 0) > 0
98
101
  ? (height || 0) -
@@ -185,7 +188,7 @@ const LineChart = ({
185
188
  width={width}
186
189
  />
187
190
  <svg height={graphHeight + margin.top} ref={graphSvgRef} width="100%">
188
- <Group.Group left={margin.left} top={margin.top}>
191
+ <Group.Group left={margin.left + extraMargin / 2} top={margin.top}>
189
192
  <Grids
190
193
  height={graphHeight - margin.top}
191
194
  leftScale={leftScale}
@@ -69,21 +69,24 @@ export const getDescription = ({ sections }: Description): string => {
69
69
  })}<br></details>`;
70
70
  }
71
71
 
72
- const formattedProps = props.reduce((accumulator, currentValue, index) => {
73
- const key = Object.keys(currentValue)[0];
74
- const { description, type } = currentValue[key];
75
- const body = `${accumulator} ${getBodyDescription({
76
- description,
77
- key,
78
- type
79
- })}`;
72
+ const formattedProps = props.reduce(
73
+ (accumulator, currentValue, index) => {
74
+ const key = Object.keys(currentValue)[0];
75
+ const { description, type } = currentValue[key];
76
+ const body = `${accumulator} ${getBodyDescription({
77
+ description,
78
+ key,
79
+ type
80
+ })}`;
80
81
 
81
- if (!equals(index, props.length - 1)) {
82
- return body;
83
- }
82
+ if (!equals(index, props.length - 1)) {
83
+ return body;
84
+ }
84
85
 
85
- return `${body}</details>`;
86
- }, getInitialValue({ section: name, type: item?.type }));
86
+ return `${body}</details>`;
87
+ },
88
+ getInitialValue({ section: name, type: item?.type })
89
+ );
87
90
 
88
91
  return formattedProps as string;
89
92
  });
@@ -14,7 +14,7 @@ import { LineChartData } from '../../common/models';
14
14
  export const adjustGraphData = (graphData: LineChartData): LinesData => {
15
15
  const lines = getLineData(graphData);
16
16
  const sortedLines = sortBy(prop('name'), lines);
17
- const displayedLines = reject(propEq('display', false), sortedLines);
17
+ const displayedLines = reject(propEq(false, 'display'), sortedLines);
18
18
 
19
19
  const timeSeries = getTimeSeries(graphData);
20
20
 
@@ -39,8 +39,7 @@ import { Interval, ThresholdType, TooltipData } from './models';
39
39
  import WrapperLineChart from './index';
40
40
 
41
41
  const meta: Meta<typeof WrapperLineChart> = {
42
- component: WrapperLineChart,
43
- tags: ['autodocs']
42
+ component: WrapperLineChart
44
43
  };
45
44
  export default meta;
46
45
 
@@ -1,4 +1,4 @@
1
- import { Thresholds } from '../common/models';
1
+ import { Thresholds as ThresholdsModel } from '../common/models';
2
2
 
3
3
  import { ThresholdLine } from './ThresholdLine';
4
4
 
@@ -8,7 +8,7 @@ interface Props {
8
8
  hideTooltip: () => void;
9
9
  showTooltip: (args) => void;
10
10
  size: 'small' | 'medium';
11
- thresholds: Thresholds;
11
+ thresholds: ThresholdsModel;
12
12
  xScale: (value: number) => number;
13
13
  }
14
14
 
@@ -24,7 +24,21 @@ export const success: Story = {
24
24
  critical: 'Critical',
25
25
  warning: 'Warning'
26
26
  },
27
- thresholds: [0.5, 1.5]
27
+ thresholds: {
28
+ critical: [
29
+ {
30
+ label: 'Critical',
31
+ value: 1.5
32
+ }
33
+ ],
34
+ enabled: true,
35
+ warning: [
36
+ {
37
+ label: 'Warning',
38
+ value: 0.5
39
+ }
40
+ ]
41
+ }
28
42
  },
29
43
  render: Template
30
44
  };
@@ -36,7 +50,21 @@ export const warning: Story = {
36
50
  critical: 'Critical',
37
51
  warning: 'Warning'
38
52
  },
39
- thresholds: [0.2, 0.5]
53
+ thresholds: {
54
+ critical: [
55
+ {
56
+ label: 'Critical',
57
+ value: 1.5
58
+ }
59
+ ],
60
+ enabled: true,
61
+ warning: [
62
+ {
63
+ label: 'Warning',
64
+ value: 0.4
65
+ }
66
+ ]
67
+ }
40
68
  },
41
69
  render: Template
42
70
  };
@@ -48,7 +76,21 @@ export const critical: Story = {
48
76
  critical: 'Critical',
49
77
  warning: 'Warning'
50
78
  },
51
- thresholds: [0.13, 0.35]
79
+ thresholds: {
80
+ critical: [
81
+ {
82
+ label: 'Critical',
83
+ value: 0.3
84
+ }
85
+ ],
86
+ enabled: true,
87
+ warning: [
88
+ {
89
+ label: 'Warning',
90
+ value: 0.2
91
+ }
92
+ ]
93
+ }
52
94
  },
53
95
  render: Template
54
96
  };
@@ -61,7 +103,21 @@ export const rawValue: Story = {
61
103
  critical: 'Critical',
62
104
  warning: 'Warning'
63
105
  },
64
- thresholds: [0.5, 1.5]
106
+ thresholds: {
107
+ critical: [
108
+ {
109
+ label: 'Critical',
110
+ value: 1.5
111
+ }
112
+ ],
113
+ enabled: true,
114
+ warning: [
115
+ {
116
+ label: 'Warning',
117
+ value: 0.5
118
+ }
119
+ ]
120
+ }
65
121
  },
66
122
  render: Template
67
123
  };
@@ -179,7 +179,7 @@ const getMetricValuesForUnit = ({
179
179
  ) as Array<number>;
180
180
 
181
181
  return pipe(
182
- filter(propEq('unit', unit)) as (line) => Array<Line>,
182
+ filter(propEq(unit, 'unit')) as (line) => Array<Line>,
183
183
  map(prop('metric_id')),
184
184
  map(getTimeSeriesValuesForMetric),
185
185
  flatten,
@@ -203,7 +203,7 @@ const getLineForMetric = ({
203
203
  lines,
204
204
  metric_id
205
205
  }: LineForMetricProps): Line | undefined =>
206
- find(propEq('metric_id', metric_id), lines);
206
+ find(propEq(metric_id, 'metric_id'), lines);
207
207
 
208
208
  interface LinesTimeSeries {
209
209
  lines: Array<Line>;
@@ -275,7 +275,7 @@ interface HasStackedLines {
275
275
  }
276
276
 
277
277
  const hasUnitStackedLines = ({ lines, unit }: HasStackedLines): boolean =>
278
- pipe(getSortedStackedLines, any(propEq('unit', unit)))(lines);
278
+ pipe(getSortedStackedLines, any(propEq(unit, 'unit')))(lines);
279
279
 
280
280
  const getTimeSeriesForLines = ({
281
281
  lines,
@@ -280,13 +280,16 @@ const ConnectedAutocompleteField = (
280
280
  }
281
281
  }, [optionsOpen]);
282
282
 
283
- useEffect(() => {
284
- setSearchParameter(
285
- !isEmpty(searchConditions)
286
- ? { conditions: searchConditions }
287
- : undefined
288
- );
289
- }, useDeepCompare([searchConditions]));
283
+ useEffect(
284
+ () => {
285
+ setSearchParameter(
286
+ !isEmpty(searchConditions)
287
+ ? { conditions: searchConditions }
288
+ : undefined
289
+ );
290
+ },
291
+ useDeepCompare([searchConditions])
292
+ );
290
293
 
291
294
  useEffect(() => {
292
295
  if (!autocompleteChangedValue && !props?.value) {
@@ -49,7 +49,7 @@ const SortableList = ({
49
49
  const dragEnd = ({ items: newItems }): void =>
50
50
  changeItemsOrder(
51
51
  map(
52
- (item) => find(propEq('id', item), items),
52
+ (item) => find(propEq(item, 'id'), items),
53
53
  newItems
54
54
  ) as Array<DraggableSelectEntry>
55
55
  );
@@ -49,7 +49,7 @@ const SortableListContent = ({
49
49
  return;
50
50
  }
51
51
 
52
- const itemIndex = findIndex(propEq('id', id), items);
52
+ const itemIndex = findIndex(propEq(id, 'id'), items);
53
53
 
54
54
  itemHover?.(null);
55
55
  itemClick?.({ index: itemIndex, item: { createOption, id, name } });
@@ -77,7 +77,7 @@ const DraggableAutocomplete = (
77
77
  const deleteValue = (id): void => {
78
78
  itemHover?.(null);
79
79
  setSelectedValues((values: Array<DraggableSelectEntry>) => {
80
- const index = findIndex(propEq('id', id), values);
80
+ const index = findIndex(propEq(id, 'id'), values);
81
81
 
82
82
  const newSelectedValues = remove(index, 1, values);
83
83
 
@@ -73,14 +73,14 @@ const IconPopoverMultiAutocomplete = ({
73
73
  };
74
74
 
75
75
  const isSelected = (id: number | string): boolean => {
76
- return pipe(find(propEq('id', id)), Boolean)(value);
76
+ return pipe(find(propEq(id, 'id')), Boolean)(value);
77
77
  };
78
78
 
79
79
  const unSelect = (option: SelectEntry): void => {
80
80
  const { id } = option;
81
81
 
82
82
  const updatedValue = isSelected(id)
83
- ? reject(propEq('id', id), value)
83
+ ? reject(propEq(id, 'id'), value)
84
84
  : [...value, option];
85
85
 
86
86
  onChange(updatedValue);
@@ -69,7 +69,7 @@ const SelectField = ({
69
69
  const { classes, cx } = useStyles();
70
70
 
71
71
  const getOption = (id): SelectEntry => {
72
- return options.find(propEq('id', id)) as SelectEntry;
72
+ return options.find(propEq(id, 'id')) as SelectEntry;
73
73
  };
74
74
 
75
75
  const changeOption = (event): void => {
@@ -71,7 +71,7 @@ const ListingHeader = ({
71
71
  });
72
72
 
73
73
  const getColumnById = (id: string): Column => {
74
- return find(propEq('id', id), columns) as Column;
74
+ return find(propEq(id, 'id'), columns) as Column;
75
75
  };
76
76
 
77
77
  const Content = React.useCallback(
@@ -366,6 +366,16 @@ const columnsWithSubItems = [
366
366
  }
367
367
  ];
368
368
 
369
+ const TemplateSubItems = (args): JSX.Element => {
370
+ const { classes } = useStyles();
371
+
372
+ return (
373
+ <div className={classes.listing}>
374
+ <Listing {...args} />
375
+ </div>
376
+ );
377
+ };
378
+
369
379
  export const ListingWithSubItems = {
370
380
  args: {
371
381
  checkable: true,
@@ -382,5 +392,6 @@ export const ListingWithSubItems = {
382
392
  rowProperty: 'subItems'
383
393
  },
384
394
  totalRows: 10
385
- }
395
+ },
396
+ render: TemplateSubItems
386
397
  };
@@ -69,7 +69,7 @@ const getVisibleColumns = ({
69
69
  }
70
70
 
71
71
  return selectedColumnIds.map((id) =>
72
- columns.find(propEq('id', id))
72
+ columns.find(propEq(id, 'id'))
73
73
  ) as Array<Column>;
74
74
  };
75
75