@hed-hog/lms 0.0.305 → 0.0.309
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/course/course-structure.controller.d.ts +60 -0
- package/dist/course/course-structure.controller.d.ts.map +1 -1
- package/dist/course/course-structure.controller.js +79 -0
- package/dist/course/course-structure.controller.js.map +1 -1
- package/dist/course/course-structure.service.d.ts +61 -1
- package/dist/course/course-structure.service.d.ts.map +1 -1
- package/dist/course/course-structure.service.js +326 -1
- package/dist/course/course-structure.service.js.map +1 -1
- package/dist/course/course.controller.d.ts +52 -4
- package/dist/course/course.controller.d.ts.map +1 -1
- package/dist/course/course.service.d.ts +52 -5
- package/dist/course/course.service.d.ts.map +1 -1
- package/dist/course/course.service.js +81 -60
- package/dist/course/course.service.js.map +1 -1
- package/dist/course/dto/create-course-structure-lesson.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course-structure-lesson.dto.js +5 -1
- package/dist/course/dto/create-course-structure-lesson.dto.js.map +1 -1
- package/dist/course/dto/create-course.dto.d.ts +1 -1
- package/dist/course/dto/create-course.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course.dto.js +4 -1
- package/dist/course/dto/create-course.dto.js.map +1 -1
- package/dist/course/dto/move-lesson.dto.d.ts +10 -0
- package/dist/course/dto/move-lesson.dto.d.ts.map +1 -0
- package/dist/{enterprise/dto/add-enterprise-lead.dto.js → course/dto/move-lesson.dto.js} +12 -6
- package/dist/course/dto/move-lesson.dto.js.map +1 -0
- package/dist/course/dto/paste-lessons.dto.d.ts +4 -0
- package/dist/course/dto/paste-lessons.dto.d.ts.map +1 -0
- package/dist/course/dto/paste-lessons.dto.js +24 -0
- package/dist/course/dto/paste-lessons.dto.js.map +1 -0
- package/dist/course/dto/reorder-lessons.dto.d.ts +5 -0
- package/dist/course/dto/reorder-lessons.dto.d.ts.map +1 -0
- package/dist/course/dto/reorder-lessons.dto.js +24 -0
- package/dist/course/dto/reorder-lessons.dto.js.map +1 -0
- package/dist/course/dto/reorder-sessions.dto.d.ts +5 -0
- package/dist/course/dto/reorder-sessions.dto.d.ts.map +1 -0
- package/dist/course/dto/reorder-sessions.dto.js +24 -0
- package/dist/course/dto/reorder-sessions.dto.js.map +1 -0
- package/dist/training/training.controller.js +1 -1
- package/dist/training/training.controller.js.map +1 -1
- package/hedhog/data/dashboard_component.yaml +152 -152
- package/hedhog/data/dashboard_item.yaml +166 -166
- package/hedhog/data/image_type.yaml +20 -0
- package/hedhog/data/menu.yaml +2 -2
- package/hedhog/data/route.yaml +60 -6
- package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +146 -165
- package/hedhog/frontend/app/_components/course-avatar.tsx.ejs +70 -0
- package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +372 -22
- package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +437 -77
- package/hedhog/frontend/app/classes/page.tsx.ejs +311 -289
- package/hedhog/frontend/app/courses/[id]/_components/CourseCertificateCard.tsx.ejs +10 -7
- package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +23 -32
- package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +3 -9
- package/hedhog/frontend/app/courses/[id]/_components/CourseDangerZoneCard.tsx.ejs +26 -16
- package/hedhog/frontend/app/courses/[id]/_components/CourseFlagsCard.tsx.ejs +19 -5
- package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +10 -14
- package/hedhog/frontend/app/courses/[id]/_components/CourseMediaCard.tsx.ejs +131 -107
- package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +10 -7
- package/hedhog/frontend/app/courses/[id]/_components/CourseSectionCard.tsx.ejs +38 -19
- package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +1 -1
- package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +1 -1
- package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +336 -1057
- package/hedhog/frontend/app/courses/[id]/structure/_components/confirm-dialog.tsx.ejs +45 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +362 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-panel.tsx.ejs +111 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-skeleton.tsx.ejs +64 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree.tsx.ejs +134 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-course.tsx.ejs +113 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-lesson.tsx.ejs +314 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-panel.tsx.ejs +62 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-session.tsx.ejs +174 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/drag-handle.tsx.ejs +58 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/drag-overlay.tsx.ejs +52 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-bulk.tsx.ejs +276 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +1216 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +1827 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-session.tsx.ejs +443 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/highlighted-text.tsx.ejs +41 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +184 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/multi-select-bar.tsx.ejs +264 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/search-filter.tsx.ejs +96 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/session-picker-dialog.tsx.ejs +74 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +136 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/sortable-tree-row.tsx.ejs +80 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/store.ts.ejs +948 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +525 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-display-settings-popover.tsx.ejs +150 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-helpers.ts.ejs +182 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-course.tsx.ejs +52 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-lesson.tsx.ejs +271 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-session.tsx.ejs +167 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row.tsx.ejs +108 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +122 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/use-course-structure-shortcuts.ts.ejs +318 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/use-tree-display-settings.ts.ejs +97 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +347 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/course-structure-contract.ts.ejs +195 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +420 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +254 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +987 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-query.ts.ejs +86 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure.ts.ejs +160 -0
- package/hedhog/frontend/app/courses/[id]/structure/page.tsx.ejs +10 -3212
- package/hedhog/frontend/app/courses/page.tsx.ejs +45 -26
- package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +317 -317
- package/hedhog/frontend/app/enterprise/_components/enterprise-class-create-sheet.tsx.ejs +1 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-mocks.ts.ejs +12 -1
- package/hedhog/frontend/app/enterprise/_components/enterprise-related-tab.tsx.ejs +44 -7
- package/hedhog/frontend/app/enterprise/_components/enterprise-types.ts.ejs +96 -96
- package/hedhog/frontend/app/page.tsx.ejs +5 -5
- package/hedhog/frontend/app/{training → paths}/page.tsx.ejs +29 -7
- package/hedhog/frontend/messages/en.json +88 -10
- package/hedhog/frontend/messages/pt.json +88 -10
- package/hedhog/table/course.yaml +16 -16
- package/hedhog/table/image_type.yaml +14 -0
- package/package.json +6 -6
- package/src/class-group/class-group.service.ts +413 -413
- package/src/class-group/dto/create-class-group.dto.ts +77 -77
- package/src/course/course-structure.controller.ts +63 -0
- package/src/course/course-structure.service.ts +390 -3
- package/src/course/course.service.ts +214 -182
- package/src/course/dto/create-course-structure-lesson.dto.ts +3 -2
- package/src/course/dto/create-course.dto.ts +19 -16
- package/src/course/dto/move-lesson.dto.ts +17 -0
- package/src/course/dto/paste-lessons.dto.ts +9 -0
- package/src/course/dto/reorder-lessons.dto.ts +10 -0
- package/src/course/dto/reorder-sessions.dto.ts +10 -0
- package/src/training/training.controller.ts +1 -1
- package/dist/enterprise/dto/add-enterprise-lead.dto.d.ts +0 -4
- package/dist/enterprise/dto/add-enterprise-lead.dto.d.ts.map +0 -1
- package/dist/enterprise/dto/add-enterprise-lead.dto.js.map +0 -1
|
@@ -62,6 +62,7 @@ import { useRouter } from 'next/navigation';
|
|
|
62
62
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
63
63
|
import { useForm, useWatch } from 'react-hook-form';
|
|
64
64
|
import { toast } from 'sonner';
|
|
65
|
+
import { CourseAvatar } from '../_components/course-avatar';
|
|
65
66
|
import {
|
|
66
67
|
CourseCategoryOption,
|
|
67
68
|
CourseFormSheet,
|
|
@@ -76,7 +77,7 @@ const API_COURSES_CACHE_KEY = 'lms:courses:api-cache';
|
|
|
76
77
|
|
|
77
78
|
interface Curso {
|
|
78
79
|
id: number;
|
|
79
|
-
|
|
80
|
+
slug: string;
|
|
80
81
|
nomeInterno: string;
|
|
81
82
|
tituloComercial: string;
|
|
82
83
|
descricao: string;
|
|
@@ -90,11 +91,12 @@ interface Curso {
|
|
|
90
91
|
listado: boolean;
|
|
91
92
|
alunosInscritos: number;
|
|
92
93
|
criadoEm: string;
|
|
94
|
+
logoFileId?: number | null;
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
type ApiCourse = {
|
|
96
98
|
id: number;
|
|
97
|
-
|
|
99
|
+
name: string;
|
|
98
100
|
slug: string;
|
|
99
101
|
title: string;
|
|
100
102
|
description: string;
|
|
@@ -110,6 +112,7 @@ type ApiCourse = {
|
|
|
110
112
|
isListed: boolean;
|
|
111
113
|
enrollmentCount: number;
|
|
112
114
|
createdAt: string;
|
|
115
|
+
logoFileId?: number | null;
|
|
113
116
|
};
|
|
114
117
|
|
|
115
118
|
type ApiCourseList = {
|
|
@@ -199,8 +202,8 @@ function toPtStatus(status?: string | null): CourseSheetFormValues['status'] {
|
|
|
199
202
|
function mapApiCourse(course: ApiCourse): Curso {
|
|
200
203
|
return {
|
|
201
204
|
id: course.id,
|
|
202
|
-
|
|
203
|
-
nomeInterno: course.
|
|
205
|
+
slug: course.slug,
|
|
206
|
+
nomeInterno: course.name ?? '',
|
|
204
207
|
tituloComercial: course.title,
|
|
205
208
|
descricao: course.description ?? '',
|
|
206
209
|
primaryColor: course.primaryColor ?? null,
|
|
@@ -213,6 +216,7 @@ function mapApiCourse(course: ApiCourse): Curso {
|
|
|
213
216
|
listado: course.isListed,
|
|
214
217
|
alunosInscritos: course.enrollmentCount ?? 0,
|
|
215
218
|
criadoEm: course.createdAt ?? '',
|
|
219
|
+
logoFileId: course.logoFileId ?? null,
|
|
216
220
|
};
|
|
217
221
|
}
|
|
218
222
|
|
|
@@ -592,6 +596,7 @@ export default function CursosPage() {
|
|
|
592
596
|
setEditingCurso(curso);
|
|
593
597
|
form.reset({
|
|
594
598
|
nomeInterno: curso.nomeInterno,
|
|
599
|
+
slug: curso.slug,
|
|
595
600
|
tituloComercial: curso.tituloComercial,
|
|
596
601
|
descricao: curso.descricao,
|
|
597
602
|
primaryColor: curso.primaryColor || '#1D4ED8',
|
|
@@ -599,6 +604,7 @@ export default function CursosPage() {
|
|
|
599
604
|
nivel: curso.nivel,
|
|
600
605
|
status: curso.status,
|
|
601
606
|
categorias: curso.categorias,
|
|
607
|
+
logoFileId: curso.logoFileId ?? null,
|
|
602
608
|
});
|
|
603
609
|
setSheetOpen(true);
|
|
604
610
|
}
|
|
@@ -607,7 +613,8 @@ export default function CursosPage() {
|
|
|
607
613
|
setSaving(true);
|
|
608
614
|
try {
|
|
609
615
|
const payload = {
|
|
610
|
-
|
|
616
|
+
name: data.nomeInterno.trim(),
|
|
617
|
+
slug: data.slug.trim().toLowerCase(),
|
|
611
618
|
title: data.tituloComercial,
|
|
612
619
|
description: data.descricao,
|
|
613
620
|
level: toApiLevel(data.nivel),
|
|
@@ -617,6 +624,7 @@ export default function CursosPage() {
|
|
|
617
624
|
primaryContrastColor: getContrastColor(data.primaryColor),
|
|
618
625
|
secondaryColor: data.secondaryColor,
|
|
619
626
|
secondaryContrastColor: getContrastColor(data.secondaryColor),
|
|
627
|
+
logoFileId: data.logoFileId ?? null,
|
|
620
628
|
};
|
|
621
629
|
|
|
622
630
|
if (editingCurso) {
|
|
@@ -1071,13 +1079,16 @@ export default function CursosPage() {
|
|
|
1071
1079
|
|
|
1072
1080
|
<CardContent className="flex h-full flex-col p-4">
|
|
1073
1081
|
<div className="mb-3 flex items-start gap-3">
|
|
1074
|
-
<
|
|
1075
|
-
|
|
1076
|
-
|
|
1082
|
+
<CourseAvatar
|
|
1083
|
+
fileId={curso.logoFileId}
|
|
1084
|
+
title={curso.nomeInterno}
|
|
1085
|
+
className="size-12 rounded-xl"
|
|
1086
|
+
iconSize="size-6"
|
|
1087
|
+
/>
|
|
1077
1088
|
<div className="min-w-0 flex-1">
|
|
1078
1089
|
<div className="mb-1.5 flex items-start justify-between gap-2">
|
|
1079
1090
|
<h3 className="line-clamp-2 font-semibold leading-snug text-foreground">
|
|
1080
|
-
{curso.
|
|
1091
|
+
{curso.nomeInterno}
|
|
1081
1092
|
</h3>
|
|
1082
1093
|
<DropdownMenu>
|
|
1083
1094
|
<DropdownMenuTrigger asChild>
|
|
@@ -1123,12 +1134,12 @@ export default function CursosPage() {
|
|
|
1123
1134
|
</div>
|
|
1124
1135
|
<p className="text-xs text-muted-foreground">
|
|
1125
1136
|
<code className="rounded bg-muted px-1.5 py-0.5 font-mono text-[10px]">
|
|
1126
|
-
{curso.
|
|
1137
|
+
{curso.slug}
|
|
1127
1138
|
</code>
|
|
1128
1139
|
<span className="mx-1.5 text-muted-foreground/50">
|
|
1129
1140
|
|
|
|
1130
1141
|
</span>
|
|
1131
|
-
<span>{curso.
|
|
1142
|
+
<span>{curso.tituloComercial}</span>
|
|
1132
1143
|
</p>
|
|
1133
1144
|
</div>
|
|
1134
1145
|
</div>
|
|
@@ -1236,25 +1247,33 @@ export default function CursosPage() {
|
|
|
1236
1247
|
onCheckedChange={() => {}}
|
|
1237
1248
|
onClick={(e) => toggleSelect(curso.id, e)}
|
|
1238
1249
|
aria-label={t('table.selectCourse', {
|
|
1239
|
-
title: curso.
|
|
1250
|
+
title: curso.nomeInterno,
|
|
1240
1251
|
})}
|
|
1241
1252
|
className="border-2 bg-background shadow-sm"
|
|
1242
1253
|
/>
|
|
1243
1254
|
</TableCell>
|
|
1244
1255
|
<TableCell>
|
|
1245
|
-
<div className="min-w-0">
|
|
1246
|
-
<
|
|
1247
|
-
{curso.
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
<
|
|
1254
|
-
|
|
1255
|
-
</
|
|
1256
|
-
<
|
|
1257
|
-
|
|
1256
|
+
<div className="flex min-w-0 items-center gap-3">
|
|
1257
|
+
<CourseAvatar
|
|
1258
|
+
fileId={curso.logoFileId}
|
|
1259
|
+
title={curso.nomeInterno}
|
|
1260
|
+
className="size-8 shrink-0 rounded-lg"
|
|
1261
|
+
iconSize="size-4"
|
|
1262
|
+
/>
|
|
1263
|
+
<div className="min-w-0">
|
|
1264
|
+
<p className="truncate font-semibold text-foreground">
|
|
1265
|
+
{curso.nomeInterno}
|
|
1266
|
+
</p>
|
|
1267
|
+
<p className="mt-1 truncate text-xs text-muted-foreground">
|
|
1268
|
+
<code className="rounded bg-muted px-1.5 py-0.5 font-mono text-[10px]">
|
|
1269
|
+
{curso.slug}
|
|
1270
|
+
</code>
|
|
1271
|
+
<span className="mx-1.5 text-muted-foreground/50">
|
|
1272
|
+
|
|
|
1273
|
+
</span>
|
|
1274
|
+
<span>{curso.tituloComercial}</span>
|
|
1275
|
+
</p>
|
|
1276
|
+
</div>
|
|
1258
1277
|
</div>
|
|
1259
1278
|
</TableCell>
|
|
1260
1279
|
<TableCell>
|
|
@@ -1383,8 +1402,8 @@ export default function CursosPage() {
|
|
|
1383
1402
|
form={form}
|
|
1384
1403
|
onSubmit={onSubmit}
|
|
1385
1404
|
categories={categoryOptions}
|
|
1386
|
-
courseCode={editingCurso?.codigo}
|
|
1387
1405
|
onCreateCategory={() => router.push('/category?new=1')}
|
|
1406
|
+
initialLogoFileId={editingCurso?.logoFileId ?? null}
|
|
1388
1407
|
t={t}
|
|
1389
1408
|
/>
|
|
1390
1409
|
|