Files
lms-frontend/src/widgets/PostFeedWidget.ts
2025-04-08 00:05:15 +08:00

53 lines
1.7 KiB
TypeScript

// widgets/PostFeedWidget.ts
import { Widget } from '../components/Widget';
import { createElement } from '../utils/utils';
import { globalAPI, ApiResponse, ProfileResponseData } from '../api/api'; // Import API and types (now exported)
export class PostFeedWidget extends Widget {
private posts: { id: number; content: string }[] = [];
constructor() {
super();
this.fetchPosts();
}
async fetchPosts() {
try {
const response: ApiResponse<ProfileResponseData> = await globalAPI.getProfile('mockUserId');
if (response.success && response.data && response.data.posts) {
this.posts = response.data.posts;
this.render();
} else {
console.error("Failed to fetch posts");
}
} catch (error) {
console.error("Error fetching posts:", error);
}
}
render(): HTMLElement {
this.container.innerHTML = '';
const header = createElement('div');
header.classList.add('widget-header');
header.textContent = 'Post Feed';
this.container.appendChild(header);
const widgetBody = createElement('div');
widgetBody.classList.add('widget-body');
if (this.posts.length === 0) {
widgetBody.textContent = 'No posts yet.';
} else {
this.posts.forEach(post => {
const postDiv = createElement('div');
postDiv.classList.add('mb-2', 'p-2', 'border', 'rounded');
postDiv.textContent = post.content;
widgetBody.appendChild(postDiv);
});
}
this.container.appendChild(widgetBody);
return this.container;
}
}