1
1
import Annotator from "../Annotator"
2
2
import React , { useEffect , useState } from "react"
3
- import { saveData , splitRegionData , getImageData } from '../utils/send-data-to-server'
4
3
import SetupPage from "../SetupPage" ;
5
- import { useSnackbar } from '../SnackbarContext' ;
6
4
import { useSettings } from "../SettingsProvider" ;
5
+ import { setIn } from "seamless-immutable"
6
+
7
+ const extractRelevantProps = ( region ) => ( {
8
+ cls : region . cls ,
9
+ comment : region . comment ,
10
+ id : region . id ,
11
+ } ) ;
7
12
8
13
const userReducer = ( state , action ) => {
9
14
switch ( action . type ) {
10
- // case "SELECT_CLASSIFICATION": {
11
- // switch (action.cls) {
12
- // case "One": {
13
- // return setIn(state, ["selectedTool"], "create-box");
14
- // }
15
- // case "Two": {
16
- // return setIn(state, ["selectedTool"], "create-polygon");
17
- // }
18
- // }
19
- // }
15
+ case "CLOSE_REGION_EDITOR" :
16
+ case "DELETE_REGION" : {
17
+ const { images, selectedImage } = state ;
18
+ const lastRegions = state . lastRegions || [ ] ;
19
+ if ( selectedImage != null && lastRegions ) {
20
+ const currentImage = images [ selectedImage ] ;
21
+ const regions = currentImage ? ( currentImage . regions || [ ] ) : [ ] ;
22
+ if (
23
+ regions . length !== lastRegions . length ||
24
+ ! regions . every ( ( region , index ) => {
25
+ const lastRegion = lastRegions [ index ] || [ ] ;
26
+ const currentProps = extractRelevantProps ( region ) ;
27
+ const lastProps = extractRelevantProps ( lastRegion ) ;
28
+ return JSON . stringify ( currentProps ) === JSON . stringify ( lastProps ) ;
29
+ } )
30
+ ) {
31
+ return setIn ( state , [ "hasNewChange" ] , true ) ;
32
+ } else {
33
+ return setIn ( state , [ "hasNewChange" ] , false ) ;
34
+ }
35
+ }
36
+ }
37
+ case "SAVE_LAST_REGIONS" : {
38
+ return setIn ( state , [ "lastRegions" ] , action . payload ) ;
39
+ }
40
+ case "ENABLE_DOWNLOAD" : {
41
+ return setIn ( state , [ "enabledDownload" ] , true ) ;
42
+ }
20
43
}
21
-
22
44
return state ;
23
45
} ;
24
46
25
-
26
-
27
47
export default ( ) => {
28
- const { showSnackbar } = useSnackbar ( ) ;
29
48
const [ selectedImageIndex , changeSelectedImageIndex ] = useState ( 0 )
30
49
const [ showLabel , setShowLabel ] = useState ( false )
31
50
const [ imageNames , setImageNames ] = useState ( [ ] )
@@ -42,23 +61,6 @@ export default () => {
42
61
}
43
62
} )
44
63
45
- const preprocessDataBeforeSend = ( output ) => {
46
- const selectedImageIndex = output . selectedImage ;
47
- let _image = output . images [ selectedImageIndex ]
48
- let regions = _image [ 'regions' ] || [ ]
49
- let imageData = getImageData ( _image )
50
-
51
- imageData [ 'regions' ] = [ ]
52
- for ( let regionNum = 0 ; regionNum < regions . length ; regionNum ++ ) {
53
- imageData [ 'regions' ] . push ( splitRegionData ( regions [ regionNum ] ) )
54
- }
55
- saveData ( imageData ) . then ( response => {
56
- showSnackbar ( response . message , 'success' ) ;
57
- } )
58
- . catch ( error => {
59
- showSnackbar ( error . message , 'error' ) ;
60
- } ) ;
61
- }
62
64
63
65
const [ loading , setLoading ] = useState ( true ) ; // Add loading state
64
66
const onSelectJumpHandle = ( selectedImageName ) => {
@@ -144,7 +146,7 @@ export default () => {
144
146
enabledRegionProps = { [ "class" , "comment" ] }
145
147
userReducer = { userReducer }
146
148
onExit = { ( output ) => {
147
- preprocessDataBeforeSend ( output )
149
+ console . log ( "Exiting!" )
148
150
} }
149
151
settings = { settings }
150
152
onSelectJump = { onSelectJumpHandle }
0 commit comments