@@ -21,7 +21,8 @@ import {
2121import { useDiagram , useLayout , useUndoRedo } from "../../../hooks" ;
2222import i18n from "../../../i18n/i18n" ;
2323import { useTranslation } from "react-i18next" ;
24- import { useMemo , useState } from "react" ;
24+ import { useMemo , useRef , useState } from "react" ;
25+ import ColorPicker from "../ColorPicker.jsx" ;
2526
2627const columns = [
2728 {
@@ -40,6 +41,8 @@ export default function RelationshipInfo({ data }) {
4041 const { t } = useTranslation ( ) ;
4142 const { layout } = useLayout ( ) ;
4243 const [ editField , setEditField ] = useState ( { } ) ;
44+ const initialColorRef = useRef ( data . color ) ;
45+
4346
4447 const relValues = useMemo ( ( ) => {
4548 const { fields : startTableFields , name : startTableName } = tables . find (
@@ -141,6 +144,41 @@ export default function RelationshipInfo({ data }) {
141144 updateRelationship ( data . id , { [ undoKey ] : value } ) ;
142145 } ;
143146
147+ const handleColorPick = ( color ) => {
148+ setUndoStack ( ( prev ) => {
149+ let undoColor = initialColorRef . current ;
150+ const lastColorChange = prev . findLast (
151+ ( e ) =>
152+ e . element === ObjectType . RELATIONSHIP &&
153+ e . rid === data . id &&
154+ e . action === Action . EDIT &&
155+ e . redo ?. color ,
156+ ) ;
157+ if ( lastColorChange ) {
158+ undoColor = lastColorChange . redo . color ;
159+ }
160+
161+ if ( color === undoColor ) return prev ;
162+
163+ const newStack = [
164+ ...prev ,
165+ {
166+ action : Action . EDIT ,
167+ element : ObjectType . RELATIONSHIP ,
168+ rid : data . id ,
169+ undo : { color : undoColor } ,
170+ redo : { color : color } ,
171+ message : t ( "edit_relationship" , {
172+ refName : data . name ,
173+ extra : "[color]" ,
174+ } ) ,
175+ } ,
176+ ] ;
177+ return newStack ;
178+ } ) ;
179+ setRedoStack ( [ ] ) ;
180+ } ;
181+
144182 return (
145183 < >
146184 < div className = "flex items-center mb-2.5" >
@@ -173,6 +211,15 @@ export default function RelationshipInfo({ data }) {
173211 setRedoStack ( [ ] ) ;
174212 } }
175213 />
214+ < div className = "ms-2" >
215+ < ColorPicker
216+ usePopover = { true }
217+ readOnly = { layout . readOnly }
218+ value = { data . color }
219+ onChange = { ( color ) => updateRelationship ( data . id , { color } ) }
220+ onColorPick = { ( color ) => handleColorPick ( color ) }
221+ />
222+ </ div >
176223 </ div >
177224 < div className = "flex justify-between items-center mb-3" >
178225 < div className = "me-3" >
0 commit comments