@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.
- package/dist/index.js +385 -190
- package/dist/index.mjs +385 -190
- 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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
1558
|
-
|
|
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
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
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 (
|
|
1858
|
-
await context.actions.
|
|
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
|
-
|
|
2096
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
2369
|
-
|
|
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
|
-
|
|
2450
|
-
|
|
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
|
|
18213
|
-
|
|
18214
|
-
|
|
18215
|
-
|
|
18216
|
-
|
|
18217
|
-
|
|
18218
|
-
|
|
18219
|
-
|
|
18220
|
-
|
|
18221
|
-
|
|
18222
|
-
|
|
18223
|
-
|
|
18224
|
-
|
|
18225
|
-
|
|
18226
|
-
|
|
18227
|
-
)
|
|
18228
|
-
|
|
18229
|
-
|
|
18230
|
-
|
|
18231
|
-
|
|
18232
|
-
|
|
18233
|
-
|
|
18234
|
-
|
|
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
|
|
18306
|
-
|
|
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
|
-
|
|
18316
|
-
|
|
18317
|
-
|
|
18318
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
20132
|
-
|
|
20133
|
-
|
|
20134
|
-
|
|
20135
|
-
|
|
20136
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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 {
|
|
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(
|
|
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 {
|
|
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(
|
|
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
|
-
|
|
21076
|
-
|
|
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(
|
|
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(
|
|
21113
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
21188
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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)
|
|
21491
|
+
if (branch.description)
|
|
21492
|
+
extractDependenciesFromText(branch.description);
|
|
21336
21493
|
if (branch.description_sections) {
|
|
21337
|
-
branch.description_sections.forEach(
|
|
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(
|
|
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(
|
|
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 = {
|
|
21530
|
+
const restrictedSceneData = {
|
|
21531
|
+
...validatedSceneData,
|
|
21532
|
+
nodes: [],
|
|
21533
|
+
links: []
|
|
21534
|
+
};
|
|
21368
21535
|
const restrictedParentData = {};
|
|
21369
|
-
const restrictedAncestryData = ancestryData.filter(
|
|
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(
|
|
21540
|
+
const filteredNodes = (dbContent.nodes || []).filter(
|
|
21541
|
+
(n) => requiredNodeIds.has(String(n.id))
|
|
21542
|
+
);
|
|
21372
21543
|
if (filteredNodes.length > 0) {
|
|
21373
|
-
restrictedParentData[dbId] = {
|
|
21544
|
+
restrictedParentData[dbId] = {
|
|
21545
|
+
...dbContent,
|
|
21546
|
+
nodes: filteredNodes,
|
|
21547
|
+
links: []
|
|
21548
|
+
};
|
|
21374
21549
|
}
|
|
21375
21550
|
}
|
|
21376
21551
|
if (focusNodeId) {
|
|
21377
|
-
const mainNode = allNodesFromDb.find(
|
|
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: {
|
|
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(
|
|
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(
|
|
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(
|
|
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 {
|
|
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) {
|