Files
sciagent/frontend_user/src/data/mockApplications.ts
T
Thinh Lam 688fac73e9
CI/CD / backend (push) Failing after 2m8s
CI/CD / frontend (push) Failing after 1m40s
CI/CD / deploy (push) Has been skipped
sciagent code + Gitea Actions CI/CD
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 09:38:30 +07:00

116 lines
4.2 KiB
TypeScript

/**
* Shared mock application rows for council list + admin review when API is unavailable.
*/
export type ApplicationStatus =
| "pending"
| "approved"
| "rejected"
| "transferred"
| "under_review"
| "reviewed";
export type ReviewStatus = "not_reviewed" | "under_review" | "reviewed";
export interface Person {
id: string;
name: string;
email?: string;
phone?: string;
}
export interface ApplicationFile {
/** Local/API path or relative URL */
url?: string;
/** Signed GET (e.g. MinIO full PDF) — prefer when present */
viewUrl?: string;
/** Object key when stored in object storage (opaque; for diagnostics) */
storageKey?: string;
type?: "pdf" | "docx" | "image" | string;
}
export interface ApplicationItem {
id: string;
/** Same as `draft_case_id` from API — Initiative.case_code for loading `/api/v1/application-drafts/…` */
draftCaseId?: string;
/** Set by API; mapped to `draftCaseId` in `normalizeApplicationItem` (submission `id` is often `sub-…` instead) */
draft_case_id?: string;
submittedDate: string;
name: string;
author: Person;
/** Calendar year of submission (set by API `/api/applications/mine`) */
calendarYear?: number;
/** Value key for `DEPARTMENT_OPTIONS` / filter `subjectId` (Đơn vị) */
subjectId?: string;
/** Value key for `GROUP_OPTIONS` / filter `topicTypeId` (Nhóm sáng kiến) */
groupId?: string;
conference?: { id: string; name: string; subCategory?: string };
supervisor?: Person | null;
reviewer?: Person | null;
reviewDeadline?: string | null;
/** Legacy display fallback if `groupId` missing */
topicType?: string;
/** From draft tab `application` — drives approved-row merit label (2.1.1 / 2.1.2 → Xuất sắc). */
initiativeClassification?: "technical" | "research" | "textbook" | null;
/** From draft tab `application` — nhóm 2.2 (sách / tài liệu tham khảo). */
textbookEvidenceKind?: "" | "book" | "reference";
status: ApplicationStatus;
reviewStatus?: ReviewStatus;
/** Cột «Đủ và Đúng» (danh sách quản trị); API có thể gửi `du_va_dung` */
duVaDung?: string | null;
/** Cột «Nhận xét» (thẩm định minh chứng); API có thể gửi `nhan_xet` */
nhanXet?: string | null;
files?: {
abstract?: ApplicationFile | null;
poster?: ApplicationFile | null;
fullText?: ApplicationFile | null;
};
}
export const MOCK_APPLICATIONS: ApplicationItem[] = [
{
id: "app-001",
submittedDate: "2026-03-23T22:23:00Z",
name: "KHẢO SÁT TÁC DỤNG KHÁNG VIÊM TỪ DƯỢC LIỆU",
author: { id: "user-042", name: "Lê Thị Kim Ngân", email: "kimngaan1294@gmail.com", phone: "0778093364" },
subjectId: "khoa_y_te_cong_cong",
groupId: "innovation_from_research",
conference: { id: "conf-006", name: "SÁNG THỨ 6", subCategory: "Bệnh không lây nhiễm" },
supervisor: { id: "user-055", name: "Ngô Văn Hùng" },
reviewer: { id: "user-101", name: "Phạm Thị Quỳnh" },
reviewDeadline: "2026-03-31",
topicType: "Tóm tắt báo cáo khoa học",
status: "pending",
reviewStatus: "not_reviewed",
files: {
abstract: { url: "/files/app-001/abstract.pdf", type: "pdf" },
poster: { url: "/files/app-001/poster.docx", type: "docx" },
fullText: null,
},
},
{
id: "app-002",
submittedDate: "2026-03-20T09:10:00Z",
name: "ỨNG DỤNG AI TRONG DỰ BÁO DỊCH TỄ",
author: { id: "user-077", name: "Nguyễn Văn Minh", email: "minh@example.com", phone: "0909555000" },
subjectId: "phong_khoa_hoc_cong_nghe",
groupId: "internal_technical_management",
conference: { id: "conf-004", name: "CHIỀU THỨ 5", subCategory: "Dịch tễ học" },
supervisor: null,
reviewer: { id: "user-102", name: "Trần Thanh Huyền" },
reviewDeadline: "2026-03-22",
topicType: "Nghiên cứu khoa học",
status: "approved",
reviewStatus: "reviewed",
files: {
abstract: { url: "/files/app-002/abstract.pdf", type: "pdf" },
poster: null,
fullText: { url: "/files/app-002/full-text", type: "link" },
},
},
];
export function getMockApplicationById(id: string): ApplicationItem | undefined {
return MOCK_APPLICATIONS.find((a) => a.id === id);
}