diff --git a/UI/BigComponents/TagRenderingChart.ts b/UI/BigComponents/TagRenderingChart.ts index d1eeee155..7fff77383 100644 --- a/UI/BigComponents/TagRenderingChart.ts +++ b/UI/BigComponents/TagRenderingChart.ts @@ -22,6 +22,7 @@ export class StackedRenderingChart extends ChartJs { groupToOtherCutoff: options?.groupToOtherCutoff }) if (labels === undefined || data === undefined) { + console.error("Could not extract data and labels for ", tr, " with features", features) throw ("No labels or data given...") } // labels: ["cyclofix", "buurtnatuur", ...]; data : [ ["cyclofix-changeset", "cyclofix-changeset", ...], ["buurtnatuur-cs", "buurtnatuur-cs"], ... ] @@ -38,8 +39,7 @@ export class StackedRenderingChart extends ChartJs { const datasets: { label: string /*themename*/, data: number[]/*counts per day*/, backgroundColor: string }[] = [] const allDays = StackedRenderingChart.getAllDays(features) - let trimmedDays = allDays.map(d => d.substr(0, d.indexOf("T"))) - + let trimmedDays = allDays.map(d => d.substr(0, 10)) if (options?.period === "month") { trimmedDays = trimmedDays.map(d => d.substr(0, 7)) } @@ -54,9 +54,9 @@ export class StackedRenderingChart extends ChartJs { const csDate = new Date(changeset.properties.date) Utils.SetMidnight(csDate) let str = csDate.toISOString(); + str = str.substr(0, 10) if (options?.period === "month") { - csDate.setUTCDate(1) - str = csDate.toISOString().substr(0, 7); + str = str.substr(0, 7); } if (perDay[str] === undefined) { perDay[str] = [changeset] diff --git a/UI/StatisticsGUI.ts b/UI/StatisticsGUI.ts index db0cd6e6a..2ddeaaf3b 100644 --- a/UI/StatisticsGUI.ts +++ b/UI/StatisticsGUI.ts @@ -12,6 +12,7 @@ import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; import MapState from "../Logic/State/MapState"; import BaseUIElement from "./BaseUIElement"; import Title from "./Base/Title"; +import {FixedUiElement} from "./Base/FixedUiElement"; class StatisticsForOverviewFile extends Combine{ constructor(homeUrl: string, paths: string[]) { @@ -55,10 +56,17 @@ class StatisticsForOverviewFile extends Combine{ }) } - if (downloaded.length === 0) { + if (overview._meta.length === 0) { return "No data matched the filter" } + const dateStrings = Utils.NoNull(overview._meta.map(cs => cs.properties.date)) + const dates : number[] = dateStrings.map(d => new Date(d).getTime()) + const mindate= Math.min(...dates) + const maxdate = Math.max(...dates) + + const diffInDays = (maxdate - mindate) / (1000 * 60 * 60 * 24); + console.log("Diff in days is ", diffInDays, "got", overview._meta.length) const trs =layer.tagRenderings .filter(tr => tr.mappings?.length > 0 || tr.freeform?.key !== undefined); const elements : BaseUIElement[] = [] @@ -68,16 +76,21 @@ class StatisticsForOverviewFile extends Combine{ total = new Set( overview._meta.map(f => f.properties[tr.freeform.key])).size } - + try{ + elements.push(new Combine([ new Title(tr.question ?? tr.id).SetClass("p-2") , total > 1 ? total + " unique value" : undefined, new StackedRenderingChart(tr, overview._meta, { - period: "month", + period: diffInDays <= 367 ? "day" : "month", groupToOtherCutoff: total > 50 ? 25 : (total > 10 ? 3 : 0) }).SetStyle("width: 100%; height: 600px") ]).SetClass("block border-2 border-subtle p-2 m-2 rounded-xl" )) + }catch(e){ + console.log("Could not generate a chart", e) + elements.push(new FixedUiElement("No relevant information for "+tr.question.txt)) + } } return new Combine(elements) diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 32d394fc2..b9e7d12e9 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -444,6 +444,40 @@ } ] }, + { + "id": "made_before", + "options": [ + { + "osmTags": "date<{search}", + "fields": [ + { + "name": "search", + "type": "date" + } + ], + "question": { + "en": "Made before {search}" + } + } + ] + }, + { + "id": "made_after", + "options": [ + { + "osmTags": "date>{search}", + "fields": [ + { + "name": "search", + "type": "date" + } + ], + "question": { + "en": "Made after {search}" + } + } + ] + }, { "id": "locale-filter", "options": [ diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json index 182b1f889..6b0c46043 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json @@ -166,6 +166,40 @@ } ] }, + { + "id": "made_before", + "options": [ + { + "osmTags": "date<{search}", + "fields": [ + { + "name": "search", + "type": "date" + } + ], + "question": { + "en": "Made before {search}" + } + } + ] + }, + { + "id": "made_after", + "options": [ + { + "osmTags": "date>{search}", + "fields": [ + { + "name": "search", + "type": "date" + } + ], + "question": { + "en": "Made after {search}" + } + } + ] + }, { "id": "locale-filter", "options": [