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

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
@@ -1545,17 +1545,11 @@ var userActionHandlers = {
1545
1545
  links: sceneDataRef.current.links,
1546
1546
  quest_counter: sceneDataRef.current.quest_counter || 1
1547
1547
  };
1548
- const questFilePayload = {
1549
- nodes: specificParentData.nodes,
1550
- links: specificParentData.links,
1551
- milestones: sceneDataRef.current.milestones || []
1552
- };
1553
1548
  await context.actions.save_view_data(
1554
1549
  context.sceneSaveUrl,
1555
1550
  viewFilePayload
1556
1551
  );
1557
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
1558
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
1552
+ await context.actions.save_quest_link(context.ownerId, context.sceneConfigId, newLink);
1559
1553
  } else {
1560
1554
  const specificParentData = JSON.parse(
1561
1555
  JSON.stringify(graphDataRef.current[parentFileIdToSave])
@@ -1842,20 +1836,14 @@ var userActionHandlers = {
1842
1836
  links: sceneDataRef.current.links,
1843
1837
  quest_counter: sceneDataRef.current.quest_counter || 1
1844
1838
  };
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 || []
1850
- };
1851
1839
  } else {
1852
1840
  filenameToSave = `x_view_dbs/${ownerId}/${parentFileId}`;
1853
1841
  payloadToSave = specificParentData;
1854
1842
  }
1855
1843
  try {
1856
1844
  await context.actions.save_view_data(filenameToSave, payloadToSave);
1857
- if (questSaveUrl && questFilePayload) {
1858
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
1845
+ if (isView && parentFileId === context.sceneConfigId && context.actions.delete_quest_link) {
1846
+ await context.actions.delete_quest_link(ownerId, context.sceneConfigId, linkIdToDelete);
1859
1847
  }
1860
1848
  graphDataRef.current[parentFileId] = specificParentData;
1861
1849
  setters.setDetailsLink(
@@ -2087,13 +2075,15 @@ var userActionHandlers = {
2087
2075
  links: sceneDataRef.current.links,
2088
2076
  quest_counter: sceneDataRef.current.quest_counter || 1
2089
2077
  };
2090
- const questFilePayload = {
2091
- nodes: originalData.nodes,
2092
- links: originalData.links,
2093
- milestones: sceneDataRef.current.milestones || []
2094
- };
2095
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2096
- savePromises.push(context.actions.save_view_data(questSaveUrl, questFilePayload));
2078
+ for (const nodeId of nodesToDelete) {
2079
+ const questNode = (originalData.nodes || []).find((n) => String(n.id) === String(nodeId));
2080
+ if (questNode && questNode.is_quest) {
2081
+ await context.actions.delete_quest(ownerId, context.sceneConfigId, nodeId);
2082
+ }
2083
+ }
2084
+ for (const linkId of linksToDelete) {
2085
+ await context.actions.delete_quest_link(ownerId, context.sceneConfigId, linkId);
2086
+ }
2097
2087
  } else {
2098
2088
  filenameToSave = `x_view_dbs/${ownerId}/${parentFileId}`;
2099
2089
  payloadToSave = originalData;
@@ -2185,15 +2175,9 @@ var userActionHandlers = {
2185
2175
  links: newVisualLinks,
2186
2176
  quest_counter: sceneDataRef.current.quest_counter || 1
2187
2177
  };
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
2178
  try {
2195
2179
  await context.actions.save_view_data(filenameToSave, payloadToSave);
2196
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
2180
+ await context.actions.delete_quest(ownerId, context.sceneConfigId, nodeIdToDelete);
2197
2181
  graphDataRef.current[parentFileId] = specificParentData;
2198
2182
  setters.setDetailsNode(
2199
2183
  (prev) => String(prev == null ? void 0 : prev.id) === String(nodeIdToDelete) ? null : prev
@@ -2356,17 +2340,11 @@ var userActionHandlers = {
2356
2340
  links: sceneDataRef.current.links,
2357
2341
  quest_counter: sceneDataRef.current.quest_counter || 1
2358
2342
  };
2359
- const questFilePayload = {
2360
- nodes: specificParentData.nodes,
2361
- links: specificParentData.links,
2362
- milestones: sceneDataRef.current.milestones || []
2363
- };
2364
2343
  await context.actions.save_view_data(
2365
2344
  context.sceneSaveUrl,
2366
2345
  viewFilePayload
2367
2346
  );
2368
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2369
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
2347
+ await context.actions.save_quest(ownerId, context.sceneConfigId, nodeToSave);
2370
2348
  } else {
2371
2349
  const filenameForSpecificParent = `x_view_dbs/${ownerId}/${parentFileId}`;
2372
2350
  await context.actions.save_view_data(
@@ -15477,7 +15455,11 @@ function XViewScene({
15477
15455
  check_user_permission,
15478
15456
  get_view_members,
15479
15457
  create_google_doc_action,
15480
- open_google_picker_action
15458
+ open_google_picker_action,
15459
+ save_quest_action,
15460
+ delete_quest_action,
15461
+ save_quest_link_action,
15462
+ delete_quest_link_action
15481
15463
  }) {
15482
15464
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
15483
15465
  const { data: session, status } = (0, import_react34.useSession)();
@@ -17984,7 +17966,11 @@ function XViewScene({
17984
17966
  get_single_parent_file,
17985
17967
  get_scene_view_data,
17986
17968
  upload_file: upload_file_action,
17987
- delete_file: delete_file_action
17969
+ delete_file: delete_file_action,
17970
+ save_quest: save_quest_action,
17971
+ delete_quest: delete_quest_action,
17972
+ save_quest_link: save_quest_link_action,
17973
+ delete_quest_link: delete_quest_link_action
17988
17974
  }
17989
17975
  };
17990
17976
  },
@@ -18003,7 +17989,11 @@ function XViewScene({
18003
17989
  get_single_parent_file,
18004
17990
  get_scene_view_data,
18005
17991
  upload_file_action,
18006
- delete_file_action
17992
+ delete_file_action,
17993
+ save_quest_action,
17994
+ delete_quest_action,
17995
+ save_quest_link_action,
17996
+ delete_quest_link_action
18007
17997
  ]
18008
17998
  );
18009
17999
  const handleStartVersioning = (nodeData) => {
@@ -18221,11 +18211,7 @@ function XViewScene({
18221
18211
  milestones: sceneData.milestones || []
18222
18212
  };
18223
18213
  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);
18214
+ await save_quest_action(ownerId, sceneConfigId, updatedNodeData);
18229
18215
  }
18230
18216
  const updatedNodeData = sceneData.quest_nodes[questIndex];
18231
18217
  const nodeMesh = (_a2 = stateRef.current.nodeObjects) == null ? void 0 : _a2[String(questNodeId)];
@@ -18313,8 +18299,7 @@ function XViewScene({
18313
18299
  };
18314
18300
  try {
18315
18301
  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);
18302
+ await actions.save_quest(ownerId2, sceneConfigId2, newNode);
18318
18303
  sceneDataRef2.current.quest_counter = currentCounter + 1;
18319
18304
  stateRef2.current.nodeIdToParentFileMap.set(String(newNode.id), {
18320
18305
  parentFileId: sceneConfigId2,
@@ -18437,7 +18422,9 @@ function XViewScene({
18437
18422
  if (line.material) line.material.dispose();
18438
18423
  });
18439
18424
  renderedAncestries.splice(renderIndex, 1);
18440
- stateRef.current.ancestryLinks = renderedAncestries.flatMap((a) => a.lines);
18425
+ stateRef.current.ancestryLinks = renderedAncestries.flatMap(
18426
+ (a) => a.lines
18427
+ );
18441
18428
  }
18442
18429
  }, []);
18443
18430
  const handleRenderAncestry = (0, import_react33.useCallback)(
@@ -19010,7 +18997,9 @@ function XViewScene({
19010
18997
  });
19011
18998
  };
19012
18999
  renderVertical(fullTree, rootNodeMesh, rootTargetPos, 1);
19013
- stateRef.current.ancestryLinks = renderedAncestries.flatMap((a) => a.lines);
19000
+ stateRef.current.ancestryLinks = renderedAncestries.flatMap(
19001
+ (a) => a.lines
19002
+ );
19014
19003
  tweenToTarget(rootTargetPos, 0.7);
19015
19004
  },
19016
19005
  [
@@ -19145,7 +19134,10 @@ function XViewScene({
19145
19134
  };
19146
19135
  const descriptionText = targetAncestryInfo.description || "";
19147
19136
  const savedSections = targetAncestryInfo.description_sections || [];
19148
- const sections = parseDescriptionSections(descriptionText, savedSections);
19137
+ const sections = parseDescriptionSections(
19138
+ descriptionText,
19139
+ savedSections
19140
+ );
19149
19141
  let focusTargetId = null;
19150
19142
  if (popped && popped.nodeId) {
19151
19143
  const mentionTag = `[[MENTION:node:${popped.nodeId}]]`;
@@ -19922,7 +19914,10 @@ function XViewScene({
19922
19914
  }
19923
19915
  if (ancestry_save_url && isExternalSave && get_ancestry_file) {
19924
19916
  try {
19925
- const viewDbResponse = await get_ancestry_file(sceneConfigId, ownerId);
19917
+ const viewDbResponse = await get_ancestry_file(
19918
+ sceneConfigId,
19919
+ ownerId
19920
+ );
19926
19921
  if (viewDbResponse.success && Array.isArray(viewDbResponse.data)) {
19927
19922
  const hasInViewDb = viewDbResponse.data.some(
19928
19923
  (anc) => String(anc.ancestry_id) === String(ancestryIdToDelete)
@@ -20886,12 +20881,18 @@ function XViewScene({
20886
20881
  data: multiContextMenu,
20887
20882
  userRole: userPermissionRole,
20888
20883
  onClose: () => setMultiContextMenu((prev) => ({ ...prev, visible: false })),
20889
- onDismissNodes: (ids) => userActionHandlers.handleDismissMultipleNodes(actionHandlerContext, ids),
20884
+ onDismissNodes: (ids) => userActionHandlers.handleDismissMultipleNodes(
20885
+ actionHandlerContext,
20886
+ ids
20887
+ ),
20890
20888
  onDismissOtherNodes: (ids) => userActionHandlers.handleDismissOtherMultipleNodes(
20891
20889
  actionHandlerContext,
20892
20890
  ids
20893
20891
  ),
20894
- onDeleteNodes: (ids) => userActionHandlers.handleDeleteMultipleNodes(actionHandlerContext, ids)
20892
+ onDeleteNodes: (ids) => userActionHandlers.handleDeleteMultipleNodes(
20893
+ actionHandlerContext,
20894
+ ids
20895
+ )
20895
20896
  }
20896
20897
  ),
20897
20898
  /* @__PURE__ */ import_react33.default.createElement(
@@ -21044,7 +21045,7 @@ async function save_view_data_logic(db_services, filename, data) {
21044
21045
  }
21045
21046
  }
21046
21047
  async function get_scene_view_data_logic(db_services, scene_config, owner_id, type, session, focusNodeId = null, focusAncestryId = null) {
21047
- var _a, _b, _c;
21048
+ var _a, _b;
21048
21049
  try {
21049
21050
  if (!session || !session.user) {
21050
21051
  return { success: false, error: "Usu\xE1rio n\xE3o autenticado." };
@@ -21071,35 +21072,43 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21071
21072
  const parentResponsesPromises = parentDbObjects.map(
21072
21073
  (db_info) => db_services.get_file(`x_view_dbs/${db_info.owner_id}/${db_info.db_id}`)
21073
21074
  );
21074
- if (isView) {
21075
- parentResponsesPromises.push(
21076
- db_services.get_file(`x_view_quests/${owner_id}/${scene_config}`)
21077
- );
21078
- }
21079
21075
  const parentResponsesResults = await Promise.allSettled(parentResponsesPromises);
21080
21076
  const parentData = {};
21081
- let questDataObj = null;
21082
- for (let i = 0; i < parentResponsesResults.length; i++) {
21083
- const result = parentResponsesResults[i];
21084
- if (isView && i === parentResponsesResults.length - 1) {
21085
- if (result.status === "fulfilled" && ((_a = result.value) == null ? void 0 : _a.success)) {
21086
- questDataObj = result.value.data;
21077
+ let currentQuestNodes = [];
21078
+ let currentQuestLinks = [];
21079
+ let currentMilestones = [];
21080
+ if (isView) {
21081
+ const firestoreQuestsRes = await db_services.get_view_quests_and_links(owner_id, scene_config);
21082
+ const isMigrated = sceneData.quests_migrated === true;
21083
+ if (firestoreQuestsRes.success && (firestoreQuestsRes.data.nodes.length > 0 || isMigrated)) {
21084
+ currentQuestNodes = firestoreQuestsRes.data.nodes;
21085
+ currentQuestLinks = firestoreQuestsRes.data.links;
21086
+ currentMilestones = sceneData.milestones || [];
21087
+ } else {
21088
+ console.log(`Iniciando Lazy Migration para View ${scene_config}...`);
21089
+ const legacyQuestsRes = await db_services.get_file(`x_view_quests/${owner_id}/${scene_config}`);
21090
+ if (legacyQuestsRes.success && legacyQuestsRes.data) {
21091
+ const legacyData = legacyQuestsRes.data;
21092
+ currentQuestNodes = legacyData.nodes || [];
21093
+ currentQuestLinks = legacyData.links || [];
21094
+ currentMilestones = legacyData.milestones || [];
21095
+ sceneData.milestones = currentMilestones;
21096
+ await db_services.migrate_legacy_quests(owner_id, scene_config, legacyData);
21087
21097
  }
21088
- continue;
21089
21098
  }
21099
+ }
21100
+ for (let i = 0; i < parentResponsesResults.length; i++) {
21101
+ const result = parentResponsesResults[i];
21090
21102
  const db_info = parentDbObjects[i];
21091
- if (result.status === "fulfilled" && ((_b = result.value) == null ? void 0 : _b.success)) {
21103
+ if (result.status === "fulfilled" && ((_a = result.value) == null ? void 0 : _a.success)) {
21092
21104
  parentData[db_info.db_id] = result.value.data;
21093
21105
  } else {
21094
21106
  console.warn(
21095
21107
  `Arquivo pai n\xE3o carregado: ${db_info.db_id}. Pode ter sido deletado.`,
21096
- result.status === "rejected" ? result.reason : (_c = result.value) == null ? void 0 : _c.error
21108
+ result.status === "rejected" ? result.reason : (_b = result.value) == null ? void 0 : _b.error
21097
21109
  );
21098
21110
  }
21099
21111
  }
21100
- const currentQuestNodes = (questDataObj == null ? void 0 : questDataObj.nodes) || [];
21101
- const currentQuestLinks = (questDataObj == null ? void 0 : questDataObj.links) || [];
21102
- const currentMilestones = (questDataObj == null ? void 0 : questDataObj.milestones) || [];
21103
21112
  if (isView) {
21104
21113
  parentData[scene_config] = {
21105
21114
  dataset_name: "Quests Internas (View)",
package/dist/index.mjs CHANGED
@@ -1506,17 +1506,11 @@ var userActionHandlers = {
1506
1506
  links: sceneDataRef.current.links,
1507
1507
  quest_counter: sceneDataRef.current.quest_counter || 1
1508
1508
  };
1509
- const questFilePayload = {
1510
- nodes: specificParentData.nodes,
1511
- links: specificParentData.links,
1512
- milestones: sceneDataRef.current.milestones || []
1513
- };
1514
1509
  await context.actions.save_view_data(
1515
1510
  context.sceneSaveUrl,
1516
1511
  viewFilePayload
1517
1512
  );
1518
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
1519
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
1513
+ await context.actions.save_quest_link(context.ownerId, context.sceneConfigId, newLink);
1520
1514
  } else {
1521
1515
  const specificParentData = JSON.parse(
1522
1516
  JSON.stringify(graphDataRef.current[parentFileIdToSave])
@@ -1803,20 +1797,14 @@ var userActionHandlers = {
1803
1797
  links: sceneDataRef.current.links,
1804
1798
  quest_counter: sceneDataRef.current.quest_counter || 1
1805
1799
  };
1806
- questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
1807
- questFilePayload = {
1808
- nodes: specificParentData.nodes,
1809
- links: specificParentData.links,
1810
- milestones: sceneDataRef.current.milestones || []
1811
- };
1812
1800
  } else {
1813
1801
  filenameToSave = `x_view_dbs/${ownerId}/${parentFileId}`;
1814
1802
  payloadToSave = specificParentData;
1815
1803
  }
1816
1804
  try {
1817
1805
  await context.actions.save_view_data(filenameToSave, payloadToSave);
1818
- if (questSaveUrl && questFilePayload) {
1819
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
1806
+ if (isView && parentFileId === context.sceneConfigId && context.actions.delete_quest_link) {
1807
+ await context.actions.delete_quest_link(ownerId, context.sceneConfigId, linkIdToDelete);
1820
1808
  }
1821
1809
  graphDataRef.current[parentFileId] = specificParentData;
1822
1810
  setters.setDetailsLink(
@@ -2048,13 +2036,15 @@ var userActionHandlers = {
2048
2036
  links: sceneDataRef.current.links,
2049
2037
  quest_counter: sceneDataRef.current.quest_counter || 1
2050
2038
  };
2051
- const questFilePayload = {
2052
- nodes: originalData.nodes,
2053
- links: originalData.links,
2054
- milestones: sceneDataRef.current.milestones || []
2055
- };
2056
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2057
- savePromises.push(context.actions.save_view_data(questSaveUrl, questFilePayload));
2039
+ for (const nodeId of nodesToDelete) {
2040
+ const questNode = (originalData.nodes || []).find((n) => String(n.id) === String(nodeId));
2041
+ if (questNode && questNode.is_quest) {
2042
+ await context.actions.delete_quest(ownerId, context.sceneConfigId, nodeId);
2043
+ }
2044
+ }
2045
+ for (const linkId of linksToDelete) {
2046
+ await context.actions.delete_quest_link(ownerId, context.sceneConfigId, linkId);
2047
+ }
2058
2048
  } else {
2059
2049
  filenameToSave = `x_view_dbs/${ownerId}/${parentFileId}`;
2060
2050
  payloadToSave = originalData;
@@ -2146,15 +2136,9 @@ var userActionHandlers = {
2146
2136
  links: newVisualLinks,
2147
2137
  quest_counter: sceneDataRef.current.quest_counter || 1
2148
2138
  };
2149
- const questFilePayload = {
2150
- nodes: specificParentData.nodes,
2151
- links: specificParentData.links,
2152
- milestones: sceneDataRef.current.milestones || []
2153
- };
2154
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2155
2139
  try {
2156
2140
  await context.actions.save_view_data(filenameToSave, payloadToSave);
2157
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
2141
+ await context.actions.delete_quest(ownerId, context.sceneConfigId, nodeIdToDelete);
2158
2142
  graphDataRef.current[parentFileId] = specificParentData;
2159
2143
  setters.setDetailsNode(
2160
2144
  (prev) => String(prev == null ? void 0 : prev.id) === String(nodeIdToDelete) ? null : prev
@@ -2317,17 +2301,11 @@ var userActionHandlers = {
2317
2301
  links: sceneDataRef.current.links,
2318
2302
  quest_counter: sceneDataRef.current.quest_counter || 1
2319
2303
  };
2320
- const questFilePayload = {
2321
- nodes: specificParentData.nodes,
2322
- links: specificParentData.links,
2323
- milestones: sceneDataRef.current.milestones || []
2324
- };
2325
2304
  await context.actions.save_view_data(
2326
2305
  context.sceneSaveUrl,
2327
2306
  viewFilePayload
2328
2307
  );
2329
- const questSaveUrl = context.sceneSaveUrl.replace("x_view_scenes", "x_view_quests");
2330
- await context.actions.save_view_data(questSaveUrl, questFilePayload);
2308
+ await context.actions.save_quest(ownerId, context.sceneConfigId, nodeToSave);
2331
2309
  } else {
2332
2310
  const filenameForSpecificParent = `x_view_dbs/${ownerId}/${parentFileId}`;
2333
2311
  await context.actions.save_view_data(
@@ -15540,7 +15518,11 @@ function XViewScene({
15540
15518
  check_user_permission,
15541
15519
  get_view_members,
15542
15520
  create_google_doc_action,
15543
- open_google_picker_action
15521
+ open_google_picker_action,
15522
+ save_quest_action,
15523
+ delete_quest_action,
15524
+ save_quest_link_action,
15525
+ delete_quest_link_action
15544
15526
  }) {
15545
15527
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
15546
15528
  const { data: session, status } = useSession();
@@ -18047,7 +18029,11 @@ function XViewScene({
18047
18029
  get_single_parent_file,
18048
18030
  get_scene_view_data,
18049
18031
  upload_file: upload_file_action,
18050
- delete_file: delete_file_action
18032
+ delete_file: delete_file_action,
18033
+ save_quest: save_quest_action,
18034
+ delete_quest: delete_quest_action,
18035
+ save_quest_link: save_quest_link_action,
18036
+ delete_quest_link: delete_quest_link_action
18051
18037
  }
18052
18038
  };
18053
18039
  },
@@ -18066,7 +18052,11 @@ function XViewScene({
18066
18052
  get_single_parent_file,
18067
18053
  get_scene_view_data,
18068
18054
  upload_file_action,
18069
- delete_file_action
18055
+ delete_file_action,
18056
+ save_quest_action,
18057
+ delete_quest_action,
18058
+ save_quest_link_action,
18059
+ delete_quest_link_action
18070
18060
  ]
18071
18061
  );
18072
18062
  const handleStartVersioning = (nodeData) => {
@@ -18284,11 +18274,7 @@ function XViewScene({
18284
18274
  milestones: sceneData.milestones || []
18285
18275
  };
18286
18276
  await save_view_data(sceneSaveUrl, sceneFileData);
18287
- const questSaveUrl = sceneSaveUrl.replace(
18288
- "x_view_scenes",
18289
- "x_view_quests"
18290
- );
18291
- await save_view_data(questSaveUrl, questFileData);
18277
+ await save_quest_action(ownerId, sceneConfigId, updatedNodeData);
18292
18278
  }
18293
18279
  const updatedNodeData = sceneData.quest_nodes[questIndex];
18294
18280
  const nodeMesh = (_a2 = stateRef.current.nodeObjects) == null ? void 0 : _a2[String(questNodeId)];
@@ -18376,8 +18362,7 @@ function XViewScene({
18376
18362
  };
18377
18363
  try {
18378
18364
  await actions.save_view_data(sceneSaveUrl2, sceneFileData);
18379
- const questSaveUrl = sceneSaveUrl2.replace("x_view_scenes", "x_view_quests");
18380
- await actions.save_view_data(questSaveUrl, questFileData);
18365
+ await actions.save_quest(ownerId2, sceneConfigId2, newNode);
18381
18366
  sceneDataRef2.current.quest_counter = currentCounter + 1;
18382
18367
  stateRef2.current.nodeIdToParentFileMap.set(String(newNode.id), {
18383
18368
  parentFileId: sceneConfigId2,
@@ -18500,7 +18485,9 @@ function XViewScene({
18500
18485
  if (line.material) line.material.dispose();
18501
18486
  });
18502
18487
  renderedAncestries.splice(renderIndex, 1);
18503
- stateRef.current.ancestryLinks = renderedAncestries.flatMap((a) => a.lines);
18488
+ stateRef.current.ancestryLinks = renderedAncestries.flatMap(
18489
+ (a) => a.lines
18490
+ );
18504
18491
  }
18505
18492
  }, []);
18506
18493
  const handleRenderAncestry = useCallback7(
@@ -19073,7 +19060,9 @@ function XViewScene({
19073
19060
  });
19074
19061
  };
19075
19062
  renderVertical(fullTree, rootNodeMesh, rootTargetPos, 1);
19076
- stateRef.current.ancestryLinks = renderedAncestries.flatMap((a) => a.lines);
19063
+ stateRef.current.ancestryLinks = renderedAncestries.flatMap(
19064
+ (a) => a.lines
19065
+ );
19077
19066
  tweenToTarget(rootTargetPos, 0.7);
19078
19067
  },
19079
19068
  [
@@ -19208,7 +19197,10 @@ function XViewScene({
19208
19197
  };
19209
19198
  const descriptionText = targetAncestryInfo.description || "";
19210
19199
  const savedSections = targetAncestryInfo.description_sections || [];
19211
- const sections = parseDescriptionSections(descriptionText, savedSections);
19200
+ const sections = parseDescriptionSections(
19201
+ descriptionText,
19202
+ savedSections
19203
+ );
19212
19204
  let focusTargetId = null;
19213
19205
  if (popped && popped.nodeId) {
19214
19206
  const mentionTag = `[[MENTION:node:${popped.nodeId}]]`;
@@ -19985,7 +19977,10 @@ function XViewScene({
19985
19977
  }
19986
19978
  if (ancestry_save_url && isExternalSave && get_ancestry_file) {
19987
19979
  try {
19988
- const viewDbResponse = await get_ancestry_file(sceneConfigId, ownerId);
19980
+ const viewDbResponse = await get_ancestry_file(
19981
+ sceneConfigId,
19982
+ ownerId
19983
+ );
19989
19984
  if (viewDbResponse.success && Array.isArray(viewDbResponse.data)) {
19990
19985
  const hasInViewDb = viewDbResponse.data.some(
19991
19986
  (anc) => String(anc.ancestry_id) === String(ancestryIdToDelete)
@@ -20949,12 +20944,18 @@ function XViewScene({
20949
20944
  data: multiContextMenu,
20950
20945
  userRole: userPermissionRole,
20951
20946
  onClose: () => setMultiContextMenu((prev) => ({ ...prev, visible: false })),
20952
- onDismissNodes: (ids) => userActionHandlers.handleDismissMultipleNodes(actionHandlerContext, ids),
20947
+ onDismissNodes: (ids) => userActionHandlers.handleDismissMultipleNodes(
20948
+ actionHandlerContext,
20949
+ ids
20950
+ ),
20953
20951
  onDismissOtherNodes: (ids) => userActionHandlers.handleDismissOtherMultipleNodes(
20954
20952
  actionHandlerContext,
20955
20953
  ids
20956
20954
  ),
20957
- onDeleteNodes: (ids) => userActionHandlers.handleDeleteMultipleNodes(actionHandlerContext, ids)
20955
+ onDeleteNodes: (ids) => userActionHandlers.handleDeleteMultipleNodes(
20956
+ actionHandlerContext,
20957
+ ids
20958
+ )
20958
20959
  }
20959
20960
  ),
20960
20961
  /* @__PURE__ */ React32.createElement(
@@ -21107,7 +21108,7 @@ async function save_view_data_logic(db_services, filename, data) {
21107
21108
  }
21108
21109
  }
21109
21110
  async function get_scene_view_data_logic(db_services, scene_config, owner_id, type, session, focusNodeId = null, focusAncestryId = null) {
21110
- var _a, _b, _c;
21111
+ var _a, _b;
21111
21112
  try {
21112
21113
  if (!session || !session.user) {
21113
21114
  return { success: false, error: "Usu\xE1rio n\xE3o autenticado." };
@@ -21134,35 +21135,43 @@ async function get_scene_view_data_logic(db_services, scene_config, owner_id, ty
21134
21135
  const parentResponsesPromises = parentDbObjects.map(
21135
21136
  (db_info) => db_services.get_file(`x_view_dbs/${db_info.owner_id}/${db_info.db_id}`)
21136
21137
  );
21137
- if (isView) {
21138
- parentResponsesPromises.push(
21139
- db_services.get_file(`x_view_quests/${owner_id}/${scene_config}`)
21140
- );
21141
- }
21142
21138
  const parentResponsesResults = await Promise.allSettled(parentResponsesPromises);
21143
21139
  const parentData = {};
21144
- let questDataObj = null;
21145
- for (let i = 0; i < parentResponsesResults.length; i++) {
21146
- const result = parentResponsesResults[i];
21147
- if (isView && i === parentResponsesResults.length - 1) {
21148
- if (result.status === "fulfilled" && ((_a = result.value) == null ? void 0 : _a.success)) {
21149
- questDataObj = result.value.data;
21140
+ let currentQuestNodes = [];
21141
+ let currentQuestLinks = [];
21142
+ let currentMilestones = [];
21143
+ if (isView) {
21144
+ const firestoreQuestsRes = await db_services.get_view_quests_and_links(owner_id, scene_config);
21145
+ const isMigrated = sceneData.quests_migrated === true;
21146
+ if (firestoreQuestsRes.success && (firestoreQuestsRes.data.nodes.length > 0 || isMigrated)) {
21147
+ currentQuestNodes = firestoreQuestsRes.data.nodes;
21148
+ currentQuestLinks = firestoreQuestsRes.data.links;
21149
+ currentMilestones = sceneData.milestones || [];
21150
+ } else {
21151
+ console.log(`Iniciando Lazy Migration para View ${scene_config}...`);
21152
+ const legacyQuestsRes = await db_services.get_file(`x_view_quests/${owner_id}/${scene_config}`);
21153
+ if (legacyQuestsRes.success && legacyQuestsRes.data) {
21154
+ const legacyData = legacyQuestsRes.data;
21155
+ currentQuestNodes = legacyData.nodes || [];
21156
+ currentQuestLinks = legacyData.links || [];
21157
+ currentMilestones = legacyData.milestones || [];
21158
+ sceneData.milestones = currentMilestones;
21159
+ await db_services.migrate_legacy_quests(owner_id, scene_config, legacyData);
21150
21160
  }
21151
- continue;
21152
21161
  }
21162
+ }
21163
+ for (let i = 0; i < parentResponsesResults.length; i++) {
21164
+ const result = parentResponsesResults[i];
21153
21165
  const db_info = parentDbObjects[i];
21154
- if (result.status === "fulfilled" && ((_b = result.value) == null ? void 0 : _b.success)) {
21166
+ if (result.status === "fulfilled" && ((_a = result.value) == null ? void 0 : _a.success)) {
21155
21167
  parentData[db_info.db_id] = result.value.data;
21156
21168
  } else {
21157
21169
  console.warn(
21158
21170
  `Arquivo pai n\xE3o carregado: ${db_info.db_id}. Pode ter sido deletado.`,
21159
- result.status === "rejected" ? result.reason : (_c = result.value) == null ? void 0 : _c.error
21171
+ result.status === "rejected" ? result.reason : (_b = result.value) == null ? void 0 : _b.error
21160
21172
  );
21161
21173
  }
21162
21174
  }
21163
- const currentQuestNodes = (questDataObj == null ? void 0 : questDataObj.nodes) || [];
21164
- const currentQuestLinks = (questDataObj == null ? void 0 : questDataObj.links) || [];
21165
- const currentMilestones = (questDataObj == null ? void 0 : questDataObj.milestones) || [];
21166
21175
  if (isView) {
21167
21176
  parentData[scene_config] = {
21168
21177
  dataset_name: "Quests Internas (View)",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lv-x-software-house/x_view",
3
- "version": "1.2.8-dev.1",
3
+ "version": "1.2.8-dev.3",
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",