Files
supabase/apps/studio/components/interfaces/Explorer/MoveCellDropdownContent.tsx
T
Joshen Lim 09a1f431bc Mass update for all lucide icon imports to use the component with Icon suffix (#51659)
## Context

This is largely just a mechanical change here:
Opting to use lucide icons with the `Icon` suffix across all icon
imports within `studio`
- so that it’s clearer which components are icons + reduces the
possibility of name collision with our own components
- e.g <User /> vs <UserIcon />

Also added a eslint rule for this:
<img width="1069" height="167" alt="image"
src="https://github.com/user-attachments/assets/7f36f443-5ca2-4bf6-8d22-86e774513bfc"
/>

And updated `AGENTS.md` as such:
```
Icons come from `lucide-react`, always imported with the `Icon` suffix (`import { CheckIcon, Trash2Icon } from 'lucide-react'`) — never the bare names (`Check`) or `Check as CheckIcon` aliases (lint-enforced).
```
2026-10-14 12:56:55 +02:00

58 lines
1.8 KiB
TypeScript

import { ArrowDownIcon, ArrowUpIcon, TrashIcon } from 'lucide-react'
import { DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator } from 'ui'
import { useCurrentNotebook, useNotebooksStateSnapshot } from '@/state/notebooks/notebooks-state'
interface MoveCellDropdownContentProps {
cellId: string
}
export const MoveCellDropdownContent = ({ cellId }: MoveCellDropdownContentProps) => {
const snap = useNotebooksStateSnapshot()
const currentNotebook = useCurrentNotebook()
const cells = currentNotebook?.notebook.content?.cells ?? []
const currentIndex = cells.findIndex((c) => c._id === cellId)
const isFirstCell = currentIndex <= 0
const isLastCell = currentIndex === -1 || currentIndex === cells.length - 1
const onSelectMoveCell = (direction: 'up' | 'down') => {
const notebookId = currentNotebook?.notebook.id
if (!notebookId) return
snap.moveCell({ id: notebookId, cellId, direction })
}
const onSelectRemoveCell = () => {
const notebookId = currentNotebook?.notebook.id
if (!notebookId) return
snap.removeCell({ id: notebookId, cellId })
}
return (
<DropdownMenuContent align="start" className="w-40">
<DropdownMenuItem
className="gap-x-2"
disabled={isFirstCell}
onClick={() => onSelectMoveCell('up')}
>
<ArrowUpIcon size={14} />
<p>Move up</p>
</DropdownMenuItem>
<DropdownMenuItem
className="gap-x-2"
disabled={isLastCell}
onClick={() => onSelectMoveCell('down')}
>
<ArrowDownIcon size={14} />
<p>Move down</p>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem className="gap-x-2" onClick={() => onSelectRemoveCell()}>
<TrashIcon size={14} />
<p>Remove cell</p>
</DropdownMenuItem>
</DropdownMenuContent>
)
}