{item.title}
+-
+
- Loại +
- {item.type} +
- Trạng thái +
- {item.status ?? "Đã xác minh"} +
- Mô tả công khai +
- {item.description} +
diff --git a/apps/sale/app/tutor/profile/edit/loading.tsx b/apps/sale/app/tutor/profile/edit/loading.tsx
new file mode 100644
index 0000000..b475b4b
--- /dev/null
+++ b/apps/sale/app/tutor/profile/edit/loading.tsx
@@ -0,0 +1,5 @@
+import { ProfileEditorSkeleton } from "@/features/tutor-profile-editor";
+
+export default function Loading() {
+ return
Hồ sơ gia sư
-- Thông tin ngân hàng và giấy tờ xác thực không xuất hiện trong hồ sơ - công khai. -
-Chọn biểu tượng bút chì tại phần cần cập nhật.
++ {description} +
+ ) : null} + {options ? ( + + ) : multiline ? ( + + ) : ( + + )} + {error ? ( ++ {error.message} +
+ ) : null} +{label}
+ {reviewRequired ? ( + + Cần duyệt lại + + ) : null} +{description}
+ ) : null} +{title}
+ ++ {message} +
+ ) : null; +} diff --git a/apps/sale/features/tutor-profile-editor/components/SimpleListField.tsx b/apps/sale/features/tutor-profile-editor/components/SimpleListField.tsx new file mode 100644 index 0000000..1f47ca0 --- /dev/null +++ b/apps/sale/features/tutor-profile-editor/components/SimpleListField.tsx @@ -0,0 +1,75 @@ +"use client"; + +import { useFieldArray, useFormContext } from "react-hook-form"; +import type { TutorProfileEditorValues } from "../schemas/profile-editor.schema"; +import { ProfileField } from "./ProfileField"; +import { RepeaterError, RepeaterHeader, RepeaterItem } from "./RepeaterPrimitives"; + +type SimpleListName = + | "subjects" + | "specializations" + | "teachingModes" + | "introduction" + | "education" + | "achievements"; + +interface SimpleListFieldProps { + name: SimpleListName; + label: string; + itemLabel: string; + addLabel: string; + description?: string; + reviewRequired?: boolean; + multiline?: boolean; +} + +export function SimpleListField({ + name, + label, + itemLabel, + addLabel, + description, + reviewRequired = false, + multiline = false, +}: SimpleListFieldProps) { + const { + control, + register, + formState: { errors }, + } = useFormContext+ Hồ sơ đã được gửi xét duyệt lại. Phiên bản công khai hiện tại vẫn được giữ cho đến khi nội dung mới được duyệt. +
++ JPG, PNG hoặc WEBP. Dung lượng tối đa 5 MB. +
+ onFileChange(event.target.files?.[0])} + className="mt-3 block w-full text-xs text-[#56516a] file:mr-3 file:rounded-full file:border-0 file:bg-[#280f91] file:px-4 file:py-2 file:font-bold file:text-white hover:file:bg-[#200c76]" + /> + {fileError ?{fileError}
: null} +Tên hiển thị
+{profile.displayName}
+Thông tin tài khoản được đồng bộ từ hệ thống và không chỉnh sửa tại đây.
++ JPG, PNG hoặc WEBP, tối đa 10 MB. +
+ onFileChange(index, event.target.files?.[0])} + className="mt-2 block w-full text-xs text-[#56516a] file:mr-3 file:rounded-full file:border-0 file:bg-[#280f91]/10 file:px-3 file:py-2 file:font-bold file:text-[#280f91]" + /> + {fileErrors[index] ? ( ++ {fileErrors[index]} +
+ ) : null} +Trạng thái
+{field.status}
+Trạng thái do BeeWise cập nhật sau khi xét duyệt.
+Trạng thái
++ {field.outcome} +
++ BeeWise cập nhật trạng thái sau khi kiểm tra thông tin. +
+Hồ sơ gia sư
++ Đây là nội dung đang được hiển thị với học viên trên BeeWise. +
+