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.mjs CHANGED
@@ -26972,8 +26972,225 @@ var RecommendedLessonDetails = ({
26972
26972
  };
26973
26973
  var RecommendedLessonDetails_default = RecommendedLessonDetails;
26974
26974
 
26975
+ // src/hooks/useRecommendedLessonsPage.ts
26976
+ import { useCallback as useCallback29, useRef as useRef31, useMemo as useMemo29, useState as useState48 } from "react";
26977
+ var buildQueryParams2 = (filters) => {
26978
+ if (!filters) return {};
26979
+ const params = {};
26980
+ for (const key in filters) {
26981
+ const value = filters[key];
26982
+ if (value !== void 0 && value !== null) {
26983
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
26984
+ params[key] = value;
26985
+ }
26986
+ }
26987
+ }
26988
+ return params;
26989
+ };
26990
+ var getSchoolOptions2 = (userData) => {
26991
+ if (!userData?.userInstitutions) return [];
26992
+ const schoolMap = /* @__PURE__ */ new Map();
26993
+ userData.userInstitutions.forEach((inst) => {
26994
+ if (inst.school?.id && inst.school?.name) {
26995
+ schoolMap.set(inst.school.id, inst.school.name);
26996
+ }
26997
+ });
26998
+ return Array.from(schoolMap.entries()).map(([id, name]) => ({ id, name }));
26999
+ };
27000
+ var getClassOptions2 = (userData) => {
27001
+ if (!userData?.userInstitutions) return [];
27002
+ const classMap = /* @__PURE__ */ new Map();
27003
+ userData.userInstitutions.forEach((inst) => {
27004
+ if (inst.class?.id && inst.class?.name) {
27005
+ classMap.set(inst.class.id, inst.class.name);
27006
+ }
27007
+ });
27008
+ return Array.from(classMap.entries()).map(([id, name]) => ({ id, name }));
27009
+ };
27010
+ var getSubjectOptions3 = (userData) => {
27011
+ if (!userData?.subTeacherTopicClasses) return [];
27012
+ const subjectMap = /* @__PURE__ */ new Map();
27013
+ userData.subTeacherTopicClasses.forEach((stc) => {
27014
+ if (stc.subject?.id && stc.subject?.name) {
27015
+ subjectMap.set(stc.subject.id, stc.subject.name);
27016
+ }
27017
+ });
27018
+ return Array.from(subjectMap.entries()).map(([id, name]) => ({ id, name }));
27019
+ };
27020
+ var createUseRecommendedLessonsPage = (config) => {
27021
+ const {
27022
+ api,
27023
+ navigate,
27024
+ userData,
27025
+ paths,
27026
+ endpoints,
27027
+ texts,
27028
+ emptyStateImage,
27029
+ noSearchImage,
27030
+ mapSubjectNameToEnum: mapSubjectNameToEnum2
27031
+ } = config;
27032
+ return () => {
27033
+ const goalsMapRef = useRef31(/* @__PURE__ */ new Map());
27034
+ const [sendModalOpen, setSendModalOpen] = useState48(false);
27035
+ const [selectedModel, setSelectedModel] = useState48(null);
27036
+ const [sendModalLoading, setSendModalLoading] = useState48(false);
27037
+ const [sendModalCategories, setSendModalCategories] = useState48([]);
27038
+ const userFilterData = useMemo29(
27039
+ () => ({
27040
+ schools: getSchoolOptions2(userData),
27041
+ classes: getClassOptions2(userData),
27042
+ subjects: getSubjectOptions3(userData)
27043
+ }),
27044
+ [userData]
27045
+ );
27046
+ const subjectsMap = useMemo29(() => {
27047
+ const map = /* @__PURE__ */ new Map();
27048
+ const subjects = getSubjectOptions3(userData);
27049
+ subjects.forEach((s) => map.set(s.id, s.name));
27050
+ return map;
27051
+ }, [userData]);
27052
+ const fetchGoalsHistory = useCallback29(
27053
+ async (filters) => {
27054
+ const params = buildQueryParams2(filters);
27055
+ const response = await api.get(
27056
+ endpoints.goalsHistory,
27057
+ { params }
27058
+ );
27059
+ const goals = response.data.data.goals;
27060
+ goals.forEach((goal) => {
27061
+ goalsMapRef.current.set(goal.goal.id, goal);
27062
+ });
27063
+ return response.data;
27064
+ },
27065
+ [api, endpoints.goalsHistory]
27066
+ );
27067
+ const fetchGoalModels = useCallback29(
27068
+ async (filters) => {
27069
+ const params = buildQueryParams2({
27070
+ ...filters,
27071
+ type: "MODELO" /* MODELO */
27072
+ });
27073
+ const response = await api.get(
27074
+ endpoints.goalDrafts,
27075
+ { params }
27076
+ );
27077
+ return response.data;
27078
+ },
27079
+ [api, endpoints.goalDrafts]
27080
+ );
27081
+ const deleteGoalModel = useCallback29(
27082
+ async (id) => {
27083
+ await api.delete(`${endpoints.goalDrafts}/${id}`);
27084
+ },
27085
+ [api, endpoints.goalDrafts]
27086
+ );
27087
+ const handleCreateLesson = useCallback29(() => {
27088
+ navigate(paths.createLesson);
27089
+ }, []);
27090
+ const handleCreateModel = useCallback29(() => {
27091
+ navigate(paths.createModel);
27092
+ }, []);
27093
+ const handleRowClick = useCallback29((row) => {
27094
+ const originalData = goalsMapRef.current.get(row.id);
27095
+ navigate(`${paths.lessonDetails}/${row.id}`, {
27096
+ state: { goalData: originalData }
27097
+ });
27098
+ }, []);
27099
+ const handleEditGoal = useCallback29((id) => {
27100
+ navigate(`${paths.editLesson}/${id}/editar`);
27101
+ }, []);
27102
+ const handleEditModel = useCallback29((model) => {
27103
+ navigate(`${paths.editModel}${model.id}`);
27104
+ }, []);
27105
+ const handleSendLesson = useCallback29(
27106
+ (model) => {
27107
+ setSelectedModel(model);
27108
+ const classes = getClassOptions2(userData);
27109
+ const categories = [];
27110
+ if (classes.length > 0) {
27111
+ categories.push({
27112
+ key: "students",
27113
+ label: "Turmas",
27114
+ selectedIds: [],
27115
+ itens: classes.map((cls) => ({
27116
+ id: cls.id,
27117
+ name: cls.name,
27118
+ studentId: cls.id,
27119
+ userInstitutionId: cls.id
27120
+ }))
27121
+ });
27122
+ }
27123
+ setSendModalCategories(categories);
27124
+ setSendModalOpen(true);
27125
+ },
27126
+ [userData]
27127
+ );
27128
+ const handleSendLessonSubmit = useCallback29(
27129
+ async (formData) => {
27130
+ if (!selectedModel) return;
27131
+ setSendModalLoading(true);
27132
+ try {
27133
+ await api.post(endpoints.submitGoal, {
27134
+ draftId: selectedModel.id,
27135
+ students: formData.students,
27136
+ startDate: `${formData.startDate}T${formData.startTime}:00`,
27137
+ finalDate: `${formData.finalDate}T${formData.finalTime}:00`
27138
+ });
27139
+ setSendModalOpen(false);
27140
+ setSelectedModel(null);
27141
+ } finally {
27142
+ setSendModalLoading(false);
27143
+ }
27144
+ },
27145
+ [api, endpoints.submitGoal, selectedModel]
27146
+ );
27147
+ const handleSendModalClose = useCallback29(() => {
27148
+ setSendModalOpen(false);
27149
+ setSelectedModel(null);
27150
+ }, []);
27151
+ const handleCategoriesChange = useCallback29(
27152
+ (categories) => {
27153
+ setSendModalCategories(categories);
27154
+ },
27155
+ []
27156
+ );
27157
+ return {
27158
+ historyProps: {
27159
+ fetchGoalsHistory,
27160
+ fetchGoalModels,
27161
+ deleteGoalModel,
27162
+ onCreateLesson: handleCreateLesson,
27163
+ onCreateModel: handleCreateModel,
27164
+ onRowClick: handleRowClick,
27165
+ onEditGoal: handleEditGoal,
27166
+ onEditModel: handleEditModel,
27167
+ onSendLesson: handleSendLesson,
27168
+ emptyStateImage,
27169
+ noSearchImage,
27170
+ mapSubjectNameToEnum: mapSubjectNameToEnum2,
27171
+ userFilterData,
27172
+ subjectsMap,
27173
+ title: texts.title,
27174
+ createButtonText: texts.createButtonText,
27175
+ searchPlaceholder: texts.searchPlaceholder
27176
+ },
27177
+ modalProps: {
27178
+ isOpen: sendModalOpen,
27179
+ onClose: handleSendModalClose,
27180
+ onSubmit: handleSendLessonSubmit,
27181
+ categories: sendModalCategories,
27182
+ onCategoriesChange: handleCategoriesChange,
27183
+ isLoading: sendModalLoading,
27184
+ modalTitle: selectedModel?.title
27185
+ },
27186
+ navigate
27187
+ };
27188
+ };
27189
+ };
27190
+ var createRecommendedLessonsPageHook = createUseRecommendedLessonsPage;
27191
+
26975
27192
  // src/hooks/useRecommendedLessonDetails.ts
26976
- import { useState as useState48, useCallback as useCallback29, useEffect as useEffect49 } from "react";
27193
+ import { useState as useState49, useCallback as useCallback30, useEffect as useEffect49 } from "react";
26977
27194
  import { z as z7 } from "zod";
26978
27195
  var goalLessonSubjectSchema = z7.object({
26979
27196
  id: z7.string(),
@@ -27076,12 +27293,12 @@ var handleLessonDetailsFetchError = (error) => {
27076
27293
  };
27077
27294
  var createUseRecommendedLessonDetails = (apiClient) => {
27078
27295
  return (lessonId) => {
27079
- const [state, setState] = useState48({
27296
+ const [state, setState] = useState49({
27080
27297
  data: null,
27081
27298
  loading: true,
27082
27299
  error: null
27083
27300
  });
27084
- const fetchLessonDetails = useCallback29(async () => {
27301
+ const fetchLessonDetails = useCallback30(async () => {
27085
27302
  if (!lessonId) {
27086
27303
  setState({
27087
27304
  data: null,
@@ -27139,10 +27356,10 @@ var createUseRecommendedLessonDetails = (apiClient) => {
27139
27356
  var createRecommendedLessonDetailsHook = createUseRecommendedLessonDetails;
27140
27357
 
27141
27358
  // src/components/ActivitiesHistory/ActivitiesHistory.tsx
27142
- import { useState as useState51 } from "react";
27359
+ import { useState as useState52 } from "react";
27143
27360
 
27144
27361
  // src/components/ActivitiesHistory/tabs/HistoryTab.tsx
27145
- import { useCallback as useCallback31, useMemo as useMemo29, useRef as useRef31 } from "react";
27362
+ import { useCallback as useCallback32, useMemo as useMemo30, useRef as useRef32 } from "react";
27146
27363
  import { Plus as Plus5 } from "phosphor-react";
27147
27364
 
27148
27365
  // src/components/ActivitiesHistory/config/historyTableColumns.tsx
@@ -27191,14 +27408,14 @@ var buildModelsFiltersFromParams = (params) => {
27191
27408
  };
27192
27409
 
27193
27410
  // src/components/ActivitiesHistory/utils/filterOptions.ts
27194
- var getSchoolOptions2 = (data) => {
27411
+ var getSchoolOptions3 = (data) => {
27195
27412
  if (!data?.schools) return [];
27196
27413
  return data.schools.map((school) => ({
27197
27414
  id: school.id,
27198
27415
  name: school.name
27199
27416
  }));
27200
27417
  };
27201
- var getSubjectOptions3 = (data) => {
27418
+ var getSubjectOptions4 = (data) => {
27202
27419
  if (!data?.subjects) return [];
27203
27420
  return data.subjects.map((subject) => ({
27204
27421
  id: subject.id,
@@ -27334,7 +27551,7 @@ var createHistoryFiltersConfig = (userData) => [
27334
27551
  key: "school",
27335
27552
  label: "Escola",
27336
27553
  selectedIds: [],
27337
- itens: getSchoolOptions2(userData)
27554
+ itens: getSchoolOptions3(userData)
27338
27555
  }
27339
27556
  ]
27340
27557
  },
@@ -27346,14 +27563,14 @@ var createHistoryFiltersConfig = (userData) => [
27346
27563
  key: "subject",
27347
27564
  label: "Mat\xE9ria",
27348
27565
  selectedIds: [],
27349
- itens: getSubjectOptions3(userData)
27566
+ itens: getSubjectOptions4(userData)
27350
27567
  }
27351
27568
  ]
27352
27569
  }
27353
27570
  ];
27354
27571
 
27355
27572
  // src/hooks/useActivitiesHistory.ts
27356
- import { useState as useState49, useCallback as useCallback30 } from "react";
27573
+ import { useState as useState50, useCallback as useCallback31 } from "react";
27357
27574
  import { z as z8 } from "zod";
27358
27575
  import dayjs5 from "dayjs";
27359
27576
  var activityHistoryResponseSchema = z8.object({
@@ -27412,13 +27629,13 @@ var handleActivityFetchError = createFetchErrorHandler(
27412
27629
  );
27413
27630
  var createUseActivitiesHistory = (fetchActivitiesHistory) => {
27414
27631
  return () => {
27415
- const [state, setState] = useState49({
27632
+ const [state, setState] = useState50({
27416
27633
  activities: [],
27417
27634
  loading: false,
27418
27635
  error: null,
27419
27636
  pagination: DEFAULT_ACTIVITIES_PAGINATION
27420
27637
  });
27421
- const fetchActivities = useCallback30(
27638
+ const fetchActivities = useCallback31(
27422
27639
  async (filters) => {
27423
27640
  setState((prev) => ({ ...prev, loading: true, error: null }));
27424
27641
  try {
@@ -27463,9 +27680,9 @@ var HistoryTab = ({
27463
27680
  mapSubjectNameToEnum: mapSubjectNameToEnum2,
27464
27681
  userFilterData
27465
27682
  }) => {
27466
- const fetchActivitiesHistoryRef = useRef31(fetchActivitiesHistory);
27683
+ const fetchActivitiesHistoryRef = useRef32(fetchActivitiesHistory);
27467
27684
  fetchActivitiesHistoryRef.current = fetchActivitiesHistory;
27468
- const useActivitiesHistory = useMemo29(
27685
+ const useActivitiesHistory = useMemo30(
27469
27686
  () => createUseActivitiesHistory(
27470
27687
  (filters) => fetchActivitiesHistoryRef.current(filters)
27471
27688
  ),
@@ -27478,15 +27695,15 @@ var HistoryTab = ({
27478
27695
  pagination,
27479
27696
  fetchActivities
27480
27697
  } = useActivitiesHistory();
27481
- const historyFilterConfigs = useMemo29(
27698
+ const historyFilterConfigs = useMemo30(
27482
27699
  () => createHistoryFiltersConfig(userFilterData),
27483
27700
  [userFilterData]
27484
27701
  );
27485
- const historyTableColumns = useMemo29(
27702
+ const historyTableColumns = useMemo30(
27486
27703
  () => createHistoryTableColumns(mapSubjectNameToEnum2),
27487
27704
  [mapSubjectNameToEnum2]
27488
27705
  );
27489
- const handleParamsChange = useCallback31(
27706
+ const handleParamsChange = useCallback32(
27490
27707
  (params) => {
27491
27708
  const filters = buildHistoryFiltersFromParams(params);
27492
27709
  fetchActivities(filters);
@@ -27578,14 +27795,14 @@ var createModelsFiltersConfig = (userData) => [
27578
27795
  key: "subject",
27579
27796
  label: "Mat\xE9ria",
27580
27797
  selectedIds: [],
27581
- itens: getSubjectOptions3(userData)
27798
+ itens: getSubjectOptions4(userData)
27582
27799
  }
27583
27800
  ]
27584
27801
  }
27585
27802
  ];
27586
27803
 
27587
27804
  // src/hooks/useActivityModels.ts
27588
- import { useState as useState50, useCallback as useCallback32 } from "react";
27805
+ import { useState as useState51, useCallback as useCallback33 } from "react";
27589
27806
  import { z as z9 } from "zod";
27590
27807
  import dayjs6 from "dayjs";
27591
27808
  var activityDraftFiltersSchema = z9.object({
@@ -27635,13 +27852,13 @@ var handleModelFetchError = createFetchErrorHandler(
27635
27852
  );
27636
27853
  var createUseActivityModels = (fetchActivityModels, deleteActivityModel) => {
27637
27854
  return () => {
27638
- const [state, setState] = useState50({
27855
+ const [state, setState] = useState51({
27639
27856
  models: [],
27640
27857
  loading: false,
27641
27858
  error: null,
27642
27859
  pagination: DEFAULT_MODELS_PAGINATION
27643
27860
  });
27644
- const fetchModels = useCallback32(
27861
+ const fetchModels = useCallback33(
27645
27862
  async (filters, subjectsMap) => {
27646
27863
  setState((prev) => ({ ...prev, loading: true, error: null }));
27647
27864
  try {
@@ -27676,7 +27893,7 @@ var createUseActivityModels = (fetchActivityModels, deleteActivityModel) => {
27676
27893
  },
27677
27894
  [fetchActivityModels]
27678
27895
  );
27679
- const deleteModel = useCallback32(
27896
+ const deleteModel = useCallback33(
27680
27897
  async (id) => {
27681
27898
  try {
27682
27899
  await deleteActivityModel(id);
@@ -27779,7 +27996,7 @@ var ActivitiesHistory = ({
27779
27996
  userFilterData,
27780
27997
  subjectsMap
27781
27998
  }) => {
27782
- const [activeTab, setActiveTab] = useState51("history" /* HISTORY */);
27999
+ const [activeTab, setActiveTab] = useState52("history" /* HISTORY */);
27783
28000
  return /* @__PURE__ */ jsxs97(
27784
28001
  "div",
27785
28002
  {
@@ -28018,7 +28235,7 @@ var buildUserFilterData = (userData) => ({
28018
28235
  });
28019
28236
 
28020
28237
  // src/hooks/useChat.ts
28021
- import { useState as useState52, useEffect as useEffect50, useCallback as useCallback33, useRef as useRef32 } from "react";
28238
+ import { useState as useState53, useEffect as useEffect50, useCallback as useCallback34, useRef as useRef33 } from "react";
28022
28239
  var WS_STATES = {
28023
28240
  CONNECTING: 0,
28024
28241
  OPEN: 1,
@@ -28037,25 +28254,25 @@ function useChat({
28037
28254
  reconnectInterval = 3e3,
28038
28255
  maxReconnectAttempts = 5
28039
28256
  }) {
28040
- const [isConnected, setIsConnected] = useState52(false);
28041
- const [messages, setMessages] = useState52([]);
28042
- const [participants, setParticipants] = useState52([]);
28043
- const [error, setError] = useState52(null);
28044
- const wsRef = useRef32(null);
28045
- const reconnectAttemptsRef = useRef32(0);
28046
- const reconnectTimeoutRef = useRef32(
28257
+ const [isConnected, setIsConnected] = useState53(false);
28258
+ const [messages, setMessages] = useState53([]);
28259
+ const [participants, setParticipants] = useState53([]);
28260
+ const [error, setError] = useState53(null);
28261
+ const wsRef = useRef33(null);
28262
+ const reconnectAttemptsRef = useRef33(0);
28263
+ const reconnectTimeoutRef = useRef33(
28047
28264
  null
28048
28265
  );
28049
- const isManualDisconnectRef = useRef32(false);
28050
- const isConnectingRef = useRef32(false);
28051
- const connectRef = useRef32(() => {
28266
+ const isManualDisconnectRef = useRef33(false);
28267
+ const isConnectingRef = useRef33(false);
28268
+ const connectRef = useRef33(() => {
28052
28269
  });
28053
- const sendWsMessage = useCallback33((message) => {
28270
+ const sendWsMessage = useCallback34((message) => {
28054
28271
  if (wsRef.current?.readyState === WS_STATES.OPEN) {
28055
28272
  wsRef.current.send(JSON.stringify(message));
28056
28273
  }
28057
28274
  }, []);
28058
- const sendMessage = useCallback33(
28275
+ const sendMessage = useCallback34(
28059
28276
  (content) => {
28060
28277
  const trimmedContent = content.trim();
28061
28278
  if (!trimmedContent) return;
@@ -28066,12 +28283,12 @@ function useChat({
28066
28283
  },
28067
28284
  [sendWsMessage]
28068
28285
  );
28069
- const leave = useCallback33(() => {
28286
+ const leave = useCallback34(() => {
28070
28287
  isManualDisconnectRef.current = true;
28071
28288
  sendWsMessage({ type: "leave" });
28072
28289
  wsRef.current?.close(1e3, "User left");
28073
28290
  }, [sendWsMessage]);
28074
- const handleMessage = useCallback33(
28291
+ const handleMessage = useCallback34(
28075
28292
  (event) => {
28076
28293
  try {
28077
28294
  const data = JSON.parse(event.data);
@@ -28139,7 +28356,7 @@ function useChat({
28139
28356
  },
28140
28357
  [onError]
28141
28358
  );
28142
- const connect = useCallback33(() => {
28359
+ const connect = useCallback34(() => {
28143
28360
  if (isConnectingRef.current) {
28144
28361
  return;
28145
28362
  }
@@ -28193,7 +28410,7 @@ function useChat({
28193
28410
  maxReconnectAttempts
28194
28411
  ]);
28195
28412
  connectRef.current = connect;
28196
- const reconnect = useCallback33(() => {
28413
+ const reconnect = useCallback34(() => {
28197
28414
  isManualDisconnectRef.current = false;
28198
28415
  reconnectAttemptsRef.current = 0;
28199
28416
  connectRef.current();
@@ -28242,15 +28459,15 @@ function createUseChat(baseWsUrl) {
28242
28459
  }
28243
28460
 
28244
28461
  // src/hooks/useChatRooms.ts
28245
- import { useState as useState53, useCallback as useCallback34 } from "react";
28462
+ import { useState as useState54, useCallback as useCallback35 } from "react";
28246
28463
  function useChatRooms({
28247
28464
  apiClient
28248
28465
  }) {
28249
- const [rooms, setRooms] = useState53([]);
28250
- const [availableUsers, setAvailableUsers] = useState53([]);
28251
- const [loading, setLoading] = useState53(false);
28252
- const [error, setError] = useState53(null);
28253
- const fetchRooms = useCallback34(async () => {
28466
+ const [rooms, setRooms] = useState54([]);
28467
+ const [availableUsers, setAvailableUsers] = useState54([]);
28468
+ const [loading, setLoading] = useState54(false);
28469
+ const [error, setError] = useState54(null);
28470
+ const fetchRooms = useCallback35(async () => {
28254
28471
  setLoading(true);
28255
28472
  setError(null);
28256
28473
  try {
@@ -28266,7 +28483,7 @@ function useChatRooms({
28266
28483
  setLoading(false);
28267
28484
  }
28268
28485
  }, [apiClient]);
28269
- const fetchAvailableUsers = useCallback34(async () => {
28486
+ const fetchAvailableUsers = useCallback35(async () => {
28270
28487
  setLoading(true);
28271
28488
  setError(null);
28272
28489
  try {
@@ -28282,7 +28499,7 @@ function useChatRooms({
28282
28499
  setLoading(false);
28283
28500
  }
28284
28501
  }, [apiClient]);
28285
- const createRoom = useCallback34(
28502
+ const createRoom = useCallback35(
28286
28503
  async (participantIds) => {
28287
28504
  setLoading(true);
28288
28505
  setError(null);
@@ -28306,7 +28523,7 @@ function useChatRooms({
28306
28523
  },
28307
28524
  [apiClient, fetchRooms]
28308
28525
  );
28309
- const clearError = useCallback34(() => {
28526
+ const clearError = useCallback35(() => {
28310
28527
  setError(null);
28311
28528
  }, []);
28312
28529
  return {
@@ -28340,7 +28557,7 @@ var CHAT_MESSAGE_TYPES = {
28340
28557
  };
28341
28558
 
28342
28559
  // src/components/Chat/Chat.tsx
28343
- import { useState as useState54, useEffect as useEffect51, useCallback as useCallback35, useRef as useRef33 } from "react";
28560
+ import { useState as useState55, useEffect as useEffect51, useCallback as useCallback36, useRef as useRef34 } from "react";
28344
28561
  import {
28345
28562
  PaperPlaneTiltIcon as PaperPlaneTiltIcon2,
28346
28563
  XIcon,
@@ -28493,16 +28710,16 @@ function ChatContent({
28493
28710
  onRoomChange,
28494
28711
  onBackToList
28495
28712
  }) {
28496
- const [view, setView] = useState54("list");
28497
- const [selectedRoom, setSelectedRoom] = useState54(
28713
+ const [view, setView] = useState55("list");
28714
+ const [selectedRoom, setSelectedRoom] = useState55(
28498
28715
  null
28499
28716
  );
28500
- const [selectedUserIds, setSelectedUserIds] = useState54(
28717
+ const [selectedUserIds, setSelectedUserIds] = useState55(
28501
28718
  /* @__PURE__ */ new Set()
28502
28719
  );
28503
- const [messageInput, setMessageInput] = useState54("");
28504
- const [showCreateModal, setShowCreateModal] = useState54(false);
28505
- const hasHandledInitialRoomRef = useRef33(false);
28720
+ const [messageInput, setMessageInput] = useState55("");
28721
+ const [showCreateModal, setShowCreateModal] = useState55(false);
28722
+ const hasHandledInitialRoomRef = useRef34(false);
28506
28723
  const {
28507
28724
  rooms,
28508
28725
  availableUsers,
@@ -28555,7 +28772,7 @@ function ChatContent({
28555
28772
  onBackToList?.();
28556
28773
  }
28557
28774
  }, [initialRoomId, rooms, roomsLoading, onBackToList]);
28558
- const handleSelectRoom = useCallback35(
28775
+ const handleSelectRoom = useCallback36(
28559
28776
  (room) => {
28560
28777
  setSelectedRoom(room);
28561
28778
  setView("room");
@@ -28563,12 +28780,12 @@ function ChatContent({
28563
28780
  },
28564
28781
  [onRoomChange]
28565
28782
  );
28566
- const handleOpenCreateModal = useCallback35(async () => {
28783
+ const handleOpenCreateModal = useCallback36(async () => {
28567
28784
  await fetchAvailableUsers();
28568
28785
  setSelectedUserIds(/* @__PURE__ */ new Set());
28569
28786
  setShowCreateModal(true);
28570
28787
  }, [fetchAvailableUsers]);
28571
- const handleToggleUser = useCallback35((id) => {
28788
+ const handleToggleUser = useCallback36((id) => {
28572
28789
  setSelectedUserIds((prev) => {
28573
28790
  const next = new Set(prev);
28574
28791
  if (next.has(id)) {
@@ -28579,7 +28796,7 @@ function ChatContent({
28579
28796
  return next;
28580
28797
  });
28581
28798
  }, []);
28582
- const handleCreateRoom = useCallback35(async () => {
28799
+ const handleCreateRoom = useCallback36(async () => {
28583
28800
  if (selectedUserIds.size === 0) return;
28584
28801
  const room = await createRoom(Array.from(selectedUserIds));
28585
28802
  if (room) {
@@ -28588,12 +28805,12 @@ function ChatContent({
28588
28805
  onRoomChange?.(room.id);
28589
28806
  }
28590
28807
  }, [selectedUserIds, createRoom, onRoomChange]);
28591
- const handleSendMessage = useCallback35(() => {
28808
+ const handleSendMessage = useCallback36(() => {
28592
28809
  if (!messageInput.trim()) return;
28593
28810
  sendMessage(messageInput);
28594
28811
  setMessageInput("");
28595
28812
  }, [messageInput, sendMessage]);
28596
- const handleBackToList = useCallback35(() => {
28813
+ const handleBackToList = useCallback36(() => {
28597
28814
  setSelectedRoom(null);
28598
28815
  setView("list");
28599
28816
  onBackToList?.();
@@ -28839,7 +29056,7 @@ var CalendarActivityStatus = /* @__PURE__ */ ((CalendarActivityStatus2) => {
28839
29056
  })(CalendarActivityStatus || {});
28840
29057
 
28841
29058
  // src/hooks/useSendActivity.ts
28842
- import { useState as useState55, useCallback as useCallback36, useMemo as useMemo30, useRef as useRef34 } from "react";
29059
+ import { useState as useState56, useCallback as useCallback37, useMemo as useMemo31, useRef as useRef35 } from "react";
28843
29060
  import dayjs7 from "dayjs";
28844
29061
  function transformToCategoryConfig(data) {
28845
29062
  return [
@@ -28894,21 +29111,21 @@ function useSendActivity(config) {
28894
29111
  onSuccess,
28895
29112
  onError
28896
29113
  } = config;
28897
- const [isOpen, setIsOpen] = useState55(false);
28898
- const [selectedModel, setSelectedModel] = useState55(
29114
+ const [isOpen, setIsOpen] = useState56(false);
29115
+ const [selectedModel, setSelectedModel] = useState56(
28899
29116
  null
28900
29117
  );
28901
- const [categories, setCategories] = useState55([]);
28902
- const [isLoading, setIsLoading] = useState55(false);
28903
- const [isCategoriesLoading, setIsCategoriesLoading] = useState55(false);
28904
- const categoriesLoadedRef = useRef34(false);
28905
- const initialData = useMemo30(() => {
29118
+ const [categories, setCategories] = useState56([]);
29119
+ const [isLoading, setIsLoading] = useState56(false);
29120
+ const [isCategoriesLoading, setIsCategoriesLoading] = useState56(false);
29121
+ const categoriesLoadedRef = useRef35(false);
29122
+ const initialData = useMemo31(() => {
28906
29123
  if (!selectedModel) return void 0;
28907
29124
  return {
28908
29125
  title: selectedModel.title
28909
29126
  };
28910
29127
  }, [selectedModel]);
28911
- const loadCategories = useCallback36(async () => {
29128
+ const loadCategories = useCallback37(async () => {
28912
29129
  if (categoriesLoadedRef.current) return;
28913
29130
  setIsCategoriesLoading(true);
28914
29131
  try {
@@ -28923,7 +29140,7 @@ function useSendActivity(config) {
28923
29140
  setIsCategoriesLoading(false);
28924
29141
  }
28925
29142
  }, [fetchCategories, onError]);
28926
- const openModal = useCallback36(
29143
+ const openModal = useCallback37(
28927
29144
  (model) => {
28928
29145
  setSelectedModel(model);
28929
29146
  setIsOpen(true);
@@ -28931,17 +29148,17 @@ function useSendActivity(config) {
28931
29148
  },
28932
29149
  [loadCategories]
28933
29150
  );
28934
- const closeModal = useCallback36(() => {
29151
+ const closeModal = useCallback37(() => {
28935
29152
  setIsOpen(false);
28936
29153
  setSelectedModel(null);
28937
29154
  }, []);
28938
- const onCategoriesChange = useCallback36(
29155
+ const onCategoriesChange = useCallback37(
28939
29156
  (updatedCategories) => {
28940
29157
  setCategories(updatedCategories);
28941
29158
  },
28942
29159
  []
28943
29160
  );
28944
- const handleSubmit = useCallback36(
29161
+ const handleSubmit = useCallback37(
28945
29162
  async (data) => {
28946
29163
  if (!selectedModel) return;
28947
29164
  setIsLoading(true);
@@ -29197,6 +29414,7 @@ export {
29197
29414
  createQuestionsListHook,
29198
29415
  createRecommendedLessonDetailsHook,
29199
29416
  createRecommendedLessonsHistoryHook,
29417
+ createRecommendedLessonsPageHook,
29200
29418
  createUseActivitiesHistory,
29201
29419
  createUseActivityFiltersData,
29202
29420
  createUseActivityModels,
@@ -29208,6 +29426,7 @@ export {
29208
29426
  createUseQuestionsList,
29209
29427
  createUseRecommendedLessonDetails,
29210
29428
  createUseRecommendedLessonsHistory,
29429
+ createUseRecommendedLessonsPage,
29211
29430
  createZustandAuthAdapter,
29212
29431
  deriveStudentStatus,
29213
29432
  determineGoalStatus,