@centreon/ui 23.10.1 → 23.10.3-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.
Files changed (72) hide show
  1. package/README.md +44 -14
  2. package/package.json +41 -23
  3. package/public/README.md +39 -0
  4. package/src/@assets/README.md +5 -0
  5. package/src/@assets/brand/centreon-logo-one-line-dark.svg +1 -0
  6. package/src/@assets/brand/centreon-logo-one-line-light.svg +1 -0
  7. package/src/@types/globals.d.ts +9 -0
  8. package/src/@types/vite-env.d.ts +2 -0
  9. package/src/Dialog/Duplicate/index.test.tsx +1 -1
  10. package/src/FallbackPage/FallbackPage.tsx +2 -2
  11. package/src/Home.stories.mdx +1 -84
  12. package/src/Image/index.stories.tsx +2 -2
  13. package/src/Image/index.test.tsx +3 -3
  14. package/src/InputField/Select/Autocomplete/Connected/Multi/index.test.tsx +1 -1
  15. package/src/InputField/Select/Autocomplete/Connected/index.stories.tsx +0 -3
  16. package/src/InputField/Select/Autocomplete/Connected/index.test.tsx +1 -1
  17. package/src/InputField/Select/Autocomplete/Draggable/index.stories.tsx +0 -2
  18. package/src/Listing/Cell/DataCell.styles.ts +24 -0
  19. package/src/Listing/Cell/DataCell.tsx +26 -63
  20. package/src/Listing/Header/Cell/ListingHeaderCell.styles.ts +71 -0
  21. package/src/Listing/Header/{SortableCell/Content.tsx → Cell/ListingHeaderCell.tsx} +16 -84
  22. package/src/Listing/Header/Cell/SelectActionListingHeaderCell.styles.ts +26 -0
  23. package/src/Listing/Header/Cell/SelectActionListingHeaderCell.tsx +70 -0
  24. package/src/Listing/Header/ListingHeader.styles.ts +16 -0
  25. package/src/Listing/Header/{index.tsx → ListingHeader.tsx} +25 -98
  26. package/src/Listing/Header/_internals/DraggableIconButton.tsx +35 -0
  27. package/src/Listing/Header/{PredefinedSelectionList.tsx → _internals/PredefinedSelectionList.tsx} +1 -1
  28. package/src/Listing/Header/index.ts +1 -0
  29. package/src/Listing/Listing.styles.ts +1 -2
  30. package/src/Listing/index.stories.tsx +29 -3
  31. package/src/Listing/index.test.tsx +1 -1
  32. package/src/Listing/index.tsx +4 -7
  33. package/src/Listing/useStyleTable.ts +1 -1
  34. package/src/Logo/CentreonLogo.tsx +2 -2
  35. package/src/Module/LicensedModule/LicenseCheck/index.stories.tsx +0 -2
  36. package/src/Panel/Section/index.test.tsx +1 -1
  37. package/src/ThemeProvider/index.tsx +30 -1
  38. package/src/WallpaperPage/index.stories.tsx +1 -1
  39. package/src/Wizard/ActionsBar.test.tsx +1 -1
  40. package/src/Wizard/index.test.tsx +1 -1
  41. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-listing-with-editable-and-sortable-columns-1-snap.png +0 -0
  42. package/.storybook/main.js +0 -82
  43. package/.storybook/preview.tsx +0 -21
  44. package/cypress/support/commands.ts +0 -19
  45. package/cypress/support/component-index.html +0 -12
  46. package/cypress/support/component.tsx +0 -5
  47. package/cypress.config.ts +0 -5
  48. package/jest.config.js +0 -20
  49. package/setupTests.js +0 -86
  50. package/src/Listing/Header/SortableCell/DraggableIcon.tsx +0 -41
  51. package/src/storyshots.test.js +0 -52
  52. package/src/testRenderer.tsx +0 -56
  53. package/testRunner.js +0 -36
  54. package/tsconfig.json +0 -29
  55. package/types/declarations.d.ts +0 -9
  56. /package/{assets → public/brand}/centreon-logo-one-line-dark.svg +0 -0
  57. /package/{assets → public/brand}/centreon-logo-one-line-light.svg +0 -0
  58. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.ttf +0 -0
  59. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.woff +0 -0
  60. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.woff2 +0 -0
  61. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.ttf +0 -0
  62. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.woff +0 -0
  63. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.woff2 +0 -0
  64. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.ttf +0 -0
  65. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.woff +0 -0
  66. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.woff2 +0 -0
  67. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.ttf +0 -0
  68. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.woff +0 -0
  69. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.woff2 +0 -0
  70. /package/{assets → src/@assets/images}/not-authorized-template-background-dark.svg +0 -0
  71. /package/{assets → src/@assets/images}/not-authorized-template-background-light.svg +0 -0
  72. /package/src/Listing/Header/{Label.tsx → _internals/Label.tsx} +0 -0
@@ -2,64 +2,22 @@ import * as React from 'react';
2
2
 
3
3
  import { closestCenter, DraggableSyntheticListeners } from '@dnd-kit/core';
4
4
  import { horizontalListSortingStrategy } from '@dnd-kit/sortable';
5
- import { equals, find, isEmpty, map, not, pick, propEq } from 'ramda';
6
- import { makeStyles } from 'tss-react/mui';
5
+ import { equals, find, map, pick, propEq } from 'ramda';
7
6
 
8
- import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
9
- import {
10
- TableCell,
11
- TableCellBaseProps,
12
- TableHead,
13
- TableRow
14
- } from '@mui/material';
7
+ import { TableHead, TableRow } from '@mui/material';
15
8
 
16
9
  import { ListingVariant } from '@centreon/ui-context';
17
10
 
18
11
  import { getVisibleColumns, Props as ListingProps } from '..';
19
- import PopoverMenu from '../../PopoverMenu';
20
12
  import SortableItems from '../../SortableItems';
21
- import Checkbox from '../Checkbox';
22
- import { Column, PredefinedRowSelection } from '../models';
23
- import { labelPredefinedRowsSelectionMenu } from '../translatedLabels';
24
-
25
- import PredefinedSelectionList from './PredefinedSelectionList';
26
- import SortableHeaderCellContent from './SortableCell/Content';
13
+ import { Column } from '../models';
27
14
 
28
- const useStyles = makeStyles()((theme) => ({
29
- checkbox: {
30
- '&.Mui-checked': {
31
- color: theme.palette.common.white
32
- },
33
- '&.MuiCheckbox-indeterminate': {
34
- color: theme.palette.common.white
35
- },
36
- color: theme.palette.common.white
37
- },
38
- checkboxHeaderCell: {
39
- alignItems: 'center',
40
- backgroundColor: theme.palette.background.listingHeader,
41
- borderBottom: 'none',
42
- display: 'flex',
43
- justifyContent: 'start',
44
- lineHeight: 'inherit',
45
- minWidth: theme.spacing(51 / 8),
46
- padding: 0
47
- },
48
- headerLabelDragging: {
49
- cursor: 'grabbing'
50
- },
51
- predefinedRowsMenu: {
52
- color: theme.palette.common.white,
53
- width: theme.spacing(2)
54
- },
55
- root: {
56
- height: '100%',
57
- padding: theme.spacing(0, 1)
58
- },
59
- row: {
60
- display: 'contents'
61
- }
62
- }));
15
+ import ListingHeaderCell from './Cell/ListingHeaderCell';
16
+ import { useStyles } from './ListingHeader.styles';
17
+ import {
18
+ SelectActionListingHeaderCell,
19
+ SelectActionListingHeaderCellProps
20
+ } from './Cell/SelectActionListingHeaderCell';
63
21
 
64
22
  type Props = Pick<
65
23
  ListingProps<unknown>,
@@ -74,13 +32,9 @@ type Props = Pick<
74
32
  > & {
75
33
  areColumnsEditable: boolean;
76
34
  memoProps: Array<unknown>;
77
- onSelectAllClick: (event) => void;
78
- onSelectRowsWithCondition: (condition) => void;
79
- predefinedRowsSelection: Array<PredefinedRowSelection>;
80
35
  rowCount: number;
81
- selectedRowCount: number;
82
36
  viewMode?: ListingVariant;
83
- };
37
+ } & SelectActionListingHeaderCellProps;
84
38
 
85
39
  interface ContentProps extends Pick<Props, 'sortField' | 'sortOrder'> {
86
40
  attributes;
@@ -93,21 +47,21 @@ interface ContentProps extends Pick<Props, 'sortField' | 'sortOrder'> {
93
47
  }
94
48
 
95
49
  const ListingHeader = ({
96
- onSelectAllClick,
97
50
  sortOrder,
98
51
  sortField,
99
- selectedRowCount,
100
52
  rowCount,
101
53
  columns,
102
54
  columnConfiguration,
103
55
  onSort,
104
56
  onSelectColumns,
105
57
  checkable,
106
- predefinedRowsSelection,
107
- onSelectRowsWithCondition,
108
58
  memoProps,
109
59
  areColumnsEditable,
110
- viewMode
60
+ viewMode,
61
+ onSelectAllClick,
62
+ selectedRowCount,
63
+ predefinedRowsSelection,
64
+ onSelectRowsWithCondition
111
65
  }: Props): JSX.Element => {
112
66
  const { classes, cx } = useStyles();
113
67
 
@@ -131,7 +85,7 @@ const ListingHeader = ({
131
85
  id
132
86
  }: ContentProps): JSX.Element => {
133
87
  return (
134
- <SortableHeaderCellContent
88
+ <ListingHeaderCell
135
89
  areColumnsEditable={areColumnsEditable}
136
90
  column={getColumnById(id)}
137
91
  columnConfiguration={columnConfiguration}
@@ -151,45 +105,17 @@ const ListingHeader = ({
151
105
  [columnConfiguration, columns, sortField, sortOrder]
152
106
  );
153
107
 
154
- const hasRows = not(equals(rowCount, 0));
155
-
156
108
  return (
157
109
  <TableHead className={cx(classes.row, 'listingHeader')} component="div">
158
110
  <TableRow className={classes.row} component="div">
159
111
  {checkable && (
160
- <TableCell
161
- className={classes.checkboxHeaderCell}
162
- component={
163
- 'div' as unknown as React.ElementType<TableCellBaseProps>
164
- }
165
- >
166
- <Checkbox
167
- checked={hasRows && selectedRowCount === rowCount}
168
- className={classes.checkbox}
169
- indeterminate={
170
- hasRows && selectedRowCount > 0 && selectedRowCount < rowCount
171
- }
172
- inputProps={{ 'aria-label': 'Select all' }}
173
- onChange={onSelectAllClick}
174
- />
175
- {not(isEmpty(predefinedRowsSelection)) ? (
176
- <PopoverMenu
177
- className={classes.predefinedRowsMenu}
178
- icon={<ArrowDropDownIcon />}
179
- title={labelPredefinedRowsSelectionMenu}
180
- >
181
- {({ close }): JSX.Element => (
182
- <PredefinedSelectionList
183
- close={close}
184
- predefinedRowsSelection={predefinedRowsSelection}
185
- onSelectRowsWithCondition={onSelectRowsWithCondition}
186
- />
187
- )}
188
- </PopoverMenu>
189
- ) : (
190
- <div className={classes.predefinedRowsMenu} />
191
- )}
192
- </TableCell>
112
+ <SelectActionListingHeaderCell
113
+ predefinedRowsSelection={predefinedRowsSelection}
114
+ rowCount={rowCount}
115
+ selectedRowCount={selectedRowCount}
116
+ onSelectAllClick={onSelectAllClick}
117
+ onSelectRowsWithCondition={onSelectRowsWithCondition}
118
+ />
193
119
  )}
194
120
  <SortableItems
195
121
  updateSortableItemsOnItemsChange
@@ -214,6 +140,7 @@ const columnMemoProps = [
214
140
  'label',
215
141
  'rowMemoProps',
216
142
  'sortField',
143
+ 'sortOrder',
217
144
  'sortable',
218
145
  'type'
219
146
  ];
@@ -236,4 +163,4 @@ const MemoizedListingHeader = React.memo<Props>(
236
163
  equals(prevProps.viewMode, nextProps.viewMode)
237
164
  );
238
165
 
239
- export default MemoizedListingHeader;
166
+ export { MemoizedListingHeader as ListingHeader };
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+
3
+ import { useTranslation } from 'react-i18next';
4
+
5
+ import { SvgIcon, IconButton as MuiIconButton } from '@mui/material';
6
+ import DragIndicatorIcon from '@mui/icons-material/DragIndicator';
7
+
8
+ import { labelDragHandle } from '../../translatedLabels';
9
+
10
+ interface DraggableIconButtonProps {
11
+ className?: string;
12
+ columnLabel?: string;
13
+ }
14
+
15
+ const DraggableIconButton = ({
16
+ columnLabel,
17
+ className,
18
+ ...props
19
+ }: DraggableIconButtonProps): JSX.Element => {
20
+ const { t } = useTranslation();
21
+
22
+ return (
23
+ <MuiIconButton
24
+ className={className}
25
+ {...props}
26
+ aria-label={`${columnLabel} ${t(labelDragHandle)}`}
27
+ >
28
+ <SvgIcon fontSize="small">
29
+ <DragIndicatorIcon />
30
+ </SvgIcon>
31
+ </MuiIconButton>
32
+ );
33
+ };
34
+
35
+ export { DraggableIconButton };
@@ -1,6 +1,6 @@
1
1
  import { List, ListItem, ListItemText } from '@mui/material';
2
2
 
3
- import { PredefinedRowSelection } from '../models';
3
+ import { PredefinedRowSelection } from '../../models';
4
4
 
5
5
  interface Props {
6
6
  close: () => void;
@@ -0,0 +1 @@
1
+ export * from './ListingHeader';
@@ -37,7 +37,6 @@ const useStyles = makeStyles<StylesProps>()(
37
37
  table: {
38
38
  '.listingHeader': {
39
39
  backgroundColor: theme.palette.background.listingHeader,
40
- boxShadow: `-1px 0px 0px 0px ${theme.palette.background.listingHeader}`,
41
40
  padding: theme.spacing(0, 1)
42
41
  },
43
42
  '.listingHeader > div > div': {
@@ -46,7 +45,7 @@ const useStyles = makeStyles<StylesProps>()(
46
45
  },
47
46
  '.listingHeader > div > div:first-of-type': {
48
47
  height: '100%',
49
- paddingLeft: theme.spacing(1.5)
48
+ padding: theme.spacing(0, 0.5, 0, 1.5)
50
49
  },
51
50
  alignItems: 'center',
52
51
  display: 'grid',
@@ -12,7 +12,7 @@ import { ListingVariant } from '@centreon/ui-context';
12
12
 
13
13
  import { ListingProps } from '..';
14
14
 
15
- import { Column, ColumnType } from './models';
15
+ import { Column, ColumnType, SortOrder } from './models';
16
16
 
17
17
  import Listing from '.';
18
18
 
@@ -153,7 +153,7 @@ const Story = ({
153
153
  limit={listing.length}
154
154
  predefinedRowsSelection={predefinedRowsSelection}
155
155
  rowColorConditions={rowColorConditions}
156
- rows={listing}
156
+ rows={props.rows ?? listing}
157
157
  selectedRows={selected}
158
158
  totalRows={listing.length}
159
159
  viewerModeConfiguration={viewerModeConfiguration}
@@ -214,12 +214,14 @@ const editableColumns = [
214
214
  getFormattedString: ({ name }): string => name,
215
215
  id: 'name',
216
216
  label: 'Name',
217
+ sortable: true,
217
218
  type: ColumnType.string
218
219
  },
219
220
  {
220
221
  getFormattedString: ({ description }): string => description,
221
222
  id: 'description',
222
223
  label: 'Description',
224
+ sortable: true,
223
225
  type: ColumnType.string
224
226
  },
225
227
  {
@@ -247,6 +249,26 @@ const ListingWithEditableColumns = (): JSX.Element => {
247
249
  setSelectedColumnIds(defaultColumnIds);
248
250
  };
249
251
 
252
+ const [sortedRows, setSortedRows] = useState(listing);
253
+ const [sortParams, setSortParams] = useState({
254
+ sortField: editableColumns[0].id,
255
+ sortOrder: 'desc'
256
+ });
257
+
258
+ const onSort = (params: {
259
+ sortField: string;
260
+ sortOrder: SortOrder;
261
+ }): void => {
262
+ const rows = [...sortedRows];
263
+ rows.sort((a, b) =>
264
+ params.sortOrder === 'desc'
265
+ ? a[params.sortField]?.localeCompare(b[params.sortField])
266
+ : b[params.sortField]?.localeCompare(a[params.sortField])
267
+ );
268
+ setSortedRows(rows);
269
+ setSortParams(params);
270
+ };
271
+
250
272
  return (
251
273
  <Story
252
274
  columnConfiguration={{
@@ -254,13 +276,17 @@ const ListingWithEditableColumns = (): JSX.Element => {
254
276
  sortable: true
255
277
  }}
256
278
  columns={editableColumns}
279
+ rows={sortedRows}
280
+ sortField={sortParams.sortField}
281
+ sortOrder={sortParams.sortOrder as SortOrder}
257
282
  onResetColumns={resetColumns}
258
283
  onSelectColumns={setSelectedColumnIds}
284
+ onSort={onSort}
259
285
  />
260
286
  );
261
287
  };
262
288
 
263
- export const withEditableColumns = (): JSX.Element => (
289
+ export const withEditableAndSortableColumns = (): JSX.Element => (
264
290
  <ListingWithEditableColumns />
265
291
  );
266
292
 
@@ -2,7 +2,7 @@ import { useState } from 'react';
2
2
 
3
3
  import { prop } from 'ramda';
4
4
 
5
- import { render, fireEvent, within } from '../testRenderer';
5
+ import { render, fireEvent, within } from '../../test/testRenderer';
6
6
 
7
7
  import { ColumnType } from './models';
8
8
  import { labelAddColumns } from './translatedLabels';
@@ -27,7 +27,7 @@ import {
27
27
  } from 'ramda';
28
28
  import { useTranslation } from 'react-i18next';
29
29
 
30
- import { Box, LinearProgress, Table, TableBody, useTheme } from '@mui/material';
30
+ import { Box, LinearProgress, Table, TableBody } from '@mui/material';
31
31
 
32
32
  import { ListingVariant } from '@centreon/ui-context';
33
33
 
@@ -39,7 +39,6 @@ import Cell from './Cell';
39
39
  import DataCell from './Cell/DataCell';
40
40
  import Checkbox from './Checkbox';
41
41
  import getCumulativeOffset from './getCumulativeOffset';
42
- import ListingHeader from './Header/index';
43
42
  import {
44
43
  Column,
45
44
  ColumnConfiguration,
@@ -55,6 +54,7 @@ import useStyleTable from './useStyleTable';
55
54
  import { loadingIndicatorHeight, useStyles } from './Listing.styles';
56
55
  import { EmptyResult } from './EmptyResult/EmptyResult';
57
56
  import { SkeletonLoader } from './Row/SkeletonLoaderRows';
57
+ import { ListingHeader } from './Header';
58
58
 
59
59
  const getVisibleColumns = ({
60
60
  columnConfiguration,
@@ -107,7 +107,7 @@ export interface Props<TRow> {
107
107
  onRowClick?: (row: TRow) => void;
108
108
  onSelectColumns?: (selectedColumnIds: Array<string>) => void;
109
109
  onSelectRows?: (rows: Array<TRow>) => void;
110
- onSort?: (sortParams) => void;
110
+ onSort?: (sortParams: { sortField: string; sortOrder: SortOrder }) => void;
111
111
  paginated?: boolean;
112
112
  predefinedRowsSelection?: Array<PredefinedRowSelection>;
113
113
  rowColorConditions?: Array<RowColorCondition>;
@@ -173,7 +173,7 @@ const Listing = <TRow extends { id: RowId }>({
173
173
  viewMode
174
174
  });
175
175
 
176
- const { classes } = useStyles({
176
+ const { classes, theme } = useStyles({
177
177
  dataStyle,
178
178
  getGridTemplateColumn,
179
179
  limit,
@@ -193,8 +193,6 @@ const Listing = <TRow extends { id: RowId }>({
193
193
  const containerRef = React.useRef<HTMLDivElement>();
194
194
  const actionBarRef = React.useRef<HTMLDivElement>();
195
195
 
196
- const theme = useTheme();
197
-
198
196
  useResizeObserver({
199
197
  onResize: () => {
200
198
  setTableTopOffset(getCumulativeOffset(containerRef.current));
@@ -556,7 +554,6 @@ const Listing = <TRow extends { id: RowId }>({
556
554
 
557
555
  {visibleColumns.map((column) => (
558
556
  <DataCell
559
- areColumnsEditable={areColumnsEditable}
560
557
  column={column}
561
558
  disableRowCondition={disableRowCondition}
562
559
  getHighlightRowCondition={getHighlightRowCondition}
@@ -50,7 +50,7 @@ const useStyleTable = ({
50
50
  const updateStyleTable = useSetAtom(tableStyleDerivedAtom);
51
51
 
52
52
  const getGridTemplateColumn = (): string => {
53
- const checkbox = checkable ? '50px ' : '';
53
+ const checkbox = checkable ? 'fit-content(1rem) ' : ''; // SelectAction (checkbox) cell adjusts to content
54
54
 
55
55
  const columnTemplate = currentVisibleColumns
56
56
  ?.map(({ width, shortLabel }) => {
@@ -6,8 +6,8 @@ import { makeStyles } from 'tss-react/mui';
6
6
  import { Image, ImageVariant } from '..';
7
7
  import LoadingSkeleton from '../LoadingSkeleton';
8
8
  import { useThemeMode } from '../utils/useThemeMode';
9
- import CentreonLogoLight from '../../assets/centreon-logo-one-line-light.svg';
10
- import CentreonLogoDark from '../../assets/centreon-logo-one-line-dark.svg';
9
+ import CentreonLogoLight from '../@assets/brand/centreon-logo-one-line-light.svg';
10
+ import CentreonLogoDark from '../@assets/brand/centreon-logo-one-line-dark.svg';
11
11
 
12
12
  import { labelCentreonLogo } from './translatedLabels';
13
13
 
@@ -1,5 +1,4 @@
1
1
  import { ComponentMeta, ComponentStory } from '@storybook/react';
2
- import withMock from 'storybook-addon-mock';
3
2
  import { makeStyles } from 'tss-react/mui';
4
3
 
5
4
  import { Alert, Container } from '@mui/material';
@@ -20,7 +19,6 @@ export default {
20
19
  moduleName: { control: 'text' }
21
20
  },
22
21
  component: LicenseCheck,
23
- decorators: [withMock],
24
22
  title: 'LicenseCheck'
25
23
  } as ComponentMeta<typeof LicenseCheck>;
26
24
 
@@ -1,4 +1,4 @@
1
- import { render, fireEvent } from '../../testRenderer';
1
+ import { render, fireEvent } from '../../../test/testRenderer';
2
2
 
3
3
  import SectionPanel from '.';
4
4
 
@@ -17,6 +17,10 @@ import { autocompleteClasses } from '@mui/material/Autocomplete';
17
17
  import { ThemeOptions } from '@mui/material/styles/createTheme';
18
18
 
19
19
  import { ThemeMode, userAtom } from '@centreon/ui-context';
20
+ import RobotoLightWoff2 from '@centreon/ui/fonts/roboto-light-webfont.woff2';
21
+ import RobotoRegularWoff2 from '@centreon/ui/fonts/roboto-regular-webfont.woff2';
22
+ import RobotoMediumWoff2 from '@centreon/ui/fonts/roboto-medium-webfont.woff2';
23
+ import RobotoBoldWoff2 from '@centreon/ui/fonts/roboto-bold-webfont.woff2';
20
24
 
21
25
  import { getPalette } from './palettes';
22
26
 
@@ -180,6 +184,30 @@ export const getTheme = (mode: ThemeMode): ThemeOptions => ({
180
184
  padding: 0;
181
185
  width: 100%;
182
186
  }
187
+ @font-face {
188
+ font-family: 'Roboto';
189
+ font-style: normal;
190
+ font-weight: 300;
191
+ src: local('Roboto'), local('Roboto-Light'), url(${RobotoLightWoff2}) format('woff2');
192
+ }
193
+ @font-face {
194
+ font-family: 'Roboto';
195
+ font-style: normal;
196
+ font-weight: 400;
197
+ src: local('Roboto'), local('Roboto-Regular'), url(${RobotoRegularWoff2}) format('woff2');
198
+ }
199
+ @font-face {
200
+ font-family: 'Roboto';
201
+ font-style: normal;
202
+ font-weight: 500;
203
+ src: local('Roboto'), local('Roboto-Medium'), url(${RobotoMediumWoff2}) format('woff2');
204
+ }
205
+ @font-face {
206
+ font-family: 'Roboto';
207
+ font-style: normal;
208
+ font-weight: 600;
209
+ src: local('Roboto'), local('Roboto-Bold'), url(${RobotoBoldWoff2}) format('woff2');
210
+ }
183
211
  `
184
212
  },
185
213
  MuiInputBase: {
@@ -253,7 +281,8 @@ export const getTheme = (mode: ThemeMode): ThemeOptions => ({
253
281
  },
254
282
  caption: {
255
283
  fontSize: '0.625rem'
256
- }
284
+ },
285
+ fontFamily: 'Roboto, Arial'
257
286
  }
258
287
  });
259
288
 
@@ -1,6 +1,6 @@
1
1
  import { ComponentMeta } from '@storybook/react';
2
2
 
3
- import image from '../../assets/not-authorized-template-background-light.svg';
3
+ import image from '../@assets/images/not-authorized-template-background-light.svg';
4
4
 
5
5
  import WallpaperPage from '.';
6
6
 
@@ -1,4 +1,4 @@
1
- import { render, screen, fireEvent } from '../testRenderer';
1
+ import { render, screen, fireEvent } from '../../test/testRenderer';
2
2
 
3
3
  import ActionsBar from './ActionsBar';
4
4
 
@@ -8,7 +8,7 @@ import {
8
8
  waitFor,
9
9
  screen,
10
10
  RenderResult
11
- } from '../testRenderer';
11
+ } from '../../test/testRenderer';
12
12
 
13
13
  import { StepComponentProps } from './models';
14
14
 
@@ -1,82 +0,0 @@
1
- const { equals } = require("ramda");
2
-
3
- const excludeNodeModulesExceptCentreonUi =
4
- /node_modules(\\|\/)(?!(centreon-frontend(\\|\/)packages(\\|\/)(ui-context|centreon-ui)))/;
5
-
6
- module.exports = {
7
- core: {
8
- builder: 'webpack5',
9
- },
10
- features: {
11
- previewMdx2: true,
12
- },
13
- stories: ['../src/*.stories.mdx', '../src/**/*.stories.@(jsx|tsx)'],
14
- typescript: {
15
- reactDocgen: 'react-docgen-typescript'
16
- },
17
- addons: [
18
- 'storybook-addon-mock/register',
19
- 'storybook-dark-mode',
20
- '@storybook/addon-controls',
21
- {
22
- name: '@storybook/addon-docs',
23
- options: {
24
- configureJSX: true,
25
- },
26
- },
27
- ],
28
- webpackFinal: (config) => {
29
- delete config.resolve.alias['emotion-theming'];
30
- delete config.resolve.alias['@emotion/styled'];
31
- delete config.resolve.alias['@emotion/core'];
32
-
33
- const configWithoutEmotionAliases = {
34
- ...config,
35
- resolve: {
36
- ...config.resolve,
37
- extensions: ['.js', '.ts', '.tsx'],
38
- },
39
- module: {
40
- ...config.module,
41
- rules: [
42
- {
43
- test: /\.tsx?$/,
44
- exclude: /node_modules(\\|\/)(?!(@centreon))/,
45
- use: {
46
- loader: 'swc-loader',
47
- options: {
48
- jsc: {
49
- transform: {
50
- react: {
51
- runtime: 'automatic',
52
- },
53
- },
54
- parser: {
55
- syntax: 'typescript',
56
- },
57
- },
58
- parseMap: true,
59
- },
60
- }
61
- },
62
- {
63
- exclude: excludeNodeModulesExceptCentreonUi,
64
- test: /\.(bmp|png|jpg|jpeg|gif|svg)$/,
65
- use: [
66
- {
67
- loader: 'url-loader',
68
- options: {
69
- limit: 10000,
70
- name: '[name].[hash:8].[ext]',
71
- },
72
- },
73
- ],
74
- },
75
- ...(config.module.rules.filter(({ type }) => !equals(type, 'asset/resource'))),
76
- ],
77
- },
78
- }
79
-
80
- return configWithoutEmotionAliases;
81
- }
82
- };
@@ -1,21 +0,0 @@
1
- import { addDecorator } from '@storybook/react';
2
-
3
- import { useDarkMode } from 'storybook-dark-mode';
4
-
5
- import { ThemeMode } from '@centreon/ui-context';
6
-
7
- import StoryBookThemeProvider from '../src/StoryBookThemeProvider';
8
- import QueryProvider from '../src/api/QueryProvider';
9
- import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
10
-
11
-
12
- const withThemeProvider = (story): JSX.Element => (
13
- <StoryBookThemeProvider themeMode={useDarkMode() ? ThemeMode.dark : ThemeMode.light}>
14
- <QueryProvider>
15
- {story()}
16
- <ReactQueryDevtools />
17
- </QueryProvider>
18
- </StoryBookThemeProvider>
19
- );
20
-
21
- addDecorator(withThemeProvider);
@@ -1,19 +0,0 @@
1
- import { mount } from 'cypress/react18';
2
- import '@testing-library/cypress/add-commands';
3
-
4
- Cypress.Commands.add('mount', ({ Component, options }: MountProps) => {
5
- return mount(Component, options);
6
- });
7
-
8
- interface MountProps {
9
- Component: JSX.Element;
10
- options?: object;
11
- }
12
-
13
- declare global {
14
- namespace Cypress {
15
- interface Chainable {
16
- mount: ({ Component, options = {} }: MountProps) => Cypress.Chainable;
17
- }
18
- }
19
- }
@@ -1,12 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
- <title>Components App</title>
8
- </head>
9
- <body>
10
- <div data-cy-root></div>
11
- </body>
12
- </html>
@@ -1,5 +0,0 @@
1
- import './commands';
2
-
3
- import enableVisualTesting from '@centreon/js-config/cypress/component/enableVisualTesting';
4
-
5
- enableVisualTesting();