diff --git a/libs/angular/src/tools/achievements/achievement-card.component.ts b/libs/angular/src/tools/achievements/achievement-card.component.ts index f5a62f295cf..3b0254e98c0 100644 --- a/libs/angular/src/tools/achievements/achievement-card.component.ts +++ b/libs/angular/src/tools/achievements/achievement-card.component.ts @@ -6,17 +6,15 @@ import { CardComponent, Icon, IconModule, - ItemModule, TypographyModule, } from "@bitwarden/components"; import { AchievementIcon } from "./icons/achievement.icon"; - @Component({ selector: "achievement-card", templateUrl: "achievement-card.component.html", standalone: true, - imports: [CommonModule, ItemModule, ButtonModule, IconModule, TypographyModule, CardComponent], + imports: [CommonModule, ButtonModule, IconModule, TypographyModule, CardComponent], }) export class AchievementCard { protected readonly icon: Icon = AchievementIcon; @@ -41,7 +39,7 @@ export class AchievementCard { this.iconStyle = ""; } else if (progress > 0) { this.cardClass = "tw-bg-info-100"; - this.iconStyle = ""; + this.iconStyle = "tw-grayscale"; } else { this.cardClass = ""; this.iconStyle = "tw-grayscale"; diff --git a/libs/angular/src/tools/achievements/achievement-item.component.html b/libs/angular/src/tools/achievements/achievement-item.component.html new file mode 100644 index 00000000000..e68663c1a20 --- /dev/null +++ b/libs/angular/src/tools/achievements/achievement-item.component.html @@ -0,0 +1,12 @@ + + + + + + {{ title() }} + {{ description() }} + @if (earned()) { + Earned: {{ date() | date: "medium" }} + } + + diff --git a/libs/angular/src/tools/achievements/achievement-item.component.ts b/libs/angular/src/tools/achievements/achievement-item.component.ts new file mode 100644 index 00000000000..ce50b7dce1e --- /dev/null +++ b/libs/angular/src/tools/achievements/achievement-item.component.ts @@ -0,0 +1,51 @@ +import { CommonModule } from "@angular/common"; +import { Component, effect, input, untracked } from "@angular/core"; + +import { + ButtonModule, + Icon, + IconModule, + ItemModule, + TypographyModule, +} from "@bitwarden/components"; + +import { AchievementIcon } from "./icons/achievement.icon"; + +@Component({ + selector: "achievement-item", + templateUrl: "achievement-item.component.html", + standalone: true, + imports: [CommonModule, ItemModule, ButtonModule, IconModule, TypographyModule], +}) +export class AchievemenItem { + protected readonly icon: Icon = AchievementIcon; + protected iconStyle: string = "tw-grayscale"; + + title = input.required(); + description = input.required(); + + earned = input(false); + progress = input(0); + date = input(); + + protected cardClass: string; + constructor() { + effect(() => { + const earned = this.earned(); + const progress = this.progress(); + + untracked(() => { + if (earned) { + this.cardClass = "tw-bg-success-100"; + this.iconStyle = ""; + } else if (progress > 0) { + this.cardClass = "tw-bg-info-100"; + this.iconStyle = "tw-grayscale"; + } else { + this.cardClass = ""; + this.iconStyle = "tw-grayscale"; + } + }); + }); + } +} diff --git a/libs/angular/src/tools/achievements/achievements-list.component.html b/libs/angular/src/tools/achievements/achievements-list.component.html index c504cf27922..5d762969cc2 100644 --- a/libs/angular/src/tools/achievements/achievements-list.component.html +++ b/libs/angular/src/tools/achievements/achievements-list.component.html @@ -6,15 +6,15 @@ {{ allAchievementCards.length }} - @for (achievement of allAchievementCards; track achievement.name) { - - + @for (achievement of allAchievementCards; track achievement.name) { + - - } + > + } +
Earned: {{ date() | date: "medium" }}