@centreon/ui 23.10.22-MON-19195-save-dashboard-changes.8 → 23.10.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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@centreon/ui",
3
- "version": "23.10.22-MON-19195-save-dashboard-changes.8",
3
+ "version": "23.10.22",
4
4
  "description": "Centreon UI Components",
5
5
  "scripts": {
6
6
  "eslint": "eslint ./src --ext .js,.jsx,.ts,.tsx --max-warnings 0",
@@ -1,4 +1,4 @@
1
- import { ComponentStory } from '@storybook/react';
1
+ import { ComponentMeta, ComponentStory } from '@storybook/react';
2
2
  import { makeStyles } from 'tss-react/mui';
3
3
 
4
4
  import { Theme } from '@mui/material';
@@ -13,7 +13,7 @@ const useStyles = makeStyles()((theme: Theme) => ({
13
13
  }
14
14
  }));
15
15
 
16
- const meta = {
16
+ export default {
17
17
  argTypes: {
18
18
  labelLoading: { control: 'text' },
19
19
  labelSave: { control: 'text' },
@@ -26,13 +26,8 @@ const meta = {
26
26
 
27
27
  component: ButtonSave,
28
28
 
29
- parameters: {
30
- chromatic: { delay: 300 }
31
- },
32
29
  title: 'Button/Save'
33
- };
34
-
35
- export default meta;
30
+ } as ComponentMeta<typeof ButtonSave>;
36
31
 
37
32
  const TemplateButtonSave: ComponentStory<typeof ButtonSave> = (args) => (
38
33
  <ButtonSave {...args} />
@@ -47,7 +42,7 @@ export const loading = (): JSX.Element => <ButtonSave loading />;
47
42
  export const succeeded = (): JSX.Element => <ButtonSave succeeded />;
48
43
 
49
44
  export const normalWithText = (): JSX.Element => (
50
- <ButtonSave labelSave="Save" size="medium" />
45
+ <ButtonSave labelSave="Save" />
51
46
  );
52
47
 
53
48
  export const largeWithText = (): JSX.Element => (
@@ -55,7 +50,7 @@ export const largeWithText = (): JSX.Element => (
55
50
  );
56
51
 
57
52
  export const loadingWithTextAndMediumSize = (): JSX.Element => (
58
- <ButtonSave loading labelLoading="Loading" size="medium" />
53
+ <ButtonSave loading labelLoading="Loading" />
59
54
  );
60
55
 
61
56
  export const succeededWithText = (): JSX.Element => (
@@ -2,69 +2,67 @@ import { makeStyles } from 'tss-react/mui';
2
2
 
3
3
  import { alpha } from '@mui/material';
4
4
 
5
- export const useDashboardLayoutStyles = makeStyles<boolean>()(
6
- (theme, isStatic: boolean) => ({
7
- container: {
8
- '& .react-grid-item': {
9
- borderRadius: theme.shape.borderRadius,
10
- transition: theme.transitions.create('all', {
11
- delay: 0,
12
- duration: 100,
13
- easing: theme.transitions.easing.easeOut
14
- })
15
- },
16
- '& .react-grid-item.react-draggable-dragging': {
17
- boxShadow: theme.shadows[3]
18
- },
19
- '& .react-grid-item.react-grid-placeholder': {
20
- backgroundColor: alpha(theme.palette.primary.main, 0.7)
21
- },
22
- '& .react-grid-item.resizing': {
23
- boxShadow: theme.shadows[3]
24
- },
25
- '& .react-resizable-handle': {
26
- backgroundColor: theme.palette.action.focus,
27
- backgroundImage: 'none',
28
- borderRadius: theme.shape.borderRadius,
29
- display: isStatic ? 'none' : 'block',
30
- opacity: 0,
31
- position: 'absolute'
32
- },
33
- '& .react-resizable-handle.react-resizable-handle-e': {
34
- cursor: 'ew-resize',
35
- height: `calc(100% - ${theme.spacing(3)})`,
36
- marginTop: 0,
37
- right: 0,
38
- top: 0,
39
- transform: 'rotate(0deg)',
40
- width: theme.spacing(1)
41
- },
42
- '& .react-resizable-handle.react-resizable-handle-s': {
43
- bottom: 0,
44
- cursor: 'ns-resize',
45
- height: theme.spacing(1),
46
- left: 0,
47
- marginLeft: 0,
48
- transform: 'rotate(0deg)',
49
- width: `calc(100% - ${theme.spacing(3)})`
50
- },
51
- '& .react-resizable-handle.react-resizable-handle-se': {
52
- bottom: 0,
53
- cursor: 'nwse-resize',
54
- height: theme.spacing(2),
55
- right: 0,
56
- transform: 'rotate(0deg)',
57
- width: theme.spacing(2)
58
- },
59
- '& .react-resizable-handle::after': {
60
- content: 'none'
61
- },
62
- '& .react-resizable-handle:hover': {
63
- opacity: 1
64
- }
5
+ export const useDashboardLayoutStyles = makeStyles()((theme) => ({
6
+ container: {
7
+ '& .react-grid-item': {
8
+ borderRadius: theme.shape.borderRadius,
9
+ transition: theme.transitions.create('all', {
10
+ delay: 0,
11
+ duration: 100,
12
+ easing: theme.transitions.easing.easeOut
13
+ })
14
+ },
15
+ '& .react-grid-item.react-draggable-dragging': {
16
+ boxShadow: theme.shadows[3]
17
+ },
18
+ '& .react-grid-item.react-grid-placeholder': {
19
+ backgroundColor: alpha(theme.palette.primary.main, 0.7)
20
+ },
21
+ '& .react-grid-item.resizing': {
22
+ boxShadow: theme.shadows[3]
23
+ },
24
+ '& .react-resizable-handle': {
25
+ backgroundColor: theme.palette.action.focus,
26
+ backgroundImage: 'none',
27
+ borderRadius: theme.shape.borderRadius,
28
+ display: 'block',
29
+ opacity: 0,
30
+ position: 'absolute'
31
+ },
32
+ '& .react-resizable-handle.react-resizable-handle-e': {
33
+ cursor: 'ew-resize',
34
+ height: `calc(100% - ${theme.spacing(3)})`,
35
+ marginTop: 0,
36
+ right: 0,
37
+ top: 0,
38
+ transform: 'rotate(0deg)',
39
+ width: theme.spacing(1)
40
+ },
41
+ '& .react-resizable-handle.react-resizable-handle-s': {
42
+ bottom: 0,
43
+ cursor: 'ns-resize',
44
+ height: theme.spacing(1),
45
+ left: 0,
46
+ marginLeft: 0,
47
+ transform: 'rotate(0deg)',
48
+ width: `calc(100% - ${theme.spacing(3)})`
49
+ },
50
+ '& .react-resizable-handle.react-resizable-handle-se': {
51
+ bottom: 0,
52
+ cursor: 'nwse-resize',
53
+ height: theme.spacing(2),
54
+ right: 0,
55
+ transform: 'rotate(0deg)',
56
+ width: theme.spacing(2)
57
+ },
58
+ '& .react-resizable-handle::after': {
59
+ content: 'none'
60
+ },
61
+ '& .react-resizable-handle:hover': {
62
+ opacity: 1
65
63
  }
66
- })
67
- );
64
+ }
65
+ }));
68
66
 
69
67
  export const useDashboardItemStyles = makeStyles()((theme) => ({
70
68
  widgetContainer: {
@@ -1,4 +1,4 @@
1
- import { useMemo, ReactElement } from 'react';
1
+ import { ReactElement, useMemo } from 'react';
2
2
 
3
3
  import { Grid as VisxGrid } from '@visx/visx';
4
4
  import { scaleLinear } from '@visx/scale';
@@ -18,7 +18,7 @@ interface DashboardItemProps {
18
18
  children: ReactElement;
19
19
  className?: string;
20
20
  header?: ReactElement;
21
- id: string;
21
+ key: string;
22
22
  onMouseDown?: (e: MouseEvent<HTMLDivElement>) => void;
23
23
  onMouseUp?: (e: MouseEvent<HTMLDivElement>) => void;
24
24
  onTouchEnd?: (e) => void;
@@ -29,13 +29,13 @@ const Item = forwardRef(
29
29
  (
30
30
  {
31
31
  children,
32
+ key,
32
33
  style,
33
34
  className,
34
35
  header,
35
36
  onMouseDown,
36
37
  onMouseUp,
37
- onTouchEnd,
38
- id
38
+ onTouchEnd
39
39
  }: DashboardItemProps,
40
40
  ref: ForwardedRef<HTMLDivElement>
41
41
  ): ReactElement => {
@@ -55,17 +55,14 @@ const Item = forwardRef(
55
55
  Component: (
56
56
  <div
57
57
  className={className}
58
+ key={key}
58
59
  ref={ref}
59
60
  style={style}
60
61
  {...cardContainerListeners}
61
62
  >
62
63
  <Card className={classes.widgetContainer}>
63
64
  {header && (
64
- <div
65
- {...listeners}
66
- className={classes.widgetHeader}
67
- data-testid={`${id}_move_panel`}
68
- >
65
+ <div {...listeners} className={classes.widgetHeader}>
69
66
  {header}
70
67
  </div>
71
68
  )}
@@ -73,7 +70,7 @@ const Item = forwardRef(
73
70
  </Card>
74
71
  </div>
75
72
  ),
76
- memoProps: [style, className, header]
73
+ memoProps: [key, style, className, header]
77
74
  });
78
75
  }
79
76
  );
@@ -1,4 +1,4 @@
1
- import { ReactElement, ReactNode, useMemo } from 'react';
1
+ import React, { ReactElement, ReactNode, useMemo } from 'react';
2
2
 
3
3
  import { Button as MuiButton } from '@mui/material';
4
4
 
@@ -64,8 +64,8 @@ const Button = ({
64
64
  type={type}
65
65
  variant={muiVariantMap[variant]}
66
66
  onClick={(e) => onClick?.(e)}
67
- {...MuiOverrideProps}
68
67
  {...attr}
68
+ {...MuiOverrideProps}
69
69
  >
70
70
  {children}
71
71
  </MuiButton>
@@ -59,7 +59,6 @@ const DataTableItem = forwardRef(
59
59
  <MuiCardActions>
60
60
  <IconButton
61
61
  aria-label="edit"
62
- data-testid="edit"
63
62
  icon={<EditIcon />}
64
63
  size="small"
65
64
  variant="primary"
@@ -67,7 +66,6 @@ const DataTableItem = forwardRef(
67
66
  />
68
67
  <IconButton
69
68
  aria-label="delete"
70
- data-testid="delete"
71
69
  icon={<DeleteIcon />}
72
70
  size="small"
73
71
  variant="ghost"
@@ -1,4 +1,4 @@
1
1
  export type DashboardResource = {
2
- description?: string | null;
2
+ description?: string;
3
3
  name: string;
4
4
  };
@@ -11,8 +11,7 @@ import { useStyles } from './DashboardForm.styles';
11
11
  import {
12
12
  labelMustBeAtLeast,
13
13
  labelMustBeMost,
14
- labelRequired,
15
- labelCharacters
14
+ labelRequired
16
15
  } from './translatedLabels';
17
16
  import {
18
17
  DashboardFormActions,
@@ -44,7 +43,7 @@ const DashboardForm = ({
44
43
 
45
44
  const formProps = useMemo<FormProps<DashboardResource>>(
46
45
  () => ({
47
- initialValues: resource ?? { description: null, name: '' },
46
+ initialValues: resource ?? { name: '' },
48
47
  inputs: [
49
48
  {
50
49
  fieldName: 'name',
@@ -56,7 +55,7 @@ const DashboardForm = ({
56
55
  {
57
56
  fieldName: 'description',
58
57
  group: 'main',
59
- label: labels?.entity?.description || '',
58
+ label: labels?.entity?.description,
60
59
  text: {
61
60
  multilineRows: 3
62
61
  },
@@ -66,12 +65,9 @@ const DashboardForm = ({
66
65
  submit: (values, bag) => onSubmit?.(values, bag),
67
66
  validationSchema: Yup.object().shape({
68
67
  description: Yup.string()
69
- .label(labels?.entity?.description || '')
70
- .max(
71
- 180,
72
- (p) =>
73
- `${p.label} ${t(labelMustBeMost)} ${p.max} ${t(labelCharacters)}`
74
- )
68
+ .label(labels?.entity?.description)
69
+ .max(180, ({ max, label }) => t(labelMustBeMost, { label, max }))
70
+ .optional()
75
71
  .nullable(),
76
72
  name: Yup.string()
77
73
  .label(labels?.entity?.name)
@@ -3,4 +3,3 @@ export const labelMustBeMost = '{{label}} can be at most {{max}} characters';
3
3
  export const labelMustBeAtLeast =
4
4
  '{{label}} should be at least {{min}} characters long';
5
5
  export const labelRequired = 'Required';
6
- export const labelCharacters = 'characters';
@@ -1,4 +1,4 @@
1
- import { ReactElement, ReactNode } from 'react';
1
+ import React, { ReactElement, ReactNode } from 'react';
2
2
 
3
3
  import { Typography as MuiTypography } from '@mui/material';
4
4
 
@@ -31,8 +31,7 @@ const ModalActions = ({
31
31
  {children || (
32
32
  <>
33
33
  <Button
34
- aria-label={labels?.cancel}
35
- data-testid="cancel"
34
+ aria-label="cancel"
36
35
  size="small"
37
36
  variant="secondary"
38
37
  onClick={() => onCancel?.()}
@@ -40,8 +39,7 @@ const ModalActions = ({
40
39
  {labels?.cancel}
41
40
  </Button>
42
41
  <Button
43
- aria-label={labels?.confirm}
44
- data-testid="confirm"
42
+ aria-label="confirm"
45
43
  isDanger={isDanger}
46
44
  size="small"
47
45
  type="submit"