aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/api/api/Controllers/ModelController.cs8
-rw-r--r--backend/api/api/Models/Model.cs1
-rw-r--r--backend/api/api/Services/FillAnEmptyDb.cs3
-rw-r--r--backend/api/api/appsettings.json18
-rw-r--r--frontend/src/app/_data/Dataset.ts1
-rw-r--r--frontend/src/app/_data/Experiment.ts14
-rw-r--r--frontend/src/app/_data/FolderFile.ts1
-rw-r--r--frontend/src/app/_data/Model.ts7
-rw-r--r--frontend/src/app/_data/Predictor.ts18
-rw-r--r--frontend/src/app/_elements/column-table/column-table.component.ts21
-rw-r--r--frontend/src/app/_elements/folder/folder.component.css9
-rw-r--r--frontend/src/app/_elements/folder/folder.component.html41
-rw-r--r--frontend/src/app/_elements/folder/folder.component.ts142
-rw-r--r--frontend/src/app/_pages/archive/archive.component.html2
-rw-r--r--frontend/src/app/_pages/archive/archive.component.ts2
-rw-r--r--frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts48
-rw-r--r--frontend/src/app/_pages/settings/settings.component.css0
-rw-r--r--frontend/src/app/_pages/settings/settings.component.html1
-rw-r--r--frontend/src/app/_pages/settings/settings.component.spec.ts25
-rw-r--r--frontend/src/app/_pages/settings/settings.component.ts15
-rw-r--r--frontend/src/app/app.component.html2
-rw-r--r--frontend/src/styles/helper.css3
22 files changed, 183 insertions, 199 deletions
diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs
index 3145a080..c9e36ca4 100644
--- a/backend/api/api/Controllers/ModelController.cs
+++ b/backend/api/api/Controllers/ModelController.cs
@@ -195,8 +195,8 @@ namespace api.Controllers
var existingModel = _modelService.GetOneModel(model.uploaderId, model.name);
- if (existingModel != null && !overwrite)
- return NotFound($"Model with name = {model.name} exisits");
+ if (existingModel != null && !overwrite && model.validationSize < 1 && model.validationSize > 0)
+ return NotFound($"Model with name = {model.name} exisits or validation size is not between 0-1");
else
{
//_modelService.Create(model);
@@ -225,8 +225,8 @@ namespace api.Controllers
var existingModel = _modelService.GetOneModel(userId, name);
- if (existingModel == null)
- return NotFound($"Model with name = {name} or user with ID = {userId} not found");
+ if (existingModel == null && model.validationSize < 1 && model.validationSize > 0)
+ return NotFound($"Model with name = {name} or validation size is not between 0-1");
_modelService.Update(userId, name, model);
return NoContent();
diff --git a/backend/api/api/Models/Model.cs b/backend/api/api/Models/Model.cs
index a2740ca9..f09940d0 100644
--- a/backend/api/api/Models/Model.cs
+++ b/backend/api/api/Models/Model.cs
@@ -43,6 +43,7 @@ namespace api.Models
public float randomTestSetDistribution { get; set; }
public bool isPublic { get; set; }
public bool accessibleByLink { get; set; }
+ public float validationSize { get; set; }//0-1 ne ukljucuje 0.1-0.9 ogranici
}
public class Layer
diff --git a/backend/api/api/Services/FillAnEmptyDb.cs b/backend/api/api/Services/FillAnEmptyDb.cs
index 69f534d8..32ce5c2e 100644
--- a/backend/api/api/Services/FillAnEmptyDb.cs
+++ b/backend/api/api/Services/FillAnEmptyDb.cs
@@ -106,6 +106,7 @@ namespace api.Services
model.epochs = 5;
model.isPublic = true;
model.accessibleByLink = true;
+ model.validationSize = 0.1f;//proveri
_modelService.Create(model);
@@ -220,6 +221,7 @@ namespace api.Services
model.epochs = 5;
model.isPublic = true;
model.accessibleByLink = true;
+ model.validationSize = 0.1f;//proveri
_modelService.Create(model);
@@ -333,6 +335,7 @@ namespace api.Services
model.epochs = 1;
model.isPublic = true;
model.accessibleByLink = true;
+ model.validationSize = 0.1f;//proveri
_modelService.Create(model);
diff --git a/backend/api/api/appsettings.json b/backend/api/api/appsettings.json
index 56d1861c..ec8f7dd8 100644
--- a/backend/api/api/appsettings.json
+++ b/backend/api/api/appsettings.json
@@ -24,14 +24,14 @@
"PredictorCollectionName": "Predictor",
"FilesCollectionName": "Files",
"ExperimentCollectionName": "Experiment"
- /*
- "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" */
+
+ /*"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" */
}
} \ No newline at end of file
diff --git a/frontend/src/app/_data/Dataset.ts b/frontend/src/app/_data/Dataset.ts
index 87b09c6f..a962fe6b 100644
--- a/frontend/src/app/_data/Dataset.ts
+++ b/frontend/src/app/_data/Dataset.ts
@@ -1,7 +1,6 @@
import { FolderFile } from "./FolderFile";
export default class Dataset extends FolderFile {
- _id: string = '';
constructor(
name: string = 'Novi izvor podataka',
public description: string = '',
diff --git a/frontend/src/app/_data/Experiment.ts b/frontend/src/app/_data/Experiment.ts
index cff77535..c140e100 100644
--- a/frontend/src/app/_data/Experiment.ts
+++ b/frontend/src/app/_data/Experiment.ts
@@ -1,9 +1,9 @@
+import { FolderFile } from "./FolderFile";
import { ProblemType } from "./Model";
-export default class Experiment {
- _id: string = '';
+export default class Experiment extends FolderFile {
uploaderId: string = '';
constructor(
- public name: string = 'Novi eksperiment',
+ name: string = 'Novi eksperiment',
public description: string = '',
public type: ProblemType = ProblemType.Regression,
public datasetId: string = '',
@@ -11,12 +11,14 @@ export default class Experiment {
public outputColumn: string = '',
public nullValues: NullValueOptions = NullValueOptions.DeleteRows,
public nullValuesReplacers: NullValReplacer[] = [],
- public dateCreated: Date = new Date(),
- public lastUpdated: Date = new Date(),
+ dateCreated: Date = new Date(),
+ lastUpdated: Date = new Date(),
public modelIds: string[] = [],
public columnTypes: ColumnType[] = [],
public encodings: ColumnEncoding[] = []//[{columnName: "", columnEncoding: Encoding.Label}]
- ) { }
+ ) {
+ super(name, dateCreated, lastUpdated)
+ }
_columnsSelected: boolean = false;
}
diff --git a/frontend/src/app/_data/FolderFile.ts b/frontend/src/app/_data/FolderFile.ts
index c228f25e..4d1844fd 100644
--- a/frontend/src/app/_data/FolderFile.ts
+++ b/frontend/src/app/_data/FolderFile.ts
@@ -1,4 +1,5 @@
export class FolderFile {
+ public _id: string = "";
constructor(
public name: string,
public dateCreated: Date,
diff --git a/frontend/src/app/_data/Model.ts b/frontend/src/app/_data/Model.ts
index 7780dc45..05d17e01 100644
--- a/frontend/src/app/_data/Model.ts
+++ b/frontend/src/app/_data/Model.ts
@@ -2,7 +2,6 @@ import { NgIf } from "@angular/common";
import { FolderFile } from "./FolderFile";
export default class Model extends FolderFile {
- _id: string = '';
constructor(
name: string = 'Novi model',
public description: string = '',
@@ -132,10 +131,10 @@ export enum LossFunction {
MeanSquaredLogarithmicError = 'mean_squared_logarithmic_error',
HuberLoss = 'Huber'
}
-export const LossFunctionRegression =[LossFunction.MeanAbsoluteError,LossFunction.MeanSquaredError,LossFunction.MeanSquaredLogarithmicError]
-export const LossFunctionBinaryClassification=[LossFunction.BinaryCrossEntropy,LossFunction.SquaredHingeLoss,LossFunction.HingeLoss]
+export const LossFunctionRegression = [LossFunction.MeanAbsoluteError, LossFunction.MeanSquaredError, LossFunction.MeanSquaredLogarithmicError]
+export const LossFunctionBinaryClassification = [LossFunction.BinaryCrossEntropy, LossFunction.SquaredHingeLoss, LossFunction.HingeLoss]
-export const LossFunctionMultiClassification=[LossFunction.CategoricalCrossEntropy,LossFunction.SparseCategoricalCrossEntropy,LossFunction.KLDivergence]
+export const LossFunctionMultiClassification = [LossFunction.CategoricalCrossEntropy, LossFunction.SparseCategoricalCrossEntropy, LossFunction.KLDivergence]
export enum Optimizer {
Adam = 'Adam',
diff --git a/frontend/src/app/_data/Predictor.ts b/frontend/src/app/_data/Predictor.ts
index e15ae8f9..55d610ed 100644
--- a/frontend/src/app/_data/Predictor.ts
+++ b/frontend/src/app/_data/Predictor.ts
@@ -1,22 +1,28 @@
-export default class Predictor {
- _id: string = '';
+import { FolderFile } from "./FolderFile";
+
+export default class Predictor extends FolderFile {
constructor(
- public name: string = 'Novi prediktor',
+ name: string = 'Novi prediktor',
public description: string = '',
public inputs: string[] = [],
public output: string = '',
public isPublic: boolean = false,
public accessibleByLink: boolean = false,
- public dateCreated: Date = new Date(),
+ dateCreated: Date = new Date(),
+ lastUpdated: Date = new Date(),
public uploaderId: string = '',
//public finalMetrics: Metric[] = []
- ) { }
+ public experimentId: string = "",
+ public modelId: string = "",
+ ) {
+ super(name, dateCreated, lastUpdated);
+ }
}
export class Metric {
constructor(
public name: string = '',
public jsonValue: string = ''
- ) {}
+ ) { }
} \ No newline at end of file
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 d61c2537..217eda30 100644
--- a/frontend/src/app/_elements/column-table/column-table.component.ts
+++ b/frontend/src/app/_elements/column-table/column-table.component.ts
@@ -60,17 +60,16 @@ export class ColumnTableComponent implements AfterViewInit {
});
}
- updatePieChart(){
+ updatePieChart() {
//min: number, max: number, q1: number, q3: number, median: number
- let i=0;
+ let i = 0;
const pieChart = this.piechartComp.toArray();
- this.dataset?.columnInfo.forEach(colInfo =>
- { if (this.experiment.columnTypes[i] == ColumnType.categorical)
- {
- pieChart[i].updatePieChart(colInfo!.uniqueValues, colInfo.uniqueValuesPercent);
- i++;
- }
- });
+ this.dataset?.columnInfo.forEach(colInfo => {
+ if (this.experiment.columnTypes[i] == ColumnType.categorical) {
+ pieChart[i].updatePieChart(colInfo!.uniqueValues, colInfo.uniqueValuesPercent);
+ i++;
+ }
+ });
}
loadDataset(dataset: Dataset) {
@@ -213,7 +212,7 @@ export class ColumnTableComponent implements AfterViewInit {
if (this.experiment != undefined && this.dataset != undefined) {
for (let i = 0; i < this.dataset.columnInfo.length; i++) {
if (this.experiment.columnTypes[i] == ColumnType.categorical && this.dataset.columnInfo[i].columnName != this.experiment.outputColumn) //promeni
- this.experiment.encodings[i].encoding = encodingType;
+ this.experiment.encodings[i].encoding = encodingType;
}
this.columnTableChangeDetected();
}
@@ -380,10 +379,8 @@ export class ColumnTableComponent implements AfterViewInit {
hoverOverTab(index: number) {
if (index < 0) {
this.hoveringOverTab = null;
- this.tabToDisplay = this.selectedTab.value;
} else {
this.hoveringOverTab = this.tabs[index];
- this.tabToDisplay = this.tabs[index].value;
}
}
diff --git a/frontend/src/app/_elements/folder/folder.component.css b/frontend/src/app/_elements/folder/folder.component.css
index 62324d62..ada2dba0 100644
--- a/frontend/src/app/_elements/folder/folder.component.css
+++ b/frontend/src/app/_elements/folder/folder.component.css
@@ -210,4 +210,13 @@
.form-hidden {
display: none;
+}
+
+.predictor {
+ text-decoration: underline;
+}
+
+.highlight-exp {
+ /*font-size: 16px;*/
+ font-weight: 700;
} \ No newline at end of file
diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html
index bff066be..8896e7e5 100644
--- a/frontend/src/app/_elements/folder/folder.component.html
+++ b/frontend/src/app/_elements/folder/folder.component.html
@@ -67,17 +67,38 @@
<app-form-dataset [ngClass]="{'form-hidden': type != FolderType.Dataset}" [forExperiment]="forExperiment"></app-form-dataset>
</div>
<div [ngClass]="{'form-hidden' : !listView}" class="list-view">
- <div *ngFor="let file of filteredFiles; let i = index" class="list-item force-link" (click)="selectFile(file)">
- <div class="mx-2">
- {{file.name}}
+ <div *ngFor="let file of filteredFiles; let i = index">
+ <div class="list-item force-link" (click)="selectFile(file)">
+ <div class="mx-2" [ngClass]="{'highlight-exp' : selectedTab == TabType.MyExperiments}">
+ {{file.name}}
+ </div>
+ <div class="mx-2 hover-hide">
+ {{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)">
+ <mat-icon>delete</mat-icon>
+ </button>
+ </div>
</div>
- <div class="mx-2 hover-hide">
- {{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)">
- <mat-icon>delete</mat-icon>
- </button>
+ <div *ngIf="type == FolderType.Experiment" class="list-view">
+ <div *ngFor="let predictor of predictorsForExp[file._id];" class="list-item">
+
+ <div class="mx-3">
+ <div class="f-row">
+ <mat-icon>subdirectory_arrow_right</mat-icon>
+ <div class="mx-1">{{predictor.name}}</div>
+ </div>
+ </div>
+ <div class="mx-2 hover-hide">
+ {{predictor.lastUpdated | date}}
+ </div>
+ <div class="mx-2 hover-show">
+ <button class="btn-clear file-button" (click)="deleteFile(predictor, $event)">
+ <mat-icon>delete</mat-icon>
+ </button>
+ </div>
+ </div>
</div>
</div>
diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts
index e60f041e..665659a8 100644
--- a/frontend/src/app/_elements/folder/folder.component.ts
+++ b/frontend/src/app/_elements/folder/folder.component.ts
@@ -11,6 +11,8 @@ import { ExperimentsService } from 'src/app/_services/experiments.service';
import { PredictorsService } from 'src/app/_services/predictors.service';
import { SignalRService } from 'src/app/_services/signal-r.service';
import { FormModelComponent } from '../form-model/form-model.component';
+import { Router } from '@angular/router';
+import Predictor from 'src/app/_data/Predictor';
@Component({
selector: 'app-folder',
@@ -30,7 +32,7 @@ export class FolderComponent implements AfterViewInit {
@Input() type: FolderType = FolderType.Dataset;
@Input() forExperiment!: Experiment;
@Input() startingTab!: TabType;
-
+ @Input() archive: boolean = false;
newFileSelected: boolean = true;
selectedFileIndex: number = -1;
@@ -44,7 +46,7 @@ export class FolderComponent implements AfterViewInit {
searchTerm: string = '';
- constructor(private datasetsService: DatasetsService, private experimentsService: ExperimentsService, private modelsService: ModelsService, private predictorsService: PredictorsService, private signalRService: SignalRService) {
+ constructor(private datasetsService: DatasetsService, private experimentsService: ExperimentsService, private modelsService: ModelsService, private predictorsService: PredictorsService, private signalRService: SignalRService, private router: Router) {
this.tabsToShow.forEach(tab => this.folders[tab] = []);
}
@@ -91,20 +93,23 @@ export class FolderComponent implements AfterViewInit {
this.newFileSelected = true;
this.listView = false;
this.displayFile();
- if(this.type == FolderType.Dataset)
+ if (this.type == FolderType.Dataset)
this.formDataset.clear();
}
selectFile(file?: FolderFile) {
this.selectedFile = file;
this.fileToDisplay = file;
+ if (this.type == FolderType.Experiment && file) {
+ this.router.navigate(['/experiment'/*, file._id*/])
+ }
this.newFileSelected = false;
this.listView = false;
this.selectedFileChanged.emit(this.selectedFile);
this.selectTab(TabType.File);
this.displayFile();
- if(this.type == FolderType.Dataset)
+ if (this.type == FolderType.Dataset)
this.formDataset.loadExisting();
}
@@ -122,7 +127,7 @@ export class FolderComponent implements AfterViewInit {
_initialized: boolean = false;
- refreshFiles(selectedDatasetId: string | null) {
+ refreshFiles(selectedDatasetId: string | null = null, selectedModelId: string | null = null) {
this.files = []
this.filteredFiles.length = 0;
this.folders[TabType.NewFile] = [];
@@ -131,42 +136,85 @@ export class FolderComponent implements AfterViewInit {
this.folders[tab] = [];
});
- this.datasetsService.getMyDatasets().subscribe((datasets) => {
- this.folders[TabType.MyDatasets] = datasets;
- if (selectedDatasetId) {
- this.selectFile(datasets.filter(x => x._id == selectedDatasetId)[0]);
+ if (this.archive) {
+ this.refreshDatasets(selectedDatasetId);
+ this.refreshModels(selectedModelId);
+ this.refreshExperiments();
+ } else {
+ switch (this.type) {
+ case FolderType.Dataset:
+ this.refreshDatasets(selectedDatasetId);
+ break;
+
+ case FolderType.Model:
+ this.refreshModels(selectedModelId);
+ break;
+
+ case FolderType.Experiment:
+ this.refreshExperiments();
+ break;
+
+ default:
+ console.error("Bad folder type.");
+ break;
}
- });
-
- this.experimentsService.getMyExperiments().subscribe((experiments) => {
- this.folders[TabType.MyExperiments] = experiments;
- });
+ }
- this.datasetsService.getPublicDatasets().subscribe((datasets) => {
- this.folders[TabType.PublicDatasets] = datasets;
- });
+ if (!this._initialized) {
+ this.files = this.folders[this.startingTab];
+ this.filteredFiles = [];
+ this.selectTab(this.startingTab);
+ this._initialized = true;
+ }
+ }
+ refreshModels(selectedModelId: string | null) {
this.modelsService.getMyModels().subscribe((models) => {
this.folders[TabType.MyModels] = models;
+ if (selectedModelId) {
+ this.selectFile(models.filter(x => x._id == selectedModelId)[0]);
+ }
+ this.searchTermsChanged();
});
-
/*this.modelsService.getMyModels().subscribe((models) => {
this.folders[TabType.PublicModels] = models;
+ this.searchTermsChanged();
});*/
this.folders[TabType.PublicModels] = [];
+ }
+
+ refreshDatasets(selectedDatasetId: string | null) {
+ this.datasetsService.getMyDatasets().subscribe((datasets) => {
+ this.folders[TabType.MyDatasets] = datasets;
+ if (selectedDatasetId) {
+ this.selectFile(datasets.filter(x => x._id == selectedDatasetId)[0]);
+ }
+ this.searchTermsChanged();
+ });
+ this.datasetsService.getPublicDatasets().subscribe((datasets) => {
+ this.folders[TabType.PublicDatasets] = datasets;
+ this.searchTermsChanged();
+ });
+ }
+ refreshExperiments() {
this.experimentsService.getMyExperiments().subscribe((experiments) => {
this.folders[TabType.MyExperiments] = experiments;
+ this.predictorsService.getMyPredictors().subscribe((predictors) => {
+ this.predictorsForExp = {};
+ experiments.forEach(exp => {
+ this.predictorsForExp[exp._id] = predictors.filter(pred => pred.experimentId == exp._id);
+ /* TODO IZMENI OVO DA SE SETUJE NA BACKU AUTOMATSKI */
+ this.predictorsForExp[exp._id].forEach(pred => {
+ const model = this.folders[TabType.MyModels].find(model => model._id == pred.modelId);
+ pred.name = model?.name!;
+ pred.lastUpdated = model?.lastUpdated!;
+ })
+ /* ------------------------------------------------ */
+ this.searchTermsChanged();
+ })
+ });
});
-
- if (!this._initialized) {
- this.files = this.folders[this.startingTab];
- this.filteredFiles = [];
- this.selectTab(this.startingTab);
- this._initialized = true;
- }
-
- this.searchTermsChanged();
}
saveNewFile() {
@@ -175,7 +223,7 @@ export class FolderComponent implements AfterViewInit {
this.formDataset!.uploadDataset((dataset: Dataset) => {
this.newFile = undefined;
Shared.openDialog("Obaveštenje", "Uspešno ste dodali novi izvor podataka u kolekciju. Molimo sačekajte par trenutaka da se procesira.");
- this.refreshFiles(null);
+ this.refreshFiles();
},
() => {
Shared.openDialog("Neuspeo pokušaj!", "Izvor podataka sa unetim nazivom već postoji u Vašoj kolekciji. Izmenite naziv ili iskoristite postojeći dataset.");
@@ -185,7 +233,7 @@ export class FolderComponent implements AfterViewInit {
this.modelsService.addModel(this.formModel.newModel).subscribe(model => {
this.newFile = undefined;
Shared.openDialog("Obaveštenje", "Uspešno ste dodali novu konfiguraciju neuronske mreže u kolekciju.");
- this.refreshFiles(null); // todo select model
+ this.refreshFiles(null, model._id); // todo select model
}, (err) => {
Shared.openDialog("Neuspeo pokušaj!", "Konfiguracija neuronske mreže sa unetim nazivom već postoji u Vašoj kolekciji. Izmenite naziv ili iskoristite postojeću konfiguraciju.");
});
@@ -193,19 +241,7 @@ export class FolderComponent implements AfterViewInit {
}
}
-
- /*calcZIndex(i: number) {
- let zIndex = (this.files.length - i - 1)
- if (this.selectedFileIndex == i)
- zIndex = this.files.length + 2;
- if (this.hoveringOverFileIndex == i)
- zIndex = this.files.length + 3;
- return zIndex;
- }
-
- newFileZIndex() {
- return (this.files.length + 1);
- }*/
+ predictorsForExp: { [expId: string]: Predictor[] } = {}
clearSearchTerm() {
this.searchTerm = '';
@@ -232,10 +268,6 @@ export class FolderComponent implements AfterViewInit {
listView: boolean = true;
- toggleListView() {
- this.listView = !this.listView;
- }
-
deleteFile(file: FolderFile, event: Event) {
event.stopPropagation();
//console.log('delete');
@@ -349,16 +381,16 @@ export class FolderComponent implements AfterViewInit {
}
hoverOverTab(tab: TabType) {
- this.listView = this.getListView(tab);
- this.privacy = this.getPrivacy(tab);
+ // this.listView = this.getListView(tab);
+ // this.privacy = this.getPrivacy(tab);
this.hoverTab = tab;
- if (tab == TabType.None) {
- this.listView = this.getListView(this.selectedTab);
- this.files = this.folders[this.selectedTab];
- } else {
- this.files = this.folders[tab];
- }
- this.searchTermsChanged();
+ // if (tab == TabType.None) {
+ // this.listView = this.getListView(this.selectedTab);
+ // this.files = this.folders[this.selectedTab];
+ // } else {
+ // this.files = this.folders[tab];
+ // }
+ // this.searchTermsChanged();
}
updateExperiment() {
diff --git a/frontend/src/app/_pages/archive/archive.component.html b/frontend/src/app/_pages/archive/archive.component.html
index fc3c4763..f9cce56b 100644
--- a/frontend/src/app/_pages/archive/archive.component.html
+++ b/frontend/src/app/_pages/archive/archive.component.html
@@ -1,5 +1,5 @@
<div class="d-flex flex-column align-items-center my-5">
- <app-folder></app-folder>
+ <app-folder [archive]="true" [startingTab]="TabType.MyExperiments"></app-folder>
<!--<div class="my-5" style="height: fit-content;">
<app-playlist [datasets]="publicDatasets"></app-playlist>
diff --git a/frontend/src/app/_pages/archive/archive.component.ts b/frontend/src/app/_pages/archive/archive.component.ts
index 47f96218..bb4bd9e9 100644
--- a/frontend/src/app/_pages/archive/archive.component.ts
+++ b/frontend/src/app/_pages/archive/archive.component.ts
@@ -1,5 +1,6 @@
import { Component, OnInit } from '@angular/core';
import Dataset from 'src/app/_data/Dataset';
+import { TabType } from 'src/app/_elements/folder/folder.component';
import { DatasetsService } from 'src/app/_services/datasets.service';
@Component({
@@ -10,6 +11,7 @@ import { DatasetsService } from 'src/app/_services/datasets.service';
export class ArchiveComponent implements OnInit {
publicDatasets: Dataset[] = [];
+ TabType = TabType;
constructor(private datasetsService: DatasetsService) { }
diff --git a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts b/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts
deleted file mode 100644
index 66b3755e..00000000
--- a/frontend/src/app/_pages/filter-datasets/filter-datasets.component.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-import { DatasetsService } from 'src/app/_services/datasets.service';
-import Dataset from 'src/app/_data/Dataset';
-import {Router} from '@angular/router'
-import { JwtHelperService } from '@auth0/angular-jwt';
-import { CookieService } from 'ngx-cookie-service';
-import shared from 'src/app/Shared';
-
-@Component({
- selector: 'app-filter-datasets',
- templateUrl: './filter-datasets.component.html',
- styleUrls: ['./filter-datasets.component.css']
-})
-export class FilterDatasetsComponent implements OnInit {
-
- shared = shared;
- publicDatasets?: Dataset[];
- term: string = "";
- constructor(private datasets: DatasetsService,private router:Router, private cookie: CookieService) {
- this.datasets.getPublicDatasets().subscribe((datasets) => {
- this.publicDatasets = datasets;
- });
- }
-
- ngOnInit(): void {
-
- }
- addDataset(dataset: Dataset):void{
- //this.router.navigateByUrl('/predict?id='+id);
- const helper = new JwtHelperService();
- const decodedToken = helper.decodeToken(this.cookie.get("token"));
- const newDataset={...dataset};
- newDataset._id = "";
- newDataset.isPublic = false;
- newDataset.lastUpdated = new Date();
- newDataset.uploaderId = decodedToken.uploaderId;
- let name=prompt("Unesite naziv dataset-a",newDataset.name);
- newDataset.name=name as string;
- if(name!=null && name!="")
- this.datasets.addDataset(newDataset).subscribe((response:string)=>{
- shared.openDialog("Obaveštenje", "Uspešno ste dodali dataset sa nazivom " + newDataset.name);
- },(error)=>{
- shared.openDialog("Obaveštenje", "U svojoj kolekciji već imate dataset sa ovim imenom. Molimo Vas da unesete drugo ime.");
- });
-
- };
-
-}
diff --git a/frontend/src/app/_pages/settings/settings.component.css b/frontend/src/app/_pages/settings/settings.component.css
deleted file mode 100644
index e69de29b..00000000
--- a/frontend/src/app/_pages/settings/settings.component.css
+++ /dev/null
diff --git a/frontend/src/app/_pages/settings/settings.component.html b/frontend/src/app/_pages/settings/settings.component.html
deleted file mode 100644
index 4ab2a415..00000000
--- a/frontend/src/app/_pages/settings/settings.component.html
+++ /dev/null
@@ -1 +0,0 @@
-<p>settings works!</p>
diff --git a/frontend/src/app/_pages/settings/settings.component.spec.ts b/frontend/src/app/_pages/settings/settings.component.spec.ts
deleted file mode 100644
index a3a508b0..00000000
--- a/frontend/src/app/_pages/settings/settings.component.spec.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { SettingsComponent } from './settings.component';
-
-describe('SettingsComponent', () => {
- let component: SettingsComponent;
- let fixture: ComponentFixture<SettingsComponent>;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- declarations: [ SettingsComponent ]
- })
- .compileComponents();
- });
-
- beforeEach(() => {
- fixture = TestBed.createComponent(SettingsComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/frontend/src/app/_pages/settings/settings.component.ts b/frontend/src/app/_pages/settings/settings.component.ts
deleted file mode 100644
index 19862fb0..00000000
--- a/frontend/src/app/_pages/settings/settings.component.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-
-@Component({
- selector: 'app-settings',
- templateUrl: './settings.component.html',
- styleUrls: ['./settings.component.css']
-})
-export class SettingsComponent implements OnInit {
-
- constructor() { }
-
- ngOnInit(): void {
- }
-
-}
diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html
index d15793e7..fb0b0223 100644
--- a/frontend/src/app/app.component.html
+++ b/frontend/src/app/app.component.html
@@ -7,7 +7,7 @@
</app-reactive-background>
<app-navbar></app-navbar>
<a class="bg-controls" style="z-index: 1000;" routerLink="playground">
- <mat-icon color="accent">settings_suggest</mat-icon>
+ <mat-icon color="primary">settings_suggest</mat-icon>
</a>
<router-outlet></router-outlet>
<app-notifications></app-notifications> \ No newline at end of file
diff --git a/frontend/src/styles/helper.css b/frontend/src/styles/helper.css
index 1c172058..971a2ed6 100644
--- a/frontend/src/styles/helper.css
+++ b/frontend/src/styles/helper.css
@@ -17,7 +17,8 @@
.bg-controls {
position: fixed;
bottom: 10px;
- right: 10px;
+ left: 50%;
+ right: 50%;
}
.center-horizontal {