@@ -15,6 +15,9 @@ import DeleteForeverIcon from '@mui/icons-material/DeleteForever';
1515import EditIcon from '@mui/icons-material/Edit' ;
1616import SaveIcon from '@mui/icons-material/Save' ;
1717import CancelIcon from '@mui/icons-material/Cancel' ;
18+ import MoreVertIcon from '@mui/icons-material/MoreVert' ;
19+ import Menu from '@mui/material/Menu' ;
20+ import MenuItem from '@mui/material/MenuItem' ;
1821import Box from '@mui/material/Box' ;
1922import Divider from '@mui/material/Divider' ;
2023
@@ -39,6 +42,8 @@ export default function Answer(props) {
3942 const [ isEditing , setIsEditing ] = useState ( false ) ;
4043 const [ editContent , setEditContent ] = useState ( answer . content ) ;
4144 const [ saving , setSaving ] = useState ( false ) ;
45+ const [ menuAnchorEl , setMenuAnchorEl ] = useState ( null ) ;
46+ const menuOpen = Boolean ( menuAnchorEl ) ;
4247
4348 const isCreatorOrAdmin = auth . user === answer . creator || auth . roles === "Admin" ;
4449
@@ -100,26 +105,35 @@ export default function Answer(props) {
100105 < Grid container spacing = { 2 } >
101106 < Grid size = { { xs : 12 } } >
102107 < Stack direction = "row" sx = { { justifyContent : 'space-between' , alignItems : 'center' } } >
103- < Stack direction = "row" spacing = { 1.5 } sx = { { alignItems : 'center' } } >
108+ < Stack direction = "row" spacing = { 1.5 } sx = { { alignItems : 'center' , minWidth : 0 } } >
104109 < Avatar
105110 alt = { answer . creator ? answer . creator [ 0 ] . toUpperCase ( ) : 'U' }
106- sx = { { bgcolor : 'secondary.main' , color : 'secondary.contrastText' , width : 32 , height : 32 , fontWeight : 'bold' , fontSize : '0.9rem' } }
111+ sx = { { bgcolor : 'secondary.main' , color : 'secondary.contrastText' , width : 32 , height : 32 , fontWeight : 'bold' , fontSize : '0.9rem' , flexShrink : 0 } }
107112 />
108- < Box >
113+ < Box sx = { { minWidth : 0 } } >
109114 < Typography variant = "subtitle2" sx = { { fontWeight : 'bold' } } >
110115 { answer . creator }
116+ < Box component = "span" sx = { { fontWeight : 400 , color : 'text.secondary' , ml : 1 } } >
117+ < Box component = "span" sx = { { display : 'none' , '@media (min-width: 450px)' : { display : 'inline' } } } >
118+ { convertTimestamp ( answer . creationDate ) }
119+ </ Box >
120+ < Box component = "span" sx = { { display : 'inline' , '@media (min-width: 450px)' : { display : 'none' } } } >
121+ { convertTimestamp ( answer . creationDate , true ) }
122+ </ Box >
123+ </ Box >
111124 </ Typography >
112- < Typography variant = "caption" color = "text.secondary" >
113- { convertTimestamp ( answer . creationDate ) }
114- { answer . editDate && ` (bearbeitet am ${ answer . editDate } )` }
115- </ Typography >
125+ { answer . editDate && (
126+ < Typography variant = "caption" color = "text.secondary" >
127+ bearbeitet am { answer . editDate }
128+ </ Typography >
129+ ) }
116130 </ Box >
117131 </ Stack >
118132
119133 { isCreatorOrAdmin && ! saving && (
120- < Stack direction = "row" spacing = { 0.5 } >
134+ < >
121135 { isEditing ? (
122- < >
136+ < Stack direction = "row" spacing = { 0.5 } >
123137 < Tooltip title = "Speichern" >
124138 < IconButton size = "small" color = "primary" onClick = { handleSaveEdit } >
125139 < SaveIcon fontSize = "small" />
@@ -130,22 +144,32 @@ export default function Answer(props) {
130144 < CancelIcon fontSize = "small" />
131145 </ IconButton >
132146 </ Tooltip >
133- </ >
147+ </ Stack >
134148 ) : (
135149 < >
136- < Tooltip title = "Antwort bearbeiten" >
137- < IconButton size = "small" color = "primary" onClick = { ( ) => setIsEditing ( true ) } >
138- < EditIcon fontSize = "small" />
139- </ IconButton >
140- </ Tooltip >
141- < Tooltip title = "Antwort löschen" >
142- < IconButton size = "small" color = "error" onClick = { handleDelete } >
143- < DeleteForeverIcon fontSize = "small" />
144- </ IconButton >
145- </ Tooltip >
150+ < IconButton size = "small" onClick = { ( e ) => setMenuAnchorEl ( e . currentTarget ) } >
151+ < MoreVertIcon fontSize = "small" />
152+ </ IconButton >
153+ < Menu
154+ anchorEl = { menuAnchorEl }
155+ open = { menuOpen }
156+ onClose = { ( ) => setMenuAnchorEl ( null ) }
157+ onClick = { ( ) => setMenuAnchorEl ( null ) }
158+ transformOrigin = { { horizontal : 'right' , vertical : 'top' } }
159+ anchorOrigin = { { horizontal : 'right' , vertical : 'bottom' } }
160+ >
161+ < MenuItem onClick = { ( ) => setIsEditing ( true ) } >
162+ < EditIcon fontSize = "small" sx = { { mr : 1 } } />
163+ Antwort bearbeiten
164+ </ MenuItem >
165+ < MenuItem onClick = { handleDelete } sx = { { color : 'error.main' } } >
166+ < DeleteForeverIcon fontSize = "small" sx = { { mr : 1 } } />
167+ Antwort löschen
168+ </ MenuItem >
169+ </ Menu >
146170 </ >
147171 ) }
148- </ Stack >
172+ </ >
149173 ) }
150174 </ Stack >
151175 </ Grid >
0 commit comments