diff options
Diffstat (limited to 'frontend/src')
-rw-r--r-- | frontend/src/app/_elements/dataset-load/dataset-load.component.html | 40 | ||||
-rw-r--r-- | frontend/src/app/_elements/dataset-load/dataset-load.component.ts | 41 | ||||
-rw-r--r-- | frontend/src/app/_pages/login-page/login-page.component.html | 3 | ||||
-rw-r--r-- | frontend/src/app/app.module.ts | 8 | ||||
-rw-r--r-- | frontend/src/app/material.module.ts | 18 | ||||
-rw-r--r-- | frontend/src/custom-theme.scss | 35 | ||||
-rw-r--r-- | frontend/src/index.html | 5 | ||||
-rw-r--r-- | frontend/src/styles.css | 6 |
8 files changed, 110 insertions, 46 deletions
diff --git a/frontend/src/app/_elements/dataset-load/dataset-load.component.html b/frontend/src/app/_elements/dataset-load/dataset-load.component.html index 0b62a515..c89add43 100644 --- a/frontend/src/app/_elements/dataset-load/dataset-load.component.html +++ b/frontend/src/app/_elements/dataset-load/dataset-load.component.html @@ -1,46 +1,40 @@ <div> <input style="display: inline-block; width:350px;" list=delimiterOptions - placeholder="Izaberite ili ukucajte delimiter za .csv fajl" class="form-control" [(ngModel)]="delimiter"> + placeholder="Izaberite ili ukucajte delimiter za .csv fajl" class="form-control" [(ngModel)]="delimiter" + (input)="update()"> <datalist id=delimiterOptions> <option *ngFor="let option of delimiterOptions">{{option}}</option> </datalist> - - <input style="display: inline-block" [ngStyle]="{width:'350px'}" list=headerOptions - placeholder="Da li .csv ima header?" class="form-control" [(ngModel)]="header"> - <datalist id=headerOptions> - <option *ngFor="let option of headerOptions">{{option}}</option> - </datalist> - + + <label for="checkboxHeader">Da li .csv ima header?</label> + <input (input)="update()" [(ngModel)]="hasHeader" type="checkbox" value="" id="checkboxHeader" checked> <br><br> - <input class="form-control mb-5" type="file" class="upload" (change)="changeListener($event)"> + <input id="fileInput" class="form-control mb-5" type="file" class="upload" (change)="changeListener($event)" accept=".csv"> - <table class="table table-bordered table-light mt-5"> + <table *ngIf="csvRecords.length > 0 && hasHeader" class="table table-bordered table-light mt-5"> <thead> <tr> <th *ngFor="let item of csvRecords[0]; let i = index">{{item}}</th> </tr> </thead> <tbody> - <!--<tr *ngFor="let row of csvRecords | ((header == 'Da') ? (slice:1:11) : (slice:0:11))">--> - <!--<ng-container *ngIf="header == 'Da'"> - <tr *ngFor="let row of csvRecords | slice:1:11"> - <td *ngFor="let col of row">{{col}}</td> - </tr> - </ng-container> - <ng-container *ngIf="header == 'Ne'"> - <tr *ngFor="let row of csvRecords | slice:0:10"> - <td *ngFor="let col of row">{{col}}</td> - </tr> - </ng-container>--> - <tr *ngFor="let row of csvRecords | slice:1:11"> <td *ngFor="let col of row">{{col}}</td> </tr> </tbody> </table> - <div *ngIf="csvRecords[0]" id="info"> + + <table *ngIf="csvRecords.length > 0 && !hasHeader" class="table table-bordered table-light mt-5"> + <tbody> + <tr *ngFor="let row of csvRecords | slice:0:10"> + <td *ngFor="let col of row">{{col}}</td> + </tr> + </tbody> + </table> + + <div *ngIf="csvRecords.length > 0" id="info"> . . . <br> {{rowsNumber}} x {{colsNumber}} </div> diff --git a/frontend/src/app/_elements/dataset-load/dataset-load.component.ts b/frontend/src/app/_elements/dataset-load/dataset-load.component.ts index 7cdfe384..843a5709 100644 --- a/frontend/src/app/_elements/dataset-load/dataset-load.component.ts +++ b/frontend/src/app/_elements/dataset-load/dataset-load.component.ts @@ -11,12 +11,12 @@ export class DatasetLoadComponent { delimiter: string = ""; delimiterOptions: Array<string> = [",", ";", "\t", "razmak", "|"]; //podrazumevano "," - header: string = ""; - headerOptions: Array<string> = ["Da", "Ne"]; //podrazumevano je "Da" ======> false + hasHeader: boolean = true; slice: string = ""; csvRecords: any[] = []; + files: any[] = []; rowsNumber: number = 0; colsNumber: number = 0; @@ -25,25 +25,30 @@ export class DatasetLoadComponent { @ViewChild('fileImportInput', { static: false }) fileImportInput: any; - changeListener($event: any): void { + changeListener($event: any): void { + this.files = $event.srcElement.files; + this.update(); + } - const files = $event.srcElement.files; + update() { - this.ngxCsvParser.parse(files[0], { header: (this.header == "") ? false : (this.header == "Da") ? false : true, delimiter: (this.delimiter == "razmak") ? " " : (this.delimiter == "") ? "," : this.delimiter}) - .pipe().subscribe((result) => { + if (this.files.length < 1) + return; - console.log('Result', result); - if (result.constructor === Array) { - this.csvRecords = result; - this.rowsNumber = this.csvRecords.length; - this.colsNumber = this.csvRecords[0].length; - } - - }, (error: NgxCSVParserError) => { - console.log('Error', error); - }); + this.ngxCsvParser.parse(this.files[0], { header: false, delimiter: (this.delimiter == "razmak") ? " " : (this.delimiter == "") ? "," : this.delimiter}) + .pipe().subscribe((result) => { + //console.log('Result', result); + if (result.constructor === Array) { + this.csvRecords = result; + if (this.hasHeader) + this.rowsNumber = this.csvRecords.length - 1; + else + this.rowsNumber = this.csvRecords.length; + this.colsNumber = this.csvRecords[0].length; + } + }, (error: NgxCSVParserError) => { + console.log('Error', error); + }); } - - } diff --git a/frontend/src/app/_pages/login-page/login-page.component.html b/frontend/src/app/_pages/login-page/login-page.component.html index 87e2a78e..76a4ee7b 100644 --- a/frontend/src/app/_pages/login-page/login-page.component.html +++ b/frontend/src/app/_pages/login-page/login-page.component.html @@ -5,7 +5,8 @@ <div class="container p-5 rounded-3 shadow-sm border" style="max-width: 50em; margin-top: 50px;"> <h3 class="text-center pb-5">Prijavite se</h3> <form> - <!-- Email input --> + <!-- Username input --> + <!-- Username input --> <div class="form-outline mb-4"> <label class="form-label" for="username">Korisničko ime</label> <input [(ngModel)]="username" name="username" type="text" id="username" diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 16bb7ce5..aa5d018d 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -10,8 +10,10 @@ import { RegisterPageComponent } from './_pages/register-page/register-page.comp import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { OnlyAuthorizedComponent } from './_pages/only-authorized/only-authorized.component'; import { DatasetLoadComponent } from './_elements/dataset-load/dataset-load.component'; -import { NgxCsvParser } from 'ngx-csv-parser'; import { AddModelComponent } from './_pages/add-model/add-model.component'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +import { MaterialModule } from './material.module'; @NgModule({ declarations: [ @@ -27,7 +29,9 @@ import { AddModelComponent } from './_pages/add-model/add-model.component'; AppRoutingModule, FormsModule, HttpClientModule, - NgbModule + NgbModule, + BrowserAnimationsModule, + MaterialModule ], providers: [], bootstrap: [AppComponent] diff --git a/frontend/src/app/material.module.ts b/frontend/src/app/material.module.ts new file mode 100644 index 00000000..e85419ee --- /dev/null +++ b/frontend/src/app/material.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; + +import { MatDialogModule } from '@angular/material/dialog'; +import { MatButtonModule } from '@angular/material/button'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatCheckboxModule } from '@angular/material/checkbox'; + +@NgModule({ + exports: [ + MatDialogModule, + MatButtonModule, + MatFormFieldModule, + MatInputModule, + MatCheckboxModule + ] +}) +export class MaterialModule {}
\ No newline at end of file diff --git a/frontend/src/custom-theme.scss b/frontend/src/custom-theme.scss new file mode 100644 index 00000000..a6538c37 --- /dev/null +++ b/frontend/src/custom-theme.scss @@ -0,0 +1,35 @@ + +// Custom Theming for Angular Material +// For more information: https://material.angular.io/guide/theming +@use '@angular/material' as mat; +// Plus imports for other components in your app. + +// Include the common styles for Angular Material. We include this here so that you only +// have to load a single css file for Angular Material in your app. +// Be sure that you only ever include this mixin once! +@include mat.core(); + +// Define the palettes for your theme using the Material Design palettes available in palette.scss +// (imported above). For each palette, you can optionally specify a default, lighter, and darker +// hue. Available color palettes: https://material.io/design/color/ +$frontend-primary: mat.define-palette(mat.$indigo-palette); +$frontend-accent: mat.define-palette(mat.$pink-palette, A200, A100, A400); + +// The warn palette is optional (defaults to red). +$frontend-warn: mat.define-palette(mat.$red-palette); + +// Create the theme object. A theme consists of configurations for individual +// theming systems such as "color" or "typography". +$frontend-theme: mat.define-light-theme(( + color: ( + primary: $frontend-primary, + accent: $frontend-accent, + warn: $frontend-warn, + ) +)); + +// Include theme styles for core and each component used in your app. +// Alternatively, you can import and @include the theme mixins for each component +// that you are using. +@include mat.all-component-themes($frontend-theme); + diff --git a/frontend/src/index.html b/frontend/src/index.html index 3af61ec9..b3b6eb54 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -6,8 +6,11 @@ <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="favicon.ico"> + <link rel="preconnect" href="https://fonts.gstatic.com"> + <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet"> + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> </head> -<body> +<body class="mat-typography"> <app-root></app-root> </body> </html> diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 90d4ee00..8997c10e 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1 +1,5 @@ -/* You can add global styles to this file, and also import other style files */ +/* You can add global styles to this file, and also import other style files + +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } +*/
\ No newline at end of file |