web/elements: Add static table class (#21181)

* add static table class

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* use it & cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update bulk delete

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update log viewer

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix sort

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix bulk delete

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* bulk session table

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* small tweaks

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L.
2026-03-27 10:11:06 +00:00
committed by GitHub
parent 0a73322b0d
commit bfac76ed09
23 changed files with 115 additions and 297 deletions

View File

@@ -6,7 +6,8 @@ import { MessageLevel } from "#common/messages";
import { ModalButton } from "#elements/buttons/ModalButton";
import { showMessage } from "#elements/messages/MessageContainer";
import { PaginatedResponse, Table, TableColumn } from "#elements/table/Table";
import { StaticTable } from "#elements/table/StaticTable";
import { TableColumn } from "#elements/table/Table";
import { SlottedTemplateResult } from "#elements/types";
import { UsedBy, UsedByActionEnum } from "@goauthentik/api";
@@ -21,14 +22,9 @@ import PFList from "@patternfly/patternfly/components/List/list.css";
type BulkDeleteMetadata = { key: string; value: string }[];
@customElement("ak-delete-objects-table")
export class DeleteObjectsTable<T extends object> extends Table<T> {
export class DeleteObjectsTable<T extends object> extends StaticTable<T> {
static styles: CSSResult[] = [...super.styles, PFList];
public override paginated = false;
@property({ attribute: false })
public objects: T[] = [];
@property({ attribute: false })
public metadata: (item: T) => BulkDeleteMetadata = (item: T) => {
const metadata: BulkDeleteMetadata = [];
@@ -44,21 +40,6 @@ export class DeleteObjectsTable<T extends object> extends Table<T> {
@state()
protected usedByData: Map<T, UsedBy[]> = new Map();
protected async apiEndpoint(): Promise<PaginatedResponse<T>> {
return Promise.resolve({
pagination: {
count: this.objects.length,
current: 1,
totalPages: 1,
startIndex: 1,
endIndex: this.objects.length,
next: 0,
previous: 0,
},
results: this.objects,
});
}
protected override rowLabel(item: T): string | null {
const name = "name" in item && typeof item.name === "string" ? item.name.trim() : null;
return name || null;
@@ -66,7 +47,7 @@ export class DeleteObjectsTable<T extends object> extends Table<T> {
@state()
protected get columns(): TableColumn[] {
return this.metadata(this.objects[0]).map((element) => [element.key]);
return this.metadata(this.items![0]).map((element) => [element.key]);
}
protected row(item: T): SlottedTemplateResult[] {
@@ -227,7 +208,7 @@ export class DeleteBulkForm<T> extends ModalButton {
</section>
<section class="pf-c-modal-box__body pf-m-light">
<ak-delete-objects-table
.objects=${this.objects}
.items=${this.objects}
.usedBy=${this.usedBy}
.metadata=${this.metadata}
>