From 7a77b33cff97bbb5654133c38d5ae24e15fd58e0 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Sun, 31 Jul 2022 13:31:17 +0200 Subject: [PATCH] Small statistics prototype --- test.ts | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 5 deletions(-) diff --git a/test.ts b/test.ts index a2d2662a9..5db0859a6 100644 --- a/test.ts +++ b/test.ts @@ -1,9 +1,93 @@ +import {Utils} from "./Utils"; +import Loading from "./UI/Base/Loading"; +import {UIEventSource} from "./Logic/UIEventSource"; +import {VariableUiElement} from "./UI/Base/VariableUIElement"; +import ChartJs from "./UI/Base/ChartJs"; +import Combine from "./UI/Base/Combine"; -import * as onwheels from "./assets/generated/themes/onwheels.json" -import FeaturePipelineState from "./Logic/State/FeaturePipelineState"; -import LayoutConfig from "./Models/ThemeConfig/LayoutConfig"; +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)) -const layout = new LayoutConfig( onwheels, true) -new FeaturePipelineState(layout) \ No newline at end of file +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 + } + } +} + + +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() + 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") +