From 78a10dadf619e4d090d93e19f08f9e35bcbd5a6d Mon Sep 17 00:00:00 2001 From: Ivan Ljubisavljevic Date: Thu, 26 May 2022 21:29:26 +0200 Subject: Deaktiviran button za dodavanje csv-a kada se ucita postojeci csv --- .../src/app/_elements/form-dataset/form-dataset.component.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset') diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.html b/frontend/src/app/_elements/form-dataset/form-dataset.component.html index 6194a1a8..2a956128 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -2,7 +2,11 @@
- +
@@ -38,7 +42,7 @@ file_upload - +
-- cgit v1.2.3 From d2dd01cb33a906d28f830b586c295231f3464c32 Mon Sep 17 00:00:00 2001 From: Danijel Anđelković Date: Fri, 3 Jun 2022 21:22:49 +0200 Subject: Pomerio funkciju za upload csv fajla u datasets service. --- .../form-dataset/form-dataset.component.ts | 4 +-- frontend/src/app/_services/datasets.service.ts | 29 ++++++++++++++++------ frontend/src/app/_services/models.service.ts | 15 ----------- 3 files changed, 24 insertions(+), 24 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset') diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index 1a29f74e..8714ae7f 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -89,7 +89,7 @@ export class FormDatasetComponent { update() { this.firstInput = true; - if (this.files.length < 1){ + if (this.files.length < 1) { this.loadExisting(); return; } @@ -158,7 +158,7 @@ export class FormDatasetComponent { return; } - return this.modelsService.uploadData(this.files[0]).subscribe((file) => { + return this.datasetsService.uploadData(this.files[0]).subscribe((file) => { this.dataset._id = ""; this.dataset.fileId = file._id; this.dataset.uploaderId = shared.userId; diff --git a/frontend/src/app/_services/datasets.service.ts b/frontend/src/app/_services/datasets.service.ts index 2775613c..42fa5e55 100644 --- a/frontend/src/app/_services/datasets.service.ts +++ b/frontend/src/app/_services/datasets.service.ts @@ -1,4 +1,4 @@ -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { Configuration } from './configuration.service'; @@ -12,6 +12,21 @@ export class DatasetsService { constructor(private http: HttpClient, private authService: AuthService) { } + uploadData(file: File): Observable { + let formData = new FormData(); + formData.append('file', file, file.name); + + let params = new HttpParams(); + + const options = { + params: params, + reportProgress: false, + headers: this.authService.authHeader() + }; + + return this.http.post(`${Configuration.settings.apiURL}/file/csv`, formData, options); + } + getPublicDatasets(): Observable { return this.http.get(`${Configuration.settings.apiURL}/dataset/publicdatasets`, { headers: this.authService.authHeader() }); } @@ -31,10 +46,10 @@ export class DatasetsService { getDatasetFile(fileId: any): any { return this.http.get(`${Configuration.settings.apiURL}/file/csvRead/${fileId}/-1/11`, { headers: this.authService.authHeader(), responseType: 'text' }); } - getDatasetFilePaging(fileId:any,begin:any,end:any){ + getDatasetFilePaging(fileId: any, begin: any, end: any) { return this.http.get(`${Configuration.settings.apiURL}/file/csvRead/${fileId}/${begin}/${end}`, { headers: this.authService.authHeader(), responseType: 'text' }); } - getDatasetHeader(fileId:any){ + getDatasetHeader(fileId: any) { return this.http.get(`${Configuration.settings.apiURL}/file/csvRead/${fileId}/-1/1`, { headers: this.authService.authHeader(), responseType: 'text' }); } getDatasetFilePartial(fileId: any, startRow: number, rowNum: number): Observable { @@ -44,15 +59,15 @@ export class DatasetsService { return this.http.get(`${Configuration.settings.apiURL}/dataset/get/${datasetId}`, { headers: this.authService.authHeader() }); } - editDataset(dataset: Dataset){ - return this.http.put(`${Configuration.settings.apiURL}/dataset/` + dataset._id, dataset, { headers: this.authService.authHeader() ,responseType:'text'}); + editDataset(dataset: Dataset) { + return this.http.put(`${Configuration.settings.apiURL}/dataset/` + dataset._id, dataset, { headers: this.authService.authHeader(), responseType: 'text' }); } deleteDataset(dataset: Dataset) { return this.http.delete(`${Configuration.settings.apiURL}/dataset/` + dataset._id, { headers: this.authService.authHeader(), responseType: "text" }); } - downloadFile(id:string):Observable{ - return this.http.get(`${Configuration.settings.apiURL}/file/Download?id=`+id, { headers: this.authService.authHeader(), responseType: 'blob' }); + downloadFile(id: string): Observable { + return this.http.get(`${Configuration.settings.apiURL}/file/Download?id=` + id, { headers: this.authService.authHeader(), responseType: 'blob' }); } } diff --git a/frontend/src/app/_services/models.service.ts b/frontend/src/app/_services/models.service.ts index 2b8fe8f2..016fa9bc 100644 --- a/frontend/src/app/_services/models.service.ts +++ b/frontend/src/app/_services/models.service.ts @@ -13,21 +13,6 @@ export class ModelsService { constructor(private http: HttpClient, private authService: AuthService) { } - uploadData(file: File): Observable { - let formData = new FormData(); - formData.append('file', file, file.name); - - let params = new HttpParams(); - - const options = { - params: params, - reportProgress: false, - headers: this.authService.authHeader() - }; - - return this.http.post(`${Configuration.settings.apiURL}/file/csv`, formData, options); - } - addModel(model: Model): Observable { return this.http.post(`${Configuration.settings.apiURL}/model/add`, model, { headers: this.authService.authHeader() }); } -- cgit v1.2.3 From 542acf92fd69fea61afbef34f12cd6147f919bc8 Mon Sep 17 00:00:00 2001 From: Sonja Galovic Date: Sun, 5 Jun 2022 19:19:56 +0200 Subject: Ispravljeno da kod ucitavanje prediktora iz kolekcije bude lepo ucitan model. Disable-ovani dugmici za cuvanje dataseta i modela da se ne bi vise puta slao zahtev backu za cuvanje istog. Biranje drugog dataseta nakon izbora prvog (refresh). --- .../app/_elements/column-table/column-table.component.ts | 6 +++++- frontend/src/app/_elements/folder/folder.component.ts | 15 ++++++++++++++- .../app/_elements/form-dataset/form-dataset.component.ts | 1 + .../src/app/_pages/experiment/experiment.component.html | 2 +- .../src/app/_pages/experiment/experiment.component.ts | 11 +++++++---- 5 files changed, 28 insertions(+), 7 deletions(-) (limited to 'frontend/src/app/_elements/form-dataset') 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 8d2875a5..96818976 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.ts +++ b/frontend/src/app/_elements/column-table/column-table.component.ts @@ -88,6 +88,7 @@ export class ColumnTableComponent implements AfterViewInit { if (this.route.snapshot.paramMap.get("id") == null && this.route.snapshot.paramMap.get("predictorId") == null) { this.dataset = dataset; this.setColumnTypeInitial(); + this.resetColumnEncodings(Encoding.Label); this.columnsChecked = []; this.dataset.columnInfo.forEach(column => { @@ -96,7 +97,6 @@ export class ColumnTableComponent implements AfterViewInit { this.resetInputColumns(); this.resetOutputColumn(); - this.resetColumnEncodings(Encoding.Label); this.setDeleteRowsForMissingValTreatment(); this.nullValOption = []; @@ -258,9 +258,11 @@ export class ColumnTableComponent implements AfterViewInit { resetColumnEncodings(encodingType: Encoding) { if (this.experiment != undefined && this.dataset != undefined) { this.experiment.encodings = []; + console.log("prvi: RESET COLUMN ENC, DUZINA ENCODINGS NIZA:", this.experiment.encodings.length); for (let i = 0; i < this.dataset.columnInfo.length; i++) { this.experiment.encodings.push(new ColumnEncoding(this.dataset?.columnInfo[i].columnName, encodingType)); } + console.log("drugi: RESET COLUMN ENC, DUZINA ENCODINGS NIZA:", this.experiment.encodings.length); this.columnTableChangeDetected(); } } @@ -366,6 +368,7 @@ export class ColumnTableComponent implements AfterViewInit { Object.assign(this.experiment, experiment); this.experiment._columnsSelected = true; this.experimentChanged.emit(); + this.okPressed.emit(); } }); } @@ -385,6 +388,7 @@ export class ColumnTableComponent implements AfterViewInit { Object.assign(this.experiment, experiment); this.experiment._columnsSelected = true; this.experimentChanged.emit(); + this.okPressed.emit(); }); } diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts index fc3b98b2..60f6857c 100644 --- a/frontend/src/app/_elements/folder/folder.component.ts +++ b/frontend/src/app/_elements/folder/folder.component.ts @@ -62,6 +62,8 @@ export class FolderComponent implements AfterViewInit { if (this.type == FolderType.Dataset) { this.refreshFiles(dId); } + this.saveDisabled = false; + console.log("Notify dataset ", this.saveDisabled); }); } else { console.warn("Dataset-Load: No connection!"); @@ -140,6 +142,9 @@ export class FolderComponent implements AfterViewInit { createNewFile() { if (this.type == FolderType.Dataset) { this.newFile = new Dataset(); + this.formNewDataset.files = []; + this.formNewDataset.firstInput = false; + this.formNewDataset.filename = ""; } else if (this.type == FolderType.Model) { this.newFile = new Model(); } @@ -251,6 +256,11 @@ export class FolderComponent implements AfterViewInit { } saveNewFile() { + console.log("USAO U saveDisabled: ", this.saveDisabled); + if (this.saveDisabled) { + console.log("USAO U IF"); + return; + } this.saveDisabled = true; this.loadingAction = true; switch (this.type) { @@ -261,9 +271,11 @@ export class FolderComponent implements AfterViewInit { this.okPressed.emit(); //Shared.openDialog("Obaveštenje", "Uspešno ste dodali novi izvor podataka u kolekciju. Molimo sačekajte par trenutaka da se obradi."); this.refreshFiles(); + this.createNewFile(); }, () => { Shared.openDialog("Neuspeo pokušaj!", "Izvor podataka sa unetim nazivom već postoji u Vašoj kolekciji. Izmenite naziv ili iskoristite postojeći dataset."); + this.saveDisabled = false; }); break; case FolderType.Model: @@ -273,12 +285,13 @@ export class FolderComponent implements AfterViewInit { this.loadingAction = false; //Shared.openDialog("Obaveštenje", "Uspešno ste dodali novu konfiguraciju neuronske mreže u kolekciju."); this.refreshFiles(null, model._id); // todo select model + this.createNewFile(); }, (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."); + this.saveDisabled = false; }); break; } - this.saveDisabled = false; } predictorsForExp: { [expId: string]: Predictor[] } = {} diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts index 8714ae7f..3df76aa5 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -155,6 +155,7 @@ export class FormDatasetComponent { uploadDataset(onSuccess: Function = (dataset: Dataset) => { }, onError: Function = () => { }) { if (this.files[0] == undefined) { shared.openDialog("Greška", "Niste izabrali fajl za učitavanje."); + onError(); return; } diff --git a/frontend/src/app/_pages/experiment/experiment.component.html b/frontend/src/app/_pages/experiment/experiment.component.html index a0ed26ef..6bd921fd 100644 --- a/frontend/src/app/_pages/experiment/experiment.component.html +++ b/frontend/src/app/_pages/experiment/experiment.component.html @@ -57,7 +57,7 @@
- +
diff --git a/frontend/src/app/_pages/experiment/experiment.component.ts b/frontend/src/app/_pages/experiment/experiment.component.ts index 5822eedf..20a3afb0 100644 --- a/frontend/src/app/_pages/experiment/experiment.component.ts +++ b/frontend/src/app/_pages/experiment/experiment.component.ts @@ -171,11 +171,13 @@ export class ExperimentComponent implements AfterViewInit { this.modelsService.getModelById(predictor.modelId).subscribe((response) => { let model = response; - this.folderModel.formModel.newModel = model; + this.folderModel.selectFile(model); + //this.folderModel.formModel.newModel = model; this.step3 = true; let numOfEpochsArray = Array.from({ length: model.epochs }, (_, i) => i + 1); setTimeout(() => { this.linechartComponent.update(numOfEpochsArray, predictor.metricsAcc, predictor.metricsLoss, predictor.metricsMae, predictor.metricsMse, predictor.metricsValAcc, predictor.metricsValLoss, predictor.metricsValMae, predictor.metricsValMse); + this.goToPage(3); }) }); }); @@ -189,6 +191,7 @@ export class ExperimentComponent implements AfterViewInit { this.dataset = response; this.folderDataset.forExperiment = this.experiment; this.folderDataset.selectFile(this.dataset); + this.goToPage(1); }); }); } @@ -258,6 +261,9 @@ export class ExperimentComponent implements AfterViewInit { this.step2 = true; setTimeout(() => { this.folderModel.updateExperiment(); + this.folderModel.selectFile(undefined); + this.folderModel.selectTab(TabType.NewFile); + this.goToPage(2); }); } @@ -276,9 +282,6 @@ export class ExperimentComponent implements AfterViewInit { setTimeout(() => { this.columnTable.loadDataset(d); }); - - this.folderModel.selectFile(undefined); - this.folderModel.selectTab(TabType.NewFile); // REFRESH GRAFIKA (4. KORAKA) URADITI } -- cgit v1.2.3 From 09a33e72501affb6d07507e396151f02d16daf9a Mon Sep 17 00:00:00 2001 From: Danijel Anđelković Date: Mon, 6 Jun 2022 02:45:47 +0200 Subject: Dodao deljenje datasetova i modela, dialog za podesavanje opcija za deljenje (isPublic accessibleByLink), sa mogucnoscu kopiranja linka za deljenje. Dodao stranice za prikaz javnih datasetova / modela. --- backend/api/api/Controllers/DatasetController.cs | 32 ++++++++++ backend/api/api/Controllers/ModelController.cs | 32 ++++++++++ backend/api/api/Interfaces/IDatasetService.cs | 3 + backend/api/api/Interfaces/IModelService.cs | 3 + backend/api/api/Services/DatasetService.cs | 20 +++++- backend/api/api/Services/ModelService.cs | 16 +++++ docs/SpecifikacijaDizajnaSoftvera.docx | Bin 0 -> 5793452 bytes .../_charts/line-chart/line-chart.component.css | 3 +- .../_charts/line-chart/line-chart.component.html | 10 ++- .../src/app/_elements/folder/folder.component.html | 10 ++- .../src/app/_elements/folder/folder.component.ts | 36 ++++++++++- .../form-dataset/form-dataset.component.html | 8 +-- .../form-dataset/form-dataset.component.ts | 1 + .../_elements/form-model/form-model.component.ts | 2 + .../share-dialog/share-dialog.component.css | 0 .../share-dialog/share-dialog.component.html | 14 +++++ .../share-dialog/share-dialog.component.spec.ts | 25 ++++++++ .../_modals/share-dialog/share-dialog.component.ts | 70 +++++++++++++++++++++ .../_pages/page-dataset/page-dataset.component.css | 0 .../page-dataset/page-dataset.component.html | 4 ++ .../page-dataset/page-dataset.component.spec.ts | 25 ++++++++ .../_pages/page-dataset/page-dataset.component.ts | 45 +++++++++++++ .../app/_pages/page-model/page-model.component.css | 0 .../_pages/page-model/page-model.component.html | 4 ++ .../_pages/page-model/page-model.component.spec.ts | 25 ++++++++ .../app/_pages/page-model/page-model.component.ts | 41 ++++++++++++ frontend/src/app/_services/datasets.service.ts | 8 +++ frontend/src/app/_services/models.service.ts | 8 +++ frontend/src/app/app-routing.module.ts | 4 ++ frontend/src/app/app.module.ts | 8 ++- frontend/src/styles/layout.css | 12 +++- 31 files changed, 449 insertions(+), 20 deletions(-) create mode 100644 docs/SpecifikacijaDizajnaSoftvera.docx create mode 100644 frontend/src/app/_modals/share-dialog/share-dialog.component.css create mode 100644 frontend/src/app/_modals/share-dialog/share-dialog.component.html create mode 100644 frontend/src/app/_modals/share-dialog/share-dialog.component.spec.ts create mode 100644 frontend/src/app/_modals/share-dialog/share-dialog.component.ts create mode 100644 frontend/src/app/_pages/page-dataset/page-dataset.component.css create mode 100644 frontend/src/app/_pages/page-dataset/page-dataset.component.html create mode 100644 frontend/src/app/_pages/page-dataset/page-dataset.component.spec.ts create mode 100644 frontend/src/app/_pages/page-dataset/page-dataset.component.ts create mode 100644 frontend/src/app/_pages/page-model/page-model.component.css create mode 100644 frontend/src/app/_pages/page-model/page-model.component.html create mode 100644 frontend/src/app/_pages/page-model/page-model.component.spec.ts create mode 100644 frontend/src/app/_pages/page-model/page-model.component.ts (limited to 'frontend/src/app/_elements/form-dataset') diff --git a/backend/api/api/Controllers/DatasetController.cs b/backend/api/api/Controllers/DatasetController.cs index c93ac9db..9a3c3d86 100644 --- a/backend/api/api/Controllers/DatasetController.cs +++ b/backend/api/api/Controllers/DatasetController.cs @@ -282,5 +282,37 @@ namespace api.Controllers return Ok($"Dataset with ID = {id} deleted"); } + + [HttpPut("UpdateAccessibleByLink/{datasetId}")] + [Authorize(Roles = "User")] + public ActionResult UpdateAccessibleByLink(string datasetId, [FromBody] bool accessibleByLink) + { + string uploaderId = getUserId(); + + Dataset dataset = _datasetService.GetOneDataset(datasetId); + + if (uploaderId != dataset.uploaderId) + return Unauthorized(); + + _datasetService.UpdateAccessibleByLink(datasetId, accessibleByLink); + + return Ok(dataset.accessibleByLink); + } + + [HttpPut("UpdateIsPublic/{datasetId}")] + [Authorize(Roles = "User")] + public ActionResult UpdateIsPublic(string datasetId, [FromBody] bool isPublic) + { + string uploaderId = getUserId(); + + Dataset dataset = _datasetService.GetOneDataset(datasetId); + + if (uploaderId != dataset.uploaderId) + return Unauthorized(); + + _datasetService.UpdateIsPublic(datasetId, isPublic); + + return Ok(dataset.isPublic); + } } } \ No newline at end of file diff --git a/backend/api/api/Controllers/ModelController.cs b/backend/api/api/Controllers/ModelController.cs index c574de28..c7dfe89c 100644 --- a/backend/api/api/Controllers/ModelController.cs +++ b/backend/api/api/Controllers/ModelController.cs @@ -312,6 +312,38 @@ namespace api.Controllers } + [HttpPut("UpdateAccessibleByLink/{modelId}")] + [Authorize(Roles = "User")] + public ActionResult UpdateAccessibleByLink(string modelId, [FromBody] bool accessibleByLink) + { + string uploaderId = getUserId(); + + Model model = _modelService.GetOneModel(modelId); + + if (uploaderId != model.uploaderId) + return Unauthorized(); + + _modelService.UpdateAccessibleByLink(modelId, accessibleByLink); + + return Ok(model.accessibleByLink); + } + + [HttpPut("UpdateIsPublic/{modelId}")] + [Authorize(Roles = "User")] + public ActionResult UpdateIsPublic(string modelId, [FromBody] bool isPublic) + { + string uploaderId = getUserId(); + + Model model = _modelService.GetOneModel(modelId); + + if (uploaderId != model.uploaderId) + return Unauthorized(); + + _modelService.UpdateIsPublic(modelId, isPublic); + + return Ok(model.isPublic); + } + } public class TrainModelObject diff --git a/backend/api/api/Interfaces/IDatasetService.cs b/backend/api/api/Interfaces/IDatasetService.cs index 2f7d0010..5a91c82b 100644 --- a/backend/api/api/Interfaces/IDatasetService.cs +++ b/backend/api/api/Interfaces/IDatasetService.cs @@ -19,5 +19,8 @@ namespace api.Services public void Update(Dataset dataset); string GetDatasetId(string fileId); //bool CheckDb(); + + public void UpdateAccessibleByLink(string datasetId, bool accessibleByLink); + public void UpdateIsPublic(string datasetId, bool isPublic); } } diff --git a/backend/api/api/Interfaces/IModelService.cs b/backend/api/api/Interfaces/IModelService.cs index 41cd279c..949c7278 100644 --- a/backend/api/api/Interfaces/IModelService.cs +++ b/backend/api/api/Interfaces/IModelService.cs @@ -19,6 +19,9 @@ namespace api.Services void Delete(string userId, string name); bool CheckHyperparameters(int inputNeurons, int hiddenLayerNeurons, int hiddenLayers, int outputNeurons); bool CheckDb(); + + public void UpdateAccessibleByLink(string modelId, bool accessibleByLink); + public void UpdateIsPublic(string modelId, bool isPublic); } } diff --git a/backend/api/api/Services/DatasetService.cs b/backend/api/api/Services/DatasetService.cs index 0b84721e..cd27f275 100644 --- a/backend/api/api/Services/DatasetService.cs +++ b/backend/api/api/Services/DatasetService.cs @@ -75,7 +75,7 @@ namespace api.Services public Dataset GetOneDataset(string userId, string id) { - return _dataset.Find(dataset => dataset.uploaderId == userId && dataset._id == id && dataset.isPreProcess).FirstOrDefault(); + return _dataset.Find(dataset => (dataset.uploaderId == userId || dataset.isPublic || dataset.accessibleByLink) && dataset._id == id && dataset.isPreProcess).FirstOrDefault(); } public Dataset GetOneDatasetN(string userId, string name) { @@ -104,6 +104,22 @@ namespace api.Services return dataset._id; } - + + public void UpdateAccessibleByLink(string datasetId, bool accessibleByLink) + { + Dataset dataset = _dataset.Find(dataset => dataset._id == datasetId).FirstOrDefault(); + dataset.accessibleByLink = accessibleByLink; + + _dataset.ReplaceOne(dataset => dataset._id == datasetId, dataset); + } + + public void UpdateIsPublic(string datasetId, bool isPublic) + { + Dataset dataset = _dataset.Find(dataset => dataset._id == datasetId).FirstOrDefault(); + dataset.isPublic = isPublic; + + _dataset.ReplaceOne(dataset => dataset._id == datasetId, dataset); + } + } } diff --git a/backend/api/api/Services/ModelService.cs b/backend/api/api/Services/ModelService.cs index 71db6340..1c690ca7 100644 --- a/backend/api/api/Services/ModelService.cs +++ b/backend/api/api/Services/ModelService.cs @@ -106,5 +106,21 @@ namespace api.Services return true; } + + public void UpdateAccessibleByLink(string modelId, bool accessibleByLink) + { + Model model = _model.Find(model => model._id == modelId).FirstOrDefault(); + model.accessibleByLink = accessibleByLink; + + _model.ReplaceOne(model => model._id == modelId, model); + } + + public void UpdateIsPublic(string modelId, bool isPublic) + { + Model model = _model.Find(model => model._id == modelId).FirstOrDefault(); + model.isPublic = isPublic; + + _model.ReplaceOne(model => model._id == modelId, model); + } } } diff --git a/docs/SpecifikacijaDizajnaSoftvera.docx b/docs/SpecifikacijaDizajnaSoftvera.docx new file mode 100644 index 00000000..dfc5345b Binary files /dev/null and b/docs/SpecifikacijaDizajnaSoftvera.docx differ diff --git a/frontend/src/app/_elements/_charts/line-chart/line-chart.component.css b/frontend/src/app/_elements/_charts/line-chart/line-chart.component.css index 862a86e1..60b341d0 100644 --- a/frontend/src/app/_elements/_charts/line-chart/line-chart.component.css +++ b/frontend/src/app/_elements/_charts/line-chart/line-chart.component.css @@ -22,7 +22,8 @@ canvas { } .hide { - display: none; + display: none !important; + background-color: red; } .dl-button { diff --git a/frontend/src/app/_elements/_charts/line-chart/line-chart.component.html b/frontend/src/app/_elements/_charts/line-chart/line-chart.component.html index cc1c0121..505dd50b 100644 --- a/frontend/src/app/_elements/_charts/line-chart/line-chart.component.html +++ b/frontend/src/app/_elements/_charts/line-chart/line-chart.component.html @@ -1,5 +1,5 @@
-
+
@@ -9,18 +9,16 @@
-
-
+
+
-
+
- -

Model treniran za konfiguraciju: {{modelName}}Model se trenira za konfiguraciju: {{modelName}}

+ @@ -122,12 +125,15 @@
- - +