diff --git a/apps/client/src/app/components/access-table/access-table.component.html b/apps/client/src/app/components/access-table/access-table.component.html
index cb41904d3..a66e7460f 100644
--- a/apps/client/src/app/components/access-table/access-table.component.html
+++ b/apps/client/src/app/components/access-table/access-table.component.html
@@ -39,7 +39,7 @@
getPublicUrl(element.id)
}}
- @if (user?.settings?.isExperimentalFeatures) {
+ @if (user()?.settings?.isExperimentalFeatures) {
GET {{ baseUrl }}/api/v1/public/{{
@@ -69,7 +69,7 @@
class="no-max-width"
xPosition="before"
>
- @if (user?.settings?.isExperimentalFeatures) {
+ @if (user()?.settings?.isExperimentalFeatures) {
}
@if (
- user?.settings?.isExperimentalFeatures || element.type === 'PUBLIC'
+ user()?.settings?.isExperimentalFeatures || element.type === 'PUBLIC'
) {
}
@@ -100,7 +100,7 @@
-
-
+
+
diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts
index 117d685fd..6c7532343 100644
--- a/apps/client/src/app/components/access-table/access-table.component.ts
+++ b/apps/client/src/app/components/access-table/access-table.component.ts
@@ -7,10 +7,11 @@ import { Clipboard, ClipboardModule } from '@angular/cdk/clipboard';
import {
ChangeDetectionStrategy,
Component,
+ computed,
CUSTOM_ELEMENTS_SCHEMA,
+ effect,
inject,
- Input,
- OnChanges,
+ input,
output
} from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -46,17 +47,26 @@ import ms from 'ms';
templateUrl: './access-table.component.html',
styleUrls: ['./access-table.component.scss']
})
-export class GfAccessTableComponent implements OnChanges {
- @Input() accesses: Access[];
- @Input() showActions: boolean;
- @Input() user: User;
+export class GfAccessTableComponent {
+ public readonly accesses = input.required();
+ public readonly showActions = input(false);
+ public readonly user = input.required();
public readonly accessDeleted = output();
public readonly accessToUpdate = output();
- public readonly baseUrl = window.location.origin;
- public dataSource: MatTableDataSource;
- public displayedColumns: string[] = [];
+ protected readonly baseUrl = window.location.origin;
+ protected readonly dataSource = new MatTableDataSource();
+
+ protected readonly displayedColumns = computed(() => {
+ const columns = ['alias', 'grantee', 'type', 'details'];
+
+ if (this.showActions()) {
+ columns.push('actions');
+ }
+
+ return columns;
+ });
private readonly clipboard = inject(Clipboard);
private readonly notificationService = inject(NotificationService);
@@ -72,27 +82,19 @@ export class GfAccessTableComponent implements OnChanges {
lockOpenOutline,
removeCircleOutline
});
- }
- public ngOnChanges() {
- this.displayedColumns = ['alias', 'grantee', 'type', 'details'];
-
- if (this.showActions) {
- this.displayedColumns.push('actions');
- }
-
- if (this.accesses) {
- this.dataSource = new MatTableDataSource(this.accesses);
- }
+ effect(() => {
+ this.dataSource.data = this.accesses() ?? [];
+ });
}
- public getPublicUrl(aId: string): string {
- const languageCode = this.user.settings.language;
+ protected getPublicUrl(aId: string): string {
+ const languageCode = this.user().settings.language;
return `${this.baseUrl}/${languageCode}/${publicRoutes.public.path}/${aId}`;
}
- public onCopyUrlToClipboard(aId: string): void {
+ protected onCopyUrlToClipboard(aId: string): void {
this.clipboard.copy(this.getPublicUrl(aId));
this.snackBar.open(
@@ -104,7 +106,7 @@ export class GfAccessTableComponent implements OnChanges {
);
}
- public onDeleteAccess(aId: string) {
+ protected onDeleteAccess(aId: string) {
this.notificationService.confirm({
confirmFn: () => {
this.accessDeleted.emit(aId);
@@ -114,7 +116,7 @@ export class GfAccessTableComponent implements OnChanges {
});
}
- public onUpdateAccess(aId: string) {
+ protected onUpdateAccess(aId: string) {
this.accessToUpdate.emit(aId);
}
}