diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-11-23 11:21:22 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-23 11:21:22 +0000 |
| commit | e4db9bf2725f1714f273332f0a444ec940aae1a8 (patch) | |
| tree | c3960be69916673c06f78bf9d14fa5866316eea1 | |
| parent | 45081dcb472f6aa197d6ebdc129485f77fe3ee88 (diff) | |
| download | karakeep-e4db9bf2725f1714f273332f0a444ec940aae1a8.tar.zst | |
fix: Hide shared lists where user is a viewer in Manage Lists dialog (#2164)
Users with viewer role cannot add/remove bookmarks from lists, so these lists should not appear in the Manage Lists dialog across all platforms (web, mobile, and extension).
Changes:
- Web: Updated BookmarkListSelector to filter out viewer lists
- Mobile: Updated manage_lists.tsx to filter out viewer lists
- Extension: Updated ListsSelector to filter out viewer lists
Co-authored-by: Claude <noreply@anthropic.com>
3 files changed, 38 insertions, 27 deletions
diff --git a/apps/browser-extension/src/components/ListsSelector.tsx b/apps/browser-extension/src/components/ListsSelector.tsx index 379338b6..86c151d1 100644 --- a/apps/browser-extension/src/components/ListsSelector.tsx +++ b/apps/browser-extension/src/components/ListsSelector.tsx @@ -74,31 +74,33 @@ export function ListsSelector({ bookmarkId }: { bookmarkId: string }) { <CommandList> <CommandEmpty>You don't have any lists.</CommandEmpty> <CommandGroup> - {allLists?.allPaths.map((path) => { - const lastItem = path[path.length - 1]; + {allLists?.allPaths + .filter((path) => path[path.length - 1].userRole !== "viewer") + .map((path) => { + const lastItem = path[path.length - 1]; - return ( - <CommandItem - key={lastItem.id} - value={lastItem.id} - keywords={[lastItem.name, lastItem.icon]} - onSelect={toggleList} - disabled={currentlyUpdating.has(lastItem.id)} - > - <Check - className={cn( - "mr-2 size-4", - existingListIds.has(lastItem.id) - ? "opacity-100" - : "opacity-0", - )} - /> - {path - .map((item) => `${item.icon} ${item.name}`) - .join(" / ")} - </CommandItem> - ); - })} + return ( + <CommandItem + key={lastItem.id} + value={lastItem.id} + keywords={[lastItem.name, lastItem.icon]} + onSelect={toggleList} + disabled={currentlyUpdating.has(lastItem.id)} + > + <Check + className={cn( + "mr-2 size-4", + existingListIds.has(lastItem.id) + ? "opacity-100" + : "opacity-0", + )} + /> + {path + .map((item) => `${item.icon} ${item.name}`) + .join(" / ")} + </CommandItem> + ); + })} </CommandGroup> </CommandList> </Command> diff --git a/apps/mobile/app/dashboard/bookmarks/[slug]/manage_lists.tsx b/apps/mobile/app/dashboard/bookmarks/[slug]/manage_lists.tsx index 7250d06b..c502c07f 100644 --- a/apps/mobile/app/dashboard/bookmarks/[slug]/manage_lists.tsx +++ b/apps/mobile/app/dashboard/bookmarks/[slug]/manage_lists.tsx @@ -68,6 +68,10 @@ const ListPickerPage = () => { }; const { allPaths } = data ?? {}; + // Filter out lists where user is a viewer (can't add/remove bookmarks) + const filteredPaths = allPaths?.filter( + (path) => path[path.length - 1].userRole !== "viewer", + ); return ( <CustomSafeAreaView> <FlatList @@ -97,7 +101,7 @@ const ListPickerPage = () => { </Pressable> </View> )} - data={allPaths} + data={filteredPaths} /> </CustomSafeAreaView> ); diff --git a/apps/web/components/dashboard/lists/BookmarkListSelector.tsx b/apps/web/components/dashboard/lists/BookmarkListSelector.tsx index a267c692..7f916949 100644 --- a/apps/web/components/dashboard/lists/BookmarkListSelector.tsx +++ b/apps/web/components/dashboard/lists/BookmarkListSelector.tsx @@ -46,10 +46,15 @@ export function BookmarkListSelector({ } allPaths = allPaths?.filter((path) => { - if (hideBookmarkIds.includes(path[path.length - 1].id)) { + const lastItem = path[path.length - 1]; + if (hideBookmarkIds.includes(lastItem.id)) { return false; } - if (!listTypes.includes(path[path.length - 1].type)) { + if (!listTypes.includes(lastItem.type)) { + return false; + } + // Hide lists where user is a viewer (can't add/remove bookmarks) + if (lastItem.userRole === "viewer") { return false; } if (!hideSubtreeOf) { |
