catchup #13
@@ -43,12 +43,14 @@ export class MembersService {
|
|||||||
createArgs: MemberCreateArgs,
|
createArgs: MemberCreateArgs,
|
||||||
request: express.Request,
|
request: express.Request,
|
||||||
): Promise<MemberDto> {
|
): Promise<MemberDto> {
|
||||||
// const x: MemberCreateArgs = {
|
const x = {
|
||||||
// ...createArgs,
|
...createArgs,
|
||||||
// geburtsdatum: createArgs.geburtsdatum ?? null,
|
geburtsdatum: createArgs.geburtsdatum
|
||||||
// };
|
? createArgs.geburtsdatum
|
||||||
|
: null,
|
||||||
|
};
|
||||||
const newMember = await this.database.doRequest(
|
const newMember = await this.database.doRequest(
|
||||||
async prisma => await prisma.member.create({ data: createArgs }),
|
async prisma => await prisma.member.create({ data: x }),
|
||||||
request,
|
request,
|
||||||
);
|
);
|
||||||
return mapDbMemberToMember(newMember);
|
return mapDbMemberToMember(newMember);
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
"builder": "@angular/build:application",
|
"builder": "@angular/build:application",
|
||||||
"options": {
|
"options": {
|
||||||
"browser": "src/main.ts",
|
"browser": "src/main.ts",
|
||||||
"polyfills": ["zone.js"],
|
|
||||||
"tsConfig": "tsconfig.app.json",
|
"tsConfig": "tsconfig.app.json",
|
||||||
"inlineStyleLanguage": "scss",
|
"inlineStyleLanguage": "scss",
|
||||||
"assets": [
|
"assets": [
|
||||||
@@ -75,7 +74,6 @@
|
|||||||
"test": {
|
"test": {
|
||||||
"builder": "@angular/build:karma",
|
"builder": "@angular/build:karma",
|
||||||
"options": {
|
"options": {
|
||||||
"polyfills": ["zone.js", "zone.js/testing"],
|
|
||||||
"tsConfig": "tsconfig.spec.json",
|
"tsConfig": "tsconfig.spec.json",
|
||||||
"inlineStyleLanguage": "scss",
|
"inlineStyleLanguage": "scss",
|
||||||
"assets": [
|
"assets": [
|
||||||
|
|||||||
@@ -42,8 +42,7 @@
|
|||||||
"keycloak-angular": "^20.0.0",
|
"keycloak-angular": "^20.0.0",
|
||||||
"keycloak-js": "^26.2.1",
|
"keycloak-js": "^26.2.1",
|
||||||
"rxjs": "~7.8.2",
|
"rxjs": "~7.8.2",
|
||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1"
|
||||||
"zone.js": "~0.15.1"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular/build": "^21.0.4",
|
"@angular/build": "^21.0.4",
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import {
|
|||||||
LOCALE_ID,
|
LOCALE_ID,
|
||||||
provideAppInitializer,
|
provideAppInitializer,
|
||||||
provideBrowserGlobalErrorListeners,
|
provideBrowserGlobalErrorListeners,
|
||||||
provideZoneChangeDetection,
|
provideCheckNoChangesConfig,
|
||||||
|
provideZonelessChangeDetection,
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import {
|
import {
|
||||||
PreloadAllModules,
|
PreloadAllModules,
|
||||||
@@ -48,7 +49,7 @@ export const appConfig: ApplicationConfig = {
|
|||||||
withComponentInputBinding(),
|
withComponentInputBinding(),
|
||||||
),
|
),
|
||||||
provideBrowserGlobalErrorListeners(),
|
provideBrowserGlobalErrorListeners(),
|
||||||
provideZoneChangeDetection({ eventCoalescing: true }),
|
provideZonelessChangeDetection(),
|
||||||
provideKeycloak({
|
provideKeycloak({
|
||||||
config: keycloakConfig,
|
config: keycloakConfig,
|
||||||
initOptions: {
|
initOptions: {
|
||||||
@@ -90,3 +91,9 @@ export const appConfig: ApplicationConfig = {
|
|||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (isDevMode()) {
|
||||||
|
appConfig.providers.push(
|
||||||
|
provideCheckNoChangesConfig({ exhaustive: true, interval: 100 }),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
import { Component, effect, inject, signal } from '@angular/core';
|
import {
|
||||||
|
ChangeDetectionStrategy,
|
||||||
|
Component,
|
||||||
|
effect,
|
||||||
|
inject,
|
||||||
|
signal,
|
||||||
|
} from '@angular/core';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { RouterModule, RouterOutlet } from '@angular/router';
|
import { RouterModule, RouterOutlet } from '@angular/router';
|
||||||
import { Authentication } from './services/authentication';
|
import { Authentication } from './services/authentication';
|
||||||
@@ -9,6 +15,7 @@ import { keycloakConfig } from './util/keycloak-config';
|
|||||||
imports: [RouterOutlet, MatButtonModule, RouterModule],
|
imports: [RouterOutlet, MatButtonModule, RouterModule],
|
||||||
templateUrl: './app.html',
|
templateUrl: './app.html',
|
||||||
styleUrl: './app.scss',
|
styleUrl: './app.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class App {
|
export class App {
|
||||||
protected readonly title = signal('frontend');
|
protected readonly title = signal('frontend');
|
||||||
|
|||||||
+2
-4
@@ -1,4 +1,4 @@
|
|||||||
<form>
|
<form (submit)="submit(); $event.preventDefault()">
|
||||||
<p>Name: {{ member.vorname }} {{ member.nachname }}</p>
|
<p>Name: {{ member.vorname }} {{ member.nachname }}</p>
|
||||||
<p>Passnummer: {{ member.passnummer }}</p>
|
<p>Passnummer: {{ member.passnummer }}</p>
|
||||||
<p>Geburtsdatum: {{ member.geburtsdatum | datePipe }}</p>
|
<p>Geburtsdatum: {{ member.geburtsdatum | datePipe }}</p>
|
||||||
@@ -11,7 +11,5 @@
|
|||||||
[for]="picker"></mat-datepicker-toggle>
|
[for]="picker"></mat-datepicker-toggle>
|
||||||
<mat-datepicker #picker></mat-datepicker>
|
<mat-datepicker #picker></mat-datepicker>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<button mat-raised-button color="primary" (click)="submit()">
|
<button mat-raised-button color="primary" type="submit">Speichern</button>
|
||||||
Speichern
|
|
||||||
</button>
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
+12
-6
@@ -1,4 +1,9 @@
|
|||||||
import { Component, inject, signal } from '@angular/core';
|
import {
|
||||||
|
ChangeDetectionStrategy,
|
||||||
|
Component,
|
||||||
|
inject,
|
||||||
|
signal,
|
||||||
|
} from '@angular/core';
|
||||||
import { Field, form } from '@angular/forms/signals';
|
import { Field, form } from '@angular/forms/signals';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||||
@@ -32,6 +37,7 @@ import { EditMemberDialogComponent } from '../edit-member-dialog/edit-member-dia
|
|||||||
],
|
],
|
||||||
templateUrl: './delete-member-dialog.component.html',
|
templateUrl: './delete-member-dialog.component.html',
|
||||||
styleUrl: './delete-member-dialog.component.scss',
|
styleUrl: './delete-member-dialog.component.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class DeleteMemberDialogComponent {
|
export class DeleteMemberDialogComponent {
|
||||||
private readonly data = inject<{ member: api.MemberDto }>(MAT_DIALOG_DATA);
|
private readonly data = inject<{ member: api.MemberDto }>(MAT_DIALOG_DATA);
|
||||||
@@ -46,13 +52,13 @@ export class DeleteMemberDialogComponent {
|
|||||||
protected readonly form = form(this.deletionModel);
|
protected readonly form = form(this.deletionModel);
|
||||||
protected readonly member = this.data.member;
|
protected readonly member = this.data.member;
|
||||||
|
|
||||||
protected async submit() {
|
protected submit() {
|
||||||
const date = this.deletionModel().kuendigungzum;
|
const date = this.deletionModel().kuendigungzum;
|
||||||
await api.scheduleDeletion(
|
api.scheduleDeletion(
|
||||||
this.member.id,
|
this.member.id,
|
||||||
date ? dateToLocal(date).toISOString() : '',
|
date ? dateToLocal(date).toISOString() : '',
|
||||||
);
|
).then(() => {
|
||||||
|
this.dialogRef.close();
|
||||||
this.dialogRef.close();
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -1,4 +1,4 @@
|
|||||||
<form>
|
<form (submit)="submit(); $event.preventDefault()">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-label>Vorname</mat-label>
|
<mat-label>Vorname</mat-label>
|
||||||
<input matInput placeholder="Vorname" [field]="form.vorname" />
|
<input matInput placeholder="Vorname" [field]="form.vorname" />
|
||||||
@@ -35,7 +35,5 @@
|
|||||||
<mat-option [value]="false">Nein</mat-option>
|
<mat-option [value]="false">Nein</mat-option>
|
||||||
</mat-select>
|
</mat-select>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<button mat-raised-button color="primary" (click)="submit()">
|
<button mat-raised-button color="primary" type="submit">Speichern</button>
|
||||||
Speichern
|
|
||||||
</button>
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
+11
-4
@@ -1,4 +1,9 @@
|
|||||||
import { Component, inject, signal } from '@angular/core';
|
import {
|
||||||
|
ChangeDetectionStrategy,
|
||||||
|
Component,
|
||||||
|
inject,
|
||||||
|
signal,
|
||||||
|
} from '@angular/core';
|
||||||
import { Field, form } from '@angular/forms/signals';
|
import { Field, form } from '@angular/forms/signals';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||||
@@ -26,6 +31,7 @@ import { MemberDtoHelper, MemberEditForm } from '../../util/member.js';
|
|||||||
],
|
],
|
||||||
templateUrl: './edit-member-dialog.component.html',
|
templateUrl: './edit-member-dialog.component.html',
|
||||||
styleUrl: './edit-member-dialog.component.scss',
|
styleUrl: './edit-member-dialog.component.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class EditMemberDialogComponent {
|
export class EditMemberDialogComponent {
|
||||||
private readonly data = inject<{ member: api.MemberDto }>(MAT_DIALOG_DATA);
|
private readonly data = inject<{ member: api.MemberDto }>(MAT_DIALOG_DATA);
|
||||||
@@ -39,11 +45,12 @@ export class EditMemberDialogComponent {
|
|||||||
);
|
);
|
||||||
protected readonly form = form(this.memberModel);
|
protected readonly form = form(this.memberModel);
|
||||||
|
|
||||||
protected async submit() {
|
protected submit() {
|
||||||
const member: api.MemberDto = this.memberDtoHelper.memberFromSignal(
|
const member: api.MemberDto = this.memberDtoHelper.memberFromSignal(
|
||||||
this.memberModel(),
|
this.memberModel(),
|
||||||
);
|
);
|
||||||
await api.updateMember(member);
|
api.updateMember(member).then(() => {
|
||||||
this.dialogRef.close();
|
this.dialogRef.close();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatListModule } from '@angular/material/list';
|
import { MatListModule } from '@angular/material/list';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
@@ -15,6 +15,7 @@ import { Claim } from '../../generated-api/api';
|
|||||||
],
|
],
|
||||||
templateUrl: './home.html',
|
templateUrl: './home.html',
|
||||||
styleUrl: './home.scss',
|
styleUrl: './home.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class Home {
|
export class Home {
|
||||||
protected Claim = Claim;
|
protected Claim = Claim;
|
||||||
|
|||||||
@@ -1,22 +1,23 @@
|
|||||||
import { Component, inject } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { Authentication } from '../../services/authentication';
|
import { Authentication } from '../../services/authentication';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-login',
|
selector: 'app-login',
|
||||||
imports: [],
|
imports: [],
|
||||||
templateUrl: './login.html',
|
templateUrl: './login.html',
|
||||||
styleUrl: './login.scss',
|
styleUrl: './login.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class Login {
|
export class Login {
|
||||||
private readonly authentication = inject(Authentication);
|
private readonly authentication = inject(Authentication);
|
||||||
private readonly router = inject(Router);
|
private readonly router = inject(Router);
|
||||||
|
|
||||||
public constructor() {
|
public constructor() {
|
||||||
if(this.authentication.loggedIn()){
|
if (this.authentication.loggedIn()) {
|
||||||
this.router.navigate(['/home']);
|
this.router.navigate(['/home']);
|
||||||
}else{
|
} else {
|
||||||
this.authentication.login();
|
this.authentication.login();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Component, inject } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { Authentication } from '../../services/authentication';
|
import { Authentication } from '../../services/authentication';
|
||||||
@@ -8,6 +8,7 @@ import { Authentication } from '../../services/authentication';
|
|||||||
imports: [MatButtonModule, RouterModule],
|
imports: [MatButtonModule, RouterModule],
|
||||||
templateUrl: './missing-page.html',
|
templateUrl: './missing-page.html',
|
||||||
styleUrl: './missing-page.scss',
|
styleUrl: './missing-page.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class MissingPage {
|
export class MissingPage {
|
||||||
protected readonly auth = inject(Authentication);
|
protected readonly auth = inject(Authentication);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<h1>Neues Mitglied anlegen</h1>
|
<h1>Neues Mitglied anlegen</h1>
|
||||||
<form>
|
<form (submit)="onSubmit(); $event.preventDefault()">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-label>Vorname</mat-label>
|
<mat-label>Vorname</mat-label>
|
||||||
<input matInput [field]="memberForm.vorname" />
|
<input matInput [field]="memberForm.vorname" />
|
||||||
@@ -37,7 +37,5 @@
|
|||||||
<mat-label>Kontakt</mat-label>
|
<mat-label>Kontakt</mat-label>
|
||||||
<input matInput [field]="memberForm.kontakt" />
|
<input matInput [field]="memberForm.kontakt" />
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<button mat-flat-button color="primary" (click)="onSubmit()">
|
<button mat-flat-button color="primary" type="submit">Hinzufügen</button>
|
||||||
Hinzufügen
|
|
||||||
</button>
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
import { Component, inject, signal } from '@angular/core';
|
import {
|
||||||
|
ChangeDetectionStrategy,
|
||||||
|
Component,
|
||||||
|
inject,
|
||||||
|
signal,
|
||||||
|
} from '@angular/core';
|
||||||
import { Field, form } from '@angular/forms/signals';
|
import { Field, form } from '@angular/forms/signals';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||||
@@ -23,6 +28,7 @@ import { MemberCreateForm, MemberDtoHelper } from '../../util/member.js';
|
|||||||
],
|
],
|
||||||
templateUrl: './new-member.component.html',
|
templateUrl: './new-member.component.html',
|
||||||
styleUrl: './new-member.component.scss',
|
styleUrl: './new-member.component.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class NewMemberComponent {
|
export class NewMemberComponent {
|
||||||
private readonly memberDtoHelper = inject(MemberDtoHelper);
|
private readonly memberDtoHelper = inject(MemberDtoHelper);
|
||||||
@@ -35,7 +41,7 @@ export class NewMemberComponent {
|
|||||||
);
|
);
|
||||||
protected readonly memberForm = form(this.memberModel);
|
protected readonly memberForm = form(this.memberModel);
|
||||||
|
|
||||||
protected async onSubmit(): Promise<void> {
|
protected onSubmit() {
|
||||||
if (!this.memberForm().valid()) {
|
if (!this.memberForm().valid()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -44,12 +50,13 @@ export class NewMemberComponent {
|
|||||||
this.memberModel(),
|
this.memberModel(),
|
||||||
);
|
);
|
||||||
|
|
||||||
try {
|
api.createMember(newMember)
|
||||||
await api.createMember(newMember);
|
.then(() => {
|
||||||
console.log('Successfully added Member');
|
console.log('Successfully added Member');
|
||||||
this.dialogRef.close();
|
this.dialogRef.close();
|
||||||
} catch (e) {
|
})
|
||||||
console.error('Error adding member', e);
|
.catch(e => {
|
||||||
}
|
console.error('Error adding member', e);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,42 +1,52 @@
|
|||||||
import { JsonPipe } from '@angular/common';
|
import { JsonPipe } from '@angular/common';
|
||||||
import { Component, effect, inject, signal } from '@angular/core';
|
import {
|
||||||
|
ChangeDetectionStrategy,
|
||||||
|
Component,
|
||||||
|
effect,
|
||||||
|
inject,
|
||||||
|
signal,
|
||||||
|
} from '@angular/core';
|
||||||
import * as api from '../../generated-api/api';
|
import * as api from '../../generated-api/api';
|
||||||
import { Authentication } from '../../services/authentication';
|
import { Authentication } from '../../services/authentication';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-test',
|
selector: 'app-test',
|
||||||
imports: [JsonPipe],
|
imports: [JsonPipe],
|
||||||
templateUrl: './test.html',
|
templateUrl: './test.html',
|
||||||
styleUrl: './test.scss',
|
styleUrl: './test.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class Test {
|
export class Test {
|
||||||
protected auth = inject(Authentication);
|
protected auth = inject(Authentication);
|
||||||
|
|
||||||
protected apiStatus = signal<string>("Waiting");
|
protected apiStatus = signal<string>('Waiting');
|
||||||
protected authTest = signal<string>("Waiting");
|
protected authTest = signal<string>('Waiting');
|
||||||
|
|
||||||
public constructor(){
|
public constructor() {
|
||||||
effect(()=>{
|
effect(() => {
|
||||||
const loggedIn=this.auth.loggedIn();
|
const loggedIn = this.auth.loggedIn();
|
||||||
if(!loggedIn){
|
if (!loggedIn) {
|
||||||
this.apiStatus.set("N/A - not logged in");
|
this.apiStatus.set('N/A - not logged in');
|
||||||
this.authTest.set("N/A - not logged in");
|
this.authTest.set('N/A - not logged in');
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.apiStatus.set('Waiting for API');
|
||||||
|
this.authTest.set('Waiting for API');
|
||||||
|
api.getOk()
|
||||||
|
.then(status => {
|
||||||
|
this.apiStatus.set('Ok');
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
this.apiStatus.set('Error');
|
||||||
|
});
|
||||||
|
api.getAuth()
|
||||||
|
.then(response => {
|
||||||
|
this.authTest.set('Ok');
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
this.authTest.set(e);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.apiStatus.set("Waiting for API");
|
|
||||||
this.authTest.set("Waiting for API");
|
|
||||||
api.getOk().then((status) => {
|
|
||||||
this.apiStatus.set("Ok");
|
|
||||||
}).catch((e) => {
|
|
||||||
this.apiStatus.set("Error");
|
|
||||||
});
|
|
||||||
api.getAuth().then((response) => {
|
|
||||||
this.authTest.set("Ok");
|
|
||||||
}).catch((e) => {
|
|
||||||
this.authTest.set(e);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
AfterViewInit,
|
AfterViewInit,
|
||||||
|
ChangeDetectionStrategy,
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
Component,
|
Component,
|
||||||
computed,
|
computed,
|
||||||
@@ -56,6 +57,7 @@ enum MemberStatusFilter {
|
|||||||
],
|
],
|
||||||
templateUrl: './view-members.html',
|
templateUrl: './view-members.html',
|
||||||
styleUrl: './view-members.scss',
|
styleUrl: './view-members.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class ViewMembers implements AfterViewInit {
|
export class ViewMembers implements AfterViewInit {
|
||||||
private readonly changeDetectorRef = inject(ChangeDetectorRef);
|
private readonly changeDetectorRef = inject(ChangeDetectorRef);
|
||||||
@@ -73,7 +75,6 @@ export class ViewMembers implements AfterViewInit {
|
|||||||
() => this.filterForm.status().value() === MemberStatusFilter.ALL,
|
() => this.filterForm.status().value() === MemberStatusFilter.ALL,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
protected readonly dataSource = new MatTableDataSource<api.MemberDto>();
|
protected readonly dataSource = new MatTableDataSource<api.MemberDto>();
|
||||||
private readonly datePipe = new DatePipePipe();
|
private readonly datePipe = new DatePipePipe();
|
||||||
|
|
||||||
@@ -206,6 +207,6 @@ export class ViewMembers implements AfterViewInit {
|
|||||||
private async updateData(): Promise<void> {
|
private async updateData(): Promise<void> {
|
||||||
const members = await api.getMembers();
|
const members = await api.getMembers();
|
||||||
this.dataSource.data = members;
|
this.dataSource.data = members;
|
||||||
this.changeDetectorRef.detectChanges();
|
this.changeDetectorRef.markForCheck();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
<title>1.TC Chemnitz Mitgliederdatenbank</title>
|
<title>1.TC Chemnitz Mitgliederdatenbank</title>
|
||||||
<base href="/" />
|
<base href="/" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com/" />
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||||||
<link
|
<link
|
||||||
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap"
|
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap"
|
||||||
|
|||||||
Generated
+21
-19
@@ -144,9 +144,6 @@ importers:
|
|||||||
tslib:
|
tslib:
|
||||||
specifier: ^2.8.1
|
specifier: ^2.8.1
|
||||||
version: 2.8.1
|
version: 2.8.1
|
||||||
zone.js:
|
|
||||||
specifier: ~0.15.1
|
|
||||||
version: 0.15.1
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@angular/build':
|
'@angular/build':
|
||||||
specifier: ^21.0.4
|
specifier: ^21.0.4
|
||||||
@@ -4814,7 +4811,7 @@ snapshots:
|
|||||||
'@babel/types': 7.28.5
|
'@babel/types': 7.28.5
|
||||||
'@jridgewell/remapping': 2.3.5
|
'@jridgewell/remapping': 2.3.5
|
||||||
convert-source-map: 2.0.0
|
convert-source-map: 2.0.0
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
gensync: 1.0.0-beta.2
|
gensync: 1.0.0-beta.2
|
||||||
json5: 2.2.3
|
json5: 2.2.3
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
@@ -4834,7 +4831,7 @@ snapshots:
|
|||||||
'@babel/types': 7.28.5
|
'@babel/types': 7.28.5
|
||||||
'@jridgewell/remapping': 2.3.5
|
'@jridgewell/remapping': 2.3.5
|
||||||
convert-source-map: 2.0.0
|
convert-source-map: 2.0.0
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
gensync: 1.0.0-beta.2
|
gensync: 1.0.0-beta.2
|
||||||
json5: 2.2.3
|
json5: 2.2.3
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
@@ -4921,7 +4918,7 @@ snapshots:
|
|||||||
'@babel/parser': 7.28.5
|
'@babel/parser': 7.28.5
|
||||||
'@babel/template': 7.27.2
|
'@babel/template': 7.27.2
|
||||||
'@babel/types': 7.28.5
|
'@babel/types': 7.28.5
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -6395,7 +6392,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
bytes: 3.1.2
|
bytes: 3.1.2
|
||||||
content-type: 1.0.5
|
content-type: 1.0.5
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
http-errors: 2.0.1
|
http-errors: 2.0.1
|
||||||
iconv-lite: 0.7.0
|
iconv-lite: 0.7.0
|
||||||
on-finished: 2.4.1
|
on-finished: 2.4.1
|
||||||
@@ -6670,6 +6667,10 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
|
|
||||||
|
debug@4.4.3:
|
||||||
|
dependencies:
|
||||||
|
ms: 2.1.3
|
||||||
|
|
||||||
debug@4.4.3(supports-color@5.5.0):
|
debug@4.4.3(supports-color@5.5.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
@@ -7029,7 +7030,7 @@ snapshots:
|
|||||||
content-type: 1.0.5
|
content-type: 1.0.5
|
||||||
cookie: 0.7.2
|
cookie: 0.7.2
|
||||||
cookie-signature: 1.2.2
|
cookie-signature: 1.2.2
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
depd: 2.0.0
|
depd: 2.0.0
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
@@ -7118,7 +7119,7 @@ snapshots:
|
|||||||
|
|
||||||
finalhandler@2.1.1:
|
finalhandler@2.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
on-finished: 2.4.1
|
on-finished: 2.4.1
|
||||||
@@ -7339,7 +7340,7 @@ snapshots:
|
|||||||
http-proxy-agent@7.0.2:
|
http-proxy-agent@7.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 7.1.4
|
agent-base: 7.1.4
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -7358,7 +7359,7 @@ snapshots:
|
|||||||
https-proxy-agent@7.0.6:
|
https-proxy-agent@7.0.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 7.1.4
|
agent-base: 7.1.4
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -7494,7 +7495,7 @@ snapshots:
|
|||||||
|
|
||||||
istanbul-lib-source-maps@4.0.1:
|
istanbul-lib-source-maps@4.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
istanbul-lib-coverage: 3.2.2
|
istanbul-lib-coverage: 3.2.2
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -7692,7 +7693,7 @@ snapshots:
|
|||||||
log4js@6.9.1:
|
log4js@6.9.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
date-format: 4.0.14
|
date-format: 4.0.14
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
flatted: 3.3.3
|
flatted: 3.3.3
|
||||||
rfdc: 1.4.1
|
rfdc: 1.4.1
|
||||||
streamroller: 3.1.5
|
streamroller: 3.1.5
|
||||||
@@ -8471,7 +8472,7 @@ snapshots:
|
|||||||
|
|
||||||
router@2.2.0:
|
router@2.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
depd: 2.0.0
|
depd: 2.0.0
|
||||||
is-promise: 4.0.0
|
is-promise: 4.0.0
|
||||||
parseurl: 1.3.3
|
parseurl: 1.3.3
|
||||||
@@ -8551,7 +8552,7 @@ snapshots:
|
|||||||
|
|
||||||
send@1.2.0:
|
send@1.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
etag: 1.8.1
|
etag: 1.8.1
|
||||||
@@ -8706,7 +8707,7 @@ snapshots:
|
|||||||
socks-proxy-agent@8.0.5:
|
socks-proxy-agent@8.0.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 7.1.4
|
agent-base: 7.1.4
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
socks: 2.8.7
|
socks: 2.8.7
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -8766,7 +8767,7 @@ snapshots:
|
|||||||
streamroller@3.1.5:
|
streamroller@3.1.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
date-format: 4.0.14
|
date-format: 4.0.14
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
fs-extra: 8.1.0
|
fs-extra: 8.1.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -8894,7 +8895,7 @@ snapshots:
|
|||||||
tuf-js@4.1.0:
|
tuf-js@4.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tufjs/models': 4.1.0
|
'@tufjs/models': 4.1.0
|
||||||
debug: 4.4.3(supports-color@5.5.0)
|
debug: 4.4.3
|
||||||
make-fetch-happen: 15.0.3
|
make-fetch-happen: 15.0.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -9118,4 +9119,5 @@ snapshots:
|
|||||||
|
|
||||||
zod@4.1.13: {}
|
zod@4.1.13: {}
|
||||||
|
|
||||||
zone.js@0.15.1: {}
|
zone.js@0.15.1:
|
||||||
|
optional: true
|
||||||
|
|||||||
Reference in New Issue
Block a user