@centreon/ui 24.11.21 → 24.11.23

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@centreon/ui",
3
- "version": "24.11.21",
3
+ "version": "24.11.23",
4
4
  "description": "Centreon UI Components",
5
5
  "scripts": {
6
6
  "update:deps": "pnpx npm-check-updates -i --format group",
@@ -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.name,
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
- <TextField
183
- {...params}
184
- InputLabelProps={{
185
- classes: {
186
- marginDense: classes.inputLabel,
187
- shrink: classes.inputLabelShrink
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
- InputProps={{
191
- ...params.InputProps,
192
- endAdornment: (
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.map((metric) =>
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,
@@ -10,6 +10,7 @@ export enum WidgetResourceType {
10
10
  hostCategory = 'host-category',
11
11
  hostGroup = 'host-group',
12
12
  service = 'service',
13
+ metaService = 'meta-service',
13
14
  serviceCategory = 'service-category',
14
15
  serviceGroup = 'service-group'
15
16
  }
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,