@@ -15,36 +15,60 @@ type MessageSeparatorProps = {
1515 use ?: any ;
1616} ;
1717
18+ const isSameDay = ( a : Date , b : Date ) =>
19+ a . getFullYear ( ) === b . getFullYear ( ) &&
20+ a . getMonth ( ) === b . getMonth ( ) &&
21+ a . getDate ( ) === b . getDate ( ) ;
22+
23+
24+ const getDateLabel = ( date : string , t : TFunction ) : string => {
25+ const messageDate = new Date ( date ) ;
26+ if ( isNaN ( messageDate . getTime ( ) ) ) {
27+ return '' ;
28+ }
29+ const today = new Date ( ) ;
30+ const yesterday = new Date ( ) ;
31+ yesterday . setDate ( today . getDate ( ) - 1 ) ;
32+
33+
34+ if ( isSameDay ( messageDate , today ) ) return t ( 'Today' ) ;
35+ if ( isSameDay ( messageDate , yesterday ) ) return t ( 'Yesterday' ) ;
36+
37+ return t ( 'message_separator_date' , {
38+ val : messageDate ,
39+ formatParams : {
40+ val : { month : 'short' , day : '2-digit' , year : 'numeric' } ,
41+ } ,
42+ } ) . toUpperCase ( ) ;
43+ } ;
44+
1845// TODO: find a better way to pass `use` and do not default to a string
1946// eslint-disable-next-line @typescript-eslint/naming-convention
20- const MessageSeparator = ( { date, unread, use : Element = 'div' , className, style = { } , t } : MessageSeparatorProps ) => (
21- < Element
22- className = { createClassName (
23- styles ,
24- 'separator' ,
25- {
26- date : ! ! date && ! unread ,
27- unread : ! date && ! ! unread ,
28- } ,
29- [ className ] ,
30- ) }
31- style = { style }
32- >
33- < hr className = { createClassName ( styles , 'separator__line' ) } />
34- { ( date || unread ) && (
35- < span className = { createClassName ( styles , 'separator__text' ) } >
36- { ( ! ! date &&
37- t ( 'message_separator_date' , {
38- val : new Date ( date ) ,
39- formatParams : {
40- val : { month : 'short' , day : '2-digit' , year : 'numeric' } ,
41- } ,
42- } ) . toUpperCase ( ) ) ||
43- ( unread && t ( 'unread_messages' ) ) }
44- </ span >
45- ) }
46- < hr className = { createClassName ( styles , 'separator__line' ) } />
47- </ Element >
48- ) ;
47+ const MessageSeparator = ( { date, unread, use : Element = 'div' , className, style = { } , t } : MessageSeparatorProps ) => {
48+ const dateLabel = date ? getDateLabel ( date , t ) : '' ;
49+
50+ return (
51+ < Element
52+ className = { createClassName (
53+ styles ,
54+ 'separator' ,
55+ {
56+ date : ! ! date && ! unread ,
57+ unread : ! date && ! ! unread ,
58+ } ,
59+ [ className ] ,
60+ ) }
61+ style = { style }
62+ >
63+ < hr className = { createClassName ( styles , 'separator__line' ) } />
64+ { ( date || unread ) && (
65+ < span className = { createClassName ( styles , 'separator__text' ) } >
66+ { dateLabel || ( unread ? t ( 'Unread_Messages' ) : null ) }
67+ </ span >
68+ ) }
69+ < hr className = { createClassName ( styles , 'separator__line' ) } />
70+ </ Element >
71+ ) ;
72+ } ;
4973
5074export default withTranslation ( ) ( memo ( MessageSeparator ) ) ;
0 commit comments