8
8
import type { UUID } from 'crypto' ;
9
9
import { useCallback , useMemo , useRef , useState } from 'react' ;
10
10
import { FormattedMessage , useIntl } from 'react-intl' ;
11
- import { Divider , Grid , type SxProps , type Theme , Typography } from '@mui/material' ;
11
+ import { Divider , Grid , Typography } from '@mui/material' ;
12
12
import { useSnackMessage } from '@gridsuite/commons-ui' ;
13
- import type { ColDef , GetRowIdParams , ValueGetterParams } from 'ag-grid-community' ;
13
+ import type { ColDef , GetRowIdParams , ValueFormatterFunc } from 'ag-grid-community' ;
14
14
import { type GridTableRef } from '../../components/Grid' ;
15
15
import { Announcement , UserAdminSrv } from '../../services' ;
16
16
import AddAnnouncementForm from './add-announcement-form' ;
17
- import { DateCellRenderer } from './date-cell-renderer' ;
18
17
import AgGrid from '../../components/Grid/AgGrid' ;
19
- import { CancelButtonCellRenderer } from './cancel-button -cell-renderer' ;
18
+ import CancelCellRenderer from './cancel-cell-renderer' ;
20
19
import { getErrorMessage } from '../../utils/error' ;
21
20
22
- const stylesLayout = {
23
- root : { display : 'flex' } ,
24
- columnContainer : {
25
- maxHeight : '60px' ,
26
- paddingLeft : '15px' ,
27
- } ,
28
- } as const satisfies Record < string , SxProps < Theme > > ;
29
-
30
21
const defaultColDef : ColDef < Announcement > = {
31
22
editable : false ,
32
23
resizable : true ,
@@ -56,19 +47,25 @@ export default function AnnouncementsPage() {
56
47
}
57
48
} , [ snackError ] ) ;
58
49
59
- const convertSeverity = useCallback (
60
- ( severity : string ) => {
61
- if ( severity === UserAdminSrv . AnnouncementSeverity . INFO ) {
62
- return intl . formatMessage ( { id : 'announcements.severity.INFO' } ) ;
63
- } else if ( severity === UserAdminSrv . AnnouncementSeverity . WARN ) {
64
- return intl . formatMessage ( { id : 'announcements.severity.WARN' } ) ;
65
- } else {
66
- return '' ;
50
+ const renderSeverity = useCallback < NonNullable < ValueFormatterFunc < Announcement , string > > > (
51
+ ( params ) => {
52
+ switch ( params . value ) {
53
+ case UserAdminSrv . AnnouncementSeverity . INFO :
54
+ return intl . formatMessage ( { id : 'announcements.severity.INFO' } ) ;
55
+ case UserAdminSrv . AnnouncementSeverity . WARN :
56
+ return intl . formatMessage ( { id : 'announcements.severity.WARN' } ) ;
57
+ default :
58
+ return params . value || '' ;
67
59
}
68
60
} ,
69
61
[ intl ]
70
62
) ;
71
63
64
+ const renderDate = useCallback < NonNullable < ValueFormatterFunc < Announcement , string > > > (
65
+ ( params ) => ( params . value ? intl . formatDate ( params . value , { dateStyle : 'short' , timeStyle : 'short' } ) : '' ) ,
66
+ [ intl ]
67
+ ) ;
68
+
72
69
const refreshGrid = useCallback ( ( ) => {
73
70
gridRef . current ?. context ?. refresh ?.( ) ;
74
71
} , [ ] ) ;
@@ -82,45 +79,48 @@ export default function AnnouncementsPage() {
82
79
83
80
const columns = useMemo (
84
81
( ) : ColDef < Announcement > [ ] => [
85
- {
86
- field : 'message' ,
87
- cellDataType : 'text' ,
88
- flex : 3 ,
89
- headerName : intl . formatMessage ( { id : 'announcements.table.message' } ) ,
90
- } ,
91
82
{
92
83
field : 'startDate' ,
93
- cellRenderer : DateCellRenderer ,
94
- flex : 3 ,
84
+ valueFormatter : renderDate ,
95
85
headerName : intl . formatMessage ( { id : 'announcements.table.startDate' } ) ,
86
+ sort : 'asc' ,
87
+ sortIndex : 1 ,
88
+ initialWidth : 150 ,
96
89
} ,
97
90
{
98
91
field : 'endDate' ,
99
- cellRenderer : DateCellRenderer ,
100
- flex : 3 ,
92
+ valueFormatter : renderDate ,
101
93
headerName : intl . formatMessage ( { id : 'announcements.table.endDate' } ) ,
94
+ sort : 'asc' ,
95
+ sortIndex : 2 ,
96
+ initialWidth : 150 ,
102
97
} ,
103
98
{
104
99
field : 'severity' ,
105
- cellDataType : 'text' ,
106
- flex : 2 ,
100
+ valueFormatter : renderSeverity ,
107
101
headerName : intl . formatMessage ( { id : 'announcements.severity' } ) ,
108
- valueGetter : ( value : ValueGetterParams ) => convertSeverity ( value . data . severity ) ,
102
+ initialWidth : 150 ,
103
+ } ,
104
+ {
105
+ field : 'message' ,
106
+ cellDataType : 'text' ,
107
+ flex : 1 ,
108
+ headerName : intl . formatMessage ( { id : 'announcements.table.message' } ) ,
109
109
} ,
110
110
{
111
111
field : 'id' ,
112
- cellRenderer : CancelButtonCellRenderer ,
112
+ cellRenderer : CancelCellRenderer ,
113
113
cellRendererParams : { onClickHandler : handleDeleteAnnouncement } ,
114
- flex : 2 ,
115
- headerName : intl . formatMessage ( { id : 'announcements.table.cancel' } ) ,
114
+ headerName : '' ,
115
+ initialWidth : 70 ,
116
116
} ,
117
117
] ,
118
- [ intl , convertSeverity , handleDeleteAnnouncement ]
118
+ [ renderDate , intl , handleDeleteAnnouncement , renderSeverity ]
119
119
) ;
120
120
121
121
// Note: using <Stack/> for the columns didn't work
122
122
return (
123
- < Grid container spacing = { 1 } >
123
+ < Grid container spacing = { 2 } marginLeft = { '2px' /*Grid.spacing is in px?*/ } >
124
124
< Grid item container direction = "column" xs = { 12 } sm = { 6 } md = { 4 } >
125
125
< Grid item xs = "auto" >
126
126
< Typography variant = "subtitle1" >
0 commit comments