@@ -3,8 +3,14 @@ import { Input } from '../ui/input';
33import { Button } from '../ui/button' ;
44import SubjectSelector from '../ui/subject-selector' ;
55import VerbSelector from '../ui/VerbSelector' ;
6- import { Trash2 , Edit2 , Save , Eye , EyeOff } from 'lucide-react' ;
6+ import { Trash2 , Edit2 , Save , Eye , EyeOff , MoreVertical } from 'lucide-react' ;
77import type { Statement } from '../../../types/types' ;
8+ import {
9+ DropdownMenu ,
10+ DropdownMenuTrigger ,
11+ DropdownMenuContent ,
12+ DropdownMenuItem ,
13+ } from '../ui/dropdown-menu' ;
814
915export interface StatementItemProps {
1016 statement : Statement ;
@@ -47,6 +53,19 @@ const StatementItem: React.FC<StatementItemProps> = ({
4753 if ( isEditing ) {
4854 return (
4955 < div className = 'flex items-center space-x-2 bg-gray-100 p-2 rounded' >
56+ { /* Privacy toggle button */ }
57+ < Button
58+ variant = 'ghost'
59+ size = 'sm'
60+ onClick = { ( ) => onTogglePublic ( statement . id ) }
61+ className = { `${
62+ statement . isPublic
63+ ? 'bg-green-50 text-green-500'
64+ : 'bg-gray-50 text-gray-500'
65+ } hover:bg-opacity-75 rounded-md px-3 py-2`}
66+ >
67+ { statement . isPublic ? < Eye size = { 16 } /> : < EyeOff size = { 16 } /> }
68+ </ Button >
5069 < div className = 'flex flex-1 items-center space-x-2' >
5170 { /* Subject */ }
5271 < div
@@ -60,7 +79,7 @@ const StatementItem: React.FC<StatementItemProps> = ({
6079 onPartUpdate ( statement . id , 'subject' , value )
6180 }
6281 onAddDescriptor = { ( ) => { } }
63- // Here we assume the username is derived from the subject string.
82+ // Assume the username is derived from the subject string.
6483 username = { statement . subject . split ( "'s" ) [ 0 ] || statement . subject }
6584 />
6685 ) : (
@@ -103,18 +122,6 @@ const StatementItem: React.FC<StatementItemProps> = ({
103122 </ div >
104123 </ div >
105124 < div className = 'flex items-center space-x-2 ml-auto' >
106- < Button
107- variant = 'ghost'
108- size = 'sm'
109- onClick = { ( ) => onTogglePublic ( statement . id ) }
110- className = { `${
111- statement . isPublic
112- ? 'bg-green-50 text-green-500'
113- : 'bg-gray-50 text-gray-500'
114- } hover:bg-opacity-75 rounded-md px-3 py-2`}
115- >
116- { statement . isPublic ? < Eye size = { 16 } /> : < EyeOff size = { 16 } /> }
117- </ Button >
118125 < Button
119126 variant = 'ghost'
120127 size = 'sm'
@@ -136,34 +143,38 @@ const StatementItem: React.FC<StatementItemProps> = ({
136143 ) ;
137144 }
138145
139- // Static view when not in editing mode
146+ // Static view when not in editing mode with grouped Edit and Delete
140147 return (
141148 < div className = 'flex justify-between items-center bg-gray-100 p-2 rounded' >
149+ < span
150+ className = { `inline-flex items-center justify-center px-3 py-2 ${
151+ statement . isPublic ? 'text-green-500' : 'text-gray-400'
152+ } `}
153+ >
154+ { statement . isPublic ? < Eye size = { 16 } /> : < EyeOff size = { 16 } /> }
155+ </ span >
142156 < span className = 'flex-1' > { `${ statement . subject } ${ statement . verb } ${ statement . object } ` } </ span >
143157 < div className = 'flex items-center space-x-2 ml-auto' >
144- < span
145- className = { `inline-flex items-center justify-center px-3 py-2 ${
146- statement . isPublic ? 'text-green-500' : 'text-gray-400'
147- } `}
148- >
149- { statement . isPublic ? < Eye size = { 16 } /> : < EyeOff size = { 16 } /> }
150- </ span >
151- < Button
152- variant = 'ghost'
153- size = 'sm'
154- onClick = { ( ) => onEditClick ( statement . id ) }
155- className = 'text-blue-500 hover:text-blue-700'
156- >
157- < Edit2 size = { 16 } />
158- </ Button >
159- < Button
160- variant = 'ghost'
161- size = 'sm'
162- onClick = { ( ) => onDelete ( statement . id ) }
163- className = 'text-red-500 hover:text-red-700'
164- >
165- < Trash2 size = { 16 } />
166- </ Button >
158+ < DropdownMenu >
159+ < DropdownMenuTrigger asChild >
160+ < button onClick = { ( e ) => e . stopPropagation ( ) } >
161+ < MoreVertical size = { 18 } className = 'text-gray-500' />
162+ </ button >
163+ </ DropdownMenuTrigger >
164+ < DropdownMenuContent align = 'end' >
165+ < DropdownMenuItem onClick = { ( ) => onEditClick ( statement . id ) } >
166+ < Edit2 className = 'mr-2 h-4 w-4' />
167+ Edit
168+ </ DropdownMenuItem >
169+ < DropdownMenuItem
170+ onClick = { ( ) => onDelete ( statement . id ) }
171+ className = 'text-red-600'
172+ >
173+ < Trash2 className = 'mr-2 h-4 w-4' />
174+ Delete
175+ </ DropdownMenuItem >
176+ </ DropdownMenuContent >
177+ </ DropdownMenu >
167178 </ div >
168179 </ div >
169180 ) ;
0 commit comments