aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSonja Galovic <galovicsonja@gmail.com>2022-05-18 23:42:32 +0200
committerSonja Galovic <galovicsonja@gmail.com>2022-05-18 23:42:32 +0200
commit1c1efd8424242700e15af9b02582e1395916b7bc (patch)
tree73de802444542d0183a6c728f0805f9121a0ff84
parentef1e5b2a2cdd5680be8d9d1cea92c97c05da826d (diff)
parente719412e42581646a04cbd0ffa443be52d7740cf (diff)
Merge branch 'redesign' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into redesign
-rw-r--r--backend/api/api/appsettings.json8
-rw-r--r--frontend/src/app/_data/Dataset.ts2
-rw-r--r--frontend/src/app/_elements/_charts/pie-chart/pie-chart.component.ts43
-rw-r--r--frontend/src/app/_elements/column-table/column-table.component.css2
-rw-r--r--frontend/src/app/_elements/column-table/column-table.component.ts11
-rw-r--r--frontend/src/app/_elements/folder/folder.component.html10
-rw-r--r--frontend/src/app/_elements/folder/folder.component.ts15
-rw-r--r--frontend/src/app/_services/datasets.service.ts4
8 files changed, 71 insertions, 24 deletions
diff --git a/backend/api/api/appsettings.json b/backend/api/api/appsettings.json
index ec8f7dd8..44d63ac3 100644
--- a/backend/api/api/appsettings.json
+++ b/backend/api/api/appsettings.json
@@ -16,22 +16,22 @@
"UserStoreDatabaseSettings": {
/* LocalHost*/
- "ConnectionString": "mongodb://127.0.0.1:27017/",
+ /*"ConnectionString": "mongodb://127.0.0.1:27017/",
"DatabaseName": "si_project",
"CollectionName": "users",
"DatasetCollectionName": "Dataset",
"ModelCollectionName": "Model",
"PredictorCollectionName": "Predictor",
"FilesCollectionName": "Files",
- "ExperimentCollectionName": "Experiment"
+ "ExperimentCollectionName": "Experiment"*/
- /*"ConnectionString": "mongodb+srv://si_user:si_user@sidatabase.twtfm.mongodb.net/myFirstDatabase?retryWrites=true&w=majority",
+ "ConnectionString": "mongodb+srv://si_user:si_user@sidatabase.twtfm.mongodb.net/myFirstDatabase?retryWrites=true&w=majority",
"DatabaseName": "si_db",
"CollectionName": "users",
"DatasetCollectionName": "Dataset",
"ModelCollectionName": "Model",
"PredictorCollectionName": "Predictor",
"FilesCollectionName": "Files",
- "ExperimentCollectionName": "Experiment" */
+ "ExperimentCollectionName": "Experiment"
}
} \ No newline at end of file
diff --git a/frontend/src/app/_data/Dataset.ts b/frontend/src/app/_data/Dataset.ts
index 73b77bd0..c8d5771a 100644
--- a/frontend/src/app/_data/Dataset.ts
+++ b/frontend/src/app/_data/Dataset.ts
@@ -4,7 +4,7 @@ export default class Dataset extends FolderFile {
constructor(
name: string = 'Novi izvor podataka',
public description: string = '',
- public fileId?: number,
+ public fileId?: string,
public extension: string = '.csv',
public isPublic: boolean = false,
public accessibleByLink: boolean = false,
diff --git a/frontend/src/app/_elements/_charts/pie-chart/pie-chart.component.ts b/frontend/src/app/_elements/_charts/pie-chart/pie-chart.component.ts
index c2bd3262..cba5252a 100644
--- a/frontend/src/app/_elements/_charts/pie-chart/pie-chart.component.ts
+++ b/frontend/src/app/_elements/_charts/pie-chart/pie-chart.component.ts
@@ -14,16 +14,16 @@ export class PieChartComponent implements AfterViewInit {
@Input()uniqueValuesPercent?: number[] = [];
updatePieChart(uniqueValues: string[], uniqueValuesPercent: number[]){
- console.log(this.uniqueValues, this.uniqueValuesPercent);
- const newPieChartData = {
- datasets: [{
- label: "Population (millions)",
- backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850"],
- data: [2478,5267,734,784,433],
- }]
-
- }
- };
+ //console.log(this.uniqueValues, this.uniqueValuesPercent);
+ this.pieChartData.datasets = [{
+ label: "%",
+ backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850", "#000000"],
+ data: uniqueValuesPercent,
+ }];
+ this.pieChartData.labels = uniqueValues
+ console.log(this.uniqueValues, this.uniqueValuesPercent);
+ this.myChart?.update()
+ };
@ViewChild('piechart') chartRef!: ElementRef;
constructor() { }
@@ -33,13 +33,30 @@ export class PieChartComponent implements AfterViewInit {
label: "Population (millions)",
backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850"],
data: [2478,5267,734,784,433]
- }]
+ }], labels : [""]
}
+ myChart?: Chart;
ngAfterViewInit(): void {
- const myChart = new Chart(this.chartRef.nativeElement, {
+ let rem = 100;
+ const percents : number[] = []
+ this.uniqueValuesPercent?.forEach(percent => {
+ rem-=percent*100;
+ percents.push(percent*100)
+
+ })
+ const data = {
+ datasets: [{
+ label: "%",
+ backgroundColor: ["#3e95cd", "#8e5ea2","#3cba9f","#e8c3b9","#c45850", "#000000"],
+ data: [...percents, rem]
+ }], labels : [...this.uniqueValues!,"Ostalo"]
+ }
+
+ const myChart = new Chart(this.chartRef.nativeElement, {
type: 'pie',
- data: this.pieChartData,
+ data: data
+ ,
options: {
/*title: {
display: true,
diff --git a/frontend/src/app/_elements/column-table/column-table.component.css b/frontend/src/app/_elements/column-table/column-table.component.css
index 0477b7be..f7f07e62 100644
--- a/frontend/src/app/_elements/column-table/column-table.component.css
+++ b/frontend/src/app/_elements/column-table/column-table.component.css
@@ -198,7 +198,7 @@ table ::ng-deep .mat-form-field-wrapper {
font-size: large;
position: relative;
background-color: var(--ns-primary);
- width: 10rem;
+ width: 13rem;
height: 2.3rem;
border-color: var(--ns-primary);
border-style: solid;
diff --git a/frontend/src/app/_elements/column-table/column-table.component.ts b/frontend/src/app/_elements/column-table/column-table.component.ts
index 9fdb6936..ad78feaf 100644
--- a/frontend/src/app/_elements/column-table/column-table.component.ts
+++ b/frontend/src/app/_elements/column-table/column-table.component.ts
@@ -83,8 +83,8 @@ export class ColumnTableComponent implements AfterViewInit {
let i = 0;
this.boxplotComp.changes.subscribe(() => {
const bps = this.boxplotComp.toArray();
- this.dataset?.columnInfo.forEach(colInfo => {
- if (this.experiment.columnTypes[i] == ColumnType.numerical) {
+ this.dataset?.columnInfo.forEach((colInfo, index) => {
+ if (this.experiment.columnTypes[index] == ColumnType.numerical) {
bps[i].updateChart(colInfo!.min, colInfo.max, colInfo.q1, colInfo.q3, colInfo.median);
i++;
}
@@ -96,8 +96,11 @@ export class ColumnTableComponent implements AfterViewInit {
//min: number, max: number, q1: number, q3: number, median: number
let i = 0;
const pieChart = this.piechartComp.toArray();
- this.dataset?.columnInfo.forEach(colInfo => {
- if (this.experiment.columnTypes[i] == ColumnType.categorical) {
+ console.log(pieChart)
+ this.dataset?.columnInfo.forEach((colInfo, index) => {
+ console.log(i)
+ if (this.experiment.columnTypes[index] == ColumnType.categorical) {
+ console.log("prosao IF")
pieChart[i].updatePieChart(colInfo!.uniqueValues, colInfo.uniqueValuesPercent);
i++;
}
diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html
index f7320264..de9a6353 100644
--- a/frontend/src/app/_elements/folder/folder.component.html
+++ b/frontend/src/app/_elements/folder/folder.component.html
@@ -59,6 +59,11 @@
<button *ngIf="this.selectedFile && selectedTab == TabType.File" class="btn-clear file-button" (click)="deleteFile(this.selectedFile, $event)">
<mat-icon>delete</mat-icon>
</button>
+ <button *ngIf="this.selectedFile && selectedTab==TabType.File && FolderType.Dataset==this.type" class="btn-clear file-button" (click)="downloadFile(this.selectedFile,$event)" style="display: inline-block;">
+ <mat-icon>download</mat-icon>
+ </button>
+
+
<!-- <button class="btn-clear file-button">
<mat-icon>zoom_out_map</mat-icon>
</button> -->
@@ -76,7 +81,10 @@
{{file.lastUpdated | date}}
</div>
<div class="mx-2 hover-show" *ngIf="selectedTab !== TabType.PublicDatasets && selectedTab !== TabType.PublicModels">
- <button class="btn-clear file-button" (click)="deleteFile(file, $event)">
+ <button *ngIf="selectedTab==TabType.MyDatasets" class="btn-clear file-button" (click)="downloadFile(file,$event)" style="display: inline-block;">
+ <mat-icon>download</mat-icon>
+ </button>
+ <button class="btn-clear file-button" (click)="deleteFile(file, $event)" style="display: inline-block;">
<mat-icon>delete</mat-icon>
</button>
</div>
diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts
index 159bf959..6f4d4bec 100644
--- a/frontend/src/app/_elements/folder/folder.component.ts
+++ b/frontend/src/app/_elements/folder/folder.component.ts
@@ -13,6 +13,7 @@ import { SignalRService } from 'src/app/_services/signal-r.service';
import { FormModelComponent } from '../form-model/form-model.component';
import { ActivatedRoute, Router } from '@angular/router';
import Predictor from 'src/app/_data/Predictor';
+import FileSaver from 'file-saver';
@Component({
selector: 'app-folder',
@@ -306,6 +307,20 @@ export class FolderComponent implements AfterViewInit {
break;
}
}
+ downloadFile(file: FolderFile, event: Event) {
+ event.stopPropagation();
+ if (this.type==FolderType.Dataset) {
+ const fileId=(<Dataset>file).fileId;
+ const name=(<Dataset>file).name;
+ const ext=(<Dataset>file).extension;
+ if(fileId!=undefined)
+ this.datasetsService.downloadFile(fileId).subscribe((response)=>{
+ FileSaver.saveAs(response,name+ext);
+
+ });
+
+ }
+ }
addFile(file: FolderFile, event: Event) {
event.stopPropagation();
diff --git a/frontend/src/app/_services/datasets.service.ts b/frontend/src/app/_services/datasets.service.ts
index 8d07674d..3fb4e8f2 100644
--- a/frontend/src/app/_services/datasets.service.ts
+++ b/frontend/src/app/_services/datasets.service.ts
@@ -51,4 +51,8 @@ export class DatasetsService {
deleteDataset(dataset: Dataset) {
return this.http.delete(`${Configuration.settings.apiURL}/dataset/` + dataset._id, { headers: this.authService.authHeader(), responseType: "text" });
}
+
+ downloadFile(id:string):Observable<Blob>{
+ return this.http.get(`${Configuration.settings.apiURL}/file/Download?id=`+id, { headers: this.authService.authHeader(), responseType: 'blob' });
+ }
}