@@ -152,6 +152,7 @@ const MapProject = () => {
152152 const [ matchAPIToken , setMatchAPIToken ] = React . useState ( '' )
153153 const [ semanticBatchSize , setSemanticBatchSize ] = React . useState ( SEMANTIC_BATCH_SIZE )
154154 const [ candidatesScore , setCandidatesScore ] = React . useState ( { recommended : 100 , available : 70 } )
155+ const [ filters , setFilters ] = React . useState ( { } )
155156
156157 const abortRef = React . useRef ( false ) ;
157158
@@ -183,6 +184,7 @@ const MapProject = () => {
183184 const [ repo , setRepo ] = React . useState ( false )
184185 const [ repoVersion , setRepoVersion ] = React . useState ( false )
185186 const [ mappedSources , setMappedSources ] = React . useState ( [ ] )
187+ const [ locales , setLocales ] = React . useState ( [ ] )
186188 const [ versions , setVersions ] = React . useState ( [ ] )
187189 const [ conceptCache , setConceptCache ] = React . useState ( { } )
188190 const [ allMapTypes , setAllMapTypes ] = React . useState ( [ ] )
@@ -230,6 +232,11 @@ const MapProject = () => {
230232 setPermissionDenied ( false )
231233 } , [ params . projectId ] )
232234
235+ React . useEffect ( ( ) => {
236+ const isDefaultApplied = isRepoDefaultFilterApplied ( repoVersion )
237+ setIncludeDefaultFilter ( Boolean ( isDefaultApplied ) )
238+ } , [ repoVersion , project ] )
239+
233240
234241 const fetchAndSetProject = ( ) => {
235242 setLoadingProject ( true )
@@ -241,6 +248,7 @@ const MapProject = () => {
241248 setLoadingProject ( false )
242249 return
243250 }
251+ setFilters ( response . data ?. filters || { } )
244252 if ( response . data . url ) {
245253 APIService . new ( ) . overrideURL ( response . data . url ) . appendToUrl ( 'logs/' ) . get ( ) . then ( response => setLogs ( response . data . logs || [ ] ) )
246254 }
@@ -297,6 +305,11 @@ const MapProject = () => {
297305 } )
298306 }
299307
308+ const isRepoDefaultFilterApplied = version => {
309+ const defaultFilter = version ?. meta ?. display ?. default_filter || { } ;
310+ return ! isEmpty ( defaultFilter ) && Object . keys ( defaultFilter ) . every ( key => has ( ( project . filters || { } ) , key ) ) ;
311+ }
312+
300313 const fetchMapTypes = ( ) => APIService . orgs ( 'OCL' ) . sources ( 'MapTypes' ) . appendToUrl ( 'concepts/lookup/' ) . get ( ) . then ( response => setAllMapTypes ( response . data ?. map ( d => d . id ) ) )
301314
302315 const alertUser = ( e ) => {
@@ -582,6 +595,7 @@ const MapProject = () => {
582595 formData . append ( 'match_api_url' , '' )
583596 formData . append ( 'match_api_token' , '' )
584597 }
598+ formData . append ( 'filters' , JSON . stringify ( getFilters ( ) ) )
585599 let service = APIService . new ( ) . overrideURL ( owner ) . appendToUrl ( 'map-projects/' )
586600 if ( project ?. id )
587601 service = service . appendToUrl ( project . id + '/' ) . put ( formData , null , { "Content-Type" : "multipart/form-data" } )
@@ -631,6 +645,12 @@ const MapProject = () => {
631645 recurse ( 0 , 1 , 0 , [ ] )
632646 }
633647
648+ const fetchLocaleDistribution = url => {
649+ if ( ! url )
650+ return
651+ APIService . new ( ) . overrideURL ( url ) . appendToUrl ( 'summary/' ) . get ( null , null , { verbose : true , distribution : 'name_locale' } ) . then ( response => setLocales ( map ( response ?. data ?. distribution ?. name_locale , 'locale' ) ) )
652+ }
653+
634654 const _fetchMappedSources = (
635655 url , limit , offset , page , callback
636656 ) => {
@@ -640,6 +660,7 @@ const MapProject = () => {
640660 const onRepoVersionChange = version => {
641661 setRepoVersion ( version )
642662 if ( version ?. version_url ) {
663+ fetchLocaleDistribution ( version . version_url )
643664 fetchMappedSources ( version . version_url )
644665 updateAlgosByRepoVersion ( version )
645666 }
@@ -662,6 +683,12 @@ const MapProject = () => {
662683 setAlgoMenuAnchorEl ( null )
663684 }
664685
686+ const getFilters = ( ) => {
687+ let defaultFilters = ( repoVersion ?. meta ?. display ?. default_filter || { } )
688+ let allFilters = { ...filters , ...defaultFilters }
689+ return includeDefaultFilter ? allFilters : omit ( allFilters , Object . keys ( defaultFilters ) )
690+ }
691+
665692 const getPayloadForMatching = ( rows , _repo ) => {
666693 return {
667694 rows : map ( rows , row => prepareRow ( row ) ) ,
@@ -673,7 +700,7 @@ const MapProject = () => {
673700 'source' : _repo . short_code || _repo . id
674701 } ,
675702 map_config : getMapConfigs ( ) ,
676- filter : includeDefaultFilter ? repoVersion ?. meta ?. display ?. default_filter || { } : { }
703+ filter : getFilters ( )
677704 }
678705 }
679706
@@ -1060,6 +1087,10 @@ const MapProject = () => {
10601087
10611088 if ( repo ?. id ) {
10621089 fetchOtherCandidates ( csvRow )
1090+ const _filters = getFilters ( )
1091+ if ( ! appliedFacets [ csvRow . __index ] && ! isEmpty ( _filters ) && _filters ) {
1092+ setAppliedFacets ( { ...appliedFacets , [ csvRow . __index ] : getAppliedFacetFromQueryParam ( _filters ) } )
1093+ }
10631094 }
10641095
10651096 const el = document . querySelector ( `div[data-id="${ csvRow . __index } "]` )
@@ -1149,7 +1180,7 @@ const MapProject = () => {
11491180 fetchOtherCandidates ( )
11501181 }
11511182 if ( newValue === 'search' && isEmpty ( facets [ rowIndex ] ) )
1152- getFacets ( )
1183+ getFacets ( true )
11531184 }
11541185
11551186 const onDecisionChange = ( event , newValue ) => {
@@ -1282,7 +1313,6 @@ const MapProject = () => {
12821313 q : searchStr ,
12831314 page : page || 1 ,
12841315 includeRetired : includeRetired === undefined ? retired : includeRetired ,
1285- conceptFilterDefault : includeDefaultFilter ,
12861316 ...getFacetQueryParam ( appliedFilters || appliedFacets [ rowIndex ] ) ,
12871317 } ) . then ( response => {
12881318 let items = response . data
@@ -1300,13 +1330,13 @@ const MapProject = () => {
13001330 } ) ;
13011331 }
13021332
1303- const getFacets = _row => {
1333+ const getFacets = firstLoad => {
13041334 APIService . new ( ) . overrideURL ( repoVersion . version_url ) . appendToUrl ( 'concepts/' ) . get ( null , null , {
1305- q : searchStr ,
1335+ q : firstLoad ? '' : searchStr ,
13061336 includeRetired : retired ,
13071337 facetsOnly : true
13081338 } ) . then ( response => {
1309- setFacets ( { ...facets , [ _row ?. __index === undefined ? row . __index : _row . __index ] : response ?. data ?. facets ?. fields || { } } )
1339+ setFacets ( { ...facets , [ row . __index ] : response ?. data ?. facets ?. fields || { } } )
13101340 } )
13111341 }
13121342
@@ -1324,6 +1354,15 @@ const MapProject = () => {
13241354 return queryParam
13251355 }
13261356
1357+ const getAppliedFacetFromQueryParam = filters => {
1358+ const applied = { }
1359+ forEach ( filters , ( value , field ) => {
1360+ applied [ field ] = { }
1361+ forEach ( value . split ( ',' ) , val => applied [ field ] [ val ] = true )
1362+ } )
1363+ return applied
1364+ }
1365+
13271366
13281367 const isSplitView = Boolean ( rowIndex !== undefined ) || ( configure && file ?. name )
13291368 const rows = getRows ( )
@@ -1458,6 +1497,9 @@ const MapProject = () => {
14581497 onScoreChange = { setCandidatesScore }
14591498 includeDefaultFilter = { includeDefaultFilter }
14601499 setIncludeDefaultFilter = { setIncludeDefaultFilter }
1500+ filters = { filters }
1501+ setFilters = { setFilters }
1502+ locales = { locales }
14611503 />
14621504 </ div >
14631505 }
@@ -1828,6 +1870,9 @@ const MapProject = () => {
18281870 onScoreChange = { setCandidatesScore }
18291871 includeDefaultFilter = { includeDefaultFilter }
18301872 setIncludeDefaultFilter = { setIncludeDefaultFilter }
1873+ filters = { filters }
1874+ setFilters = { setFilters }
1875+ locales = { locales }
18311876 />
18321877 </ div > :
18331878 (
@@ -1953,6 +1998,7 @@ const MapProject = () => {
19531998 setSearchStr = { setSearchStr }
19541999 facets = { facets [ rowIndex ] }
19552000 appliedFacets = { appliedFacets [ rowIndex ] }
2001+ filters = { getFilters ( ) }
19562002 isLoading = { isLoadingInDecisionView }
19572003 setAppliedFacets = { ( filters ) => {
19582004 setAppliedFacets ( { ...appliedFacets , [ rowIndex ] : filters } )
0 commit comments