Skip to content

Commit 57b03e7

Browse files
[DSC-2279] implement possibility to negate filter in
1 parent 28e0a1a commit 57b03e7

4 files changed

Lines changed: 21 additions & 6 deletions

File tree

src/app/core/shared/metadata.models.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ export interface MetadataValueFilter {
9696

9797
/** Whether the value constraint should match as a substring. */
9898
substring?: boolean;
99+
/**
100+
* Whether to negate the filter
101+
*/
102+
negate?: boolean;
99103
}
100104

101105
export class MetadatumViewModel {

src/app/core/shared/metadata.utils.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { validate as uuidValidate } from 'uuid';
1414

1515
export const AUTHORITY_GENERATE = 'will be generated::';
1616
export const AUTHORITY_REFERENCE = 'will be referenced::';
17-
17+
export const PLACEHOLDER_VALUE = '#PLACEHOLDER_PARENT_METADATA_VALUE#';
1818
/**
1919
* Utility class for working with DSpace object metadata.
2020
*
@@ -178,15 +178,19 @@ export class Metadata {
178178
} else if (filter.value) {
179179
let fValue = filter.value;
180180
let mValue = mdValue.value;
181+
181182
if (filter.ignoreCase) {
182183
fValue = filter.value.toLowerCase();
183184
mValue = mdValue.value.toLowerCase();
184185
}
186+
let result;
187+
185188
if (filter.substring) {
186-
return mValue.includes(fValue);
189+
result = mValue.includes(fValue);
187190
} else {
188-
return mValue === fValue;
191+
result = mValue === fValue;
189192
}
193+
return filter.negate ? !result : result;
190194
}
191195
return true;
192196
}

src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@
3838
<span *ngIf="dso.firstMetadataValue('dc.date.issued')" class="item-list-date"
3939
[innerHTML]="firstMetadataValue('dc.date.issued')"></span>)
4040
</ng-container>
41-
<span *ngIf="dso.allMetadataValues(authorMetadata).length > 0" class="item-list-authors">
41+
<span *ngIf="dso.allMetadataValues(authorMetadata, placeholderFilter).length > 0" class="item-list-authors">
4242
<ng-container *ngVar="(isCollapsed() | async) as isCollapsed">
4343
<ng-container *ngIf="isCollapsed">
44-
<span *ngFor="let author of dso.limitedMetadata(authorMetadata, additionalMetadataLimit); let i=index; let last=last;">
44+
<span *ngFor="let author of dso.limitedMetadata(authorMetadata, additionalMetadataLimit, placeholderFilter); let i=index; let last=last;">
4545
<ds-metadata-link-view [item]="dso" [metadata]="author" [metadataName]="authorMetadata"></ds-metadata-link-view><span *ngIf="!last">; </span>
4646
</span>
4747
</ng-container>
4848
<ng-container *ngIf="!isCollapsed">
49-
<span *ngFor="let author of dso.allMetadata(authorMetadata); let i=index; let last=last;">
49+
<span *ngFor="let author of dso.allMetadata(authorMetadata, placeholderFilter); let i=index; let last=last;">
5050
<ds-metadata-link-view [item]="dso" [metadata]="author" [metadataName]="authorMetadata"></ds-metadata-link-view><span *ngIf="!last">; </span>
5151
</span>
5252
</ng-container>

src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import { getFirstSucceededRemoteListPayload } from '../../../../../../core/share
1818
import { differenceInDays, differenceInMilliseconds, parseISO} from 'date-fns';
1919
import { filter, map } from 'rxjs/operators';
2020
import { isNotEmpty } from '../../../../../empty.util';
21+
import { MetadataValueFilter } from '../../../../../../core/shared/metadata.models';
22+
import { PLACEHOLDER_VALUE } from '../../../../../../core/shared/metadata.utils';
2123

2224
@listableObjectComponent('PublicationSearchResult', ViewMode.ListElement)
2325
@listableObjectComponent(ItemSearchResult, ViewMode.ListElement)
@@ -46,6 +48,11 @@ export class ItemSearchResultListElementComponent extends SearchResultListElemen
4648

4749
hasLoadedThirdPartyMetrics$: Observable<boolean>;
4850

51+
readonly placeholderFilter: MetadataValueFilter = {
52+
negate: true,
53+
value: PLACEHOLDER_VALUE
54+
};
55+
4956
private thirdPartyMetrics = environment.info.metricsConsents.filter(metric => metric.enabled).map(metric => metric.key);
5057

5158

0 commit comments

Comments
 (0)