@@ -4,18 +4,19 @@ import { Tooltip } from 'react-tooltip';
44import { useEffect , useRef , useState , KeyboardEvent } from 'react' ;
55import TrashIcon from '@/components/icons/TrashIcon' ;
66import EditIcon from '@/components/icons/EditIcon' ;
7- import { editMessage , deleteMessage } from '@/services/message.service' ;
7+ import { editMessage } from '@/services/message.service' ;
88import { useSupabaseClient , useUser } from '@supabase/auth-helpers-react' ;
99import MessageContent from './MessageContent' ;
1010import DeleteMsgModal from '@/components/home/DeleteMsgModal' ;
11- import { ChatMessageWithUser } from '@/types/dbtypes' ;
11+ import { MessageWithServerProfile } from '@/types/dbtypes' ;
12+ import { MessageHeader } from './MessageHeader' ;
1213
1314export default function Message ( {
1415 message,
1516 collapse_user,
1617 hasDeletePerms = false ,
1718} : {
18- message : ChatMessageWithUser ;
19+ message : MessageWithServerProfile ;
1920 collapse_user : boolean ;
2021 hasDeletePerms ?: boolean ;
2122} ) {
@@ -30,19 +31,23 @@ export default function Message({
3031
3132 const supabase = useSupabaseClient ( ) ;
3233 const user = useUser ( ) ;
33-
34+ const [ messageColor , setMessageColor ] = useState < string > ( 'white' ) ;
3435 const [ showOptions , setShowOptions ] = useState < 'show' | 'hide' > ( 'hide' ) ;
35- const [ messageOptions , setMessageOptions ] = useState <
36- null | 'delete' | 'edit'
37- > ( null ) ;
36+ const [ messageOptions , setMessageOptions ] = useState < null | 'delete' | 'edit' > ( null ) ;
3837
3938 const chatMessage = useRef < HTMLInputElement > ( null ) ;
4039
4140 useEffect ( ( ) => {
4241 if ( messageOptions == 'edit' ) {
4342 chatMessage . current ?. focus ( ) ;
4443 }
45- } , [ messageOptions ] ) ;
44+
45+ const highestRoleWithColor = message . roles . find ( ( role ) => ! ! role . color ) ?. color ;
46+
47+ if ( highestRoleWithColor ) {
48+ setMessageColor ( `#${ highestRoleWithColor } ` ) ;
49+ }
50+ } , [ messageOptions , message . roles ] ) ;
4651
4752 function handleKeyPress ( e : KeyboardEvent < HTMLInputElement > ) {
4853 if ( e . key === 'Escape' ) {
@@ -64,20 +69,15 @@ export default function Message({
6469 < >
6570 < div className = "px-2 pt-1 pb-1 flex flex-col" >
6671 { ! collapse_user && (
67- < div className = "flex-grow flex flex-row" >
68- < UserIcon user = { message . profiles } />
69- < div className = "flex-grow flex items-center" >
70- < div className = "text-xl font-semibold tracking-wider mr-2" >
71- { message . profiles . username }
72- </ div >
73- < div className = "text-xs tracking-wider text-grey-300 mt-1" >
74- { displayTime } { ' ' }
75- { message . is_edited && (
76- < span className = "text-gray-400" > (edited)</ span >
77- ) }
78- </ div >
79- </ div >
80- </ div >
72+ < MessageHeader
73+ profile = { message . profile }
74+ server_user = { message . author }
75+ roles = { message . roles }
76+ message_id = { message . id }
77+ message_color = { messageColor }
78+ display_time = { displayTime }
79+ edited = { message . is_edited }
80+ />
8181 ) }
8282
8383 { /* TODO: figure out how to close modal on blur (cant use onBlur on the dialog cuz it takes up the entire screen meaning you can never focus off of it) */ }
@@ -92,7 +92,7 @@ export default function Message({
9292 < div
9393 className = "font-light tracking-wide ml-8 -mt-2 hover:bg-grey-900 rounded-lg p-1 transition-colors break-all relative flex flex-col items-start"
9494 onMouseEnter = { ( ) => {
95- if ( ( user && user . id == message . profiles . id ) || hasDeletePerms )
95+ if ( ( user && user . id == message . profile . id ) || hasDeletePerms )
9696 setShowOptions ( 'show' ) ;
9797 } }
9898 onMouseLeave = { ( ) => setShowOptions ( 'hide' ) }
@@ -102,7 +102,7 @@ export default function Message({
102102 showOptions == 'hide' ? 'hidden' : ''
103103 } absolute left-[90%] bottom-4 bg-grey-925 px-2 py-1 rounded-lg z-10 flex `}
104104 >
105- { user && user . id == message . profiles . id ? (
105+ { user && user . id == message . profile . id ? (
106106 < span onClick = { ( ) => setMessageOptions ( 'edit' ) } >
107107 < EditIcon styles = "mr-1 hover:bg-grey-600 rounded-lg hover:cursor-pointer" />
108108 </ span >
0 commit comments