1- import { forwardRef , useRef , useEffect , useState } from 'react'
1+ import { forwardRef , useRef , useEffect , useState , useCallback } from 'react'
22import { ExternalLink , Check , X } from 'lucide-react'
33import { TagInput } from '../ui/TagInput'
44import { Tag } from '../ui/Tag'
55import { getAllTags , createBookmark , updateBookmark } from '../../services/bookmarks'
6+ import { useHotkeys } from '../../hooks/useHotkeys'
67
78/**
89 * BookmarkInlineCard - Inline card for adding/editing bookmarks
@@ -110,7 +111,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard(
110111 }
111112
112113 // Auto-save logic
113- const saveChanges = ( ) => {
114+ const saveChanges = useCallback ( ( ) => {
114115 const normalizedUrl = normalizeUrl ( localUrl )
115116
116117 if ( ! validateUrl ( localUrl ) ) {
@@ -143,7 +144,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard(
143144 console . error ( 'Failed to save bookmark:' , error )
144145 return false
145146 }
146- }
147+ } , [ localUrl , localTitle , localDesc , localTags , localReadLater , isEditing , bookmark , onFieldChange , isNew ] )
147148
148149 const handleUrlBlur = ( ) => {
149150 if ( localUrl !== ( bookmark ?. url || '' ) ) {
@@ -198,7 +199,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard(
198199 handleTagsChange ( newTags )
199200 }
200201
201- const handleDone = ( ) => {
202+ const handleDone = useCallback ( ( ) => {
202203 if ( ! validateUrl ( localUrl ) ) {
203204 setUrlError ( 'URL is required' )
204205 urlInputRef . current ?. focus ( )
@@ -208,12 +209,18 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard(
208209 if ( saveChanges ( ) ) {
209210 onDone ?. ( )
210211 }
211- }
212+ } , [ localUrl , saveChanges , onDone ] )
212213
213214 const handleDiscard = ( ) => {
214215 onDiscard ?. ( )
215216 }
216217
218+ // Ctrl/Cmd+Enter to save from any field
219+ useHotkeys (
220+ { 'mod+enter' : handleDone } ,
221+ { enableOnInputs : true }
222+ )
223+
217224 const handleKeyDown = ( e , currentField ) => {
218225 if ( e . key === 'Escape' ) {
219226 e . preventDefault ( )
@@ -222,12 +229,6 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard(
222229 return
223230 }
224231
225- if ( e . key === 'Enter' && currentField !== 'desc' ) {
226- e . preventDefault ( )
227- handleDone ( )
228- return
229- }
230-
231232 // Tab navigation
232233 if ( e . key === 'Tab' ) {
233234 e . preventDefault ( )
@@ -423,7 +424,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard(
423424 </ div >
424425
425426 < div className = "text-[10px] text-muted-foreground/50 font-medium" >
426- Enter to save · Esc to { isNew ? 'cancel' : 'close' }
427+ Ctrl+ Enter to save · Esc to { isNew ? 'cancel' : 'close' }
427428 </ div >
428429 </ div >
429430 </ div >
0 commit comments