diff options
author | Danijel Anđelković <adanijel99@gmail.com> | 2022-05-03 18:51:15 +0200 |
---|---|---|
committer | Danijel Anđelković <adanijel99@gmail.com> | 2022-05-03 18:51:15 +0200 |
commit | ec1235f53500181bb4476d86062c33e1175507dd (patch) | |
tree | 8b46145abba2e994dae9704f98a273ce8af997ad /frontend/src/app/_elements | |
parent | 0c69973c035e5ce8dfaf56fecd008b45b725aa8a (diff) |
Dodao fajl za stil fontova, povezao tabove u folderu i ispravio neke greske.
Diffstat (limited to 'frontend/src/app/_elements')
4 files changed, 136 insertions, 70 deletions
diff --git a/frontend/src/app/_elements/folder/folder.component.css b/frontend/src/app/_elements/folder/folder.component.css index 7f1003cc..2340ee8a 100644 --- a/frontend/src/app/_elements/folder/folder.component.css +++ b/frontend/src/app/_elements/folder/folder.component.css @@ -129,6 +129,8 @@ .list-view { height: 100%; overflow-y: auto; + display: flex; + flex-direction: column; } .list-item { @@ -138,6 +140,7 @@ align-items: center; justify-content: space-between; border-bottom: 1px solid var(--ns-primary); + flex-shrink: 0; } .list-item:hover { @@ -149,6 +152,15 @@ display: none; } +.list-add { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + flex-grow: 1; + height: 100%; +} + .folder-inside { width: 100%; height: 40rem; @@ -186,4 +198,8 @@ .file-button:hover { background-color: var(--ns-primary); +} + +.form-hidden { + display: none; }
\ 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 36f70c97..e77f837e 100644 --- a/frontend/src/app/_elements/folder/folder.component.html +++ b/frontend/src/app/_elements/folder/folder.component.html @@ -1,9 +1,9 @@ <div id="folder"> <div id="tabs"> - <div id="new-file-tab" class="folder-tab p-1 rounded-top" [style]="'z-index:' + (selectedTab == TabType.NewFile ? 11 : 10) + ' ;'" [ngClass]="{'selected-tab' : selectedTab == TabType.NewFile, 'hover-tab' : hoverTab == TabType.NewFile}"> + <div id="new-file-tab" *ngIf="newFile" class="folder-tab p-1 rounded-top" [style]="'z-index:' + (selectedTab == TabType.NewFile ? 11 : 10) + ' ;'" [ngClass]="{'selected-tab' : selectedTab == TabType.NewFile, 'hover-tab' : hoverTab == TabType.NewFile}"> <mat-icon class="text-offwhite">add</mat-icon> <a class="stretched-link tab-link" (click)="selectTab(TabType.NewFile)" (mouseenter)="hoverOverTab(TabType.NewFile)" (mouseleave)="hoverOverTab(TabType.None)"> - {{tabTitles[TabType.NewFile]}} + {{newFile.name}} </a> </div> <!--<div class="folder-tab p-1 rounded-top" *ngFor="let file of filteredFiles; let i = index" [style]="'z-index:' + calcZIndex(i) + ' ;'" [ngClass]="{'selected-tab' : selectedFileIndex == i, 'hover-tab' : hoveringOverFileIndex == i}"> @@ -12,6 +12,10 @@ <div class="folder-tab p-1 rounded-top" *ngFor="let tab of tabsToShow; let i = index" [style]="'z-index:' + (selectedTab == tab ? 11 : (tabsToShow.length - i)) + ' ;'" [ngClass]="{'selected-tab' : selectedTab == tab, 'hover-tab' : hoverTab == tab}"> <a class="m-1 stretched-link tab-link" (click)="selectTab(tab)" (mouseenter)="hoverOverTab(tab)" (mouseleave)="hoverOverTab(TabType.None)">{{tabTitles[tab]}}</a> </div> + + <div class="folder-tab p-1 rounded-top" *ngIf="selectedFile" [style]="'z-index:' + (selectedTab == TabType.File ? 11 : (tabsToShow.length)) + ' ;'" [ngClass]="{'selected-tab' : selectedTab == TabType.File, 'hover-tab' : hoverTab == TabType.File}"> + <a class="m-1 stretched-link tab-link" (click)="selectTab(TabType.File)" (mouseenter)="hoverOverTab(TabType.File)" (mouseleave)="hoverOverTab(TabType.None)">{{selectedFile.name}}</a> + </div> </div> <div id="selected-content" class="rounded-bottom text-offwhite"> <div id="searchbar" *ngIf="listView"> @@ -49,35 +53,40 @@ </div> </div> <!--{{fileToDisplay ? fileToDisplay.name : 'No file selected.'}} {{selectedFileIndex}} {{hoveringOverFileIndex}}--> - <div [ngSwitch]="listView" class="folder-inside bg-blur"> - <div class="file-content" [ngSwitch]="type" *ngSwitchCase="false"> + <div class="folder-inside bg-blur"> + <div class="file-content" [ngClass]="{'form-hidden' : listView}"> <div class="file-bottom-buttons"> <button class="btn-clear file-button" (click)="deleteFile()"> <mat-icon>delete</mat-icon> </button> <button class="btn-clear file-button"> - <mat-icon>link</mat-icon> + <mat-icon>share</mat-icon> </button> <button class="btn-clear file-button"> <mat-icon>zoom_out_map</mat-icon> </button> </div> - <app-form-model [forExperiment]="forExperiment" [model]="fileToDisplay" *ngSwitchCase="FolderType.Model"></app-form-model> - <app-form-dataset *ngSwitchCase="FolderType.Dataset" ></app-form-dataset> + <app-form-model [forExperiment]="forExperiment" [model]="fileToDisplay" [ngClass]="{'form-hidden': type != FolderType.Model}"></app-form-model> + <app-form-dataset [ngClass]="{'form-hidden': type != FolderType.Dataset}"></app-form-dataset> </div> - <div *ngSwitchCase="true" class="list-view"> - <div *ngFor="let file of filteredFiles; let i = index" class="list-item"> + <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"> - <a class="force-link" (click)="selectFile(i)">{{file.name}}</a> + {{file.name}} </div> <div class="mx-2 hover-hide"> {{file.lastUpdated | date}} </div> </div> + <div class="list-add" [ngSwitch]="type"> + <button mat-raised-button *ngSwitchCase="FolderType.Dataset" (click)="selectNewFile()">Dodaj {{privacy == Privacy.Public ? 'javni ' : ' '}}izvor podataka</button> + <button mat-raised-button *ngSwitchCase="FolderType.Model" (click)="selectNewFile()">Dodaj {{privacy == Privacy.Public ? 'javnu ' : ' '}}konfiguraciju neuronske mreže</button> + <button mat-raised-button *ngSwitchCase="FolderType.Experiment" routerLink="/experiment">Dodaj eksperiment</button> + </div> </div> </div> </div> - <div id="footer" [ngSwitch]="newFileSelected"> + <div id="footer" [ngSwitch]="newFileSelected" *ngIf="!listView"> <button mat-button (click)="saveNewFile()" class="bottom-button text-offwhite rounded-bottom" *ngSwitchCase="true"> <div class="f-row"> <div>Sačuvaj</div> diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts index 06b4d893..c97a01b6 100644 --- a/frontend/src/app/_elements/folder/folder.component.ts +++ b/frontend/src/app/_elements/folder/folder.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import Dataset from 'src/app/_data/Dataset'; import { FolderFile, FolderType } from 'src/app/_data/FolderFile'; import Model from 'src/app/_data/Model'; @@ -15,19 +15,18 @@ import { PredictorsService } from 'src/app/_services/predictors.service'; templateUrl: './folder.component.html', styleUrls: ['./folder.component.css'] }) -export class FolderComponent implements OnInit { +export class FolderComponent implements AfterViewInit { @ViewChild(FormDatasetComponent) formDataset?: FormDatasetComponent; @Input() folderName: string = 'Moji podaci'; - @Input() files!: FolderFile[] newFile!: Dataset | Model; @Input() type: FolderType = FolderType.Dataset; - @Input() forExperiment?: Experiment; + @Input() startingTab: TabType = TabType.MyDatasets; newFileSelected: boolean = true; @@ -50,26 +49,21 @@ export class FolderComponent implements OnInit { this.folders[TabType.File] = []; this.folders[TabType.NewFile] = []; - this.refreshFiles(); - - } - ngOnInit(): void { - if (this.files.length > 0) - this.selectFile(0); - else { - this.selectNewFile(); - } + ngAfterViewInit(): void { + this.refreshFiles(); } - displayFile(){ - if(this.type == FolderType.Dataset) + _initialized = false; + + displayFile() { + if (this.type == FolderType.Dataset) this.formDataset!.dataset = <Dataset>this.fileToDisplay; } hoverOverFile(i: number) { - this.hoveringOverFileIndex = i; + /*this.hoveringOverFileIndex = i; if (i != -1) { this.fileToDisplay = this.files[i]; } else { @@ -79,7 +73,7 @@ export class FolderComponent implements OnInit { this.fileToDisplay = this.files[this.selectedFileIndex]; } } - this.displayFile(); + this.displayFile();*/ } selectNewFile() { @@ -87,20 +81,20 @@ export class FolderComponent implements OnInit { this.createNewFile(); } this.fileToDisplay = this.newFile; - this.selectedFile = this.newFile; this.newFileSelected = true; this.listView = false; this.selectedFileChanged.emit(this.newFile); this.displayFile(); } - selectFile(index: number) { - this.selectedFile = this.filteredFiles[index]; - this.fileToDisplay = this.filteredFiles[index]; + selectFile(file?: FolderFile) { + this.selectedFile = file; + this.fileToDisplay = file; this.newFileSelected = false; this.listView = false; this.selectedFileChanged.emit(this.selectedFile); this.displayFile(); + this.selectTab(TabType.File); } createNewFile() { @@ -115,7 +109,11 @@ export class FolderComponent implements OnInit { this.okPressed.emit(); } - refreshFiles(){ + refreshFiles() { + this.tabsToShow.forEach(tab => { + this.folders[tab] = []; + }) + this.datasetsService.getMyDatasets().subscribe((datasets) => { this.folders[TabType.MyDatasets] = datasets; }); @@ -137,17 +135,16 @@ export class FolderComponent implements OnInit { this.folders[TabType.MyExperiments] = experiments; }); - this.files = []; - - this.filteredFiles.length = 0; - this.filteredFiles.push(...this.files); - - this.searchTermsChanged(); - + if (!this._initialized) { + this.selectTab(this.startingTab); + this._initialized = true; + } + else + this.searchTermsChanged(); } saveNewFile() { - if(this.type == FolderType.Dataset) + if (this.type == FolderType.Dataset) this.formDataset!.uploadDataset(); } @@ -159,7 +156,7 @@ export class FolderComponent implements OnInit { zIndex = this.files.length + 3; return zIndex; } - + newFileZIndex() { return (this.files.length + 1); }*/ @@ -174,16 +171,19 @@ export class FolderComponent implements OnInit { searchTermsChanged() { this.filteredFiles.length = 0; this.filteredFiles.push(...this.files.filter((file) => file.name.toLowerCase().includes(this.searchTerm.toLowerCase()))); - if (this.selectedFile) { + /*if (this.selectedFile) { if (!this.filteredFiles.includes(this.selectedFile)) { - this.selectFile(-1); + if (this.hoverTab === TabType.None && this.getFolderType(this.selectedTab) === this.type) { + this.selectFile(undefined); + console.log(this.getFolderType(this.selectedTab), this.type); + } } else { - this.selectedFileIndex = this.filteredFiles.indexOf(this.selectedFile); + //this.selectedFileIndex = this.filteredFiles.indexOf(this.selectedFile); } - } + }*/ } - listView: boolean = false; + listView: boolean = true; toggleListView() { this.listView = !this.listView; @@ -206,51 +206,92 @@ export class FolderComponent implements OnInit { }; FolderType = FolderType; - + Privacy = Privacy; TabType = TabType; + privacy: Privacy = Privacy.Private; + @Input() tabsToShow: TabType[] = [ TabType.MyDatasets, TabType.PublicDatasets, TabType.MyModels, TabType.PublicModels, - TabType.MyExperiments, - TabType.File + TabType.MyExperiments ] @Input() selectedTab: TabType = TabType.NewFile; hoverTab: TabType = TabType.None; selectTab(tab: TabType) { - this.checkListView(tab); + if (tab == TabType.NewFile) { + + this.selectNewFile(); + } + + this.listView = this.getListView(tab); + this.type = this.getFolderType(tab); + this.previousPrivacy = this.privacy; + this.privacy = this.getPrivacy(tab); this.selectedTab = tab; this.files = this.folders[tab]; - this.searchTermsChanged(); + if (tab !== TabType.File && tab !== TabType.NewFile) + this.searchTermsChanged(); } - checkListView(tab: TabType) { + getListView(tab: TabType) { switch (tab) { case TabType.File: case TabType.NewFile: case TabType.None: - this.listView = false; - break; + return false; case TabType.MyExperiments: case TabType.MyDatasets: case TabType.MyModels: case TabType.PublicDatasets: case TabType.PublicModels: - this.listView = true; - break; + return true; + default: + return false; + } + } + + getFolderType(tab: TabType) { + switch (tab) { + case TabType.MyExperiments: + return FolderType.Experiment; + case TabType.MyDatasets: + case TabType.PublicDatasets: + return FolderType.Dataset; + case TabType.MyModels: + case TabType.PublicModels: + return FolderType.Model; + default: + return this.type; + } + } + + previousPrivacy: Privacy = Privacy.Private; + + getPrivacy(tab: TabType) { + switch (tab) { + case TabType.PublicDatasets: + case TabType.PublicModels: + return Privacy.Public; + case TabType.None: + return this.previousPrivacy; + default: + return Privacy.Private; } } hoverOverTab(tab: TabType) { - this.checkListView(tab); + this.listView = this.getListView(tab); + this.previousPrivacy = this.privacy; + this.privacy = this.getPrivacy(tab); this.hoverTab = tab; if (tab == TabType.None) { - this.checkListView(this.selectedTab); + this.listView = this.getListView(this.selectedTab); this.files = this.folders[this.selectedTab]; } else { this.files = this.folders[tab]; 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 ee65bdc6..80476292 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -1,10 +1,10 @@ -<div class="folderBox"> +<div class="folderBox" *ngIf="dataset"> <div class="row"> <div class="bottomBar"> <div class="row"> <div class="col-sm mb-3"> - <div class="fileButton"> + <div class="fileButton"> <button type="button" mat-raised-button (click)="fileInput.click()">Choose File</button> <label>{{filename}}</label> </div> @@ -15,8 +15,8 @@ <div class="row"> <mat-form-field class="example-full-width" appearance="fill"> <mat-label>Naziv</mat-label> - <input type="text" matInput value="{{dataset?.name}}" [(ngModel)]="dataset.name" > - + <input type="text" matInput value="{{dataset?.name}}" [(ngModel)]="dataset.name"> + <mat-error *ngIf="nameFormControl.hasError('required')"> Naziv je <strong>obavezan</strong> @@ -39,19 +39,19 @@ </div> </div> - + <div class="row"> <div class="file-container" [ngClass]="{'dottedClass': !tableData.hasInput}"> - + <i class="material-icons-outlined icon-display" [ngClass]="{'hidden': tableData.hasInput}">file_upload</i> - - <input class="file" id="file-upload" (change)="changeListener($event)" #fileInput type="file" accept=".csv"> - + + <input class="file" id="file-upload" (change)="changeListener($event)" #fileInput type="file" accept=".csv"> + <div class="mt-5 datatable"> <app-datatable [tableData]="tableData"></app-datatable> </div> - - + + </div> </div> |