diff --git a/src/@/components/BookmarkForm.tsx b/src/@/components/BookmarkForm.tsx index 836a87b..52057e0 100644 --- a/src/@/components/BookmarkForm.tsx +++ b/src/@/components/BookmarkForm.tsx @@ -166,7 +166,7 @@ const BookmarkForm = () => { const response = await getCollections(config.baseUrl, config.apiKey); return response.data.response.sort((a, b) => { - return a.name.localeCompare(b.name); + return a.pathname.localeCompare(b.pathname); }); }, enabled: configured, @@ -274,11 +274,12 @@ const BookmarkForm = () => { name: string; id: number; ownerId: number; + pathname: string; }) => ( { form.setValue('collection', { ownerId: collection.ownerId, @@ -288,7 +289,10 @@ const BookmarkForm = () => { setOpenCollections(false); }} > - {collection.name} +

{collection.name}

+

+ {collection.pathname} +

) ) diff --git a/src/@/lib/actions/collections.ts b/src/@/lib/actions/collections.ts index e89fad0..27754a5 100644 --- a/src/@/lib/actions/collections.ts +++ b/src/@/lib/actions/collections.ts @@ -9,17 +9,54 @@ interface ResponseCollections { members: never[]; // Assuming members can be of any type, adjust as necessary name: string; ownerId: number; - parent: null | never; // Assuming parent can be of any type or null, adjust as necessary + parent: null | { + id: number; + name: string; + }; parentId: null | number; // Assuming parentId can be null or a number updatedAt: string; } +function buildFullPath( + collection: ResponseCollections, + collectionsMap: Map +): string { + const paths: string[] = [collection.name]; + let currentParent = collection.parent; + + while (currentParent) { + paths.unshift(currentParent.name); + const parentCollection = collectionsMap.get(currentParent.id); + currentParent = parentCollection?.parent || null; + } + + return paths.join(' > '); +} + export async function getCollections(baseUrl: string, apiKey: string) { const url = `${baseUrl}/api/v1/collections`; - return await axios.get<{ response: ResponseCollections[] }>(url, { + const response = await axios.get<{ response: ResponseCollections[] }>(url, { headers: { Authorization: `Bearer ${apiKey}`, }, }); + + // Create a map for quick lookups + const collectionsMap = new Map( + response.data.response.map((collection) => [collection.id, collection]) + ); + + // Format the collection names with full parent structure + const formattedCollections = response.data.response.map((collection) => ({ + ...collection, + pathname: buildFullPath(collection, collectionsMap), + })); + + return { + ...response, + data: { + response: formattedCollections, + }, + }; } diff --git a/src/manifest.json b/src/manifest.json index 5d06398..4b03ace 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -45,7 +45,7 @@ "_execute_action": { "suggested_key": { "default": "Ctrl+Shift+F", - "mac": "Command+Shift+K" + "mac": "Command+Shift+Y" } } }