forked from MapComplete/MapComplete
Add statistics download button
This commit is contained in:
parent
1bf3be987b
commit
c36bce8100
1 changed files with 44 additions and 1 deletions
|
@ -44,6 +44,47 @@ interface NoteState {
|
||||||
status: "imported" | "already_mapped" | "invalid" | "closed" | "not_found" | "open" | "has_comments"
|
status: "imported" | "already_mapped" | "invalid" | "closed" | "not_found" | "open" | "has_comments"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DownloadStatisticsButton extends SubtleButton {
|
||||||
|
constructor(states: NoteState[][]) {
|
||||||
|
super(Svg.statistics_svg(), "Download statistics");
|
||||||
|
this.onClick(() => {
|
||||||
|
|
||||||
|
const st: NoteState[] = [].concat(...states)
|
||||||
|
|
||||||
|
const fields = [
|
||||||
|
"id",
|
||||||
|
"status",
|
||||||
|
"theme",
|
||||||
|
"date_created",
|
||||||
|
"date_closed",
|
||||||
|
"days_open",
|
||||||
|
"intro",
|
||||||
|
"...comments"
|
||||||
|
]
|
||||||
|
const values : string[][] = st.map(note => {
|
||||||
|
|
||||||
|
|
||||||
|
return [note.props.id+"",
|
||||||
|
note.status,
|
||||||
|
note.theme,
|
||||||
|
note.props.date_created?.substr(0, note.props.date_created.length - 3),
|
||||||
|
note.props.closed_at?.substr(0, note.props.closed_at.length - 3) ?? "",
|
||||||
|
JSON.stringify( note.intro),
|
||||||
|
...note.props.comments.map(c => JSON.stringify(c.user)+": "+JSON.stringify(c.text))
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
Utils.offerContentsAsDownloadableFile(
|
||||||
|
[fields, ...values].map(c => c.join(", ")).join("\n"),
|
||||||
|
"mapcomplete_import_notes_overview.csv",
|
||||||
|
{
|
||||||
|
mimetype: "text/csv"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class MassAction extends Combine {
|
class MassAction extends Combine {
|
||||||
constructor(state: UserRelatedState, props: NoteProperties[]) {
|
constructor(state: UserRelatedState, props: NoteProperties[]) {
|
||||||
const textField = ValidatedTextField.ForType("text").ConstructInputElement()
|
const textField = ValidatedTextField.ForType("text").ConstructInputElement()
|
||||||
|
@ -303,7 +344,9 @@ class ImportInspector extends VariableUiElement {
|
||||||
contents.push(accordeon)
|
contents.push(accordeon)
|
||||||
const content = new Combine(contents)
|
const content = new Combine(contents)
|
||||||
return new LeftIndex(
|
return new LeftIndex(
|
||||||
[new TableOfContents(content, {noTopLevel: true, maxDepth: 1}).SetClass("subtle")],
|
[new TableOfContents(content, {noTopLevel: true, maxDepth: 1}).SetClass("subtle"),
|
||||||
|
new DownloadStatisticsButton(perBatch)
|
||||||
|
],
|
||||||
content
|
content
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue