Compare commits

..

6 Commits

Author SHA1 Message Date
Developer 02
6fc8bdc964 chore: Aktualisierung der Version des Angular-Anwendungspakets auf 4.0.0 2024-11-12 14:46:29 +01:00
Developer 02
b3d46aaf30 Chore: Aktualisieren der Version von 3.0.0.0 auf 4.0.0.0. 2024-11-12 14:03:46 +01:00
Developer 02
2870f0e18e refactor(wwwroot): Angular-App aktualisieren 2024-11-12 13:59:20 +01:00
Developer 02
337a0b892e refactor(style.scss): Die Farben der Punktlinien wurden überarbeitet. 2024-11-12 13:49:08 +01:00
Developer 02
2e1bf69889 feat(base-table.component): Erstellt Klick-Ereignis.
- Klick-Ereignisse anstelle von OnSelectedRows-Ereignissen hinzugefügt
2024-11-12 13:46:10 +01:00
Developer 02
0657bbe2c4 feat(user-representation.component): Hinzufügen von Zeilenklassenfunktionalität für die Klassifizierung von Zeiträumen in der Benutzerdarstellungskomponente 2024-11-12 10:02:33 +01:00
20 changed files with 284 additions and 253 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "user-manager-ui", "name": "user-manager-ui",
"version": "0.0.0", "version": "4.0.0",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve --ssl -o", "start": "ng serve --ssl -o",

View File

@@ -15,5 +15,6 @@
[theme]="theme" [theme]="theme"
[rowStyle] = "rowStyle" [rowStyle] = "rowStyle"
[rowClass] = "rowClass" [rowClass] = "rowClass"
(selectedRows)="onSelectedRows($event)"> (selectedRows)="onSelectedRows($event)"
(click)="click && click(this)">
</gui-grid> </gui-grid>

View File

@@ -69,6 +69,10 @@ export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>>
private themeSubscription: Subscription = new Subscription(); private themeSubscription: Subscription = new Subscription();
private static count: number = 0;
public readonly id: number = (BaseTableComponent.count++)
constructor(@Inject(ApiService<TModel>) service: TApiService, columns: Array<GuiColumn>, private cModeService: ColorModeService) { constructor(@Inject(ApiService<TModel>) service: TApiService, columns: Array<GuiColumn>, private cModeService: ColorModeService) {
this.service = service; this.service = service;
if (this.columns.length == 0) if (this.columns.length == 0)
@@ -115,6 +119,8 @@ export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>>
@Input() rowClass: GuiRowClass = {} @Input() rowClass: GuiRowClass = {}
@Input() click: ((table: BaseTableComponent<TModel, TApiService>) => void) | undefined;
selected: boolean = false; selected: boolean = false;
safelyUnselectAll() { safelyUnselectAll() {
this.selected = true this.selected = true

View File

@@ -1,8 +1,8 @@
import { Component, Inject } from '@angular/core'; import { Component } from '@angular/core';
import { UserRep } from '../../../models/user-management.api.models'; import { UserRep } from '../../../models/user-management.api.models';
import { UserRepService } from '../../../services/api/user-representation.service'; import { UserRepService } from '../../../services/api/user-representation.service';
import { BaseTableComponent } from '../base-table/base-table.component'; import { BaseTableComponent } from '../base-table/base-table.component';
import { GuiGridModule, GuiColumn } from '@generic-ui/ngx-grid'; import { GuiGridModule } from '@generic-ui/ngx-grid';
import { ColorModeService } from '../../../services/button/color-mode.service'; import { ColorModeService } from '../../../services/button/color-mode.service';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';

View File

@@ -5,10 +5,10 @@
<div class="col-5"> <div class="col-5">
<mat-tab-group> <mat-tab-group>
<mat-tab label="Benutzer"> <mat-tab label="Benutzer">
<app-user-table #users [onSelectedRows]="userOnSelectedRows"></app-user-table> <app-user-table #users [click]="userOnClick"></app-user-table>
</mat-tab> </mat-tab>
<mat-tab label="Gruppe"> <mat-tab label="Gruppe">
<app-group-table #groups [columns]="groupColumns" [onSelectedRows]="groupOnSelectedRows"></app-group-table> <app-group-table #groups [columns]="groupColumns" [click]="groupOnClick"></app-group-table>
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>
</div> </div>
@@ -16,10 +16,10 @@
<div class="col-4"> <div class="col-4">
<mat-tab-group> <mat-tab-group>
<mat-tab label="Rep. Benutzer"> <mat-tab label="Rep. Benutzer">
<app-user-table #repUsers [onSelectedRows]="repUserOnSelectedRows"></app-user-table> <app-user-table #repUsers [click]="repUserOnClick"></app-user-table>
</mat-tab> </mat-tab>
<mat-tab label="Rep. Gruppen"> <mat-tab label="Rep. Gruppen">
<app-group-table #repGroups [columns]="groupRepCols" [onSelectedRows]="repGroupOnSelectedRows"></app-group-table> <app-group-table #repGroups [columns]="groupRepCols" [click]="repGroupOnClick"></app-group-table>
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>
</div> </div>
@@ -27,7 +27,7 @@
<div class="col-3"> <div class="col-3">
<mat-tab-group> <mat-tab-group>
<mat-tab label="{{useRepLabel}}"> <mat-tab label="{{useRepLabel}}">
<app-user-rep-table #userReps [initData]="initWithoutData" [onSelectedRows]="repOnSelectedRows"></app-user-rep-table> <app-user-rep-table #userReps [initData]="initWithoutData" [rowClass]="rep_row_class" [click]="repOnClick"></app-user-rep-table>
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>
</div> </div>

View File

@@ -1,5 +1,5 @@
import { AfterViewInit, Component, ViewChild, inject } from '@angular/core'; import { AfterViewInit, Component, ViewChild, inject } from '@angular/core';
import { GuiColumn, GuiSelectedRow } from '@generic-ui/ngx-grid/gui/grid/src/core/api/gui.grid.public-api'; import { GuiColumn, GuiRowClass, GuiRowStyle, GuiSelectedRow } from '@generic-ui/ngx-grid/gui/grid/src/core/api/gui.grid.public-api';
import { UserTableComponent } from '../../components/tables/user-table/user-table.component'; import { UserTableComponent } from '../../components/tables/user-table/user-table.component';
import { UserRepTableComponent } from '../../components/tables/user-rep-table/user-rep-table.component'; import { UserRepTableComponent } from '../../components/tables/user-rep-table/user-rep-table.component';
import { GroupTableComponent } from '../../components/tables/group-table/group-table.component'; import { GroupTableComponent } from '../../components/tables/group-table/group-table.component';
@@ -8,9 +8,12 @@ import Swal from 'sweetalert2';
import { MatTabsModule, MatTabGroup } from '@angular/material/tabs'; import { MatTabsModule, MatTabGroup } from '@angular/material/tabs';
import { env } from '../../../environments/environment'; import { env } from '../../../environments/environment';
import { BasePageComponent } from '../base-page/base-page.component'; import { BasePageComponent } from '../base-page/base-page.component';
import { UserRep } from '../../models/user-management.api.models'; import { Group, User, UserRep } from '../../models/user-management.api.models';
import { RepCreateFormComponent } from '../../components/forms/rep-create-form/rep-create-form.component'; import { RepCreateFormComponent } from '../../components/forms/rep-create-form/rep-create-form.component';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { BaseTableComponent } from '../../components/tables/base-table/base-table.component';
import { GroupService } from '../../services/api/group.service';
import { UserService } from '../../services/api/user.service';
@Component({ @Component({
standalone: true, standalone: true,
@@ -32,6 +35,20 @@ export class UserRepresentationComponent extends BasePageComponent implements Af
private readonly dialog: MatDialog = inject(MatDialog); private readonly dialog: MatDialog = inject(MatDialog);
rep_row_class: GuiRowClass = {
classFunction(source, index) {
const now = new Date()
return (!source.validFrom && !source.validTo)
? "current-period-row"
: (new Date(source.validFrom) > now)
? "future-period-row"
: (new Date(source.validTo) < now)
? "past-period-row"
: "current-period-row";
}
}
initWithoutData = () => { } initWithoutData = () => { }
constructor(private userRepService: UserRepService) { constructor(private userRepService: UserRepService) {
@@ -64,16 +81,22 @@ export class UserRepresentationComponent extends BasePageComponent implements Af
@ViewChild("repGroups") repGroups!: GroupTableComponent; @ViewChild("repGroups") repGroups!: GroupTableComponent;
@ViewChild("userReps") userReps!: UserRepTableComponent; @ViewChild("userReps") userReps!: UserRepTableComponent;
// user
userOnSelectedRows = (rows: GuiSelectedRow[]) => { userOnSelectedRows = (rows: GuiSelectedRow[]) => {
if (rows.length > 0) { if (rows.length > 0) {
this.useRepLabel = `Vertretungen von ${rows[0].source?.username}` this.useRepLabel = `Vertretungen von ${rows[0].source?.username}`
this.users.safelyUnselectAll(); //this.users.safelyUnselectAll();
this.userReps.fetchByUser(rows[0].source?.id); this.userReps.fetchByUser(rows[0].source?.id);
this.slGroupId = undefined; this.slGroupId = undefined;
this.slUserId = rows[0].source?.id this.slUserId = rows[0].source?.id
} }
} }
userOnClick = (table: BaseTableComponent<User, UserService>) => {
this.userOnSelectedRows(table.selectedRows);
}
// group
groupOnSelectedRows = (rows: GuiSelectedRow[]) => { groupOnSelectedRows = (rows: GuiSelectedRow[]) => {
if (rows.length > 0) { if (rows.length > 0) {
this.useRepLabel = `Vertretungen von ${rows[0].source?.name}` this.useRepLabel = `Vertretungen von ${rows[0].source?.name}`
@@ -84,6 +107,11 @@ export class UserRepresentationComponent extends BasePageComponent implements Af
} }
} }
groupOnClick = (table: BaseTableComponent<Group, GroupService>) => {
this.groupOnSelectedRows(table.selectedRows);
}
//repUser
repUserOnSelectedRows = (rows: GuiSelectedRow[]) => { repUserOnSelectedRows = (rows: GuiSelectedRow[]) => {
if (rows.length == 0 && this.slRepUserId) { if (rows.length == 0 && this.slRepUserId) {
if (!this.slUserId && !this.slGroupId) { if (!this.slUserId && !this.slGroupId) {
@@ -135,6 +163,11 @@ export class UserRepresentationComponent extends BasePageComponent implements Af
} }
} }
repUserOnClick = (table: BaseTableComponent<User, UserService>) => {
this.repUserOnSelectedRows(table.selectedRows);
}
// repGroup
repGroupOnSelectedRows = (rows: GuiSelectedRow[]) => { repGroupOnSelectedRows = (rows: GuiSelectedRow[]) => {
if (rows.length == 0 && this.slRepGroupId) { if (rows.length == 0 && this.slRepGroupId) {
if (!this.slUserId && !this.slGroupId) { if (!this.slUserId && !this.slGroupId) {
@@ -185,6 +218,11 @@ export class UserRepresentationComponent extends BasePageComponent implements Af
} }
} }
repGroupOnClick = (table: BaseTableComponent<Group, GroupService>) => {
this.repGroupOnSelectedRows(table.selectedRows);
}
// rep events
repOnSelectedRows = (rows: GuiSelectedRow[]) => { repOnSelectedRows = (rows: GuiSelectedRow[]) => {
if (rows.length == 0 && this.slRepId) { if (rows.length == 0 && this.slRepId) {
this.userRepService.delete(this.slRepId).subscribe({ this.userRepService.delete(this.slRepId).subscribe({
@@ -212,6 +250,10 @@ export class UserRepresentationComponent extends BasePageComponent implements Af
} }
} }
repOnClick = (table: BaseTableComponent<UserRep, UserRepService>) => {
this.repOnSelectedRows(table.selectedRows);
}
openCreateSheet(userRep: UserRep, afterCreation: (any: any) => any): void { openCreateSheet(userRep: UserRep, afterCreation: (any: any) => any): void {
this.dialog.open(RepCreateFormComponent, { this.dialog.open(RepCreateFormComponent, {

View File

@@ -104,3 +104,15 @@ code {
width: #{$i * 5 + "%"} !important; width: #{$i * 5 + "%"} !important;
} }
} }
.future-period-row {
background: rgba(76, 110, 140, .4) !important;
}
.current-period-row {
background: rgba(76, 110, 76, .4) !important;
}
.past-period-row {
background: rgba(110, 76, 76, .4) !important;
}

View File

@@ -4,37 +4,19 @@
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Version>3.0.0.0</Version> <Version>4.0.0.0</Version>
<AssemblyVersion>3.0.0.0</AssemblyVersion> <AssemblyVersion>4.0.0.0</AssemblyVersion>
<FileVersion>3.0.0.0</FileVersion> <FileVersion>4.0.0.0</FileVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Content Remove="wwwroot\assets\img\DD_white.svg" />
<Content Remove="wwwroot\assets\img\digital_data.svg" />
<Content Remove="wwwroot\assets\img\digital_data_red_BG.svg" />
<Content Remove="wwwroot\assets\img\group.svg" />
<Content Remove="wwwroot\assets\img\Huhn_andersrum.webp" />
<Content Remove="wwwroot\assets\img\login_logo.svg" />
<Content Remove="wwwroot\assets\img\mode_logo.svg" />
<Content Remove="wwwroot\assets\img\thema_bttn.svg" />
<Content Remove="wwwroot\assets\img\user-plus-svgrepo-com.svg" />
<Content Remove="wwwroot\assets\img\user.svg" />
<Content Remove="wwwroot\chunk-A2L6DXQH.js" /> <Content Remove="wwwroot\chunk-A2L6DXQH.js" />
<Content Remove="wwwroot\chunk-ZC35XWOR.js" /> <Content Remove="wwwroot\chunk-ZC35XWOR.js" />
<Content Remove="wwwroot\favicon.ico" />
<Content Remove="wwwroot\group-table\index.html" />
<Content Remove="wwwroot\index.html" />
<Content Remove="wwwroot\main-QF3MRK45.js" /> <Content Remove="wwwroot\main-QF3MRK45.js" />
<Content Remove="wwwroot\media\bootstrap-icons-OCU552PF.woff" /> </ItemGroup>
<Content Remove="wwwroot\media\bootstrap-icons-X6UQXWUS.woff2" />
<Content Remove="wwwroot\module-table\index.html" /> <ItemGroup>
<Content Remove="wwwroot\polyfills-6EAL64PA.js" /> <Content Include="wwwroot\assets\img\.vscode\settings.json" />
<Content Remove="wwwroot\scripts-EEEIPNC3.js" />
<Content Remove="wwwroot\styles-ZC4KW2NT.css" />
<Content Remove="wwwroot\user-assignment\index.html" />
<Content Remove="wwwroot\user-representation\index.html" />
<Content Remove="wwwroot\user-table\index.html" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -78,24 +60,7 @@
<None Include="wwwroot\assets\img\thema_bttn.svg" /> <None Include="wwwroot\assets\img\thema_bttn.svg" />
<None Include="wwwroot\assets\img\user-plus-svgrepo-com.svg" /> <None Include="wwwroot\assets\img\user-plus-svgrepo-com.svg" />
<None Include="wwwroot\assets\img\user.svg" /> <None Include="wwwroot\assets\img\user.svg" />
<None Include="wwwroot\favicon.ico" />
<None Include="wwwroot\group-table\index.html" />
<None Include="wwwroot\index.html" />
<None Include="wwwroot\media\bootstrap-icons-OCU552PF.woff" />
<None Include="wwwroot\media\bootstrap-icons-X6UQXWUS.woff2" /> <None Include="wwwroot\media\bootstrap-icons-X6UQXWUS.woff2" />
<None Include="wwwroot\module-table\index.html" />
<None Include="wwwroot\polyfills-6EAL64PA.js" />
<None Include="wwwroot\scripts-EEEIPNC3.js" />
<None Include="wwwroot\styles-ZC4KW2NT.css" />
<None Include="wwwroot\user-assignment\index.html" />
<None Include="wwwroot\user-representation\index.html" />
<None Include="wwwroot\user-table\index.html" />
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\assets\config.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
</Project> </Project>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long