@centreon/ui 24.4.4 → 24.4.6
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 +12 -16
- 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 +1 -3
- package/src/Form/Inputs/CheckboxGroup.tsx +4 -1
- package/src/Form/Inputs/index.tsx +1 -1
- package/src/Graph/HeatMap/HeatMap.styles.tsx +0 -1
- package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +8 -12
- package/src/Graph/HeatMap/model.ts +0 -1
- 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/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/SingleBar/Thresholds.tsx +2 -2
- package/src/Graph/Text/Text.stories.tsx +4 -60
- package/src/Graph/common/timeSeries/index.ts +3 -3
- package/src/InputField/Select/Autocomplete/Connected/Multi/index.test.tsx +0 -1
- package/src/InputField/Select/Autocomplete/Connected/index.test.tsx +0 -1
- package/src/InputField/Select/Autocomplete/Connected/index.tsx +7 -13
- 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/InputField/Text/index.tsx +1 -6
- package/src/Listing/Header/ListingHeader.tsx +1 -1
- package/src/Listing/index.stories.tsx +1 -12
- package/src/Listing/index.tsx +1 -1
- package/src/RichTextEditor/RichTextEditor.tsx +1 -12
- package/src/SortableItems/index.tsx +7 -2
- package/src/ThemeProvider/palettes.ts +4 -4
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +3 -8
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +2 -0
- package/src/TimePeriods/DateTimePickerInput.tsx +17 -45
- 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/buildListingEndpoint/models.ts +1 -2
- package/src/api/customFetch.ts +3 -12
- package/src/api/useFetchQuery/index.ts +28 -43
- package/src/api/useMutationQuery/index.ts +18 -43
- package/src/components/DataTable/Item/DataTableItem.tsx +2 -2
- package/src/components/Form/AccessRights/__fixtures__/contactAccessRight.mock.ts +0 -2
- package/src/components/Form/AccessRights/useAccessRightsForm.utils.ts +1 -1
- package/src/components/Form/Dashboard/DashboardForm.tsx +12 -15
- package/src/index.ts +0 -1
- 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 -0
- package/src/utils/useDateTimePickerAdapter.ts +309 -0
- package/src/utils/useInfiniteScrollListing.ts +7 -22
- package/src/utils/{useLicenseExpirationWarning.test.tsx → useLicenseExpirationWarning.cypress.spec.tsx} +37 -48
- package/src/utils/useLicenseExpirationWarning.ts +18 -18
- package/src/utils/useLocaleDateTimeFormat/index.ts +0 -3
|
@@ -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 => {
|
|
@@ -80,7 +80,6 @@ export type Props = {
|
|
|
80
80
|
autoSizeCustomPadding?: number;
|
|
81
81
|
autoSizeDefaultWidth?: number;
|
|
82
82
|
className?: string;
|
|
83
|
-
containerClassName?: string;
|
|
84
83
|
dataTestId: string;
|
|
85
84
|
debounced?: boolean;
|
|
86
85
|
displayErrorInTooltip?: boolean;
|
|
@@ -113,7 +112,6 @@ const TextField = forwardRef(
|
|
|
113
112
|
autoSizeCustomPadding,
|
|
114
113
|
defaultValue,
|
|
115
114
|
required = false,
|
|
116
|
-
containerClassName,
|
|
117
115
|
...rest
|
|
118
116
|
}: Props,
|
|
119
117
|
ref: React.ForwardedRef<HTMLDivElement>
|
|
@@ -144,10 +142,7 @@ const TextField = forwardRef(
|
|
|
144
142
|
}, [innerValue, debounced, defaultValue]);
|
|
145
143
|
|
|
146
144
|
return (
|
|
147
|
-
<Box
|
|
148
|
-
className={containerClassName}
|
|
149
|
-
sx={{ width: autoSize ? 'auto' : '100%' }}
|
|
150
|
-
>
|
|
145
|
+
<Box sx={{ width: autoSize ? 'auto' : '100%' }}>
|
|
151
146
|
<Tooltip placement="top" title={tooltipTitle}>
|
|
152
147
|
<MuiTextField
|
|
153
148
|
data-testid={dataTestId}
|
|
@@ -366,16 +366,6 @@ 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
|
-
|
|
379
369
|
export const ListingWithSubItems = {
|
|
380
370
|
args: {
|
|
381
371
|
checkable: true,
|
|
@@ -392,6 +382,5 @@ export const ListingWithSubItems = {
|
|
|
392
382
|
rowProperty: 'subItems'
|
|
393
383
|
},
|
|
394
384
|
totalRows: 10
|
|
395
|
-
}
|
|
396
|
-
render: TemplateSubItems
|
|
385
|
+
}
|
|
397
386
|
};
|
package/src/Listing/index.tsx
CHANGED
|
@@ -12,7 +12,6 @@ import { LinkPlugin } from '@lexical/react/LexicalLinkPlugin';
|
|
|
12
12
|
import { equals } from 'ramda';
|
|
13
13
|
import { ListPlugin } from '@lexical/react/LexicalListPlugin';
|
|
14
14
|
import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
|
|
15
|
-
import { $generateHtmlFromNodes } from '@lexical/html';
|
|
16
15
|
|
|
17
16
|
import { Typography } from '@mui/material';
|
|
18
17
|
|
|
@@ -39,7 +38,6 @@ export interface RichTextEditorProps {
|
|
|
39
38
|
openLinkInNewTab?: boolean;
|
|
40
39
|
placeholder?: string;
|
|
41
40
|
resetEditorToInitialStateCondition?: () => boolean;
|
|
42
|
-
setHtmlString?: (htmlString: string) => void;
|
|
43
41
|
toolbarClassName?: string;
|
|
44
42
|
toolbarPositions?: 'start' | 'end';
|
|
45
43
|
}
|
|
@@ -145,7 +143,6 @@ const RichTextEditor = ({
|
|
|
145
143
|
openLinkInNewTab = true,
|
|
146
144
|
initialize,
|
|
147
145
|
displayBlockButtons = true,
|
|
148
|
-
setHtmlString,
|
|
149
146
|
toolbarClassName
|
|
150
147
|
}: RichTextEditorProps): JSX.Element => {
|
|
151
148
|
const { classes } = useStyles({ toolbarPositions });
|
|
@@ -181,13 +178,6 @@ const RichTextEditor = ({
|
|
|
181
178
|
}
|
|
182
179
|
};
|
|
183
180
|
|
|
184
|
-
const change = (state: EditorState, editor: LexicalEditor): void => {
|
|
185
|
-
editor.update(() => {
|
|
186
|
-
setHtmlString?.($generateHtmlFromNodes(editor, null));
|
|
187
|
-
});
|
|
188
|
-
getEditorState?.(state, editor);
|
|
189
|
-
};
|
|
190
|
-
|
|
191
181
|
return (
|
|
192
182
|
<LexicalComposer initialConfig={initialConfig}>
|
|
193
183
|
<div className={classes.container}>
|
|
@@ -220,7 +210,6 @@ const RichTextEditor = ({
|
|
|
220
210
|
resetEditorToInitialStateCondition={
|
|
221
211
|
resetEditorToInitialStateCondition
|
|
222
212
|
}
|
|
223
|
-
setHtmlString={setHtmlString}
|
|
224
213
|
onBlur={onBlur}
|
|
225
214
|
/>
|
|
226
215
|
}
|
|
@@ -229,7 +218,7 @@ const RichTextEditor = ({
|
|
|
229
218
|
<HistoryPlugin />
|
|
230
219
|
<LinkPlugin />
|
|
231
220
|
<ListPlugin />
|
|
232
|
-
<OnChangePlugin onChange={
|
|
221
|
+
<OnChangePlugin onChange={getEditorState} />
|
|
233
222
|
<AutoCompleteLinkPlugin openLinkInNewTab={openLinkInNewTab} />
|
|
234
223
|
<FloatingLinkEditorPlugin
|
|
235
224
|
editable={editable}
|
|
@@ -15,7 +15,11 @@ import {
|
|
|
15
15
|
DragEndEvent,
|
|
16
16
|
Over
|
|
17
17
|
} from '@dnd-kit/core';
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
SortableContext,
|
|
20
|
+
sortableKeyboardCoordinates,
|
|
21
|
+
SortingStrategy
|
|
22
|
+
} from '@dnd-kit/sortable';
|
|
19
23
|
import {
|
|
20
24
|
equals,
|
|
21
25
|
find,
|
|
@@ -113,6 +117,7 @@ const SortableItems = <T extends { [propertyToFilterItemsOn]: string }>({
|
|
|
113
117
|
useSensor(MouseSensor),
|
|
114
118
|
useSensor(PointerSensor),
|
|
115
119
|
useSensor(KeyboardSensor, {
|
|
120
|
+
coordinateGetter: sortableKeyboardCoordinates,
|
|
116
121
|
keyboardCodes: {
|
|
117
122
|
cancel: ['Escape'],
|
|
118
123
|
end: ['Space', 'Enter'],
|
|
@@ -164,7 +169,7 @@ const SortableItems = <T extends { [propertyToFilterItemsOn]: string }>({
|
|
|
164
169
|
};
|
|
165
170
|
|
|
166
171
|
const getItemById = (id): T | undefined =>
|
|
167
|
-
find(propEq(
|
|
172
|
+
find(propEq(propertyToFilterItemsOn, id), items);
|
|
168
173
|
|
|
169
174
|
const activeItem = getItemById(activeId) as Record<string, unknown>;
|
|
170
175
|
|
|
@@ -143,7 +143,7 @@ declare module '@mui/material/Badge' {
|
|
|
143
143
|
export const lightPalette: PaletteOptions = {
|
|
144
144
|
action: {
|
|
145
145
|
acknowledged: '#67532C',
|
|
146
|
-
acknowledgedBackground: '#
|
|
146
|
+
acknowledgedBackground: '#F5F1E9',
|
|
147
147
|
activatedOpacity: 0.12,
|
|
148
148
|
active: '#666666',
|
|
149
149
|
disabled: '#999999',
|
|
@@ -153,7 +153,7 @@ export const lightPalette: PaletteOptions = {
|
|
|
153
153
|
hover: 'rgba(0, 0, 0, 0.06)',
|
|
154
154
|
hoverOpacity: 0.06,
|
|
155
155
|
inDowntime: '#4B2352',
|
|
156
|
-
inDowntimeBackground: '#
|
|
156
|
+
inDowntimeBackground: '#F0E9F8',
|
|
157
157
|
selected: 'rgba(102, 102, 102, 0.3)',
|
|
158
158
|
selectedOpacity: 0.3
|
|
159
159
|
},
|
|
@@ -283,7 +283,7 @@ export const lightPalette: PaletteOptions = {
|
|
|
283
283
|
export const darkPalette: PaletteOptions = {
|
|
284
284
|
action: {
|
|
285
285
|
acknowledged: '#67532C',
|
|
286
|
-
acknowledgedBackground: '#
|
|
286
|
+
acknowledgedBackground: '#67532C',
|
|
287
287
|
activatedOpacity: 0.3,
|
|
288
288
|
active: '#B5B5B5',
|
|
289
289
|
disabled: '#999999',
|
|
@@ -293,7 +293,7 @@ export const darkPalette: PaletteOptions = {
|
|
|
293
293
|
hover: 'rgba(255, 255, 255, 0.16)',
|
|
294
294
|
hoverOpacity: 0.16,
|
|
295
295
|
inDowntime: '#4B2352',
|
|
296
|
-
inDowntimeBackground: '#
|
|
296
|
+
inDowntimeBackground: '#4B2352',
|
|
297
297
|
selected: 'rgba(255, 255, 255, 0.5)',
|
|
298
298
|
selectedOpacity: 0.5
|
|
299
299
|
},
|
|
@@ -2,15 +2,12 @@ import { useAtomValue } from 'jotai';
|
|
|
2
2
|
import { makeStyles } from 'tss-react/mui';
|
|
3
3
|
import { equals } from 'ramda';
|
|
4
4
|
import { useTranslation } from 'react-i18next';
|
|
5
|
-
import dayjs from 'dayjs';
|
|
6
|
-
import utc from 'dayjs/plugin/utc';
|
|
7
|
-
import timezone from 'dayjs/plugin/timezone';
|
|
8
5
|
|
|
9
|
-
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
10
6
|
import { Typography } from '@mui/material';
|
|
11
7
|
import { LocalizationProvider } from '@mui/x-date-pickers';
|
|
12
8
|
|
|
13
9
|
import { userAtom } from '@centreon/ui-context';
|
|
10
|
+
import { useDateTimePickerAdapter } from '@centreon/ui';
|
|
14
11
|
|
|
15
12
|
import DateTimePickerInput from '../../DateTimePickerInput';
|
|
16
13
|
import {
|
|
@@ -23,9 +20,6 @@ import ErrorText from './ErrorText';
|
|
|
23
20
|
import { PickersData, PickersStartEndDateDirection } from './models';
|
|
24
21
|
import { PickersStartEndDateModel } from './usePickersStartEndDate';
|
|
25
22
|
|
|
26
|
-
dayjs.extend(utc);
|
|
27
|
-
dayjs.extend(timezone);
|
|
28
|
-
|
|
29
23
|
const useStyles = makeStyles()((theme) => ({
|
|
30
24
|
error: {
|
|
31
25
|
textAlign: 'center'
|
|
@@ -110,6 +104,7 @@ const PickersStartEndDate = ({
|
|
|
110
104
|
direction = PickersStartEndDateDirection.column
|
|
111
105
|
}: Props): JSX.Element => {
|
|
112
106
|
const { classes, cx } = useStyles();
|
|
107
|
+
const { Adapter } = useDateTimePickerAdapter();
|
|
113
108
|
|
|
114
109
|
const { locale } = useAtomValue(userAtom);
|
|
115
110
|
const error = useAtomValue(errorTimePeriodAtom);
|
|
@@ -131,7 +126,7 @@ const PickersStartEndDate = ({
|
|
|
131
126
|
return (
|
|
132
127
|
<LocalizationProvider
|
|
133
128
|
adapterLocale={locale.substring(0, 2)}
|
|
134
|
-
dateAdapter={
|
|
129
|
+
dateAdapter={Adapter}
|
|
135
130
|
>
|
|
136
131
|
<div className={styleContainer}>
|
|
137
132
|
<PickerDateWithLabel
|
|
@@ -18,6 +18,8 @@ export interface PickersData {
|
|
|
18
18
|
getError?: (value: boolean) => void;
|
|
19
19
|
isDisabledEndPicker?: boolean;
|
|
20
20
|
isDisabledStartPicker?: boolean;
|
|
21
|
+
onCloseEndPicker?: (isClosed: boolean) => void;
|
|
22
|
+
onCloseStartPicker?: (isClosed: boolean) => void;
|
|
21
23
|
rangeEndDate?: RangeDate;
|
|
22
24
|
rangeStartDate?: RangeDate;
|
|
23
25
|
}
|
|
@@ -1,29 +1,19 @@
|
|
|
1
|
-
import
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import { useAtomValue } from 'jotai';
|
|
5
|
-
import { equals } from 'ramda';
|
|
3
|
+
import { DateTimePicker } from '@mui/x-date-pickers';
|
|
6
4
|
|
|
7
|
-
import {
|
|
8
|
-
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
9
|
-
|
|
10
|
-
import { userAtom } from '@centreon/ui-context';
|
|
5
|
+
import { useDateTimePickerAdapter } from '@centreon/ui';
|
|
11
6
|
|
|
12
7
|
import { CustomTimePeriodProperty } from './models';
|
|
13
8
|
|
|
14
|
-
interface ChangeDateProps {
|
|
15
|
-
date: Date;
|
|
16
|
-
property: CustomTimePeriodProperty | string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
9
|
interface Props {
|
|
20
|
-
changeDate: (props
|
|
10
|
+
changeDate: (props) => void;
|
|
21
11
|
date: Date | null;
|
|
22
12
|
desktopMediaQuery?: string;
|
|
23
13
|
disabled?: boolean;
|
|
24
14
|
maxDate?: Date;
|
|
25
15
|
minDate?: Date;
|
|
26
|
-
property: CustomTimePeriodProperty
|
|
16
|
+
property: CustomTimePeriodProperty;
|
|
27
17
|
}
|
|
28
18
|
|
|
29
19
|
const DateTimePickerInput = ({
|
|
@@ -35,42 +25,24 @@ const DateTimePickerInput = ({
|
|
|
35
25
|
disabled = false,
|
|
36
26
|
desktopMediaQuery
|
|
37
27
|
}: Props): JSX.Element => {
|
|
38
|
-
const desktopPickerMediaQuery =
|
|
39
|
-
'@media (min-width: 1024px) or (pointer: fine)';
|
|
40
|
-
|
|
41
|
-
const { timezone, locale } = useAtomValue(userAtom);
|
|
42
|
-
|
|
43
|
-
const isUTC = equals(timezone, 'UTC');
|
|
28
|
+
const { desktopPickerMediaQuery } = useDateTimePickerAdapter();
|
|
44
29
|
|
|
45
30
|
const changeTime = (newValue: dayjs.Dayjs | null): void => {
|
|
46
31
|
changeDate({ date: dayjs(newValue).toDate(), property });
|
|
47
32
|
};
|
|
48
33
|
|
|
49
|
-
const formatDate = useCallback(
|
|
50
|
-
(currentDate: Date | null): Dayjs => {
|
|
51
|
-
return isUTC ? dayjs.utc(currentDate) : dayjs.tz(currentDate, timezone);
|
|
52
|
-
},
|
|
53
|
-
[isUTC, timezone]
|
|
54
|
-
);
|
|
55
|
-
|
|
56
34
|
return (
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
maxDate={maxDate && formatDate(maxDate)}
|
|
69
|
-
minDate={minDate && formatDate(minDate)}
|
|
70
|
-
value={formatDate(date)}
|
|
71
|
-
onChange={changeTime}
|
|
72
|
-
/>
|
|
73
|
-
</LocalizationProvider>
|
|
35
|
+
<DateTimePicker<dayjs.Dayjs>
|
|
36
|
+
dayOfWeekFormatter={(day: string): string =>
|
|
37
|
+
day.substring(0, 2).toUpperCase()
|
|
38
|
+
}
|
|
39
|
+
desktopModeMediaQuery={desktopMediaQuery ?? desktopPickerMediaQuery}
|
|
40
|
+
disabled={disabled}
|
|
41
|
+
maxDate={maxDate && dayjs(maxDate)}
|
|
42
|
+
minDate={minDate && dayjs(minDate)}
|
|
43
|
+
value={dayjs(date)}
|
|
44
|
+
onChange={changeTime}
|
|
45
|
+
/>
|
|
74
46
|
);
|
|
75
47
|
};
|
|
76
48
|
|
|
@@ -3,10 +3,15 @@ import localizedFormatPlugin from 'dayjs/plugin/localizedFormat';
|
|
|
3
3
|
import timezonePlugin from 'dayjs/plugin/timezone';
|
|
4
4
|
import utcPlugin from 'dayjs/plugin/utc';
|
|
5
5
|
import { Provider, createStore } from 'jotai';
|
|
6
|
-
import { equals } from 'ramda';
|
|
6
|
+
import { equals, inc } from 'ramda';
|
|
7
7
|
import { renderHook } from '@testing-library/react';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { LocalizationProvider } from '@mui/x-date-pickers';
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
useLocaleDateTimeFormat,
|
|
13
|
+
useDateTimePickerAdapter
|
|
14
|
+
} from '@centreon/ui';
|
|
10
15
|
import { ListingVariant, userAtom } from '@centreon/ui-context';
|
|
11
16
|
|
|
12
17
|
import { CustomTimePeriodProperty } from './models';
|
|
@@ -292,6 +297,10 @@ testData.forEach((item) =>
|
|
|
292
297
|
beforeEach(() => {
|
|
293
298
|
cy.viewport('macbook-13');
|
|
294
299
|
|
|
300
|
+
const { result } = renderHook(() => useDateTimePickerAdapter());
|
|
301
|
+
|
|
302
|
+
const { Adapter } = result.current;
|
|
303
|
+
|
|
295
304
|
const store = createStore();
|
|
296
305
|
store.set(userAtom, {
|
|
297
306
|
...retrievedUser,
|
|
@@ -302,16 +311,31 @@ testData.forEach((item) =>
|
|
|
302
311
|
cy.mount({
|
|
303
312
|
Component: (
|
|
304
313
|
<Provider store={store}>
|
|
305
|
-
<
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
314
|
+
<LocalizationProvider adapterLocale="en" dateAdapter={Adapter}>
|
|
315
|
+
<DateTimePickerInput
|
|
316
|
+
changeDate={cy.stub()}
|
|
317
|
+
date={new Date(item.initialDate)}
|
|
318
|
+
desktopMediaQuery="@media (min-width: 1024px)"
|
|
319
|
+
property={CustomTimePeriodProperty.start}
|
|
320
|
+
/>
|
|
321
|
+
</LocalizationProvider>
|
|
310
322
|
</Provider>
|
|
311
323
|
)
|
|
312
324
|
});
|
|
313
325
|
});
|
|
314
326
|
|
|
327
|
+
it('checks input calendar value contains correct date', () => {
|
|
328
|
+
const { result } = renderHook(() => useLocaleDateTimeFormat());
|
|
329
|
+
const { format } = result.current;
|
|
330
|
+
|
|
331
|
+
const dateInput = format({
|
|
332
|
+
date: dayjs(item.initialDate).tz(item.timezone),
|
|
333
|
+
formatString: 'L hh:mm A'
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
cy.get('input').should('have.value', dateInput);
|
|
337
|
+
});
|
|
338
|
+
|
|
315
339
|
it(`displays the correct number of days for the current month when the ${item.button} button is clicked`, () => {
|
|
316
340
|
cy.get('button').click();
|
|
317
341
|
item.data.forEach((element) => {
|
|
@@ -365,7 +389,7 @@ testData.forEach((item) =>
|
|
|
365
389
|
|
|
366
390
|
cy.get('[role="rowgroup"]').children().as('listWeeks');
|
|
367
391
|
|
|
368
|
-
cy.get('@listWeeks').should('have.length', numberWeeks);
|
|
392
|
+
cy.get('@listWeeks').should('have.length', inc(numberWeeks));
|
|
369
393
|
cy.get('@listWeeks').eq(0).as('firstWeek');
|
|
370
394
|
cy.get('@firstWeek').children().as('listDaysInFirstWeek');
|
|
371
395
|
|
|
@@ -392,7 +416,7 @@ testData.forEach((item) =>
|
|
|
392
416
|
|
|
393
417
|
cy.get('[role="rowgroup"]').children().as('listWeeks');
|
|
394
418
|
|
|
395
|
-
cy.get('@listWeeks').should('have.length', numberWeeks);
|
|
419
|
+
cy.get('@listWeeks').should('have.length', inc(numberWeeks));
|
|
396
420
|
|
|
397
421
|
cy.get('@listWeeks')
|
|
398
422
|
.eq(numberWeeks - 1)
|
|
@@ -88,27 +88,20 @@ const args = {
|
|
|
88
88
|
]
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
-
const parameters = {
|
|
92
|
-
chromatic: { diffThreshold: 0.1 }
|
|
93
|
-
};
|
|
94
|
-
|
|
95
91
|
export const BasicTimePeriod: Story = {
|
|
96
92
|
...Template,
|
|
97
|
-
argTypes
|
|
98
|
-
parameters
|
|
93
|
+
argTypes
|
|
99
94
|
};
|
|
100
95
|
|
|
101
96
|
export const WithExtraTimePeriods: Story = {
|
|
102
97
|
...Template,
|
|
103
98
|
argTypes,
|
|
104
|
-
args
|
|
105
|
-
parameters
|
|
99
|
+
args
|
|
106
100
|
};
|
|
107
101
|
|
|
108
102
|
export const WithExternalComponent: Story = {
|
|
109
103
|
...TemplateWithExternalComponent,
|
|
110
|
-
argTypes
|
|
111
|
-
parameters
|
|
104
|
+
argTypes
|
|
112
105
|
};
|
|
113
106
|
|
|
114
107
|
export const SimpleTimePeriod: StorySimpleTimePeriod = {
|
|
@@ -116,6 +109,5 @@ export const SimpleTimePeriod: StorySimpleTimePeriod = {
|
|
|
116
109
|
args: {
|
|
117
110
|
endDate: dayjs(Date.now()).toDate(),
|
|
118
111
|
startDate: dayjs(Date.now()).subtract(29, 'day').toDate()
|
|
119
|
-
}
|
|
120
|
-
parameters
|
|
112
|
+
}
|
|
121
113
|
};
|
|
@@ -20,7 +20,7 @@ import { useStyles } from './TimePeriods.styles';
|
|
|
20
20
|
import {
|
|
21
21
|
CustomTimePeriod as CustomTimePeriodModel,
|
|
22
22
|
EndStartInterval,
|
|
23
|
-
TimePeriod
|
|
23
|
+
TimePeriod
|
|
24
24
|
} from './models';
|
|
25
25
|
import useTimePeriod from './useTimePeriod';
|
|
26
26
|
|
|
@@ -34,7 +34,7 @@ interface Parameters extends EndStartInterval {
|
|
|
34
34
|
export interface Props {
|
|
35
35
|
adjustTimePeriodData?: Omit<CustomTimePeriodModel, 'timelineEventsLimit'>;
|
|
36
36
|
disabled?: boolean;
|
|
37
|
-
extraTimePeriods?: Array<Omit<
|
|
37
|
+
extraTimePeriods?: Array<Omit<TimePeriod, 'timelineEventsLimit'>>;
|
|
38
38
|
getIsError?: (value: boolean) => void;
|
|
39
39
|
getParameters?: ({ start, end, timelineEventsLimit }: Parameters) => void;
|
|
40
40
|
renderExternalComponent?: ReactNode;
|
package/src/api/customFetch.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { equals
|
|
1
|
+
import { equals } from 'ramda';
|
|
2
2
|
import { JsonDecoder } from 'ts.data.json';
|
|
3
3
|
|
|
4
4
|
import { Method } from './useMutationQuery';
|
|
@@ -22,7 +22,6 @@ export interface CatchErrorProps {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
interface CustomFetchProps<T> {
|
|
25
|
-
baseEndpoint?: string;
|
|
26
25
|
catchError?: (props: CatchErrorProps) => void;
|
|
27
26
|
decoder?: JsonDecoder.Decoder<T>;
|
|
28
27
|
defaultFailureMessage?: string;
|
|
@@ -43,18 +42,10 @@ export const customFetch = <T>({
|
|
|
43
42
|
defaultFailureMessage = 'Something went wrong',
|
|
44
43
|
isMutation = false,
|
|
45
44
|
payload,
|
|
46
|
-
method = 'GET'
|
|
47
|
-
baseEndpoint = './api/latest'
|
|
45
|
+
method = 'GET'
|
|
48
46
|
}: CustomFetchProps<T>): Promise<T | ResponseError> => {
|
|
49
47
|
const defaultOptions = { headers, method, signal };
|
|
50
48
|
|
|
51
|
-
const formattedEndpoint =
|
|
52
|
-
!isNil(baseEndpoint) &&
|
|
53
|
-
!startsWith(baseEndpoint, endpoint) &&
|
|
54
|
-
!startsWith('./api/internal.php', endpoint)
|
|
55
|
-
? `${baseEndpoint}${endpoint}`
|
|
56
|
-
: endpoint;
|
|
57
|
-
|
|
58
49
|
const options = isMutation
|
|
59
50
|
? {
|
|
60
51
|
...defaultOptions,
|
|
@@ -62,7 +53,7 @@ export const customFetch = <T>({
|
|
|
62
53
|
}
|
|
63
54
|
: defaultOptions;
|
|
64
55
|
|
|
65
|
-
return fetch(
|
|
56
|
+
return fetch(endpoint, options)
|
|
66
57
|
.then((response) => {
|
|
67
58
|
if (equals(response.status, 204)) {
|
|
68
59
|
return {
|