analytica-frontend-lib 1.2.57 → 1.2.59

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
@@ -12132,6 +12132,7 @@ var createQuestionsListHook = (apiClient) => {
12132
12132
 
12133
12133
  // src/components/ActivityCreate/ActivityCreate.tsx
12134
12134
  import { useCallback as useCallback5, useEffect as useEffect23, useMemo as useMemo11, useState as useState24, useRef as useRef15 } from "react";
12135
+ import { useParams, useNavigate } from "react-router-dom";
12135
12136
  import { Funnel } from "phosphor-react";
12136
12137
 
12137
12138
  // src/components/ActivityListQuestions/ActivityListQuestions.tsx
@@ -12466,6 +12467,26 @@ function formatTime(date) {
12466
12467
  const minutes = date.getMinutes().toString().padStart(2, "0");
12467
12468
  return `${hours}:${minutes}`;
12468
12469
  }
12470
+ function getTypeFromUrl(type) {
12471
+ switch (type) {
12472
+ case "RASCUNHO" /* RASCUNHO */:
12473
+ return "rascunho";
12474
+ case "MODELO" /* MODELO */:
12475
+ return "modelo";
12476
+ default:
12477
+ return "rascunho";
12478
+ }
12479
+ }
12480
+ function getTypeFromUrlString(type) {
12481
+ switch (type) {
12482
+ case "rascunho":
12483
+ return "RASCUNHO" /* RASCUNHO */;
12484
+ case "modelo":
12485
+ return "MODELO" /* MODELO */;
12486
+ default:
12487
+ return "RASCUNHO" /* RASCUNHO */;
12488
+ }
12489
+ }
12469
12490
  function convertQuestionToPreview(question) {
12470
12491
  const subjectInfo = question.knowledgeMatrix && question.knowledgeMatrix.length > 0 ? {
12471
12492
  subjectName: question.knowledgeMatrix[0].subject?.name || void 0,
@@ -12729,14 +12750,12 @@ var CreateActivity = ({
12729
12750
  apiClient,
12730
12751
  institutionId,
12731
12752
  isDark,
12732
- activity,
12733
- onActivityChange,
12734
- loading = false,
12735
- preFilters,
12736
12753
  onBack,
12737
12754
  onCreateActivity,
12738
12755
  onSaveModel
12739
12756
  }) => {
12757
+ const params = useParams();
12758
+ const navigate = useNavigate();
12740
12759
  const applyFilters = useQuestionFiltersStore(
12741
12760
  (state) => state.applyFilters
12742
12761
  );
@@ -12750,26 +12769,18 @@ var CreateActivity = ({
12750
12769
  (state) => state.setDraftFilters
12751
12770
  );
12752
12771
  const addToast = ToastStore_default((state) => state.addToast);
12753
- const handleFiltersChange = useCallback5(
12754
- (filters) => {
12755
- setDraftFilters(filters);
12756
- },
12757
- [setDraftFilters]
12772
+ const [activity, setActivity] = useState24(null);
12773
+ const [preFilters, setPreFilters] = useState24(
12774
+ null
12758
12775
  );
12759
- const handleApplyFilters = useCallback5(() => {
12760
- applyFilters();
12761
- }, [applyFilters]);
12776
+ const [loading, setLoading] = useState24(false);
12762
12777
  const [questions, setQuestions] = useState24([]);
12763
12778
  const [loadingInitialQuestions, setLoadingInitialQuestions] = useState24(false);
12764
- const [draftId, setDraftId] = useState24(
12765
- activity?.id ? activity.id : null
12766
- );
12779
+ const [draftId, setDraftId] = useState24(params.id || null);
12767
12780
  const [activityType, setActivityType] = useState24(
12768
- activity?.type || "RASCUNHO" /* RASCUNHO */
12769
- );
12770
- const [lastSavedAt, setLastSavedAt] = useState24(
12771
- activity?.updatedAt ? new Date(activity.updatedAt) : null
12781
+ getTypeFromUrlString(params.type)
12772
12782
  );
12783
+ const [lastSavedAt, setLastSavedAt] = useState24(null);
12773
12784
  const [isSaving, setIsSaving] = useState24(false);
12774
12785
  const [isSendModalOpen, setIsSendModalOpen] = useState24(false);
12775
12786
  const [categories, setCategories] = useState24([]);
@@ -12779,6 +12790,16 @@ var CreateActivity = ({
12779
12790
  const lastSavedFiltersRef = useRef15(null);
12780
12791
  const lastSavedQuestionsRef = useRef15([]);
12781
12792
  const hasAppliedInitialFiltersRef = useRef15(false);
12793
+ const lastFetchedActivityIdRef = useRef15(null);
12794
+ const handleFiltersChange = useCallback5(
12795
+ (filters) => {
12796
+ setDraftFilters(filters);
12797
+ },
12798
+ [setDraftFilters]
12799
+ );
12800
+ const handleApplyFilters = useCallback5(() => {
12801
+ applyFilters();
12802
+ }, [applyFilters]);
12782
12803
  const useActivityFiltersData = createUseActivityFiltersData(apiClient);
12783
12804
  const { knowledgeAreas, loadKnowledgeAreas } = useActivityFiltersData({
12784
12805
  selectedSubjects: [],
@@ -12805,6 +12826,49 @@ var CreateActivity = ({
12805
12826
  useEffect23(() => {
12806
12827
  hasAppliedInitialFiltersRef.current = false;
12807
12828
  }, [activity?.id, activity?.filters, resolvedPreFilters]);
12829
+ useEffect23(() => {
12830
+ const fetchActivityDraft = async () => {
12831
+ if (params.id && params.id !== lastFetchedActivityIdRef.current) {
12832
+ setLoading(true);
12833
+ try {
12834
+ const response = await apiClient.get(`/activity-drafts/${params.id}`);
12835
+ const activityData = "data" in response.data ? response.data.data : response.data;
12836
+ setActivity(activityData);
12837
+ setPreFilters(activityData.filters);
12838
+ setDraftId(activityData.id || null);
12839
+ setActivityType(activityData.type);
12840
+ if (activityData.updatedAt) {
12841
+ setLastSavedAt(new Date(activityData.updatedAt));
12842
+ }
12843
+ lastFetchedActivityIdRef.current = params.id;
12844
+ } catch (error) {
12845
+ console.error("Erro ao buscar rascunho da atividade:", error);
12846
+ addToast({
12847
+ title: "Erro ao carregar atividade",
12848
+ description: error instanceof Error ? error.message : "Ocorreu um erro ao carregar a atividade. Tente novamente.",
12849
+ variant: "solid",
12850
+ action: "warning",
12851
+ position: "top-right"
12852
+ });
12853
+ } finally {
12854
+ setLoading(false);
12855
+ }
12856
+ }
12857
+ };
12858
+ fetchActivityDraft();
12859
+ }, [params.id, apiClient, addToast]);
12860
+ useEffect23(() => {
12861
+ if (activity?.id && activity?.type) {
12862
+ const urlType = getTypeFromUrl(activity.type);
12863
+ const currentUrlType = params.type;
12864
+ const currentUrlId = params.id;
12865
+ if (!currentUrlType || !currentUrlId || currentUrlId !== activity.id || currentUrlType !== urlType) {
12866
+ navigate(`/criar-atividade/${urlType}/${activity.id}`, {
12867
+ replace: true
12868
+ });
12869
+ }
12870
+ }
12871
+ }, [activity?.id, activity?.type, params.type, params.id, navigate]);
12808
12872
  const validateSaveConditions = useCallback5(() => {
12809
12873
  if (questions.length === 0 && !hasFirstSaveBeenDone.current) {
12810
12874
  return false;
@@ -12842,6 +12906,33 @@ var CreateActivity = ({
12842
12906
  setLastSavedAt(
12843
12907
  savedDraft?.updatedAt ? new Date(savedDraft.updatedAt) : /* @__PURE__ */ new Date()
12844
12908
  );
12909
+ if (savedDraft) {
12910
+ setActivity((prevActivity) => {
12911
+ if (!prevActivity || prevActivity.id !== savedDraft.id) {
12912
+ return {
12913
+ id: savedDraft.id,
12914
+ type: savedDraft.type,
12915
+ title: savedDraft.title,
12916
+ subjectId: savedDraft.subjectId,
12917
+ filters: savedDraft.filters,
12918
+ questionIds: questions.map((q) => q.id),
12919
+ updatedAt: savedDraft.updatedAt
12920
+ };
12921
+ }
12922
+ return {
12923
+ ...prevActivity,
12924
+ type: savedDraft.type,
12925
+ title: savedDraft.title,
12926
+ subjectId: savedDraft.subjectId,
12927
+ questionIds: questions.map((q) => q.id),
12928
+ updatedAt: savedDraft.updatedAt
12929
+ };
12930
+ });
12931
+ setActivityType(savedDraft.type);
12932
+ if (savedDraft.id) {
12933
+ lastFetchedActivityIdRef.current = savedDraft.id;
12934
+ }
12935
+ }
12845
12936
  if (payload.type === "MODELO" /* MODELO */ && onSaveModel && response?.data) {
12846
12937
  onSaveModel(response.data);
12847
12938
  }
@@ -12877,30 +12968,36 @@ var CreateActivity = ({
12877
12968
  []
12878
12969
  );
12879
12970
  const updateStateAfterSave = useCallback5(
12880
- (savedDraft, fullResponse) => {
12971
+ (savedDraft, fullResponse, wasNewDraft = false) => {
12881
12972
  setDraftId(savedDraft.id);
12882
12973
  setLastSavedAt(
12883
12974
  savedDraft.updatedAt ? new Date(savedDraft.updatedAt) : /* @__PURE__ */ new Date()
12884
12975
  );
12885
12976
  lastSavedQuestionsRef.current = questions;
12886
12977
  lastSavedFiltersRef.current = appliedFilters;
12978
+ const updatedActivity = {
12979
+ id: savedDraft.id,
12980
+ type: savedDraft.type,
12981
+ title: savedDraft.title,
12982
+ subjectId: savedDraft.subjectId,
12983
+ filters: savedDraft.filters,
12984
+ questionIds: questions.map((q) => q.id),
12985
+ updatedAt: savedDraft.updatedAt
12986
+ };
12987
+ setActivity(updatedActivity);
12988
+ setActivityType(savedDraft.type);
12989
+ lastFetchedActivityIdRef.current = savedDraft.id;
12990
+ if (wasNewDraft && savedDraft.id) {
12991
+ const urlType = getTypeFromUrl(savedDraft.type);
12992
+ navigate(`/criar-atividade/${urlType}/${savedDraft.id}`, {
12993
+ replace: true
12994
+ });
12995
+ }
12887
12996
  if (savedDraft.type === "MODELO" /* MODELO */ && onSaveModel && fullResponse) {
12888
12997
  onSaveModel(fullResponse);
12889
12998
  }
12890
- if (onActivityChange) {
12891
- const updatedActivity = {
12892
- id: savedDraft.id,
12893
- type: savedDraft.type,
12894
- title: savedDraft.title,
12895
- subjectId: savedDraft.subjectId,
12896
- filters: savedDraft.filters,
12897
- questionIds: questions.map((q) => q.id),
12898
- updatedAt: savedDraft.updatedAt
12899
- };
12900
- onActivityChange(updatedActivity);
12901
- }
12902
12999
  },
12903
- [questions, appliedFilters, onActivityChange, onSaveModel]
13000
+ [questions, appliedFilters, onSaveModel, navigate]
12904
13001
  );
12905
13002
  const saveDraft = useCallback5(async () => {
12906
13003
  if (!validateSaveConditions()) {
@@ -12919,7 +13016,7 @@ var CreateActivity = ({
12919
13016
  );
12920
13017
  hasFirstSaveBeenDone.current = true;
12921
13018
  const savedDraft = extractDraftFromResponse(response);
12922
- updateStateAfterSave(savedDraft, response?.data);
13019
+ updateStateAfterSave(savedDraft, response?.data, true);
12923
13020
  } catch (error) {
12924
13021
  console.error("\u274C Erro ao salvar rascunho:", error);
12925
13022
  const errorMessage = error instanceof Error ? error.message : "Ocorreu um erro ao salvar o rascunho. Tente novamente.";
@@ -12946,14 +13043,6 @@ var CreateActivity = ({
12946
13043
  const handleSaveModel = useCallback5(async () => {
12947
13044
  setActivityType("MODELO" /* MODELO */);
12948
13045
  }, []);
12949
- useEffect23(() => {
12950
- if (activity?.id) {
12951
- setDraftId(activity.id);
12952
- }
12953
- if (activity?.updatedAt) {
12954
- setLastSavedAt(new Date(activity.updatedAt));
12955
- }
12956
- }, [activity?.id, activity?.updatedAt]);
12957
13046
  useEffect23(() => {
12958
13047
  loadKnowledgeAreas();
12959
13048
  }, [loadKnowledgeAreas]);
@@ -13200,7 +13289,7 @@ var CreateActivity = ({
13200
13289
  /* @__PURE__ */ jsx61(
13201
13290
  ActivityCreateHeader,
13202
13291
  {
13203
- activity,
13292
+ activity: activity || void 0,
13204
13293
  activityType,
13205
13294
  lastSavedAt,
13206
13295
  isSaving,
@@ -18824,14 +18913,14 @@ var QuizListResultByMateria = ({
18824
18913
  };
18825
18914
 
18826
18915
  // src/components/BreadcrumbMenu/BreadcrumbMenu.tsx
18827
- import { useNavigate } from "react-router-dom";
18916
+ import { useNavigate as useNavigate2 } from "react-router-dom";
18828
18917
  import { jsx as jsx77 } from "react/jsx-runtime";
18829
18918
  var BreadcrumbMenu = ({
18830
18919
  breadcrumbs,
18831
18920
  onBreadcrumbClick,
18832
18921
  className = "!px-0 py-4 flex-wrap w-full"
18833
18922
  }) => {
18834
- const navigate = useNavigate();
18923
+ const navigate = useNavigate2();
18835
18924
  const handleClick = (breadcrumb, index) => {
18836
18925
  if (onBreadcrumbClick) {
18837
18926
  onBreadcrumbClick(breadcrumb, index);
@@ -19255,9 +19344,9 @@ function useAppInitialization() {
19255
19344
 
19256
19345
  // src/hooks/useAppContent.ts
19257
19346
  import { useCallback as useCallback14, useEffect as useEffect38, useMemo as useMemo20 } from "react";
19258
- import { useNavigate as useNavigate2 } from "react-router-dom";
19347
+ import { useNavigate as useNavigate3 } from "react-router-dom";
19259
19348
  function useAppContent(config) {
19260
- const navigate = useNavigate2();
19349
+ const navigate = useNavigate3();
19261
19350
  const { setTokens, setSessionInfo, setSelectedProfile } = useAuthStore();
19262
19351
  const {
19263
19352
  api,
@@ -24400,7 +24489,7 @@ var activityHistoryResponseSchema = z6.object({
24400
24489
  finalDate: z6.string().nullable(),
24401
24490
  status: z6.nativeEnum(GenericApiStatus),
24402
24491
  completionPercentage: z6.number().min(0).max(100),
24403
- subjectId: z6.string().uuid().nullable(),
24492
+ subjectId: z6.string().uuid().optional().nullable(),
24404
24493
  schoolId: z6.string().optional(),
24405
24494
  schoolName: z6.string().optional(),
24406
24495
  year: z6.string().optional(),