Compare commits
6 Commits
acfd9b4fb8
...
6fc8bdc964
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fc8bdc964 | ||
|
|
b3d46aaf30 | ||
|
|
2870f0e18e | ||
|
|
337a0b892e | ||
|
|
2e1bf69889 | ||
|
|
0657bbe2c4 |
@ -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",
|
||||||
|
|||||||
@ -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>
|
||||||
@ -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
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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, {
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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>
|
||||||
|
|||||||
7
DigitalData.UserManager.API/wwwroot/chunk-BERTLP66.js
Normal file
7
DigitalData.UserManager.API/wwwroot/chunk-BERTLP66.js
Normal file
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
164
DigitalData.UserManager.API/wwwroot/main-UKQG27PC.js
Normal file
164
DigitalData.UserManager.API/wwwroot/main-UKQG27PC.js
Normal file
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
Loading…
x
Reference in New Issue
Block a user