fix(Connections): Fixed connections auto-refresh after update

This commit is contained in:
Dmitry Popov
2025-02-09 17:27:22 +01:00
parent 01b7370ecd
commit 2437ec9c84
3 changed files with 6 additions and 47 deletions

View File

@@ -84,7 +84,6 @@ interface MapCompProps {
onCommand: OutCommandHandler; onCommand: OutCommandHandler;
onSelectionChange: OnMapSelectionChange; onSelectionChange: OnMapSelectionChange;
onManualDelete(systems: string[]): void; onManualDelete(systems: string[]): void;
canRemoveConnection?(connectionId: string): boolean;
onConnectionInfoClick?(e: SolarSystemConnection): void; onConnectionInfoClick?(e: SolarSystemConnection): void;
onAddSystem?: OnMapAddSystemCallback; onAddSystem?: OnMapAddSystemCallback;
onSelectionContextMenu?: NodeSelectionMouseHandler; onSelectionContextMenu?: NodeSelectionMouseHandler;
@@ -114,9 +113,8 @@ const MapComp = ({
isSoftBackground, isSoftBackground,
theme, theme,
onAddSystem, onAddSystem,
canRemoveConnection,
}: MapCompProps) => { }: MapCompProps) => {
const { getEdge, getNode, getNodes } = useReactFlow(); const { getNode, getNodes } = useReactFlow();
const [nodes, , onNodesChange] = useNodesState<Node<SolarSystemRawType>>(initialNodes); const [nodes, , onNodesChange] = useNodesState<Node<SolarSystemRawType>>(initialNodes);
const [edges, , onEdgesChange] = useEdgesState<Edge<SolarSystemConnection>>(initialEdges); const [edges, , onEdgesChange] = useEdgesState<Edge<SolarSystemConnection>>(initialEdges);
@@ -224,40 +222,6 @@ const MapComp = ({
[getNode, getNodes, onManualDelete, onNodesChange], [getNode, getNodes, onManualDelete, onNodesChange],
); );
const handleEdgesChange = useCallback(
(changes: EdgeChange[]) => {
const nextChanges = changes.reduce((acc, change) => {
if (change.type !== 'remove') {
return [...acc, change];
}
if (canRemoveConnection?.(change.id)) {
return [...acc, change];
}
const edge = getEdge(change.id);
if (!edge) {
return [...acc, change];
}
const sourceNode = getNode(edge.source);
const targetNode = getNode(edge.target);
if (!sourceNode || !targetNode) {
return [...acc, change];
}
if (sourceNode.data.locked || targetNode.data.locked) {
return acc;
}
return [...acc, change];
}, [] as EdgeChange[]);
onEdgesChange(nextChanges);
},
[canRemoveConnection, getEdge, getNode, onEdgesChange],
);
useEffect(() => { useEffect(() => {
update(x => ({ update(x => ({
...x, ...x,
@@ -273,7 +237,7 @@ const MapComp = ({
nodes={nodes} nodes={nodes}
edges={edges} edges={edges}
onNodesChange={handleNodesChange} onNodesChange={handleNodesChange}
onEdgesChange={handleEdgesChange} onEdgesChange={onEdgesChange}
onConnect={onConnect} onConnect={onConnect}
// TODO we need save into session all of this // TODO we need save into session all of this
// and on any action do either // and on any action do either

View File

@@ -10,5 +10,6 @@ export const convertSystem2Node = (sys: SolarSystemRawType): Node => {
position: sys.position, position: sys.position,
data: sys, data: sys,
draggable: !sys.locked, draggable: !sys.locked,
deletable: !sys.locked,
}; };
}; };

View File

@@ -33,7 +33,7 @@ export const MapWrapper = () => {
const { const {
update, update,
outCommand, outCommand,
data: { selectedConnections, selectedSystems, hubs, systems, connections, linkSignatureToSystem }, data: { selectedConnections, selectedSystems, hubs, systems, linkSignatureToSystem },
interfaceSettings: { interfaceSettings: {
isShowMenu, isShowMenu,
isShowMinimap = STORED_INTERFACE_DEFAULT_VALUES.isShowMinimap, isShowMinimap = STORED_INTERFACE_DEFAULT_VALUES.isShowMinimap,
@@ -56,8 +56,8 @@ export const MapWrapper = () => {
const [openAddSystem, setOpenAddSystem] = useState<XYPosition | null>(null); const [openAddSystem, setOpenAddSystem] = useState<XYPosition | null>(null);
const [selectedConnection, setSelectedConnection] = useState<SolarSystemConnection | null>(null); const [selectedConnection, setSelectedConnection] = useState<SolarSystemConnection | null>(null);
const ref = useRef({ selectedConnections, selectedSystems, systemContextProps, systems, connections, deleteSystems }); const ref = useRef({ selectedConnections, selectedSystems, systemContextProps, systems, deleteSystems });
ref.current = { selectedConnections, selectedSystems, systemContextProps, systems, connections, deleteSystems }; ref.current = { selectedConnections, selectedSystems, systemContextProps, systems, deleteSystems };
useMapEventListener(event => { useMapEventListener(event => {
runCommand(event); runCommand(event);
@@ -125,11 +125,6 @@ export const MapWrapper = () => {
setOpenAddSystem(coordinates); setOpenAddSystem(coordinates);
}, []); }, []);
const canRemoveConnection = useCallback((connectionId: string) => {
const { connections } = ref.current;
return !connections.some(x => x.id === connectionId);
}, []);
const handleSubmitAddSystem: SearchOnSubmitCallback = useCallback( const handleSubmitAddSystem: SearchOnSubmitCallback = useCallback(
async item => { async item => {
if (ref.current.systems.some(x => x.system_static_info.solar_system_id === item.value)) { if (ref.current.systems.some(x => x.system_static_info.solar_system_id === item.value)) {
@@ -166,7 +161,6 @@ export const MapWrapper = () => {
isSoftBackground={isSoftBackground} isSoftBackground={isSoftBackground}
theme={theme} theme={theme}
onAddSystem={onAddSystem} onAddSystem={onAddSystem}
canRemoveConnection={canRemoveConnection}
/> />
{openSettings != null && ( {openSettings != null && (