From b623e17a411fd08a6a393f5eaa41b5a827f78bbf Mon Sep 17 00:00:00 2001 From: nguyentramy1 Date: Tue, 9 Sep 2025 17:58:13 +0700 Subject: [PATCH] update post --- src/app/core/models/post.models.ts | 4 +- .../core/services/api-service/post.service.ts | 9 +++- .../post/pages/post-create/post-create.html | 16 +++++-- .../post/pages/post-create/post-create.ts | 45 +++++++++++-------- src/app/shared/utils/mapData.ts | 8 +++- 5 files changed, 56 insertions(+), 26 deletions(-) diff --git a/src/app/core/models/post.models.ts b/src/app/core/models/post.models.ts index 8dd3da33..4c839abb 100644 --- a/src/app/core/models/post.models.ts +++ b/src/app/core/models/post.models.ts @@ -88,7 +88,7 @@ export interface PostADD { allowComment?: boolean; postType?: PostType; fileUrls: string; // CHUẨN THEO BE (lưu ý đánh vần!) - hashtag: string; // nếu muốn gửi dạng mảng + hashtag: string[]; // nếu muốn gửi dạng mảng fileDocument?: FileDocument | null; } @@ -99,7 +99,7 @@ export interface CreatePostRequest { isPublic: boolean; allowComment: boolean; postType: PostType; - hashtag?: string; + hashtag?: string[]; // nếu muốn gửi dạng mảng fileDocument?: { files?: File[]; diff --git a/src/app/core/services/api-service/post.service.ts b/src/app/core/services/api-service/post.service.ts index 5085de60..42a5e5fe 100644 --- a/src/app/core/services/api-service/post.service.ts +++ b/src/app/core/services/api-service/post.service.ts @@ -112,7 +112,8 @@ export class PostService { const fd: Record = { 'fileDocument.category': fileDocument.category, 'fileDocument.description': fileDocument.description, - 'fileDocument.tags': fileDocument.tags, + // 'fileDocument.tags': fileDocument.tags, // Xử lý riêng bên dưới + 'fileDocument.isLectureVideo': fileDocument.isLectureVideo, 'fileDocument.isTextBook': fileDocument.isTextBook, 'fileDocument.orgId': fileDocument.orgId, @@ -123,6 +124,12 @@ export class PostService { formDataData[key] = value; } } + // Nếu cần gửi tags theo dạng array [0], [1]... + if (fileDocument.tags?.length) { + fileDocument.tags.forEach((tag, i) => { + formDataData[`fileDocument.tags[${i}]`] = tag; + }); + } } // Gọi API diff --git a/src/app/features/post/pages/post-create/post-create.html b/src/app/features/post/pages/post-create/post-create.html index 596c316b..7f6b5d2d 100644 --- a/src/app/features/post/pages/post-create/post-create.html +++ b/src/app/features/post/pages/post-create/post-create.html @@ -14,7 +14,15 @@ >
- + +
diff --git a/src/app/features/post/pages/post-create/post-create.ts b/src/app/features/post/pages/post-create/post-create.ts index e1e7782f..7a315d2a 100644 --- a/src/app/features/post/pages/post-create/post-create.ts +++ b/src/app/features/post/pages/post-create/post-create.ts @@ -30,6 +30,7 @@ import { clearLoading, setLoading, } from '../../../../shared/store/loading-state/loading.action'; +import { th } from 'date-fns/locale'; export interface Draft { id: string; // ID duy nhất cho mỗi bản nháp @@ -45,7 +46,7 @@ export interface Draft { imports: [ InputComponent, TextEditor, - DropdownButtonComponent, + // DropdownButtonComponent, ButtonComponent, FormsModule, CommonModule, @@ -64,7 +65,7 @@ export class PostCreatePageComponent { allowComment: true, postType: 'Global', fileUrls: '', // CHUẨN THEO BE (lưu ý đánh vần!) - hashtag: '', // nếu muốn gửi dạng mảng + hashtag: [], // nếu muốn gửi dạng mảng fileDocument: null, }; @@ -114,6 +115,23 @@ export class PostCreatePageComponent { ngOnInit(): void { this.loadAllDrafts(); } + tagInput: string = ''; // người dùng nhập tag thô + tags: string[] = []; // danh sách tag đã cắt ra + handleTagInputChange(value: string | number): void { + this.tagInput = value.toString(); + this.tags = this.tagInput + .split(',') + .map((t) => t.trim()) + .filter((t) => t.length > 0); // loại bỏ tag rỗng + if (this.tags.length > 0) { + if (!this.post.fileDocument) { + this.post.fileDocument = {}; + } + this.post.hashtag = this.tags; + this.post.fileDocument.tags = this.tags; + } + console.log('Danh sách tag:', this.tags); + } onFilesSelected(event: Event) { const input = event.target as HTMLInputElement; @@ -166,15 +184,6 @@ export class PostCreatePageComponent { this.post.fileDocument.orgId = selected?.value || ''; } - if (dropdownKey === 'tag') { - if (!this.post.fileDocument) this.post.fileDocument = {}; - if (Array.isArray(selected)) { - this.post.fileDocument.tags = selected.map((s) => s.label); - } else { - this.post.fileDocument.tags = selected?.label ? [selected.label] : []; - } - } - if (dropdownKey === 'hashtag') { this.post.hashtag = selected?.value || ''; } @@ -262,12 +271,12 @@ export class PostCreatePageComponent { // Hàm helper để cập nhật UI của dropdowns updateSelectedOptionsFromDraft(): void { - if (this.post.hashtag) { - const selectedTopic = this.topics.find( - (t) => t.value === this.post.hashtag - ); - if (selectedTopic) this.selectedOptions['hashtag'] = selectedTopic; - } + // if (this.post.hashtag) { + // const selectedTopic = this.topics.find( + // (t) => t.value === this.post.hashtag + // ); + // if (selectedTopic) this.selectedOptions['hashtag'] = selectedTopic; + // } if (this.post.orgId) { const selectedWhere = this.wherepost.find( (w) => w.value === this.post.orgId @@ -378,7 +387,7 @@ export class PostCreatePageComponent { allowComment: true, postType: 'Global', fileUrls: '', - hashtag: '', + hashtag: [], fileDocument: null, }; this.editorContent = ''; diff --git a/src/app/shared/utils/mapData.ts b/src/app/shared/utils/mapData.ts index e955ee94..36b48295 100644 --- a/src/app/shared/utils/mapData.ts +++ b/src/app/shared/utils/mapData.ts @@ -78,6 +78,12 @@ export function mapPostInfortoPost(post: PostADD): Post { }; } export function mapPostdatatoPostCardInfo(post: PostResponse): PostCardInfo { + let tagInput = post.hashtag || ''; + let taglist = tagInput + .split(',') + .map((t) => t.trim()) + .filter((t) => t.length > 0); // loại bỏ tag rỗng + return { id: post.postId, avatar: post.user?.avatarUrl || avatarUrlDefault, @@ -87,7 +93,7 @@ export function mapPostdatatoPostCardInfo(post: PostResponse): PostCardInfo { title: post.title, time: post.createdAt, description: post.content, - tags: [post.hashtag], + tags: taglist, comment: post.commentCount, upvote: post.upvoteCount, downvote: post.downvoteCount,