diff options
Diffstat (limited to 'frontend/src/app/_elements/form-dataset')
3 files changed, 200 insertions, 5 deletions
diff --git a/frontend/src/app/_elements/form-dataset/form-dataset.component.css b/frontend/src/app/_elements/form-dataset/form-dataset.component.css index e69de29b..1a5bd03d 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.css +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.css @@ -0,0 +1,28 @@ + + + .folderBox + { + width: 100%; + height: 93%; + position: relative; + } + + .icon-display { + position: absolute; + transform: scale(4); + vertical-align: middle; + top: 40%; + left: 50%; + } + .bottomBar + { + position: absolute; + bottom: 0%; + left: 5%; + } + + #bottomButton{ + background-color: var(--ns-bg-dark-100); + width: 10%; + height: 65%; + }
\ No newline at end of file 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 1bc3c3f7..615e3afe 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.html +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.html @@ -1 +1,75 @@ -<p>form-dataset works!</p> +<div class="folderBox"> + + <div > + <mat-icon class="icon-display">upload</mat-icon> + </div> + <!-- + + <div class="px-5 mt-5"> + <app-datatable [tableData]="tableData"></app-datatable> + </div> + --> + + + <div class="bottomBar"> + <div class="row"> + <div class="col-sm"> + <div role="group"> + <div class="row"> + <mat-form-field class="example-full-width" appearance="fill"> + <mat-label>Naziv</mat-label> + <input type="text" matInput value="titanik.csv" ><!--[formControl]="nameFormControl"--> + + <mat-error *ngIf="nameFormControl.hasError('required')"> + Naziv je <strong>obavezan</strong> + </mat-error> + </mat-form-field> + </div> + </div> + </div> + <div class="col-sm mb-3"> + + <input id="fileInput" class="form-control btn-lg" type="file" class="upload" (change)="changeListener($event)" accept=".csv"> + + </div> + <div class="col-sm"> + + <mat-form-field appearance="fill"> + <mat-select id="delimiterOptions" [(ngModel)]="dataset.delimiter" (change)="update()"> + <mat-option *ngFor="let option of delimiterOptions"> + {{ option }} + </mat-option> + </mat-select> + </mat-form-field> + </div> + + <div class="col-sm"> + + <input type="checkbox" class="btn-check" id="checkboxAccessibleByLink" + [(ngModel)]="dataset.accessibleByLink" value=""> + <label class="btn btn-outline-primary" for="checkboxAccessibleByLink"> + <mat-icon>link</mat-icon> + </label> + + </div> + <div class="col-sm"> + <button mat-button id="bottomButton"> + <mat-icon>zoom_in</mat-icon> + </button> + </div> + </div> + </div> + + <div class="btn-group" role="group" aria-label="Button group with nested dropdown"> + + + + </div> + + +<!-- + <div class="d-flex flex-row align-items-center justify-content-center w-100 my-2"> + <button (click)="uploadDataset()" class="btn btn-lg col-4" style="background-color:#003459; color:white;">Dodaj izvor podataka</button> + </div> +--> +</div>
\ No newline at end of file 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 092e943f..9bdd7e14 100644 --- a/frontend/src/app/_elements/form-dataset/form-dataset.component.ts +++ b/frontend/src/app/_elements/form-dataset/form-dataset.component.ts @@ -1,15 +1,108 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, EventEmitter, Output, ViewChild } from '@angular/core'; +import Dataset from 'src/app/_data/Dataset'; +import { DatasetsService } from 'src/app/_services/datasets.service'; +import { ModelsService } from 'src/app/_services/models.service'; +import shared from 'src/app/Shared'; +import { DatatableComponent, TableData } from '../datatable/datatable.component'; +import { CsvParseService } from 'src/app/_services/csv-parse.service'; +import {FormControl, Validators} from '@angular/forms'; @Component({ selector: 'app-form-dataset', templateUrl: './form-dataset.component.html', styleUrls: ['./form-dataset.component.css'] }) -export class FormDatasetComponent implements OnInit { +export class FormDatasetComponent { - constructor() { } + @ViewChild(DatatableComponent) datatable!: DatatableComponent; - ngOnInit(): void { + nameFormControl = new FormControl('', [Validators.required, Validators.email]); + + delimiterOptions: Array<string> = [",", ";", "|", "razmak", "novi red"]; //podrazumevano "," + + csvRecords: any[] = []; + files: File[] = []; + rowsNumber: number = 0; + colsNumber: number = 0; + + dataset: Dataset; //dodaj ! potencijalno + + tableData: TableData = new TableData(); + + constructor(private modelsService: ModelsService, private datasetsService: DatasetsService, private csv: CsvParseService) { + this.dataset = new Dataset(); + this.dataset.delimiter = ','; + } + + //@ViewChild('fileImportInput', { static: false }) fileImportInput: any; cemu je ovo sluzilo? + + changeListener($event: any): void { + this.files = $event.srcElement.files; + if (this.files.length == 0 || this.files[0] == null) { + this.tableData.hasInput = false; + return; + } + else + this.tableData.hasInput = true; + + this.tableData.loaded = false; + this.update(); + } + + update() { + + if (this.files.length < 1) + return; + + const fileReader = new FileReader(); + fileReader.onload = (e) => { + if (typeof fileReader.result === 'string') { + const result = this.csv.csvToArray(fileReader.result, (this.dataset.delimiter == "razmak") ? " " : (this.dataset.delimiter == "novi red") ? "\t" : this.dataset.delimiter) + + if (this.dataset.hasHeader) + this.csvRecords = result.splice(0, 11); + else + this.csvRecords = result.splice(0, 10); + + this.colsNumber = result[0].length; + this.rowsNumber = result.length; + + this.tableData.data = this.csvRecords + this.tableData.hasHeader = this.dataset.hasHeader; + this.tableData.loaded = true; + this.tableData.numCols = this.colsNumber; + this.tableData.numRows = this.rowsNumber; + } + } + fileReader.readAsText(this.files[0]); + } + + checkAccessible() { + if (this.dataset.isPublic) + this.dataset.accessibleByLink = true; } + uploadDataset() { + if (this.files[0] == undefined) { + shared.openDialog("Greška", "Niste izabrali fajl za učitavanje."); + return; + } + + this.modelsService.uploadData(this.files[0]).subscribe((file) => { + //console.log('ADD MODEL: STEP 2 - ADD DATASET WITH FILE ID ' + file._id); + this.dataset.fileId = file._id; + this.dataset.uploaderId = shared.userId; + + this.datasetsService.addDataset(this.dataset).subscribe((dataset) => { + shared.openDialog("Obaveštenje", "Uspešno ste dodali novi izvor podataka u kolekciju. Molimo sačekajte par trenutaka da se procesira."); + }, (error) => { + shared.openDialog("Neuspeo pokušaj!", "Izvor podataka sa unetim nazivom već postoji u Vašoj kolekciji. Izmenite naziv ili iskoristite postojeći dataset."); + }); //kraj addDataset subscribe + }, (error) => { + + }); //kraj uploadData subscribe + } + + + } |