@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.
- package/package.json +16 -12
- package/src/Button/Save/StartIcon.tsx +3 -3
- package/src/Dashboard/Item.tsx +1 -1
- 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/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/LineChart.tsx +5 -2
- 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/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.stories.tsx +12 -1
- package/src/Listing/index.tsx +1 -1
- package/src/RichTextEditor/RichTextEditor.cypress.spec.tsx +100 -52
- package/src/RichTextEditor/RichTextEditor.tsx +21 -4
- package/src/RichTextEditor/plugins/ToolbarPlugin/AlignPicker.tsx +21 -20
- package/src/RichTextEditor/plugins/ToolbarPlugin/BlockButtons.tsx +35 -77
- package/src/RichTextEditor/plugins/ToolbarPlugin/FormatButtons.tsx +29 -83
- package/src/RichTextEditor/plugins/ToolbarPlugin/LinkButton.tsx +106 -0
- package/src/RichTextEditor/plugins/ToolbarPlugin/ListButton.tsx +155 -0
- package/src/RichTextEditor/plugins/ToolbarPlugin/MacrosButton.tsx +23 -39
- package/src/RichTextEditor/plugins/ToolbarPlugin/ToolbarPlugin.styles.ts +24 -14
- package/src/RichTextEditor/plugins/ToolbarPlugin/UndoRedoButtons.tsx +6 -0
- package/src/RichTextEditor/plugins/ToolbarPlugin/index.tsx +5 -10
- package/src/RichTextEditor/translatedLabels.ts +3 -0
- 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/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/DataTable/Item/DataTableItem.tsx +2 -2
- package/src/components/Form/AccessRights/__fixtures__/contactAccessRight.mock.ts +2 -0
- package/src/components/Form/AccessRights/useAccessRightsForm.utils.ts +1 -1
- package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
- package/src/components/ItemComposition/ItemComposition.tsx +4 -2
- package/src/components/Menu/Button/MenuButton.tsx +4 -2
- package/src/components/Menu/MenuItem.tsx +5 -3
- package/src/components/Menu/MenuItems.tsx +4 -3
- 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/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
- package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
- 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.
|
|
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.
|
|
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": "^
|
|
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/
|
|
105
|
-
"@lexical/
|
|
106
|
-
"@lexical/
|
|
107
|
-
"@lexical/
|
|
108
|
-
"@lexical/
|
|
109
|
-
"@lexical/
|
|
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.
|
|
122
|
-
"notistack": "^
|
|
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": "
|
|
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'
|
|
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
|
|
package/src/Dashboard/Item.tsx
CHANGED
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);
|
|
@@ -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);
|
|
@@ -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 =
|
|
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(
|
|
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
|
|
|
@@ -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);
|
|
@@ -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(
|
|
72
|
+
return options.find(propEq(id, 'id')) as SelectEntry;
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
const changeOption = (event): void => {
|
|
@@ -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
|
};
|