@centreon/ui 23.10.1-MON-23386-Improve-filters.0 → 23.10.1-MON-integrate-cypress-code-coverage.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/package.json +14 -12
- package/src/Button/Save/StartIcon.tsx +3 -3
- package/src/Dashboard/Dashboard.styles.ts +1 -7
- package/src/Dashboard/Item.tsx +7 -7
- package/src/Dashboard/Layout.tsx +2 -2
- package/src/FileDropZone/index.tsx +3 -1
- package/src/Form/Inputs/CheckboxGroup.tsx +1 -4
- package/src/Form/Inputs/index.tsx +1 -1
- package/src/Graph/Gauge/Gauge.stories.tsx +15 -1
- package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
- package/src/Graph/LineChart/BasicComponents/Lines/Threshold/index.tsx +5 -4
- package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
- package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +1 -1
- package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
- package/src/Graph/LineChart/InteractiveComponents/Annotations/Annotation/index.tsx +2 -3
- package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
- package/src/Graph/LineChart/Legend/useLegend.ts +5 -5
- package/src/Graph/LineChart/helpers/doc.ts +16 -13
- package/src/Graph/LineChart/helpers/index.ts +1 -1
- package/src/Graph/LineChart/index.stories.tsx +1 -2
- package/src/Graph/SingleBar/Thresholds.tsx +2 -2
- package/src/Graph/Text/Text.stories.tsx +60 -4
- package/src/Graph/common/timeSeries/index.ts +3 -3
- package/src/InputField/Select/Autocomplete/Connected/index.tsx +10 -7
- package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
- package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
- package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
- package/src/InputField/Select/Autocomplete/Multi/index.tsx +18 -21
- package/src/InputField/Select/IconPopover/index.tsx +2 -2
- package/src/InputField/Select/index.tsx +1 -1
- package/src/Listing/Header/ListingHeader.tsx +1 -1
- package/src/Listing/index.tsx +1 -1
- package/src/RichTextEditor/RichTextEditor.tsx +12 -4
- package/src/RichTextEditor/plugins/ToolbarPlugin/index.tsx +4 -6
- package/src/SortableItems/index.tsx +2 -7
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +8 -3
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
- package/src/TimePeriods/DateTimePickerInput.tsx +45 -17
- package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
- package/src/TimePeriods/helpers/index.ts +1 -1
- package/src/TimePeriods/index.tsx +2 -2
- package/src/Wizard/index.tsx +2 -5
- package/src/Wizard/models.ts +0 -1
- package/src/api/QueryProvider.tsx +1 -1
- package/src/api/TestQueryProvider.tsx +1 -1
- package/src/api/useFetchQuery/index.ts +28 -24
- package/src/api/useMutationQuery/index.ts +39 -17
- package/src/components/Form/AccessRights/useAccessRightsForm.utils.ts +1 -1
- package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
- package/src/index.ts +1 -0
- package/src/queryParameters/url/index.ts +5 -1
- package/src/utils/index.ts +0 -1
- package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
- package/src/utils/useLicenseExpirationWarning.ts +18 -18
- 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.1-MON-
|
|
3
|
+
"version": "23.10.1-MON-integrate-cypress-code-coverage.0",
|
|
4
4
|
"description": "Centreon UI Components",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"eslint": "eslint ./src --ext .js,.jsx,.ts,.tsx --max-warnings 0",
|
|
@@ -73,13 +73,13 @@
|
|
|
73
73
|
"@testing-library/react-hooks": "^8.0.1",
|
|
74
74
|
"@types/cypress": "^1.1.3",
|
|
75
75
|
"@types/jest": "^27.5.0",
|
|
76
|
-
"@types/ramda": "^0.
|
|
76
|
+
"@types/ramda": "^0.29.6",
|
|
77
77
|
"@types/react": "^18.0.26",
|
|
78
78
|
"@types/testing-library__jest-dom": "^5.14.6",
|
|
79
79
|
"@vitejs/plugin-react": "^4.0.0",
|
|
80
80
|
"@vitejs/plugin-react-swc": "^3.3.0",
|
|
81
81
|
"axios-mock-adapter": "^1.21.4",
|
|
82
|
-
"cypress": "^
|
|
82
|
+
"cypress": "^13.3.1",
|
|
83
83
|
"identity-obj-proxy": "^3.0.0",
|
|
84
84
|
"jest-transform-stub": "^2.0.0",
|
|
85
85
|
"mochawesome": "^7.1.3",
|
|
@@ -101,12 +101,13 @@
|
|
|
101
101
|
"vite-plugin-turbosnap": "^1.0.2"
|
|
102
102
|
},
|
|
103
103
|
"dependencies": {
|
|
104
|
-
"@lexical/
|
|
105
|
-
"@lexical/
|
|
106
|
-
"@lexical/
|
|
107
|
-
"@lexical/
|
|
108
|
-
"@lexical/
|
|
109
|
-
"@lexical/
|
|
104
|
+
"@lexical/html": "^0.12.2",
|
|
105
|
+
"@lexical/link": "^0.12.2",
|
|
106
|
+
"@lexical/list": "^0.12.2",
|
|
107
|
+
"@lexical/react": "^0.12.2",
|
|
108
|
+
"@lexical/rich-text": "^0.12.2",
|
|
109
|
+
"@lexical/selection": "^0.12.2",
|
|
110
|
+
"@lexical/utils": "^0.12.2",
|
|
110
111
|
"@react-spring/web": "9.6.0",
|
|
111
112
|
"@visx/curve": "^2.1.0",
|
|
112
113
|
"@visx/group": "^3.3.0",
|
|
@@ -118,8 +119,9 @@
|
|
|
118
119
|
"anylogger": "^1.0.11",
|
|
119
120
|
"d3-array": "3.2.0",
|
|
120
121
|
"humanize-duration": "^3.27.3",
|
|
121
|
-
"lexical": "0.
|
|
122
|
-
"notistack": "^
|
|
122
|
+
"lexical": "^0.12.2",
|
|
123
|
+
"notistack": "^3.0.1",
|
|
124
|
+
"ramda": "0.29.1",
|
|
123
125
|
"react-grid-layout": "^1.3.4",
|
|
124
126
|
"react-html-parser": "^2.0.2",
|
|
125
127
|
"react-resizable": "^3.0.5",
|
|
@@ -135,7 +137,7 @@
|
|
|
135
137
|
"@mui/icons-material": "5.x",
|
|
136
138
|
"@mui/material": "5.x",
|
|
137
139
|
"@mui/styles": "5.x",
|
|
138
|
-
"@tanstack/react-query": "
|
|
140
|
+
"@tanstack/react-query": "5.x",
|
|
139
141
|
"axios": "0.x",
|
|
140
142
|
"dayjs": "1.x",
|
|
141
143
|
"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'
|
|
19
|
-
[propEq('succeeded'
|
|
20
|
-
[propEq('loading'
|
|
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
|
|
|
@@ -92,13 +92,7 @@ export const useDashboardItemStyles = makeStyles<{ hasHeader: boolean }>()(
|
|
|
92
92
|
'&[data-canMove="true"]': {
|
|
93
93
|
cursor: 'move'
|
|
94
94
|
},
|
|
95
|
-
padding: theme.spacing(0.5, 2)
|
|
96
|
-
position: 'relative'
|
|
97
|
-
},
|
|
98
|
-
widgetHeaderDraggable: {
|
|
99
|
-
height: '100%',
|
|
100
|
-
position: 'absolute',
|
|
101
|
-
width: '100%'
|
|
95
|
+
padding: theme.spacing(0.5, 2)
|
|
102
96
|
},
|
|
103
97
|
widgetPadding: {
|
|
104
98
|
overflowX: 'auto',
|
package/src/Dashboard/Item.tsx
CHANGED
|
@@ -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,
|
|
@@ -72,12 +72,12 @@ const Item = forwardRef(
|
|
|
72
72
|
data-padding={!disablePadding}
|
|
73
73
|
>
|
|
74
74
|
{header && (
|
|
75
|
-
<div
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
<div
|
|
76
|
+
{...listeners}
|
|
77
|
+
className={classes.widgetHeader}
|
|
78
|
+
data-canMove={canMove}
|
|
79
|
+
data-testid={`${id}_move_panel`}
|
|
80
|
+
>
|
|
81
81
|
{header}
|
|
82
82
|
</div>
|
|
83
83
|
)}
|
package/src/Dashboard/Layout.tsx
CHANGED
|
@@ -23,7 +23,7 @@ interface DashboardLayoutProps<T> {
|
|
|
23
23
|
layout: Array<T>;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
const
|
|
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
|
|
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 = (
|
|
101
|
+
export const transformFileListToArray = (
|
|
102
|
+
files: FileList | null
|
|
103
|
+
): Array<File> =>
|
|
102
104
|
isNil(files)
|
|
103
105
|
? []
|
|
104
106
|
: (Array(files.length)
|
|
@@ -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'
|
|
188
|
+
? R.find(R.propEq(groupName, 'name'), groups)
|
|
189
189
|
: ({} as Group);
|
|
190
190
|
|
|
191
191
|
const isFirstElement = areGroupsOpen || R.equals(index, 0);
|
|
@@ -140,7 +140,21 @@ export const RawValue: Story = {
|
|
|
140
140
|
data: dataLastWeek,
|
|
141
141
|
displayAsRaw: true,
|
|
142
142
|
thresholdTooltipLabels: ['Warning', 'Critical'],
|
|
143
|
-
thresholds:
|
|
143
|
+
thresholds: {
|
|
144
|
+
critical: [
|
|
145
|
+
{
|
|
146
|
+
label: 'Critical',
|
|
147
|
+
value: 0.6
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
enabled: true,
|
|
151
|
+
warning: [
|
|
152
|
+
{
|
|
153
|
+
label: 'Warning',
|
|
154
|
+
value: 0.5
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
144
158
|
},
|
|
145
159
|
render: Template
|
|
146
160
|
};
|
|
@@ -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
|
-
}:
|
|
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(
|
|
134
|
-
element
|
|
135
|
-
|
|
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:
|
|
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'
|
|
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
|
-
}:
|
|
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
|
-
|
|
48
|
-
})`;
|
|
46
|
+
const content = `${truncate(event.content)} (${t(labelBy)} ${event.contact
|
|
47
|
+
?.name})`;
|
|
49
48
|
|
|
50
49
|
return (
|
|
51
50
|
<g>
|
|
@@ -27,15 +27,15 @@ interface Props {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
const useLegend = ({ lines, setLinesGraph }: Props): LegendActions => {
|
|
30
|
-
const displayedLines = reject(propEq('display'
|
|
30
|
+
const displayedLines = reject(propEq(false, 'display'), lines);
|
|
31
31
|
const getLineByMetric = (metric_id: number): Line =>
|
|
32
|
-
find(propEq(
|
|
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(
|
|
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(
|
|
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(
|
|
96
|
+
display: find(propEq(line.metric_id, 'metric_id'), lines)?.display ?? true
|
|
97
97
|
}));
|
|
98
98
|
|
|
99
99
|
setLinesGraph(newLines);
|
|
@@ -69,21 +69,24 @@ export const getDescription = ({ sections }: Description): string => {
|
|
|
69
69
|
})}<br></details>`;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
const formattedProps = props.reduce(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
if (!equals(index, props.length - 1)) {
|
|
83
|
+
return body;
|
|
84
|
+
}
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
|
|
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'
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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 SortableListContent = ({
|
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
const itemIndex = findIndex(propEq(
|
|
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(
|
|
80
|
+
const index = findIndex(propEq(id, 'id'), values);
|
|
81
81
|
|
|
82
82
|
const newSelectedValues = remove(index, 1, values);
|
|
83
83
|
|
|
@@ -53,27 +53,24 @@ const MultiAutocompleteField = ({
|
|
|
53
53
|
const { classes } = useStyles();
|
|
54
54
|
|
|
55
55
|
const renderTags = (renderedValue, getTagProps): Array<JSX.Element> =>
|
|
56
|
-
renderedValue.map((option, index) =>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
classes
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
</Tooltip>
|
|
75
|
-
);
|
|
76
|
-
});
|
|
56
|
+
renderedValue.map((option, index) => (
|
|
57
|
+
<Tooltip
|
|
58
|
+
key={option.id}
|
|
59
|
+
placement="top"
|
|
60
|
+
title={getOptionTooltipLabel?.(option)}
|
|
61
|
+
>
|
|
62
|
+
<Chip
|
|
63
|
+
classes={{
|
|
64
|
+
deleteIcon: classes.deleteIcon,
|
|
65
|
+
root: classes.tag
|
|
66
|
+
}}
|
|
67
|
+
label={getTagLabel(option)}
|
|
68
|
+
size="medium"
|
|
69
|
+
{...getTagProps({ index })}
|
|
70
|
+
{...chipProps}
|
|
71
|
+
/>
|
|
72
|
+
</Tooltip>
|
|
73
|
+
));
|
|
77
74
|
|
|
78
75
|
const getLimitTagsText = (more): JSX.Element => <Option>{`+${more}`}</Option>;
|
|
79
76
|
|
|
@@ -73,14 +73,14 @@ const IconPopoverMultiAutocomplete = ({
|
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
const isSelected = (id: number | string): boolean => {
|
|
76
|
-
return pipe(find(propEq(
|
|
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(
|
|
83
|
+
? reject(propEq(id, 'id'), value)
|
|
84
84
|
: [...value, option];
|
|
85
85
|
|
|
86
86
|
onChange(updatedValue);
|