aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/app/_elements/form-dataset
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/app/_elements/form-dataset')
-rw-r--r--frontend/src/app/_elements/form-dataset/form-dataset.component.css28
-rw-r--r--frontend/src/app/_elements/form-dataset/form-dataset.component.html76
-rw-r--r--frontend/src/app/_elements/form-dataset/form-dataset.component.ts101
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
+ }
+
+
+
}