2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  Combine  from  "../Base/Combine" ;  
						 
					
						
							
								
									
										
										
										
											2022-06-05 02:24:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { Store ,  UIEventSource }  from  "../../Logic/UIEventSource" ;  
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  UserRelatedState  from  "../../Logic/State/UserRelatedState" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  Translations  from  "../i18n/Translations" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { Utils }  from  "../../Utils" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { FlowStep }  from  "./FlowStep" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  Title  from  "../Base/Title" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  BaseUIElement  from  "../BaseUIElement" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  Histogram  from  "../BigComponents/Histogram" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  Toggleable  from  "../Base/Toggleable" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  List  from  "../Base/List" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  CheckBoxes  from  "../Input/Checkboxes" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
									
										
										
										
											2022-04-14 01:32:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Shows  the  attributes  by  value ,  requests  to  check  them  of 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-14 01:32:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								export  class  PreviewAttributesPanel  extends  Combine  implements  FlowStep < {  features :  {  properties : any ,  geometry :  {  coordinates :  [ number ,  number ]  }  } [ ]  } >  {  
						 
					
						
							
								
									
										
										
										
											2022-06-05 02:24:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  readonly  IsValid : Store < boolean > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  readonly  Value : Store < {  features :  {  properties : any ,  geometry :  {  coordinates :  [ number ,  number ]  }  } [ ]  } > 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    constructor ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        state : UserRelatedState , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        geojson :  {  features :  {  properties : any ,  geometry :  {  coordinates :  [ number ,  number ]  }  } [ ]  } )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-14 01:32:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  t  =  Translations . t . importHelper . previewAttributes ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-09 19:11:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        const  propertyKeys  =  new  Set < string > ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( const  f  of  geojson . features )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Object . keys ( f . properties ) . forEach ( key  = >  propertyKeys . add ( key ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  attributeOverview : BaseUIElement [ ]  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  n  =  geojson . features . length ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( const  key  of  Array . from ( propertyKeys ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            const  values  =  Utils . NoNull ( geojson . features . map ( f  = >  f . properties [ key ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            const  allSame  =  ! values . some ( v  = >  v  !==  values [ 0 ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            let  countSummary : BaseUIElement 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( values . length  ===  n )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                countSummary  =  t . allAttributesSame 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                countSummary  =  t . someHaveSame . Subs ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    count : values.length , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    percentage : Math.floor ( 100  *  values . length  /  n ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( allSame )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                attributeOverview . push ( new  Title ( key  +  "="  +  values [ 0 ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                attributeOverview . push ( countSummary ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            const  uniqueCount  =  new  Set ( values ) . size 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 01:41:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( uniqueCount  !==  values . length  &&  uniqueCount  <  15 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                attributeOverview . push ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // There are some overlapping values: histogram time!
 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                let  hist : BaseUIElement  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    new  Combine ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        countSummary , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        new  Histogram ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            new  UIEventSource < string [ ] > ( values ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            "Value" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            "Occurence" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                sortMode :  "count-rev" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ] ) . SetClass ( "flex flex-col" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                const  title  =  new  Title ( key  +  "=*" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( uniqueCount  >  15 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    hist  =  new  Toggleable ( title , 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                        hist . SetClass ( "block" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ) . Collapse ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                    attributeOverview . push ( title ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                attributeOverview . push ( hist ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 01:41:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // All values are different or too much unique values, we add a boring (but collapsable) list
 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            attributeOverview . push ( new  Toggleable ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                new  Title ( key  +  "=*" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                new  Combine ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    countSummary , 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                    new  List ( values ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        const  confirm  =  new  CheckBoxes ( [ t . inspectLooksCorrect ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        super ( [ 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            new  Title ( t . inspectDataTitle . Subs ( { count : geojson.features.length } ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-25 00:48:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            "Extra remark: An attribute with 'source' or 'src' will be added as 'source' into the map pin; an attribute 'note' will be added into the map pin as well. These values won't be imported" , 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            . . . attributeOverview , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            confirm 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        this . Value  =  new  UIEventSource < {  features :  {  properties : any ;  geometry :  {  coordinates :  [ number ,  number ]  }  } [ ]  } > ( geojson ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        this . IsValid  =  confirm . GetValue ( ) . map ( selected  = >  selected . length  ==  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-24 00:19:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-22 02:56:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}