diff --git a/src/app/topic/indicators.component.html b/src/app/topic/indicators.component.html
index f1951a9..922fe20 100644
--- a/src/app/topic/indicators.component.html
+++ b/src/app/topic/indicators.component.html
@@ -1,4 +1,14 @@
+
+
+
+
+
+
+
+
Number Indicators
diff --git a/src/app/topic/indicators.component.ts b/src/app/topic/indicators.component.ts
index f12acee..50771c5 100644
--- a/src/app/topic/indicators.component.ts
+++ b/src/app/topic/indicators.component.ts
@@ -43,7 +43,10 @@ declare var UIkit;
styleUrls: ['indicators.component.css']
})
export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit {
-
+ filesToUpload: Array;
+ errorMessage = "";
+ enableUpload: boolean = true;
+
@Input()
public properties: EnvProperties = null;
@Input()
@@ -110,6 +113,7 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
private router: Router,
private cdr: ChangeDetectorRef,
private sanitizer: DomSanitizer) {
+ this.filesToUpload = [];
}
ngOnInit(): void {
@@ -1187,4 +1191,135 @@ export class IndicatorsComponent implements OnInit, OnDestroy, OnChanges, AfterV
this.showCheckForSchemaEnhancements = this.isAdministrator && url && !this.properties.useOldStatisticsSchema && this.indicatorUtils.checkForSchemaEnhancements(url);
}
+ public export_indicators() {
+ console.debug("Export indicators");
+
+ let indicators = [];
+ let index: number = 0;
+
+ this.displayNumbers.forEach(section => {
+ section.indicators.forEach(indicator => {
+ indicator.indicatorPaths.forEach(indicatorPath => {
+ console.debug("export number: ", this.statisticsService.getNumberUrl(indicatorPath.source, this.indicatorUtils.getFullUrl(this.stakeholder, indicatorPath)));
+ indicators[index] = {
+ "type": indicator.type, "name": indicator.name,
+ "description": indicator.description, "additionalDescription": indicator.additionalDescription,
+ "visibility": indicator.visibility, "width": indicator.width, "height": indicator.height,
+ "url": this.statisticsService.getNumberUrl(indicatorPath.source, this.indicatorUtils.getFullUrl(this.stakeholder, indicatorPath))};
+ index++;
+ });
+ });
+ });
+
+ this.displayCharts.forEach(section => {
+ section.indicators.forEach(indicator => {
+ indicator.indicatorPaths.forEach(indicatorPath => {
+ console.debug("export chart: "+this.getUrlByStakeHolder(indicatorPath));
+ indicators[index] = {
+ "type": indicator.type, "name": indicator.name,
+ "description": indicator.description, "additionalDescription": indicator.additionalDescription,
+ "visibility": indicator.visibility, "width": indicator.width, "height": indicator.height,
+ "url": this.getUrlByStakeHolder(indicatorPath)};
+ index++;
+ });
+ });
+ });
+
+ let topic = this.stakeholder ? this.stakeholder.topics[this.topicIndex] : null;
+ let category = topic ? topic.categories[this.categoryIndex] : null;
+ let subCategory = category ? category.subCategories[this.subcategoryIndex] : null;
+
+ var jsonFileUrl = window.URL.createObjectURL(new Blob([JSON.stringify(indicators)], {type: 'application/json'}));
+ var a = window.document.createElement('a');
+ window.document.body.appendChild(a);
+ a.setAttribute('style', 'display: none');
+ a.href = jsonFileUrl;
+ a.download = this.stakeholder.alias + "_"+topic.alias + "_" + category.alias + "_" + subCategory.alias + ".json";
+ a.click();
+ window.URL.revokeObjectURL(jsonFileUrl);
+ a.remove(); // remove the element
+ }
+
+ fileChangeEvent(fileInput: any) {
+ this.filesToUpload = >fileInput.target.files;
+ this.upload();
+ }
+
+ upload() {
+ this.enableUpload = false;
+ // this.errorMessage = "";
+ console.debug(this.filesToUpload);
+ if (this.filesToUpload.length == 0) {
+ console.error("There is no selected file to upload.");
+ // this.errorMessage = "There is no selected file to upload.";
+ return;
+ } else {
+ if (this.filesToUpload[0].name.indexOf(".json") == -1 || (this.filesToUpload[0].type != "application/json")) {
+ // this.errorMessage = "No valid file type. The required type is JSON";
+ console.error("No valid file type. The required type is JSON");
+ return;
+ }
+ }
+ // this.loading.open();
+
+ this.makeFileRequest(this.properties.utilsService + '/upload?type=json', [], this.filesToUpload).then(async (result: string) => {
+ // const rows = (result as any).split('\n'); // I have used space, you can use any thing.
+ let invalid_rows = 0;
+
+ // let chartSection = null;//this.createSection(-1, "chart");
+ // let numberSection = null;//this.createSection(-1, "number");
+ // await this.newSectionReady;
+
+ let json_result = JSON.parse(result);
+ for (let i = 0; i < (json_result.length); i++) {
+ if (json_result[i] && json_result[i] != null && json_result[i] != "") {
+ this.processIndicatorEntry(json_result[i]);
+ } else {
+ invalid_rows++;
+ }
+ }
+ this.endOfFetching();
+ }, (error) => {
+ this.enableUpload = true;
+ console.error("An error occurred");
+ });
+ }
+
+ makeFileRequest(url: string, params: Array, files: Array) {
+ return new Promise((resolve, reject) => {
+ const formData: any = new FormData();
+ const xhr = new XMLHttpRequest();
+ for (let i = 0; i < files.length; i++) {
+ formData.append("uploads[]", files[i], files[i].name);
+ }
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ resolve(xhr.response);
+ } else {
+ reject(xhr.response);
+ }
+ }
+ };
+ xhr.open("POST", url, true);
+ xhr.send(formData);
+ });
+ }
+
+ endOfFetching() {
+ // this.showReport = true;
+ this.enableUpload = true;
+ }
+
+ processIndicatorEntry(indicator) {
+ if(indicator.type == "chart") {
+ console.debug("TODO Create chart for url: "+indicator.url);
+ //this.editChartIndicatorOpen(chartSection, null, false, indicator.url);
+ } else if(indicator.type == "number") {
+ console.debug("TODO Create number for url: "+indicator.url);
+ //this.editNumberIndicatorOpen(numberSection);
+ }
+ console.debug(indicator);
+ // this.saveIndicator(false);
+ }
}