resolve issues with new features
This commit is contained in:
@@ -81,6 +81,25 @@ function buildHeaders(): Record<string, string> {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches all BookStack books and returns a map of book_id → book_slug.
|
||||
* The /api/pages list endpoint does not reliably include book_slug, so we
|
||||
* look it up separately and use it when constructing page URLs.
|
||||
*/
|
||||
async function getBookSlugMap(): Promise<Map<number, string>> {
|
||||
const { bookstack } = environment;
|
||||
try {
|
||||
const response = await axios.get(
|
||||
`${bookstack.url}/api/books`,
|
||||
{ params: { count: 500 }, headers: buildHeaders() },
|
||||
);
|
||||
const books: Array<{ id: number; slug: string }> = response.data?.data ?? [];
|
||||
return new Map(books.map((b) => [b.id, b.slug]));
|
||||
} catch {
|
||||
return new Map();
|
||||
}
|
||||
}
|
||||
|
||||
async function getRecentPages(): Promise<BookStackPage[]> {
|
||||
const { bookstack } = environment;
|
||||
if (!bookstack.url || !isValidServiceUrl(bookstack.url)) {
|
||||
@@ -88,17 +107,20 @@ async function getRecentPages(): Promise<BookStackPage[]> {
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await axios.get(
|
||||
`${bookstack.url}/api/pages`,
|
||||
{
|
||||
params: { sort: '-updated_at', count: 20 },
|
||||
headers: buildHeaders(),
|
||||
},
|
||||
);
|
||||
const [response, bookSlugMap] = await Promise.all([
|
||||
axios.get(
|
||||
`${bookstack.url}/api/pages`,
|
||||
{
|
||||
params: { sort: '-updated_at', count: 20 },
|
||||
headers: buildHeaders(),
|
||||
},
|
||||
),
|
||||
getBookSlugMap(),
|
||||
]);
|
||||
const pages: BookStackPage[] = response.data?.data ?? [];
|
||||
return pages.map((p) => ({
|
||||
...p,
|
||||
url: `${bookstack.url}/books/${p.book_slug || p.book_id}/page/${p.slug}`,
|
||||
url: `${bookstack.url}/books/${bookSlugMap.get(p.book_id) || p.book_slug || p.book_id}/page/${p.slug}`,
|
||||
}));
|
||||
} catch (error) {
|
||||
if (axios.isAxiosError(error)) {
|
||||
@@ -174,11 +196,15 @@ async function getPageById(id: number): Promise<BookStackPageDetail> {
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await axios.get(
|
||||
`${bookstack.url}/api/pages/${id}`,
|
||||
{ headers: buildHeaders() },
|
||||
);
|
||||
const [response, bookSlugMap] = await Promise.all([
|
||||
axios.get(
|
||||
`${bookstack.url}/api/pages/${id}`,
|
||||
{ headers: buildHeaders() },
|
||||
),
|
||||
getBookSlugMap(),
|
||||
]);
|
||||
const page = response.data;
|
||||
const bookSlug = bookSlugMap.get(page.book_id) || page.book?.slug || page.book_slug || page.book_id;
|
||||
return {
|
||||
id: page.id,
|
||||
name: page.name,
|
||||
@@ -189,7 +215,7 @@ async function getPageById(id: number): Promise<BookStackPageDetail> {
|
||||
html: page.html ?? '',
|
||||
created_at: page.created_at,
|
||||
updated_at: page.updated_at,
|
||||
url: `${bookstack.url}/books/${page.book?.slug || page.book_slug || page.book_id}/page/${page.slug}`,
|
||||
url: `${bookstack.url}/books/${bookSlug}/page/${page.slug}`,
|
||||
book: page.book,
|
||||
createdBy: page.created_by,
|
||||
updatedBy: page.updated_by,
|
||||
|
||||
Reference in New Issue
Block a user