From d598a434a3f535e5b108626fba9ebbf9d152f7b1 Mon Sep 17 00:00:00 2001 From: Pham Hoang Hung <84316773+phhung-axonivy@users.noreply.github.com> Date: Fri, 25 Oct 2024 10:42:32 +0700 Subject: [PATCH] MARP-1205 add timeperiod below publisher of a feedback comment (#208) Co-authored-by: nntthuy-axonivy --- .../product-feedback.component.html | 13 +- .../product-feedback.component.scss | 5 + .../product-feedback.component.spec.ts | 22 ++- .../product-feedback.component.ts | 7 +- ...t-detail-information-tab.component.spec.ts | 16 +- .../app/shared/constants/common.constant.ts | 8 + .../src/app/shared/enums/time-ago.enum.ts | 16 ++ .../src/app/shared/models/feedback.model.ts | 4 +- .../app/shared/pipes/time-ago.pipe.spec.ts | 156 ++++++++++++++++++ .../src/app/shared/pipes/time-ago.pipe.ts | 73 ++++++++ marketplace-ui/src/assets/i18n/de.yaml | 15 ++ marketplace-ui/src/assets/i18n/en.yaml | 15 ++ .../src/assets/scss/custom-style.scss | 3 +- 13 files changed, 334 insertions(+), 19 deletions(-) create mode 100644 marketplace-ui/src/app/shared/enums/time-ago.enum.ts create mode 100644 marketplace-ui/src/app/shared/pipes/time-ago.pipe.spec.ts create mode 100644 marketplace-ui/src/app/shared/pipes/time-ago.pipe.ts diff --git a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.html b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.html index bc78215df..4d70eb386 100644 --- a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.html +++ b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.html @@ -7,11 +7,16 @@ class="rounded-circle img-avatar img-fit-cover" [src]="feedback.userAvatarUrl ?? '/assets/images/misc/avatar-default.png'" alt="Github user avatar" /> -
-

- {{ feedback.username ?? 'Github User' }} +

+
+

+ {{ feedback.username ?? 'Github User' }} +

+ +
+ -
diff --git a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.scss b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.scss index ba539acca..624af5135 100644 --- a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.scss +++ b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.scss @@ -87,3 +87,8 @@ $aspect-ratio: math.div(1, 1); line-height: 21px; } +.feedback-time-text { + font-size: 1.2rem; + line-height: 1.452rem; + color: var(--text-feedback-time-color); +} \ No newline at end of file diff --git a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.spec.ts b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.spec.ts index bffc76b70..7ed508a43 100644 --- a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.spec.ts +++ b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.spec.ts @@ -4,6 +4,8 @@ import { CommonModule } from '@angular/common'; import { StarRatingComponent } from '../../../../../../shared/components/star-rating/star-rating.component'; import { ElementRef } from '@angular/core'; import { Feedback } from '../../../../../../shared/models/feedback.model'; +import { MissingTranslationHandler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { httpLoaderFactory } from '../../../../../../core/configs/translate.config'; describe('ProductFeedbackComponent', () => { let component: ProductFeedbackComponent; @@ -21,12 +23,30 @@ describe('ProductFeedbackComponent', () => { await TestBed.configureTestingModule({ imports: [ProductFeedbackComponent, StarRatingComponent, CommonModule], providers: [ - { provide: ElementRef, useValue: mockElementRef } + { provide: ElementRef, useValue: mockElementRef }, + TranslateService ] }).compileComponents(); + + }); beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + }, + missingTranslationHandler: { + provide: MissingTranslationHandler, + useValue: { handle: () => 'Translation missing' } + } + }) + ] + }); + fixture = TestBed.createComponent(ProductFeedbackComponent); component = fixture.componentInstance; component.feedback = { diff --git a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.ts b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.ts index f894643c9..b3176734c 100644 --- a/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.ts +++ b/marketplace-ui/src/app/modules/product/product-detail/product-detail-feedback/product-feedbacks-panel/product-feedback/product-feedback.component.ts @@ -1,12 +1,14 @@ -import { Component, ElementRef, HostListener, Input, signal, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, Input, signal, ViewChild } from '@angular/core'; import { CommonModule } from '@angular/common'; import { StarRatingComponent } from '../../../../../../shared/components/star-rating/star-rating.component'; import { Feedback } from '../../../../../../shared/models/feedback.model'; +import { TimeAgoPipe } from '../../../../../../shared/pipes/time-ago.pipe'; +import { LanguageService } from '../../../../../../core/services/language/language.service'; @Component({ selector: 'app-product-feedback', standalone: true, - imports: [CommonModule, StarRatingComponent], + imports: [CommonModule, StarRatingComponent, TimeAgoPipe], templateUrl: './product-feedback.component.html', styleUrl: './product-feedback.component.scss' }) @@ -16,6 +18,7 @@ export class ProductFeedbackComponent { showToggle = signal(false); isExpanded = signal(false); + languageService = inject(LanguageService); ngAfterViewInit() { this.setShowToggle(); diff --git a/marketplace-ui/src/app/modules/product/product-detail/product-detail-information-tab/product-detail-information-tab.component.spec.ts b/marketplace-ui/src/app/modules/product/product-detail/product-detail-information-tab/product-detail-information-tab.component.spec.ts index 0ad112e39..c0fd9b7cc 100644 --- a/marketplace-ui/src/app/modules/product/product-detail/product-detail-information-tab/product-detail-information-tab.component.spec.ts +++ b/marketplace-ui/src/app/modules/product/product-detail/product-detail-information-tab/product-detail-information-tab.component.spec.ts @@ -10,9 +10,7 @@ import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { MOCK_EXTERNAL_DOCUMENT } from '../../../../shared/mocks/mock-data'; const TEST_ID = 'portal'; -const TEST_VERSION = 'v10.0.0'; -const TEST_ACTUAL_VERSION = '10.0.0'; -const TEST_ARTIFACT_ID = 'portal-guide'; +const TEST_VERSION = '10.0.0'; const TEST_ARTIFACT_NAME = 'Portal Guide'; const TEST_DOC_URL = '/market-cache/portal/portal-guide/10.0.0/doc/index.html'; @@ -52,7 +50,7 @@ describe('ProductDetailInformationTabComponent', () => { const changes: SimpleChanges = { selectedVersion: { currentValue: TEST_VERSION, - previousValue: 'v8.0.0', + previousValue: '8.0.0', firstChange: false, isFirstChange: () => false }, @@ -66,7 +64,7 @@ describe('ProductDetailInformationTabComponent', () => { component.ngOnChanges(changes); - expect(productDetailService.getExteralDocumentForProductByVersion).toHaveBeenCalledWith(TEST_ID, TEST_ACTUAL_VERSION); + expect(productDetailService.getExteralDocumentForProductByVersion).toHaveBeenCalledWith(TEST_ID, TEST_VERSION); expect(component.externalDocumentLink).toBe(TEST_DOC_URL); expect(component.displayExternalDocName).toBe(TEST_ARTIFACT_NAME); }); @@ -77,7 +75,7 @@ describe('ProductDetailInformationTabComponent', () => { const changes: SimpleChanges = { selectedVersion: { currentValue: '', - previousValue: 'v8.0.0', + previousValue: '8.0.0', firstChange: false, isFirstChange: () => false }, @@ -97,8 +95,8 @@ describe('ProductDetailInformationTabComponent', () => { }); it('should extract version value correctly', () => { - const versionDisplayName = TEST_VERSION; + const versionDisplayName = "Version 10.0.0"; const extractedValue = component.extractVersionValue(versionDisplayName); - expect(extractedValue).toBe(TEST_ACTUAL_VERSION); + expect(extractedValue).toBe(TEST_VERSION); }); -}); \ No newline at end of file +}); diff --git a/marketplace-ui/src/app/shared/constants/common.constant.ts b/marketplace-ui/src/app/shared/constants/common.constant.ts index 3797c3fd1..5c51e0e8f 100644 --- a/marketplace-ui/src/app/shared/constants/common.constant.ts +++ b/marketplace-ui/src/app/shared/constants/common.constant.ts @@ -206,3 +206,11 @@ export const SEARCH_URL = 'https://developer.axonivy.com/search'; export const SHOW_DEV_VERSION = "showDevVersions"; export const DEFAULT_VENDOR_IMAGE = '/assets/images/misc/axonivy-logo.svg'; export const DEFAULT_VENDOR_IMAGE_BLACK = '/assets/images/misc/axonivy-logo-black.svg'; + +export const SECONDS_IN_A_MINUTE = 60; +export const MINUTES_IN_A_HOUR = 60; +export const HOURS_IN_A_DAY = 24; +export const DAYS_IN_A_WEEK = 7; +export const DAYS_IN_A_MONTH = 30; +export const DAYS_IN_A_YEAR = 365; + diff --git a/marketplace-ui/src/app/shared/enums/time-ago.enum.ts b/marketplace-ui/src/app/shared/enums/time-ago.enum.ts new file mode 100644 index 000000000..7180b2977 --- /dev/null +++ b/marketplace-ui/src/app/shared/enums/time-ago.enum.ts @@ -0,0 +1,16 @@ +export enum TimeAgo { + YEAR_AGO = 'common.timeAgo.yearAgo', + YEARS_AGO = 'common.timeAgo.yearsAgo', + MONTH_AGO = 'common.timeAgo.monthAgo', + MONTHS_AGO = 'common.timeAgo.monthsAgo', + WEEK_AGO = 'common.timeAgo.weekAgo', + WEEKS_AGO = 'common.timeAgo.weeksAgo', + DAY_AGO = 'common.timeAgo.dayAgo', + DAYS_AGO = 'common.timeAgo.daysAgo', + HOUR_AGO = 'common.timeAgo.hourAgo', + HOURS_AGO = 'common.timeAgo.hoursAgo', + MINUTE_AGO = 'common.timeAgo.minuteAgo', + MINUTES_AGO = 'common.timeAgo.minutesAgo', + SECOND_AGO = 'common.timeAgo.secondAgo', + SECONDS_AGO = 'common.timeAgo.secondsAgo', +} diff --git a/marketplace-ui/src/app/shared/models/feedback.model.ts b/marketplace-ui/src/app/shared/models/feedback.model.ts index 68de53fac..10a6488d2 100644 --- a/marketplace-ui/src/app/shared/models/feedback.model.ts +++ b/marketplace-ui/src/app/shared/models/feedback.model.ts @@ -2,8 +2,8 @@ export interface Feedback { username?: string; userAvatarUrl?: string; userProvider?: string; - createdDate?: Date; - updatedDate?: Date; + createdAt?: Date; + updatedAt?: Date; content: string; rating: number; productId: string; diff --git a/marketplace-ui/src/app/shared/pipes/time-ago.pipe.spec.ts b/marketplace-ui/src/app/shared/pipes/time-ago.pipe.spec.ts new file mode 100644 index 000000000..c31f24f86 --- /dev/null +++ b/marketplace-ui/src/app/shared/pipes/time-ago.pipe.spec.ts @@ -0,0 +1,156 @@ +import { TestBed } from '@angular/core/testing'; +import { + MissingTranslationHandler, + TranslateLoader, + TranslateModule, + TranslateService +} from '@ngx-translate/core'; +import { Language } from '../enums/language.enum'; +import { TimeAgo } from '../enums/time-ago.enum'; +import { TimeAgoPipe } from './time-ago.pipe'; +import { httpLoaderFactory } from '../../core/configs/translate.config'; + +describe('TimeAgoPipe', () => { + let pipe: TimeAgoPipe; + let translateService: TranslateService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory + }, + missingTranslationHandler: { + provide: MissingTranslationHandler, + useValue: { handle: () => 'Translation missing' } + } + }) + ], + providers: [TimeAgoPipe] + }); + + translateService = TestBed.inject(TranslateService); + pipe = TestBed.inject(TimeAgoPipe); + }); + + it('should render the text 1 year ago', () => { + const oneYearAgo = new Date(); + oneYearAgo.setFullYear(new Date().getFullYear() - 1); + expect(pipe.getTimeAgoValue(oneYearAgo)).toBe( + translateService.instant(TimeAgo.YEAR_AGO) + ); + }); + + it('should render the text 2 years ago', () => { + const twoYearsAgo = new Date(); + twoYearsAgo.setFullYear(new Date().getFullYear() - 2); + expect(pipe.getTimeAgoValue(twoYearsAgo)).toBe( + translateService.instant(TimeAgo.YEARS_AGO, { number: 2 }) + ); + }); + + it('should render the text 1 month ago', () => { + const oneMonthAgo = new Date(); + oneMonthAgo.setMonth(new Date().getMonth() - 1); + expect(pipe.getTimeAgoValue(oneMonthAgo)).toBe( + translateService.instant(TimeAgo.MONTH_AGO) + ); + }); + + it('should render the text 2 months ago', () => { + const twoMonthsAgo = new Date(); + twoMonthsAgo.setMonth(new Date().getMonth() - 2); + expect(pipe.getTimeAgoValue(twoMonthsAgo)).toBe( + translateService.instant(TimeAgo.MONTHS_AGO, { number: 2 }) + ); + }); + + it('should render the text 1 week ago', () => { + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(new Date().getDate() - 7); + expect(pipe.getTimeAgoValue(oneWeekAgo)).toBe( + translateService.instant(TimeAgo.WEEK_AGO) + ); + }); + + it('should render the text 2 weeks ago', () => { + const twoWeeksAgo = new Date(); + twoWeeksAgo.setDate(new Date().getDate() - 14); + expect(pipe.getTimeAgoValue(twoWeeksAgo)).toBe( + translateService.instant(TimeAgo.WEEKS_AGO, { number: 2 }) + ); + }); + + it('should render the text 1 day ago', () => { + const oneDayAgo = new Date(); + oneDayAgo.setDate(new Date().getDate() - 1); + expect(pipe.getTimeAgoValue(oneDayAgo)).toBe( + translateService.instant(TimeAgo.DAY_AGO) + ); + }); + + it('should render the text 2 days ago', () => { + const twoDaysAgo = new Date(); + twoDaysAgo.setDate(new Date().getDate() - 2); + expect(pipe.getTimeAgoValue(twoDaysAgo)).toBe( + translateService.instant(TimeAgo.DAYS_AGO, { number: 2 }) + ); + }); + + it('should render the text 1 hour ago', () => { + const oneHourAgo = new Date(); + oneHourAgo.setHours(new Date().getHours() - 1); + expect(pipe.getTimeAgoValue(oneHourAgo)).toBe( + translateService.instant(TimeAgo.HOUR_AGO) + ); + }); + + it('should render the text 2 hours ago', () => { + const twoHoursAgo = new Date(); + twoHoursAgo.setHours(new Date().getHours() - 2); + expect(pipe.getTimeAgoValue(twoHoursAgo)).toBe( + translateService.instant(TimeAgo.HOURS_AGO, { number: 2 }) + ); + }); + + it('should render the text 1 minute ago', () => { + const oneMinuteAgo = new Date(); + oneMinuteAgo.setMinutes(new Date().getMinutes() - 1); + expect(pipe.getTimeAgoValue(oneMinuteAgo)).toBe( + translateService.instant(TimeAgo.MINUTE_AGO) + ); + }); + + it('should render the text 2 minutes ago', () => { + const twoMinutesAgo = new Date(); + twoMinutesAgo.setMinutes(new Date().getMinutes() - 2); + expect(pipe.getTimeAgoValue(twoMinutesAgo)).toBe( + translateService.instant(TimeAgo.MINUTES_AGO, { number: 2 }) + ); + }); + + it('should render the text 1 second ago', () => { + expect(pipe.getTimeAgoValue(new Date())).toBe( + translateService.instant(TimeAgo.SECOND_AGO) + ); + pipe.transform(new Date(), Language.EN).then(result => { + expect(result).toBe(translateService.instant(TimeAgo.SECOND_AGO)); + }); + + const oneSecondAgo = new Date(); + oneSecondAgo.setSeconds(new Date().getSeconds() - 1); + expect(pipe.getTimeAgoValue(oneSecondAgo)).toBe( + translateService.instant(TimeAgo.SECOND_AGO) + ); + }); + + it('should render the text 2 seconds ago', () => { + const twoSecondsAgo = new Date(); + twoSecondsAgo.setSeconds(new Date().getSeconds() - 2); + expect(pipe.getTimeAgoValue(twoSecondsAgo)).toBe( + translateService.instant(TimeAgo.SECONDS_AGO, { number: 2 }) + ); + }); +}); diff --git a/marketplace-ui/src/app/shared/pipes/time-ago.pipe.ts b/marketplace-ui/src/app/shared/pipes/time-ago.pipe.ts new file mode 100644 index 000000000..d3aa7c9dc --- /dev/null +++ b/marketplace-ui/src/app/shared/pipes/time-ago.pipe.ts @@ -0,0 +1,73 @@ +import { inject, Pipe, PipeTransform } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { firstValueFrom } from 'rxjs'; +import { + DAYS_IN_A_MONTH, + DAYS_IN_A_WEEK, + DAYS_IN_A_YEAR, + HOURS_IN_A_DAY, + MINUTES_IN_A_HOUR, + SECONDS_IN_A_MINUTE +} from '../constants/common.constant'; +import { Language } from '../enums/language.enum'; +import { TimeAgo } from '../enums/time-ago.enum'; + +@Pipe({ + standalone: true, + name: 'timeAgo' +}) +export class TimeAgoPipe implements PipeTransform { + translateService = inject(TranslateService); + async transform(value?: Date, language?: Language, _args?: []): Promise { + if (value === undefined || language === undefined) { + return ''; + } + + this.translateService.setDefaultLang(language); + await firstValueFrom(this.translateService.use(language)); + return this.getTimeAgoValue(value); + } + + getTimeAgoValue(value: Date): string { + const date = new Date(value); + const now = new Date(); + const diff = now.getTime() - date.getTime(); + + const seconds = Math.floor(diff / 1000); + + const minutes = Math.floor(seconds / SECONDS_IN_A_MINUTE); + const hours = Math.floor(minutes / MINUTES_IN_A_HOUR); + const days = Math.floor(hours / HOURS_IN_A_DAY); + const weeks = Math.floor(days / DAYS_IN_A_WEEK); + const months = Math.floor(days / DAYS_IN_A_MONTH); + const years = Math.floor(days / DAYS_IN_A_YEAR); + + const timeIntervals = [ + { value: years, singularKey: TimeAgo.YEAR_AGO, pluralKey: TimeAgo.YEARS_AGO }, + { value: months, singularKey: TimeAgo.MONTH_AGO, pluralKey: TimeAgo.MONTHS_AGO }, + { value: weeks, singularKey: TimeAgo.WEEK_AGO, pluralKey: TimeAgo.WEEKS_AGO }, + { value: days, singularKey: TimeAgo.DAY_AGO, pluralKey: TimeAgo.DAYS_AGO }, + { value: hours, singularKey: TimeAgo.HOUR_AGO, pluralKey: TimeAgo.HOURS_AGO }, + { value: minutes, singularKey: TimeAgo.MINUTE_AGO, pluralKey: TimeAgo.MINUTES_AGO }, + { value: seconds, singularKey: TimeAgo.SECOND_AGO, pluralKey: TimeAgo.SECONDS_AGO } + ]; + + for (const timeInterval of timeIntervals) { + if (timeInterval.value > 1) { + return this.getTranslatedTimeAgo(timeInterval.pluralKey, timeInterval.value); + } + + if (timeInterval.value === 1) { + return this.getTranslatedTimeAgo(timeInterval.singularKey); + } + } + return this.getTranslatedTimeAgo(TimeAgo.SECOND_AGO); + } + + private getTranslatedTimeAgo(timeAgo: TimeAgo, timeNumber?: number) { + if (timeNumber === undefined) { + return this.translateService.instant(timeAgo); + } + return this.translateService.instant(timeAgo, { number: timeNumber }); + } +} diff --git a/marketplace-ui/src/assets/i18n/de.yaml b/marketplace-ui/src/assets/i18n/de.yaml index d72f5089d..3885d932a 100644 --- a/marketplace-ui/src/assets/i18n/de.yaml +++ b/marketplace-ui/src/assets/i18n/de.yaml @@ -111,3 +111,18 @@ common: reviewLabelNoYet: Noch keine Bewertungen labels: redirecting: Redirecting ...! + timeAgo: + yearAgo: vor einem Jahr + yearsAgo: 'vor {{ number }} Jahren' + monthAgo: vor einem Monat + monthsAgo: 'vor {{ number }} Monaten' + weekAgo: vor einer Woche + weeksAgo: 'vor {{ number }} Wochen' + dayAgo: vor einem Tag + daysAgo: 'vor {{ number }} Tagen' + hourAgo: vor einer Stunde + hoursAgo: 'vor {{ number }} Stunden' + minuteAgo: vor einer Minute + minutesAgo: 'vor {{ number }} Minuten' + secondAgo: vor einer Sekunde + secondsAgo: 'vor {{ number }} Sekunden' diff --git a/marketplace-ui/src/assets/i18n/en.yaml b/marketplace-ui/src/assets/i18n/en.yaml index 40836f2ff..6dfa758c4 100644 --- a/marketplace-ui/src/assets/i18n/en.yaml +++ b/marketplace-ui/src/assets/i18n/en.yaml @@ -115,3 +115,18 @@ common: reviewLabelNoYet: No reviews yet labels: redirecting: Redirecting ...! + timeAgo: + yearAgo: 1 year ago + yearsAgo: '{{ number }} years ago' + monthAgo: 1 month ago + monthsAgo: '{{ number }} months ago' + weekAgo: 1 week ago + weeksAgo: '{{ number }} weeks ago' + dayAgo: 1 day ago + daysAgo: '{{ number }} days ago' + hourAgo: 1 hour ago + hoursAgo: '{{ number }} hours ago' + minuteAgo: 1 minute ago + minutesAgo: '{{ number }} minutes ago' + secondAgo: 1 second ago + secondsAgo: '{{ number }} seconds ago' diff --git a/marketplace-ui/src/assets/scss/custom-style.scss b/marketplace-ui/src/assets/scss/custom-style.scss index c1d859f50..2303bc332 100644 --- a/marketplace-ui/src/assets/scss/custom-style.scss +++ b/marketplace-ui/src/assets/scss/custom-style.scss @@ -78,6 +78,7 @@ p { --star-color: #b0b0b0; --star-filled-color: #{$ivyPrimaryTextColorLight}; --text-no-rating-color: #757575; + --text-feedback-time-color: #757575; --text-error-code-color: #757575; --text-error-oops-color: #{$ivyPrimaryTextColorLight}; @@ -181,7 +182,7 @@ p { --star-color: #757575; --star-filled-color: #{$white}; --text-no-rating-color: #A3A3A3; - + --text-feedback-time-color: #A3A3A3; --text-error-code-color: #A3A3A3; --text-error-oops-color: #ffffff;