analytica-frontend-lib 1.2.30 → 1.2.32

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.
@@ -1,5 +1,5 @@
1
1
  // src/components/ActivityFilters/ActivityFilters.tsx
2
- import { useState as useState9, useEffect as useEffect10, useMemo as useMemo2, useCallback } from "react";
2
+ import { useState as useState9, useEffect as useEffect10, useMemo as useMemo2, useCallback, useRef as useRef6 } from "react";
3
3
 
4
4
  // src/utils/utils.ts
5
5
  import { clsx } from "clsx";
@@ -4613,11 +4613,13 @@ var questionTypes = [
4613
4613
  ];
4614
4614
  var QuestionTypeFilter = ({
4615
4615
  selectedTypes,
4616
- onToggleType
4616
+ onToggleType,
4617
+ allowedQuestionTypes
4617
4618
  }) => {
4619
+ const availableQuestionTypes = allowedQuestionTypes || questionTypes;
4618
4620
  return /* @__PURE__ */ jsxs16("div", { children: [
4619
4621
  /* @__PURE__ */ jsx21(Text_default, { size: "sm", weight: "bold", className: "mb-3 block", children: "Tipo de quest\xE3o" }),
4620
- /* @__PURE__ */ jsx21("div", { className: "grid grid-cols-2 gap-2", children: questionTypes.map((questionType) => /* @__PURE__ */ jsx21(
4622
+ /* @__PURE__ */ jsx21("div", { className: "grid grid-cols-2 gap-2", children: availableQuestionTypes.map((questionType) => /* @__PURE__ */ jsx21(
4621
4623
  Chips_default,
4622
4624
  {
4623
4625
  selected: selectedTypes.includes(questionType),
@@ -4628,10 +4630,11 @@ var QuestionTypeFilter = ({
4628
4630
  )) })
4629
4631
  ] });
4630
4632
  };
4631
- var BanksFilter = ({
4633
+ var BanksAndYearsFilter = ({
4632
4634
  banks,
4633
- selectedBanks,
4634
- onToggleBank,
4635
+ bankYears,
4636
+ bankCategories,
4637
+ onBankCategoriesChange,
4635
4638
  loading = false,
4636
4639
  error = null
4637
4640
  }) => {
@@ -4641,18 +4644,21 @@ var BanksFilter = ({
4641
4644
  if (error) {
4642
4645
  return /* @__PURE__ */ jsx21(Text_default, { size: "sm", className: "text-text-600", children: error });
4643
4646
  }
4644
- if (banks.length === 0) {
4647
+ if (banks.length === 0 && bankYears.length === 0) {
4645
4648
  return /* @__PURE__ */ jsx21(Text_default, { size: "sm", className: "text-text-600", children: "Nenhuma banca encontrada" });
4646
4649
  }
4647
- return /* @__PURE__ */ jsx21("div", { className: "grid grid-cols-2 gap-2", children: banks.map((bank) => /* @__PURE__ */ jsx21(
4648
- Chips_default,
4649
- {
4650
- selected: selectedBanks.includes(bank.examInstitution),
4651
- onClick: () => onToggleBank(bank.examInstitution),
4652
- children: bank.examInstitution
4653
- },
4654
- bank.examInstitution
4655
- )) });
4650
+ if (bankCategories.length > 0) {
4651
+ return /* @__PURE__ */ jsx21(
4652
+ CheckboxGroup,
4653
+ {
4654
+ categories: bankCategories,
4655
+ onCategoriesChange: onBankCategoriesChange,
4656
+ compactSingleItem: true,
4657
+ showSingleItem: true
4658
+ }
4659
+ );
4660
+ }
4661
+ return null;
4656
4662
  };
4657
4663
  var SubjectsFilter = ({
4658
4664
  knowledgeAreas,
@@ -4701,38 +4707,10 @@ var SubjectsFilter = ({
4701
4707
  area.id
4702
4708
  )) });
4703
4709
  };
4704
- var KnowledgeSummary = ({
4705
- knowledgeStructure,
4706
- selectedKnowledgeSummary
4707
- }) => {
4708
- return /* @__PURE__ */ jsxs16("div", { className: "mt-4 p-3 bg-background-50 rounded-lg border border-border-200", children: [
4709
- /* @__PURE__ */ jsx21(Text_default, { size: "sm", weight: "bold", className: "mb-2 block", children: "Resumo da sele\xE7\xE3o" }),
4710
- /* @__PURE__ */ jsxs16("div", { className: "flex flex-col gap-2", children: [
4711
- knowledgeStructure.topics.length === 1 && /* @__PURE__ */ jsxs16("div", { children: [
4712
- /* @__PURE__ */ jsx21(Text_default, { size: "xs", weight: "medium", className: "text-text-600", children: "Tema:" }),
4713
- /* @__PURE__ */ jsx21("div", { className: "flex flex-wrap gap-1 mt-1", children: selectedKnowledgeSummary.topics.map((topic) => /* @__PURE__ */ jsx21(Chips_default, { selected: true, children: topic }, topic)) })
4714
- ] }),
4715
- knowledgeStructure.subtopics.length === 1 && /* @__PURE__ */ jsxs16("div", { children: [
4716
- /* @__PURE__ */ jsx21(Text_default, { size: "xs", weight: "medium", className: "text-text-600", children: "Subtema:" }),
4717
- /* @__PURE__ */ jsx21("div", { className: "flex flex-wrap gap-1 mt-1", children: selectedKnowledgeSummary.subtopics.map((subtopic) => /* @__PURE__ */ jsx21(Chips_default, { selected: true, children: subtopic }, subtopic)) })
4718
- ] }),
4719
- knowledgeStructure.contents.length === 1 && /* @__PURE__ */ jsxs16("div", { children: [
4720
- /* @__PURE__ */ jsx21(Text_default, { size: "xs", weight: "medium", className: "text-text-600", children: "Assunto:" }),
4721
- /* @__PURE__ */ jsx21("div", { className: "flex flex-wrap gap-1 mt-1", children: selectedKnowledgeSummary.contents.map((content) => /* @__PURE__ */ jsx21(Chips_default, { selected: true, children: content }, content)) })
4722
- ] })
4723
- ] })
4724
- ] });
4725
- };
4726
4710
  var KnowledgeStructureFilter = ({
4727
4711
  knowledgeStructure,
4728
4712
  knowledgeCategories,
4729
- handleCategoriesChange,
4730
- selectedKnowledgeSummary = {
4731
- topics: [],
4732
- subtopics: [],
4733
- contents: []
4734
- },
4735
- enableSummary = false
4713
+ handleCategoriesChange
4736
4714
  }) => {
4737
4715
  return /* @__PURE__ */ jsxs16("div", { className: "mt-4", children: [
4738
4716
  /* @__PURE__ */ jsx21(Text_default, { size: "sm", weight: "bold", className: "mb-3 block", children: "Tema, Subtema e Assunto" }),
@@ -4742,17 +4720,12 @@ var KnowledgeStructureFilter = ({
4742
4720
  CheckboxGroup,
4743
4721
  {
4744
4722
  categories: knowledgeCategories,
4745
- onCategoriesChange: handleCategoriesChange
4723
+ onCategoriesChange: handleCategoriesChange,
4724
+ compactSingleItem: false,
4725
+ showSingleItem: true
4746
4726
  }
4747
4727
  ),
4748
- !knowledgeStructure.loading && knowledgeCategories.length === 0 && knowledgeStructure.topics.length === 0 && /* @__PURE__ */ jsx21(Text_default, { size: "sm", className: "text-text-600", children: "Nenhum tema dispon\xEDvel para as mat\xE9rias selecionadas" }),
4749
- enableSummary && /* @__PURE__ */ jsx21(
4750
- KnowledgeSummary,
4751
- {
4752
- knowledgeStructure,
4753
- selectedKnowledgeSummary
4754
- }
4755
- )
4728
+ !knowledgeStructure.loading && knowledgeCategories.length === 0 && knowledgeStructure.topics.length === 0 && /* @__PURE__ */ jsx21(Text_default, { size: "sm", className: "text-text-600", children: "Nenhum tema dispon\xEDvel para as mat\xE9rias selecionadas" })
4756
4729
  ] });
4757
4730
  };
4758
4731
  var FilterActions = ({
@@ -4772,6 +4745,7 @@ var ActivityFilters = ({
4772
4745
  variant = "default",
4773
4746
  // Data
4774
4747
  banks = [],
4748
+ bankYears = [],
4775
4749
  knowledgeAreas = [],
4776
4750
  knowledgeStructure = {
4777
4751
  topics: [],
@@ -4781,6 +4755,8 @@ var ActivityFilters = ({
4781
4755
  error: null
4782
4756
  },
4783
4757
  knowledgeCategories = [],
4758
+ // Question types
4759
+ allowedQuestionTypes,
4784
4760
  // Loading states
4785
4761
  loadingBanks = false,
4786
4762
  loadingKnowledge: _loadingKnowledge = false,
@@ -4796,19 +4772,47 @@ var ActivityFilters = ({
4796
4772
  loadContents: _loadContents,
4797
4773
  // Handlers
4798
4774
  handleCategoriesChange,
4799
- selectedKnowledgeSummary = {
4800
- topics: [],
4801
- subtopics: [],
4802
- contents: []
4803
- },
4804
- enableSummary = false,
4805
4775
  // Action buttons
4806
4776
  onClearFilters,
4807
4777
  onApplyFilters
4808
4778
  }) => {
4809
4779
  const [selectedQuestionTypes, setSelectedQuestionTypes] = useState9([]);
4810
- const [selectedBanks, setSelectedBanks] = useState9([]);
4811
4780
  const [selectedSubject, setSelectedSubject] = useState9(null);
4781
+ const prevAllowedQuestionTypesRef = useRef6(null);
4782
+ useEffect10(() => {
4783
+ if (!allowedQuestionTypes || allowedQuestionTypes.length === 0) {
4784
+ prevAllowedQuestionTypesRef.current = null;
4785
+ return;
4786
+ }
4787
+ const currentKey = allowedQuestionTypes.slice().sort((a, b) => {
4788
+ return a === b ? 0 : allowedQuestionTypes.indexOf(a) - allowedQuestionTypes.indexOf(b);
4789
+ }).join(",");
4790
+ const prevKey = prevAllowedQuestionTypesRef.current;
4791
+ if (currentKey === prevKey) {
4792
+ return;
4793
+ }
4794
+ prevAllowedQuestionTypesRef.current = currentKey;
4795
+ setSelectedQuestionTypes((prev) => {
4796
+ const filtered = prev.filter(
4797
+ (type) => allowedQuestionTypes.includes(type)
4798
+ );
4799
+ if (filtered.length !== prev.length) {
4800
+ return filtered;
4801
+ }
4802
+ const prevSet = new Set(prev);
4803
+ const filteredSet = new Set(filtered);
4804
+ if (prevSet.size !== filteredSet.size) {
4805
+ return filtered;
4806
+ }
4807
+ for (const item of prevSet) {
4808
+ if (!filteredSet.has(item)) {
4809
+ return filtered;
4810
+ }
4811
+ }
4812
+ return prev;
4813
+ });
4814
+ }, [allowedQuestionTypes]);
4815
+ const [bankCategories, setBankCategories] = useState9([]);
4812
4816
  const selectedSubjects = useMemo2(
4813
4817
  () => selectedSubject ? [selectedSubject] : [],
4814
4818
  [selectedSubject]
@@ -4816,12 +4820,38 @@ var ActivityFilters = ({
4816
4820
  const toggleQuestionType = (questionType) => {
4817
4821
  setSelectedQuestionTypes((prev) => toggleArrayItem(prev, questionType));
4818
4822
  };
4819
- const toggleBank = (bankName) => {
4820
- setSelectedBanks((prev) => toggleArrayItem(prev, bankName));
4821
- };
4822
4823
  const handleSubjectChange = (subjectId) => {
4823
4824
  setSelectedSubject(toggleSingleValue(selectedSubject, subjectId));
4824
4825
  };
4826
+ const handleBankCategoriesChange = (updatedCategories) => {
4827
+ setBankCategories(updatedCategories);
4828
+ };
4829
+ useEffect10(() => {
4830
+ setBankCategories((prevCategories) => {
4831
+ const bankCategory = {
4832
+ key: "banca",
4833
+ label: "Banca",
4834
+ itens: banks.map((bank) => ({
4835
+ id: bank.id,
4836
+ name: bank.name || bank.examInstitution
4837
+ })),
4838
+ selectedIds: prevCategories.find((c) => c.key === "banca")?.selectedIds || []
4839
+ };
4840
+ const yearCategory = {
4841
+ key: "ano",
4842
+ label: "Ano",
4843
+ dependsOn: ["banca"],
4844
+ itens: bankYears.map((year) => ({
4845
+ id: year.id,
4846
+ name: year.name,
4847
+ bankId: year.bankId
4848
+ })),
4849
+ filteredBy: [{ key: "banca", internalField: "bankId" }],
4850
+ selectedIds: prevCategories.find((c) => c.key === "ano")?.selectedIds || []
4851
+ };
4852
+ return [bankCategory, yearCategory];
4853
+ });
4854
+ }, [banks, bankYears]);
4825
4855
  useEffect10(() => {
4826
4856
  if (loadBanks) {
4827
4857
  loadBanks();
@@ -4842,24 +4872,36 @@ var ActivityFilters = ({
4842
4872
  contentIds: "assunto"
4843
4873
  });
4844
4874
  }, [knowledgeCategories]);
4875
+ const getSelectedBankIds = useCallback(() => {
4876
+ return getSelectedIdsFromCategories(bankCategories, {
4877
+ bankIds: "banca",
4878
+ yearIds: "ano"
4879
+ });
4880
+ }, [bankCategories]);
4881
+ const onFiltersChangeRef = useRef6(onFiltersChange);
4882
+ useEffect10(() => {
4883
+ onFiltersChangeRef.current = onFiltersChange;
4884
+ }, [onFiltersChange]);
4845
4885
  useEffect10(() => {
4846
4886
  const knowledgeIds = getSelectedKnowledgeIds();
4887
+ const bankIds = getSelectedBankIds();
4847
4888
  const filters = {
4848
4889
  types: selectedQuestionTypes,
4849
- bankIds: selectedBanks,
4890
+ bankIds: bankIds.bankIds || [],
4891
+ yearIds: bankIds.yearIds || [],
4850
4892
  knowledgeIds: selectedSubjects,
4851
4893
  topicIds: knowledgeIds.topicIds,
4852
4894
  subtopicIds: knowledgeIds.subtopicIds,
4853
4895
  contentIds: knowledgeIds.contentIds
4854
4896
  };
4855
- onFiltersChange(filters);
4897
+ onFiltersChangeRef.current(filters);
4856
4898
  }, [
4857
4899
  selectedQuestionTypes,
4858
- selectedBanks,
4859
4900
  selectedSubjects,
4860
4901
  knowledgeCategories,
4902
+ bankCategories,
4861
4903
  getSelectedKnowledgeIds,
4862
- onFiltersChange
4904
+ getSelectedBankIds
4863
4905
  ]);
4864
4906
  const containerClassName = variant === "popover" ? "w-full bg-background" : "w-[400px] flex-shrink-0 p-4 bg-background";
4865
4907
  const contentClassName = variant === "popover" ? "p-4" : "";
@@ -4870,17 +4912,19 @@ var ActivityFilters = ({
4870
4912
  QuestionTypeFilter,
4871
4913
  {
4872
4914
  selectedTypes: selectedQuestionTypes,
4873
- onToggleType: toggleQuestionType
4915
+ onToggleType: toggleQuestionType,
4916
+ allowedQuestionTypes
4874
4917
  }
4875
4918
  ),
4876
4919
  /* @__PURE__ */ jsxs16("div", { children: [
4877
4920
  /* @__PURE__ */ jsx21(Text_default, { size: "sm", weight: "bold", className: "mb-3 block", children: "Banca de vestibular" }),
4878
4921
  /* @__PURE__ */ jsx21(
4879
- BanksFilter,
4922
+ BanksAndYearsFilter,
4880
4923
  {
4881
4924
  banks,
4882
- selectedBanks,
4883
- onToggleBank: toggleBank,
4925
+ bankYears,
4926
+ bankCategories,
4927
+ onBankCategoriesChange: handleBankCategoriesChange,
4884
4928
  loading: loadingBanks,
4885
4929
  error: banksError
4886
4930
  }
@@ -4904,9 +4948,7 @@ var ActivityFilters = ({
4904
4948
  {
4905
4949
  knowledgeStructure,
4906
4950
  knowledgeCategories,
4907
- handleCategoriesChange,
4908
- selectedKnowledgeSummary,
4909
- enableSummary
4951
+ handleCategoriesChange
4910
4952
  }
4911
4953
  ),
4912
4954
  /* @__PURE__ */ jsx21(