1
1
import React , { useState , useRef , memo } from 'react' ;
2
+ import { useDispatch } from 'react-redux' ;
2
3
import { makeStyles , IconButton , Tooltip , Grid } from '@material-ui/core' ;
3
4
import { Check , Clear , Warning , Favorite , Star } from '@material-ui/icons' ;
4
5
import { actionAnnotation } from '../../reducers/tracking/constants' ;
5
6
import { TimelineEvent } from 'react-event-timeline' ;
6
7
import EditableText from './editableText' ;
7
8
import palette from '../../theme/palette' ;
9
+ import { updateTrackingActions } from '../../reducers/tracking/dispatchActions' ;
8
10
9
11
const useStyles = makeStyles ( theme => ( {
10
12
headerGrid : {
@@ -23,6 +25,8 @@ const useStyles = makeStyles(theme => ({
23
25
} ) ) ;
24
26
25
27
const TimelineView = memo ( ( { data, index } ) => {
28
+ const dispatch = useDispatch ( ) ;
29
+
26
30
const ref = useRef ( null ) ;
27
31
const [ isHovering , setIsHovering ] = useState ( false ) ;
28
32
const [ updatedIcon , setUpdatedIcon ] = useState ( null ) ;
@@ -51,7 +55,14 @@ const TimelineView = memo(({ data, index }) => {
51
55
} ;
52
56
53
57
const annotationActions = [
54
- < IconButton className = { classes . iconButton } color = { 'primary' } onClick = { ( ) => setUpdatedIcon ( actionAnnotation . CHECK ) } >
58
+ < IconButton
59
+ className = { classes . iconButton }
60
+ color = { 'primary' }
61
+ onClick = { ( ) => {
62
+ setUpdatedIcon ( actionAnnotation . CHECK ) ;
63
+ updateDataAnnotation ( actionAnnotation . CHECK ) ;
64
+ } }
65
+ >
55
66
< Tooltip title = "Check" >
56
67
< Check />
57
68
</ Tooltip >
@@ -61,6 +72,7 @@ const TimelineView = memo(({ data, index }) => {
61
72
color = { 'primary' }
62
73
onClick = { ( ) => {
63
74
setUpdatedIcon ( actionAnnotation . CLEAR ) ;
75
+ updateDataAnnotation ( actionAnnotation . CLEAR ) ;
64
76
} }
65
77
>
66
78
< Tooltip title = "Clear" >
@@ -72,6 +84,7 @@ const TimelineView = memo(({ data, index }) => {
72
84
color = { 'primary' }
73
85
onClick = { ( ) => {
74
86
setUpdatedIcon ( actionAnnotation . WARNING ) ;
87
+ updateDataAnnotation ( actionAnnotation . WARNING ) ;
75
88
} }
76
89
>
77
90
< Tooltip title = "Warning" >
@@ -83,6 +96,7 @@ const TimelineView = memo(({ data, index }) => {
83
96
color = { 'primary' }
84
97
onClick = { ( ) => {
85
98
setUpdatedIcon ( actionAnnotation . FAVORITE ) ;
99
+ updateDataAnnotation ( actionAnnotation . FAVORITE ) ;
86
100
} }
87
101
>
88
102
< Tooltip title = "Favorite" >
@@ -94,6 +108,7 @@ const TimelineView = memo(({ data, index }) => {
94
108
color = { 'primary' }
95
109
onClick = { ( ) => {
96
110
setUpdatedIcon ( actionAnnotation . STAR ) ;
111
+ updateDataAnnotation ( actionAnnotation . STAR ) ;
97
112
} }
98
113
>
99
114
< Tooltip title = "Star" >
@@ -102,6 +117,16 @@ const TimelineView = memo(({ data, index }) => {
102
117
</ IconButton >
103
118
] ;
104
119
120
+ const updateDataText = text => {
121
+ data . text = text ;
122
+ dispatch ( updateTrackingActions ( data ) ) ;
123
+ } ;
124
+
125
+ const updateDataAnnotation = annotation => {
126
+ data . annotation = annotation ;
127
+ dispatch ( updateTrackingActions ( data ) ) ;
128
+ } ;
129
+
105
130
return (
106
131
< div ref = { ref } onMouseEnter = { ( ) => setIsHovering ( true ) } onMouseLeave = { ( ) => setIsHovering ( false ) } >
107
132
< TimelineEvent
@@ -111,7 +136,7 @@ const TimelineView = memo(({ data, index }) => {
111
136
< Grid container justify = "flex-start" direction = "row" alignItems = "center" className = { classes . headerGrid } >
112
137
{
113
138
< Grid item xs = { 8 } className = { classes . grid } >
114
- < EditableText text = { data . text } index = { index } />
139
+ < EditableText dataText = { data . text } index = { index } updateText = { updateDataText } />
115
140
</ Grid >
116
141
}
117
142
{ isHovering && (
@@ -137,7 +162,6 @@ const TimelineView = memo(({ data, index }) => {
137
162
}
138
163
createdAt = { new Date ( data . timestamp ) . toLocaleString ( ) }
139
164
icon = { updatedIcon && updatedIcon != null ? getActionIcon ( updatedIcon ) : getActionIcon ( data . annotation ) }
140
- //icon={getActionIcon(data.annotation)}
141
165
iconColor = { palette . primary . main }
142
166
className = { classes . timelineEvent }
143
167
> </ TimelineEvent >
0 commit comments