60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
interface RevueAuthorsResponse {
|
|
html_template: string;
|
|
}
|
|
|
|
export default function singleRevue(): void {
|
|
const isSingleRevue: HTMLElement | null =
|
|
document.querySelector('.page--single-revue');
|
|
if (!isSingleRevue) return;
|
|
|
|
hydrateRevueAuthors();
|
|
handleAuthorsButton();
|
|
}
|
|
function getRevueID(): string | null {
|
|
const revueElement: HTMLElement | null =
|
|
document.querySelector('.page--single-revue');
|
|
if (!revueElement) {
|
|
return null;
|
|
}
|
|
return revueElement.getAttribute('data-revue-id');
|
|
}
|
|
|
|
function handleAuthorsButton(): void {
|
|
const authorsButton: HTMLButtonElement | null =
|
|
document.querySelector('.authors-button');
|
|
if (authorsButton) {
|
|
authorsButton.addEventListener('click', () => {
|
|
hydrateRevueAuthors();
|
|
});
|
|
}
|
|
}
|
|
|
|
async function hydrateRevueAuthors(): Promise<void> {
|
|
const revueID = getRevueID();
|
|
if (!revueID) return;
|
|
|
|
try {
|
|
const response = await fetch(
|
|
`/wp-json/dynamiques-datas/v1/build/revue/authors?revue-id=${revueID}`
|
|
);
|
|
if (!response.ok) {
|
|
throw new Error(
|
|
`HTTP error! status: ${response.status}`
|
|
);
|
|
}
|
|
const revueAuthors: RevueAuthorsResponse =
|
|
await response.json();
|
|
|
|
const authorsList: HTMLElement | null =
|
|
document.querySelector('.authors-list');
|
|
if (authorsList) {
|
|
authorsList.innerHTML = revueAuthors.html_template;
|
|
}
|
|
} catch (error) {
|
|
console.error(
|
|
'Failed to fetch and hydrate revue authors:',
|
|
error
|
|
);
|
|
}
|
|
}
|