From d28576bff04b0f5ea9a58037ffee7c4157aa2c61 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Wed, 27 Apr 2022 20:55:31 +0200 Subject: Datat checkbox za izbor nasumicnih podataka i podvrdi dugme. Promenjen dizajn. --- frontend/src/app/_elements/column-table/column-table.component.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'frontend/src/app/_elements/column-table/column-table.component.ts') 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 9cb038bc..e938abe4 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.ts +++ b/frontend/src/app/_elements/column-table/column-table.component.ts @@ -1,4 +1,4 @@ -import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChildren } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChildren } from '@angular/core'; import Dataset from 'src/app/_data/Dataset'; import Experiment, { ColumnEncoding, Encoding, NullValReplacer, NullValueOptions } from 'src/app/_data/Experiment'; import { DatasetsService } from 'src/app/_services/datasets.service'; @@ -20,7 +20,7 @@ export class ColumnTableComponent implements AfterViewInit { @Input() dataset?: Dataset; @Input() experiment?: Experiment; @ViewChildren("nullValMenu") nullValMenus!: ElementRef[]; - + @Output() okPressed: EventEmitter = new EventEmitter(); Object = Object; Encoding = Encoding; NullValueOptions = NullValueOptions; @@ -204,5 +204,9 @@ export class ColumnTableComponent implements AfterViewInit { return (document.getElementById(columnName)).value; return '0'; } + ok() { + this.okPressed.emit(); + } + } -- cgit v1.2.3 From ad3d99a96d240dbc6c3d3a725fb1ba177a4cb427 Mon Sep 17 00:00:00 2001 From: Danijel Anđelković Date: Wed, 27 Apr 2022 22:14:13 +0200 Subject: Dodao tabove za razlicite tabele u column-table komponenti. --- .../column-table/column-table.component.css | 87 +++++- .../column-table/column-table.component.html | 307 +++++++++++++-------- .../column-table/column-table.component.ts | 82 ++++-- .../_elements/form-model/form-model.component.html | 2 - 4 files changed, 337 insertions(+), 141 deletions(-) (limited to 'frontend/src/app/_elements/column-table/column-table.component.ts') diff --git a/frontend/src/app/_elements/column-table/column-table.component.css b/frontend/src/app/_elements/column-table/column-table.component.css index f40a3aff..4dfb32ee 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.css +++ b/frontend/src/app/_elements/column-table/column-table.component.css @@ -44,7 +44,6 @@ table.fixed th:first-child { mat-slider { width: 150px; - } .belowColumn { @@ -65,13 +64,13 @@ mat-slider { border-style: solid; border-width: 0px 1px 1px 1px; } + #footer { display: flex; flex-direction: row; justify-content: center; } - #missingValuesHeader { font-size: 12px; line-height: 110% !important; @@ -119,3 +118,87 @@ table ::ng-deep .mat-form-field-wrapper { .graphic-class { background-color: white !important; } + + +/* TABS STYLE */ + +#folder-table { + border: 1px solid var(--ns-primary); + border-radius: 4px; +} + +#tabs { + display: flex; + flex-direction: row; + align-items: flex-end; + height: 3.2rem; +} + +#tabs>.folder-tab:not(:first-child) { + margin-left: -5px; +} + +.folder-tab-end { + margin-left: auto; + color: var(--offwhite) !important; + overflow: hidden; +} + +.folder-tab, +.folder-tab-end { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + position: relative; + overflow-x: hidden; + height: 2.5rem; + background-color: var(--ns-bg-dark-100); + border-color: var(--ns-primary); + color: var(--ns-primary); + border-style: solid; + border-width: 1px 1px 0 1px; +} + +.folder-tab:not(:first-child) { + margin-block-start: auto; +} + +.folder-tab { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.selected-tab { + height: 3rem; + background-color: var(--ns-primary); + color: var(--offwhite); +} + +.hover-tab { + height: 3.2rem; +} + +.selected-tab, +.hover-tab { + width: fit-content !important; +} + +.tab-link { + color: var(--offwhite) !important; + text-decoration: none !important; + cursor: pointer; +} + +.tab-link:active { + text-decoration: underline !important; +} + +.selected-tab { + background-color: var(--ns-primary); +} + +.hidden { + display: none; +} \ No newline at end of file diff --git a/frontend/src/app/_elements/column-table/column-table.component.html b/frontend/src/app/_elements/column-table/column-table.component.html index 56b95c29..5f4412a1 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.html +++ b/frontend/src/app/_elements/column-table/column-table.component.html @@ -1,38 +1,102 @@ - - - - - - - - - - - - - - - - - - -
Naziv -
- #{{i + 1}}  {{colInfo.columnName}} - -
-
Tip - - - Kategorijski - Numerički - - -
Grafik - - -
Statistika - +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + +
# + #{{i + 1}}  {{colInfo.columnName}} + +
#{{i}} +
+ {{col}} +
+
+
+ +
+ + + + + + + + + + + + + +
Naziv + #{{i + 1}}  {{colInfo.columnName}} +
#{{i + 1}}  {{colInfo.columnName}} +
+ 0.1 +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - + + + + +
Naziv +
+ #{{i + 1}}  {{colInfo.columnName}} + +
+
Tip + + + Kategorijski + Numerički + + +
Grafik + + +
Statistika + Mean: {{colInfo.mean}}
Median: {{colInfo.median}}
Min: {{colInfo.min}}
@@ -42,119 +106,122 @@ Q3: {{colInfo.q3}}
-->
-
- +
+ {{uniqueValue}}
-
-
- Enkodiranje  - settings - - - - - {{ optionName }} - - - -
-
Regulisanje
nedostajućih
vrednosti
- settings -
- -
+ Enkodiranje  + settings + + + + + {{ optionName }} + + + +
+
Regulisanje
nedostajućih
vrednosti
+ settings +
+ + - - - - - + + + + + - - - - - + + + + + - + - - + + - - - + + + - - - - + + + + -
Vrednosti
+
+
+
- -
{{testSetDistribution}}% : {{100-testSetDistribution}}%
-
Trening + +
{{testSetDistribution}}% : {{100-testSetDistribution}}%
+
Trening Test
- +
- Nasumicni redosled podataka + Nasumicni redosled podataka
- - - Tip problema - - Regresioni - Binarni-Klasifikacioni - Multi-Klasifikacioni - - - + + + Tip problema + + Regresioni + Binarni-Klasifikacioni + Multi-Klasifikacioni + + +
- - - Izlazna kolona - - {{item.columnName}} - - - + + + Izlazna kolona + + {{item.columnName}} + + +
-
- - +
\ No newline at end of file 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 c48bf869..137c383c 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.ts +++ b/frontend/src/app/_elements/column-table/column-table.component.ts @@ -26,8 +26,8 @@ export class ColumnTableComponent implements AfterViewInit { tableData?: any[][]; nullValOption: string[] = []; - testSetDistribution:number=70; - constructor(private datasetService: DatasetsService, public csvParseService: CsvParseService, public dialog: MatDialog) { + testSetDistribution: number = 70; + constructor(private datasetService: DatasetsService, public csvParseService: CsvParseService, public dialog: MatDialog) { //ovo mi nece trebati jer primam dataset iz druge komponente } @@ -92,13 +92,13 @@ export class ColumnTableComponent implements AfterViewInit { } } openEncodingDialog() { - const dialogRef = this.dialog.open(EncodingDialogComponent, { - width: '300px' - }); - dialogRef.afterClosed().subscribe(selectedEncoding => { - if (selectedEncoding != undefined) - this.resetColumnEncodings(selectedEncoding); - }); + const dialogRef = this.dialog.open(EncodingDialogComponent, { + width: '300px' + }); + dialogRef.afterClosed().subscribe(selectedEncoding => { + if (selectedEncoding != undefined) + this.resetColumnEncodings(selectedEncoding); + }); } resetMissingValuesTreatment(selectedMissingValuesOption: NullValueOptions) { @@ -115,7 +115,7 @@ export class ColumnTableComponent implements AfterViewInit { }); this.nullValOption[i] = "Obriši kolonu"; } - } + } else if (selectedMissingValuesOption == NullValueOptions.DeleteRows) { this.experiment.nullValues = NullValueOptions.DeleteRows; this.experiment.nullValuesReplacers = []; @@ -135,12 +135,12 @@ export class ColumnTableComponent implements AfterViewInit { width: '400px' }); dialogRef.afterClosed().subscribe(selectedMissingValuesOption => { - if (selectedMissingValuesOption != undefined) + if (selectedMissingValuesOption != undefined) this.resetMissingValuesTreatment(selectedMissingValuesOption); }); } - updateTestSet(event:MatSliderChange){ - this.testSetDistribution=event.value!; + updateTestSet(event: MatSliderChange) { + this.testSetDistribution = event.value!; } @@ -160,7 +160,7 @@ export class ColumnTableComponent implements AfterViewInit { arrayElement.option = (replacementType == NullValueOptions.DeleteColumns) ? NullValueOptions.DeleteColumns : NullValueOptions.DeleteRows; arrayElement.value = ""; } - + this.nullValOption[index] = (replacementType == NullValueOptions.DeleteColumns) ? "Obriši kolonu" : "Obriši redove"; } } @@ -169,7 +169,7 @@ export class ColumnTableComponent implements AfterViewInit { if (this.experiment != undefined) { let fillValue = (event.currentTarget).value; let arrayElement = this.experiment.nullValuesReplacers.filter(x => x.column == columnName)[0]; - + if (arrayElement == undefined) { this.experiment.nullValuesReplacers.push({ column: columnName, @@ -195,4 +195,54 @@ export class ColumnTableComponent implements AfterViewInit { } -} + tabs = [ + new Tab(0, 'Podešavanja kolona', Table.Columns), + new Tab(1, 'Podaci', Table.Data), + new Tab(2, 'Korelaciona matrica', Table.CorrelationMatrix) + ] + + selectedTab: Tab = this.tabs[0]; + hoveringOverTab: (Tab | null) = null; + + tabToDisplay: Table = Table.Columns; + + selectTab(index: number) { + this.selectedTab = this.tabs[index]; + this.tabToDisplay = this.tabs[index].value; + } + + hoverOverTab(index: number) { + if (index < 0) { + this.hoveringOverTab = null; + this.tabToDisplay = this.selectedTab.value; + } else { + this.hoveringOverTab = this.tabs[index]; + this.tabToDisplay = this.tabs[index].value; + } + } + + calcZIndex(i: number) { + let zIndex = (this.tabs.length - i - 1) + if (this.selectedTab.index == i) + zIndex = this.tabs.length + 1; + if (this.hoveringOverTab?.index == i) + zIndex = this.tabs.length + 2; + return zIndex; + } + + Table = Table; +} + +export enum Table { + Columns, + Data, + CorrelationMatrix +} + +export class Tab { + constructor( + public index: number, + public name: string, + public value: Table + ) { } +} diff --git a/frontend/src/app/_elements/form-model/form-model.component.html b/frontend/src/app/_elements/form-model/form-model.component.html index 396d40c6..4c5505f0 100644 --- a/frontend/src/app/_elements/form-model/form-model.component.html +++ b/frontend/src/app/_elements/form-model/form-model.component.html @@ -15,7 +15,6 @@ {{ optionName }} - @@ -104,7 +103,6 @@ -
-- cgit v1.2.3