@centreon/ui 24.4.46 → 24.4.48
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 -23
- package/public/mockServiceWorker.js +1 -1
- package/src/Button/Icon/index.tsx +1 -1
- package/src/Button/Save/StartIcon.tsx +3 -3
- package/src/Button/Save/index.tsx +5 -9
- package/src/Checkbox/Checkbox.tsx +2 -2
- package/src/Checkbox/CheckboxGroup/index.tsx +2 -2
- package/src/Dashboard/Item.tsx +1 -1
- package/src/Dashboard/Layout.tsx +2 -2
- package/src/Dialog/index.tsx +1 -1
- package/src/FallbackPage/FallbackPage.tsx +3 -3
- package/src/FileDropZone/index.tsx +1 -3
- package/src/Form/Inputs/CheckboxGroup.tsx +4 -1
- package/src/Form/Inputs/index.tsx +1 -3
- package/src/Form/Inputs/models.ts +1 -9
- package/src/Graph/Gauge/Gauge.tsx +1 -1
- package/src/Graph/HeatMap/HeatMap.stories.tsx +25 -0
- package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +2 -8
- package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
- package/src/Graph/LineChart/BasicComponents/Lines/Threshold/index.tsx +4 -5
- 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 +3 -2
- package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
- package/src/Graph/LineChart/Legend/Legend.styles.ts +1 -1
- package/src/Graph/LineChart/Legend/LegendHeader.tsx +1 -1
- package/src/Graph/LineChart/Legend/useInteractiveValues.ts +2 -2
- package/src/Graph/LineChart/Legend/useLegend.ts +3 -3
- package/src/Graph/LineChart/helpers/doc.ts +13 -16
- package/src/Graph/LineChart/helpers/index.ts +1 -1
- package/src/Graph/LineChart/index.stories.tsx +2 -4
- package/src/Graph/LineChart/index.tsx +1 -1
- package/src/Graph/SingleBar/Thresholds.tsx +2 -2
- package/src/Graph/Text/Text.stories.tsx +4 -60
- package/src/Graph/Text/Text.tsx +1 -1
- package/src/Graph/common/timeSeries/index.ts +14 -22
- package/src/Graph/common/utils.ts +0 -19
- package/src/Graph/index.ts +0 -3
- package/src/InputField/Select/Autocomplete/Connected/index.tsx +7 -10
- 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/index.tsx +115 -121
- package/src/InputField/Select/IconPopover/index.tsx +2 -2
- package/src/InputField/Select/index.tsx +1 -1
- package/src/InputField/Text/index.tsx +2 -2
- package/src/Listing/ActionBar/index.tsx +8 -9
- package/src/Listing/Cell/DataCell.styles.ts +0 -3
- package/src/Listing/Cell/DataCell.tsx +5 -23
- package/src/Listing/Header/ListingHeader.tsx +1 -1
- package/src/Listing/Listing.cypress.spec.tsx +4 -80
- package/src/Listing/Listing.styles.ts +7 -4
- package/src/Listing/index.stories.tsx +3 -37
- package/src/Listing/index.test.tsx +1 -1
- package/src/Listing/index.tsx +3 -4
- package/src/Listing/models.ts +0 -1
- package/src/Module/index.tsx +4 -2
- package/src/RichTextEditor/RichTextEditor.tsx +1 -12
- package/src/SortableItems/index.tsx +7 -2
- package/src/ThemeProvider/index.tsx +0 -24
- package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +7 -6
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +3 -8
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +2 -0
- package/src/TimePeriods/DateTimePickerInput.tsx +19 -56
- package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +9 -12
- package/src/TimePeriods/TimePeriods.cypress.spec.tsx +33 -9
- package/src/TimePeriods/helpers/index.ts +1 -1
- package/src/TimePeriods/index.stories.tsx +4 -12
- 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 +23 -27
- package/src/api/useMutationQuery/index.test.ts +4 -4
- package/src/api/useMutationQuery/index.ts +25 -60
- package/src/components/Button/Icon/IconButton.tsx +2 -6
- package/src/components/DataTable/DataTable.stories.tsx +0 -40
- package/src/components/DataTable/DataTable.styles.ts +0 -3
- package/src/components/DataTable/DataTable.tsx +3 -3
- package/src/components/DataTable/Item/DataTableItem.styles.ts +2 -7
- package/src/components/DataTable/Item/DataTableItem.tsx +4 -4
- package/src/components/DataTable/index.ts +1 -3
- package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +3 -3
- package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +0 -1
- package/src/components/Form/Dashboard/DashboardForm.tsx +12 -15
- package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
- package/src/components/Layout/PageLayout/PageLayoutActions.tsx +0 -1
- package/src/components/Layout/PageLayout/PageLayoutBody.tsx +0 -1
- package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +1 -5
- package/src/components/Layout/PageLayout/index.ts +1 -3
- package/src/components/Modal/Modal.styles.ts +1 -1
- package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
- package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
- package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
- package/src/index.ts +2 -2
- package/src/queryParameters/url/index.ts +1 -5
- package/src/screens/dashboard/DashboardsDetail.stories.tsx +108 -0
- package/src/screens/dashboard/DashboardsOverview.stories.tsx +281 -0
- package/src/utils/index.ts +1 -1
- package/src/utils/useDateTimePickerAdapter.ts +309 -0
- package/src/utils/useFullscreen/useFullscreenListener.ts +7 -10
- package/src/utils/{useLicenseExpirationWarning.test.tsx → useLicenseExpirationWarning.cypress.spec.tsx} +37 -48
- package/src/utils/useLicenseExpirationWarning.ts +18 -18
- package/src/Form/Form.cypress.spec.tsx +0 -133
- package/src/Form/Inputs/List/Content.tsx +0 -62
- package/src/Form/Inputs/List/List.styles.ts +0 -29
- package/src/Form/Inputs/List/List.tsx +0 -58
- package/src/Form/Inputs/List/useList.ts +0 -81
- package/src/Graph/BarStack/BarStack.cypress.spec.tsx +0 -154
- package/src/Graph/BarStack/BarStack.stories.tsx +0 -123
- package/src/Graph/BarStack/BarStack.styles.ts +0 -36
- package/src/Graph/BarStack/BarStack.tsx +0 -14
- package/src/Graph/BarStack/ResponsiveBarStack.tsx +0 -208
- package/src/Graph/BarStack/index.ts +0 -1
- package/src/Graph/BarStack/models.ts +0 -19
- package/src/Graph/BarStack/useResponsiveBarStack.ts +0 -139
- package/src/Graph/Gauge/Gauge.cypress.spec.tsx +0 -102
- package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +0 -145
- package/src/Graph/Legend/Legend.tsx +0 -21
- package/src/Graph/Legend/index.ts +0 -1
- package/src/Graph/Legend/models.ts +0 -11
- package/src/Graph/PieChart/PieChart.cypress.spec.tsx +0 -169
- package/src/Graph/PieChart/PieChart.stories.tsx +0 -194
- package/src/Graph/PieChart/PieChart.styles.ts +0 -39
- package/src/Graph/PieChart/PieChart.tsx +0 -14
- package/src/Graph/PieChart/ResponsivePie.tsx +0 -251
- package/src/Graph/PieChart/index.ts +0 -1
- package/src/Graph/PieChart/models.ts +0 -19
- package/src/Graph/PieChart/useResponsivePie.ts +0 -86
- package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +0 -121
- package/src/Graph/Text/Text.cypress.spec.tsx +0 -101
- package/src/Graph/common/testUtils.ts +0 -71
- package/src/Graph/translatedLabels.ts +0 -1
- package/src/Module/Module.cypress.spec.tsx +0 -129
- package/src/components/DataTable/DataListing.tsx +0 -6
- package/src/components/DataTable/DataTable.cypress.spec.tsx +0 -193
- package/src/components/Layout/PageLayout/PageQuickAccess.tsx +0 -76
- package/src/components/Layout/PageLayout.cypress.spec.tsx +0 -66
- package/src/utils/usePluralizedTranslation.ts +0 -21
|
@@ -39,7 +39,8 @@ import { Interval, ThresholdType, TooltipData } from './models';
|
|
|
39
39
|
import WrapperLineChart from './index';
|
|
40
40
|
|
|
41
41
|
const meta: Meta<typeof WrapperLineChart> = {
|
|
42
|
-
component: WrapperLineChart
|
|
42
|
+
component: WrapperLineChart,
|
|
43
|
+
tags: ['autodocs']
|
|
43
44
|
};
|
|
44
45
|
export default meta;
|
|
45
46
|
|
|
@@ -352,9 +353,6 @@ export const LineChartWithTimePeriod: Story = {
|
|
|
352
353
|
end: defaultEnd,
|
|
353
354
|
height: 500,
|
|
354
355
|
start: defaultStart
|
|
355
|
-
},
|
|
356
|
-
parameters: {
|
|
357
|
-
chromatic: { diffThreshold: 0.1 }
|
|
358
356
|
}
|
|
359
357
|
};
|
|
360
358
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Thresholds
|
|
1
|
+
import { Thresholds } 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: Thresholds;
|
|
12
12
|
xScale: (value: number) => number;
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -24,21 +24,7 @@ export const success: Story = {
|
|
|
24
24
|
critical: 'Critical',
|
|
25
25
|
warning: 'Warning'
|
|
26
26
|
},
|
|
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
|
-
}
|
|
27
|
+
thresholds: [0.5, 1.5]
|
|
42
28
|
},
|
|
43
29
|
render: Template
|
|
44
30
|
};
|
|
@@ -50,21 +36,7 @@ export const warning: Story = {
|
|
|
50
36
|
critical: 'Critical',
|
|
51
37
|
warning: 'Warning'
|
|
52
38
|
},
|
|
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
|
-
}
|
|
39
|
+
thresholds: [0.2, 0.5]
|
|
68
40
|
},
|
|
69
41
|
render: Template
|
|
70
42
|
};
|
|
@@ -76,21 +48,7 @@ export const critical: Story = {
|
|
|
76
48
|
critical: 'Critical',
|
|
77
49
|
warning: 'Warning'
|
|
78
50
|
},
|
|
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
|
-
}
|
|
51
|
+
thresholds: [0.13, 0.35]
|
|
94
52
|
},
|
|
95
53
|
render: Template
|
|
96
54
|
};
|
|
@@ -103,21 +61,7 @@ export const rawValue: Story = {
|
|
|
103
61
|
critical: 'Critical',
|
|
104
62
|
warning: 'Warning'
|
|
105
63
|
},
|
|
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
|
-
}
|
|
64
|
+
thresholds: [0.5, 1.5]
|
|
121
65
|
},
|
|
122
66
|
render: Template
|
|
123
67
|
};
|
package/src/Graph/Text/Text.tsx
CHANGED
|
@@ -179,7 +179,7 @@ const getMetricValuesForUnit = ({
|
|
|
179
179
|
) as Array<number>;
|
|
180
180
|
|
|
181
181
|
return pipe(
|
|
182
|
-
filter(propEq(unit,
|
|
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,
|
|
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,
|
|
278
|
+
pipe(getSortedStackedLines, any(propEq('unit', unit)))(lines);
|
|
279
279
|
|
|
280
280
|
const getTimeSeriesForLines = ({
|
|
281
281
|
lines,
|
|
@@ -476,7 +476,15 @@ const registerMsUnitToNumeral = (): null => {
|
|
|
476
476
|
|
|
477
477
|
registerMsUnitToNumeral();
|
|
478
478
|
|
|
479
|
-
const
|
|
479
|
+
const formatMetricValue = ({
|
|
480
|
+
value,
|
|
481
|
+
unit,
|
|
482
|
+
base = 1000
|
|
483
|
+
}: FormatMetricValueProps): string | null => {
|
|
484
|
+
if (isNil(value)) {
|
|
485
|
+
return null;
|
|
486
|
+
}
|
|
487
|
+
|
|
480
488
|
const base2Units = [
|
|
481
489
|
'B',
|
|
482
490
|
'bytes',
|
|
@@ -489,19 +497,7 @@ const getBase1024 = ({ unit, base }): boolean => {
|
|
|
489
497
|
'b'
|
|
490
498
|
];
|
|
491
499
|
|
|
492
|
-
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
const formatMetricValue = ({
|
|
496
|
-
value,
|
|
497
|
-
unit,
|
|
498
|
-
base = 1000
|
|
499
|
-
}: FormatMetricValueProps): string | null => {
|
|
500
|
-
if (isNil(value)) {
|
|
501
|
-
return null;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
const base1024 = getBase1024({ base, unit });
|
|
500
|
+
const base1024 = base2Units.includes(unit) || Number(base) === 1024;
|
|
505
501
|
|
|
506
502
|
const formatSuffix = cond([
|
|
507
503
|
[equals('ms'), always(' ms')],
|
|
@@ -529,8 +525,6 @@ const formatMetricValueWithUnit = ({
|
|
|
529
525
|
return null;
|
|
530
526
|
}
|
|
531
527
|
|
|
532
|
-
const base1024 = getBase1024({ base, unit });
|
|
533
|
-
|
|
534
528
|
if (isRaw) {
|
|
535
529
|
const unitText = equals('%', unit) ? unit : ` ${unit}`;
|
|
536
530
|
|
|
@@ -543,9 +537,7 @@ const formatMetricValueWithUnit = ({
|
|
|
543
537
|
|
|
544
538
|
const formattedMetricValue = formatMetricValue({ base, unit, value });
|
|
545
539
|
|
|
546
|
-
return
|
|
547
|
-
? formattedMetricValue
|
|
548
|
-
: `${formattedMetricValue} ${unit}`;
|
|
540
|
+
return formattedMetricValue;
|
|
549
541
|
};
|
|
550
542
|
|
|
551
543
|
const getStackedYScale = ({
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
lte,
|
|
12
12
|
pluck
|
|
13
13
|
} from 'ramda';
|
|
14
|
-
import numeral from 'numeral';
|
|
15
14
|
|
|
16
15
|
import { Theme } from '@mui/material';
|
|
17
16
|
|
|
@@ -74,21 +73,3 @@ export const getColorFromDataAndTresholds = ({
|
|
|
74
73
|
[T, always(theme.palette.error.main)]
|
|
75
74
|
])(data);
|
|
76
75
|
};
|
|
77
|
-
|
|
78
|
-
interface ValueByUnitProps {
|
|
79
|
-
total: number;
|
|
80
|
-
unit: 'percentage' | 'number';
|
|
81
|
-
value: number;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export const getValueByUnit = ({
|
|
85
|
-
unit,
|
|
86
|
-
value,
|
|
87
|
-
total
|
|
88
|
-
}: ValueByUnitProps): string => {
|
|
89
|
-
if (equals(unit, 'number')) {
|
|
90
|
-
return numeral(value).format('0a').toUpperCase();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return `${((value * 100) / total).toFixed(1)}%`;
|
|
94
|
-
};
|
package/src/Graph/index.ts
CHANGED
|
@@ -2,7 +2,4 @@ export { default as LineChart } from './LineChart';
|
|
|
2
2
|
export { Gauge } from './Gauge';
|
|
3
3
|
export { SingleBar } from './SingleBar';
|
|
4
4
|
export { Text as GraphText } from './Text';
|
|
5
|
-
|
|
6
5
|
export { HeatMap } from './HeatMap';
|
|
7
|
-
export { BarStack } from './BarStack';
|
|
8
|
-
export { PieChart } from './PieChart';
|
|
@@ -292,16 +292,13 @@ const ConnectedAutocompleteField = (
|
|
|
292
292
|
}
|
|
293
293
|
}, [optionsOpen]);
|
|
294
294
|
|
|
295
|
-
useEffect(
|
|
296
|
-
(
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
},
|
|
303
|
-
useDeepCompare([searchConditions])
|
|
304
|
-
);
|
|
295
|
+
useEffect(() => {
|
|
296
|
+
setSearchParameter(
|
|
297
|
+
!isEmpty(searchConditions)
|
|
298
|
+
? { conditions: searchConditions }
|
|
299
|
+
: undefined
|
|
300
|
+
);
|
|
301
|
+
}, useDeepCompare([searchConditions]));
|
|
305
302
|
|
|
306
303
|
useEffect(() => {
|
|
307
304
|
if (!autocompleteChangedValue && !props?.value) {
|
|
@@ -49,7 +49,7 @@ const SortableListContent = ({
|
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
const itemIndex = findIndex(propEq(id,
|
|
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,
|
|
80
|
+
const index = findIndex(propEq('id', id), values);
|
|
81
81
|
|
|
82
82
|
const newSelectedValues = remove(index, 1, values);
|
|
83
83
|
|
|
@@ -141,132 +141,126 @@ type Multiple = boolean;
|
|
|
141
141
|
type DisableClearable = boolean;
|
|
142
142
|
type FreeSolo = boolean;
|
|
143
143
|
|
|
144
|
-
const AutocompleteField =
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
): JSX.Element => {
|
|
169
|
-
const { classes, cx } = useStyles({ hideInput });
|
|
170
|
-
const { t } = useTranslation();
|
|
171
|
-
const theme = useTheme();
|
|
144
|
+
const AutocompleteField = ({
|
|
145
|
+
options,
|
|
146
|
+
label,
|
|
147
|
+
placeholder,
|
|
148
|
+
loading = false,
|
|
149
|
+
onTextChange = (): void => undefined,
|
|
150
|
+
endAdornment = undefined,
|
|
151
|
+
inputValue,
|
|
152
|
+
displayOptionThumbnail = false,
|
|
153
|
+
required = false,
|
|
154
|
+
error,
|
|
155
|
+
displayPopupIcon = true,
|
|
156
|
+
autoFocus = false,
|
|
157
|
+
hideInput = false,
|
|
158
|
+
dataTestId,
|
|
159
|
+
autoSize = false,
|
|
160
|
+
autoSizeDefaultWidth = 0,
|
|
161
|
+
autoSizeCustomPadding,
|
|
162
|
+
getOptionItemLabel = (option) => option.name,
|
|
163
|
+
...autocompleteProps
|
|
164
|
+
}: Props): JSX.Element => {
|
|
165
|
+
const { classes, cx } = useStyles({ hideInput });
|
|
166
|
+
const { t } = useTranslation();
|
|
167
|
+
const theme = useTheme();
|
|
172
168
|
|
|
173
|
-
|
|
174
|
-
|
|
169
|
+
const areSelectEntriesEqual = (option, value): boolean => {
|
|
170
|
+
const identifyingProps = ['id', 'name'];
|
|
175
171
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
);
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
const renderInput = (params): JSX.Element => (
|
|
183
|
-
<TextField
|
|
184
|
-
{...params}
|
|
185
|
-
InputLabelProps={{
|
|
186
|
-
classes: {
|
|
187
|
-
marginDense: classes.inputLabel,
|
|
188
|
-
shrink: classes.inputLabelShrink
|
|
189
|
-
}
|
|
190
|
-
}}
|
|
191
|
-
InputProps={{
|
|
192
|
-
...params.InputProps,
|
|
193
|
-
endAdornment: (
|
|
194
|
-
<>
|
|
195
|
-
{endAdornment && (
|
|
196
|
-
<InputAdornment position="end">{endAdornment}</InputAdornment>
|
|
197
|
-
)}
|
|
198
|
-
{params.InputProps.endAdornment}
|
|
199
|
-
</>
|
|
200
|
-
),
|
|
201
|
-
style: {
|
|
202
|
-
background: 'transparent',
|
|
203
|
-
paddingRight: theme.spacing(5)
|
|
204
|
-
}
|
|
205
|
-
}}
|
|
206
|
-
autoFocus={autoFocus}
|
|
207
|
-
autoSize={autoSize}
|
|
208
|
-
autoSizeCustomPadding={7 + (autoSizeCustomPadding || 0)}
|
|
209
|
-
autoSizeDefaultWidth={autoSizeDefaultWidth}
|
|
210
|
-
classes={{
|
|
211
|
-
root: classes.textfield
|
|
212
|
-
}}
|
|
213
|
-
error={error}
|
|
214
|
-
externalValueForAutoSize={autocompleteProps?.value?.name}
|
|
215
|
-
inputProps={{
|
|
216
|
-
...params.inputProps,
|
|
217
|
-
'aria-label': label,
|
|
218
|
-
'data-testid': dataTestId || label,
|
|
219
|
-
id: getNormalizedId(label || '')
|
|
220
|
-
}}
|
|
221
|
-
label={label}
|
|
222
|
-
placeholder={isNil(placeholder) ? t(searchLabel) : placeholder}
|
|
223
|
-
required={required}
|
|
224
|
-
value={inputValue || undefined}
|
|
225
|
-
onChange={onTextChange}
|
|
226
|
-
/>
|
|
172
|
+
return equals(
|
|
173
|
+
pick(identifyingProps, option),
|
|
174
|
+
pick(identifyingProps, value)
|
|
227
175
|
);
|
|
176
|
+
};
|
|
228
177
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
178
|
+
const renderInput = (params): JSX.Element => (
|
|
179
|
+
<TextField
|
|
180
|
+
{...params}
|
|
181
|
+
InputLabelProps={{
|
|
182
|
+
classes: {
|
|
183
|
+
marginDense: classes.inputLabel,
|
|
184
|
+
shrink: classes.inputLabelShrink
|
|
185
|
+
}
|
|
186
|
+
}}
|
|
187
|
+
InputProps={{
|
|
188
|
+
...params.InputProps,
|
|
189
|
+
endAdornment: (
|
|
190
|
+
<>
|
|
191
|
+
{endAdornment && (
|
|
192
|
+
<InputAdornment position="end">{endAdornment}</InputAdornment>
|
|
193
|
+
)}
|
|
194
|
+
{params.InputProps.endAdornment}
|
|
195
|
+
</>
|
|
196
|
+
),
|
|
197
|
+
style: {
|
|
198
|
+
background: 'transparent',
|
|
199
|
+
paddingRight: theme.spacing(5)
|
|
244
200
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
201
|
+
}}
|
|
202
|
+
autoFocus={autoFocus}
|
|
203
|
+
autoSize={autoSize}
|
|
204
|
+
autoSizeCustomPadding={7 + (autoSizeCustomPadding || 0)}
|
|
205
|
+
autoSizeDefaultWidth={autoSizeDefaultWidth}
|
|
206
|
+
classes={{
|
|
207
|
+
root: classes.textfield
|
|
208
|
+
}}
|
|
209
|
+
error={error}
|
|
210
|
+
externalValueForAutoSize={autocompleteProps?.value?.name}
|
|
211
|
+
inputProps={{
|
|
212
|
+
...params.inputProps,
|
|
213
|
+
'aria-label': label,
|
|
214
|
+
'data-testid': dataTestId || label,
|
|
215
|
+
id: getNormalizedId(label || '')
|
|
216
|
+
}}
|
|
217
|
+
label={label}
|
|
218
|
+
placeholder={isNil(placeholder) ? t(searchLabel) : placeholder}
|
|
219
|
+
required={required}
|
|
220
|
+
value={inputValue || undefined}
|
|
221
|
+
onChange={onTextChange}
|
|
222
|
+
/>
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
return (
|
|
226
|
+
<Autocomplete
|
|
227
|
+
disableClearable
|
|
228
|
+
classes={{
|
|
229
|
+
groupLabel: classes.inputLabel,
|
|
230
|
+
inputRoot: cx([
|
|
231
|
+
classes.input,
|
|
232
|
+
label ? classes.inputWithLabel : classes.inputWithoutLabel
|
|
233
|
+
]),
|
|
234
|
+
popper: classes.popper,
|
|
235
|
+
root: classes.textfield
|
|
236
|
+
}}
|
|
237
|
+
forcePopupIcon={displayPopupIcon}
|
|
238
|
+
getOptionLabel={(option): string =>
|
|
239
|
+
(option as SelectEntry)?.name?.toString() || ''
|
|
240
|
+
}
|
|
241
|
+
isOptionEqualToValue={areSelectEntriesEqual}
|
|
242
|
+
loading={loading}
|
|
243
|
+
loadingText={<LoadingIndicator />}
|
|
244
|
+
options={options}
|
|
245
|
+
renderInput={renderInput}
|
|
246
|
+
renderOption={(props, option): JSX.Element => {
|
|
247
|
+
return (
|
|
248
|
+
<li
|
|
249
|
+
className={classes.options}
|
|
250
|
+
{...(props as React.HTMLAttributes<HTMLLIElement>)}
|
|
251
|
+
>
|
|
252
|
+
<Option
|
|
253
|
+
thumbnailUrl={displayOptionThumbnail ? option.url : undefined}
|
|
256
254
|
>
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
/>
|
|
268
|
-
);
|
|
269
|
-
}
|
|
270
|
-
);
|
|
255
|
+
{getOptionItemLabel(option)}
|
|
256
|
+
</Option>
|
|
257
|
+
</li>
|
|
258
|
+
);
|
|
259
|
+
}}
|
|
260
|
+
size="small"
|
|
261
|
+
{...autocompleteProps}
|
|
262
|
+
/>
|
|
263
|
+
);
|
|
264
|
+
};
|
|
271
265
|
|
|
272
266
|
export default AutocompleteField;
|
|
@@ -73,14 +73,14 @@ const IconPopoverMultiAutocomplete = ({
|
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
const isSelected = (id: number | string): boolean => {
|
|
76
|
-
return pipe(find(propEq(id,
|
|
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,
|
|
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,
|
|
72
|
+
return options.find(propEq('id', id)) as SelectEntry;
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
const changeOption = (event): void => {
|
|
@@ -154,9 +154,9 @@ const TextField = forwardRef(
|
|
|
154
154
|
helperText={displayErrorInTooltip ? undefined : error}
|
|
155
155
|
id={getNormalizedId(dataTestId || '')}
|
|
156
156
|
inputProps={{
|
|
157
|
+
...rest.inputProps,
|
|
157
158
|
'aria-label': ariaLabel,
|
|
158
|
-
'data-testid': dataTestId
|
|
159
|
-
...rest.inputProps
|
|
159
|
+
'data-testid': dataTestId
|
|
160
160
|
}}
|
|
161
161
|
label={label}
|
|
162
162
|
ref={ref}
|
|
@@ -174,15 +174,14 @@ const MemoListingActionBar = ({
|
|
|
174
174
|
</IconButton>
|
|
175
175
|
)}
|
|
176
176
|
<div className={classes.ModeViewer} />
|
|
177
|
-
{columnConfiguration?.selectedColumnIds &&
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
)}
|
|
177
|
+
{columnConfiguration?.selectedColumnIds && (
|
|
178
|
+
<ColumnMultiSelect
|
|
179
|
+
columnConfiguration={columnConfiguration}
|
|
180
|
+
columns={columns}
|
|
181
|
+
onResetColumns={onResetColumns}
|
|
182
|
+
onSelectColumns={onSelectColumns}
|
|
183
|
+
/>
|
|
184
|
+
)}
|
|
186
185
|
{paginated && (
|
|
187
186
|
<StyledPagination
|
|
188
187
|
ActionsComponent={PaginationActions}
|