diff --git a/packages/web/src/app/bookmarks/-action-bar.tsx b/packages/web/src/app/bookmarks/-action-bar.tsx index dfdb724..5633921 100644 --- a/packages/web/src/app/bookmarks/-action-bar.tsx +++ b/packages/web/src/app/bookmarks/-action-bar.tsx @@ -26,6 +26,7 @@ function ActionBar({ function BookmarkListActionBar({ className }: { className?: string }) { const setActiveDialog = useBookmarkPageStore((state) => state.setActiveDialog) + const statusMessage = useBookmarkPageStore((state) => state.statusMessage) useMnemonics( { @@ -40,13 +41,19 @@ function BookmarkListActionBar({ className }: { className?: string }) { return ( - - - + {statusMessage ? ( +

{statusMessage}

+ ) : ( + <> + + + + + )}
) } diff --git a/packages/web/src/app/bookmarks/-bookmark-list.tsx b/packages/web/src/app/bookmarks/-bookmark-list.tsx index 0d56736..99578fc 100644 --- a/packages/web/src/app/bookmarks/-bookmark-list.tsx +++ b/packages/web/src/app/bookmarks/-bookmark-list.tsx @@ -15,6 +15,7 @@ enum BookmarkListItemAction { Open = "Open", Edit = "Edit", Delete = "Delete", + CopyLink = "CopyLink", } type SelectionChangeCallback = (bookmark: Bookmark) => void @@ -178,12 +179,24 @@ const _BookmarkList = memo(({ className }: { className?: string }) => { d: deleteItem, Enter: openItem, + + c: (event) => { + if (event.ctrlKey || event.metaKey) { + event.preventDefault() + copyBookmarkLink() + } + }, }, { ignore: useCallback(() => useBookmarkPageStore.getState().activeDialog !== ActiveDialog.None, []), }, ) + async function copyBookmarkLink() { + const { bookmarks, selectedIndex, onItemAction } = store.getState() + onItemAction(bookmarks[selectedIndex], BookmarkListItemAction.CopyLink) + } + function openItem() { const { bookmarks, selectedIndex, onItemAction } = store.getState() expandItem() @@ -261,6 +274,10 @@ const BookmarkListItem = memo( onItemAction(bookmark, BookmarkListItemAction.Delete) } + function copyItemLink() { + onItemAction(bookmark, BookmarkListItemAction.CopyLink) + } + return (
  • -