@lv-x-software-house/x_view 1.2.5-dev.15 → 1.2.5-dev.17

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
@@ -627,31 +627,47 @@ function XViewSidebar({
627
627
  }, [userRole]);
628
628
  const contextLabel = (0, import_react2.useMemo)(() => {
629
629
  if (!viewType || !viewName) return null;
630
- const typeLower = viewType.toLowerCase();
631
- if (typeLower === "database") {
632
- return `Dataset: ${viewName}`;
633
- } else if (typeLower === "view") {
634
- return `View: ${viewName}`;
635
- } else if (typeLower === "node") {
636
- return `Node: ${viewName}`;
637
- }
638
- return `${viewType}: ${viewName}`;
630
+ console.log("XViewSidebar: contextLabel viewType", viewType);
631
+ try {
632
+ const typeLower = viewType.toLowerCase();
633
+ if (typeLower === "database") {
634
+ return `Dataset: ${viewName}`;
635
+ } else if (typeLower === "view") {
636
+ return `View: ${viewName}`;
637
+ } else if (typeLower === "node") {
638
+ return `Node: ${viewName}`;
639
+ }
640
+ return `${viewType}: ${viewName}`;
641
+ } catch (err) {
642
+ console.error("XViewSidebar: Erro no contextLabel ao converter viewType:", viewType, err);
643
+ return `${viewType}: ${viewName}`;
644
+ }
639
645
  }, [viewType, viewName]);
640
- const normalize = (str = "") => String(str).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[._\-–—:,;!?'"()\[\]{}/\\]/g, " ").replace(/\s+/g, " ").trim();
646
+ const normalize = (str = "") => {
647
+ if (str === void 0 || str === null) {
648
+ console.warn("XViewSidebar: normalize recebeu valor nulo/indefinido:", str);
649
+ }
650
+ return String(str).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[._\-–—:,;!?'"()\[\]{}/\\]/g, " ").replace(/\s+/g, " ").trim();
651
+ };
641
652
  const collator = (0, import_react2.useMemo)(
642
653
  () => new Intl.Collator("pt-BR", { sensitivity: "base", numeric: true }),
643
654
  []
644
655
  );
645
656
  const availableTypes = (0, import_react2.useMemo)(() => {
657
+ console.log("XViewSidebar: recalculando availableTypes, dbNodes count:", dbNodes == null ? void 0 : dbNodes.length);
646
658
  const typesSet = /* @__PURE__ */ new Set();
647
659
  (dbNodes || []).forEach((node) => {
648
660
  if (Array.isArray(node.type)) {
649
- node.type.forEach((t) => typesSet.add(t));
650
- } else if (node.type) {
661
+ node.type.forEach((t) => {
662
+ if (t && typeof t === "string" && t.trim() !== "") typesSet.add(t);
663
+ });
664
+ } else if (node.type && typeof node.type === "string" && node.type.trim() !== "") {
651
665
  typesSet.add(node.type);
652
666
  }
653
667
  });
654
- return Array.from(typesSet).sort();
668
+ const result = Array.from(typesSet).sort();
669
+ console.log("XViewSidebar: availableTypes final:", result);
670
+ return result;
655
671
  }, [dbNodes]);
656
672
  const filteredAndSorted = (0, import_react2.useMemo)(() => {
657
673
  const base = Array.isArray(dbNodes) ? dbNodes : [];
@@ -665,13 +681,22 @@ function XViewSidebar({
665
681
  });
666
682
  }
667
683
  if (activeFilters.length > 0) {
684
+ console.log("XViewSidebar: aplicando activeFilters:", activeFilters);
668
685
  pool = pool.filter((node) => {
669
686
  return activeFilters.every((filter) => {
670
- if (filter.type === "Type") {
671
- const nodeTypes = Array.isArray(node.type) ? node.type : [node.type];
672
- return nodeTypes.some((t) => String(t).toLowerCase() === String(filter.value).toLowerCase());
673
- } else if (filter.type === "Color") {
674
- return String(node.color).toLowerCase() === String(filter.value).toLowerCase();
687
+ try {
688
+ if (filter.type === "Type") {
689
+ const nodeTypes = Array.isArray(node.type) ? node.type : [node.type];
690
+ return nodeTypes.some((t) => {
691
+ if (t === void 0) console.log("XViewSidebar: t \xE9 undefined no node:", node.id);
692
+ if (filter.value === void 0) console.log("XViewSidebar: filter.value \xE9 undefined");
693
+ return String(t).toLowerCase() === String(filter.value).toLowerCase();
694
+ });
695
+ } else if (filter.type === "Color") {
696
+ return String(node.color).toLowerCase() === String(filter.value).toLowerCase();
697
+ }
698
+ } catch (err) {
699
+ console.error("XViewSidebar: Erro ao filtrar node:", node, "com filtro:", filter, err);
675
700
  }
676
701
  return true;
677
702
  });
@@ -7755,13 +7780,23 @@ function InSceneCreationForm({
7755
7780
  }, [hasImages, useImageAsTexture, onImageChange]);
7756
7781
  (0, import_react14.useEffect)(() => {
7757
7782
  let result = [];
7783
+ const validExistingTypes = existingTypes.filter((t) => t && typeof t === "string" && t.trim() !== "");
7758
7784
  if (typeInput.trim() === "") {
7759
- result = existingTypes.filter((t) => !types.includes(t));
7785
+ result = validExistingTypes.filter((t) => !types.includes(t));
7760
7786
  } else {
7761
- const lowercasedInput = typeInput.toLowerCase();
7762
- result = existingTypes.filter(
7763
- (t) => t.toLowerCase().includes(lowercasedInput) && !types.includes(t)
7764
- );
7787
+ console.log("InSceneCreationForm: Filtrando tipos com input:", typeInput);
7788
+ try {
7789
+ const lowercasedInput = typeInput.toLowerCase();
7790
+ result = validExistingTypes.filter((t) => {
7791
+ if (!t) {
7792
+ console.warn("InSceneCreationForm: Tipo encontrado como undefined/null durante filtragem");
7793
+ return false;
7794
+ }
7795
+ return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
7796
+ });
7797
+ } catch (err) {
7798
+ console.error("InSceneCreationForm: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
7799
+ }
7765
7800
  }
7766
7801
  if (sourceTypes) {
7767
7802
  const priorityTypes = Array.isArray(sourceTypes) ? sourceTypes : [sourceTypes];
@@ -8607,15 +8642,22 @@ function NodeDetailsPanel({
8607
8642
  }
8608
8643
  }, [hasImages, useImageAsTexture]);
8609
8644
  (0, import_react17.useEffect)(() => {
8645
+ const validExistingTypes = existingTypes.filter((t) => t && typeof t === "string" && t.trim() !== "");
8610
8646
  if (typeInput.trim() === "") {
8611
- setFilteredTypes(existingTypes.filter((t) => !types.includes(t)));
8647
+ setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
8612
8648
  } else {
8613
- const lowercasedInput = typeInput.toLowerCase();
8614
- setFilteredTypes(
8615
- existingTypes.filter(
8616
- (t) => t.toLowerCase().includes(lowercasedInput) && !types.includes(t)
8617
- )
8618
- );
8649
+ console.log("NodeDetailsPanel: Filtrando tipos com input:", typeInput);
8650
+ try {
8651
+ const lowercasedInput = typeInput.toLowerCase();
8652
+ setFilteredTypes(
8653
+ validExistingTypes.filter((t) => {
8654
+ if (!t) return false;
8655
+ return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
8656
+ })
8657
+ );
8658
+ } catch (err) {
8659
+ console.error("NodeDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
8660
+ }
8619
8661
  }
8620
8662
  }, [typeInput, existingTypes, types]);
8621
8663
  const handleIntensityChangeLocal = (e) => {
@@ -9108,15 +9150,25 @@ function QuestDetailsPanel({
9108
9150
  }
9109
9151
  }, [node]);
9110
9152
  (0, import_react18.useEffect)(() => {
9153
+ const validExistingTypes = existingTypes.filter((t) => t && typeof t === "string" && t.trim() !== "");
9111
9154
  if (typeInput.trim() === "") {
9112
- setFilteredTypes(existingTypes.filter((t) => !types.includes(t)));
9155
+ setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
9113
9156
  } else {
9114
- const lowercasedInput = typeInput.toLowerCase();
9115
- setFilteredTypes(
9116
- existingTypes.filter(
9117
- (t) => t.toLowerCase().includes(lowercasedInput) && !types.includes(t)
9118
- )
9119
- );
9157
+ console.log("QuestDetailsPanel: Filtrando tipos com input:", typeInput);
9158
+ try {
9159
+ const lowercasedInput = typeInput.toLowerCase();
9160
+ setFilteredTypes(
9161
+ validExistingTypes.filter((t) => {
9162
+ if (!t) {
9163
+ console.warn("QuestDetailsPanel: Tipo encontrado como undefined/null durante filtragem");
9164
+ return false;
9165
+ }
9166
+ return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
9167
+ })
9168
+ );
9169
+ } catch (err) {
9170
+ console.error("QuestDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
9171
+ }
9120
9172
  }
9121
9173
  }, [typeInput, existingTypes, types]);
9122
9174
  const handleCopyLink = () => {
package/dist/index.mjs CHANGED
@@ -588,31 +588,47 @@ function XViewSidebar({
588
588
  }, [userRole]);
589
589
  const contextLabel = useMemo2(() => {
590
590
  if (!viewType || !viewName) return null;
591
- const typeLower = viewType.toLowerCase();
592
- if (typeLower === "database") {
593
- return `Dataset: ${viewName}`;
594
- } else if (typeLower === "view") {
595
- return `View: ${viewName}`;
596
- } else if (typeLower === "node") {
597
- return `Node: ${viewName}`;
598
- }
599
- return `${viewType}: ${viewName}`;
591
+ console.log("XViewSidebar: contextLabel viewType", viewType);
592
+ try {
593
+ const typeLower = viewType.toLowerCase();
594
+ if (typeLower === "database") {
595
+ return `Dataset: ${viewName}`;
596
+ } else if (typeLower === "view") {
597
+ return `View: ${viewName}`;
598
+ } else if (typeLower === "node") {
599
+ return `Node: ${viewName}`;
600
+ }
601
+ return `${viewType}: ${viewName}`;
602
+ } catch (err) {
603
+ console.error("XViewSidebar: Erro no contextLabel ao converter viewType:", viewType, err);
604
+ return `${viewType}: ${viewName}`;
605
+ }
600
606
  }, [viewType, viewName]);
601
- const normalize = (str = "") => String(str).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[._\-–—:,;!?'"()\[\]{}/\\]/g, " ").replace(/\s+/g, " ").trim();
607
+ const normalize = (str = "") => {
608
+ if (str === void 0 || str === null) {
609
+ console.warn("XViewSidebar: normalize recebeu valor nulo/indefinido:", str);
610
+ }
611
+ return String(str).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[._\-–—:,;!?'"()\[\]{}/\\]/g, " ").replace(/\s+/g, " ").trim();
612
+ };
602
613
  const collator = useMemo2(
603
614
  () => new Intl.Collator("pt-BR", { sensitivity: "base", numeric: true }),
604
615
  []
605
616
  );
606
617
  const availableTypes = useMemo2(() => {
618
+ console.log("XViewSidebar: recalculando availableTypes, dbNodes count:", dbNodes == null ? void 0 : dbNodes.length);
607
619
  const typesSet = /* @__PURE__ */ new Set();
608
620
  (dbNodes || []).forEach((node) => {
609
621
  if (Array.isArray(node.type)) {
610
- node.type.forEach((t) => typesSet.add(t));
611
- } else if (node.type) {
622
+ node.type.forEach((t) => {
623
+ if (t && typeof t === "string" && t.trim() !== "") typesSet.add(t);
624
+ });
625
+ } else if (node.type && typeof node.type === "string" && node.type.trim() !== "") {
612
626
  typesSet.add(node.type);
613
627
  }
614
628
  });
615
- return Array.from(typesSet).sort();
629
+ const result = Array.from(typesSet).sort();
630
+ console.log("XViewSidebar: availableTypes final:", result);
631
+ return result;
616
632
  }, [dbNodes]);
617
633
  const filteredAndSorted = useMemo2(() => {
618
634
  const base = Array.isArray(dbNodes) ? dbNodes : [];
@@ -626,13 +642,22 @@ function XViewSidebar({
626
642
  });
627
643
  }
628
644
  if (activeFilters.length > 0) {
645
+ console.log("XViewSidebar: aplicando activeFilters:", activeFilters);
629
646
  pool = pool.filter((node) => {
630
647
  return activeFilters.every((filter) => {
631
- if (filter.type === "Type") {
632
- const nodeTypes = Array.isArray(node.type) ? node.type : [node.type];
633
- return nodeTypes.some((t) => String(t).toLowerCase() === String(filter.value).toLowerCase());
634
- } else if (filter.type === "Color") {
635
- return String(node.color).toLowerCase() === String(filter.value).toLowerCase();
648
+ try {
649
+ if (filter.type === "Type") {
650
+ const nodeTypes = Array.isArray(node.type) ? node.type : [node.type];
651
+ return nodeTypes.some((t) => {
652
+ if (t === void 0) console.log("XViewSidebar: t \xE9 undefined no node:", node.id);
653
+ if (filter.value === void 0) console.log("XViewSidebar: filter.value \xE9 undefined");
654
+ return String(t).toLowerCase() === String(filter.value).toLowerCase();
655
+ });
656
+ } else if (filter.type === "Color") {
657
+ return String(node.color).toLowerCase() === String(filter.value).toLowerCase();
658
+ }
659
+ } catch (err) {
660
+ console.error("XViewSidebar: Erro ao filtrar node:", node, "com filtro:", filter, err);
636
661
  }
637
662
  return true;
638
663
  });
@@ -7747,13 +7772,23 @@ function InSceneCreationForm({
7747
7772
  }, [hasImages, useImageAsTexture, onImageChange]);
7748
7773
  useEffect13(() => {
7749
7774
  let result = [];
7775
+ const validExistingTypes = existingTypes.filter((t) => t && typeof t === "string" && t.trim() !== "");
7750
7776
  if (typeInput.trim() === "") {
7751
- result = existingTypes.filter((t) => !types.includes(t));
7777
+ result = validExistingTypes.filter((t) => !types.includes(t));
7752
7778
  } else {
7753
- const lowercasedInput = typeInput.toLowerCase();
7754
- result = existingTypes.filter(
7755
- (t) => t.toLowerCase().includes(lowercasedInput) && !types.includes(t)
7756
- );
7779
+ console.log("InSceneCreationForm: Filtrando tipos com input:", typeInput);
7780
+ try {
7781
+ const lowercasedInput = typeInput.toLowerCase();
7782
+ result = validExistingTypes.filter((t) => {
7783
+ if (!t) {
7784
+ console.warn("InSceneCreationForm: Tipo encontrado como undefined/null durante filtragem");
7785
+ return false;
7786
+ }
7787
+ return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
7788
+ });
7789
+ } catch (err) {
7790
+ console.error("InSceneCreationForm: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
7791
+ }
7757
7792
  }
7758
7793
  if (sourceTypes) {
7759
7794
  const priorityTypes = Array.isArray(sourceTypes) ? sourceTypes : [sourceTypes];
@@ -8599,15 +8634,22 @@ function NodeDetailsPanel({
8599
8634
  }
8600
8635
  }, [hasImages, useImageAsTexture]);
8601
8636
  useEffect15(() => {
8637
+ const validExistingTypes = existingTypes.filter((t) => t && typeof t === "string" && t.trim() !== "");
8602
8638
  if (typeInput.trim() === "") {
8603
- setFilteredTypes(existingTypes.filter((t) => !types.includes(t)));
8639
+ setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
8604
8640
  } else {
8605
- const lowercasedInput = typeInput.toLowerCase();
8606
- setFilteredTypes(
8607
- existingTypes.filter(
8608
- (t) => t.toLowerCase().includes(lowercasedInput) && !types.includes(t)
8609
- )
8610
- );
8641
+ console.log("NodeDetailsPanel: Filtrando tipos com input:", typeInput);
8642
+ try {
8643
+ const lowercasedInput = typeInput.toLowerCase();
8644
+ setFilteredTypes(
8645
+ validExistingTypes.filter((t) => {
8646
+ if (!t) return false;
8647
+ return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
8648
+ })
8649
+ );
8650
+ } catch (err) {
8651
+ console.error("NodeDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
8652
+ }
8611
8653
  }
8612
8654
  }, [typeInput, existingTypes, types]);
8613
8655
  const handleIntensityChangeLocal = (e) => {
@@ -9100,15 +9142,25 @@ function QuestDetailsPanel({
9100
9142
  }
9101
9143
  }, [node]);
9102
9144
  useEffect16(() => {
9145
+ const validExistingTypes = existingTypes.filter((t) => t && typeof t === "string" && t.trim() !== "");
9103
9146
  if (typeInput.trim() === "") {
9104
- setFilteredTypes(existingTypes.filter((t) => !types.includes(t)));
9147
+ setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
9105
9148
  } else {
9106
- const lowercasedInput = typeInput.toLowerCase();
9107
- setFilteredTypes(
9108
- existingTypes.filter(
9109
- (t) => t.toLowerCase().includes(lowercasedInput) && !types.includes(t)
9110
- )
9111
- );
9149
+ console.log("QuestDetailsPanel: Filtrando tipos com input:", typeInput);
9150
+ try {
9151
+ const lowercasedInput = typeInput.toLowerCase();
9152
+ setFilteredTypes(
9153
+ validExistingTypes.filter((t) => {
9154
+ if (!t) {
9155
+ console.warn("QuestDetailsPanel: Tipo encontrado como undefined/null durante filtragem");
9156
+ return false;
9157
+ }
9158
+ return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
9159
+ })
9160
+ );
9161
+ } catch (err) {
9162
+ console.error("QuestDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
9163
+ }
9112
9164
  }
9113
9165
  }, [typeInput, existingTypes, types]);
9114
9166
  const handleCopyLink = () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lv-x-software-house/x_view",
3
- "version": "1.2.5-dev.15",
3
+ "version": "1.2.5-dev.17",
4
4
  "description": "Pacote privado contendo os componentes e lógica de renderização 3D do X View.",
5
5
  "author": "iv.x - Engenharia de Software - ivxsoftwarehouse@gmail.com",
6
6
  "license": "UNLICENSED",