Increase node size and distance and fix error

Took 8 minutes

Took 10 minutes
This commit is contained in:
Tobias Hopp 2025-04-17 14:49:32 +02:00
parent f1ead87340
commit b89f6b19a4
2 changed files with 45 additions and 65 deletions

View File

@ -35,15 +35,15 @@ interface CanvasGraphProps {
} }
// Physics constants // Physics constants
const NODE_RADIUS = 45; // Node radius in pixels const NODE_RADIUS = 50; // Node radius in pixels
const MIN_DISTANCE = 110; // Minimum distance between any two nodes const MIN_DISTANCE = 250; // Minimum distance between any two nodes
const MAX_DISTANCE = 500; // Maximum distance between connected nodes const MAX_DISTANCE = 800; // Maximum distance between connected nodes
const REPULSION_STRENGTH = 500; // How strongly nodes repel each other when too close const REPULSION_STRENGTH = 400; // How strongly nodes repel each other when too close
const ATTRACTION_STRENGTH = 0.1; // Default attraction between connected nodes const ATTRACTION_STRENGTH = 0.1; // Default attraction between connected nodes
const CONSTRAINT_STRENGTH = 0.2; // Strength of distance constraints const CONSTRAINT_STRENGTH = 0.2; // Strength of distance constraints
const DAMPING = 0.6; // Damping factor for velocity (0-1) const DAMPING = 0.6; // Damping factor for velocity (0-1)
const CENTER_GRAVITY = 0.01; // Force pulling nodes to the center const CENTER_GRAVITY = 0.01; // Force pulling nodes to the center
const MAX_VELOCITY = 5; // Maximum velocity to prevent wild movement const MAX_VELOCITY = 4; // Maximum velocity to prevent wild movement
const COOLING_FACTOR = 0.99; // System gradually cools down const COOLING_FACTOR = 0.99; // System gradually cools down
const CanvasGraph: React.FC<CanvasGraphProps> = ({ data, width, height }) => { const CanvasGraph: React.FC<CanvasGraphProps> = ({ data, width, height }) => {

View File

@ -1,24 +1,10 @@
import React from 'react'; import React from 'react';
import DatePicker from 'react-datepicker'; import DatePicker from 'react-datepicker';
import { import { FaPlus, FaRegCalendarAlt, FaSave, FaStar, FaTrash, FaUserFriends, FaUserPlus } from 'react-icons/fa';
FaPlus,
FaRegCalendarAlt,
FaSave,
FaStar,
FaTrash,
FaUserFriends,
FaUserPlus,
} from 'react-icons/fa';
import { Button, FormField, Modal } from '../components/FriendshipNetworkComponents'; import { Button, FormField, Modal } from '../components/FriendshipNetworkComponents';
import { import { FormErrors, NewPersonForm, NewRelationshipForm, PersonNode, RelationshipEdge } from '../types/network';
PersonNode,
RelationshipEdge,
FormErrors,
NewPersonForm,
NewRelationshipForm,
} from '../types/network';
import { import {
getRelationshipColor, getRelationshipColor,
@ -26,13 +12,7 @@ import {
RELATIONSHIP_TYPES, RELATIONSHIP_TYPES,
RELATIONSHIPS, RELATIONSHIPS,
} from '../types/RelationShipTypes'; } from '../types/RelationShipTypes';
import { import { ErrorMessage, KeyboardShortcut, OptionGroup, TipItem, ToggleSetting } from './UIComponents';
ErrorMessage,
KeyboardShortcut,
OptionGroup,
TipItem,
ToggleSetting,
} from './UIComponents';
// ============================== // ==============================
// Person Form Modal // Person Form Modal
@ -55,7 +35,7 @@ export const PersonFormModal: React.FC<PersonFormModalProps> = ({
errors, errors,
onSubmit, onSubmit,
isEdit = false, isEdit = false,
}) => { }) => {
return ( return (
<Modal isOpen={isOpen} onClose={onClose} title={isEdit ? 'Edit Person' : 'Add New Person'}> <Modal isOpen={isOpen} onClose={onClose} title={isEdit ? 'Edit Person' : 'Add New Person'}>
<form onSubmit={onSubmit} className="space-y-4"> <form onSubmit={onSubmit} className="space-y-4">
@ -91,7 +71,7 @@ export const PersonFormModal: React.FC<PersonFormModalProps> = ({
id="birthday" id="birthday"
selected={formData.birthday} selected={formData.birthday}
onChange={(date: Date | null) => setFormData({ ...formData, birthday: date })} onChange={(date: Date | null) => setFormData({ ...formData, birthday: date })}
dateFormat="dd.MM.YYYY" dateFormat="dd.MM.yyyy"
placeholderText="Select birthday" placeholderText="Select birthday"
className="w-full bg-slate-700 border border-slate-600 rounded-md p-2 className="w-full bg-slate-700 border border-slate-600 rounded-md p-2
focus:outline-none focus:ring-2 focus:ring-indigo-500 text-white" focus:outline-none focus:ring-2 focus:ring-indigo-500 text-white"
@ -148,7 +128,7 @@ export const RelationshipFormModal: React.FC<RelationshipFormModalProps> = ({
errors, errors,
onSubmit, onSubmit,
people, people,
}) => { }) => {
return ( return (
<Modal isOpen={isOpen} onClose={onClose} title="Add New Relationship"> <Modal isOpen={isOpen} onClose={onClose} title="Add New Relationship">
<form onSubmit={onSubmit} className="space-y-4"> <form onSubmit={onSubmit} className="space-y-4">
@ -301,7 +281,7 @@ export const PersonDetailModal: React.FC<PersonDetailModalProps> = ({
onDeleteRelationship, onDeleteRelationship,
onAddNewConnection, onAddNewConnection,
onNavigateToPerson, onNavigateToPerson,
}) => { }) => {
return ( return (
<Modal isOpen={isOpen} onClose={onClose} title={`${person.firstName} ${person.lastName}`}> <Modal isOpen={isOpen} onClose={onClose} title={`${person.firstName} ${person.lastName}`}>
<div className="space-y-6"> <div className="space-y-6">
@ -337,7 +317,7 @@ export const PersonDetailModal: React.FC<PersonDetailModalProps> = ({
id="editBirthday" id="editBirthday"
selected={person.birthday ? new Date(person.birthday) : null} selected={person.birthday ? new Date(person.birthday) : null}
onChange={(date: Date | null) => setPerson({ ...person, birthday: date })} onChange={(date: Date | null) => setPerson({ ...person, birthday: date })}
dateFormat="dd.MM.YYYY" dateFormat="dd.MM.yyyy"
placeholderText="Select birthday" placeholderText="Select birthday"
className="w-full bg-slate-700 border border-slate-600 rounded-md p-2 className="w-full bg-slate-700 border border-slate-600 rounded-md p-2
focus:outline-none focus:ring-2 focus:ring-indigo-500 text-white" focus:outline-none focus:ring-2 focus:ring-indigo-500 text-white"
@ -380,7 +360,7 @@ export const PersonDetailModal: React.FC<PersonDetailModalProps> = ({
<h4 className="font-medium text-indigo-400 mb-2">Connections</h4> <h4 className="font-medium text-indigo-400 mb-2">Connections</h4>
<div className="max-h-40 overflow-y-auto space-y-1 bg-slate-900 rounded-lg p-2"> <div className="max-h-40 overflow-y-auto space-y-1 bg-slate-900 rounded-lg p-2">
{relationships.filter( {relationships.filter(
(r: RelationshipEdge) => r.source === person._id || r.target === person._id (r: RelationshipEdge) => r.source === person._id || r.target === person._id,
).length > 0 ? ( ).length > 0 ? (
relationships relationships
.filter((r: RelationshipEdge) => r.source === person._id || r.target === person._id) .filter((r: RelationshipEdge) => r.source === person._id || r.target === person._id)
@ -469,7 +449,7 @@ export const SettingsModal: React.FC<SettingsModalProps> = ({
onClose, onClose,
settings, settings,
setSettings, setSettings,
}) => { }) => {
return ( return (
<Modal isOpen={isOpen} onClose={onClose} title="Network Settings"> <Modal isOpen={isOpen} onClose={onClose} title="Network Settings">
<div className="space-y-4"> <div className="space-y-4">