@beanchain/handbook-lms 0.1.0
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/CHANGELOG.md +26 -0
- package/README.md +149 -0
- package/dist/adapter/index.cjs +4 -0
- package/dist/adapter/index.cjs.map +1 -0
- package/dist/adapter/index.d.cts +1 -0
- package/dist/adapter/index.d.ts +1 -0
- package/dist/adapter/index.js +3 -0
- package/dist/adapter/index.js.map +1 -0
- package/dist/chunk-6Z77HGDR.js +2384 -0
- package/dist/chunk-6Z77HGDR.js.map +1 -0
- package/dist/chunk-GZIXEHPW.js +268 -0
- package/dist/chunk-GZIXEHPW.js.map +1 -0
- package/dist/chunk-HOQRIQ33.js +3 -0
- package/dist/chunk-HOQRIQ33.js.map +1 -0
- package/dist/chunk-N4WYUTCR.js +264 -0
- package/dist/chunk-N4WYUTCR.js.map +1 -0
- package/dist/chunk-PYWAXMRT.js +6 -0
- package/dist/chunk-PYWAXMRT.js.map +1 -0
- package/dist/chunk-UVF7B4L2.js +73 -0
- package/dist/chunk-UVF7B4L2.js.map +1 -0
- package/dist/chunk-VRHNGFUG.js +90 -0
- package/dist/chunk-VRHNGFUG.js.map +1 -0
- package/dist/config/index.cjs +8 -0
- package/dist/config/index.cjs.map +1 -0
- package/dist/config/index.d.cts +52 -0
- package/dist/config/index.d.ts +52 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/contracts/index.cjs +307 -0
- package/dist/contracts/index.cjs.map +1 -0
- package/dist/contracts/index.d.cts +3034 -0
- package/dist/contracts/index.d.ts +3034 -0
- package/dist/contracts/index.js +3 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/core/index.cjs +107 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +293 -0
- package/dist/core/index.d.ts +293 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index-caUTkZqX.d.cts +321 -0
- package/dist/index-caUTkZqX.d.ts +321 -0
- package/dist/index.cjs +3129 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +77 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +18 -0
- package/dist/react/index.d.ts +18 -0
- package/dist/react/index.js +3 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react-headless/index.cjs +268 -0
- package/dist/react-headless/index.cjs.map +1 -0
- package/dist/react-headless/index.d.cts +181 -0
- package/dist/react-headless/index.d.ts +181 -0
- package/dist/react-headless/index.js +3 -0
- package/dist/react-headless/index.js.map +1 -0
- package/dist/react-mui/index.cjs +2653 -0
- package/dist/react-mui/index.cjs.map +1 -0
- package/dist/react-mui/index.d.cts +53 -0
- package/dist/react-mui/index.d.ts +53 -0
- package/dist/react-mui/index.js +4 -0
- package/dist/react-mui/index.js.map +1 -0
- package/package.json +85 -0
- package/sql/README.md +80 -0
- package/sql/blueprint.sql +7 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/contracts/endpoints.ts
|
|
4
|
+
var handbookLmsRoutes = {
|
|
5
|
+
courses: "/api/lms-courses",
|
|
6
|
+
courseCurriculum: (slug) => `/api/lms-courses/${slug}/curriculum`,
|
|
7
|
+
courseProgress: (slug) => `/api/lms-courses/${slug}/progress`,
|
|
8
|
+
questionProgress: (slug, moduleId, questionId) => `/api/lms-courses/${slug}/progress/modules/${moduleId}/questions/${questionId}`,
|
|
9
|
+
submitModule: (slug, moduleId) => `/api/lms-courses/${slug}/progress/modules/${moduleId}/submit`,
|
|
10
|
+
reviewModule: (slug, moduleId) => `/api/lms-courses/${slug}/progress/modules/${moduleId}/review`,
|
|
11
|
+
assignmentProgress: (slug, assignmentId) => `/api/lms-courses/${slug}/progress/assignments/${assignmentId}`,
|
|
12
|
+
adminCourses: "/api/lms-courses-admin",
|
|
13
|
+
adminCourseCurriculum: (slug) => `/api/lms-courses-admin/${slug}/curriculum`
|
|
14
|
+
};
|
|
15
|
+
var handbookLmsOwnerScopeSchema = z.enum(["global", "handbook"]);
|
|
16
|
+
var handbookLmsProgressStatusSchema = z.enum(["pending", "in_progress", "submitted", "passed", "revision_required"]);
|
|
17
|
+
var handbookLmsModuleModeSchema = z.enum(["single_stage", "multi_stage"]);
|
|
18
|
+
var handbookLmsAssignmentResponseModeSchema = z.enum(["written", "in_person"]);
|
|
19
|
+
var handbookLmsAssignmentStatusSchema = z.enum(["pending", "submitted", "completed"]);
|
|
20
|
+
var handbookLmsQuestionResponseTypeSchema = z.enum(["short_text", "long_text", "checklist"]);
|
|
21
|
+
var optionalNullableString = z.string().nullable();
|
|
22
|
+
var requiredSlug = z.string().trim().min(1).max(120).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);
|
|
23
|
+
var requiredDisplayOrder = z.number().int().min(1);
|
|
24
|
+
var handbookLmsQuestionSchema = z.object({
|
|
25
|
+
id: z.string().min(1),
|
|
26
|
+
module_id: z.string().min(1),
|
|
27
|
+
stage_id: z.string().min(1),
|
|
28
|
+
prompt: z.string().trim().min(1),
|
|
29
|
+
response_type: handbookLmsQuestionResponseTypeSchema,
|
|
30
|
+
display_order: requiredDisplayOrder,
|
|
31
|
+
active: z.boolean()
|
|
32
|
+
});
|
|
33
|
+
var handbookLmsSectionSummarySchema = z.object({
|
|
34
|
+
id: z.string().min(1),
|
|
35
|
+
course_id: z.string().min(1),
|
|
36
|
+
slug: requiredSlug,
|
|
37
|
+
title: z.string().trim().min(1),
|
|
38
|
+
description: optionalNullableString,
|
|
39
|
+
display_order: requiredDisplayOrder,
|
|
40
|
+
active: z.boolean()
|
|
41
|
+
});
|
|
42
|
+
var handbookLmsStageSchema = z.object({
|
|
43
|
+
id: z.string().min(1),
|
|
44
|
+
module_id: z.string().min(1),
|
|
45
|
+
title: z.string().trim().min(1),
|
|
46
|
+
content_md: z.string(),
|
|
47
|
+
display_order: requiredDisplayOrder,
|
|
48
|
+
active: z.boolean(),
|
|
49
|
+
questions: z.array(handbookLmsQuestionSchema)
|
|
50
|
+
});
|
|
51
|
+
var handbookLmsModuleSchema = z.object({
|
|
52
|
+
id: z.string().min(1),
|
|
53
|
+
course_id: z.string().min(1),
|
|
54
|
+
section_id: z.string().min(1),
|
|
55
|
+
slug: requiredSlug,
|
|
56
|
+
module_type: z.string().trim().min(1),
|
|
57
|
+
module_mode: handbookLmsModuleModeSchema,
|
|
58
|
+
title: z.string().trim().min(1),
|
|
59
|
+
summary: z.string().trim().min(1),
|
|
60
|
+
display_order: requiredDisplayOrder,
|
|
61
|
+
active: z.boolean(),
|
|
62
|
+
archived_at: optionalNullableString,
|
|
63
|
+
section: handbookLmsSectionSummarySchema.nullable().optional(),
|
|
64
|
+
stages: z.array(handbookLmsStageSchema),
|
|
65
|
+
exercises: z.array(handbookLmsQuestionSchema).optional()
|
|
66
|
+
});
|
|
67
|
+
var handbookLmsSectionSchema = handbookLmsSectionSummarySchema.extend({
|
|
68
|
+
modules: z.array(handbookLmsModuleSchema)
|
|
69
|
+
});
|
|
70
|
+
var handbookLmsCourseSchema = z.object({
|
|
71
|
+
id: z.string().min(1),
|
|
72
|
+
handbook_id: optionalNullableString,
|
|
73
|
+
owner_scope: handbookLmsOwnerScopeSchema,
|
|
74
|
+
slug: requiredSlug,
|
|
75
|
+
title: z.string().trim().min(1),
|
|
76
|
+
description: optionalNullableString,
|
|
77
|
+
published: z.boolean(),
|
|
78
|
+
active: z.boolean(),
|
|
79
|
+
created_at: z.string(),
|
|
80
|
+
updated_at: z.string()
|
|
81
|
+
});
|
|
82
|
+
var handbookLmsCourseUpsertInputSchema = z.object({
|
|
83
|
+
owner_scope: handbookLmsOwnerScopeSchema.default("handbook"),
|
|
84
|
+
slug: requiredSlug,
|
|
85
|
+
title: z.string().trim().min(1).max(200),
|
|
86
|
+
description: z.string().trim().max(1e4).nullable().optional(),
|
|
87
|
+
published: z.boolean().optional(),
|
|
88
|
+
active: z.boolean().optional()
|
|
89
|
+
});
|
|
90
|
+
var handbookLmsCourseLibraryItemSchema = z.object({
|
|
91
|
+
id: z.string().min(1),
|
|
92
|
+
slug: requiredSlug,
|
|
93
|
+
title: z.string().trim().min(1),
|
|
94
|
+
description: optionalNullableString,
|
|
95
|
+
owner_scope: handbookLmsOwnerScopeSchema,
|
|
96
|
+
handbook_id: optionalNullableString,
|
|
97
|
+
published: z.boolean(),
|
|
98
|
+
active: z.boolean(),
|
|
99
|
+
total_modules: z.number().int().min(0),
|
|
100
|
+
passed_modules: z.number().int().min(0),
|
|
101
|
+
in_progress_modules: z.number().int().min(0),
|
|
102
|
+
submitted_modules: z.number().int().min(0)
|
|
103
|
+
});
|
|
104
|
+
var handbookLmsProgressSchema = z.object({
|
|
105
|
+
module_id: z.string().min(1),
|
|
106
|
+
status: handbookLmsProgressStatusSchema,
|
|
107
|
+
completed_at: optionalNullableString,
|
|
108
|
+
submitted_at: optionalNullableString,
|
|
109
|
+
reviewed_at: optionalNullableString,
|
|
110
|
+
reviewed_by: optionalNullableString,
|
|
111
|
+
review_feedback_md: optionalNullableString
|
|
112
|
+
});
|
|
113
|
+
var handbookLmsQuestionResponseSchema = z.object({
|
|
114
|
+
id: z.string().min(1),
|
|
115
|
+
module_id: z.string().min(1),
|
|
116
|
+
question_id: z.string().min(1),
|
|
117
|
+
response_md: z.string(),
|
|
118
|
+
updated_at: z.string(),
|
|
119
|
+
submitted_at: optionalNullableString
|
|
120
|
+
});
|
|
121
|
+
var handbookLmsModuleAssignmentSchema = z.object({
|
|
122
|
+
id: z.string().min(1),
|
|
123
|
+
module_id: z.string().min(1),
|
|
124
|
+
learner_user_id: z.string().min(1),
|
|
125
|
+
assigned_by_user_id: z.string().min(1),
|
|
126
|
+
prompt: z.string(),
|
|
127
|
+
target_question_ids: z.array(z.string().min(1)).nullable(),
|
|
128
|
+
target_original_answers_json: z.record(z.string()).nullable(),
|
|
129
|
+
target_updated_answers_json: z.record(z.string()).nullable(),
|
|
130
|
+
response_mode: handbookLmsAssignmentResponseModeSchema,
|
|
131
|
+
learner_assignment_response_md: optionalNullableString,
|
|
132
|
+
learner_additional_response_md: optionalNullableString,
|
|
133
|
+
learner_response_md: optionalNullableString,
|
|
134
|
+
status: handbookLmsAssignmentStatusSchema,
|
|
135
|
+
due_at: optionalNullableString,
|
|
136
|
+
submitted_at: optionalNullableString,
|
|
137
|
+
completed_at: optionalNullableString,
|
|
138
|
+
reviewer_note_md: optionalNullableString,
|
|
139
|
+
created_at: z.string(),
|
|
140
|
+
updated_at: z.string(),
|
|
141
|
+
learner_name: optionalNullableString.optional(),
|
|
142
|
+
assigned_by_name: optionalNullableString.optional()
|
|
143
|
+
});
|
|
144
|
+
var handbookLmsLearningRecordSchema = z.object({
|
|
145
|
+
module: handbookLmsModuleSchema,
|
|
146
|
+
progress: handbookLmsProgressSchema,
|
|
147
|
+
responses: z.array(handbookLmsQuestionResponseSchema),
|
|
148
|
+
assignments: z.array(handbookLmsModuleAssignmentSchema)
|
|
149
|
+
});
|
|
150
|
+
var handbookLmsLearningSummarySchema = z.object({
|
|
151
|
+
records: z.array(handbookLmsLearningRecordSchema),
|
|
152
|
+
review_queue: z.array(handbookLmsModuleAssignmentSchema)
|
|
153
|
+
});
|
|
154
|
+
var handbookLmsLearnerOptionSchema = z.object({
|
|
155
|
+
id: z.string().min(1),
|
|
156
|
+
name: optionalNullableString,
|
|
157
|
+
email: optionalNullableString
|
|
158
|
+
});
|
|
159
|
+
var handbookLmsCourseLibraryItemListSchema = z.array(handbookLmsCourseLibraryItemSchema);
|
|
160
|
+
var handbookLmsSectionListSchema = z.array(handbookLmsSectionSchema);
|
|
161
|
+
var handbookLmsLearnerOptionListSchema = z.array(handbookLmsLearnerOptionSchema);
|
|
162
|
+
var handbookLmsCreateSectionInputSchema = z.object({
|
|
163
|
+
slug: requiredSlug,
|
|
164
|
+
title: z.string().trim().min(1).max(200),
|
|
165
|
+
description: z.string().trim().max(2e3).nullable().optional(),
|
|
166
|
+
display_order: requiredDisplayOrder.optional(),
|
|
167
|
+
active: z.boolean().optional()
|
|
168
|
+
});
|
|
169
|
+
var handbookLmsUpdateSectionInputSchema = z.object({
|
|
170
|
+
slug: requiredSlug.optional(),
|
|
171
|
+
title: z.string().trim().min(1).max(200).optional(),
|
|
172
|
+
description: z.string().trim().max(2e3).nullable().optional(),
|
|
173
|
+
display_order: requiredDisplayOrder.optional(),
|
|
174
|
+
active: z.boolean().optional()
|
|
175
|
+
});
|
|
176
|
+
var handbookLmsCreateModuleInputSchema = z.object({
|
|
177
|
+
section_id: z.string().min(1),
|
|
178
|
+
slug: requiredSlug,
|
|
179
|
+
module_type: z.string().trim().min(1).max(120).optional(),
|
|
180
|
+
module_mode: handbookLmsModuleModeSchema,
|
|
181
|
+
title: z.string().trim().min(1).max(200),
|
|
182
|
+
summary: z.string().trim().min(1).max(2e3),
|
|
183
|
+
display_order: requiredDisplayOrder.optional(),
|
|
184
|
+
active: z.boolean().optional()
|
|
185
|
+
});
|
|
186
|
+
var handbookLmsUpdateModuleInputSchema = z.object({
|
|
187
|
+
section_id: z.string().min(1).optional(),
|
|
188
|
+
slug: requiredSlug.optional(),
|
|
189
|
+
module_type: z.string().trim().min(1).max(120).optional(),
|
|
190
|
+
module_mode: handbookLmsModuleModeSchema.optional(),
|
|
191
|
+
title: z.string().trim().min(1).max(200).optional(),
|
|
192
|
+
summary: z.string().trim().min(1).max(2e3).optional(),
|
|
193
|
+
display_order: requiredDisplayOrder.optional(),
|
|
194
|
+
active: z.boolean().optional()
|
|
195
|
+
});
|
|
196
|
+
var handbookLmsCreateStageInputSchema = z.object({
|
|
197
|
+
title: z.string().trim().min(1).max(200),
|
|
198
|
+
content_md: z.string().max(1e5),
|
|
199
|
+
display_order: requiredDisplayOrder.optional(),
|
|
200
|
+
active: z.boolean().optional()
|
|
201
|
+
});
|
|
202
|
+
var handbookLmsUpdateStageInputSchema = z.object({
|
|
203
|
+
title: z.string().trim().min(1).max(200).optional(),
|
|
204
|
+
content_md: z.string().max(1e5).optional(),
|
|
205
|
+
display_order: requiredDisplayOrder.optional(),
|
|
206
|
+
active: z.boolean().optional()
|
|
207
|
+
});
|
|
208
|
+
var handbookLmsCreateQuestionInputSchema = z.object({
|
|
209
|
+
prompt: z.string().trim().min(1).max(2e4),
|
|
210
|
+
response_type: handbookLmsQuestionResponseTypeSchema,
|
|
211
|
+
display_order: requiredDisplayOrder.optional(),
|
|
212
|
+
active: z.boolean().optional()
|
|
213
|
+
});
|
|
214
|
+
var handbookLmsUpdateQuestionInputSchema = z.object({
|
|
215
|
+
stage_id: z.string().min(1).optional(),
|
|
216
|
+
module_id: z.string().min(1).optional(),
|
|
217
|
+
prompt: z.string().trim().min(1).max(2e4).optional(),
|
|
218
|
+
response_type: handbookLmsQuestionResponseTypeSchema.optional(),
|
|
219
|
+
display_order: requiredDisplayOrder.optional(),
|
|
220
|
+
active: z.boolean().optional()
|
|
221
|
+
});
|
|
222
|
+
var handbookLmsReorderPayloadSchema = z.object({
|
|
223
|
+
sections: z.array(z.object({ id: z.string().min(1), display_order: requiredDisplayOrder })).optional(),
|
|
224
|
+
modules: z.array(z.object({ id: z.string().min(1), section_id: z.string().min(1), display_order: requiredDisplayOrder })).optional(),
|
|
225
|
+
stages: z.array(z.object({ id: z.string().min(1), module_id: z.string().min(1), display_order: requiredDisplayOrder })).optional(),
|
|
226
|
+
questions: z.array(
|
|
227
|
+
z.object({
|
|
228
|
+
id: z.string().min(1),
|
|
229
|
+
stage_id: z.string().min(1),
|
|
230
|
+
module_id: z.string().min(1),
|
|
231
|
+
display_order: requiredDisplayOrder
|
|
232
|
+
})
|
|
233
|
+
).optional()
|
|
234
|
+
});
|
|
235
|
+
var handbookLmsSaveQuestionResponseInputSchema = z.object({
|
|
236
|
+
response_md: z.string().trim().min(1).max(25e3)
|
|
237
|
+
});
|
|
238
|
+
var handbookLmsReviewModuleInputSchema = z.object({
|
|
239
|
+
moduleId: z.string().min(1),
|
|
240
|
+
learner_user_id: z.string().min(1),
|
|
241
|
+
status: z.enum(["pending", "submitted", "passed", "revision_required"]),
|
|
242
|
+
review_feedback_md: z.string().trim().max(25e3).optional(),
|
|
243
|
+
assignment: z.object({
|
|
244
|
+
prompt: z.string().trim().max(1e4).optional(),
|
|
245
|
+
response_mode: handbookLmsAssignmentResponseModeSchema.optional(),
|
|
246
|
+
target_question_ids: z.array(z.string().min(1)).max(200).optional(),
|
|
247
|
+
due_at: z.string().nullable().optional(),
|
|
248
|
+
reviewer_note_md: z.string().trim().max(1e4).nullable().optional()
|
|
249
|
+
}).nullable().optional()
|
|
250
|
+
});
|
|
251
|
+
var handbookLmsUpdateAssignmentDataSchema = z.object({
|
|
252
|
+
learner_assignment_response_md: z.string().trim().max(25e3).nullable().optional(),
|
|
253
|
+
learner_additional_response_md: z.string().trim().max(25e3).nullable().optional(),
|
|
254
|
+
learner_response_md: z.string().trim().max(25e3).nullable().optional(),
|
|
255
|
+
status: handbookLmsAssignmentStatusSchema.optional(),
|
|
256
|
+
reviewer_note_md: z.string().trim().max(1e4).nullable().optional()
|
|
257
|
+
});
|
|
258
|
+
var handbookLmsUpdateAssignmentInputSchema = z.object({
|
|
259
|
+
assignmentId: z.string().min(1),
|
|
260
|
+
data: handbookLmsUpdateAssignmentDataSchema
|
|
261
|
+
});
|
|
262
|
+
var handbookLmsTrainingStepRequirementsInputSchema = z.object({
|
|
263
|
+
required_course_ids: z.array(z.string().min(1)).max(200)
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
export { handbookLmsAssignmentResponseModeSchema, handbookLmsAssignmentStatusSchema, handbookLmsCourseLibraryItemListSchema, handbookLmsCourseLibraryItemSchema, handbookLmsCourseSchema, handbookLmsCourseUpsertInputSchema, handbookLmsCreateModuleInputSchema, handbookLmsCreateQuestionInputSchema, handbookLmsCreateSectionInputSchema, handbookLmsCreateStageInputSchema, handbookLmsLearnerOptionListSchema, handbookLmsLearnerOptionSchema, handbookLmsLearningRecordSchema, handbookLmsLearningSummarySchema, handbookLmsModuleAssignmentSchema, handbookLmsModuleModeSchema, handbookLmsModuleSchema, handbookLmsOwnerScopeSchema, handbookLmsProgressSchema, handbookLmsProgressStatusSchema, handbookLmsQuestionResponseSchema, handbookLmsQuestionResponseTypeSchema, handbookLmsQuestionSchema, handbookLmsReorderPayloadSchema, handbookLmsReviewModuleInputSchema, handbookLmsRoutes, handbookLmsSaveQuestionResponseInputSchema, handbookLmsSectionListSchema, handbookLmsSectionSchema, handbookLmsSectionSummarySchema, handbookLmsStageSchema, handbookLmsTrainingStepRequirementsInputSchema, handbookLmsUpdateAssignmentDataSchema, handbookLmsUpdateAssignmentInputSchema, handbookLmsUpdateModuleInputSchema, handbookLmsUpdateQuestionInputSchema, handbookLmsUpdateSectionInputSchema, handbookLmsUpdateStageInputSchema };
|
|
267
|
+
//# sourceMappingURL=chunk-GZIXEHPW.js.map
|
|
268
|
+
//# sourceMappingURL=chunk-GZIXEHPW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contracts/endpoints.ts","../src/contracts/schemas.ts"],"names":[],"mappings":"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","file":"chunk-GZIXEHPW.js","sourcesContent":["export const handbookLmsRoutes = {\n courses: \"/api/lms-courses\",\n courseCurriculum: (slug: string) => `/api/lms-courses/${slug}/curriculum`,\n courseProgress: (slug: string) => `/api/lms-courses/${slug}/progress`,\n questionProgress: (slug: string, moduleId: string, questionId: string) =>\n `/api/lms-courses/${slug}/progress/modules/${moduleId}/questions/${questionId}`,\n submitModule: (slug: string, moduleId: string) => `/api/lms-courses/${slug}/progress/modules/${moduleId}/submit`,\n reviewModule: (slug: string, moduleId: string) => `/api/lms-courses/${slug}/progress/modules/${moduleId}/review`,\n assignmentProgress: (slug: string, assignmentId: string) => `/api/lms-courses/${slug}/progress/assignments/${assignmentId}`,\n adminCourses: \"/api/lms-courses-admin\",\n adminCourseCurriculum: (slug: string) => `/api/lms-courses-admin/${slug}/curriculum`\n} as const;\r\n","import { z } from \"zod\";\n\nexport const handbookLmsOwnerScopeSchema = z.enum([\"global\", \"handbook\"]);\nexport const handbookLmsProgressStatusSchema = z.enum([\"pending\", \"in_progress\", \"submitted\", \"passed\", \"revision_required\"]);\nexport const handbookLmsModuleModeSchema = z.enum([\"single_stage\", \"multi_stage\"]);\nexport const handbookLmsAssignmentResponseModeSchema = z.enum([\"written\", \"in_person\"]);\nexport const handbookLmsAssignmentStatusSchema = z.enum([\"pending\", \"submitted\", \"completed\"]);\nexport const handbookLmsQuestionResponseTypeSchema = z.enum([\"short_text\", \"long_text\", \"checklist\"]);\n\nconst optionalNullableString = z.string().nullable();\nconst requiredSlug = z.string().trim().min(1).max(120).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);\nconst requiredDisplayOrder = z.number().int().min(1);\n\nexport const handbookLmsQuestionSchema = z.object({\n id: z.string().min(1),\n module_id: z.string().min(1),\n stage_id: z.string().min(1),\n prompt: z.string().trim().min(1),\n response_type: handbookLmsQuestionResponseTypeSchema,\n display_order: requiredDisplayOrder,\n active: z.boolean()\n});\n\nexport const handbookLmsSectionSummarySchema = z.object({\n id: z.string().min(1),\n course_id: z.string().min(1),\n slug: requiredSlug,\n title: z.string().trim().min(1),\n description: optionalNullableString,\n display_order: requiredDisplayOrder,\n active: z.boolean()\n});\n\nexport const handbookLmsStageSchema = z.object({\n id: z.string().min(1),\n module_id: z.string().min(1),\n title: z.string().trim().min(1),\n content_md: z.string(),\n display_order: requiredDisplayOrder,\n active: z.boolean(),\n questions: z.array(handbookLmsQuestionSchema)\n});\n\nexport const handbookLmsModuleSchema = z.object({\n id: z.string().min(1),\n course_id: z.string().min(1),\n section_id: z.string().min(1),\n slug: requiredSlug,\n module_type: z.string().trim().min(1),\n module_mode: handbookLmsModuleModeSchema,\n title: z.string().trim().min(1),\n summary: z.string().trim().min(1),\n display_order: requiredDisplayOrder,\n active: z.boolean(),\n archived_at: optionalNullableString,\n section: handbookLmsSectionSummarySchema.nullable().optional(),\n stages: z.array(handbookLmsStageSchema),\n exercises: z.array(handbookLmsQuestionSchema).optional()\n});\n\nexport const handbookLmsSectionSchema = handbookLmsSectionSummarySchema.extend({\n modules: z.array(handbookLmsModuleSchema)\n});\n\nexport const handbookLmsCourseSchema = z.object({\n id: z.string().min(1),\n handbook_id: optionalNullableString,\n owner_scope: handbookLmsOwnerScopeSchema,\n slug: requiredSlug,\n title: z.string().trim().min(1),\n description: optionalNullableString,\n published: z.boolean(),\n active: z.boolean(),\n created_at: z.string(),\n updated_at: z.string()\n});\n\nexport const handbookLmsCourseUpsertInputSchema = z.object({\n owner_scope: handbookLmsOwnerScopeSchema.default(\"handbook\"),\n slug: requiredSlug,\n title: z.string().trim().min(1).max(200),\n description: z.string().trim().max(10000).nullable().optional(),\n published: z.boolean().optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsCourseLibraryItemSchema = z.object({\n id: z.string().min(1),\n slug: requiredSlug,\n title: z.string().trim().min(1),\n description: optionalNullableString,\n owner_scope: handbookLmsOwnerScopeSchema,\n handbook_id: optionalNullableString,\n published: z.boolean(),\n active: z.boolean(),\n total_modules: z.number().int().min(0),\n passed_modules: z.number().int().min(0),\n in_progress_modules: z.number().int().min(0),\n submitted_modules: z.number().int().min(0)\n});\n\nexport const handbookLmsProgressSchema = z.object({\n module_id: z.string().min(1),\n status: handbookLmsProgressStatusSchema,\n completed_at: optionalNullableString,\n submitted_at: optionalNullableString,\n reviewed_at: optionalNullableString,\n reviewed_by: optionalNullableString,\n review_feedback_md: optionalNullableString\n});\n\nexport const handbookLmsQuestionResponseSchema = z.object({\n id: z.string().min(1),\n module_id: z.string().min(1),\n question_id: z.string().min(1),\n response_md: z.string(),\n updated_at: z.string(),\n submitted_at: optionalNullableString\n});\n\nexport const handbookLmsModuleAssignmentSchema = z.object({\n id: z.string().min(1),\n module_id: z.string().min(1),\n learner_user_id: z.string().min(1),\n assigned_by_user_id: z.string().min(1),\n prompt: z.string(),\n target_question_ids: z.array(z.string().min(1)).nullable(),\n target_original_answers_json: z.record(z.string()).nullable(),\n target_updated_answers_json: z.record(z.string()).nullable(),\n response_mode: handbookLmsAssignmentResponseModeSchema,\n learner_assignment_response_md: optionalNullableString,\n learner_additional_response_md: optionalNullableString,\n learner_response_md: optionalNullableString,\n status: handbookLmsAssignmentStatusSchema,\n due_at: optionalNullableString,\n submitted_at: optionalNullableString,\n completed_at: optionalNullableString,\n reviewer_note_md: optionalNullableString,\n created_at: z.string(),\n updated_at: z.string(),\n learner_name: optionalNullableString.optional(),\n assigned_by_name: optionalNullableString.optional()\n});\n\nexport const handbookLmsLearningRecordSchema = z.object({\n module: handbookLmsModuleSchema,\n progress: handbookLmsProgressSchema,\n responses: z.array(handbookLmsQuestionResponseSchema),\n assignments: z.array(handbookLmsModuleAssignmentSchema)\n});\n\nexport const handbookLmsLearningSummarySchema = z.object({\n records: z.array(handbookLmsLearningRecordSchema),\n review_queue: z.array(handbookLmsModuleAssignmentSchema)\n});\n\nexport const handbookLmsLearnerOptionSchema = z.object({\n id: z.string().min(1),\n name: optionalNullableString,\n email: optionalNullableString\n});\n\nexport const handbookLmsCourseLibraryItemListSchema = z.array(handbookLmsCourseLibraryItemSchema);\nexport const handbookLmsSectionListSchema = z.array(handbookLmsSectionSchema);\nexport const handbookLmsLearnerOptionListSchema = z.array(handbookLmsLearnerOptionSchema);\n\nexport const handbookLmsCreateSectionInputSchema = z.object({\n slug: requiredSlug,\n title: z.string().trim().min(1).max(200),\n description: z.string().trim().max(2000).nullable().optional(),\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsUpdateSectionInputSchema = z.object({\n slug: requiredSlug.optional(),\n title: z.string().trim().min(1).max(200).optional(),\n description: z.string().trim().max(2000).nullable().optional(),\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsCreateModuleInputSchema = z.object({\n section_id: z.string().min(1),\n slug: requiredSlug,\n module_type: z.string().trim().min(1).max(120).optional(),\n module_mode: handbookLmsModuleModeSchema,\n title: z.string().trim().min(1).max(200),\n summary: z.string().trim().min(1).max(2000),\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsUpdateModuleInputSchema = z.object({\n section_id: z.string().min(1).optional(),\n slug: requiredSlug.optional(),\n module_type: z.string().trim().min(1).max(120).optional(),\n module_mode: handbookLmsModuleModeSchema.optional(),\n title: z.string().trim().min(1).max(200).optional(),\n summary: z.string().trim().min(1).max(2000).optional(),\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsCreateStageInputSchema = z.object({\n title: z.string().trim().min(1).max(200),\n content_md: z.string().max(100000),\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsUpdateStageInputSchema = z.object({\n title: z.string().trim().min(1).max(200).optional(),\n content_md: z.string().max(100000).optional(),\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsCreateQuestionInputSchema = z.object({\n prompt: z.string().trim().min(1).max(20000),\n response_type: handbookLmsQuestionResponseTypeSchema,\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsUpdateQuestionInputSchema = z.object({\n stage_id: z.string().min(1).optional(),\n module_id: z.string().min(1).optional(),\n prompt: z.string().trim().min(1).max(20000).optional(),\n response_type: handbookLmsQuestionResponseTypeSchema.optional(),\n display_order: requiredDisplayOrder.optional(),\n active: z.boolean().optional()\n});\n\nexport const handbookLmsReorderPayloadSchema = z.object({\n sections: z.array(z.object({ id: z.string().min(1), display_order: requiredDisplayOrder })).optional(),\n modules: z\n .array(z.object({ id: z.string().min(1), section_id: z.string().min(1), display_order: requiredDisplayOrder }))\n .optional(),\n stages: z\n .array(z.object({ id: z.string().min(1), module_id: z.string().min(1), display_order: requiredDisplayOrder }))\n .optional(),\n questions: z\n .array(\n z.object({\n id: z.string().min(1),\n stage_id: z.string().min(1),\n module_id: z.string().min(1),\n display_order: requiredDisplayOrder\n })\n )\n .optional()\n});\n\nexport const handbookLmsSaveQuestionResponseInputSchema = z.object({\n response_md: z.string().trim().min(1).max(25000)\n});\n\nexport const handbookLmsReviewModuleInputSchema = z.object({\n moduleId: z.string().min(1),\n learner_user_id: z.string().min(1),\n status: z.enum([\"pending\", \"submitted\", \"passed\", \"revision_required\"]),\n review_feedback_md: z.string().trim().max(25000).optional(),\n assignment: z\n .object({\n prompt: z.string().trim().max(10000).optional(),\n response_mode: handbookLmsAssignmentResponseModeSchema.optional(),\n target_question_ids: z.array(z.string().min(1)).max(200).optional(),\n due_at: z.string().nullable().optional(),\n reviewer_note_md: z.string().trim().max(10000).nullable().optional()\n })\n .nullable()\n .optional()\n});\n\nexport const handbookLmsUpdateAssignmentDataSchema = z.object({\n learner_assignment_response_md: z.string().trim().max(25000).nullable().optional(),\n learner_additional_response_md: z.string().trim().max(25000).nullable().optional(),\n learner_response_md: z.string().trim().max(25000).nullable().optional(),\n status: handbookLmsAssignmentStatusSchema.optional(),\n reviewer_note_md: z.string().trim().max(10000).nullable().optional()\n});\n\nexport const handbookLmsUpdateAssignmentInputSchema = z.object({\n assignmentId: z.string().min(1),\n data: handbookLmsUpdateAssignmentDataSchema\n});\n\nexport const handbookLmsTrainingStepRequirementsInputSchema = z.object({\n required_course_ids: z.array(z.string().min(1)).max(200)\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-HOQRIQ33.js"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
// src/react-headless/hooks.ts
|
|
4
|
+
var errorMessage = (error, fallback) => {
|
|
5
|
+
if (error instanceof Error) return error.message || fallback;
|
|
6
|
+
return fallback;
|
|
7
|
+
};
|
|
8
|
+
var sortCurriculum = (items) => [...items].sort((a, b) => a.display_order - b.display_order).map((section) => ({
|
|
9
|
+
...section,
|
|
10
|
+
modules: [...section.modules ?? []].sort((a, b) => a.display_order - b.display_order).map((module) => ({
|
|
11
|
+
...module,
|
|
12
|
+
stages: [...module.stages ?? []].sort((a, b) => a.display_order - b.display_order).map((stage) => ({
|
|
13
|
+
...stage,
|
|
14
|
+
questions: [...stage.questions ?? []].sort((a, b) => a.display_order - b.display_order)
|
|
15
|
+
}))
|
|
16
|
+
}))
|
|
17
|
+
}));
|
|
18
|
+
var useLmsCurriculumEditor = ({
|
|
19
|
+
adapter,
|
|
20
|
+
courseSlug,
|
|
21
|
+
enabled = true
|
|
22
|
+
}) => {
|
|
23
|
+
const [sections, setSections] = useState([]);
|
|
24
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
25
|
+
const [isSaving, setIsSaving] = useState(false);
|
|
26
|
+
const [error, setError] = useState(null);
|
|
27
|
+
const reload = useCallback(async () => {
|
|
28
|
+
if (!enabled || !courseSlug) return;
|
|
29
|
+
setIsLoading(true);
|
|
30
|
+
setError(null);
|
|
31
|
+
try {
|
|
32
|
+
const next = await adapter.getAdminCurriculum(courseSlug);
|
|
33
|
+
setSections(sortCurriculum(next));
|
|
34
|
+
} catch (err) {
|
|
35
|
+
setError(errorMessage(err, "Unable to load curriculum."));
|
|
36
|
+
} finally {
|
|
37
|
+
setIsLoading(false);
|
|
38
|
+
}
|
|
39
|
+
}, [adapter, courseSlug, enabled]);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
void reload();
|
|
42
|
+
}, [reload]);
|
|
43
|
+
const runSave = useCallback(
|
|
44
|
+
async (action, fallback) => {
|
|
45
|
+
setIsSaving(true);
|
|
46
|
+
setError(null);
|
|
47
|
+
try {
|
|
48
|
+
await action();
|
|
49
|
+
await reload();
|
|
50
|
+
return { ok: true, error: null };
|
|
51
|
+
} catch (err) {
|
|
52
|
+
const message = errorMessage(err, fallback);
|
|
53
|
+
setError(message);
|
|
54
|
+
return { ok: false, error: message };
|
|
55
|
+
} finally {
|
|
56
|
+
setIsSaving(false);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
[reload]
|
|
60
|
+
);
|
|
61
|
+
return {
|
|
62
|
+
sections,
|
|
63
|
+
setSections,
|
|
64
|
+
isLoading,
|
|
65
|
+
isSaving,
|
|
66
|
+
error,
|
|
67
|
+
reload,
|
|
68
|
+
createSection: (data) => runSave(() => adapter.createSection({ courseSlug, data }), "Unable to create section."),
|
|
69
|
+
updateSection: (sectionId, data) => runSave(() => adapter.updateSection({ courseSlug, sectionId, data }), "Unable to update section."),
|
|
70
|
+
archiveSection: (sectionId) => runSave(() => adapter.archiveSection({ courseSlug, sectionId }), "Unable to archive section."),
|
|
71
|
+
createModule: (data) => runSave(() => adapter.createModule({ courseSlug, data }), "Unable to create module."),
|
|
72
|
+
updateModule: (moduleId, data) => runSave(() => adapter.updateModule({ courseSlug, moduleId, data }), "Unable to update module."),
|
|
73
|
+
archiveModule: (moduleId) => runSave(() => adapter.archiveModule({ courseSlug, moduleId }), "Unable to archive module."),
|
|
74
|
+
createStage: (moduleId, data) => runSave(() => adapter.createStage({ courseSlug, moduleId, data }), "Unable to create stage."),
|
|
75
|
+
updateStage: (stageId, data) => runSave(() => adapter.updateStage({ courseSlug, stageId, data }), "Unable to update stage."),
|
|
76
|
+
archiveStage: (stageId) => runSave(() => adapter.archiveStage({ courseSlug, stageId }), "Unable to archive stage."),
|
|
77
|
+
createQuestion: (stageId, data) => runSave(() => adapter.createQuestion({ courseSlug, stageId, data }), "Unable to create question."),
|
|
78
|
+
updateQuestion: (questionId, data) => runSave(() => adapter.updateQuestion({ courseSlug, questionId, data }), "Unable to update question."),
|
|
79
|
+
archiveQuestion: (questionId) => runSave(() => adapter.archiveQuestion({ courseSlug, questionId }), "Unable to archive question."),
|
|
80
|
+
reorderCurriculum: (data) => runSave(() => adapter.reorderCurriculum({ courseSlug, data }), "Unable to reorder curriculum.")
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
var useLmsReviewWorkspace = ({
|
|
84
|
+
adapter,
|
|
85
|
+
courseSlug,
|
|
86
|
+
enabled = true
|
|
87
|
+
}) => {
|
|
88
|
+
const [learners, setLearners] = useState([]);
|
|
89
|
+
const [selectedLearnerId, setSelectedLearnerId] = useState("");
|
|
90
|
+
const [summary, setSummary] = useState(null);
|
|
91
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
92
|
+
const [isSaving, setIsSaving] = useState(false);
|
|
93
|
+
const [error, setError] = useState(null);
|
|
94
|
+
const loadLearners = useCallback(async () => {
|
|
95
|
+
if (!enabled) return;
|
|
96
|
+
try {
|
|
97
|
+
const rows = await adapter.listLearners();
|
|
98
|
+
setLearners(rows);
|
|
99
|
+
if (!selectedLearnerId && rows[0]) {
|
|
100
|
+
setSelectedLearnerId(rows[0].id);
|
|
101
|
+
}
|
|
102
|
+
} catch (err) {
|
|
103
|
+
setError(errorMessage(err, "Unable to load learners."));
|
|
104
|
+
}
|
|
105
|
+
}, [adapter, enabled, selectedLearnerId]);
|
|
106
|
+
const loadSummary = useCallback(async () => {
|
|
107
|
+
if (!enabled || !courseSlug || !selectedLearnerId) return;
|
|
108
|
+
setIsLoading(true);
|
|
109
|
+
setError(null);
|
|
110
|
+
try {
|
|
111
|
+
const next = await adapter.getLearningSummary({ courseSlug, learnerUserId: selectedLearnerId });
|
|
112
|
+
setSummary(next);
|
|
113
|
+
} catch (err) {
|
|
114
|
+
setError(errorMessage(err, "Unable to load learner summary."));
|
|
115
|
+
} finally {
|
|
116
|
+
setIsLoading(false);
|
|
117
|
+
}
|
|
118
|
+
}, [adapter, courseSlug, enabled, selectedLearnerId]);
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
void loadLearners();
|
|
121
|
+
}, [loadLearners]);
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
void loadSummary();
|
|
124
|
+
}, [loadSummary]);
|
|
125
|
+
const runSave = useCallback(
|
|
126
|
+
async (action, fallback) => {
|
|
127
|
+
setIsSaving(true);
|
|
128
|
+
setError(null);
|
|
129
|
+
try {
|
|
130
|
+
await action();
|
|
131
|
+
await loadSummary();
|
|
132
|
+
return { ok: true, error: null };
|
|
133
|
+
} catch (err) {
|
|
134
|
+
const message = errorMessage(err, fallback);
|
|
135
|
+
setError(message);
|
|
136
|
+
return { ok: false, error: message };
|
|
137
|
+
} finally {
|
|
138
|
+
setIsSaving(false);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
[loadSummary]
|
|
142
|
+
);
|
|
143
|
+
const records = useMemo(() => summary?.records ?? [], [summary?.records]);
|
|
144
|
+
return {
|
|
145
|
+
learners,
|
|
146
|
+
selectedLearnerId,
|
|
147
|
+
setSelectedLearnerId,
|
|
148
|
+
summary,
|
|
149
|
+
records,
|
|
150
|
+
isLoading,
|
|
151
|
+
isSaving,
|
|
152
|
+
error,
|
|
153
|
+
reload: loadSummary,
|
|
154
|
+
reviewModule: (data) => runSave(() => adapter.reviewModule({ courseSlug, data }), "Unable to update review."),
|
|
155
|
+
updateAssignment: (data) => runSave(() => adapter.updateAssignment({ courseSlug, data }), "Unable to update assignment.")
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
var useLmsLearningWorkspace = ({
|
|
159
|
+
adapter,
|
|
160
|
+
courseSlug,
|
|
161
|
+
learnerUserId = null,
|
|
162
|
+
enabled = true
|
|
163
|
+
}) => {
|
|
164
|
+
const [summary, setSummary] = useState(null);
|
|
165
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
166
|
+
const [isSavingQuestion, setIsSavingQuestion] = useState(false);
|
|
167
|
+
const [isSubmittingModule, setIsSubmittingModule] = useState(false);
|
|
168
|
+
const [isUpdatingAssignment, setIsUpdatingAssignment] = useState(false);
|
|
169
|
+
const [error, setError] = useState(null);
|
|
170
|
+
const loadSummary = useCallback(async () => {
|
|
171
|
+
if (!enabled || !courseSlug) {
|
|
172
|
+
setSummary(null);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
setIsLoading(true);
|
|
176
|
+
setError(null);
|
|
177
|
+
try {
|
|
178
|
+
const next = await adapter.getLearningSummary({ courseSlug, learnerUserId });
|
|
179
|
+
setSummary(next);
|
|
180
|
+
} catch (err) {
|
|
181
|
+
setError(errorMessage(err, "Unable to load learning summary."));
|
|
182
|
+
} finally {
|
|
183
|
+
setIsLoading(false);
|
|
184
|
+
}
|
|
185
|
+
}, [adapter, courseSlug, enabled, learnerUserId]);
|
|
186
|
+
useEffect(() => {
|
|
187
|
+
void loadSummary();
|
|
188
|
+
}, [loadSummary]);
|
|
189
|
+
const saveQuestionResponse = useCallback(
|
|
190
|
+
async (data, opts) => {
|
|
191
|
+
setIsSavingQuestion(true);
|
|
192
|
+
setError(null);
|
|
193
|
+
try {
|
|
194
|
+
await adapter.saveQuestionResponse(data);
|
|
195
|
+
if (opts?.reload) await loadSummary();
|
|
196
|
+
return { ok: true, error: null };
|
|
197
|
+
} catch (err) {
|
|
198
|
+
const message = errorMessage(err, "Unable to save response.");
|
|
199
|
+
setError(message);
|
|
200
|
+
return { ok: false, error: message };
|
|
201
|
+
} finally {
|
|
202
|
+
setIsSavingQuestion(false);
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
[adapter, loadSummary]
|
|
206
|
+
);
|
|
207
|
+
const submitModule = useCallback(
|
|
208
|
+
async (data, opts) => {
|
|
209
|
+
setIsSubmittingModule(true);
|
|
210
|
+
setError(null);
|
|
211
|
+
try {
|
|
212
|
+
await adapter.submitModule(data);
|
|
213
|
+
if (opts?.reload ?? true) await loadSummary();
|
|
214
|
+
return { ok: true, error: null };
|
|
215
|
+
} catch (err) {
|
|
216
|
+
const message = errorMessage(err, "Unable to submit module.");
|
|
217
|
+
setError(message);
|
|
218
|
+
return { ok: false, error: message };
|
|
219
|
+
} finally {
|
|
220
|
+
setIsSubmittingModule(false);
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
[adapter, loadSummary]
|
|
224
|
+
);
|
|
225
|
+
const updateAssignment = useCallback(
|
|
226
|
+
async (data, opts) => {
|
|
227
|
+
setIsUpdatingAssignment(true);
|
|
228
|
+
setError(null);
|
|
229
|
+
try {
|
|
230
|
+
await adapter.updateAssignment({ courseSlug, data });
|
|
231
|
+
if (opts?.reload ?? true) await loadSummary();
|
|
232
|
+
return { ok: true, error: null };
|
|
233
|
+
} catch (err) {
|
|
234
|
+
const message = errorMessage(err, "Unable to update assignment.");
|
|
235
|
+
setError(message);
|
|
236
|
+
return { ok: false, error: message };
|
|
237
|
+
} finally {
|
|
238
|
+
setIsUpdatingAssignment(false);
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
[adapter, courseSlug, loadSummary]
|
|
242
|
+
);
|
|
243
|
+
const records = useMemo(() => summary?.records ?? [], [summary?.records]);
|
|
244
|
+
const reviewQueue = useMemo(() => summary?.review_queue ?? [], [summary?.review_queue]);
|
|
245
|
+
return {
|
|
246
|
+
summary,
|
|
247
|
+
records,
|
|
248
|
+
reviewQueue,
|
|
249
|
+
isLoading,
|
|
250
|
+
isSavingQuestion,
|
|
251
|
+
isSubmittingModule,
|
|
252
|
+
isUpdatingAssignment,
|
|
253
|
+
isSaving: isSavingQuestion || isSubmittingModule || isUpdatingAssignment,
|
|
254
|
+
error,
|
|
255
|
+
reload: loadSummary,
|
|
256
|
+
saveQuestionResponse,
|
|
257
|
+
submitModule,
|
|
258
|
+
updateAssignment
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
export { useLmsCurriculumEditor, useLmsLearningWorkspace, useLmsReviewWorkspace };
|
|
263
|
+
//# sourceMappingURL=chunk-N4WYUTCR.js.map
|
|
264
|
+
//# sourceMappingURL=chunk-N4WYUTCR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react-headless/hooks.ts"],"names":[],"mappings":"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","file":"chunk-N4WYUTCR.js","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type {\n HandbookLmsReorderPayload,\n HandbookLmsSection,\n HandbookLmsUpdateAssignmentInput,\n HandbookLmsReviewModuleInput,\n HandbookLmsLearningSummary,\n HandbookLmsLearnerOption\n} from \"../core/types\";\nimport type { HandbookLmsAdapter } from \"../core/adapter\";\n\nconst errorMessage = (error: unknown, fallback: string) => {\n if (error instanceof Error) return error.message || fallback;\n return fallback;\n};\n\nconst sortCurriculum = (items: HandbookLmsSection[]) =>\n [...items]\n .sort((a, b) => a.display_order - b.display_order)\n .map((section) => ({\n ...section,\n modules: [...(section.modules ?? [])]\n .sort((a, b) => a.display_order - b.display_order)\n .map((module) => ({\n ...module,\n stages: [...(module.stages ?? [])]\n .sort((a, b) => a.display_order - b.display_order)\n .map((stage) => ({\n ...stage,\n questions: [...(stage.questions ?? [])].sort((a, b) => a.display_order - b.display_order)\n }))\n }))\n }));\n\nexport const useLmsCurriculumEditor = ({\n adapter,\n courseSlug,\n enabled = true\n}: {\n adapter: HandbookLmsAdapter;\n courseSlug: string;\n enabled?: boolean;\n}) => {\n const [sections, setSections] = useState<HandbookLmsSection[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const reload = useCallback(async () => {\n if (!enabled || !courseSlug) return;\n setIsLoading(true);\n setError(null);\n try {\n const next = await adapter.getAdminCurriculum(courseSlug);\n setSections(sortCurriculum(next));\n } catch (err) {\n setError(errorMessage(err, \"Unable to load curriculum.\"));\n } finally {\n setIsLoading(false);\n }\n }, [adapter, courseSlug, enabled]);\n\n useEffect(() => {\n void reload();\n }, [reload]);\n\n const runSave = useCallback(\n async (action: () => Promise<void>, fallback: string) => {\n setIsSaving(true);\n setError(null);\n try {\n await action();\n await reload();\n return { ok: true as const, error: null };\n } catch (err) {\n const message = errorMessage(err, fallback);\n setError(message);\n return { ok: false as const, error: message };\n } finally {\n setIsSaving(false);\n }\n },\n [reload]\n );\n\n return {\n sections,\n setSections,\n isLoading,\n isSaving,\n error,\n reload,\n createSection: (data: Parameters<HandbookLmsAdapter[\"createSection\"]>[0][\"data\"]) =>\n runSave(() => adapter.createSection({ courseSlug, data }), \"Unable to create section.\"),\n updateSection: (sectionId: string, data: Parameters<HandbookLmsAdapter[\"updateSection\"]>[0][\"data\"]) =>\n runSave(() => adapter.updateSection({ courseSlug, sectionId, data }), \"Unable to update section.\"),\n archiveSection: (sectionId: string) =>\n runSave(() => adapter.archiveSection({ courseSlug, sectionId }), \"Unable to archive section.\"),\n createModule: (data: Parameters<HandbookLmsAdapter[\"createModule\"]>[0][\"data\"]) =>\n runSave(() => adapter.createModule({ courseSlug, data }), \"Unable to create module.\"),\n updateModule: (moduleId: string, data: Parameters<HandbookLmsAdapter[\"updateModule\"]>[0][\"data\"]) =>\n runSave(() => adapter.updateModule({ courseSlug, moduleId, data }), \"Unable to update module.\"),\n archiveModule: (moduleId: string) =>\n runSave(() => adapter.archiveModule({ courseSlug, moduleId }), \"Unable to archive module.\"),\n createStage: (moduleId: string, data: Parameters<HandbookLmsAdapter[\"createStage\"]>[0][\"data\"]) =>\n runSave(() => adapter.createStage({ courseSlug, moduleId, data }), \"Unable to create stage.\"),\n updateStage: (stageId: string, data: Parameters<HandbookLmsAdapter[\"updateStage\"]>[0][\"data\"]) =>\n runSave(() => adapter.updateStage({ courseSlug, stageId, data }), \"Unable to update stage.\"),\n archiveStage: (stageId: string) =>\n runSave(() => adapter.archiveStage({ courseSlug, stageId }), \"Unable to archive stage.\"),\n createQuestion: (stageId: string, data: Parameters<HandbookLmsAdapter[\"createQuestion\"]>[0][\"data\"]) =>\n runSave(() => adapter.createQuestion({ courseSlug, stageId, data }), \"Unable to create question.\"),\n updateQuestion: (questionId: string, data: Parameters<HandbookLmsAdapter[\"updateQuestion\"]>[0][\"data\"]) =>\n runSave(() => adapter.updateQuestion({ courseSlug, questionId, data }), \"Unable to update question.\"),\n archiveQuestion: (questionId: string) =>\n runSave(() => adapter.archiveQuestion({ courseSlug, questionId }), \"Unable to archive question.\"),\n reorderCurriculum: (data: HandbookLmsReorderPayload) =>\n runSave(() => adapter.reorderCurriculum({ courseSlug, data }), \"Unable to reorder curriculum.\")\n };\n};\n\nexport const useLmsReviewWorkspace = ({\n adapter,\n courseSlug,\n enabled = true\n}: {\n adapter: HandbookLmsAdapter;\n courseSlug: string;\n enabled?: boolean;\n}) => {\n const [learners, setLearners] = useState<HandbookLmsLearnerOption[]>([]);\n const [selectedLearnerId, setSelectedLearnerId] = useState(\"\");\n const [summary, setSummary] = useState<HandbookLmsLearningSummary | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const loadLearners = useCallback(async () => {\n if (!enabled) return;\n try {\n const rows = await adapter.listLearners();\n setLearners(rows);\n if (!selectedLearnerId && rows[0]) {\n setSelectedLearnerId(rows[0].id);\n }\n } catch (err) {\n setError(errorMessage(err, \"Unable to load learners.\"));\n }\n }, [adapter, enabled, selectedLearnerId]);\n\n const loadSummary = useCallback(async () => {\n if (!enabled || !courseSlug || !selectedLearnerId) return;\n setIsLoading(true);\n setError(null);\n try {\n const next = await adapter.getLearningSummary({ courseSlug, learnerUserId: selectedLearnerId });\n setSummary(next);\n } catch (err) {\n setError(errorMessage(err, \"Unable to load learner summary.\"));\n } finally {\n setIsLoading(false);\n }\n }, [adapter, courseSlug, enabled, selectedLearnerId]);\n\n useEffect(() => {\n void loadLearners();\n }, [loadLearners]);\n\n useEffect(() => {\n void loadSummary();\n }, [loadSummary]);\n\n const runSave = useCallback(\n async (action: () => Promise<void>, fallback: string) => {\n setIsSaving(true);\n setError(null);\n try {\n await action();\n await loadSummary();\n return { ok: true as const, error: null };\n } catch (err) {\n const message = errorMessage(err, fallback);\n setError(message);\n return { ok: false as const, error: message };\n } finally {\n setIsSaving(false);\n }\n },\n [loadSummary]\n );\n\n const records = useMemo(() => summary?.records ?? [], [summary?.records]);\n\n return {\n learners,\n selectedLearnerId,\n setSelectedLearnerId,\n summary,\n records,\n isLoading,\n isSaving,\n error,\n reload: loadSummary,\n reviewModule: (data: HandbookLmsReviewModuleInput) =>\n runSave(() => adapter.reviewModule({ courseSlug, data }), \"Unable to update review.\"),\n updateAssignment: (data: HandbookLmsUpdateAssignmentInput) =>\n runSave(() => adapter.updateAssignment({ courseSlug, data }), \"Unable to update assignment.\")\n };\n};\n\nexport const useLmsLearningWorkspace = ({\n adapter,\n courseSlug,\n learnerUserId = null,\n enabled = true\n}: {\n adapter: HandbookLmsAdapter;\n courseSlug: string;\n learnerUserId?: string | null;\n enabled?: boolean;\n}) => {\n const [summary, setSummary] = useState<HandbookLmsLearningSummary | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isSavingQuestion, setIsSavingQuestion] = useState(false);\n const [isSubmittingModule, setIsSubmittingModule] = useState(false);\n const [isUpdatingAssignment, setIsUpdatingAssignment] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const loadSummary = useCallback(async () => {\n if (!enabled || !courseSlug) {\n setSummary(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n try {\n const next = await adapter.getLearningSummary({ courseSlug, learnerUserId });\n setSummary(next);\n } catch (err) {\n setError(errorMessage(err, \"Unable to load learning summary.\"));\n } finally {\n setIsLoading(false);\n }\n }, [adapter, courseSlug, enabled, learnerUserId]);\n\n useEffect(() => {\n void loadSummary();\n }, [loadSummary]);\n\n const saveQuestionResponse = useCallback(\n async (\n data: Parameters<HandbookLmsAdapter[\"saveQuestionResponse\"]>[0],\n opts?: { reload?: boolean }\n ) => {\n setIsSavingQuestion(true);\n setError(null);\n try {\n await adapter.saveQuestionResponse(data);\n if (opts?.reload) await loadSummary();\n return { ok: true as const, error: null };\n } catch (err) {\n const message = errorMessage(err, \"Unable to save response.\");\n setError(message);\n return { ok: false as const, error: message };\n } finally {\n setIsSavingQuestion(false);\n }\n },\n [adapter, loadSummary]\n );\n\n const submitModule = useCallback(\n async (\n data: Parameters<HandbookLmsAdapter[\"submitModule\"]>[0],\n opts?: { reload?: boolean }\n ) => {\n setIsSubmittingModule(true);\n setError(null);\n try {\n await adapter.submitModule(data);\n if (opts?.reload ?? true) await loadSummary();\n return { ok: true as const, error: null };\n } catch (err) {\n const message = errorMessage(err, \"Unable to submit module.\");\n setError(message);\n return { ok: false as const, error: message };\n } finally {\n setIsSubmittingModule(false);\n }\n },\n [adapter, loadSummary]\n );\n\n const updateAssignment = useCallback(\n async (\n data: HandbookLmsUpdateAssignmentInput,\n opts?: { reload?: boolean }\n ) => {\n setIsUpdatingAssignment(true);\n setError(null);\n try {\n await adapter.updateAssignment({ courseSlug, data });\n if (opts?.reload ?? true) await loadSummary();\n return { ok: true as const, error: null };\n } catch (err) {\n const message = errorMessage(err, \"Unable to update assignment.\");\n setError(message);\n return { ok: false as const, error: message };\n } finally {\n setIsUpdatingAssignment(false);\n }\n },\n [adapter, courseSlug, loadSummary]\n );\n\n const records = useMemo(() => summary?.records ?? [], [summary?.records]);\n const reviewQueue = useMemo(() => summary?.review_queue ?? [], [summary?.review_queue]);\n\n return {\n summary,\n records,\n reviewQueue,\n isLoading,\n isSavingQuestion,\n isSubmittingModule,\n isUpdatingAssignment,\n isSaving: isSavingQuestion || isSubmittingModule || isUpdatingAssignment,\n error,\n reload: loadSummary,\n saveQuestionResponse,\n submitModule,\n updateAssignment\n };\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/types.ts"],"names":[],"mappings":";AAkDO,IAAM,uBAAA,GAA0B,CAAgC,MAAA,KAAc","file":"chunk-PYWAXMRT.js","sourcesContent":["export type HandbookLmsUiConfig = {\n labels: {\n editorTitle: string;\n reviewTitle: string;\n backButton: string;\n addSection: string;\n addModule: string;\n addStage: string;\n addQuestion: string;\n editAction: string;\n archiveAction: string;\n restoreAction: string;\n saveAction: string;\n cancelAction: string;\n saveResponseAction: string;\n submitModuleAction: string;\n passAction: string;\n requestRevisionAction: string;\n applyStatusAction: string;\n noModulesMessage: string;\n autosaveNotice: string;\n };\n workflow: {\n enableModuleDragAndDrop: boolean;\n enableStatusOverride: boolean;\n enableFollowUpAssignments: boolean;\n enableTargetedQuestionSelection: boolean;\n enableAutosaveNotifications: boolean;\n autosaveNotificationCooldownMs: number;\n };\n validation: {\n slugPattern: RegExp;\n slugPatternMessage: string;\n requiredTitleMessage: string;\n requiredSlugMessage: string;\n requiredSummaryMessage: string;\n requiredPromptMessage: string;\n };\n naming: {\n course: string;\n section: string;\n module: string;\n stage: string;\n question: string;\n learner: string;\n reviewer: string;\n assignment: string;\n };\n};\n\nexport const defineHandbookLmsConfig = <T extends HandbookLmsUiConfig>(config: T) => config;\r\n"]}
|