analytica-frontend-lib 1.2.54 → 1.2.55

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.
Files changed (50) hide show
  1. package/dist/ActivitiesHistory/index.js +108 -42
  2. package/dist/ActivitiesHistory/index.js.map +1 -1
  3. package/dist/ActivitiesHistory/index.mjs +108 -42
  4. package/dist/ActivitiesHistory/index.mjs.map +1 -1
  5. package/dist/ActivityDetails/index.js +108 -42
  6. package/dist/ActivityDetails/index.js.map +1 -1
  7. package/dist/ActivityDetails/index.mjs +108 -42
  8. package/dist/ActivityDetails/index.mjs.map +1 -1
  9. package/dist/ActivityFilters/index.js +110 -42
  10. package/dist/ActivityFilters/index.js.map +1 -1
  11. package/dist/ActivityFilters/index.mjs +110 -42
  12. package/dist/ActivityFilters/index.mjs.map +1 -1
  13. package/dist/AlertManager/index.js +110 -42
  14. package/dist/AlertManager/index.js.map +1 -1
  15. package/dist/AlertManager/index.mjs +110 -42
  16. package/dist/AlertManager/index.mjs.map +1 -1
  17. package/dist/RecommendedLessonsHistory/index.js +108 -42
  18. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  19. package/dist/RecommendedLessonsHistory/index.mjs +108 -42
  20. package/dist/RecommendedLessonsHistory/index.mjs.map +1 -1
  21. package/dist/SendActivityModal/SendActivityModal.js +124 -46
  22. package/dist/SendActivityModal/SendActivityModal.js.map +1 -1
  23. package/dist/SendActivityModal/SendActivityModal.mjs +124 -46
  24. package/dist/SendActivityModal/SendActivityModal.mjs.map +1 -1
  25. package/dist/SendActivityModal/hooks/useSendActivityModal.d.ts.map +1 -1
  26. package/dist/SendActivityModal/hooks/useSendActivityModal.js +16 -4
  27. package/dist/SendActivityModal/hooks/useSendActivityModal.js.map +1 -1
  28. package/dist/SendActivityModal/hooks/useSendActivityModal.mjs +16 -4
  29. package/dist/SendActivityModal/hooks/useSendActivityModal.mjs.map +1 -1
  30. package/dist/SendActivityModal/index.js +124 -46
  31. package/dist/SendActivityModal/index.js.map +1 -1
  32. package/dist/SendActivityModal/index.mjs +124 -46
  33. package/dist/SendActivityModal/index.mjs.map +1 -1
  34. package/dist/SendActivityModal/validation.js +1 -1
  35. package/dist/SendActivityModal/validation.js.map +1 -1
  36. package/dist/SendActivityModal/validation.mjs +1 -1
  37. package/dist/SendActivityModal/validation.mjs.map +1 -1
  38. package/dist/TableProvider/index.js +108 -42
  39. package/dist/TableProvider/index.js.map +1 -1
  40. package/dist/TableProvider/index.mjs +108 -42
  41. package/dist/TableProvider/index.mjs.map +1 -1
  42. package/dist/hooks/useActivityModels/index.d.ts +6 -6
  43. package/dist/hooks/useActivityModels.d.ts +6 -6
  44. package/dist/index.d.ts +2 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +180 -59
  47. package/dist/index.js.map +1 -1
  48. package/dist/index.mjs +178 -59
  49. package/dist/index.mjs.map +1 -1
  50. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1888,6 +1888,89 @@ var CheckboxList_default = CheckboxList;
1888
1888
 
1889
1889
  // src/components/CheckBoxGroup/CheckBoxGroup.tsx
1890
1890
  import { useEffect as useEffect2, useMemo, useRef as useRef3, useState as useState3 } from "react";
1891
+
1892
+ // src/components/CheckBoxGroup/CheckBoxGroup.helpers.ts
1893
+ var areSelectedIdsEqual = (ids1, ids2) => {
1894
+ if (ids1 === ids2) return true;
1895
+ if (!ids1 || !ids2) return ids1 === ids2;
1896
+ if (ids1.length !== ids2.length) return false;
1897
+ for (let i = 0; i < ids1.length; i++) {
1898
+ if (ids1[i] !== ids2[i]) return false;
1899
+ }
1900
+ return true;
1901
+ };
1902
+ var isCategoryEnabled = (category, allCategories) => {
1903
+ if (!category.dependsOn || category.dependsOn.length === 0) {
1904
+ return true;
1905
+ }
1906
+ return category.dependsOn.every((depKey) => {
1907
+ const depCat = allCategories.find((c) => c.key === depKey);
1908
+ return depCat?.selectedIds && depCat.selectedIds.length > 0;
1909
+ });
1910
+ };
1911
+ var isItemMatchingFilter = (item, filter, allCategories) => {
1912
+ const parentCat = allCategories.find((c) => c.key === filter.key);
1913
+ const parentSelectedIds = parentCat?.selectedIds || [];
1914
+ const itemFieldValue = item[filter.internalField];
1915
+ return parentSelectedIds.includes(String(itemFieldValue));
1916
+ };
1917
+ var getBadgeText = (category, formattedItems) => {
1918
+ const visibleIds = formattedItems.flatMap((group) => group.itens || []).map((i) => i.id);
1919
+ const selectedVisibleCount = visibleIds.filter(
1920
+ (id) => category.selectedIds?.includes(id)
1921
+ ).length;
1922
+ const totalVisible = visibleIds.length;
1923
+ return `${selectedVisibleCount} de ${totalVisible} ${selectedVisibleCount === 1 ? "selecionado" : "selecionados"}`;
1924
+ };
1925
+ var handleAccordionValueChange = (value, categories, isCategoryEnabledFn) => {
1926
+ if (typeof value !== "string") {
1927
+ if (!value) {
1928
+ return "";
1929
+ }
1930
+ return null;
1931
+ }
1932
+ if (!value) {
1933
+ return "";
1934
+ }
1935
+ const category = categories.find((c) => c.key === value);
1936
+ if (!category) {
1937
+ return null;
1938
+ }
1939
+ const isEnabled = isCategoryEnabledFn(category);
1940
+ if (!isEnabled) {
1941
+ return null;
1942
+ }
1943
+ return value;
1944
+ };
1945
+ var calculateFormattedItemsForAutoSelection = (category, allCategories) => {
1946
+ if (!category?.dependsOn || category.dependsOn.length === 0) {
1947
+ return category?.itens || [];
1948
+ }
1949
+ const isEnabled = isCategoryEnabled(category, allCategories);
1950
+ if (!isEnabled) {
1951
+ return [];
1952
+ }
1953
+ const filters = category.filteredBy || [];
1954
+ if (filters.length === 0) {
1955
+ return category?.itens || [];
1956
+ }
1957
+ const selectedIdsArr = filters.map((f) => {
1958
+ const parentCat = allCategories.find((c) => c.key === f.key);
1959
+ if (!parentCat?.selectedIds?.length) {
1960
+ return [];
1961
+ }
1962
+ return parentCat.selectedIds;
1963
+ });
1964
+ if (selectedIdsArr.some((arr) => arr.length === 0)) {
1965
+ return [];
1966
+ }
1967
+ const filteredItems = (category.itens || []).filter(
1968
+ (item) => filters.every((filter) => isItemMatchingFilter(item, filter, allCategories))
1969
+ );
1970
+ return filteredItems;
1971
+ };
1972
+
1973
+ // src/components/CheckBoxGroup/CheckBoxGroup.tsx
1891
1974
  import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
1892
1975
  var CheckboxGroup = ({
1893
1976
  categories,
@@ -1903,21 +1986,16 @@ var CheckboxGroup = ({
1903
1986
  useEffect2(() => {
1904
1987
  onCategoriesChangeRef.current = onCategoriesChange;
1905
1988
  }, [onCategoriesChange]);
1906
- const areSelectedIdsEqual = (ids1, ids2) => {
1907
- if (ids1 === ids2) return true;
1908
- if (!ids1 || !ids2) return ids1 === ids2;
1909
- if (ids1.length !== ids2.length) return false;
1910
- for (let i = 0; i < ids1.length; i++) {
1911
- if (ids1[i] !== ids2[i]) return false;
1912
- }
1913
- return true;
1914
- };
1915
1989
  const categoriesWithAutoSelection = useMemo(() => {
1916
1990
  return categories.map((category) => {
1917
- if (category.itens?.length === 1 && (!category.selectedIds || category.selectedIds.length === 0)) {
1991
+ const filteredItems = calculateFormattedItemsForAutoSelection(
1992
+ category,
1993
+ categories
1994
+ );
1995
+ if (filteredItems.length === 1 && (!category.selectedIds || category.selectedIds.length === 0)) {
1918
1996
  return {
1919
1997
  ...category,
1920
- selectedIds: [category.itens[0].id]
1998
+ selectedIds: [filteredItems[0].id]
1921
1999
  };
1922
2000
  }
1923
2001
  return category;
@@ -2052,6 +2130,23 @@ var CheckboxGroup = ({
2052
2130
  const getFormattedItems = (categoryKey) => {
2053
2131
  return formattedItemsMap[categoryKey] || [{ itens: [] }];
2054
2132
  };
2133
+ const getBadgeText2 = (category) => {
2134
+ const formattedItems = getFormattedItems(category.key);
2135
+ return getBadgeText(category, formattedItems);
2136
+ };
2137
+ const isCategoryEnabled2 = (category) => {
2138
+ return isCategoryEnabled(category, categories);
2139
+ };
2140
+ const handleAccordionValueChange2 = (value) => {
2141
+ const newValue = handleAccordionValueChange(
2142
+ value,
2143
+ categories,
2144
+ isCategoryEnabled2
2145
+ );
2146
+ if (newValue !== null) {
2147
+ setOpenAccordion(newValue);
2148
+ }
2149
+ };
2055
2150
  const getDependentCategories = (categoryKey) => {
2056
2151
  return categories.filter((cat) => cat.dependsOn?.includes(categoryKey)).map((cat) => cat.key);
2057
2152
  };
@@ -2244,14 +2339,7 @@ var CheckboxGroup = ({
2244
2339
  }
2245
2340
  )
2246
2341
  ] }),
2247
- (openAccordion === category.key || isEnabled) && /* @__PURE__ */ jsx13(Badge_default, { variant: "solid", action: "info", children: (() => {
2248
- const visibleIds = getFormattedItems(category.key).flatMap((group) => group.itens || []).map((i) => i.id);
2249
- const selectedVisibleCount = visibleIds.filter(
2250
- (id) => category.selectedIds?.includes(id)
2251
- ).length;
2252
- const totalVisible = visibleIds.length;
2253
- return `${selectedVisibleCount} de ${totalVisible} ${selectedVisibleCount === 1 ? "selecionado" : "selecionados"}`;
2254
- })() })
2342
+ (openAccordion === category.key || isEnabled) && /* @__PURE__ */ jsx13(Badge_default, { variant: "solid", action: "info", children: getBadgeText2(category) })
2255
2343
  ] });
2256
2344
  const renderCompactSingleItem = (category) => {
2257
2345
  const formattedItems = getFormattedItems(category.key);
@@ -2273,10 +2361,7 @@ var CheckboxGroup = ({
2273
2361
  );
2274
2362
  };
2275
2363
  const renderCategoryAccordion = (category) => {
2276
- const isEnabled = !category.dependsOn || category.dependsOn.every((depKey) => {
2277
- const depCat = categories.find((c) => c.key === depKey);
2278
- return depCat?.selectedIds && depCat.selectedIds.length > 0;
2279
- });
2364
+ const isEnabled = isCategoryEnabled2(category);
2280
2365
  const hasOnlyOneItem = category.itens?.length === 1;
2281
2366
  if (hasOnlyOneItem && !compactSingleItem && !showSingleItem) {
2282
2367
  return null;
@@ -2316,10 +2401,7 @@ var CheckboxGroup = ({
2316
2401
  if (!openAccordion) return;
2317
2402
  const category = categories.find((c) => c.key === openAccordion);
2318
2403
  if (!category) return;
2319
- const isEnabled = !category.dependsOn || category.dependsOn.every((depKey) => {
2320
- const depCat = categories.find((c) => c.key === depKey);
2321
- return depCat?.selectedIds && depCat.selectedIds.length > 0;
2322
- });
2404
+ const isEnabled = isCategoryEnabled2(category);
2323
2405
  if (!isEnabled) {
2324
2406
  setTimeout(() => {
2325
2407
  setOpenAccordion("");
@@ -2332,21 +2414,7 @@ var CheckboxGroup = ({
2332
2414
  type: "single",
2333
2415
  collapsible: true,
2334
2416
  value: openAccordion,
2335
- onValueChange: (value) => {
2336
- if (typeof value === "string") {
2337
- if (value) {
2338
- const category = categories.find((c) => c.key === value);
2339
- const isEnabled = !category?.dependsOn || category.dependsOn.every((depKey) => {
2340
- const depCat = categories.find((c) => c.key === depKey);
2341
- return depCat?.selectedIds && depCat.selectedIds.length > 0;
2342
- });
2343
- if (!isEnabled) {
2344
- return;
2345
- }
2346
- }
2347
- setOpenAccordion(value);
2348
- }
2349
- },
2417
+ onValueChange: handleAccordionValueChange2,
2350
2418
  children: categories.map(renderCategoryAccordion)
2351
2419
  }
2352
2420
  );
@@ -12322,6 +12390,18 @@ var ActivityListQuestions = ({
12322
12390
  );
12323
12391
  };
12324
12392
 
12393
+ // src/components/ActivityCreate/ActivityCreate.types.ts
12394
+ var ActivityType = /* @__PURE__ */ ((ActivityType2) => {
12395
+ ActivityType2["RASCUNHO"] = "RASCUNHO";
12396
+ ActivityType2["MODELO"] = "MODELO";
12397
+ ActivityType2["ATIVIDADE"] = "ATIVIDADE";
12398
+ return ActivityType2;
12399
+ })(ActivityType || {});
12400
+ var ActivityStatus = /* @__PURE__ */ ((ActivityStatus2) => {
12401
+ ActivityStatus2["A_VENCER"] = "A_VENCER";
12402
+ return ActivityStatus2;
12403
+ })(ActivityStatus || {});
12404
+
12325
12405
  // src/components/ActivityCreate/ActivityCreate.utils.ts
12326
12406
  var VALID_QUESTION_TYPES = new Set(Object.values(QUESTION_TYPE));
12327
12407
  var isValidQuestionType = (type) => {
@@ -12653,7 +12733,9 @@ var CreateActivity = ({
12653
12733
  onActivityChange,
12654
12734
  loading = false,
12655
12735
  preFilters,
12656
- onBack
12736
+ onBack,
12737
+ onCreateActivity,
12738
+ onSaveModel
12657
12739
  }) => {
12658
12740
  const applyFilters = useQuestionFiltersStore(
12659
12741
  (state) => state.applyFilters
@@ -12685,7 +12767,9 @@ var CreateActivity = ({
12685
12767
  const [activityType, setActivityType] = useState24(
12686
12768
  activity?.type || "RASCUNHO" /* RASCUNHO */
12687
12769
  );
12688
- const [lastSavedAt, setLastSavedAt] = useState24(null);
12770
+ const [lastSavedAt, setLastSavedAt] = useState24(
12771
+ activity?.updatedAt ? new Date(activity.updatedAt) : null
12772
+ );
12689
12773
  const [isSaving, setIsSaving] = useState24(false);
12690
12774
  const [isSendModalOpen, setIsSendModalOpen] = useState24(false);
12691
12775
  const [categories, setCategories] = useState24([]);
@@ -12748,15 +12832,21 @@ var CreateActivity = ({
12748
12832
  }, [appliedFilters, activityType, knowledgeAreas, questions]);
12749
12833
  const updateExistingDraft = useCallback5(
12750
12834
  async (payload) => {
12751
- await apiClient.patch(
12835
+ const response = await apiClient.patch(
12752
12836
  `/activity-drafts/${draftId}`,
12753
12837
  payload
12754
12838
  );
12755
12839
  lastSavedQuestionsRef.current = questions;
12756
12840
  lastSavedFiltersRef.current = appliedFilters;
12757
- setLastSavedAt(/* @__PURE__ */ new Date());
12841
+ const savedDraft = response?.data?.data?.draft;
12842
+ setLastSavedAt(
12843
+ savedDraft?.updatedAt ? new Date(savedDraft.updatedAt) : /* @__PURE__ */ new Date()
12844
+ );
12845
+ if (payload.type === "MODELO" /* MODELO */ && onSaveModel && response?.data) {
12846
+ onSaveModel(response.data);
12847
+ }
12758
12848
  },
12759
- [draftId, apiClient, questions, appliedFilters]
12849
+ [draftId, apiClient, questions, appliedFilters, onSaveModel]
12760
12850
  );
12761
12851
  const extractDraftFromResponse = useCallback5(
12762
12852
  (response) => {
@@ -12787,11 +12877,16 @@ var CreateActivity = ({
12787
12877
  []
12788
12878
  );
12789
12879
  const updateStateAfterSave = useCallback5(
12790
- (savedDraft) => {
12880
+ (savedDraft, fullResponse) => {
12791
12881
  setDraftId(savedDraft.id);
12792
- setLastSavedAt(/* @__PURE__ */ new Date());
12882
+ setLastSavedAt(
12883
+ savedDraft.updatedAt ? new Date(savedDraft.updatedAt) : /* @__PURE__ */ new Date()
12884
+ );
12793
12885
  lastSavedQuestionsRef.current = questions;
12794
12886
  lastSavedFiltersRef.current = appliedFilters;
12887
+ if (savedDraft.type === "MODELO" /* MODELO */ && onSaveModel && fullResponse) {
12888
+ onSaveModel(fullResponse);
12889
+ }
12795
12890
  if (onActivityChange) {
12796
12891
  const updatedActivity = {
12797
12892
  id: savedDraft.id,
@@ -12799,12 +12894,13 @@ var CreateActivity = ({
12799
12894
  title: savedDraft.title,
12800
12895
  subjectId: savedDraft.subjectId,
12801
12896
  filters: savedDraft.filters,
12802
- questionIds: questions.map((q) => q.id)
12897
+ questionIds: questions.map((q) => q.id),
12898
+ updatedAt: savedDraft.updatedAt
12803
12899
  };
12804
12900
  onActivityChange(updatedActivity);
12805
12901
  }
12806
12902
  },
12807
- [questions, appliedFilters, onActivityChange]
12903
+ [questions, appliedFilters, onActivityChange, onSaveModel]
12808
12904
  );
12809
12905
  const saveDraft = useCallback5(async () => {
12810
12906
  if (!validateSaveConditions()) {
@@ -12823,7 +12919,7 @@ var CreateActivity = ({
12823
12919
  );
12824
12920
  hasFirstSaveBeenDone.current = true;
12825
12921
  const savedDraft = extractDraftFromResponse(response);
12826
- updateStateAfterSave(savedDraft);
12922
+ updateStateAfterSave(savedDraft, response?.data);
12827
12923
  } catch (error) {
12828
12924
  console.error("\u274C Erro ao salvar rascunho:", error);
12829
12925
  const errorMessage = error instanceof Error ? error.message : "Ocorreu um erro ao salvar o rascunho. Tente novamente.";
@@ -12854,7 +12950,10 @@ var CreateActivity = ({
12854
12950
  if (activity?.id) {
12855
12951
  setDraftId(activity.id);
12856
12952
  }
12857
- }, [activity?.id]);
12953
+ if (activity?.updatedAt) {
12954
+ setLastSavedAt(new Date(activity.updatedAt));
12955
+ }
12956
+ }, [activity?.id, activity?.updatedAt]);
12858
12957
  useEffect23(() => {
12859
12958
  loadKnowledgeAreas();
12860
12959
  }, [loadKnowledgeAreas]);
@@ -13036,11 +13135,17 @@ var CreateActivity = ({
13036
13135
  finalDate: finalDateTime,
13037
13136
  canRetry: formData.canRetry
13038
13137
  };
13039
- const createActivityResponse = await apiClient.post("/activities", activityPayload);
13040
- const activityId = createActivityResponse?.data?.data?.activity?.id;
13138
+ const createActivityResponse = await apiClient.post(
13139
+ "/activities",
13140
+ activityPayload
13141
+ );
13142
+ const activityId = createActivityResponse?.data?.data?.id;
13041
13143
  if (!activityId) {
13042
13144
  throw new Error("ID da atividade n\xE3o retornado pela API");
13043
13145
  }
13146
+ if (onCreateActivity) {
13147
+ onCreateActivity(activityId, activityPayload);
13148
+ }
13044
13149
  const sendToStudentsPayload = {
13045
13150
  activityId,
13046
13151
  students: formData.students
@@ -21890,7 +21995,7 @@ function validateActivityStep(data) {
21890
21995
  function validateRecipientStep(data) {
21891
21996
  const errors = {};
21892
21997
  const result = recipientStepSchema.safeParse({
21893
- students: data.students
21998
+ students: data.students ?? []
21894
21999
  });
21895
22000
  if (!result.success) {
21896
22001
  result.error.issues.forEach((issue) => {
@@ -22027,14 +22132,26 @@ var useSendActivityModalStore = create16(
22027
22132
  },
22028
22133
  validateCurrentStep: () => {
22029
22134
  const state = get();
22030
- const errors = validateStep(state.currentStep, state.formData);
22031
- set({ errors });
22135
+ let formDataToValidate = state.formData;
22136
+ let updatedFormData = state.formData;
22137
+ if (state.currentStep === 2 && state.categories.length > 0) {
22138
+ const students = extractStudentsFromCategories(state.categories);
22139
+ formDataToValidate = { ...state.formData, students };
22140
+ updatedFormData = formDataToValidate;
22141
+ }
22142
+ const errors = validateStep(state.currentStep, formDataToValidate);
22143
+ set({ formData: updatedFormData, errors });
22032
22144
  return Object.keys(errors).length === 0;
22033
22145
  },
22034
22146
  validateAllSteps: () => {
22035
22147
  const state = get();
22148
+ let formDataForStep2 = state.formData;
22149
+ if (state.categories.length > 0) {
22150
+ const students = extractStudentsFromCategories(state.categories);
22151
+ formDataForStep2 = { ...state.formData, students };
22152
+ }
22036
22153
  const errors1 = validateStep(1, state.formData);
22037
- const errors2 = validateStep(2, state.formData);
22154
+ const errors2 = validateStep(2, formDataForStep2);
22038
22155
  const errors3 = validateStep(3, state.formData);
22039
22156
  const allErrors = { ...errors1, ...errors2, ...errors3 };
22040
22157
  set({ errors: allErrors });
@@ -25719,6 +25836,8 @@ export {
25719
25836
  ActivityFilters,
25720
25837
  ActivityFiltersPopover,
25721
25838
  ActivityPreview,
25839
+ ActivityStatus,
25840
+ ActivityType,
25722
25841
  Alert_default as Alert,
25723
25842
  AlertDialog,
25724
25843
  AlertsManager,