Skip to content

Commit 797229e

Browse files
committed
feat: fills missing page titles from page contents
1 parent 66cb730 commit 797229e

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

plugins/confluence-plugin/src/components/PageContent.tsx

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,41 @@ const PageContent: React.FC = () => {
4343
[baseConfluenceUrl]
4444
);
4545

46+
const fetchMissingPageTitles = useCallback(
47+
async (pages: EntityPageI[]): Promise<EntityPageI[]> => {
48+
if (pages.length === 0) return [];
49+
const updatedPages = await Promise.all(
50+
pages.map(async (page) => {
51+
if (page.title && page.title.length > 0) {
52+
return page;
53+
}
54+
try {
55+
const contentJSON = await fetchConfluencePageContent(
56+
baseConfluenceUrl,
57+
page.id
58+
);
59+
return {
60+
...page,
61+
title:
62+
page.title && page.title.length > 0
63+
? page.title
64+
: contentJSON.title,
65+
};
66+
} catch (error) {
67+
console.error(
68+
`Error fetching page title for page with ID ${page.id}: ${
69+
(error as Error).message
70+
}`
71+
);
72+
return page;
73+
}
74+
})
75+
);
76+
return updatedPages;
77+
},
78+
[baseConfluenceUrl]
79+
);
80+
4681
useEffect(() => {
4782
if (!context?.apiBaseUrl) return;
4883
const getConfig = async (): Promise<void> => {
@@ -85,7 +120,10 @@ const PageContent: React.FC = () => {
85120
setErrorStr("No Confluence details exist on this entity.");
86121
return;
87122
}
88-
setEntityPages(fetchedEntityPages);
123+
const pagesWithTitles = await fetchMissingPageTitles(
124+
fetchedEntityPages
125+
);
126+
setEntityPages(pagesWithTitles);
89127
} catch (error) {
90128
setErrorStr(
91129
`Error retrieving Confluence page: ${(error as Error).message}`
@@ -95,7 +133,12 @@ const PageContent: React.FC = () => {
95133
}
96134
};
97135
void fetchEntityYamlData();
98-
}, [context.apiBaseUrl, context.entity?.tag, baseConfluenceUrl]);
136+
}, [
137+
context.apiBaseUrl,
138+
context.entity?.tag,
139+
baseConfluenceUrl,
140+
fetchMissingPageTitles,
141+
]);
99142

100143
useEffect(() => {
101144
const setFirstPageContent = async (): Promise<void> => {

plugins/confluence-plugin/src/components/PageSelector.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default function PageSelector({
1919
alignItems={"baseline"}
2020
w={"full"}
2121
>
22-
<FormLabel>Select page:</FormLabel>
22+
<FormLabel>Select confluence page:</FormLabel>
2323
<Select
2424
value={currentPageId}
2525
onChange={(e) => {
@@ -32,7 +32,7 @@ export default function PageSelector({
3232
<option key={page.id} value={page.id}>
3333
{page.title && page.title.length > 0
3434
? page.title
35-
: `Page ID: ${page.id}`}
35+
: `Confluence Page ${page.id}`}
3636
</option>
3737
))}
3838
</Select>

0 commit comments

Comments
 (0)