From 279e075f58a9b1a37a45c5a4bdc650f4c5d65cdf Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 6 Sep 2026 21:05:05 -0700
Subject: [PATCH] Cute little expired badge
---
.../share-link-bundle-list.component.html | 3 +++
.../share-link-bundle-list.component.spec.ts | 13 +++++++++++++
.../share-link-bundle-list.component.ts | 4 ++++
.../share-link-list.component.html | 3 +++
.../share-link-list.component.spec.ts | 18 ++++++++++++++++++
.../share-link-list.component.ts | 4 ++++
6 files changed, 45 insertions(+)
diff --git a/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html b/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html
index b2bf5cc9d..62a680964 100644
--- a/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html
+++ b/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html
@@ -80,6 +80,9 @@
@if (bundle.expiration) {
{{ bundle.expiration | date: 'short' }}
+ @if (isExpired(bundle.expiration)) {
+ Expired
+ }
}
@if (!bundle.expiration) {
Never
diff --git a/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.spec.ts b/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.spec.ts
index 618610fc2..362d99e0a 100644
--- a/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.spec.ts
+++ b/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.spec.ts
@@ -123,6 +123,19 @@ describe('ShareLinkBundleListComponent', () => {
expect(service.list).toHaveBeenLastCalledWith(2, 25, 'created', true)
})
+ it('marks expired share link bundles', () => {
+ service.list.mockReturnValue(
+ of({
+ count: 1,
+ results: [sampleBundle({ expiration: '2000-01-01T00:00:00.000Z' })],
+ })
+ )
+
+ fixture.detectChanges()
+
+ expect(fixture.nativeElement.textContent).toContain('Expired')
+ })
+
it('stores a changed page size and reloads from the first page', () => {
fixture.detectChanges()
const settingsService = TestBed.inject(SettingsService)
diff --git a/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.ts b/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.ts
index 2497b2614..a8dc8ed4d 100644
--- a/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.ts
+++ b/src-ui/src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.ts
@@ -195,6 +195,10 @@ export class ShareLinkBundleListComponent
return SHARE_LINK_BUNDLE_FILE_VERSION_LABELS[version] ?? version
}
+ isExpired(expiration?: string): boolean {
+ return !!expiration && Date.parse(expiration) <= Date.now()
+ }
+
private replaceBundle(updated: ShareLinkBundleSummary): void {
const bundles = this.bundles()
const index = bundles.findIndex((bundle) => bundle.id === updated.id)
diff --git a/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.html b/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.html
index d2cb78c88..25c90f64c 100644
--- a/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.html
+++ b/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.html
@@ -36,6 +36,9 @@
|
@if (link.expiration) {
{{ link.expiration | date: 'short' }}
+ @if (isExpired(link.expiration)) {
+ Expired
+ }
} @else {
Never
}
diff --git a/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.spec.ts b/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.spec.ts
index 02de8b43b..43a6f7cc0 100644
--- a/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.spec.ts
+++ b/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.spec.ts
@@ -75,6 +75,24 @@ describe('ShareLinkListComponent', () => {
expect(service.list).toHaveBeenLastCalledWith(2, 25, 'created', true)
})
+ it('marks expired share links', () => {
+ service.list.mockReturnValue(
+ of({
+ count: 1,
+ results: [
+ {
+ ...link,
+ expiration: '2000-01-01T00:00:00.000Z',
+ },
+ ],
+ })
+ )
+
+ fixture.detectChanges()
+
+ expect(fixture.nativeElement.textContent).toContain('Expired')
+ })
+
it('stores a changed page size and reloads from the first page', () => {
const settingsService = TestBed.inject(SettingsService)
jest.spyOn(settingsService, 'get').mockReturnValueOnce({ share_links: 25 })
diff --git a/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.ts b/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.ts
index 36dc6835b..8c4239256 100644
--- a/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.ts
+++ b/src-ui/src/app/components/manage/share-links/share-link-list/share-link-list.component.ts
@@ -120,6 +120,10 @@ export class ShareLinkListComponent
return SHARE_LINK_BUNDLE_FILE_VERSION_LABELS[version] ?? version
}
+ isExpired(expiration?: string): boolean {
+ return !!expiration && Date.parse(expiration) <= Date.now()
+ }
+
copy(link: ShareLink): void {
if (this.clipboard.copy(this.getShareUrl(link))) {
this.copiedID.set(link.id)
|