@centreon/ui 24.4.1-MON-21276.0 → 24.4.1-MON-30966.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 +1 -1
- package/src/Button/Save/index.tsx +3 -3
- package/src/Dialog/index.tsx +1 -1
- package/src/InputField/Select/Autocomplete/index.tsx +115 -121
- package/src/InputField/Text/index.tsx +2 -2
- package/src/TimePeriods/DateTimePickerInput.tsx +3 -12
- package/src/components/DataTable/Item/DataTableItem.tsx +2 -2
- 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/package.json
CHANGED
|
@@ -2,7 +2,7 @@ import { any, isEmpty, isNil, not, or, pipe } from 'ramda';
|
|
|
2
2
|
import { makeStyles } from 'tss-react/mui';
|
|
3
3
|
|
|
4
4
|
import { Theme, Tooltip, TypographyProps } from '@mui/material';
|
|
5
|
-
import { LoadingButton
|
|
5
|
+
import { LoadingButton } from '@mui/lab';
|
|
6
6
|
|
|
7
7
|
import { getNormalizedId } from '../../utils';
|
|
8
8
|
|
|
@@ -15,7 +15,7 @@ const useStyles = makeStyles()((theme: Theme) => ({
|
|
|
15
15
|
}
|
|
16
16
|
}));
|
|
17
17
|
|
|
18
|
-
interface Props {
|
|
18
|
+
interface Props extends Record<string, unknown> {
|
|
19
19
|
className?: string;
|
|
20
20
|
labelLoading?: string;
|
|
21
21
|
labelProps?: TypographyProps;
|
|
@@ -50,7 +50,7 @@ const SaveButton = ({
|
|
|
50
50
|
startIcon = true,
|
|
51
51
|
labelProps,
|
|
52
52
|
...rest
|
|
53
|
-
}: Props
|
|
53
|
+
}: Props): JSX.Element => {
|
|
54
54
|
const { classes, cx } = useStyles();
|
|
55
55
|
const hasLabel = hasValue([labelLoading, labelSave, labelSucceeded]);
|
|
56
56
|
|
package/src/Dialog/index.tsx
CHANGED
|
@@ -43,7 +43,7 @@ export type Props = {
|
|
|
43
43
|
dialogTitleClassName?: string;
|
|
44
44
|
labelCancel?: string | null;
|
|
45
45
|
labelConfirm?: string | null;
|
|
46
|
-
labelTitle?:
|
|
46
|
+
labelTitle?: string | null;
|
|
47
47
|
onCancel?: () => void;
|
|
48
48
|
onClose?: () => void;
|
|
49
49
|
onConfirm: (event, value?) => void;
|
|
@@ -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;
|
|
@@ -155,9 +155,9 @@ const TextField = forwardRef(
|
|
|
155
155
|
helperText={displayErrorInTooltip ? undefined : error}
|
|
156
156
|
id={getNormalizedId(dataTestId || '')}
|
|
157
157
|
inputProps={{
|
|
158
|
+
...rest.inputProps,
|
|
158
159
|
'aria-label': ariaLabel,
|
|
159
|
-
'data-testid': dataTestId
|
|
160
|
-
...rest.inputProps
|
|
160
|
+
'data-testid': dataTestId
|
|
161
161
|
}}
|
|
162
162
|
label={label}
|
|
163
163
|
ref={ref}
|
|
@@ -4,11 +4,7 @@ import dayjs, { Dayjs } from 'dayjs';
|
|
|
4
4
|
import { useAtomValue } from 'jotai';
|
|
5
5
|
import { equals } from 'ramda';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
DateTimePicker,
|
|
9
|
-
DateTimePickerProps,
|
|
10
|
-
LocalizationProvider
|
|
11
|
-
} from '@mui/x-date-pickers';
|
|
7
|
+
import { DateTimePicker, LocalizationProvider } from '@mui/x-date-pickers';
|
|
12
8
|
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
13
9
|
|
|
14
10
|
import { userAtom } from '@centreon/ui-context';
|
|
@@ -27,7 +23,6 @@ interface Props {
|
|
|
27
23
|
disabled?: boolean;
|
|
28
24
|
maxDate?: Date;
|
|
29
25
|
minDate?: Date;
|
|
30
|
-
minDateTime?: Date;
|
|
31
26
|
property: CustomTimePeriodProperty | string;
|
|
32
27
|
}
|
|
33
28
|
|
|
@@ -35,13 +30,11 @@ const DateTimePickerInput = ({
|
|
|
35
30
|
date,
|
|
36
31
|
maxDate,
|
|
37
32
|
minDate,
|
|
38
|
-
minDateTime,
|
|
39
33
|
property,
|
|
40
34
|
changeDate,
|
|
41
35
|
disabled = false,
|
|
42
|
-
desktopMediaQuery
|
|
43
|
-
|
|
44
|
-
}: Props & DateTimePickerProps<dayjs.Dayjs>): JSX.Element => {
|
|
36
|
+
desktopMediaQuery
|
|
37
|
+
}: Props): JSX.Element => {
|
|
45
38
|
const desktopPickerMediaQuery =
|
|
46
39
|
'@media (min-width: 1024px) or (pointer: fine)';
|
|
47
40
|
|
|
@@ -74,10 +67,8 @@ const DateTimePickerInput = ({
|
|
|
74
67
|
disabled={disabled}
|
|
75
68
|
maxDate={maxDate && formatDate(maxDate)}
|
|
76
69
|
minDate={minDate && formatDate(minDate)}
|
|
77
|
-
minDateTime={minDateTime && formatDate(minDateTime)}
|
|
78
70
|
value={formatDate(date)}
|
|
79
71
|
onChange={changeTime}
|
|
80
|
-
{...rest}
|
|
81
72
|
/>
|
|
82
73
|
</LocalizationProvider>
|
|
83
74
|
);
|
|
@@ -82,14 +82,14 @@ const DataTableItem = forwardRef(
|
|
|
82
82
|
labels={labelsDelete}
|
|
83
83
|
onConfirm={onDelete}
|
|
84
84
|
>
|
|
85
|
-
{(
|
|
85
|
+
{({ toggleTooltip }) => (
|
|
86
86
|
<IconButton
|
|
87
87
|
aria-label="delete"
|
|
88
88
|
data-testid="delete"
|
|
89
89
|
icon={<DeleteIcon />}
|
|
90
90
|
size="small"
|
|
91
91
|
variant="ghost"
|
|
92
|
-
onClick={
|
|
92
|
+
onClick={toggleTooltip}
|
|
93
93
|
/>
|
|
94
94
|
)}
|
|
95
95
|
</ConfirmationTooltip>
|
|
@@ -15,7 +15,7 @@ type Story = StoryObj<typeof ConfirmationTooltip>;
|
|
|
15
15
|
|
|
16
16
|
export const Default: Story = {
|
|
17
17
|
args: {
|
|
18
|
-
children: (toggleTooltip) => (
|
|
18
|
+
children: ({ toggleTooltip }) => (
|
|
19
19
|
<IconButton icon={<SaveIcon />} onClick={toggleTooltip} />
|
|
20
20
|
),
|
|
21
21
|
labels: {
|
|
@@ -30,7 +30,7 @@ export const Default: Story = {
|
|
|
30
30
|
|
|
31
31
|
export const WithConfirmVariant: Story = {
|
|
32
32
|
args: {
|
|
33
|
-
children: (toggleTooltip) => (
|
|
33
|
+
children: ({ toggleTooltip }) => (
|
|
34
34
|
<IconButton icon={<DeleteIcon color="error" />} onClick={toggleTooltip} />
|
|
35
35
|
),
|
|
36
36
|
confirmVariant: 'error',
|
|
@@ -46,7 +46,7 @@ export const WithConfirmVariant: Story = {
|
|
|
46
46
|
|
|
47
47
|
export const WithSecondaryLabel: Story = {
|
|
48
48
|
args: {
|
|
49
|
-
children: (toggleTooltip) => (
|
|
49
|
+
children: ({ toggleTooltip }) => (
|
|
50
50
|
<IconButton icon={<DeleteIcon color="error" />} onClick={toggleTooltip} />
|
|
51
51
|
),
|
|
52
52
|
confirmVariant: 'error',
|
|
@@ -49,7 +49,7 @@ export const ConfirmationTooltip = ({
|
|
|
49
49
|
return (
|
|
50
50
|
<ClickAwayListener onClickAway={close}>
|
|
51
51
|
<div>
|
|
52
|
-
{children(isOpen ? close : open)}
|
|
52
|
+
{children({ isOpen, toggleTooltip: isOpen ? close : open })}
|
|
53
53
|
<Popper
|
|
54
54
|
anchorEl={anchorElement}
|
|
55
55
|
className={classes.popper}
|