@centreon/ui 24.11.21 → 24.11.22
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
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
compose,
|
|
5
5
|
flatten,
|
|
6
6
|
groupBy,
|
|
7
|
+
isEmpty,
|
|
7
8
|
isNil,
|
|
8
9
|
lensPath,
|
|
9
10
|
pipe,
|
|
@@ -36,6 +37,11 @@ const useGraphData = ({ data, end, start }: Props): GraphDataResult => {
|
|
|
36
37
|
if (isNil(data)) {
|
|
37
38
|
return data;
|
|
38
39
|
}
|
|
40
|
+
|
|
41
|
+
if (isEmpty(data.metrics) || isEmpty(data.times)) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
|
|
39
45
|
const metricsGroupedByColor = groupBy(
|
|
40
46
|
(metric) => metric.ds_data.ds_color_line
|
|
41
47
|
)(data?.metrics || []);
|
|
@@ -38,6 +38,7 @@ export type Props = {
|
|
|
38
38
|
onTextChange?;
|
|
39
39
|
placeholder?: string | undefined;
|
|
40
40
|
required?: boolean;
|
|
41
|
+
forceInputRenderValue?: boolean;
|
|
41
42
|
} & Omit<
|
|
42
43
|
AutocompleteProps<SelectEntry, Multiple, DisableClearable, FreeSolo>,
|
|
43
44
|
'renderInput'
|
|
@@ -160,7 +161,8 @@ const AutocompleteField = forwardRef(
|
|
|
160
161
|
autoSize = false,
|
|
161
162
|
autoSizeDefaultWidth = 0,
|
|
162
163
|
autoSizeCustomPadding,
|
|
163
|
-
getOptionItemLabel = (option) => option
|
|
164
|
+
getOptionItemLabel = (option) => option?.name,
|
|
165
|
+
forceInputRenderValue = false,
|
|
164
166
|
...autocompleteProps
|
|
165
167
|
}: Props,
|
|
166
168
|
ref?: ForwardedRef<HTMLDivElement>
|
|
@@ -178,59 +180,74 @@ const AutocompleteField = forwardRef(
|
|
|
178
180
|
);
|
|
179
181
|
};
|
|
180
182
|
|
|
181
|
-
const renderInput = (params): JSX.Element =>
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
183
|
+
const renderInput = (params): JSX.Element => {
|
|
184
|
+
return (
|
|
185
|
+
<TextField
|
|
186
|
+
{...params}
|
|
187
|
+
InputLabelProps={{
|
|
188
|
+
classes: {
|
|
189
|
+
marginDense: classes.inputLabel,
|
|
190
|
+
shrink: classes.inputLabelShrink
|
|
191
|
+
}
|
|
192
|
+
}}
|
|
193
|
+
InputProps={{
|
|
194
|
+
...params.InputProps,
|
|
195
|
+
endAdornment: (
|
|
196
|
+
<>
|
|
197
|
+
{endAdornment && (
|
|
198
|
+
<InputAdornment position="end">{endAdornment}</InputAdornment>
|
|
199
|
+
)}
|
|
200
|
+
{params.InputProps.endAdornment}
|
|
201
|
+
</>
|
|
202
|
+
),
|
|
203
|
+
style: {
|
|
204
|
+
background: 'transparent',
|
|
205
|
+
minWidth: 0,
|
|
206
|
+
padding: theme.spacing(
|
|
207
|
+
0.75,
|
|
208
|
+
isEmpty(placeholder) ? 0 : 5,
|
|
209
|
+
0.75,
|
|
210
|
+
0.75
|
|
211
|
+
)
|
|
212
|
+
}
|
|
213
|
+
}}
|
|
214
|
+
autoFocus={autoFocus}
|
|
215
|
+
autoSize={autoSize}
|
|
216
|
+
autoSizeCustomPadding={7 + (autoSizeCustomPadding || 0)}
|
|
217
|
+
autoSizeDefaultWidth={autoSizeDefaultWidth}
|
|
218
|
+
classes={{
|
|
219
|
+
root: classes.textfield
|
|
220
|
+
}}
|
|
221
|
+
error={error}
|
|
222
|
+
externalValueForAutoSize={autocompleteProps?.value?.name}
|
|
223
|
+
inputProps={{
|
|
224
|
+
...params.inputProps,
|
|
225
|
+
'aria-label': label,
|
|
226
|
+
'data-testid': dataTestId || label,
|
|
227
|
+
id: getNormalizedId(label || ''),
|
|
228
|
+
...(forceInputRenderValue
|
|
229
|
+
? {
|
|
230
|
+
value: getOptionItemLabel(
|
|
231
|
+
autocompleteProps?.value || undefined
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
: {}),
|
|
235
|
+
...autocompleteProps?.inputProps
|
|
236
|
+
}}
|
|
237
|
+
label={label}
|
|
238
|
+
placeholder={isNil(placeholder) ? t(searchLabel) : placeholder}
|
|
239
|
+
required={required}
|
|
240
|
+
value={
|
|
241
|
+
inputValue ||
|
|
242
|
+
(forceInputRenderValue
|
|
243
|
+
? getOptionItemLabel(autocompleteProps?.value || undefined)
|
|
244
|
+
: undefined) ||
|
|
245
|
+
undefined
|
|
188
246
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
<>
|
|
194
|
-
{endAdornment && (
|
|
195
|
-
<InputAdornment position="end">{endAdornment}</InputAdornment>
|
|
196
|
-
)}
|
|
197
|
-
{params.InputProps.endAdornment}
|
|
198
|
-
</>
|
|
199
|
-
),
|
|
200
|
-
style: {
|
|
201
|
-
background: 'transparent',
|
|
202
|
-
minWidth: 0,
|
|
203
|
-
padding: theme.spacing(
|
|
204
|
-
0.75,
|
|
205
|
-
isEmpty(placeholder) ? 0 : 5,
|
|
206
|
-
0.75,
|
|
207
|
-
0.75
|
|
208
|
-
)
|
|
209
|
-
}
|
|
210
|
-
}}
|
|
211
|
-
autoFocus={autoFocus}
|
|
212
|
-
autoSize={autoSize}
|
|
213
|
-
autoSizeCustomPadding={7 + (autoSizeCustomPadding || 0)}
|
|
214
|
-
autoSizeDefaultWidth={autoSizeDefaultWidth}
|
|
215
|
-
classes={{
|
|
216
|
-
root: classes.textfield
|
|
217
|
-
}}
|
|
218
|
-
error={error}
|
|
219
|
-
externalValueForAutoSize={autocompleteProps?.value?.name}
|
|
220
|
-
inputProps={{
|
|
221
|
-
...params.inputProps,
|
|
222
|
-
'aria-label': label,
|
|
223
|
-
'data-testid': dataTestId || label,
|
|
224
|
-
id: getNormalizedId(label || ''),
|
|
225
|
-
...autocompleteProps?.inputProps
|
|
226
|
-
}}
|
|
227
|
-
label={label}
|
|
228
|
-
placeholder={isNil(placeholder) ? t(searchLabel) : placeholder}
|
|
229
|
-
required={required}
|
|
230
|
-
value={inputValue || undefined}
|
|
231
|
-
onChange={onTextChange}
|
|
232
|
-
/>
|
|
233
|
-
);
|
|
247
|
+
onChange={onTextChange}
|
|
248
|
+
/>
|
|
249
|
+
);
|
|
250
|
+
};
|
|
234
251
|
|
|
235
252
|
return (
|
|
236
253
|
<Autocomplete
|
|
@@ -74,7 +74,8 @@ export const resourceTypeQueryParameter = {
|
|
|
74
74
|
[WidgetResourceType.hostGroup]: 'hostgroup.id',
|
|
75
75
|
[WidgetResourceType.serviceCategory]: 'servicecategory.id',
|
|
76
76
|
[WidgetResourceType.serviceGroup]: 'servicegroup.id',
|
|
77
|
-
[WidgetResourceType.service]: 'service.name'
|
|
77
|
+
[WidgetResourceType.service]: 'service.name',
|
|
78
|
+
[WidgetResourceType.metaService]: 'metaservice.id'
|
|
78
79
|
};
|
|
79
80
|
|
|
80
81
|
const areResourcesFullfilled = (value: Array<Resource>): boolean =>
|
|
@@ -108,9 +109,9 @@ const useGraphQuery = ({
|
|
|
108
109
|
: getStartEndFromTimePeriod(timePeriodToUse as number);
|
|
109
110
|
|
|
110
111
|
const definedMetrics = metrics.filter((metric) => metric);
|
|
111
|
-
const formattedDefinedMetrics = definedMetrics
|
|
112
|
-
encodeURIComponent(metric.name)
|
|
113
|
-
|
|
112
|
+
const formattedDefinedMetrics = definedMetrics
|
|
113
|
+
.map((metric) => `metric_names[]=${encodeURIComponent(metric.name)}`)
|
|
114
|
+
.join('&');
|
|
114
115
|
|
|
115
116
|
const prefixQuery = prefix ? [prefix] : [];
|
|
116
117
|
|
|
@@ -138,9 +139,7 @@ const useGraphQuery = ({
|
|
|
138
139
|
}
|
|
139
140
|
});
|
|
140
141
|
|
|
141
|
-
return `${endpoint}&start=${startAndEnd.start}&end=${
|
|
142
|
-
startAndEnd.end
|
|
143
|
-
}&metric_names=[${formattedDefinedMetrics.join(',')}]`;
|
|
142
|
+
return `${endpoint}&start=${startAndEnd.start}&end=${startAndEnd.end}&${formattedDefinedMetrics}`;
|
|
144
143
|
},
|
|
145
144
|
getQueryKey: () => [
|
|
146
145
|
...prefixQuery,
|
package/src/index.ts
CHANGED
|
@@ -131,6 +131,7 @@ export {
|
|
|
131
131
|
default as useGraphQuery,
|
|
132
132
|
resourceTypeQueryParameter
|
|
133
133
|
} from './api/useGraphQuery';
|
|
134
|
+
export { WidgetResourceType as ResourceType } from './api/useGraphQuery/models';
|
|
134
135
|
export { default as QueryProvider, client } from './api/QueryProvider';
|
|
135
136
|
export {
|
|
136
137
|
default as FileDropZone,
|