diff --git a/libs/openchallenges/challenge-search/src/lib/challenge-search-filters.ts b/libs/openchallenges/challenge-search/src/lib/challenge-search-filters.ts
index e1800ef5f7..f5284094c1 100644
--- a/libs/openchallenges/challenge-search/src/lib/challenge-search-filters.ts
+++ b/libs/openchallenges/challenge-search/src/lib/challenge-search-filters.ts
@@ -1,12 +1,10 @@
-import {
- ChallengeSort,
- ChallengeStatus,
-} from '@sagebionetworks/openchallenges/api-client-angular';
import { Filter } from '@sagebionetworks/openchallenges/ui';
import {
- challengeCategoriesLabels,
- challengeIncentivesLabels,
- challengeSubmissionTypesLabels,
+ ChallengeCategoriesOptions,
+ ChallengeIncentivesOptions,
+ ChallengeStatusOptions,
+ ChallengeSubmissionTypesOptions,
+ ChallengeSortOptions,
} from '@sagebionetworks/openchallenges/util';
const thisYear = new Date().getFullYear();
@@ -57,47 +55,13 @@ export const challengeStartYearRangeFilter: Filter[] = [
},
];
-export const challengeStatusFilter: Filter[] = [
- {
- value: ChallengeStatus.Active,
- label: 'Active',
- },
- {
- value: ChallengeStatus.Upcoming,
- label: 'Upcoming',
- },
- {
- value: ChallengeStatus.Completed,
- label: 'Completed',
- },
-];
-
-export const challengeSubmissionTypesFilter: Filter[] =
- challengeSubmissionTypesLabels;
-
-export const challengeIncentivesFilter: Filter[] = challengeIncentivesLabels;
-
-export const challengePlatformsFilter: Filter[] = [];
-
+export const challengeCategoriesFilter: Filter[] = ChallengeCategoriesOptions;
+export const challengeIncentivesFilter: Filter[] = ChallengeIncentivesOptions;
export const challengeInputDataTypesFilter: Filter[] = [];
-
-export const challengeCategoriesFilter: Filter[] = challengeCategoriesLabels;
-
export const challengeOrganizationsFilter: Filter[] = [];
-
export const challengeOrganizersFilter: Filter[] = [];
-
-export const challengeSortFilter: Filter[] = [
- {
- value: ChallengeSort.Relevance,
- label: 'Relevance',
- },
- {
- value: ChallengeSort.StartDate,
- label: 'Start Date',
- },
- {
- value: ChallengeSort.Starred,
- label: 'Most Starred',
- },
-];
+export const challengePlatformsFilter: Filter[] = [];
+export const challengeSortFilter: Filter[] = ChallengeSortOptions;
+export const challengeStatusFilter: Filter[] = ChallengeStatusOptions;
+export const challengeSubmissionTypesFilter: Filter[] =
+ ChallengeSubmissionTypesOptions;
diff --git a/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.html b/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.html
index a3ac7e669c..a0bbd06385 100644
--- a/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.html
+++ b/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.html
@@ -26,7 +26,7 @@
Challenge Details
Status |
- {{ challenge.status | titlecase }} |
+ {{ challenge.status | challengeStatusLabel }} |
Platform |
@@ -58,7 +58,7 @@ Challenge Details
nowrap
*ngFor="let submissionType of challenge.submissionTypes; let isLast = last"
>
- {{ submissionType | submissionTypeLabel }}{{ isLast ? '' : ', ' }}
@@ -69,7 +69,7 @@ Challenge Details
Incentive(s) |
0; else na_prize">
- {{ incentive | incentiveLabel }}{{ isLast ? '' : ', ' }}
|
diff --git a/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.ts b/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.ts
index 8cda34665f..611fc4ce7d 100644
--- a/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.ts
+++ b/libs/openchallenges/challenge/src/lib/challenge-overview/challenge-overview.component.ts
@@ -8,17 +8,19 @@ import {
import { MatIconModule } from '@angular/material/icon';
import {
- IncentiveLabelPipe,
- SubmissionTypeLabelPipe,
+ ChallengeIncentiveLabelPipe,
+ ChallengeStatusLabelPipe,
+ ChallengeSubmissionTypeLabelPipe,
} from '@sagebionetworks/openchallenges/util';
@Component({
selector: 'openchallenges-challenge-overview',
standalone: true,
imports: [
+ ChallengeIncentiveLabelPipe,
+ ChallengeStatusLabelPipe,
+ ChallengeSubmissionTypeLabelPipe,
CommonModule,
- IncentiveLabelPipe,
MatIconModule,
- SubmissionTypeLabelPipe,
],
templateUrl: './challenge-overview.component.html',
styleUrls: ['./challenge-overview.component.scss'],
diff --git a/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.html b/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.html
index f6612b1a82..b5f8532d3e 100644
--- a/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.html
+++ b/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.html
@@ -33,7 +33,7 @@
*ngIf="challenge.incentives.length > 0; else noIncentives"
>
- {{ incentive | incentiveLabel }}{{ isLast ? '' : ', ' }}
+ {{ incentive | challengeIncentiveLabel }}{{ isLast ? '' : ', ' }}
diff --git a/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.ts b/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.ts
index 7e02d68048..6aa29f79f0 100644
--- a/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.ts
+++ b/libs/openchallenges/ui/src/lib/challenge-card/challenge-card.component.ts
@@ -7,13 +7,18 @@ import {
Image,
ImageService,
} from '@sagebionetworks/openchallenges/api-client-angular';
-import { IncentiveLabelPipe } from '@sagebionetworks/openchallenges/util';
+import { ChallengeIncentiveLabelPipe } from '@sagebionetworks/openchallenges/util';
import { Observable } from 'rxjs';
@Component({
selector: 'openchallenges-challenge-card',
standalone: true,
- imports: [CommonModule, IncentiveLabelPipe, MatIconModule, RouterModule],
+ imports: [
+ ChallengeIncentiveLabelPipe,
+ CommonModule,
+ MatIconModule,
+ RouterModule,
+ ],
templateUrl: './challenge-card.component.html',
styleUrls: ['./challenge-card.component.scss'],
})
diff --git a/libs/openchallenges/util/src/index.ts b/libs/openchallenges/util/src/index.ts
index dae8eb421b..b92bfcda35 100644
--- a/libs/openchallenges/util/src/index.ts
+++ b/libs/openchallenges/util/src/index.ts
@@ -5,4 +5,4 @@ export * from './lib/http-status-redirect';
export * from './lib/is-api-client-error';
export * from './lib/page-title.service';
export * from './lib/pipe/challenge-property-label.pipe';
-export * from './lib/pipe/challenge-property-labels';
+export * from './lib/pipe/challenge-property-options';
diff --git a/libs/openchallenges/util/src/lib/pipe/challenge-property-label.pipe.ts b/libs/openchallenges/util/src/lib/pipe/challenge-property-label.pipe.ts
index a4620bde86..1861f8e2e4 100644
--- a/libs/openchallenges/util/src/lib/pipe/challenge-property-label.pipe.ts
+++ b/libs/openchallenges/util/src/lib/pipe/challenge-property-label.pipe.ts
@@ -1,35 +1,76 @@
import { Pipe, PipeTransform } from '@angular/core';
import {
+ ChallengeCategory,
ChallengeIncentive,
+ ChallengeSort,
+ ChallengeStatus,
ChallengeSubmissionType,
} from '@sagebionetworks/openchallenges/api-client-angular';
import {
- challengeIncentivesLabels,
- challengeSubmissionTypesLabels,
-} from './challenge-property-labels';
+ ChallengeCategoriesOptions,
+ ChallengeIncentivesOptions,
+ ChallengeSortOptions,
+ ChallengeStatusOptions,
+ ChallengeSubmissionTypesOptions,
+} from './challenge-property-options';
@Pipe({
- name: 'incentiveLabel',
+ name: 'challengeCategoryLabel',
standalone: true,
})
-export class IncentiveLabelPipe implements PipeTransform {
+export class ChallengeCategoryLabelPipe implements PipeTransform {
+ transform(category: ChallengeCategory): string | undefined {
+ const option = ChallengeCategoriesOptions.find(
+ (item) => item.value === category
+ );
+ return option ? option.label : undefined;
+ }
+}
+
+@Pipe({
+ name: 'challengeIncentiveLabel',
+ standalone: true,
+})
+export class ChallengeIncentiveLabelPipe implements PipeTransform {
transform(incentive: ChallengeIncentive): string | undefined {
- const filterItem = challengeIncentivesLabels.find(
+ const option = ChallengeIncentivesOptions.find(
(item) => item.value === incentive
);
- return filterItem ? filterItem.label : undefined;
+ return option ? option.label : undefined;
+ }
+}
+
+@Pipe({
+ name: 'challengeSortLabel',
+ standalone: true,
+})
+export class ChallengeSortLabelPipe implements PipeTransform {
+ transform(sort: ChallengeSort): string | undefined {
+ const option = ChallengeSortOptions.find((item) => item.value === sort);
+ return option ? option.label : undefined;
+ }
+}
+
+@Pipe({
+ name: 'challengeStatusLabel',
+ standalone: true,
+})
+export class ChallengeStatusLabelPipe implements PipeTransform {
+ transform(status: ChallengeStatus): string | undefined {
+ const option = ChallengeStatusOptions.find((item) => item.value === status);
+ return option ? option.label : undefined;
}
}
@Pipe({
- name: 'submissionTypeLabel',
+ name: 'challengeSubmissionTypeLabel',
standalone: true,
})
-export class SubmissionTypeLabelPipe implements PipeTransform {
+export class ChallengeSubmissionTypeLabelPipe implements PipeTransform {
transform(submissionType: ChallengeSubmissionType): string | undefined {
- const filterItem = challengeSubmissionTypesLabels.find(
+ const option = ChallengeSubmissionTypesOptions.find(
(item) => item.value === submissionType
);
- return filterItem ? filterItem.label : undefined;
+ return option ? option.label : undefined;
}
}
diff --git a/libs/openchallenges/util/src/lib/pipe/challenge-property-labels.ts b/libs/openchallenges/util/src/lib/pipe/challenge-property-options.ts
similarity index 59%
rename from libs/openchallenges/util/src/lib/pipe/challenge-property-labels.ts
rename to libs/openchallenges/util/src/lib/pipe/challenge-property-options.ts
index 8266c5ebb9..e70e51963e 100644
--- a/libs/openchallenges/util/src/lib/pipe/challenge-property-labels.ts
+++ b/libs/openchallenges/util/src/lib/pipe/challenge-property-options.ts
@@ -1,38 +1,53 @@
import {
ChallengeCategory,
ChallengeIncentive,
+ ChallengeSort,
+ ChallengeStatus,
ChallengeSubmissionType,
} from '@sagebionetworks/openchallenges/api-client-angular';
-type ChallengeLabels = {
- value: ChallengeSubmissionType | ChallengeIncentive | ChallengeCategory;
+type ChallengePropertyOption = {
+ value:
+ | ChallengeCategory
+ | ChallengeIncentive
+ | ChallengeSort
+ | ChallengeStatus
+ | ChallengeSubmissionType;
label: string;
};
-export const challengeSubmissionTypesLabels: ChallengeLabels[] = [
+export const ChallengeCategoriesOptions: ChallengePropertyOption[] = [
{
- value: ChallengeSubmissionType.ContainerImage,
- label: 'Container Image',
+ value: ChallengeCategory.Featured,
+ label: 'Featured',
},
{
- value: ChallengeSubmissionType.Mlcube,
- label: 'MLCube',
+ value: ChallengeCategory.Benchmark,
+ label: 'Benchmark',
},
{
- value: ChallengeSubmissionType.Notebook,
- label: 'Notebook',
+ value: ChallengeCategory.Hackathon,
+ label: 'Hackathon',
},
{
- value: ChallengeSubmissionType.PredictionFile,
- label: 'Prediction File',
+ value: ChallengeCategory.StartingSoon,
+ label: 'Starting Soon',
},
{
- value: ChallengeSubmissionType.Other,
- label: 'Other',
+ value: ChallengeCategory.EndingSoon,
+ label: 'Closing Soon',
+ },
+ {
+ value: ChallengeCategory.RecentlyStarted,
+ label: 'Recently Launched',
+ },
+ {
+ value: ChallengeCategory.RecentlyEnded,
+ label: 'Recently Completed',
},
];
-export const challengeIncentivesLabels: ChallengeLabels[] = [
+export const ChallengeIncentivesOptions: ChallengePropertyOption[] = [
{
value: ChallengeIncentive.Monetary,
label: 'Monetary',
@@ -51,33 +66,55 @@ export const challengeIncentivesLabels: ChallengeLabels[] = [
},
];
-export const challengeCategoriesLabels: ChallengeLabels[] = [
+export const ChallengeSortOptions: ChallengePropertyOption[] = [
{
- value: ChallengeCategory.Featured,
- label: 'Featured',
+ value: ChallengeSort.Relevance,
+ label: 'Relevance',
},
{
- value: ChallengeCategory.Benchmark,
- label: 'Benchmark',
+ value: ChallengeSort.StartDate,
+ label: 'Start Date',
},
{
- value: ChallengeCategory.Hackathon,
- label: 'Hackathon',
+ value: ChallengeSort.Starred,
+ label: 'Most Starred',
},
+];
+
+export const ChallengeStatusOptions: ChallengePropertyOption[] = [
{
- value: ChallengeCategory.StartingSoon,
- label: 'Starting Soon',
+ value: ChallengeStatus.Active,
+ label: 'Active',
},
{
- value: ChallengeCategory.EndingSoon,
- label: 'Closing Soon',
+ value: ChallengeStatus.Upcoming,
+ label: 'Upcoming',
},
{
- value: ChallengeCategory.RecentlyStarted,
- label: 'Recently Launched',
+ value: ChallengeStatus.Completed,
+ label: 'Completed',
},
+];
+
+export const ChallengeSubmissionTypesOptions: ChallengePropertyOption[] = [
{
- value: ChallengeCategory.RecentlyEnded,
- label: 'Recently Completed',
+ value: ChallengeSubmissionType.ContainerImage,
+ label: 'Container Image',
+ },
+ {
+ value: ChallengeSubmissionType.Mlcube,
+ label: 'MLCube',
+ },
+ {
+ value: ChallengeSubmissionType.Notebook,
+ label: 'Notebook',
+ },
+ {
+ value: ChallengeSubmissionType.PredictionFile,
+ label: 'Prediction File',
+ },
+ {
+ value: ChallengeSubmissionType.Other,
+ label: 'Other',
},
];