@@ -91,10 +91,20 @@ import ReviewNote from './ReviewNote'
9191import Propose from './Propose'
9292import Candidates from './Candidates'
9393import SearchCandidates from './SearchCandidates'
94+ import Discuss from './Discuss'
9495
9596import './MapProject.scss'
9697import '../common/ResizablePanel.scss'
9798
99+
100+ // const LOG = {
101+ // action: '',
102+ // user: '',
103+ // description: '',
104+ // extras: {},
105+ // created_at: ''
106+ // }
107+
98108const MapProject = ( ) => {
99109 const { toggles, setAlert : baseSetAlert } = React . useContext ( OperationsContext ) ;
100110 const user = getCurrentUser ( )
@@ -149,6 +159,7 @@ const MapProject = () => {
149159 const [ alert , setAlert ] = React . useState ( false )
150160 const [ columnVisibilityModel , setColumnVisibilityModel ] = React . useState ( { } )
151161 const [ columnWidth , setColumnWidth ] = React . useState ( { } )
162+ const [ logs , setLogs ] = React . useState ( { } )
152163
153164 // repo state
154165 const [ repo , setRepo ] = React . useState ( false )
@@ -187,6 +198,9 @@ const MapProject = () => {
187198 const fetchAndSetProject = ( ) => {
188199 let url = [ '' , params . ownerType , params . owner , 'map-projects' , params . projectId , '' ] . join ( '/' )
189200 APIService . new ( ) . overrideURL ( url ) . get ( ) . then ( response => {
201+ if ( response . data . url ) {
202+ APIService . new ( ) . overrideURL ( response . data . url ) . appendToUrl ( 'logs/' ) . get ( ) . then ( response => setLogs ( response . data . logs || [ ] ) )
203+ }
190204 if ( response . data ?. file_url ) {
191205 fetch ( response . data . file_url ) . then ( res => res . text ( ) ) . then ( csvText => {
192206 const workbook = XLSX . read ( csvText , { type : "string" } ) ;
@@ -491,10 +505,16 @@ const MapProject = () => {
491505 if ( response . data . url )
492506 history . push ( response . data . url )
493507 baseSetAlert ( { severity : 'success' , message : 'Succesffully Saved.' , duration : 2000 } )
508+ APIService . new ( ) . overrideURL ( response . data . url ) . appendToUrl ( 'logs/' ) . post ( { logs : logs } ) . then ( ( ) => { } )
494509 }
495510 } )
496511 }
497512
513+ const log = ( data , index ) => {
514+ let idx = index === undefined ? rowIndex : index
515+ setLogs ( prev => ( { ...prev , [ idx ] : [ { ...data , created_at : moment ( ) . toDate ( ) , user : user . username || user . id } , ...( prev [ idx ] || [ ] ) ] } ) )
516+ }
517+
498518 const fetchRepo = ( url , _repo ) => APIService . new ( ) . overrideURL ( url ) . get ( ) . then ( response => setRepo ( response . data ?. id ? response . data : _repo ) )
499519
500520 const fetchMappedSources = url => APIService . new ( ) . overrideURL ( url ) . appendToUrl ( 'mapped-sources/?excludeSelf=false&brief=true' ) . get ( ) . then ( response => setMappedSources ( response ?. data || [ ] ) )
@@ -581,13 +601,15 @@ const MapProject = () => {
581601 setRowStatuses ( prev => {
582602 forEach ( data , concept => {
583603 if ( get ( concept , 'results.0.search_meta.match_type' ) === 'very_high' ) {
604+ let _concept = { ...concept . results [ 0 ] , repo : { ..._repo , version : repoVersion ?. id || _repo . version , version_url : repoVersion ?. version_url || _repo . version_url } }
584605 setMapSelected ( _prev => {
585- _prev [ concept . row . __index ] = { ... concept . results [ 0 ] , repo : { ... _repo , version : repoVersion ?. id || _repo . version , version_url : repoVersion ?. version_url || _repo . version_url } }
606+ _prev [ concept . row . __index ] = _concept
586607 return _prev
587608 } )
588609 prev . readyForReview = uniq ( [ ...prev . readyForReview , concept . row . __index ] )
589610 setDecisions ( prev => ( { ...prev , [ concept . row . __index ] : 'map' } ) )
590611 setMapTypes ( prev => ( { ...prev , [ concept . row . __index ] : 'SAME-AS' } ) )
612+ log ( { action : 'auto-matched' , extras : { repoVersion : repoVersion ?. version_url || _repo . version_url , name : getConceptLabel ( _concept ) , map_type : 'SAME-AS' } } , concept . row . __index )
591613 } else
592614 prev . unmapped = uniq ( [ ...prev . unmapped , concept . row . __index ] )
593615 } )
@@ -610,7 +632,6 @@ const MapProject = () => {
610632 prev . readyForReview = [ ]
611633 return prev
612634 } )
613-
614635 await processWithConcurrency ( repo ) ;
615636 setEndMatchingAt ( moment ( ) )
616637 setLoadingMatches ( false )
@@ -851,7 +872,7 @@ const MapProject = () => {
851872 const onMap = ( event , concept , unmap = false , mapType = 'SAME-AS' , closeConcept = false ) => {
852873 event . preventDefault ( )
853874 event . stopPropagation ( )
854- _onMap ( concept , unmap )
875+ _onMap ( concept , unmap , mapType )
855876 setRowStatuses ( prev => {
856877 prev . reviewed = without ( prev . reviewed , rowIndex )
857878 if ( unmap ) {
@@ -871,9 +892,12 @@ const MapProject = () => {
871892 return false
872893 }
873894
874- const _onMap = ( concept , unmap = false ) => {
895+ const _onMap = ( concept , unmap = false , mapType = 'SAME-AS' ) => {
875896 setMapSelected ( prev => ( { ...prev , [ rowIndex ] : unmap ? null : { ...concept , repo : { ...repo , version : repoVersion ?. id || repo . version , version_url : repoVersion ?. version_url || repo . version_url } } } ) )
876897 setDecisions ( prev => ( { ...prev , [ rowIndex ] : unmap ? null : 'map' } ) )
898+ if ( concept ?. url )
899+ log ( { action : unmap ? 'unmapped' : 'mapped' , extras : { object_url : concept ?. url , map_type : mapType , name : getConceptLabel ( concept ) } } )
900+
877901 }
878902
879903 const onReviewDone = ( next = false ) => {
@@ -884,6 +908,7 @@ const MapProject = () => {
884908 const nextRow = data [ selectedRowStatus === 'all' ? rowIndex + 1 : find ( rowStatuses [ selectedRowStatus ] , idx => idx > rowIndex ) ]
885909 if ( nextRow !== undefined )
886910 setTimeout ( ( ) => onCSVRowSelect ( nextRow ) , 300 )
911+ log ( { 'action' : 'approved' } )
887912 }
888913 }
889914
@@ -921,14 +946,21 @@ const MapProject = () => {
921946 }
922947
923948 const onDecisionChange = ( event , newValue ) => {
949+ let logged = false
924950 if ( newValue === 'rejected' ) {
925951 let selected = mapSelected [ rowIndex ]
926952 selected = getConcept ( selected ) || selected
927953 if ( selected ?. id ) {
928- let comment = `Rejected ${ getConceptLabel ( selected ) } `
954+ let conceptLabel = getConceptLabel ( selected )
955+ let comment = `Rejected ${ conceptLabel } `
929956 if ( notes [ rowIndex ] )
930957 comment = notes [ rowIndex ] + '\n' + comment
931958 setNotes ( { ...notes , [ rowIndex ] : comment } )
959+ log ( { action : newValue , description : comment , extras : { object_url : selected ?. url , name : conceptLabel } } )
960+ logged = true
961+ } else {
962+ log ( { action : newValue } )
963+ logged = true
932964 }
933965 }
934966 if ( newValue !== 'map' )
@@ -937,8 +969,11 @@ const MapProject = () => {
937969 setProposed ( prev => ( { ...prev , [ rowIndex ] : undefined } ) )
938970
939971 setDecisions ( prev => ( { ...prev , [ rowIndex ] : newValue || undefined } ) )
940- if ( newValue === 'propose' )
972+ if ( newValue === 'propose' ) {
941973 setAlert ( { message : 'Proposed successfully.' , duration : 2 , severity : 'success' } )
974+ log ( { action : 'proposed' } )
975+ logged = true
976+ }
942977
943978 setRowStatuses ( prev => {
944979 prev . reviewed = without ( prev . reviewed , rowIndex )
@@ -952,6 +987,8 @@ const MapProject = () => {
952987 updateMatchTypeCounts ( null , prev )
953988 return prev
954989 } )
990+ if ( newValue !== 'map' && ! logged )
991+ log ( { action : newValue || 'decision_changed' , description : 'Desicion Changed to None' , extras : newValue ? { } : { decision : 'None' } } )
955992 }
956993
957994 const fetchOtherCandidates = ( _row , offset = 0 ) => {
@@ -1545,6 +1582,10 @@ const MapProject = () => {
15451582 onSearch = { searchCandidates }
15461583 />
15471584 }
1585+ {
1586+ decisionTab === 'discuss' && isSplitView &&
1587+ < Discuss logs = { logs [ rowIndex ] } onAdd = { comment => comment ? log ( { action : 'commented' , description : comment } ) : null } />
1588+ }
15481589 </ div >
15491590 < SearchHighlightsDialog
15501591 open = { Boolean ( showHighlights ) }
0 commit comments