diff --git a/web/src/app/modules/admin/short-urls/short-urls.columns.ts b/web/src/app/modules/admin/short-urls/short-urls.columns.ts index 70dbdde..2baa4c2 100644 --- a/web/src/app/modules/admin/short-urls/short-urls.columns.ts +++ b/web/src/app/modules/admin/short-urls/short-urls.columns.ts @@ -12,13 +12,6 @@ export class ShortUrlsColumns extends PageColumns { get(): TableColumn[] { return [ ID_COLUMN, - { - name: 'short_url', - translationKey: 'short_url.short_url', - type: 'text', - filterable: true, - value: (row: ShortUrl) => row.shortUrl, - }, { name: 'target_url', translationKey: 'short_url.target_url', @@ -33,6 +26,28 @@ export class ShortUrlsColumns extends PageColumns { filterable: true, value: (row: ShortUrl) => row.description, }, + { + name: 'visits', + translationKey: 'short_url.visits', + type: 'number', + filterable: true, + value: (row: ShortUrl) => row.visits, + class: 'highlight2', + }, + { + name: 'loading_screen', + translationKey: 'short_url.loading_screen', + type: 'boolean', + filterable: true, + value: (row: ShortUrl) => row.loadingScreen, + }, + { + name: 'domain', + translationKey: 'common.domain', + type: 'text', + filterable: true, + value: (row: ShortUrl) => row.domain?.name, + }, ...DB_MODEL_COLUMNS, ]; } diff --git a/web/src/app/modules/admin/short-urls/short-urls.data.service.ts b/web/src/app/modules/admin/short-urls/short-urls.data.service.ts index da1dc5c..6fa766a 100644 --- a/web/src/app/modules/admin/short-urls/short-urls.data.service.ts +++ b/web/src/app/modules/admin/short-urls/short-urls.data.service.ts @@ -8,7 +8,7 @@ import { Update, } from 'src/app/core/base/page.data.service'; import { Filter } from 'src/app/model/graphql/filter/filter.model'; -import { Sort } from 'src/app/model/graphql/filter/sort.model'; +import { Sort, SortOrder } from 'src/app/model/graphql/filter/sort.model'; import { Apollo, gql } from 'apollo-angular'; import { QueryResult } from 'src/app/model/entities/query-result'; import { @@ -80,7 +80,7 @@ export class ShortUrlsDataService `, variables: { filter: [{ group: { deleted: { equal: false } } }, ...(filter ?? [])], - sort: sort, + sort: [{ id: SortOrder.DESC }, ...(sort ?? [])], skip: skip, take: take, }, diff --git a/web/src/app/modules/admin/short-urls/short-urls.page.html b/web/src/app/modules/admin/short-urls/short-urls.page.html index 5624bb5..1ead5a3 100644 --- a/web/src/app/modules/admin/short-urls/short-urls.page.html +++ b/web/src/app/modules/admin/short-urls/short-urls.page.html @@ -4,28 +4,19 @@

{{ url.shortUrl }}

-
- {{ 'short_url.target_url' | translate }}: - {{ url.targetUrl }} -
-
- {{ 'common.description' | translate }}: - {{ url.description }} -
-
- {{ 'short_url.visits' | translate }}: - {{ url.visits }} -
-
- {{ 'short_url.loading_screen' | translate }}: - -
-
-
-
- {{ 'common.domain' | translate }}: - {{ url.domain?.name }} -
+ +
+ {{ row.column.translationKey | translate }}: + + +
+
+ + {{ row.column.value(url) }} + +
+
+
@@ -99,18 +90,15 @@ | translate }}" (click)="toggleShowDeleted()"> - +
diff --git a/web/src/app/modules/admin/short-urls/short-urls.page.ts b/web/src/app/modules/admin/short-urls/short-urls.page.ts index a591713..cea66bb 100644 --- a/web/src/app/modules/admin/short-urls/short-urls.page.ts +++ b/web/src/app/modules/admin/short-urls/short-urls.page.ts @@ -11,6 +11,10 @@ import { Filter } from 'src/app/model/graphql/filter/filter.model'; import QrCodeWithLogo from 'qrcode-with-logos'; import { FileUpload, FileUploadHandlerEvent } from 'primeng/fileupload'; import { ConfigService } from 'src/app/service/config.service'; +import { + ResolvedTableColumn, + TableColumn, +} from 'src/app/modules/shared/components/table/table.model'; @Component({ selector: 'app-short-urls', @@ -40,6 +44,8 @@ export class ShortUrlsPage logo: undefined, }; + resolvedColumns: Map[]> = new Map(); + get groupsFromGroupedShortUrls() { return Object.keys(this.groupedShortUrls); } @@ -95,6 +101,35 @@ export class ShortUrlsPage }; } + resolveColumns() { + const columns = this.columns + .map(x => { + if (x.visible === undefined || x.visible === null) { + x.visible = true; + } + return x; + }) + .filter(x => !x.hidden && x.visible === true); + + if (!this.result.nodes || this.result.nodes.length == 0) { + this.resolvedColumns = new Map(); + return; + } + + this.result.nodes.forEach(row => { + const resolvedRow: ResolvedTableColumn[] = []; + columns.forEach(column => { + resolvedRow.push({ + value: column.value(row), + data: row, + column: column, + }); + }); + + this.resolvedColumns.set(row.shortUrl, resolvedRow); + }); + } + load(silent?: boolean): void { if (!silent) this.loading = true; this.dataService @@ -103,6 +138,7 @@ export class ShortUrlsPage this.result = result; this.shortUrlsWithoutGroup = this.getShortUrlsWithoutGroup(); this.groupedShortUrls = this.getShortUrlsWithGroup(); + this.resolveColumns(); this.loading = false; }); }