@lv-x-software-house/x_view 1.2.8-dev.1 → 1.2.8-dev.11

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 (3) hide show
  1. package/dist/index.js +385 -190
  2. package/dist/index.mjs +385 -190
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -322,7 +322,12 @@ var updateExistingNodeVisuals = (state, updatedNode) => {
322
322
  if (oldLabelObject.material) oldLabelObject.material.dispose();
323
323
  }
324
324
  }
325
- const newMesh = createNodeMesh(updatedNode, position, state.glowTexture, hadQuestDateLabel);
325
+ const newMesh = createNodeMesh(
326
+ updatedNode,
327
+ position,
328
+ state.glowTexture,
329
+ hadQuestDateLabel
330
+ );
326
331
  if (oldTimelineBar) {
327
332
  newMesh.userData.timelineIntervalBar = oldTimelineBar;
328
333
  }
@@ -874,7 +879,12 @@ var removeNodeFromScene = (state, nodeId) => {
874
879
  var addStandaloneNodeToScene = (state, nodeData, position, forceShowQuestDate = false) => {
875
880
  const { graphGroup, nodeObjects, clickableNodes, glowTexture } = state;
876
881
  if (!graphGroup) return;
877
- const mesh = createNodeMesh(nodeData, position, glowTexture, forceShowQuestDate);
882
+ const mesh = createNodeMesh(
883
+ nodeData,
884
+ position,
885
+ glowTexture,
886
+ forceShowQuestDate
887
+ );
878
888
  mesh.scale.set(0.01, 0.01, 0.01);
879
889
  graphGroup.add(mesh);
880
890
  if (mesh.userData.labelObject) {
@@ -1092,7 +1102,9 @@ var userActionHandlers = {
1092
1102
  if (isCrossDataset) {
1093
1103
  graphDataRef.current[finalTargetDatasetId] = targetDataToUpdate;
1094
1104
  }
1095
- if (sceneDataRef.current.parent_dbs.some((db) => String(db.db_id) === String(sourceParentInfo.parentFileId))) {
1105
+ if (sceneDataRef.current.parent_dbs.some(
1106
+ (db) => String(db.db_id) === String(sourceParentInfo.parentFileId)
1107
+ )) {
1096
1108
  }
1097
1109
  const finalPosition = stateRef.current.ghostElements.node.position.clone();
1098
1110
  addNewNodeToScene(stateRef.current, newNode, newLink, finalPosition);
@@ -1287,7 +1299,10 @@ var userActionHandlers = {
1287
1299
  context.sceneSaveUrl,
1288
1300
  viewFilePayload
1289
1301
  );
1290
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
1302
+ const questSaveUrl = context.sceneSaveUrl.replace(
1303
+ "x_view_scenes",
1304
+ "x_view_quests"
1305
+ );
1291
1306
  await context.actions.save_view_data(questSaveUrl, questFilePayload);
1292
1307
  } else {
1293
1308
  const filenameForSpecificParent = `x_view_dbs/${ownerId}/${parentFileId}`;
@@ -1542,20 +1557,19 @@ var userActionHandlers = {
1542
1557
  const viewFilePayload = {
1543
1558
  parent_dbs: sceneDataRef.current.parent_dbs,
1544
1559
  nodes: sceneDataRef.current.nodes,
1545
- links: sceneDataRef.current.links,
1546
- quest_counter: sceneDataRef.current.quest_counter || 1
1547
- };
1548
- const questFilePayload = {
1549
- nodes: specificParentData.nodes,
1550
- links: specificParentData.links,
1551
- milestones: sceneDataRef.current.milestones || []
1560
+ links: sceneDataRef.current.links
1552
1561
  };
1553
1562
  await context.actions.save_view_data(
1554
1563
  context.sceneSaveUrl,
1555
1564
  viewFilePayload
1556
1565
  );
1557
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
1558
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
1566
+ if (context.actions.upsert_quest_link_firestore) {
1567
+ await context.actions.upsert_quest_link_firestore(
1568
+ context.ownerId,
1569
+ context.sceneConfigId,
1570
+ newLink
1571
+ );
1572
+ }
1559
1573
  } else {
1560
1574
  const specificParentData = JSON.parse(
1561
1575
  JSON.stringify(graphDataRef.current[parentFileIdToSave])
@@ -1704,18 +1718,12 @@ var userActionHandlers = {
1704
1718
  const viewFilePayload = {
1705
1719
  parent_dbs: sceneDataRef.current.parent_dbs,
1706
1720
  nodes: sceneDataRef.current.nodes,
1707
- links: sceneDataRef.current.links,
1708
- quest_counter: sceneDataRef.current.quest_counter || 1
1721
+ links: sceneDataRef.current.links
1709
1722
  };
1710
- const questFilePayload = {
1711
- nodes: data.nodes,
1712
- links: data.links,
1713
- milestones: sceneDataRef.current.milestones || []
1714
- };
1715
- const p1 = context.actions.save_view_data(context.sceneSaveUrl, viewFilePayload);
1716
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
1717
- const p2 = context.actions.save_view_data(questSaveUrl, questFilePayload);
1718
- return Promise.all([p1, p2]);
1723
+ return context.actions.save_view_data(
1724
+ context.sceneSaveUrl,
1725
+ viewFilePayload
1726
+ );
1719
1727
  } else {
1720
1728
  return context.actions.save_view_data(
1721
1729
  `x_view_dbs/${fileOwnerId}/${fileId}`,
@@ -1740,6 +1748,15 @@ var userActionHandlers = {
1740
1748
  updatedOriginalParentData
1741
1749
  )
1742
1750
  );
1751
+ if (oldGoverningFileId === context.sceneConfigId && context.actions.delete_quest_link_firestore) {
1752
+ savePromises.push(
1753
+ context.actions.delete_quest_link_firestore(
1754
+ context.ownerId,
1755
+ context.sceneConfigId,
1756
+ linkId
1757
+ )
1758
+ );
1759
+ }
1743
1760
  const updatedNewParentData = JSON.parse(
1744
1761
  JSON.stringify(graphDataRef.current[newGoverningFileId])
1745
1762
  );
@@ -1753,6 +1770,15 @@ var userActionHandlers = {
1753
1770
  updatedNewParentData
1754
1771
  )
1755
1772
  );
1773
+ if (newGoverningFileId === context.sceneConfigId && context.actions.upsert_quest_link_firestore) {
1774
+ savePromises.push(
1775
+ context.actions.upsert_quest_link_firestore(
1776
+ context.ownerId,
1777
+ context.sceneConfigId,
1778
+ newLinkData
1779
+ )
1780
+ );
1781
+ }
1756
1782
  } else {
1757
1783
  const updatedParentData = JSON.parse(
1758
1784
  JSON.stringify(graphDataRef.current[oldGoverningFileId])
@@ -1769,6 +1795,15 @@ var userActionHandlers = {
1769
1795
  updatedParentData
1770
1796
  )
1771
1797
  );
1798
+ if (oldGoverningFileId === context.sceneConfigId && context.actions.upsert_quest_link_firestore) {
1799
+ savePromises.push(
1800
+ context.actions.upsert_quest_link_firestore(
1801
+ context.ownerId,
1802
+ context.sceneConfigId,
1803
+ newLinkData
1804
+ )
1805
+ );
1806
+ }
1772
1807
  }
1773
1808
  try {
1774
1809
  await Promise.all(savePromises);
@@ -1828,8 +1863,6 @@ var userActionHandlers = {
1828
1863
  specificParentData.links = newLinks;
1829
1864
  let filenameToSave;
1830
1865
  let payloadToSave;
1831
- let questSaveUrl;
1832
- let questFilePayload;
1833
1866
  const isView = ((_g = context.viewType) == null ? void 0 : _g.toLowerCase()) === "view";
1834
1867
  if (isView && parentFileId === context.sceneConfigId) {
1835
1868
  filenameToSave = context.sceneSaveUrl;
@@ -1839,14 +1872,7 @@ var userActionHandlers = {
1839
1872
  payloadToSave = {
1840
1873
  parent_dbs: sceneDataRef.current.parent_dbs,
1841
1874
  nodes: sceneDataRef.current.nodes,
1842
- links: sceneDataRef.current.links,
1843
- quest_counter: sceneDataRef.current.quest_counter || 1
1844
- };
1845
- questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
1846
- questFilePayload = {
1847
- nodes: specificParentData.nodes,
1848
- links: specificParentData.links,
1849
- milestones: sceneDataRef.current.milestones || []
1875
+ links: sceneDataRef.current.links
1850
1876
  };
1851
1877
  } else {
1852
1878
  filenameToSave = `x_view_dbs/${ownerId}/${parentFileId}`;
@@ -1854,8 +1880,12 @@ var userActionHandlers = {
1854
1880
  }
1855
1881
  try {
1856
1882
  await context.actions.save_view_data(filenameToSave, payloadToSave);
1857
- if (questSaveUrl && questFilePayload) {
1858
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
1883
+ if (isView && parentFileId === context.sceneConfigId && context.actions.delete_quest_link_firestore) {
1884
+ await context.actions.delete_quest_link_firestore(
1885
+ context.ownerId,
1886
+ context.sceneConfigId,
1887
+ linkIdToDelete
1888
+ );
1859
1889
  }
1860
1890
  graphDataRef.current[parentFileId] = specificParentData;
1861
1891
  setters.setDetailsLink(
@@ -2084,16 +2114,30 @@ var userActionHandlers = {
2084
2114
  payloadToSave = {
2085
2115
  parent_dbs: sceneDataRef.current.parent_dbs,
2086
2116
  nodes: sceneDataRef.current.nodes,
2087
- links: sceneDataRef.current.links,
2088
- quest_counter: sceneDataRef.current.quest_counter || 1
2089
- };
2090
- const questFilePayload = {
2091
- nodes: originalData.nodes,
2092
- links: originalData.links,
2093
- milestones: sceneDataRef.current.milestones || []
2117
+ links: sceneDataRef.current.links
2094
2118
  };
2095
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2096
- savePromises.push(context.actions.save_view_data(questSaveUrl, questFilePayload));
2119
+ if (context.actions.delete_quest_firestore) {
2120
+ nodesToDelete.forEach((nodeIdToDelete) => {
2121
+ savePromises.push(
2122
+ context.actions.delete_quest_firestore(
2123
+ context.ownerId,
2124
+ context.sceneConfigId,
2125
+ nodeIdToDelete
2126
+ )
2127
+ );
2128
+ });
2129
+ if (context.actions.delete_quest_link_firestore) {
2130
+ linksToDelete.forEach((linkIdToDelete) => {
2131
+ savePromises.push(
2132
+ context.actions.delete_quest_link_firestore(
2133
+ context.ownerId,
2134
+ context.sceneConfigId,
2135
+ linkIdToDelete
2136
+ )
2137
+ );
2138
+ });
2139
+ }
2140
+ }
2097
2141
  } else {
2098
2142
  filenameToSave = `x_view_dbs/${ownerId}/${parentFileId}`;
2099
2143
  payloadToSave = originalData;
@@ -2164,6 +2208,9 @@ var userActionHandlers = {
2164
2208
  const newLinks = (specificParentData.links || []).filter(
2165
2209
  (l) => String(l.source) !== strNodeId && String(l.target) !== strNodeId
2166
2210
  );
2211
+ const linksToDelete = (specificParentData.links || []).filter(
2212
+ (l) => String(l.source) === strNodeId || String(l.target) === strNodeId
2213
+ );
2167
2214
  specificParentData.nodes = newNodes;
2168
2215
  specificParentData.links = newLinks;
2169
2216
  let filenameToSave;
@@ -2182,18 +2229,27 @@ var userActionHandlers = {
2182
2229
  payloadToSave = {
2183
2230
  parent_dbs: sceneDataRef.current.parent_dbs,
2184
2231
  nodes: newVisualNodes,
2185
- links: newVisualLinks,
2186
- quest_counter: sceneDataRef.current.quest_counter || 1
2232
+ links: newVisualLinks
2187
2233
  };
2188
- const questFilePayload = {
2189
- nodes: specificParentData.nodes,
2190
- links: specificParentData.links,
2191
- milestones: sceneDataRef.current.milestones || []
2192
- };
2193
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2194
2234
  try {
2195
2235
  await context.actions.save_view_data(filenameToSave, payloadToSave);
2196
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
2236
+ if (context.actions.delete_quest_firestore) {
2237
+ await context.actions.delete_quest_firestore(
2238
+ context.ownerId,
2239
+ context.sceneConfigId,
2240
+ nodeIdToDelete
2241
+ );
2242
+ if (context.actions.delete_quest_link_firestore && linksToDelete.length > 0) {
2243
+ const linkDeletePromises = linksToDelete.map(
2244
+ (link) => context.actions.delete_quest_link_firestore(
2245
+ context.ownerId,
2246
+ context.sceneConfigId,
2247
+ link.id
2248
+ )
2249
+ );
2250
+ await Promise.all(linkDeletePromises);
2251
+ }
2252
+ }
2197
2253
  graphDataRef.current[parentFileId] = specificParentData;
2198
2254
  setters.setDetailsNode(
2199
2255
  (prev) => String(prev == null ? void 0 : prev.id) === String(nodeIdToDelete) ? null : prev
@@ -2295,12 +2351,10 @@ var userActionHandlers = {
2295
2351
  }
2296
2352
  const nextQuestNode = {
2297
2353
  ...JSON.parse(JSON.stringify(nodeToSave)),
2298
- // Deep copy properties
2299
2354
  id: import_short_uuid.default.generate(),
2300
2355
  name: nextName,
2301
2356
  status: "Backlog",
2302
2357
  color: "#64748b",
2303
- // QUEST_STATUS_COLORS["Backlog"]
2304
2358
  assignee_id: nodeToSave.recurrence_config.next_assignee_id || "",
2305
2359
  Date: nextDateObj,
2306
2360
  timeline: [
@@ -2325,14 +2379,28 @@ var userActionHandlers = {
2325
2379
  })),
2326
2380
  recurrence_config: nextRecurrenceConfig
2327
2381
  };
2328
- specificParentData.nodes.push(nextQuestNode);
2382
+ await context.actions.upsert_quest_firestore(
2383
+ context.ownerId,
2384
+ context.sceneConfigId,
2385
+ nextQuestNode
2386
+ );
2387
+ await context.actions.update_view_counter(
2388
+ context.ownerId,
2389
+ context.sceneConfigId,
2390
+ nextCounter
2391
+ );
2329
2392
  if (stateRef.current.nodeObjects[String(nodeToSave.id)]) {
2330
2393
  const oldMeshPosition = stateRef.current.nodeObjects[String(nodeToSave.id)].position.clone();
2331
2394
  setTimeout(() => {
2332
2395
  if (stateRef.current && stateRef.current.graphGroup) {
2333
2396
  const pos = oldMeshPosition.clone();
2334
2397
  pos.x += 12;
2335
- addStandaloneNodeToScene(stateRef.current, nextQuestNode, pos, true);
2398
+ addStandaloneNodeToScene(
2399
+ stateRef.current,
2400
+ nextQuestNode,
2401
+ pos,
2402
+ true
2403
+ );
2336
2404
  }
2337
2405
  }, 2e3);
2338
2406
  }
@@ -2353,8 +2421,7 @@ var userActionHandlers = {
2353
2421
  const viewFilePayload = {
2354
2422
  parent_dbs: sceneDataRef.current.parent_dbs,
2355
2423
  nodes: sceneDataRef.current.nodes,
2356
- links: sceneDataRef.current.links,
2357
- quest_counter: sceneDataRef.current.quest_counter || 1
2424
+ links: sceneDataRef.current.links
2358
2425
  };
2359
2426
  const questFilePayload = {
2360
2427
  nodes: specificParentData.nodes,
@@ -2365,8 +2432,13 @@ var userActionHandlers = {
2365
2432
  context.sceneSaveUrl,
2366
2433
  viewFilePayload
2367
2434
  );
2368
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2369
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
2435
+ if (context.actions.upsert_quest_firestore) {
2436
+ await context.actions.upsert_quest_firestore(
2437
+ context.ownerId,
2438
+ context.sceneConfigId,
2439
+ nodeToSave
2440
+ );
2441
+ }
2370
2442
  } else {
2371
2443
  const filenameForSpecificParent = `x_view_dbs/${ownerId}/${parentFileId}`;
2372
2444
  await context.actions.save_view_data(
@@ -2377,7 +2449,6 @@ var userActionHandlers = {
2377
2449
  graphDataRef.current[parentFileId] = specificParentData;
2378
2450
  if (isView && parentFileId === context.sceneConfigId) {
2379
2451
  sceneDataRef.current.quest_nodes = [...specificParentData.nodes];
2380
- sceneDataRef.current.quest_counter = specificParentData.quest_counter || sceneDataRef.current.quest_counter;
2381
2452
  }
2382
2453
  updateExistingNodeVisuals(stateRef.current, nodeToSave);
2383
2454
  setters.setSceneVersion((v) => v + 1);
@@ -2434,8 +2505,7 @@ var userActionHandlers = {
2434
2505
  const viewFilePayload = {
2435
2506
  parent_dbs: sceneDataRef.current.parent_dbs,
2436
2507
  nodes: sceneDataRef.current.nodes,
2437
- links: sceneDataRef.current.links,
2438
- quest_counter: sceneDataRef.current.quest_counter || 1
2508
+ links: sceneDataRef.current.links
2439
2509
  };
2440
2510
  const questFilePayload = {
2441
2511
  nodes: specificParentData.nodes,
@@ -2446,8 +2516,13 @@ var userActionHandlers = {
2446
2516
  context.sceneSaveUrl,
2447
2517
  viewFilePayload
2448
2518
  );
2449
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2450
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
2519
+ if (context.actions.upsert_quest_link_firestore) {
2520
+ await context.actions.upsert_quest_link_firestore(
2521
+ context.ownerId,
2522
+ context.sceneConfigId,
2523
+ linkToSave
2524
+ );
2525
+ }
2451
2526
  } else {
2452
2527
  const filenameForSpecificParent = `x_view_dbs/${ownerId}/${parentFileId}`;
2453
2528
  await context.actions.save_view_data(
@@ -15477,7 +15552,13 @@ function XViewScene({
15477
15552
  check_user_permission,
15478
15553
  get_view_members,
15479
15554
  create_google_doc_action,
15480
- open_google_picker_action
15555
+ open_google_picker_action,
15556
+ upsert_quest_firestore,
15557
+ delete_quest_firestore,
15558
+ upsert_quest_link_firestore,
15559
+ delete_quest_link_firestore,
15560
+ upsert_milestone_firestore,
15561
+ update_view_counter
15481
15562
  }) {
15482
15563
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
15483
15564
  const { data: session, status } = (0, import_react34.useSession)();
@@ -17984,7 +18065,14 @@ function XViewScene({
17984
18065
  get_single_parent_file,
17985
18066
  get_scene_view_data,
17986
18067
  upload_file: upload_file_action,
17987
- delete_file: delete_file_action
18068
+ delete_file: delete_file_action,
18069
+ // Adicionado novas importações aqui
18070
+ upsert_quest_firestore,
18071
+ delete_quest_firestore,
18072
+ upsert_quest_link_firestore,
18073
+ delete_quest_link_firestore,
18074
+ upsert_milestone_firestore,
18075
+ update_view_counter
17988
18076
  }
17989
18077
  };
17990
18078
  },
@@ -18003,7 +18091,13 @@ function XViewScene({
18003
18091
  get_single_parent_file,
18004
18092
  get_scene_view_data,
18005
18093
  upload_file_action,
18006
- delete_file_action
18094
+ delete_file_action,
18095
+ upsert_quest_firestore,
18096
+ delete_quest_firestore,
18097
+ upsert_quest_link_firestore,
18098
+ delete_quest_link_firestore,
18099
+ upsert_milestone_firestore,
18100
+ update_view_counter
18007
18101
  ]
18008
18102
  );
18009
18103
  const handleStartVersioning = (nodeData) => {
@@ -18209,40 +18303,30 @@ function XViewScene({
18209
18303
  parentDataRef.current[sceneConfigId].nodes[parentIndex].quest_abstraction_tree = formattedAbstractionTree;
18210
18304
  }
18211
18305
  }
18212
- const sceneFileData = {
18213
- ...sceneData,
18214
- nodes: sceneData.nodes || [],
18215
- links: sceneData.links || [],
18216
- quest_counter: sceneData.quest_counter || 1
18217
- };
18218
- const questFileData = {
18219
- nodes: sceneData.quest_nodes || [],
18220
- links: sceneData.quest_links || [],
18221
- milestones: sceneData.milestones || []
18222
- };
18223
- await save_view_data(sceneSaveUrl, sceneFileData);
18224
- const questSaveUrl = sceneSaveUrl.replace(
18225
- "x_view_scenes",
18226
- "x_view_quests"
18227
- );
18228
- await save_view_data(questSaveUrl, questFileData);
18229
- }
18230
- const updatedNodeData = sceneData.quest_nodes[questIndex];
18231
- const nodeMesh = (_a2 = stateRef.current.nodeObjects) == null ? void 0 : _a2[String(questNodeId)];
18232
- if (nodeMesh) {
18233
- nodeMesh.userData = {
18234
- ...nodeMesh.userData,
18235
- ...updatedNodeData
18236
- };
18237
- }
18238
- if (detailsNode && String(detailsNode.id) === String(questNodeId)) {
18239
- setDetailsNode((prev) => ({
18240
- ...prev,
18241
- quest_tree: formattedTree,
18242
- quest_abstraction_tree: formattedAbstractionTree
18243
- }));
18306
+ const updatedNodeData = sceneData.quest_nodes[questIndex];
18307
+ if (upsert_quest_firestore) {
18308
+ await upsert_quest_firestore(
18309
+ ownerId,
18310
+ sceneConfigId,
18311
+ updatedNodeData
18312
+ );
18313
+ }
18314
+ const nodeMesh = (_a2 = stateRef.current.nodeObjects) == null ? void 0 : _a2[String(questNodeId)];
18315
+ if (nodeMesh) {
18316
+ nodeMesh.userData = {
18317
+ ...nodeMesh.userData,
18318
+ ...updatedNodeData
18319
+ };
18320
+ }
18321
+ if (detailsNode && String(detailsNode.id) === String(questNodeId)) {
18322
+ setDetailsNode((prev) => ({
18323
+ ...prev,
18324
+ quest_tree: formattedTree,
18325
+ quest_abstraction_tree: formattedAbstractionTree
18326
+ }));
18327
+ }
18328
+ setSceneVersion((v) => v + 1);
18244
18329
  }
18245
- setSceneVersion((v) => v + 1);
18246
18330
  }
18247
18331
  }
18248
18332
  };
@@ -18291,7 +18375,6 @@ function XViewScene({
18291
18375
  ownerId: ownerId2
18292
18376
  } = context;
18293
18377
  if (!graphDataRef2.current || (viewType == null ? void 0 : viewType.toLowerCase()) !== "view") return;
18294
- const currentCounter = sceneDataRef2.current.quest_counter || 1;
18295
18378
  const newNode = {
18296
18379
  id: import_short_uuid2.default.generate(),
18297
18380
  ...newQuestData,
@@ -18302,20 +18385,16 @@ function XViewScene({
18302
18385
  graphDataRef2.current[sceneConfigId2] = { nodes: [], links: [] };
18303
18386
  }
18304
18387
  graphDataRef2.current[sceneConfigId2].nodes.push(newNode);
18305
- const sceneFileData = {
18306
- ...sceneDataRef2.current,
18307
- quest_counter: currentCounter + 1
18308
- };
18309
- const questFileData = {
18310
- nodes: graphDataRef2.current[sceneConfigId2].nodes,
18311
- links: graphDataRef2.current[sceneConfigId2].links,
18312
- milestones: sceneDataRef2.current.milestones || []
18313
- };
18388
+ const currentCounter = sceneDataRef2.current.quest_counter || 1;
18389
+ const nextCounter = currentCounter + 1;
18314
18390
  try {
18315
- await actions.save_view_data(sceneSaveUrl2, sceneFileData);
18316
- const questSaveUrl = sceneSaveUrl2.replace("x_view_scenes", "x_view_quests");
18317
- await actions.save_view_data(questSaveUrl, questFileData);
18318
- sceneDataRef2.current.quest_counter = currentCounter + 1;
18391
+ if (actions.upsert_quest_firestore) {
18392
+ await actions.upsert_quest_firestore(ownerId2, sceneConfigId2, newNode);
18393
+ }
18394
+ if (actions.update_view_counter) {
18395
+ await actions.update_view_counter(ownerId2, sceneConfigId2, nextCounter);
18396
+ }
18397
+ sceneDataRef2.current.quest_counter = nextCounter;
18319
18398
  stateRef2.current.nodeIdToParentFileMap.set(String(newNode.id), {
18320
18399
  parentFileId: sceneConfigId2,
18321
18400
  ownerId: ownerId2,
@@ -18437,7 +18516,9 @@ function XViewScene({
18437
18516
  if (line.material) line.material.dispose();
18438
18517
  });
18439
18518
  renderedAncestries.splice(renderIndex, 1);
18440
- stateRef.current.ancestryLinks = renderedAncestries.flatMap((a) => a.lines);
18519
+ stateRef.current.ancestryLinks = renderedAncestries.flatMap(
18520
+ (a) => a.lines
18521
+ );
18441
18522
  }
18442
18523
  }, []);
18443
18524
  const handleRenderAncestry = (0, import_react33.useCallback)(
@@ -19010,7 +19091,9 @@ function XViewScene({
19010
19091
  });
19011
19092
  };
19012
19093
  renderVertical(fullTree, rootNodeMesh, rootTargetPos, 1);
19013
- stateRef.current.ancestryLinks = renderedAncestries.flatMap((a) => a.lines);
19094
+ stateRef.current.ancestryLinks = renderedAncestries.flatMap(
19095
+ (a) => a.lines
19096
+ );
19014
19097
  tweenToTarget(rootTargetPos, 0.7);
19015
19098
  },
19016
19099
  [
@@ -19145,7 +19228,10 @@ function XViewScene({
19145
19228
  };
19146
19229
  const descriptionText = targetAncestryInfo.description || "";
19147
19230
  const savedSections = targetAncestryInfo.description_sections || [];
19148
- const sections = parseDescriptionSections(descriptionText, savedSections);
19231
+ const sections = parseDescriptionSections(
19232
+ descriptionText,
19233
+ savedSections
19234
+ );
19149
19235
  let focusTargetId = null;
19150
19236
  if (popped && popped.nodeId) {
19151
19237
  const mentionTag = `[[MENTION:node:${popped.nodeId}]]`;
@@ -19922,7 +20008,10 @@ function XViewScene({
19922
20008
  }
19923
20009
  if (ancestry_save_url && isExternalSave && get_ancestry_file) {
19924
20010
  try {
19925
- const viewDbResponse = await get_ancestry_file(sceneConfigId, ownerId);
20011
+ const viewDbResponse = await get_ancestry_file(
20012
+ sceneConfigId,
20013
+ ownerId
20014
+ );
19926
20015
  if (viewDbResponse.success && Array.isArray(viewDbResponse.data)) {
19927
20016
  const hasInViewDb = viewDbResponse.data.some(
19928
20017
  (anc) => String(anc.ancestry_id) === String(ancestryIdToDelete)
@@ -20116,24 +20205,19 @@ function XViewScene({
20116
20205
  setSceneVersion((v) => v + 1);
20117
20206
  const isView = ((_a2 = viewParams == null ? void 0 : viewParams.type) == null ? void 0 : _a2.toLowerCase()) === "view";
20118
20207
  if (!isView || !save_view_data || !sceneSaveUrl) return;
20119
- const sceneFileData = {
20120
- ...sceneDataRef.current,
20121
- nodes: sceneDataRef.current.nodes || [],
20122
- links: sceneDataRef.current.links || [],
20123
- quest_counter: sceneDataRef.current.quest_counter || 1
20124
- };
20125
20208
  const questFileData = {
20126
20209
  nodes: ((_b2 = parentDataRef.current[sceneConfigId]) == null ? void 0 : _b2.nodes) || sceneDataRef.current.quest_nodes || [],
20127
20210
  links: ((_c2 = parentDataRef.current[sceneConfigId]) == null ? void 0 : _c2.links) || sceneDataRef.current.quest_links || [],
20128
20211
  milestones: newMilestones
20129
20212
  };
20130
20213
  try {
20131
- await save_view_data(sceneSaveUrl, sceneFileData);
20132
- const questSaveUrl = sceneSaveUrl.replace(
20133
- "x_view_scenes",
20134
- "x_view_quests"
20135
- );
20136
- await save_view_data(questSaveUrl, questFileData);
20214
+ if (upsert_milestone_firestore) {
20215
+ await upsert_milestone_firestore(
20216
+ ownerId,
20217
+ sceneConfigId,
20218
+ newMilestones
20219
+ );
20220
+ }
20137
20221
  } catch (error) {
20138
20222
  console.error("Erro ao salvar milestones:", error);
20139
20223
  }
@@ -20141,7 +20225,7 @@ function XViewScene({
20141
20225
  [sceneConfigId, sceneSaveUrl, save_view_data, viewParams == null ? void 0 : viewParams.type]
20142
20226
  );
20143
20227
  const handleSaveCurrentView = (0, import_react33.useCallback)(async () => {
20144
- var _a2, _b2, _c2;
20228
+ var _a2;
20145
20229
  const { nodeObjects, allLinks } = stateRef.current;
20146
20230
  if (!nodeObjects || !allLinks || !sceneSaveUrl || !parentDataRef.current) {
20147
20231
  console.warn(
@@ -20171,23 +20255,10 @@ function XViewScene({
20171
20255
  const sceneFileData = {
20172
20256
  ...sceneDataRef.current,
20173
20257
  nodes: currentNodes,
20174
- links: currentLinks,
20175
- quest_counter: sceneDataRef.current.quest_counter || 1
20176
- };
20177
- const questFileData = {
20178
- nodes: isView ? ((_b2 = parentDataRef.current[sceneConfigId]) == null ? void 0 : _b2.nodes) || [] : sceneDataRef.current.quest_nodes || [],
20179
- links: isView ? ((_c2 = parentDataRef.current[sceneConfigId]) == null ? void 0 : _c2.links) || [] : sceneDataRef.current.quest_links || [],
20180
- milestones: sceneDataRef.current.milestones || []
20258
+ links: currentLinks
20181
20259
  };
20182
20260
  try {
20183
20261
  await save_view_data(sceneSaveUrl, sceneFileData);
20184
- if (isView) {
20185
- const questSaveUrl = sceneSaveUrl.replace(
20186
- "x_view_scenes",
20187
- "x_view_quests"
20188
- );
20189
- await save_view_data(questSaveUrl, questFileData);
20190
- }
20191
20262
  } catch (error) {
20192
20263
  console.error("Erro na chamada de save_view_data:", error);
20193
20264
  }
@@ -20886,12 +20957,18 @@ function XViewScene({
20886
20957
  data: multiContextMenu,
20887
20958
  userRole: userPermissionRole,
20888
20959
  onClose: () => setMultiContextMenu((prev) => ({ ...prev, visible: false })),
20889
- onDismissNodes: (ids) => userActionHandlers.handleDismissMultipleNodes(actionHandlerContext, ids),
20960
+ onDismissNodes: (ids) => userActionHandlers.handleDismissMultipleNodes(
20961
+ actionHandlerContext,
20962
+ ids
20963
+ ),
20890
20964
  onDismissOtherNodes: (ids) => userActionHandlers.handleDismissOtherMultipleNodes(
20891
20965
  actionHandlerContext,
20892
20966
  ids
20893
20967
  ),
20894
- onDeleteNodes: (ids) => userActionHandlers.handleDeleteMultipleNodes(actionHandlerContext, ids)
20968
+ onDeleteNodes: (ids) => userActionHandlers.handleDeleteMultipleNodes(
20969
+ actionHandlerContext,
20970
+ ids
20971
+ )
20895
20972
  }
20896
20973
  ),
20897
20974
  /* @__PURE__ */ import_react33.default.createElement(
@@ -21049,20 +21126,35 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21049
21126
  if (!session || !session.user) {
21050
21127
  return { success: false, error: "Usu\xE1rio n\xE3o autenticado." };
21051
21128
  }
21052
- const membershipCheck = await db_services.check_membership(owner_id, type, scene_config, session.user.id);
21129
+ const membershipCheck = await db_services.check_membership(
21130
+ owner_id,
21131
+ type,
21132
+ scene_config,
21133
+ session.user.id
21134
+ );
21053
21135
  const isFullMember = membershipCheck.success && membershipCheck.isValidMember;
21054
21136
  if (!isFullMember && !focusNodeId && !focusAncestryId) {
21055
- return { success: false, error: "Acesso Negado: Voc\xEA n\xE3o possui permiss\xE3o para acessar este cen\xE1rio." };
21137
+ return {
21138
+ success: false,
21139
+ error: "Acesso Negado: Voc\xEA n\xE3o possui permiss\xE3o para acessar este cen\xE1rio."
21140
+ };
21056
21141
  }
21057
- const sceneResponse = await db_services.get_file(`x_view_scenes/${owner_id}/${scene_config}`);
21142
+ const sceneResponse = await db_services.get_file(
21143
+ `x_view_scenes/${owner_id}/${scene_config}`
21144
+ );
21058
21145
  if (!sceneResponse || !sceneResponse.success) {
21059
21146
  console.error("Falha ao buscar dados da cena:", sceneResponse == null ? void 0 : sceneResponse.error);
21060
- return { success: false, error: `N\xE3o foi poss\xEDvel carregar o arquivo da cena: ${scene_config}` };
21147
+ return {
21148
+ success: false,
21149
+ error: `N\xE3o foi poss\xEDvel carregar o arquivo da cena: ${scene_config}`
21150
+ };
21061
21151
  }
21062
21152
  const sceneData = sceneResponse.data;
21063
21153
  const parentDbObjects = sceneData.parent_dbs || [];
21064
21154
  if (type && type.toLowerCase().includes("database")) {
21065
- const selfExists = parentDbObjects.some((db) => String(db.db_id) === String(scene_config));
21155
+ const selfExists = parentDbObjects.some(
21156
+ (db) => String(db.db_id) === String(scene_config)
21157
+ );
21066
21158
  if (!selfExists) {
21067
21159
  parentDbObjects.push({ db_id: scene_config, owner_id });
21068
21160
  }
@@ -21072,11 +21164,43 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21072
21164
  (db_info) => db_services.get_file(`x_view_dbs/${db_info.owner_id}/${db_info.db_id}`)
21073
21165
  );
21074
21166
  if (isView) {
21075
- parentResponsesPromises.push(
21076
- db_services.get_file(`x_view_quests/${owner_id}/${scene_config}`)
21077
- );
21167
+ const questFetchWithMigrationPromise = (async () => {
21168
+ try {
21169
+ const questsResponse = await db_services.get_view_quests_firestore(
21170
+ owner_id,
21171
+ scene_config
21172
+ );
21173
+ if (questsResponse.success && questsResponse.hasQuests) {
21174
+ return {
21175
+ success: true,
21176
+ data: questsResponse.data,
21177
+ quest_counter: questsResponse.quest_counter
21178
+ };
21179
+ } else {
21180
+ const legacyResponse = await db_services.get_file(
21181
+ `x_view_quests/${owner_id}/${scene_config}`
21182
+ );
21183
+ if (legacyResponse.success && legacyResponse.data) {
21184
+ await db_services.migrate_json_to_firestore(
21185
+ owner_id,
21186
+ scene_config,
21187
+ legacyResponse.data,
21188
+ sceneData.quest_counter
21189
+ );
21190
+ legacyResponse.quest_counter = sceneData.quest_counter || 1;
21191
+ return legacyResponse;
21192
+ }
21193
+ return legacyResponse;
21194
+ }
21195
+ } catch (err) {
21196
+ return { success: false, error: err.message };
21197
+ }
21198
+ })();
21199
+ parentResponsesPromises.push(questFetchWithMigrationPromise);
21078
21200
  }
21079
- const parentResponsesResults = await Promise.allSettled(parentResponsesPromises);
21201
+ const parentResponsesResults = await Promise.allSettled(
21202
+ parentResponsesPromises
21203
+ );
21080
21204
  const parentData = {};
21081
21205
  let questDataObj = null;
21082
21206
  for (let i = 0; i < parentResponsesResults.length; i++) {
@@ -21084,6 +21208,9 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21084
21208
  if (isView && i === parentResponsesResults.length - 1) {
21085
21209
  if (result.status === "fulfilled" && ((_a = result.value) == null ? void 0 : _a.success)) {
21086
21210
  questDataObj = result.value.data;
21211
+ if (result.value.quest_counter !== void 0) {
21212
+ sceneData.quest_counter = result.value.quest_counter;
21213
+ }
21087
21214
  }
21088
21215
  continue;
21089
21216
  }
@@ -21109,13 +21236,19 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21109
21236
  }
21110
21237
  const allNodes = Object.values(parentData).flatMap((db) => db.nodes || []);
21111
21238
  const allLinks = Object.values(parentData).flatMap((db) => db.links || []);
21112
- const parentNodeMap = new Map(allNodes.map((node) => [String(node.id), node]));
21113
- const parentLinkMap = new Map(allLinks.map((link) => [`${link.source}-${link.target}`, link]));
21239
+ const parentNodeMap = new Map(
21240
+ allNodes.map((node) => [String(node.id), node])
21241
+ );
21242
+ const parentLinkMap = new Map(
21243
+ allLinks.map((link) => [`${link.source}-${link.target}`, link])
21244
+ );
21114
21245
  const validatedNodes = (sceneData.nodes || []).map((sceneNode) => {
21115
21246
  var _a2, _b2;
21116
21247
  const nodeTypes = Array.isArray(sceneNode.type) ? sceneNode.type : [sceneNode.type];
21117
21248
  if (nodeTypes.includes("quest")) {
21118
- const dbQuestNode = (_b2 = (_a2 = parentData[scene_config]) == null ? void 0 : _a2.nodes) == null ? void 0 : _b2.find((qn) => String(qn.id) === String(sceneNode.id));
21249
+ const dbQuestNode = (_b2 = (_a2 = parentData[scene_config]) == null ? void 0 : _a2.nodes) == null ? void 0 : _b2.find(
21250
+ (qn) => String(qn.id) === String(sceneNode.id)
21251
+ );
21119
21252
  if (dbQuestNode) {
21120
21253
  return { ...sceneNode, ...dbQuestNode };
21121
21254
  }
@@ -21127,18 +21260,22 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21127
21260
  }
21128
21261
  return null;
21129
21262
  }).filter(Boolean);
21130
- const validNodeIdsInScene = new Set(validatedNodes.map((node) => String(node.id)));
21263
+ const validNodeIdsInScene = new Set(
21264
+ validatedNodes.map((node) => String(node.id))
21265
+ );
21131
21266
  const validatedLinks = (sceneData.links || []).filter((sceneLink) => {
21132
- const linkExistsInParent = parentLinkMap.has(`${sceneLink.source}-${sceneLink.target}`);
21267
+ const linkExistsInParent = parentLinkMap.has(
21268
+ `${sceneLink.source}-${sceneLink.target}`
21269
+ );
21133
21270
  const nodesAreValidForScene = validNodeIdsInScene.has(String(sceneLink.source)) && validNodeIdsInScene.has(String(sceneLink.target));
21134
21271
  return linkExistsInParent && nodesAreValidForScene;
21135
- }).map((sceneLink) => parentLinkMap.get(`${sceneLink.source}-${sceneLink.target}`));
21272
+ }).map(
21273
+ (sceneLink) => parentLinkMap.get(`${sceneLink.source}-${sceneLink.target}`)
21274
+ );
21136
21275
  const validatedSceneData = {
21137
21276
  ...sceneData,
21138
21277
  nodes: validatedNodes,
21139
21278
  links: validatedLinks,
21140
- // Re-injetando no validated para que o restante do sistema (e.g. XViewScene local state)
21141
- // continue acessando as quests sem perceber a separação física
21142
21279
  quest_nodes: currentQuestNodes,
21143
21280
  quest_links: currentQuestLinks,
21144
21281
  milestones: currentMilestones
@@ -21158,7 +21295,9 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21158
21295
  isSceneFile: false
21159
21296
  });
21160
21297
  });
21161
- const ancestryPromises = ancestryFilePaths.map((file) => db_services.get_file(file.path));
21298
+ const ancestryPromises = ancestryFilePaths.map(
21299
+ (file) => db_services.get_file(file.path)
21300
+ );
21162
21301
  const ancestryResults = await Promise.allSettled(ancestryPromises);
21163
21302
  const ancestriesFromSceneFile = [];
21164
21303
  const ancestriesFromDbFiles = [];
@@ -21184,15 +21323,21 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21184
21323
  }
21185
21324
  });
21186
21325
  const ancestryMap = /* @__PURE__ */ new Map();
21187
- ancestriesFromDbFiles.forEach((anc) => ancestryMap.set(anc.ancestry_id, anc));
21188
- ancestriesFromSceneFile.forEach((anc) => ancestryMap.set(anc.ancestry_id, anc));
21326
+ ancestriesFromDbFiles.forEach(
21327
+ (anc) => ancestryMap.set(anc.ancestry_id, anc)
21328
+ );
21329
+ ancestriesFromSceneFile.forEach(
21330
+ (anc) => ancestryMap.set(anc.ancestry_id, anc)
21331
+ );
21189
21332
  let ancestryData = Array.from(ancestryMap.values());
21190
21333
  const externalSourcesToRefresh = /* @__PURE__ */ new Map();
21191
21334
  ancestryData.forEach((anc) => {
21192
21335
  const targetSourceId = anc._source_file_id || anc._imported_from_view_id;
21193
21336
  const targetOwnerId = anc._source_owner_id || anc._imported_from_view_owner_id;
21194
21337
  if (targetSourceId && targetSourceId !== scene_config && targetOwnerId) {
21195
- const isAlreadyLoadedAsParent = parentDbObjects.some((db) => String(db.db_id) === String(targetSourceId));
21338
+ const isAlreadyLoadedAsParent = parentDbObjects.some(
21339
+ (db) => String(db.db_id) === String(targetSourceId)
21340
+ );
21196
21341
  if (!isAlreadyLoadedAsParent) {
21197
21342
  const key = `${targetOwnerId}/${targetSourceId}`;
21198
21343
  externalSourcesToRefresh.set(key, {
@@ -21233,12 +21378,16 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21233
21378
  return false;
21234
21379
  }
21235
21380
  if (externalSourcesToRefresh.has(key) && successfullyFetchedSources.has(key)) {
21236
- const stillExists = freshAncestryMap.has(String(localAnc.ancestry_id));
21381
+ const stillExists = freshAncestryMap.has(
21382
+ String(localAnc.ancestry_id)
21383
+ );
21237
21384
  return stillExists;
21238
21385
  }
21239
21386
  return true;
21240
21387
  }).map((localAnc) => {
21241
- const freshVersion = freshAncestryMap.get(String(localAnc.ancestry_id));
21388
+ const freshVersion = freshAncestryMap.get(
21389
+ String(localAnc.ancestry_id)
21390
+ );
21242
21391
  if (freshVersion) {
21243
21392
  return {
21244
21393
  ...freshVersion,
@@ -21277,7 +21426,9 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21277
21426
  parallel_branches: validBranches
21278
21427
  };
21279
21428
  };
21280
- const originalAncestryDataString = JSON.stringify(Array.from(ancestryMap.values()));
21429
+ const originalAncestryDataString = JSON.stringify(
21430
+ Array.from(ancestryMap.values())
21431
+ );
21281
21432
  const cleanedAncestryData = ancestryData.map((ancestry) => {
21282
21433
  if (!parentNodeIds.has(String(ancestry.ancestral_node))) return null;
21283
21434
  const cleanedTree = pruneTree(ancestry.tree);
@@ -21297,7 +21448,10 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21297
21448
  try {
21298
21449
  await db_services.save_file(ancestryFilePath, ancestryData);
21299
21450
  } catch (saveError) {
21300
- console.error("Falha ao salvar o arquivo de ancestralidade da cena atualizado:", saveError);
21451
+ console.error(
21452
+ "Falha ao salvar o arquivo de ancestralidade da cena atualizado:",
21453
+ saveError
21454
+ );
21301
21455
  }
21302
21456
  }
21303
21457
  if (!isFullMember) {
@@ -21305,7 +21459,9 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21305
21459
  const requiredAncestryIds = /* @__PURE__ */ new Set();
21306
21460
  if (focusNodeId) requiredNodeIds.add(String(focusNodeId));
21307
21461
  if (focusAncestryId) requiredAncestryIds.add(String(focusAncestryId));
21308
- const allNodesFromDb = Object.values(parentData).flatMap((db) => db.nodes || []);
21462
+ const allNodesFromDb = Object.values(parentData).flatMap(
21463
+ (db) => db.nodes || []
21464
+ );
21309
21465
  const extractDependenciesFromText = (text) => {
21310
21466
  if (!text) return;
21311
21467
  const mentionRegex = /\[\[MENTION:node:([a-zA-Z0-9\-_]+)\]\]/g;
@@ -21332,9 +21488,12 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21332
21488
  if (branch.linked_ancestry_id) {
21333
21489
  requiredAncestryIds.add(String(branch.linked_ancestry_id));
21334
21490
  }
21335
- if (branch.description) extractDependenciesFromText(branch.description);
21491
+ if (branch.description)
21492
+ extractDependenciesFromText(branch.description);
21336
21493
  if (branch.description_sections) {
21337
- branch.description_sections.forEach((s) => extractDependenciesFromText(s.content));
21494
+ branch.description_sections.forEach(
21495
+ (s) => extractDependenciesFromText(s.content)
21496
+ );
21338
21497
  }
21339
21498
  extractTreeDependencies(branch.tree);
21340
21499
  });
@@ -21348,7 +21507,9 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21348
21507
  if (anc && !anc.is_private) {
21349
21508
  if (anc.description) extractDependenciesFromText(anc.description);
21350
21509
  if (anc.description_sections) {
21351
- anc.description_sections.forEach((s) => extractDependenciesFromText(s.content));
21510
+ anc.description_sections.forEach(
21511
+ (s) => extractDependenciesFromText(s.content)
21512
+ );
21352
21513
  }
21353
21514
  extractTreeDependencies(anc.tree);
21354
21515
  extractTreeDependencies(anc.abstraction_tree);
@@ -21359,22 +21520,38 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21359
21520
  if (node) {
21360
21521
  if (node.description) extractDependenciesFromText(node.description);
21361
21522
  if (node.description_sections) {
21362
- node.description_sections.forEach((s) => extractDependenciesFromText(s.content));
21523
+ node.description_sections.forEach(
21524
+ (s) => extractDependenciesFromText(s.content)
21525
+ );
21363
21526
  }
21364
21527
  }
21365
21528
  });
21366
21529
  } while (requiredNodeIds.size + requiredAncestryIds.size > previousSize);
21367
- const restrictedSceneData = { ...validatedSceneData, nodes: [], links: [] };
21530
+ const restrictedSceneData = {
21531
+ ...validatedSceneData,
21532
+ nodes: [],
21533
+ links: []
21534
+ };
21368
21535
  const restrictedParentData = {};
21369
- const restrictedAncestryData = ancestryData.filter((a) => requiredAncestryIds.has(String(a.ancestry_id)) && !a.is_private);
21536
+ const restrictedAncestryData = ancestryData.filter(
21537
+ (a) => requiredAncestryIds.has(String(a.ancestry_id)) && !a.is_private
21538
+ );
21370
21539
  for (const [dbId, dbContent] of Object.entries(parentData)) {
21371
- const filteredNodes = (dbContent.nodes || []).filter((n) => requiredNodeIds.has(String(n.id)));
21540
+ const filteredNodes = (dbContent.nodes || []).filter(
21541
+ (n) => requiredNodeIds.has(String(n.id))
21542
+ );
21372
21543
  if (filteredNodes.length > 0) {
21373
- restrictedParentData[dbId] = { ...dbContent, nodes: filteredNodes, links: [] };
21544
+ restrictedParentData[dbId] = {
21545
+ ...dbContent,
21546
+ nodes: filteredNodes,
21547
+ links: []
21548
+ };
21374
21549
  }
21375
21550
  }
21376
21551
  if (focusNodeId) {
21377
- const mainNode = allNodesFromDb.find((n) => String(n.id) === String(focusNodeId));
21552
+ const mainNode = allNodesFromDb.find(
21553
+ (n) => String(n.id) === String(focusNodeId)
21554
+ );
21378
21555
  if (mainNode) {
21379
21556
  restrictedSceneData.nodes = [mainNode];
21380
21557
  }
@@ -21390,7 +21567,11 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21390
21567
  }
21391
21568
  return {
21392
21569
  success: true,
21393
- data: { scene: validatedSceneData, parent: parentData, ancestry: ancestryData }
21570
+ data: {
21571
+ scene: validatedSceneData,
21572
+ parent: parentData,
21573
+ ancestry: ancestryData
21574
+ }
21394
21575
  };
21395
21576
  } catch (error) {
21396
21577
  console.error("Erro em get_scene_view_data_logic:", error);
@@ -21410,13 +21591,18 @@ async function import_parent_file_modal_get_logic(db_services, session) {
21410
21591
  }
21411
21592
  };
21412
21593
  } catch (error) {
21413
- console.error("catch (error) em import_parent_file_modal_get_logic:", error);
21594
+ console.error(
21595
+ "catch (error) em import_parent_file_modal_get_logic:",
21596
+ error
21597
+ );
21414
21598
  return { success: false, error: error.message };
21415
21599
  }
21416
21600
  }
21417
21601
  async function get_single_parent_file_logic(db_services, file_id, session) {
21418
21602
  try {
21419
- const call_GCP_cloud_storage_get_file = await db_services.get_file(`x_view_dbs/${session.user.id}/${file_id}`);
21603
+ const call_GCP_cloud_storage_get_file = await db_services.get_file(
21604
+ `x_view_dbs/${session.user.id}/${file_id}`
21605
+ );
21420
21606
  return call_GCP_cloud_storage_get_file;
21421
21607
  } catch (error) {
21422
21608
  console.error("catch (error) em get_single_parent_file_logic:", error);
@@ -21450,7 +21636,13 @@ async function get_ancestry_file_logic(db_services, file_id, owner_id) {
21450
21636
  async function save_boards_logic(db_services, scene_id, type, boardItems, session, owner_id) {
21451
21637
  try {
21452
21638
  const targetOwnerId = owner_id || session.user.id;
21453
- return await db_services.save_boards(session, scene_id, type, boardItems, targetOwnerId);
21639
+ return await db_services.save_boards(
21640
+ session,
21641
+ scene_id,
21642
+ type,
21643
+ boardItems,
21644
+ targetOwnerId
21645
+ );
21454
21646
  } catch (error) {
21455
21647
  console.error("Erro em save_boards_logic:", error);
21456
21648
  return { success: false, error: error.message };
@@ -21479,7 +21671,10 @@ async function delete_uploaded_file_logic(db_services, fileUrl) {
21479
21671
  async function get_view_members_logic(db_services, ownerId, type, itemId) {
21480
21672
  try {
21481
21673
  if (!db_services.get_view_members) {
21482
- return { success: false, error: "Servi\xE7o de busca de membros n\xE3o configurado." };
21674
+ return {
21675
+ success: false,
21676
+ error: "Servi\xE7o de busca de membros n\xE3o configurado."
21677
+ };
21483
21678
  }
21484
21679
  return await db_services.get_view_members(ownerId, type, itemId);
21485
21680
  } catch (error) {