forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			102 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * The statistics-gui shows statistics from previous MapComplete-edits
 | 
						|
 */
 | 
						|
import {UIEventSource} from "../Logic/UIEventSource";
 | 
						|
import {VariableUiElement} from "./Base/VariableUIElement";
 | 
						|
import ChartJs from "./Base/ChartJs";
 | 
						|
import Loading from "./Base/Loading";
 | 
						|
import {Utils} from "../Utils";
 | 
						|
import Combine from "./Base/Combine";
 | 
						|
 | 
						|
export default class StatisticsGUI {
 | 
						|
    
 | 
						|
    public static setup(): void{
 | 
						|
 | 
						|
 | 
						|
        new VariableUiElement(index.map(paths => {
 | 
						|
            if (paths === undefined) {
 | 
						|
                return new Loading("Loading overview...")
 | 
						|
            }
 | 
						|
            const downloaded = new UIEventSource<{ features: ChangeSetData[] }[]>([])
 | 
						|
 | 
						|
            for (const filepath of paths) {
 | 
						|
                Utils.downloadJson(homeUrl + filepath).then(data => {
 | 
						|
                    downloaded.data.push(data)
 | 
						|
                    downloaded.ping()
 | 
						|
                })
 | 
						|
            }
 | 
						|
 | 
						|
            return new VariableUiElement(downloaded.map(downloaded => {
 | 
						|
                const themeBreakdown = new Map<string, number>()
 | 
						|
                for (const feats of downloaded) {
 | 
						|
                    console.log("Feats:", feats)
 | 
						|
                    for (const feat of feats.features) {
 | 
						|
                        const key = feat.properties.metadata.theme
 | 
						|
                        const count = themeBreakdown.get(key) ?? 0
 | 
						|
                        themeBreakdown.set(key, count + 1)
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                const keys = Array.from(themeBreakdown.keys())
 | 
						|
                const values = keys.map( k => themeBreakdown.get(k))
 | 
						|
 | 
						|
                console.log(keys, values)
 | 
						|
                return new Combine([
 | 
						|
                    "Got " + downloaded.length + " files out of " + paths.length,
 | 
						|
                    new ChartJs({
 | 
						|
                        type: "pie",
 | 
						|
                        data: {
 | 
						|
                            datasets: [{data: values}],
 | 
						|
                            labels: keys
 | 
						|
                        }
 | 
						|
                    }).SetClass("w-1/3 h-full")
 | 
						|
                ]).SetClass("block w-full h-full")
 | 
						|
            })).SetClass("block w-full h-full")
 | 
						|
        })).SetClass("block w-full h-full").AttachTo("maindiv")
 | 
						|
 | 
						|
    }
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
const homeUrl = "https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/Docs/Tools/stats/"
 | 
						|
const stats_files = "file-overview.json"
 | 
						|
const index = UIEventSource.FromPromise(Utils.downloadJson(homeUrl + stats_files))
 | 
						|
 | 
						|
 | 
						|
interface ChangeSetData {
 | 
						|
    "id": number,
 | 
						|
    "type": "Feature",
 | 
						|
    "geometry": {
 | 
						|
        "type": "Polygon",
 | 
						|
        "coordinates": [number, number][][]
 | 
						|
    },
 | 
						|
    "properties": {
 | 
						|
        "check_user": null,
 | 
						|
        "reasons": [],
 | 
						|
        "tags": [],
 | 
						|
        "features": [],
 | 
						|
        "user": string,
 | 
						|
        "uid": string,
 | 
						|
        "editor": string,
 | 
						|
        "comment": string,
 | 
						|
        "comments_count": number,
 | 
						|
        "source": string,
 | 
						|
        "imagery_used": string,
 | 
						|
        "date": string,
 | 
						|
        "reviewed_features": [],
 | 
						|
        "create": number,
 | 
						|
        "modify": number,
 | 
						|
        "delete": number,
 | 
						|
        "area": number,
 | 
						|
        "is_suspect": boolean,
 | 
						|
        "harmful": any,
 | 
						|
        "checked": boolean,
 | 
						|
        "check_date": any,
 | 
						|
        "metadata": {
 | 
						|
            "host": string,
 | 
						|
            "theme": string,
 | 
						|
            "imagery": string,
 | 
						|
            "language": string
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |