diff --git a/projects/pathway-browser/src/app/viewport/search/search.component.ts b/projects/pathway-browser/src/app/viewport/search/search.component.ts index 57fa02e..d9185f4 100644 --- a/projects/pathway-browser/src/app/viewport/search/search.component.ts +++ b/projects/pathway-browser/src/app/viewport/search/search.component.ts @@ -487,7 +487,9 @@ export namespace Search { isDisease: boolean; hasEHLD?: boolean; hasReferenceEntity: boolean; - disease: boolean + disease: boolean; + deleted: boolean; + date: number; } export interface EntryResult { diff --git a/projects/website-angular/src/app/search/search.component.html b/projects/website-angular/src/app/search/search.component.html index b77b750..7e2993e 100644 --- a/projects/website-angular/src/app/search/search.component.html +++ b/projects/website-angular/src/app/search/search.component.html @@ -281,9 +281,33 @@

{{ group.typeName }} ({{ group.entriesCount }})

@for (entry of group.entries; track entry.dbId) {
- - {{ entry.stId }} + @if (entry.deleted) { + + + @if (entry.replacementStIds?.length) { + ⇒ + + {{ entry.replacementStIds[0] }} + + } + + } @else { + + + {{ entry.stId }} + } +
+ @if (entry.deleted && entry.date) { +
+ Deleted on + {{ entry.date | date:'MMM d, y, h:mm:ss a' }} +
+ } @if (entry.species?.length) {
@for (sp of entry.species; track sp; let last = $last) { diff --git a/projects/website-angular/src/app/search/search.component.scss b/projects/website-angular/src/app/search/search.component.scss index ed74920..261fce0 100644 --- a/projects/website-angular/src/app/search/search.component.scss +++ b/projects/website-angular/src/app/search/search.component.scss @@ -73,6 +73,12 @@ $border-radius: 8px; align-items: flex-start; } +.deleted { + text-decoration: line-through; + color: #555; +} + + // Facet sidebar .facet-sidebar { width: 260px; diff --git a/projects/website-angular/src/app/search/search.component.ts b/projects/website-angular/src/app/search/search.component.ts index 8f8abb4..fcb62c9 100644 --- a/projects/website-angular/src/app/search/search.component.ts +++ b/projects/website-angular/src/app/search/search.component.ts @@ -15,11 +15,12 @@ import { SearchFilters, FacetCount, } from '../../services/search.service'; +import { DatePipe } from '@angular/common'; @Component({ selector: 'app-search', standalone: true, - imports: [PageLayoutComponent, TileComponent, RouterLink, SearchBarComponent, FormsModule], + imports: [PageLayoutComponent, TileComponent, RouterLink, SearchBarComponent, FormsModule, DatePipe], templateUrl: './search.component.html', styleUrl: './search.component.scss', }) @@ -199,7 +200,26 @@ export class SearchComponent implements OnInit, OnDestroy, AfterViewInit { this.hasNoResults = false; } else { // Successful API response - check if we have results - this.results = results as SearchResult; + const res = results as SearchResult; + const hasNonDeleted = res.results?.some(group => + group.entries.some(e => !e.deleted) + ); + res.results = res.results?.map(group => { + const entries = hasNonDeleted + ? group.entries.filter(e => !e.deleted) + : group.entries; + + return { + ...group, + entries, + entriesCount: entries.length + }; + }).filter(group => group.entries.length > 0) || []; + res.numberOfMatches = res.results.reduce( + (sum, g) => sum + g.entries.length, + 0 + ); + this.results = res; this.facets = facets; this.totalPages = Math.ceil(((results as SearchResult).numberOfMatches || 0) / this.pageSize); this.hasNoResults = ((results as SearchResult).numberOfMatches || 0) === 0; @@ -233,7 +253,7 @@ export class SearchComponent implements OnInit, OnDestroy, AfterViewInit { get allEntries(): SearchEntry[] { if (!this.results?.results) return []; - return this.results.results.flatMap(g => g.entries); + return this.results.results.flatMap(g => this.filterDeletedEntries(g.entries)); } toggleFacet(category: string, value: string): void { @@ -272,6 +292,17 @@ export class SearchComponent implements OnInit, OnDestroy, AfterViewInit { this.advancedMode = !this.advancedMode; } + private filterDeletedEntries(entries: SearchEntry[]): SearchEntry[] { + if (!entries?.length) return []; + + const nonDeleted = entries.filter(e => !e.deleted); + if (nonDeleted.length > 0) { + return nonDeleted; + } + + return entries; + } + private updateQueryParams(params: Record): void { this.router.navigate([], { relativeTo: this.route, diff --git a/projects/website-angular/src/services/search.service.ts b/projects/website-angular/src/services/search.service.ts index 2f51072..0c35f90 100644 --- a/projects/website-angular/src/services/search.service.ts +++ b/projects/website-angular/src/services/search.service.ts @@ -16,6 +16,8 @@ export interface SearchEntry { referenceIdentifier: string; databaseName: string; referenceURL: string; + deleted: boolean; + date: number; } export interface ResultGroup {