mirror of
https://github.com/wanderer-industries/wanderer
synced 2025-12-12 10:45:54 +00:00
fix(Connections): Fixed connections auto-refresh after update
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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 && (
|
||||||
|
|||||||
Reference in New Issue
Block a user