@centreon/ui 25.5.7 → 25.6.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/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +2 -3
- package/src/TimePeriods/DateTimePickerInput.tsx +3 -1
- package/src/api/useGraphQuery/index.ts +0 -1
- package/src/components/CrudPage/CrudPageRoot.tsx +1 -1
- package/src/components/DataTable/EmptyState/DataTableEmptyState.tsx +4 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/useLocale/index.ts +9 -0
- package/src/utils/useLocale/useLocale.cypress.spec.tsx +38 -0
- package/src/utils/useLocaleDateTimeFormat/index.ts +4 -2
- package/src/utils/usePluralizedTranslation.ts +2 -3
package/package.json
CHANGED
|
@@ -10,8 +10,6 @@ import { Typography } from '@mui/material';
|
|
|
10
10
|
import { LocalizationProvider } from '@mui/x-date-pickers';
|
|
11
11
|
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
12
12
|
|
|
13
|
-
import { userAtom } from '@centreon/ui-context';
|
|
14
|
-
|
|
15
13
|
import DateTimePickerInput from '../../DateTimePickerInput';
|
|
16
14
|
import { isInvalidDate } from '../../helpers';
|
|
17
15
|
import {
|
|
@@ -20,6 +18,7 @@ import {
|
|
|
20
18
|
} from '../../models';
|
|
21
19
|
import { errorTimePeriodAtom } from '../../timePeriodsAtoms';
|
|
22
20
|
|
|
21
|
+
import { useLocale } from '../../../utils';
|
|
23
22
|
import ErrorText from './ErrorText';
|
|
24
23
|
import {
|
|
25
24
|
PickersStartEndDateDirection,
|
|
@@ -100,7 +99,7 @@ const PickersStartEndDate = ({
|
|
|
100
99
|
}: PickersStartEndDateProps): JSX.Element => {
|
|
101
100
|
const { classes } = useStyles();
|
|
102
101
|
|
|
103
|
-
const
|
|
102
|
+
const locale = useLocale();
|
|
104
103
|
const error = useAtomValue(errorTimePeriodAtom);
|
|
105
104
|
const isError = error || isInvalidDate({ endDate, startDate });
|
|
106
105
|
|
|
@@ -13,6 +13,7 @@ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
|
13
13
|
|
|
14
14
|
import { userAtom } from '@centreon/ui-context';
|
|
15
15
|
|
|
16
|
+
import { useLocale } from '../utils';
|
|
16
17
|
import { CustomTimePeriodProperty } from './models';
|
|
17
18
|
|
|
18
19
|
interface ChangeDateProps {
|
|
@@ -50,6 +51,7 @@ const DateTimePickerInput = ({
|
|
|
50
51
|
'@media (min-width: 1024px) or (pointer: fine)';
|
|
51
52
|
|
|
52
53
|
const user = useAtomValue(userAtom);
|
|
54
|
+
const localeToUse = useLocale();
|
|
53
55
|
|
|
54
56
|
const isUTC = equals(timezone ?? user.timezone, 'UTC');
|
|
55
57
|
|
|
@@ -72,7 +74,7 @@ const DateTimePickerInput = ({
|
|
|
72
74
|
|
|
73
75
|
return (
|
|
74
76
|
<LocalizationProvider
|
|
75
|
-
adapterLocale={(locale ??
|
|
77
|
+
adapterLocale={(locale ?? localeToUse).substring(0, 2)}
|
|
76
78
|
dateAdapter={AdapterDayjs}
|
|
77
79
|
dateLibInstance={dayjs}
|
|
78
80
|
>
|
|
@@ -97,7 +97,7 @@ export const CrudPageRoot = <
|
|
|
97
97
|
{isDataEmpty && !isLoading ? (
|
|
98
98
|
<DataTable.EmptyState
|
|
99
99
|
aria-label="create"
|
|
100
|
-
|
|
100
|
+
buttonCreateTestId="create-crudpage"
|
|
101
101
|
labels={{
|
|
102
102
|
title: labels.welcome.title,
|
|
103
103
|
description: labels.welcome.description,
|
|
@@ -19,12 +19,14 @@ type ListEmptyStateProps = {
|
|
|
19
19
|
description?: string;
|
|
20
20
|
};
|
|
21
21
|
onCreate?: () => void;
|
|
22
|
+
buttonCreateTestId?: string;
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
const DataTableEmptyState = ({
|
|
25
26
|
labels,
|
|
26
27
|
onCreate,
|
|
27
|
-
canCreate = true
|
|
28
|
+
canCreate = true,
|
|
29
|
+
buttonCreateTestId
|
|
28
30
|
}: ListEmptyStateProps): ReactElement => {
|
|
29
31
|
const { classes } = useStyles();
|
|
30
32
|
const { t } = useTranslation();
|
|
@@ -47,6 +49,7 @@ const DataTableEmptyState = ({
|
|
|
47
49
|
icon={<AddIcon />}
|
|
48
50
|
iconVariant="start"
|
|
49
51
|
onClick={() => onCreate?.()}
|
|
52
|
+
data-testid={buttonCreateTestId}
|
|
50
53
|
>
|
|
51
54
|
{t(labels.actions?.create || '')}
|
|
52
55
|
</Button>
|
package/src/utils/index.ts
CHANGED
|
@@ -28,3 +28,4 @@ export * from '../Graph/Chart/InteractiveComponents/TimeShiftZones/useTimeShiftZ
|
|
|
28
28
|
export * from '../TimePeriods/helpers';
|
|
29
29
|
export { lastDayPeriod, type Parameters } from '../TimePeriods/models';
|
|
30
30
|
export * from './useLocaleTimezoneDate/useLocaleTimezoneDate';
|
|
31
|
+
export * from './useLocale';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { browserLocaleAtom, userAtom } from '@centreon/ui-context';
|
|
2
|
+
import { useAtomValue } from 'jotai';
|
|
3
|
+
|
|
4
|
+
export const useLocale = () => {
|
|
5
|
+
const user = useAtomValue(userAtom);
|
|
6
|
+
const browserLocale = useAtomValue(browserLocaleAtom);
|
|
7
|
+
|
|
8
|
+
return user.locale || browserLocale;
|
|
9
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { browserLocaleAtom, userAtom } from '@centreon/ui-context';
|
|
2
|
+
import { Provider, createStore } from 'jotai';
|
|
3
|
+
import { useLocale } from '.';
|
|
4
|
+
|
|
5
|
+
const TestComponent = () => {
|
|
6
|
+
const locale = useLocale();
|
|
7
|
+
|
|
8
|
+
return <p>{locale}</p>;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const initialize = ({ userLocale, browserLocale }) => {
|
|
12
|
+
const store = createStore();
|
|
13
|
+
|
|
14
|
+
store.set(userAtom, { locale: userLocale });
|
|
15
|
+
store.set(browserLocaleAtom, browserLocale);
|
|
16
|
+
|
|
17
|
+
cy.mount({
|
|
18
|
+
Component: (
|
|
19
|
+
<Provider store={store}>
|
|
20
|
+
<TestComponent />
|
|
21
|
+
</Provider>
|
|
22
|
+
)
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
describe('useLocale', () => {
|
|
27
|
+
it('displays the user locale when the corresponding atom is set', () => {
|
|
28
|
+
initialize({ userLocale: 'fi', browserLocale: 'en' });
|
|
29
|
+
|
|
30
|
+
cy.contains('fi').should('be.visible');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('displays the browser locale when the user locale is not set', () => {
|
|
34
|
+
initialize({ browserLocale: 'de', userLocale: null });
|
|
35
|
+
|
|
36
|
+
cy.contains('de').should('be.visible');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -5,6 +5,7 @@ import { useAtomValue } from 'jotai';
|
|
|
5
5
|
|
|
6
6
|
import { userAtom } from '@centreon/ui-context';
|
|
7
7
|
|
|
8
|
+
import { useLocale } from '../useLocale';
|
|
8
9
|
import shortLocales from './sortLocales';
|
|
9
10
|
|
|
10
11
|
interface FormatParameters {
|
|
@@ -28,10 +29,11 @@ const timeFormat = 'LT';
|
|
|
28
29
|
const dateTimeFormat = `${dateFormat} ${timeFormat}`;
|
|
29
30
|
|
|
30
31
|
const useLocaleDateTimeFormat = (): LocaleDateTimeFormat => {
|
|
31
|
-
const
|
|
32
|
+
const locale = useLocale();
|
|
33
|
+
const { timezone } = useAtomValue(userAtom);
|
|
32
34
|
|
|
33
35
|
const format = ({ date, formatString }: FormatParameters): string => {
|
|
34
|
-
const normalizedLocale = locale
|
|
36
|
+
const normalizedLocale = locale?.substring(0, 2);
|
|
35
37
|
|
|
36
38
|
const timezoneDate = dayjs(
|
|
37
39
|
new Date(date).toLocaleString('en', { timeZone: timezone })
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
2
|
|
|
3
|
-
import { useAtomValue } from 'jotai';
|
|
4
3
|
import pluralize from 'pluralize';
|
|
5
4
|
import { equals, includes } from 'ramda';
|
|
6
5
|
import { useTranslation } from 'react-i18next';
|
|
7
6
|
|
|
8
|
-
import {
|
|
7
|
+
import { useLocale } from './useLocale';
|
|
9
8
|
|
|
10
9
|
interface TProps {
|
|
11
10
|
count: number;
|
|
@@ -16,7 +15,7 @@ export const usePluralizedTranslation = (): {
|
|
|
16
15
|
pluralizedT: (props: TProps) => string;
|
|
17
16
|
} => {
|
|
18
17
|
const translation = useTranslation();
|
|
19
|
-
const
|
|
18
|
+
const locale = useLocale();
|
|
20
19
|
|
|
21
20
|
const isNotPartitiveLocale = includes('fr', locale);
|
|
22
21
|
|