@hed-hog/lms 0.0.347 → 0.0.350
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/achievement/achievement.controller.d.ts +62 -0
- package/dist/achievement/achievement.controller.d.ts.map +1 -0
- package/dist/achievement/achievement.controller.js +90 -0
- package/dist/achievement/achievement.controller.js.map +1 -0
- package/dist/achievement/achievement.mcp-tools.d.ts +19 -0
- package/dist/achievement/achievement.mcp-tools.d.ts.map +1 -0
- package/dist/achievement/achievement.mcp-tools.js +157 -0
- package/dist/achievement/achievement.mcp-tools.js.map +1 -0
- package/dist/achievement/achievement.module.d.ts +3 -0
- package/dist/achievement/achievement.module.d.ts.map +1 -0
- package/dist/achievement/achievement.module.js +26 -0
- package/dist/achievement/achievement.module.js.map +1 -0
- package/dist/achievement/achievement.service.d.ts +72 -0
- package/dist/achievement/achievement.service.d.ts.map +1 -0
- package/dist/achievement/achievement.service.js +200 -0
- package/dist/achievement/achievement.service.js.map +1 -0
- package/dist/achievement/dto/create-achievement.dto.d.ts +12 -0
- package/dist/achievement/dto/create-achievement.dto.d.ts.map +1 -0
- package/dist/achievement/dto/create-achievement.dto.js +60 -0
- package/dist/achievement/dto/create-achievement.dto.js.map +1 -0
- package/dist/achievement/dto/update-achievement.dto.d.ts +11 -0
- package/dist/achievement/dto/update-achievement.dto.d.ts.map +1 -0
- package/dist/achievement/dto/update-achievement.dto.js +57 -0
- package/dist/achievement/dto/update-achievement.dto.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts +114 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.js +102 -0
- package/dist/bitcode-wallet/bitcode-wallet.controller.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts +25 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js +160 -0
- package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.d.ts +3 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.js +26 -0
- package/dist/bitcode-wallet/bitcode-wallet.module.js.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.d.ts +127 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.d.ts.map +1 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.js +264 -0
- package/dist/bitcode-wallet/bitcode-wallet.service.js.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts +8 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js +33 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts +4 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js +22 -0
- package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts +7 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js +35 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts +4 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts.map +1 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js +23 -0
- package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js.map +1 -0
- package/dist/certificate/certificate.controller.d.ts +22 -0
- package/dist/certificate/certificate.controller.d.ts.map +1 -1
- package/dist/certificate/certificate.controller.js +12 -0
- package/dist/certificate/certificate.controller.js.map +1 -1
- package/dist/certificate/certificate.mcp-tools.d.ts +24 -0
- package/dist/certificate/certificate.mcp-tools.d.ts.map +1 -0
- package/dist/certificate/certificate.mcp-tools.js +188 -0
- package/dist/certificate/certificate.mcp-tools.js.map +1 -0
- package/dist/certificate/certificate.module.d.ts.map +1 -1
- package/dist/certificate/certificate.module.js +2 -1
- package/dist/certificate/certificate.module.js.map +1 -1
- package/dist/certificate/certificate.service.d.ts +25 -2
- package/dist/certificate/certificate.service.d.ts.map +1 -1
- package/dist/certificate/certificate.service.js +87 -2
- package/dist/certificate/certificate.service.js.map +1 -1
- package/dist/certificate/dto/update-certificate-public-access.dto.d.ts +4 -0
- package/dist/certificate/dto/update-certificate-public-access.dto.d.ts.map +1 -0
- package/dist/certificate/dto/update-certificate-public-access.dto.js +21 -0
- package/dist/certificate/dto/update-certificate-public-access.dto.js.map +1 -0
- package/dist/class-group/class-group.controller.d.ts +3 -3
- package/dist/class-group/class-group.mcp-tools.d.ts +87 -0
- package/dist/class-group/class-group.mcp-tools.d.ts.map +1 -0
- package/dist/class-group/class-group.mcp-tools.js +553 -0
- package/dist/class-group/class-group.mcp-tools.js.map +1 -0
- package/dist/class-group/class-group.module.d.ts.map +1 -1
- package/dist/class-group/class-group.module.js +2 -1
- package/dist/class-group/class-group.module.js.map +1 -1
- package/dist/class-group/class-group.service.d.ts +6 -4
- package/dist/class-group/class-group.service.d.ts.map +1 -1
- package/dist/class-group/class-group.service.js +45 -2
- package/dist/class-group/class-group.service.js.map +1 -1
- package/dist/course/course-operations-integration.service.d.ts +40 -0
- package/dist/course/course-operations-integration.service.d.ts.map +1 -0
- package/dist/course/course-operations-integration.service.js +372 -0
- package/dist/course/course-operations-integration.service.js.map +1 -0
- package/dist/course/course-structure.controller.d.ts +43 -4
- package/dist/course/course-structure.controller.d.ts.map +1 -1
- package/dist/course/course-structure.controller.js +22 -0
- package/dist/course/course-structure.controller.js.map +1 -1
- package/dist/course/course-structure.service.d.ts +42 -1
- package/dist/course/course-structure.service.d.ts.map +1 -1
- package/dist/course/course-structure.service.js +199 -32
- package/dist/course/course-structure.service.js.map +1 -1
- package/dist/course/course.controller.d.ts +12 -0
- package/dist/course/course.controller.d.ts.map +1 -1
- package/dist/course/course.mcp-tools.d.ts +90 -0
- package/dist/course/course.mcp-tools.d.ts.map +1 -0
- package/dist/course/course.mcp-tools.js +520 -0
- package/dist/course/course.mcp-tools.js.map +1 -0
- package/dist/course/course.module.d.ts.map +1 -1
- package/dist/course/course.module.js +8 -1
- package/dist/course/course.module.js.map +1 -1
- package/dist/course/course.service.d.ts +15 -1
- package/dist/course/course.service.d.ts.map +1 -1
- package/dist/course/course.service.js +70 -35
- package/dist/course/course.service.js.map +1 -1
- package/dist/course/dto/create-course.dto.d.ts +1 -0
- package/dist/course/dto/create-course.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course.dto.js +7 -0
- package/dist/course/dto/create-course.dto.js.map +1 -1
- package/dist/course/dto/update-course-resources.dto.d.ts +11 -0
- package/dist/course/dto/update-course-resources.dto.d.ts.map +1 -0
- package/dist/course/dto/update-course-resources.dto.js +51 -0
- package/dist/course/dto/update-course-resources.dto.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts +23 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.js +78 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.controller.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts +22 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js +120 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts +3 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.js +26 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.module.js.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts +49 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts.map +1 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.js +272 -0
- package/dist/course-lesson-discussion/course-lesson-discussion.service.js.map +1 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts +6 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts.map +1 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js +33 -0
- package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.controller.d.ts +53 -0
- package/dist/course-lesson-note/course-lesson-note.controller.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.controller.js +93 -0
- package/dist/course-lesson-note/course-lesson-note.controller.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts +27 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.js +145 -0
- package/dist/course-lesson-note/course-lesson-note.mcp-tools.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.module.d.ts +3 -0
- package/dist/course-lesson-note/course-lesson-note.module.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.module.js +26 -0
- package/dist/course-lesson-note/course-lesson-note.module.js.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.service.d.ts +59 -0
- package/dist/course-lesson-note/course-lesson-note.service.d.ts.map +1 -0
- package/dist/course-lesson-note/course-lesson-note.service.js +195 -0
- package/dist/course-lesson-note/course-lesson-note.service.js.map +1 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts +6 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts.map +1 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js +33 -0
- package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js.map +1 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts +6 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts.map +1 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js +35 -0
- package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js.map +1 -0
- package/dist/dashboard/dashboard.mcp-tools.d.ts +10 -0
- package/dist/dashboard/dashboard.mcp-tools.d.ts.map +1 -0
- package/dist/dashboard/dashboard.mcp-tools.js +46 -0
- package/dist/dashboard/dashboard.mcp-tools.js.map +1 -0
- package/dist/dashboard/dashboard.module.d.ts.map +1 -1
- package/dist/dashboard/dashboard.module.js +2 -1
- package/dist/dashboard/dashboard.module.js.map +1 -1
- package/dist/enterprise/enterprise.mcp-tools.d.ts +82 -0
- package/dist/enterprise/enterprise.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/enterprise.mcp-tools.js +516 -0
- package/dist/enterprise/enterprise.mcp-tools.js.map +1 -0
- package/dist/enterprise/enterprise.module.d.ts.map +1 -1
- package/dist/enterprise/enterprise.module.js +2 -1
- package/dist/enterprise/enterprise.module.js.map +1 -1
- package/dist/enterprise/training/enterprise-training.module.d.ts.map +1 -1
- package/dist/enterprise/training/enterprise-training.module.js +11 -1
- package/dist/enterprise/training/enterprise-training.module.js.map +1 -1
- package/dist/enterprise/training/training-admin.controller.d.ts +2 -2
- package/dist/enterprise/training/training-admin.mcp-tools.d.ts +79 -0
- package/dist/enterprise/training/training-admin.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/training/training-admin.mcp-tools.js +620 -0
- package/dist/enterprise/training/training-admin.mcp-tools.js.map +1 -0
- package/dist/enterprise/training/training-admin.service.d.ts +2 -2
- package/dist/enterprise/training/training-instructor.mcp-tools.d.ts +47 -0
- package/dist/enterprise/training/training-instructor.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/training/training-instructor.mcp-tools.js +275 -0
- package/dist/enterprise/training/training-instructor.mcp-tools.js.map +1 -0
- package/dist/enterprise/training/training-student.controller.d.ts +24 -0
- package/dist/enterprise/training/training-student.controller.d.ts.map +1 -1
- package/dist/enterprise/training/training-student.controller.js +22 -0
- package/dist/enterprise/training/training-student.controller.js.map +1 -1
- package/dist/enterprise/training/training-student.mcp-tools.d.ts +27 -0
- package/dist/enterprise/training/training-student.mcp-tools.d.ts.map +1 -0
- package/dist/enterprise/training/training-student.mcp-tools.js +186 -0
- package/dist/enterprise/training/training-student.mcp-tools.js.map +1 -0
- package/dist/enterprise/training/training-student.service.d.ts +32 -0
- package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
- package/dist/enterprise/training/training-student.service.js +138 -0
- package/dist/enterprise/training/training-student.service.js.map +1 -1
- package/dist/evaluation/evaluation.controller.d.ts +4 -4
- package/dist/evaluation/evaluation.mcp-tools.d.ts +25 -0
- package/dist/evaluation/evaluation.mcp-tools.d.ts.map +1 -0
- package/dist/evaluation/evaluation.mcp-tools.js +220 -0
- package/dist/evaluation/evaluation.mcp-tools.js.map +1 -0
- package/dist/evaluation/evaluation.module.d.ts.map +1 -1
- package/dist/evaluation/evaluation.module.js +2 -1
- package/dist/evaluation/evaluation.module.js.map +1 -1
- package/dist/evaluation/evaluation.service.d.ts +4 -4
- package/dist/exam/dto/create-exam-question.dto.d.ts +2 -0
- package/dist/exam/dto/create-exam-question.dto.d.ts.map +1 -1
- package/dist/exam/dto/create-exam-question.dto.js +10 -0
- package/dist/exam/dto/create-exam-question.dto.js.map +1 -1
- package/dist/exam/dto/create-exam.dto.d.ts +2 -0
- package/dist/exam/dto/create-exam.dto.d.ts.map +1 -1
- package/dist/exam/dto/create-exam.dto.js +10 -0
- package/dist/exam/dto/create-exam.dto.js.map +1 -1
- package/dist/exam/dto/create-question-subject.dto.d.ts +5 -0
- package/dist/exam/dto/create-question-subject.dto.d.ts.map +1 -0
- package/dist/exam/dto/create-question-subject.dto.js +28 -0
- package/dist/exam/dto/create-question-subject.dto.js.map +1 -0
- package/dist/exam/exam-attempt.controller.d.ts +4 -0
- package/dist/exam/exam-attempt.controller.d.ts.map +1 -1
- package/dist/exam/exam-attempt.service.d.ts +7 -1
- package/dist/exam/exam-attempt.service.d.ts.map +1 -1
- package/dist/exam/exam-attempt.service.js +47 -17
- package/dist/exam/exam-attempt.service.js.map +1 -1
- package/dist/exam/exam.controller.d.ts +34 -0
- package/dist/exam/exam.controller.d.ts.map +1 -1
- package/dist/exam/exam.controller.js +27 -0
- package/dist/exam/exam.controller.js.map +1 -1
- package/dist/exam/exam.mcp-tools.d.ts +62 -0
- package/dist/exam/exam.mcp-tools.d.ts.map +1 -0
- package/dist/exam/exam.mcp-tools.js +430 -0
- package/dist/exam/exam.mcp-tools.js.map +1 -0
- package/dist/exam/exam.module.d.ts.map +1 -1
- package/dist/exam/exam.module.js +2 -1
- package/dist/exam/exam.module.js.map +1 -1
- package/dist/exam/exam.service.d.ts +38 -0
- package/dist/exam/exam.service.d.ts.map +1 -1
- package/dist/exam/exam.service.js +114 -17
- package/dist/exam/exam.service.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/instructor/instructor.mcp-tools.d.ts +41 -0
- package/dist/instructor/instructor.mcp-tools.d.ts.map +1 -0
- package/dist/instructor/instructor.mcp-tools.js +326 -0
- package/dist/instructor/instructor.mcp-tools.js.map +1 -0
- package/dist/instructor/instructor.module.d.ts.map +1 -1
- package/dist/instructor/instructor.module.js +2 -1
- package/dist/instructor/instructor.module.js.map +1 -1
- package/dist/lms.module.d.ts.map +1 -1
- package/dist/lms.module.js +15 -0
- package/dist/lms.module.js.map +1 -1
- package/dist/realtime/lms-realtime.controller.d.ts +7 -0
- package/dist/realtime/lms-realtime.controller.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.controller.js +34 -0
- package/dist/realtime/lms-realtime.controller.js.map +1 -0
- package/dist/realtime/lms-realtime.module.d.ts +3 -0
- package/dist/realtime/lms-realtime.module.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.module.js +25 -0
- package/dist/realtime/lms-realtime.module.js.map +1 -0
- package/dist/realtime/lms-realtime.service.d.ts +36 -0
- package/dist/realtime/lms-realtime.service.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.service.js +59 -0
- package/dist/realtime/lms-realtime.service.js.map +1 -0
- package/dist/realtime/lms-realtime.subscriber.d.ts +10 -0
- package/dist/realtime/lms-realtime.subscriber.d.ts.map +1 -0
- package/dist/realtime/lms-realtime.subscriber.js +70 -0
- package/dist/realtime/lms-realtime.subscriber.js.map +1 -0
- package/dist/reports/reports.mcp-tools.d.ts +10 -0
- package/dist/reports/reports.mcp-tools.d.ts.map +1 -0
- package/dist/reports/reports.mcp-tools.js +50 -0
- package/dist/reports/reports.mcp-tools.js.map +1 -0
- package/dist/reports/reports.module.d.ts.map +1 -1
- package/dist/reports/reports.module.js +2 -1
- package/dist/reports/reports.module.js.map +1 -1
- package/dist/training/training.mcp-tools.d.ts +20 -0
- package/dist/training/training.mcp-tools.d.ts.map +1 -0
- package/dist/training/training.mcp-tools.js +181 -0
- package/dist/training/training.mcp-tools.js.map +1 -0
- package/dist/training/training.module.d.ts.map +1 -1
- package/dist/training/training.module.js +2 -1
- package/dist/training/training.module.js.map +1 -1
- package/hedhog/data/integration_event_catalog.yaml +69 -0
- package/hedhog/data/menu.yaml +34 -0
- package/hedhog/data/route.yaml +2351 -0
- package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +168 -103
- package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +80 -1
- package/hedhog/frontend/app/_components/course-picker.tsx.ejs +228 -0
- package/hedhog/frontend/app/_lib/hooks/use-lms-realtime-refresh.ts.ejs +58 -0
- package/hedhog/frontend/app/achievements/page.tsx.ejs +844 -0
- package/hedhog/frontend/app/bitcodes/page.tsx.ejs +1010 -0
- package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +61 -2
- package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +7 -0
- package/hedhog/frontend/app/classes/page.tsx.ejs +55 -2060
- package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +28 -0
- package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +1 -0
- package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +0 -9
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +80 -66
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +583 -8
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +527 -57
- package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +1 -1
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +106 -4
- package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +2 -1
- package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +11 -1
- package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +53 -6
- package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +13 -2
- package/hedhog/frontend/app/courses/page.tsx.ejs +175 -29
- package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +3 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-course-edit-sheet.tsx.ejs +7 -0
- package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +169 -2
- package/hedhog/frontend/app/exams/page.tsx.ejs +77 -22
- package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +1 -0
- package/hedhog/frontend/app/instructors/page.tsx.ejs +1 -0
- package/hedhog/frontend/app/paths/page.tsx.ejs +6 -24
- package/hedhog/frontend/app/training/page.tsx.ejs +6 -24
- package/hedhog/frontend/messages/en.json +314 -12
- package/hedhog/frontend/messages/pt.json +314 -12
- package/hedhog/query/triggers.sql +53 -0
- package/hedhog/table/achievement.yaml +46 -0
- package/hedhog/table/bitcode_wallet.yaml +18 -0
- package/hedhog/table/bitcode_wallet_transaction.yaml +22 -0
- package/hedhog/table/certificate.yaml +3 -0
- package/hedhog/table/course.yaml +4 -0
- package/hedhog/table/course_file.yaml +23 -0
- package/hedhog/table/course_lesson.yaml +5 -0
- package/hedhog/table/course_lesson_discussion_like.yaml +21 -0
- package/hedhog/table/course_lesson_discussion_topic.yaml +35 -0
- package/hedhog/table/course_lesson_note.yaml +34 -0
- package/hedhog/table/exam.yaml +5 -0
- package/hedhog/table/learning_path_enrollment.yaml +6 -0
- package/hedhog/table/question.yaml +10 -0
- package/hedhog/table/question_subject.yaml +17 -0
- package/hedhog/table/student_activity_streak.yaml +25 -0
- package/package.json +7 -7
- package/src/achievement/achievement.controller.ts +60 -0
- package/src/achievement/achievement.mcp-tools.ts +108 -0
- package/src/achievement/achievement.module.ts +13 -0
- package/src/achievement/achievement.service.ts +252 -0
- package/src/achievement/dto/create-achievement.dto.ts +50 -0
- package/src/achievement/dto/update-achievement.dto.ts +47 -0
- package/src/bitcode-wallet/bitcode-wallet.controller.ts +69 -0
- package/src/bitcode-wallet/bitcode-wallet.mcp-tools.ts +107 -0
- package/src/bitcode-wallet/bitcode-wallet.module.ts +13 -0
- package/src/bitcode-wallet/bitcode-wallet.service.ts +361 -0
- package/src/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.ts +27 -0
- package/src/bitcode-wallet/dto/create-bitcode-wallet.dto.ts +7 -0
- package/src/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.ts +28 -0
- package/src/bitcode-wallet/dto/update-bitcode-wallet.dto.ts +8 -0
- package/src/certificate/certificate.controller.ts +20 -11
- package/src/certificate/certificate.mcp-tools.ts +131 -0
- package/src/certificate/certificate.module.ts +2 -1
- package/src/certificate/certificate.service.ts +95 -4
- package/src/certificate/dto/update-certificate-public-access.dto.ts +6 -0
- package/src/class-group/class-group.mcp-tools.ts +435 -0
- package/src/class-group/class-group.module.ts +2 -1
- package/src/class-group/class-group.service.ts +51 -1
- package/src/course/course-operations-integration.service.ts +520 -0
- package/src/course/course-structure.controller.ts +22 -8
- package/src/course/course-structure.service.ts +215 -23
- package/src/course/course.mcp-tools.ts +409 -0
- package/src/course/course.module.ts +8 -1
- package/src/course/course.service.ts +106 -27
- package/src/course/dto/create-course.dto.ts +8 -0
- package/src/course/dto/update-course-resources.dto.ts +39 -0
- package/src/course-lesson-discussion/course-lesson-discussion.controller.ts +55 -0
- package/src/course-lesson-discussion/course-lesson-discussion.mcp-tools.ts +75 -0
- package/src/course-lesson-discussion/course-lesson-discussion.module.ts +13 -0
- package/src/course-lesson-discussion/course-lesson-discussion.service.ts +354 -0
- package/src/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.ts +16 -0
- package/src/course-lesson-note/course-lesson-note.controller.ts +68 -0
- package/src/course-lesson-note/course-lesson-note.mcp-tools.ts +96 -0
- package/src/course-lesson-note/course-lesson-note.module.ts +13 -0
- package/src/course-lesson-note/course-lesson-note.service.ts +248 -0
- package/src/course-lesson-note/dto/create-course-lesson-note.dto.ts +16 -0
- package/src/course-lesson-note/dto/update-course-lesson-note.dto.ts +18 -0
- package/src/dashboard/dashboard.mcp-tools.ts +23 -0
- package/src/dashboard/dashboard.module.ts +2 -1
- package/src/enterprise/enterprise.mcp-tools.ts +403 -0
- package/src/enterprise/enterprise.module.ts +2 -1
- package/src/enterprise/training/enterprise-training.module.ts +11 -1
- package/src/enterprise/training/training-admin.mcp-tools.ts +479 -0
- package/src/enterprise/training/training-instructor.mcp-tools.ts +210 -0
- package/src/enterprise/training/training-student.controller.ts +17 -1
- package/src/enterprise/training/training-student.mcp-tools.ts +136 -0
- package/src/enterprise/training/training-student.service.ts +167 -1
- package/src/evaluation/evaluation.mcp-tools.ts +155 -0
- package/src/evaluation/evaluation.module.ts +2 -1
- package/src/exam/dto/create-exam-question.dto.ts +8 -0
- package/src/exam/dto/create-exam.dto.ts +8 -0
- package/src/exam/dto/create-question-subject.dto.ts +12 -0
- package/src/exam/exam-attempt.service.ts +46 -14
- package/src/exam/exam.controller.ts +19 -0
- package/src/exam/exam.mcp-tools.ts +337 -0
- package/src/exam/exam.module.ts +2 -1
- package/src/exam/exam.service.ts +121 -0
- package/src/index.ts +9 -0
- package/src/instructor/instructor.mcp-tools.ts +243 -0
- package/src/instructor/instructor.module.ts +2 -1
- package/src/lms.module.ts +15 -1
- package/src/realtime/lms-realtime.controller.ts +12 -0
- package/src/realtime/lms-realtime.module.ts +12 -0
- package/src/realtime/lms-realtime.service.ts +98 -0
- package/src/realtime/lms-realtime.subscriber.ts +61 -0
- package/src/reports/reports.mcp-tools.ts +27 -0
- package/src/reports/reports.module.ts +2 -1
- package/src/training/training.mcp-tools.ts +128 -0
- package/src/training/training.module.ts +2 -1
|
@@ -57,6 +57,7 @@ import {
|
|
|
57
57
|
type CourseCategoryOption,
|
|
58
58
|
type CourseSheetFormValues,
|
|
59
59
|
} from './course-form-sheet';
|
|
60
|
+
import { CoursePicker } from './course-picker';
|
|
60
61
|
|
|
61
62
|
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
62
63
|
|
|
@@ -104,14 +105,6 @@ export type ApiClass = {
|
|
|
104
105
|
sessionRecurrenceSummary?: SessionRecurrenceSummary | null;
|
|
105
106
|
};
|
|
106
107
|
|
|
107
|
-
type ApiCourseList = {
|
|
108
|
-
data: Array<{ id: number; title: string }>;
|
|
109
|
-
total?: number;
|
|
110
|
-
page?: number;
|
|
111
|
-
pageSize?: number;
|
|
112
|
-
lastPage?: number;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
108
|
type ApiCategoryList = {
|
|
116
109
|
data: ApiCategory[];
|
|
117
110
|
total: number;
|
|
@@ -131,6 +124,21 @@ type ApiCreatedCourse = {
|
|
|
131
124
|
title: string;
|
|
132
125
|
};
|
|
133
126
|
|
|
127
|
+
type ApiCourseDetail = {
|
|
128
|
+
id: number;
|
|
129
|
+
code?: string;
|
|
130
|
+
slug?: string;
|
|
131
|
+
title: string;
|
|
132
|
+
description?: string;
|
|
133
|
+
level?: 'beginner' | 'intermediate' | 'advanced';
|
|
134
|
+
status?: 'draft' | 'published' | 'archived';
|
|
135
|
+
categories?: string[];
|
|
136
|
+
primaryColor?: string | null;
|
|
137
|
+
secondaryColor?: string | null;
|
|
138
|
+
logoFileId?: number | null;
|
|
139
|
+
operationsProjectId?: number | null;
|
|
140
|
+
};
|
|
141
|
+
|
|
134
142
|
type InstructorOption = {
|
|
135
143
|
id: number;
|
|
136
144
|
name: string;
|
|
@@ -367,6 +375,18 @@ function toApiCourseStatus(status: CourseSheetFormValues['status']) {
|
|
|
367
375
|
return 'archived';
|
|
368
376
|
}
|
|
369
377
|
|
|
378
|
+
function toCourseFormLevel(level?: string): CourseSheetFormValues['nivel'] {
|
|
379
|
+
if (level === 'intermediate') return 'intermediario';
|
|
380
|
+
if (level === 'advanced') return 'avancado';
|
|
381
|
+
return 'iniciante';
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function toCourseFormStatus(status?: string): CourseSheetFormValues['status'] {
|
|
385
|
+
if (status === 'published') return 'ativo';
|
|
386
|
+
if (status === 'archived') return 'arquivado';
|
|
387
|
+
return 'rascunho';
|
|
388
|
+
}
|
|
389
|
+
|
|
370
390
|
// ── Constants ─────────────────────────────────────────────────────────────────
|
|
371
391
|
|
|
372
392
|
const TIME_OPTIONS = Array.from({ length: 32 }, (_, index) => {
|
|
@@ -558,6 +578,8 @@ export function ClassFormSheet({
|
|
|
558
578
|
null
|
|
559
579
|
);
|
|
560
580
|
const [courseSheetOpen, setCourseSheetOpen] = useState(false);
|
|
581
|
+
const [editingCourseId, setEditingCourseId] = useState<number | null>(null);
|
|
582
|
+
const [coursePickerRefreshToken, setCoursePickerRefreshToken] = useState(0);
|
|
561
583
|
const [customRecurrenceDialogOpen, setCustomRecurrenceDialogOpen] =
|
|
562
584
|
useState(false);
|
|
563
585
|
const [previousRecurrenceMode, setPreviousRecurrenceMode] =
|
|
@@ -1024,32 +1046,71 @@ export function ClassFormSheet({
|
|
|
1024
1046
|
description: data.descricao,
|
|
1025
1047
|
level: toApiCourseLevel(data.nivel),
|
|
1026
1048
|
status: toApiCourseStatus(data.status),
|
|
1049
|
+
offeringType: 'scheduled' as const,
|
|
1027
1050
|
categorySlugs: data.categorias,
|
|
1028
1051
|
primaryColor: data.primaryColor,
|
|
1029
1052
|
primaryContrastColor: getContrastColor(data.primaryColor),
|
|
1030
1053
|
secondaryColor: data.secondaryColor,
|
|
1031
1054
|
secondaryContrastColor: getContrastColor(data.secondaryColor),
|
|
1055
|
+
operationsProjectId: data.operationsProjectId
|
|
1056
|
+
? Number(data.operationsProjectId)
|
|
1057
|
+
: null,
|
|
1032
1058
|
};
|
|
1033
1059
|
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1060
|
+
if (editingCourseId) {
|
|
1061
|
+
await request({
|
|
1062
|
+
url: `/lms/courses/${editingCourseId}`,
|
|
1063
|
+
method: 'PATCH',
|
|
1064
|
+
data: {
|
|
1065
|
+
slug: data.nomeInterno.trim().toLowerCase(),
|
|
1066
|
+
title: data.tituloComercial,
|
|
1067
|
+
description: data.descricao,
|
|
1068
|
+
level: toApiCourseLevel(data.nivel),
|
|
1069
|
+
status: toApiCourseStatus(data.status),
|
|
1070
|
+
categorySlugs: data.categorias,
|
|
1071
|
+
primaryColor: data.primaryColor,
|
|
1072
|
+
primaryContrastColor: getContrastColor(data.primaryColor),
|
|
1073
|
+
secondaryColor: data.secondaryColor,
|
|
1074
|
+
secondaryContrastColor: getContrastColor(data.secondaryColor),
|
|
1075
|
+
operationsProjectId: data.operationsProjectId
|
|
1076
|
+
? Number(data.operationsProjectId)
|
|
1077
|
+
: null,
|
|
1078
|
+
logoFileId: data.logoFileId ?? null,
|
|
1079
|
+
},
|
|
1080
|
+
});
|
|
1039
1081
|
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1082
|
+
form.setValue('curso', data.tituloComercial, {
|
|
1083
|
+
shouldDirty: true,
|
|
1084
|
+
shouldTouch: true,
|
|
1085
|
+
shouldValidate: false,
|
|
1086
|
+
});
|
|
1087
|
+
|
|
1088
|
+
toast.success(courseSheetT('toasts.courseUpdated'));
|
|
1089
|
+
} else {
|
|
1090
|
+
const response = await request<ApiCreatedCourse>({
|
|
1091
|
+
url: '/lms/courses',
|
|
1092
|
+
method: 'POST',
|
|
1093
|
+
data: payload,
|
|
1094
|
+
});
|
|
1095
|
+
|
|
1096
|
+
const createdCourse = response.data;
|
|
1097
|
+
form.setValue('courseId', createdCourse.id, {
|
|
1098
|
+
shouldDirty: true,
|
|
1099
|
+
shouldTouch: true,
|
|
1100
|
+
shouldValidate: true,
|
|
1101
|
+
});
|
|
1102
|
+
form.setValue('curso', createdCourse.title, {
|
|
1103
|
+
shouldDirty: true,
|
|
1104
|
+
shouldTouch: true,
|
|
1105
|
+
shouldValidate: false,
|
|
1106
|
+
});
|
|
1107
|
+
|
|
1108
|
+
toast.success(courseSheetT('toasts.courseCreated'));
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
setCoursePickerRefreshToken((current) => current + 1);
|
|
1112
|
+
setEditingCourseId(null);
|
|
1051
1113
|
setCourseSheetOpen(false);
|
|
1052
|
-
toast.success(courseSheetT('toasts.courseCreated'));
|
|
1053
1114
|
} catch {
|
|
1054
1115
|
toast.error(t('messages.classCreateCourseError'));
|
|
1055
1116
|
} finally {
|
|
@@ -1183,81 +1244,80 @@ export function ClassFormSheet({
|
|
|
1183
1244
|
{t('form.fields.course.label')}{' '}
|
|
1184
1245
|
<span className="text-destructive">*</span>
|
|
1185
1246
|
</FieldLabel>
|
|
1186
|
-
<
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
</div>
|
|
1247
|
+
<CoursePicker<TurmaForm>
|
|
1248
|
+
form={form}
|
|
1249
|
+
name="courseId"
|
|
1250
|
+
selectedCourseTitle={selectedCourseTitle}
|
|
1251
|
+
placeholder={t('form.fields.course.placeholder')}
|
|
1252
|
+
entityLabel={t('form.fields.course.label')}
|
|
1253
|
+
searchPlaceholder={t('form.fields.course.placeholder')}
|
|
1254
|
+
emptyStateDescription={t(
|
|
1255
|
+
'components.entityPicker.courses.empty'
|
|
1256
|
+
)}
|
|
1257
|
+
loadingLabel={t('components.entityPicker.courses.loading')}
|
|
1258
|
+
noResultsLabel={t('components.entityPicker.courses.empty')}
|
|
1259
|
+
disabled={lockCourse}
|
|
1260
|
+
allowClearSelection={!lockCourse}
|
|
1261
|
+
showCreateButton={!lockCourse}
|
|
1262
|
+
showEditButton={!lockCourse}
|
|
1263
|
+
searchEndpoint="/lms/courses"
|
|
1264
|
+
searchExtraParams={{
|
|
1265
|
+
offeringTypes: 'scheduled,blended,on_demand',
|
|
1266
|
+
}}
|
|
1267
|
+
refreshToken={coursePickerRefreshToken}
|
|
1268
|
+
isOptionDisabled={(option) =>
|
|
1269
|
+
option.offeringType === 'on_demand'
|
|
1270
|
+
}
|
|
1271
|
+
onSelectionChange={(value, option) => {
|
|
1272
|
+
const cId = typeof value === 'number' ? value : undefined;
|
|
1273
|
+
const cTitle =
|
|
1274
|
+
option && typeof option.title === 'string'
|
|
1275
|
+
? option.title
|
|
1276
|
+
: '';
|
|
1277
|
+
|
|
1278
|
+
form.setValue('courseId', cId, {
|
|
1279
|
+
shouldDirty: true,
|
|
1280
|
+
shouldTouch: true,
|
|
1281
|
+
shouldValidate: true,
|
|
1282
|
+
});
|
|
1283
|
+
form.setValue('curso', cTitle, {
|
|
1284
|
+
shouldDirty: true,
|
|
1285
|
+
shouldTouch: true,
|
|
1286
|
+
shouldValidate: false,
|
|
1287
|
+
});
|
|
1288
|
+
}}
|
|
1289
|
+
onCreateClick={() => {
|
|
1290
|
+
setEditingCourseId(null);
|
|
1291
|
+
courseForm.reset(DEFAULT_COURSE_FORM_VALUES);
|
|
1292
|
+
setCourseSheetOpen(true);
|
|
1293
|
+
}}
|
|
1294
|
+
onEditClick={async (selected) => {
|
|
1295
|
+
if (!selected?.id) return;
|
|
1296
|
+
|
|
1297
|
+
const response = await request<ApiCourseDetail>({
|
|
1298
|
+
url: `/lms/courses/${selected.id}`,
|
|
1299
|
+
method: 'GET',
|
|
1300
|
+
});
|
|
1301
|
+
|
|
1302
|
+
const detail = response.data;
|
|
1303
|
+
setEditingCourseId(detail.id);
|
|
1304
|
+
courseForm.reset({
|
|
1305
|
+
nomeInterno: detail.slug ?? detail.code ?? '',
|
|
1306
|
+
tituloComercial: detail.title ?? '',
|
|
1307
|
+
descricao: detail.description ?? '',
|
|
1308
|
+
nivel: toCourseFormLevel(detail.level),
|
|
1309
|
+
status: toCourseFormStatus(detail.status),
|
|
1310
|
+
categorias: detail.categories ?? [],
|
|
1311
|
+
operationsProjectId: detail.operationsProjectId
|
|
1312
|
+
? String(detail.operationsProjectId)
|
|
1313
|
+
: '',
|
|
1314
|
+
primaryColor: detail.primaryColor ?? '#1D4ED8',
|
|
1315
|
+
secondaryColor: detail.secondaryColor ?? '#111827',
|
|
1316
|
+
logoFileId: detail.logoFileId ?? null,
|
|
1317
|
+
});
|
|
1318
|
+
setCourseSheetOpen(true);
|
|
1319
|
+
}}
|
|
1320
|
+
/>
|
|
1261
1321
|
</Field>
|
|
1262
1322
|
</div>
|
|
1263
1323
|
|
|
@@ -2063,10 +2123,15 @@ export function ClassFormSheet({
|
|
|
2063
2123
|
|
|
2064
2124
|
{/* Course create sheet */}
|
|
2065
2125
|
<CourseFormSheet
|
|
2066
|
-
key=
|
|
2126
|
+
key={`class-form-sheet-course-${editingCourseId ?? 'create'}`}
|
|
2067
2127
|
open={courseSheetOpen}
|
|
2068
|
-
onOpenChange={
|
|
2069
|
-
|
|
2128
|
+
onOpenChange={(nextOpen) => {
|
|
2129
|
+
setCourseSheetOpen(nextOpen);
|
|
2130
|
+
if (!nextOpen) {
|
|
2131
|
+
setEditingCourseId(null);
|
|
2132
|
+
}
|
|
2133
|
+
}}
|
|
2134
|
+
editing={Boolean(editingCourseId)}
|
|
2070
2135
|
saving={savingCourse}
|
|
2071
2136
|
form={courseForm}
|
|
2072
2137
|
onSubmit={onSubmitCourse}
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
FieldError,
|
|
16
16
|
FieldLabel,
|
|
17
17
|
} from '@/components/ui/field';
|
|
18
|
+
import { EntityPicker } from '@/components/ui/entity-picker';
|
|
18
19
|
import { Input } from '@/components/ui/input';
|
|
19
20
|
import {
|
|
20
21
|
Popover,
|
|
@@ -37,7 +38,7 @@ import {
|
|
|
37
38
|
SheetTitle,
|
|
38
39
|
} from '@/components/ui/sheet';
|
|
39
40
|
import { Textarea } from '@/components/ui/textarea';
|
|
40
|
-
import { useApp } from '@hed-hog/next-app-provider';
|
|
41
|
+
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
41
42
|
import {
|
|
42
43
|
ChevronsUpDown,
|
|
43
44
|
ImageIcon,
|
|
@@ -55,6 +56,15 @@ export type CourseCategoryOption = {
|
|
|
55
56
|
label: string;
|
|
56
57
|
};
|
|
57
58
|
|
|
59
|
+
type OperationsProjectOption = {
|
|
60
|
+
id: number;
|
|
61
|
+
code?: string | null;
|
|
62
|
+
name: string;
|
|
63
|
+
label?: string;
|
|
64
|
+
clientName?: string | null;
|
|
65
|
+
status?: string | null;
|
|
66
|
+
};
|
|
67
|
+
|
|
58
68
|
// ---------------------------------------------------------------------------
|
|
59
69
|
// Color extraction utilities
|
|
60
70
|
// ---------------------------------------------------------------------------
|
|
@@ -222,6 +232,7 @@ export function getCourseSheetSchema(t: (key: string) => string) {
|
|
|
222
232
|
nivel: z.enum(['iniciante', 'intermediario', 'avancado']).optional(),
|
|
223
233
|
status: z.enum(['ativo', 'rascunho', 'arquivado']).optional(),
|
|
224
234
|
categorias: z.array(z.string()).optional(),
|
|
235
|
+
operationsProjectId: z.string().optional(),
|
|
225
236
|
primaryColor: z.string().optional(),
|
|
226
237
|
secondaryColor: z.string().optional(),
|
|
227
238
|
logoFileId: z.number().nullable().optional(),
|
|
@@ -236,6 +247,7 @@ export type CourseSheetFormValues = {
|
|
|
236
247
|
nivel: 'iniciante' | 'intermediario' | 'avancado';
|
|
237
248
|
status: 'ativo' | 'rascunho' | 'arquivado';
|
|
238
249
|
categorias: string[];
|
|
250
|
+
operationsProjectId: string;
|
|
239
251
|
primaryColor: string;
|
|
240
252
|
secondaryColor: string;
|
|
241
253
|
logoFileId?: number | null;
|
|
@@ -249,6 +261,7 @@ export const DEFAULT_COURSE_FORM_VALUES: CourseSheetFormValues = {
|
|
|
249
261
|
nivel: 'iniciante',
|
|
250
262
|
status: 'rascunho',
|
|
251
263
|
categorias: [],
|
|
264
|
+
operationsProjectId: '',
|
|
252
265
|
primaryColor: '#1D4ED8',
|
|
253
266
|
secondaryColor: '#111827',
|
|
254
267
|
logoFileId: null,
|
|
@@ -312,6 +325,36 @@ export function CourseFormSheet({
|
|
|
312
325
|
const [colorExtracting, setColorExtracting] = useState(false);
|
|
313
326
|
const logoInputRef = useRef<HTMLInputElement>(null);
|
|
314
327
|
const colorExtractionRef = useRef<{ cancelled: boolean } | null>(null);
|
|
328
|
+
const { data: operationsProjectsData } = useQuery<
|
|
329
|
+
{ data: OperationsProjectOption[] } | OperationsProjectOption[]
|
|
330
|
+
>({
|
|
331
|
+
queryKey: ['lms-course-form-operations-projects'],
|
|
332
|
+
enabled: open,
|
|
333
|
+
queryFn: async () => {
|
|
334
|
+
try {
|
|
335
|
+
const response = await request<
|
|
336
|
+
{ data: OperationsProjectOption[] } | OperationsProjectOption[]
|
|
337
|
+
>({
|
|
338
|
+
url: '/operations/projects/options?pageSize=200&sortField=name&sortOrder=asc',
|
|
339
|
+
method: 'GET',
|
|
340
|
+
});
|
|
341
|
+
return response.data;
|
|
342
|
+
} catch {
|
|
343
|
+
return { data: [] };
|
|
344
|
+
}
|
|
345
|
+
},
|
|
346
|
+
initialData: { data: [] },
|
|
347
|
+
});
|
|
348
|
+
const operationsProjectOptions = (
|
|
349
|
+
Array.isArray(operationsProjectsData)
|
|
350
|
+
? operationsProjectsData
|
|
351
|
+
: (operationsProjectsData?.data ?? [])
|
|
352
|
+
).map((project) => ({
|
|
353
|
+
value: String(project.id),
|
|
354
|
+
label: project.name,
|
|
355
|
+
description: project.code ?? project.clientName ?? null,
|
|
356
|
+
meta: project.status ?? null,
|
|
357
|
+
}));
|
|
315
358
|
|
|
316
359
|
useEffect(() => {
|
|
317
360
|
if (!initialLogoFileId) {
|
|
@@ -538,6 +581,42 @@ export function CourseFormSheet({
|
|
|
538
581
|
<FieldError>{form.formState.errors.descricao?.message}</FieldError>
|
|
539
582
|
</Field>
|
|
540
583
|
|
|
584
|
+
<Field>
|
|
585
|
+
<FieldLabel>Projeto vinculado</FieldLabel>
|
|
586
|
+
<Controller
|
|
587
|
+
name="operationsProjectId"
|
|
588
|
+
control={form.control}
|
|
589
|
+
render={({ field }) => (
|
|
590
|
+
<EntityPicker<{
|
|
591
|
+
value: string;
|
|
592
|
+
label: string;
|
|
593
|
+
description?: string | null;
|
|
594
|
+
meta?: string | null;
|
|
595
|
+
}>
|
|
596
|
+
value={field.value}
|
|
597
|
+
onChange={(value) => field.onChange(String(value ?? ''))}
|
|
598
|
+
options={operationsProjectOptions}
|
|
599
|
+
placeholder="Selecione um projeto do Operations"
|
|
600
|
+
searchPlaceholder="Buscar projeto..."
|
|
601
|
+
entityLabel="projeto"
|
|
602
|
+
emptyStateDescription="Nenhum projeto disponível"
|
|
603
|
+
getOptionValue={(option) => option.value}
|
|
604
|
+
getOptionLabel={(option) => option.label}
|
|
605
|
+
getOptionDescription={(option) =>
|
|
606
|
+
option.description || option.meta || undefined
|
|
607
|
+
}
|
|
608
|
+
/>
|
|
609
|
+
)}
|
|
610
|
+
/>
|
|
611
|
+
<FieldDescription>
|
|
612
|
+
Quando o curso estiver vinculado a um projeto, cada nova aula gera
|
|
613
|
+
uma tarefa automaticamente.
|
|
614
|
+
</FieldDescription>
|
|
615
|
+
<FieldError>
|
|
616
|
+
{form.formState.errors.operationsProjectId?.message}
|
|
617
|
+
</FieldError>
|
|
618
|
+
</Field>
|
|
619
|
+
|
|
541
620
|
<div className="grid grid-cols-2 gap-4">
|
|
542
621
|
<Field>
|
|
543
622
|
<FieldLabel>{t('form.fields.level.label')}</FieldLabel>
|