11import * as Tooltip from '@radix-ui/react-tooltip'
22import saveAs from 'file-saver'
33import {
4+ Clipboard ,
45 Copy ,
56 Download ,
67 Edit ,
@@ -47,6 +48,7 @@ import {
4748 DropdownMenuTrigger ,
4849} from 'ui'
4950import { useProjectContext } from '../ProjectLayout/ProjectContext'
51+ import { copyToClipboard } from 'lib/helpers'
5052
5153export interface EntityListItemProps {
5254 id : number
@@ -65,6 +67,7 @@ const EntityListItem: ItemRenderer<Entity, EntityListItemProps> = ({
6567 const { selectedSchema } = useQuerySchemaState ( )
6668
6769 const isActive = Number ( id ) === entity . id
70+ const canEdit = isActive && ! isLocked
6871
6972 const { data : lints = [ ] } = useProjectLintsQuery ( {
7073 projectRef : project ?. ref ,
@@ -213,23 +216,21 @@ const EntityListItem: ItemRenderer<Entity, EntityListItemProps> = ({
213216 switch ( entity . type ) {
214217 case ENTITY_TYPE . TABLE :
215218 if ( tableHasLints ) {
216- tooltipContent = 'RLS Disabled '
219+ tooltipContent = 'RLS disabled '
217220 }
218221 break
219222 case ENTITY_TYPE . VIEW :
220223 if ( viewHasLints ) {
221- tooltipContent = 'Security Definer view'
224+ tooltipContent = 'Security definer view'
222225 }
223226 break
224227 case ENTITY_TYPE . MATERIALIZED_VIEW :
225228 if ( materializedViewHasLints ) {
226- tooltipContent = 'Security Definer view'
229+ tooltipContent = 'Security definer view'
227230 }
228-
229231 break
230232 case ENTITY_TYPE . FOREIGN_TABLE :
231233 tooltipContent = 'RLS is not enforced on foreign tables'
232-
233234 break
234235 default :
235236 break
@@ -355,85 +356,103 @@ const EntityListItem: ItemRenderer<Entity, EntityListItemProps> = ({
355356 < EntityTooltipTrigger entity = { entity } />
356357 </ div >
357358
358- { entity . type === ENTITY_TYPE . TABLE && isActive && ! isLocked && (
359+ { canEdit && (
359360 < DropdownMenu >
360361 < DropdownMenuTrigger className = "text-foreground-lighter transition-all hover:text-foreground data-[state=open]:text-foreground" >
361362 < MoreHorizontal size = { 14 } strokeWidth = { 2 } />
362363 </ DropdownMenuTrigger >
363364 < DropdownMenuContent side = "bottom" align = "start" className = "w-44" >
364365 < DropdownMenuItem
365- key = "edit-table"
366- className = "space-x-2"
367- onClick = { ( e ) => {
368- e . stopPropagation ( )
369- snap . onEditTable ( )
370- } }
371- >
372- < Edit size = { 12 } />
373- < span > Edit Table</ span >
374- </ DropdownMenuItem >
375- < DropdownMenuItem
376- key = "duplicate-table"
366+ key = "copy-name"
377367 className = "space-x-2"
378368 onClick = { ( e ) => {
379369 e . stopPropagation ( )
380- snap . onDuplicateTable ( )
370+ copyToClipboard ( entity . name )
381371 } }
382372 >
383- < Copy size = { 12 } />
384- < span > Duplicate Table</ span >
385- </ DropdownMenuItem >
386- < DropdownMenuItem key = "view-policies" className = "space-x-2" asChild >
387- < Link
388- key = "view-policies"
389- href = { `/project/${ projectRef } /auth/policies?schema=${ selectedSchema } &search=${ entity . id } ` }
390- >
391- < Lock size = { 12 } />
392- < span > View Policies</ span >
393- </ Link >
373+ < Clipboard size = { 12 } />
374+ < span > Copy name</ span >
394375 </ DropdownMenuItem >
395376
396- < DropdownMenuSub >
397- < DropdownMenuSubTrigger className = "gap-x-2" >
398- < Download size = { 12 } />
399- Export Data
400- </ DropdownMenuSubTrigger >
401- < DropdownMenuSubContent >
377+ { entity . type === ENTITY_TYPE . TABLE && (
378+ < >
379+ < DropdownMenuSeparator />
380+
402381 < DropdownMenuItem
403- key = "download -table-csv "
382+ key = "edit -table"
404383 className = "space-x-2"
405384 onClick = { ( e ) => {
406385 e . stopPropagation ( )
407- exportTableAsCSV ( )
386+ snap . onEditTable ( )
408387 } }
409388 >
410- < span > Export table as CSV</ span >
389+ < Edit size = { 12 } />
390+ < span > Edit table</ span >
411391 </ DropdownMenuItem >
412392 < DropdownMenuItem
413- key = "download -table-sql "
414- className = "gap -x-2"
393+ key = "duplicate -table"
394+ className = "space -x-2"
415395 onClick = { ( e ) => {
416396 e . stopPropagation ( )
417- exportTableAsSQL ( )
397+ snap . onDuplicateTable ( )
418398 } }
419399 >
420- < span > Export table as SQL</ span >
400+ < Copy size = { 12 } />
401+ < span > Duplicate table</ span >
402+ </ DropdownMenuItem >
403+ < DropdownMenuItem key = "view-policies" className = "space-x-2" asChild >
404+ < Link
405+ key = "view-policies"
406+ href = { `/project/${ projectRef } /auth/policies?schema=${ selectedSchema } &search=${ entity . id } ` }
407+ >
408+ < Lock size = { 12 } />
409+ < span > View policies</ span >
410+ </ Link >
421411 </ DropdownMenuItem >
422- </ DropdownMenuSubContent >
423- </ DropdownMenuSub >
424412
425- < DropdownMenuSeparator />
426- < DropdownMenuItem
427- key = "delete-table"
428- className = "gap-x-2"
429- onClick = { ( e ) => {
430- e . stopPropagation ( )
431- snap . onDeleteTable ( )
432- } }
433- >
434- < Trash size = { 12 } />
435- < span > Delete Table</ span >
436- </ DropdownMenuItem >
413+ < DropdownMenuSub >
414+ < DropdownMenuSubTrigger className = "gap-x-2" >
415+ < Download size = { 12 } />
416+ Export data
417+ </ DropdownMenuSubTrigger >
418+ < DropdownMenuSubContent >
419+ < DropdownMenuItem
420+ key = "download-table-csv"
421+ className = "space-x-2"
422+ onClick = { ( e ) => {
423+ e . stopPropagation ( )
424+ exportTableAsCSV ( )
425+ } }
426+ >
427+ < span > Export table as CSV</ span >
428+ </ DropdownMenuItem >
429+ < DropdownMenuItem
430+ key = "download-table-sql"
431+ className = "gap-x-2"
432+ onClick = { ( e ) => {
433+ e . stopPropagation ( )
434+ exportTableAsSQL ( )
435+ } }
436+ >
437+ < span > Export table as SQL</ span >
438+ </ DropdownMenuItem >
439+ </ DropdownMenuSubContent >
440+ </ DropdownMenuSub >
441+
442+ < DropdownMenuSeparator />
443+ < DropdownMenuItem
444+ key = "delete-table"
445+ className = "gap-x-2"
446+ onClick = { ( e ) => {
447+ e . stopPropagation ( )
448+ snap . onDeleteTable ( )
449+ } }
450+ >
451+ < Trash size = { 12 } />
452+ < span > Delete table</ span >
453+ </ DropdownMenuItem >
454+ </ >
455+ ) }
437456 </ DropdownMenuContent >
438457 </ DropdownMenu >
439458 ) }
0 commit comments