analytica-frontend-lib 1.2.82 → 1.2.83

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/index.js CHANGED
@@ -233,6 +233,7 @@ __export(src_exports, {
233
233
  createQuestionsListHook: () => createQuestionsListHook,
234
234
  createRecommendedLessonDetailsHook: () => createRecommendedLessonDetailsHook,
235
235
  createRecommendedLessonsHistoryHook: () => createRecommendedLessonsHistoryHook,
236
+ createRecommendedLessonsPageHook: () => createRecommendedLessonsPageHook,
236
237
  createUseActivitiesHistory: () => createUseActivitiesHistory,
237
238
  createUseActivityFiltersData: () => createUseActivityFiltersData,
238
239
  createUseActivityModels: () => createUseActivityModels,
@@ -244,6 +245,7 @@ __export(src_exports, {
244
245
  createUseQuestionsList: () => createUseQuestionsList,
245
246
  createUseRecommendedLessonDetails: () => createUseRecommendedLessonDetails,
246
247
  createUseRecommendedLessonsHistory: () => createUseRecommendedLessonsHistory,
248
+ createUseRecommendedLessonsPage: () => createUseRecommendedLessonsPage,
247
249
  createZustandAuthAdapter: () => createZustandAuthAdapter,
248
250
  deriveStudentStatus: () => deriveStudentStatus,
249
251
  determineGoalStatus: () => determineGoalStatus,
@@ -27122,8 +27124,225 @@ var RecommendedLessonDetails = ({
27122
27124
  };
27123
27125
  var RecommendedLessonDetails_default = RecommendedLessonDetails;
27124
27126
 
27125
- // src/hooks/useRecommendedLessonDetails.ts
27127
+ // src/hooks/useRecommendedLessonsPage.ts
27126
27128
  var import_react87 = require("react");
27129
+ var buildQueryParams2 = (filters) => {
27130
+ if (!filters) return {};
27131
+ const params = {};
27132
+ for (const key in filters) {
27133
+ const value = filters[key];
27134
+ if (value !== void 0 && value !== null) {
27135
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
27136
+ params[key] = value;
27137
+ }
27138
+ }
27139
+ }
27140
+ return params;
27141
+ };
27142
+ var getSchoolOptions2 = (userData) => {
27143
+ if (!userData?.userInstitutions) return [];
27144
+ const schoolMap = /* @__PURE__ */ new Map();
27145
+ userData.userInstitutions.forEach((inst) => {
27146
+ if (inst.school?.id && inst.school?.name) {
27147
+ schoolMap.set(inst.school.id, inst.school.name);
27148
+ }
27149
+ });
27150
+ return Array.from(schoolMap.entries()).map(([id, name]) => ({ id, name }));
27151
+ };
27152
+ var getClassOptions2 = (userData) => {
27153
+ if (!userData?.userInstitutions) return [];
27154
+ const classMap = /* @__PURE__ */ new Map();
27155
+ userData.userInstitutions.forEach((inst) => {
27156
+ if (inst.class?.id && inst.class?.name) {
27157
+ classMap.set(inst.class.id, inst.class.name);
27158
+ }
27159
+ });
27160
+ return Array.from(classMap.entries()).map(([id, name]) => ({ id, name }));
27161
+ };
27162
+ var getSubjectOptions3 = (userData) => {
27163
+ if (!userData?.subTeacherTopicClasses) return [];
27164
+ const subjectMap = /* @__PURE__ */ new Map();
27165
+ userData.subTeacherTopicClasses.forEach((stc) => {
27166
+ if (stc.subject?.id && stc.subject?.name) {
27167
+ subjectMap.set(stc.subject.id, stc.subject.name);
27168
+ }
27169
+ });
27170
+ return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name }));
27171
+ };
27172
+ var createUseRecommendedLessonsPage = (config) => {
27173
+ const {
27174
+ api,
27175
+ navigate,
27176
+ userData,
27177
+ paths,
27178
+ endpoints,
27179
+ texts,
27180
+ emptyStateImage,
27181
+ noSearchImage,
27182
+ mapSubjectNameToEnum: mapSubjectNameToEnum2
27183
+ } = config;
27184
+ return () => {
27185
+ const goalsMapRef = (0, import_react87.useRef)(/* @__PURE__ */ new Map());
27186
+ const [sendModalOpen, setSendModalOpen] = (0, import_react87.useState)(false);
27187
+ const [selectedModel, setSelectedModel] = (0, import_react87.useState)(null);
27188
+ const [sendModalLoading, setSendModalLoading] = (0, import_react87.useState)(false);
27189
+ const [sendModalCategories, setSendModalCategories] = (0, import_react87.useState)([]);
27190
+ const userFilterData = (0, import_react87.useMemo)(
27191
+ () => ({
27192
+ schools: getSchoolOptions2(userData),
27193
+ classes: getClassOptions2(userData),
27194
+ subjects: getSubjectOptions3(userData)
27195
+ }),
27196
+ [userData]
27197
+ );
27198
+ const subjectsMap = (0, import_react87.useMemo)(() => {
27199
+ const map = /* @__PURE__ */ new Map();
27200
+ const subjects = getSubjectOptions3(userData);
27201
+ subjects.forEach((s) => map.set(s.id, s.name));
27202
+ return map;
27203
+ }, [userData]);
27204
+ const fetchGoalsHistory = (0, import_react87.useCallback)(
27205
+ async (filters) => {
27206
+ const params = buildQueryParams2(filters);
27207
+ const response = await api.get(
27208
+ endpoints.goalsHistory,
27209
+ { params }
27210
+ );
27211
+ const goals = response.data.data.goals;
27212
+ goals.forEach((goal) => {
27213
+ goalsMapRef.current.set(goal.goal.id, goal);
27214
+ });
27215
+ return response.data;
27216
+ },
27217
+ [api, endpoints.goalsHistory]
27218
+ );
27219
+ const fetchGoalModels = (0, import_react87.useCallback)(
27220
+ async (filters) => {
27221
+ const params = buildQueryParams2({
27222
+ ...filters,
27223
+ type: "MODELO" /* MODELO */
27224
+ });
27225
+ const response = await api.get(
27226
+ endpoints.goalDrafts,
27227
+ { params }
27228
+ );
27229
+ return response.data;
27230
+ },
27231
+ [api, endpoints.goalDrafts]
27232
+ );
27233
+ const deleteGoalModel = (0, import_react87.useCallback)(
27234
+ async (id) => {
27235
+ await api.delete(`${endpoints.goalDrafts}/${id}`);
27236
+ },
27237
+ [api, endpoints.goalDrafts]
27238
+ );
27239
+ const handleCreateLesson = (0, import_react87.useCallback)(() => {
27240
+ navigate(paths.createLesson);
27241
+ }, []);
27242
+ const handleCreateModel = (0, import_react87.useCallback)(() => {
27243
+ navigate(paths.createModel);
27244
+ }, []);
27245
+ const handleRowClick = (0, import_react87.useCallback)((row) => {
27246
+ const originalData = goalsMapRef.current.get(row.id);
27247
+ navigate(`${paths.lessonDetails}/${row.id}`, {
27248
+ state: { goalData: originalData }
27249
+ });
27250
+ }, []);
27251
+ const handleEditGoal = (0, import_react87.useCallback)((id) => {
27252
+ navigate(`${paths.editLesson}/${id}/editar`);
27253
+ }, []);
27254
+ const handleEditModel = (0, import_react87.useCallback)((model) => {
27255
+ navigate(`${paths.editModel}${model.id}`);
27256
+ }, []);
27257
+ const handleSendLesson = (0, import_react87.useCallback)(
27258
+ (model) => {
27259
+ setSelectedModel(model);
27260
+ const classes = getClassOptions2(userData);
27261
+ const categories = [];
27262
+ if (classes.length > 0) {
27263
+ categories.push({
27264
+ key: "students",
27265
+ label: "Turmas",
27266
+ selectedIds: [],
27267
+ itens: classes.map((cls) => ({
27268
+ id: cls.id,
27269
+ name: cls.name,
27270
+ studentId: cls.id,
27271
+ userInstitutionId: cls.id
27272
+ }))
27273
+ });
27274
+ }
27275
+ setSendModalCategories(categories);
27276
+ setSendModalOpen(true);
27277
+ },
27278
+ [userData]
27279
+ );
27280
+ const handleSendLessonSubmit = (0, import_react87.useCallback)(
27281
+ async (formData) => {
27282
+ if (!selectedModel) return;
27283
+ setSendModalLoading(true);
27284
+ try {
27285
+ await api.post(endpoints.submitGoal, {
27286
+ draftId: selectedModel.id,
27287
+ students: formData.students,
27288
+ startDate: `${formData.startDate}T${formData.startTime}:00`,
27289
+ finalDate: `${formData.finalDate}T${formData.finalTime}:00`
27290
+ });
27291
+ setSendModalOpen(false);
27292
+ setSelectedModel(null);
27293
+ } finally {
27294
+ setSendModalLoading(false);
27295
+ }
27296
+ },
27297
+ [api, endpoints.submitGoal, selectedModel]
27298
+ );
27299
+ const handleSendModalClose = (0, import_react87.useCallback)(() => {
27300
+ setSendModalOpen(false);
27301
+ setSelectedModel(null);
27302
+ }, []);
27303
+ const handleCategoriesChange = (0, import_react87.useCallback)(
27304
+ (categories) => {
27305
+ setSendModalCategories(categories);
27306
+ },
27307
+ []
27308
+ );
27309
+ return {
27310
+ historyProps: {
27311
+ fetchGoalsHistory,
27312
+ fetchGoalModels,
27313
+ deleteGoalModel,
27314
+ onCreateLesson: handleCreateLesson,
27315
+ onCreateModel: handleCreateModel,
27316
+ onRowClick: handleRowClick,
27317
+ onEditGoal: handleEditGoal,
27318
+ onEditModel: handleEditModel,
27319
+ onSendLesson: handleSendLesson,
27320
+ emptyStateImage,
27321
+ noSearchImage,
27322
+ mapSubjectNameToEnum: mapSubjectNameToEnum2,
27323
+ userFilterData,
27324
+ subjectsMap,
27325
+ title: texts.title,
27326
+ createButtonText: texts.createButtonText,
27327
+ searchPlaceholder: texts.searchPlaceholder
27328
+ },
27329
+ modalProps: {
27330
+ isOpen: sendModalOpen,
27331
+ onClose: handleSendModalClose,
27332
+ onSubmit: handleSendLessonSubmit,
27333
+ categories: sendModalCategories,
27334
+ onCategoriesChange: handleCategoriesChange,
27335
+ isLoading: sendModalLoading,
27336
+ modalTitle: selectedModel?.title
27337
+ },
27338
+ navigate
27339
+ };
27340
+ };
27341
+ };
27342
+ var createRecommendedLessonsPageHook = createUseRecommendedLessonsPage;
27343
+
27344
+ // src/hooks/useRecommendedLessonDetails.ts
27345
+ var import_react88 = require("react");
27127
27346
  var import_zod8 = require("zod");
27128
27347
  var goalLessonSubjectSchema = import_zod8.z.object({
27129
27348
  id: import_zod8.z.string(),
@@ -27226,12 +27445,12 @@ var handleLessonDetailsFetchError = (error) => {
27226
27445
  };
27227
27446
  var createUseRecommendedLessonDetails = (apiClient) => {
27228
27447
  return (lessonId) => {
27229
- const [state, setState] = (0, import_react87.useState)({
27448
+ const [state, setState] = (0, import_react88.useState)({
27230
27449
  data: null,
27231
27450
  loading: true,
27232
27451
  error: null
27233
27452
  });
27234
- const fetchLessonDetails = (0, import_react87.useCallback)(async () => {
27453
+ const fetchLessonDetails = (0, import_react88.useCallback)(async () => {
27235
27454
  if (!lessonId) {
27236
27455
  setState({
27237
27456
  data: null,
@@ -27277,7 +27496,7 @@ var createUseRecommendedLessonDetails = (apiClient) => {
27277
27496
  });
27278
27497
  }
27279
27498
  }, [lessonId]);
27280
- (0, import_react87.useEffect)(() => {
27499
+ (0, import_react88.useEffect)(() => {
27281
27500
  fetchLessonDetails();
27282
27501
  }, [fetchLessonDetails]);
27283
27502
  return {
@@ -27289,10 +27508,10 @@ var createUseRecommendedLessonDetails = (apiClient) => {
27289
27508
  var createRecommendedLessonDetailsHook = createUseRecommendedLessonDetails;
27290
27509
 
27291
27510
  // src/components/ActivitiesHistory/ActivitiesHistory.tsx
27292
- var import_react91 = require("react");
27511
+ var import_react92 = require("react");
27293
27512
 
27294
27513
  // src/components/ActivitiesHistory/tabs/HistoryTab.tsx
27295
- var import_react89 = require("react");
27514
+ var import_react90 = require("react");
27296
27515
  var import_phosphor_react52 = require("phosphor-react");
27297
27516
 
27298
27517
  // src/components/ActivitiesHistory/config/historyTableColumns.tsx
@@ -27341,14 +27560,14 @@ var buildModelsFiltersFromParams = (params) => {
27341
27560
  };
27342
27561
 
27343
27562
  // src/components/ActivitiesHistory/utils/filterOptions.ts
27344
- var getSchoolOptions2 = (data) => {
27563
+ var getSchoolOptions3 = (data) => {
27345
27564
  if (!data?.schools) return [];
27346
27565
  return data.schools.map((school) => ({
27347
27566
  id: school.id,
27348
27567
  name: school.name
27349
27568
  }));
27350
27569
  };
27351
- var getSubjectOptions3 = (data) => {
27570
+ var getSubjectOptions4 = (data) => {
27352
27571
  if (!data?.subjects) return [];
27353
27572
  return data.subjects.map((subject) => ({
27354
27573
  id: subject.id,
@@ -27484,7 +27703,7 @@ var createHistoryFiltersConfig = (userData) => [
27484
27703
  key: "school",
27485
27704
  label: "Escola",
27486
27705
  selectedIds: [],
27487
- itens: getSchoolOptions2(userData)
27706
+ itens: getSchoolOptions3(userData)
27488
27707
  }
27489
27708
  ]
27490
27709
  },
@@ -27496,14 +27715,14 @@ var createHistoryFiltersConfig = (userData) => [
27496
27715
  key: "subject",
27497
27716
  label: "Mat\xE9ria",
27498
27717
  selectedIds: [],
27499
- itens: getSubjectOptions3(userData)
27718
+ itens: getSubjectOptions4(userData)
27500
27719
  }
27501
27720
  ]
27502
27721
  }
27503
27722
  ];
27504
27723
 
27505
27724
  // src/hooks/useActivitiesHistory.ts
27506
- var import_react88 = require("react");
27725
+ var import_react89 = require("react");
27507
27726
  var import_zod9 = require("zod");
27508
27727
  var import_dayjs5 = __toESM(require("dayjs"));
27509
27728
  var activityHistoryResponseSchema = import_zod9.z.object({
@@ -27562,13 +27781,13 @@ var handleActivityFetchError = createFetchErrorHandler(
27562
27781
  );
27563
27782
  var createUseActivitiesHistory = (fetchActivitiesHistory) => {
27564
27783
  return () => {
27565
- const [state, setState] = (0, import_react88.useState)({
27784
+ const [state, setState] = (0, import_react89.useState)({
27566
27785
  activities: [],
27567
27786
  loading: false,
27568
27787
  error: null,
27569
27788
  pagination: DEFAULT_ACTIVITIES_PAGINATION
27570
27789
  });
27571
- const fetchActivities = (0, import_react88.useCallback)(
27790
+ const fetchActivities = (0, import_react89.useCallback)(
27572
27791
  async (filters) => {
27573
27792
  setState((prev) => ({ ...prev, loading: true, error: null }));
27574
27793
  try {
@@ -27613,9 +27832,9 @@ var HistoryTab = ({
27613
27832
  mapSubjectNameToEnum: mapSubjectNameToEnum2,
27614
27833
  userFilterData
27615
27834
  }) => {
27616
- const fetchActivitiesHistoryRef = (0, import_react89.useRef)(fetchActivitiesHistory);
27835
+ const fetchActivitiesHistoryRef = (0, import_react90.useRef)(fetchActivitiesHistory);
27617
27836
  fetchActivitiesHistoryRef.current = fetchActivitiesHistory;
27618
- const useActivitiesHistory = (0, import_react89.useMemo)(
27837
+ const useActivitiesHistory = (0, import_react90.useMemo)(
27619
27838
  () => createUseActivitiesHistory(
27620
27839
  (filters) => fetchActivitiesHistoryRef.current(filters)
27621
27840
  ),
@@ -27628,15 +27847,15 @@ var HistoryTab = ({
27628
27847
  pagination,
27629
27848
  fetchActivities
27630
27849
  } = useActivitiesHistory();
27631
- const historyFilterConfigs = (0, import_react89.useMemo)(
27850
+ const historyFilterConfigs = (0, import_react90.useMemo)(
27632
27851
  () => createHistoryFiltersConfig(userFilterData),
27633
27852
  [userFilterData]
27634
27853
  );
27635
- const historyTableColumns = (0, import_react89.useMemo)(
27854
+ const historyTableColumns = (0, import_react90.useMemo)(
27636
27855
  () => createHistoryTableColumns(mapSubjectNameToEnum2),
27637
27856
  [mapSubjectNameToEnum2]
27638
27857
  );
27639
- const handleParamsChange = (0, import_react89.useCallback)(
27858
+ const handleParamsChange = (0, import_react90.useCallback)(
27640
27859
  (params) => {
27641
27860
  const filters = buildHistoryFiltersFromParams(params);
27642
27861
  fetchActivities(filters);
@@ -27728,14 +27947,14 @@ var createModelsFiltersConfig = (userData) => [
27728
27947
  key: "subject",
27729
27948
  label: "Mat\xE9ria",
27730
27949
  selectedIds: [],
27731
- itens: getSubjectOptions3(userData)
27950
+ itens: getSubjectOptions4(userData)
27732
27951
  }
27733
27952
  ]
27734
27953
  }
27735
27954
  ];
27736
27955
 
27737
27956
  // src/hooks/useActivityModels.ts
27738
- var import_react90 = require("react");
27957
+ var import_react91 = require("react");
27739
27958
  var import_zod10 = require("zod");
27740
27959
  var import_dayjs6 = __toESM(require("dayjs"));
27741
27960
  var activityDraftFiltersSchema = import_zod10.z.object({
@@ -27785,13 +28004,13 @@ var handleModelFetchError = createFetchErrorHandler(
27785
28004
  );
27786
28005
  var createUseActivityModels = (fetchActivityModels, deleteActivityModel) => {
27787
28006
  return () => {
27788
- const [state, setState] = (0, import_react90.useState)({
28007
+ const [state, setState] = (0, import_react91.useState)({
27789
28008
  models: [],
27790
28009
  loading: false,
27791
28010
  error: null,
27792
28011
  pagination: DEFAULT_MODELS_PAGINATION
27793
28012
  });
27794
- const fetchModels = (0, import_react90.useCallback)(
28013
+ const fetchModels = (0, import_react91.useCallback)(
27795
28014
  async (filters, subjectsMap) => {
27796
28015
  setState((prev) => ({ ...prev, loading: true, error: null }));
27797
28016
  try {
@@ -27826,7 +28045,7 @@ var createUseActivityModels = (fetchActivityModels, deleteActivityModel) => {
27826
28045
  },
27827
28046
  [fetchActivityModels]
27828
28047
  );
27829
- const deleteModel = (0, import_react90.useCallback)(
28048
+ const deleteModel = (0, import_react91.useCallback)(
27830
28049
  async (id) => {
27831
28050
  try {
27832
28051
  await deleteActivityModel(id);
@@ -27929,7 +28148,7 @@ var ActivitiesHistory = ({
27929
28148
  userFilterData,
27930
28149
  subjectsMap
27931
28150
  }) => {
27932
- const [activeTab, setActiveTab] = (0, import_react91.useState)("history" /* HISTORY */);
28151
+ const [activeTab, setActiveTab] = (0, import_react92.useState)("history" /* HISTORY */);
27933
28152
  return /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
27934
28153
  "div",
27935
28154
  {
@@ -28168,7 +28387,7 @@ var buildUserFilterData = (userData) => ({
28168
28387
  });
28169
28388
 
28170
28389
  // src/hooks/useChat.ts
28171
- var import_react92 = require("react");
28390
+ var import_react93 = require("react");
28172
28391
  var WS_STATES = {
28173
28392
  CONNECTING: 0,
28174
28393
  OPEN: 1,
@@ -28187,25 +28406,25 @@ function useChat({
28187
28406
  reconnectInterval = 3e3,
28188
28407
  maxReconnectAttempts = 5
28189
28408
  }) {
28190
- const [isConnected, setIsConnected] = (0, import_react92.useState)(false);
28191
- const [messages, setMessages] = (0, import_react92.useState)([]);
28192
- const [participants, setParticipants] = (0, import_react92.useState)([]);
28193
- const [error, setError] = (0, import_react92.useState)(null);
28194
- const wsRef = (0, import_react92.useRef)(null);
28195
- const reconnectAttemptsRef = (0, import_react92.useRef)(0);
28196
- const reconnectTimeoutRef = (0, import_react92.useRef)(
28409
+ const [isConnected, setIsConnected] = (0, import_react93.useState)(false);
28410
+ const [messages, setMessages] = (0, import_react93.useState)([]);
28411
+ const [participants, setParticipants] = (0, import_react93.useState)([]);
28412
+ const [error, setError] = (0, import_react93.useState)(null);
28413
+ const wsRef = (0, import_react93.useRef)(null);
28414
+ const reconnectAttemptsRef = (0, import_react93.useRef)(0);
28415
+ const reconnectTimeoutRef = (0, import_react93.useRef)(
28197
28416
  null
28198
28417
  );
28199
- const isManualDisconnectRef = (0, import_react92.useRef)(false);
28200
- const isConnectingRef = (0, import_react92.useRef)(false);
28201
- const connectRef = (0, import_react92.useRef)(() => {
28418
+ const isManualDisconnectRef = (0, import_react93.useRef)(false);
28419
+ const isConnectingRef = (0, import_react93.useRef)(false);
28420
+ const connectRef = (0, import_react93.useRef)(() => {
28202
28421
  });
28203
- const sendWsMessage = (0, import_react92.useCallback)((message) => {
28422
+ const sendWsMessage = (0, import_react93.useCallback)((message) => {
28204
28423
  if (wsRef.current?.readyState === WS_STATES.OPEN) {
28205
28424
  wsRef.current.send(JSON.stringify(message));
28206
28425
  }
28207
28426
  }, []);
28208
- const sendMessage = (0, import_react92.useCallback)(
28427
+ const sendMessage = (0, import_react93.useCallback)(
28209
28428
  (content) => {
28210
28429
  const trimmedContent = content.trim();
28211
28430
  if (!trimmedContent) return;
@@ -28216,12 +28435,12 @@ function useChat({
28216
28435
  },
28217
28436
  [sendWsMessage]
28218
28437
  );
28219
- const leave = (0, import_react92.useCallback)(() => {
28438
+ const leave = (0, import_react93.useCallback)(() => {
28220
28439
  isManualDisconnectRef.current = true;
28221
28440
  sendWsMessage({ type: "leave" });
28222
28441
  wsRef.current?.close(1e3, "User left");
28223
28442
  }, [sendWsMessage]);
28224
- const handleMessage = (0, import_react92.useCallback)(
28443
+ const handleMessage = (0, import_react93.useCallback)(
28225
28444
  (event) => {
28226
28445
  try {
28227
28446
  const data = JSON.parse(event.data);
@@ -28289,7 +28508,7 @@ function useChat({
28289
28508
  },
28290
28509
  [onError]
28291
28510
  );
28292
- const connect = (0, import_react92.useCallback)(() => {
28511
+ const connect = (0, import_react93.useCallback)(() => {
28293
28512
  if (isConnectingRef.current) {
28294
28513
  return;
28295
28514
  }
@@ -28343,12 +28562,12 @@ function useChat({
28343
28562
  maxReconnectAttempts
28344
28563
  ]);
28345
28564
  connectRef.current = connect;
28346
- const reconnect = (0, import_react92.useCallback)(() => {
28565
+ const reconnect = (0, import_react93.useCallback)(() => {
28347
28566
  isManualDisconnectRef.current = false;
28348
28567
  reconnectAttemptsRef.current = 0;
28349
28568
  connectRef.current();
28350
28569
  }, []);
28351
- (0, import_react92.useEffect)(() => {
28570
+ (0, import_react93.useEffect)(() => {
28352
28571
  if (!roomId) {
28353
28572
  return;
28354
28573
  }
@@ -28392,15 +28611,15 @@ function createUseChat(baseWsUrl) {
28392
28611
  }
28393
28612
 
28394
28613
  // src/hooks/useChatRooms.ts
28395
- var import_react93 = require("react");
28614
+ var import_react94 = require("react");
28396
28615
  function useChatRooms({
28397
28616
  apiClient
28398
28617
  }) {
28399
- const [rooms, setRooms] = (0, import_react93.useState)([]);
28400
- const [availableUsers, setAvailableUsers] = (0, import_react93.useState)([]);
28401
- const [loading, setLoading] = (0, import_react93.useState)(false);
28402
- const [error, setError] = (0, import_react93.useState)(null);
28403
- const fetchRooms = (0, import_react93.useCallback)(async () => {
28618
+ const [rooms, setRooms] = (0, import_react94.useState)([]);
28619
+ const [availableUsers, setAvailableUsers] = (0, import_react94.useState)([]);
28620
+ const [loading, setLoading] = (0, import_react94.useState)(false);
28621
+ const [error, setError] = (0, import_react94.useState)(null);
28622
+ const fetchRooms = (0, import_react94.useCallback)(async () => {
28404
28623
  setLoading(true);
28405
28624
  setError(null);
28406
28625
  try {
@@ -28416,7 +28635,7 @@ function useChatRooms({
28416
28635
  setLoading(false);
28417
28636
  }
28418
28637
  }, [apiClient]);
28419
- const fetchAvailableUsers = (0, import_react93.useCallback)(async () => {
28638
+ const fetchAvailableUsers = (0, import_react94.useCallback)(async () => {
28420
28639
  setLoading(true);
28421
28640
  setError(null);
28422
28641
  try {
@@ -28432,7 +28651,7 @@ function useChatRooms({
28432
28651
  setLoading(false);
28433
28652
  }
28434
28653
  }, [apiClient]);
28435
- const createRoom = (0, import_react93.useCallback)(
28654
+ const createRoom = (0, import_react94.useCallback)(
28436
28655
  async (participantIds) => {
28437
28656
  setLoading(true);
28438
28657
  setError(null);
@@ -28456,7 +28675,7 @@ function useChatRooms({
28456
28675
  },
28457
28676
  [apiClient, fetchRooms]
28458
28677
  );
28459
- const clearError = (0, import_react93.useCallback)(() => {
28678
+ const clearError = (0, import_react94.useCallback)(() => {
28460
28679
  setError(null);
28461
28680
  }, []);
28462
28681
  return {
@@ -28490,8 +28709,8 @@ var CHAT_MESSAGE_TYPES = {
28490
28709
  };
28491
28710
 
28492
28711
  // src/components/Chat/Chat.tsx
28493
- var import_react94 = require("react");
28494
- var import_react95 = require("@phosphor-icons/react");
28712
+ var import_react95 = require("react");
28713
+ var import_react96 = require("@phosphor-icons/react");
28495
28714
  var import_jsx_runtime125 = require("react/jsx-runtime");
28496
28715
  var RoomItem = ({
28497
28716
  room,
@@ -28508,7 +28727,7 @@ var RoomItem = ({
28508
28727
  isActive && "bg-primary-50 border-l-4 border-primary-500"
28509
28728
  ),
28510
28729
  children: /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { className: "flex items-start gap-3 w-full", children: [
28511
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("div", { className: "w-10 h-10 rounded-full bg-primary-100 flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react95.UsersIcon, { size: 20, className: "text-primary-600" }) }),
28730
+ /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("div", { className: "w-10 h-10 rounded-full bg-primary-100 flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react96.UsersIcon, { size: 20, className: "text-primary-600" }) }),
28512
28731
  /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { className: "flex-1 min-w-0", children: [
28513
28732
  /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(Text_default, { size: "sm", weight: "semibold", className: "text-text-900 truncate", children: room.name }),
28514
28733
  room.lastMessage && /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(Text_default, { size: "xs", className: "text-text-500 truncate mt-1", children: [
@@ -28638,16 +28857,16 @@ function ChatContent({
28638
28857
  onRoomChange,
28639
28858
  onBackToList
28640
28859
  }) {
28641
- const [view, setView] = (0, import_react94.useState)("list");
28642
- const [selectedRoom, setSelectedRoom] = (0, import_react94.useState)(
28860
+ const [view, setView] = (0, import_react95.useState)("list");
28861
+ const [selectedRoom, setSelectedRoom] = (0, import_react95.useState)(
28643
28862
  null
28644
28863
  );
28645
- const [selectedUserIds, setSelectedUserIds] = (0, import_react94.useState)(
28864
+ const [selectedUserIds, setSelectedUserIds] = (0, import_react95.useState)(
28646
28865
  /* @__PURE__ */ new Set()
28647
28866
  );
28648
- const [messageInput, setMessageInput] = (0, import_react94.useState)("");
28649
- const [showCreateModal, setShowCreateModal] = (0, import_react94.useState)(false);
28650
- const hasHandledInitialRoomRef = (0, import_react94.useRef)(false);
28867
+ const [messageInput, setMessageInput] = (0, import_react95.useState)("");
28868
+ const [showCreateModal, setShowCreateModal] = (0, import_react95.useState)(false);
28869
+ const hasHandledInitialRoomRef = (0, import_react95.useRef)(false);
28651
28870
  const {
28652
28871
  rooms,
28653
28872
  availableUsers,
@@ -28675,10 +28894,10 @@ function ChatContent({
28675
28894
  const getRoleLabel = () => {
28676
28895
  return userRole === "TEACHER" /* TEACHER */ ? "Professor" : "Aluno";
28677
28896
  };
28678
- (0, import_react94.useEffect)(() => {
28897
+ (0, import_react95.useEffect)(() => {
28679
28898
  fetchRooms();
28680
28899
  }, [fetchRooms]);
28681
- (0, import_react94.useEffect)(() => {
28900
+ (0, import_react95.useEffect)(() => {
28682
28901
  if (hasHandledInitialRoomRef.current) {
28683
28902
  return;
28684
28903
  }
@@ -28700,7 +28919,7 @@ function ChatContent({
28700
28919
  onBackToList?.();
28701
28920
  }
28702
28921
  }, [initialRoomId, rooms, roomsLoading, onBackToList]);
28703
- const handleSelectRoom = (0, import_react94.useCallback)(
28922
+ const handleSelectRoom = (0, import_react95.useCallback)(
28704
28923
  (room) => {
28705
28924
  setSelectedRoom(room);
28706
28925
  setView("room");
@@ -28708,12 +28927,12 @@ function ChatContent({
28708
28927
  },
28709
28928
  [onRoomChange]
28710
28929
  );
28711
- const handleOpenCreateModal = (0, import_react94.useCallback)(async () => {
28930
+ const handleOpenCreateModal = (0, import_react95.useCallback)(async () => {
28712
28931
  await fetchAvailableUsers();
28713
28932
  setSelectedUserIds(/* @__PURE__ */ new Set());
28714
28933
  setShowCreateModal(true);
28715
28934
  }, [fetchAvailableUsers]);
28716
- const handleToggleUser = (0, import_react94.useCallback)((id) => {
28935
+ const handleToggleUser = (0, import_react95.useCallback)((id) => {
28717
28936
  setSelectedUserIds((prev) => {
28718
28937
  const next = new Set(prev);
28719
28938
  if (next.has(id)) {
@@ -28724,7 +28943,7 @@ function ChatContent({
28724
28943
  return next;
28725
28944
  });
28726
28945
  }, []);
28727
- const handleCreateRoom = (0, import_react94.useCallback)(async () => {
28946
+ const handleCreateRoom = (0, import_react95.useCallback)(async () => {
28728
28947
  if (selectedUserIds.size === 0) return;
28729
28948
  const room = await createRoom(Array.from(selectedUserIds));
28730
28949
  if (room) {
@@ -28733,12 +28952,12 @@ function ChatContent({
28733
28952
  onRoomChange?.(room.id);
28734
28953
  }
28735
28954
  }, [selectedUserIds, createRoom, onRoomChange]);
28736
- const handleSendMessage = (0, import_react94.useCallback)(() => {
28955
+ const handleSendMessage = (0, import_react95.useCallback)(() => {
28737
28956
  if (!messageInput.trim()) return;
28738
28957
  sendMessage(messageInput);
28739
28958
  setMessageInput("");
28740
28959
  }, [messageInput, sendMessage]);
28741
- const handleBackToList = (0, import_react94.useCallback)(() => {
28960
+ const handleBackToList = (0, import_react95.useCallback)(() => {
28742
28961
  setSelectedRoom(null);
28743
28962
  setView("list");
28744
28963
  onBackToList?.();
@@ -28791,7 +29010,7 @@ function ChatContent({
28791
29010
  variant: "solid",
28792
29011
  size: "small",
28793
29012
  onClick: handleOpenCreateModal,
28794
- iconLeft: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react95.PlusIcon, { size: 16 }),
29013
+ iconLeft: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react96.PlusIcon, { size: 16 }),
28795
29014
  children: "Nova conversa"
28796
29015
  }
28797
29016
  )
@@ -28831,7 +29050,7 @@ function ChatContent({
28831
29050
  return /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { className: "flex h-full", children: [
28832
29051
  /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { className: "flex-1 flex flex-col", children: [
28833
29052
  /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { className: "p-4 border-b border-background-200 flex items-center gap-3", children: [
28834
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(Button_default, { variant: "link", size: "small", onClick: handleBackToList, children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react95.XIcon, { size: 20 }) }),
29053
+ /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(Button_default, { variant: "link", size: "small", onClick: handleBackToList, children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react96.XIcon, { size: 20 }) }),
28835
29054
  /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { className: "flex-1", children: [
28836
29055
  /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(Text_default, { size: "md", weight: "semibold", className: "text-text-900", children: selectedRoom.name }),
28837
29056
  /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(Text_default, { size: "xs", className: "text-text-500", children: isConnected ? "Conectado" : "Conectando..." })
@@ -28860,7 +29079,7 @@ function ChatContent({
28860
29079
  variant: "solid",
28861
29080
  onClick: handleSendMessage,
28862
29081
  disabled: !messageInput.trim() || !isConnected,
28863
- children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react95.PaperPlaneTiltIcon, { size: 20 })
29082
+ children: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_react96.PaperPlaneTiltIcon, { size: 20 })
28864
29083
  }
28865
29084
  )
28866
29085
  ] }) })
@@ -28984,7 +29203,7 @@ var CalendarActivityStatus = /* @__PURE__ */ ((CalendarActivityStatus2) => {
28984
29203
  })(CalendarActivityStatus || {});
28985
29204
 
28986
29205
  // src/hooks/useSendActivity.ts
28987
- var import_react96 = require("react");
29206
+ var import_react97 = require("react");
28988
29207
  var import_dayjs7 = __toESM(require("dayjs"));
28989
29208
  function transformToCategoryConfig(data) {
28990
29209
  return [
@@ -29039,21 +29258,21 @@ function useSendActivity(config) {
29039
29258
  onSuccess,
29040
29259
  onError
29041
29260
  } = config;
29042
- const [isOpen, setIsOpen] = (0, import_react96.useState)(false);
29043
- const [selectedModel, setSelectedModel] = (0, import_react96.useState)(
29261
+ const [isOpen, setIsOpen] = (0, import_react97.useState)(false);
29262
+ const [selectedModel, setSelectedModel] = (0, import_react97.useState)(
29044
29263
  null
29045
29264
  );
29046
- const [categories, setCategories] = (0, import_react96.useState)([]);
29047
- const [isLoading, setIsLoading] = (0, import_react96.useState)(false);
29048
- const [isCategoriesLoading, setIsCategoriesLoading] = (0, import_react96.useState)(false);
29049
- const categoriesLoadedRef = (0, import_react96.useRef)(false);
29050
- const initialData = (0, import_react96.useMemo)(() => {
29265
+ const [categories, setCategories] = (0, import_react97.useState)([]);
29266
+ const [isLoading, setIsLoading] = (0, import_react97.useState)(false);
29267
+ const [isCategoriesLoading, setIsCategoriesLoading] = (0, import_react97.useState)(false);
29268
+ const categoriesLoadedRef = (0, import_react97.useRef)(false);
29269
+ const initialData = (0, import_react97.useMemo)(() => {
29051
29270
  if (!selectedModel) return void 0;
29052
29271
  return {
29053
29272
  title: selectedModel.title
29054
29273
  };
29055
29274
  }, [selectedModel]);
29056
- const loadCategories = (0, import_react96.useCallback)(async () => {
29275
+ const loadCategories = (0, import_react97.useCallback)(async () => {
29057
29276
  if (categoriesLoadedRef.current) return;
29058
29277
  setIsCategoriesLoading(true);
29059
29278
  try {
@@ -29068,7 +29287,7 @@ function useSendActivity(config) {
29068
29287
  setIsCategoriesLoading(false);
29069
29288
  }
29070
29289
  }, [fetchCategories, onError]);
29071
- const openModal = (0, import_react96.useCallback)(
29290
+ const openModal = (0, import_react97.useCallback)(
29072
29291
  (model) => {
29073
29292
  setSelectedModel(model);
29074
29293
  setIsOpen(true);
@@ -29076,17 +29295,17 @@ function useSendActivity(config) {
29076
29295
  },
29077
29296
  [loadCategories]
29078
29297
  );
29079
- const closeModal = (0, import_react96.useCallback)(() => {
29298
+ const closeModal = (0, import_react97.useCallback)(() => {
29080
29299
  setIsOpen(false);
29081
29300
  setSelectedModel(null);
29082
29301
  }, []);
29083
- const onCategoriesChange = (0, import_react96.useCallback)(
29302
+ const onCategoriesChange = (0, import_react97.useCallback)(
29084
29303
  (updatedCategories) => {
29085
29304
  setCategories(updatedCategories);
29086
29305
  },
29087
29306
  []
29088
29307
  );
29089
- const handleSubmit = (0, import_react96.useCallback)(
29308
+ const handleSubmit = (0, import_react97.useCallback)(
29090
29309
  async (data) => {
29091
29310
  if (!selectedModel) return;
29092
29311
  setIsLoading(true);
@@ -29343,6 +29562,7 @@ function useSendActivity(config) {
29343
29562
  createQuestionsListHook,
29344
29563
  createRecommendedLessonDetailsHook,
29345
29564
  createRecommendedLessonsHistoryHook,
29565
+ createRecommendedLessonsPageHook,
29346
29566
  createUseActivitiesHistory,
29347
29567
  createUseActivityFiltersData,
29348
29568
  createUseActivityModels,
@@ -29354,6 +29574,7 @@ function useSendActivity(config) {
29354
29574
  createUseQuestionsList,
29355
29575
  createUseRecommendedLessonDetails,
29356
29576
  createUseRecommendedLessonsHistory,
29577
+ createUseRecommendedLessonsPage,
29357
29578
  createZustandAuthAdapter,
29358
29579
  deriveStudentStatus,
29359
29580
  determineGoalStatus,