// progress-width.pipe.ts import { Pipe, PipeTransform } from '@angular/core'; //Moment library import moment from 'moment'; @Pipe({ standalone: true, name: 'progressExpirationWidth', }) export class ProgressExpirationWidthPipe implements PipeTransform { transform( expireDate: Date, startDate?: Date, completedDate?: Date ): string { const today = moment(); const expireMoment = moment(expireDate); const completedMoment = completedDate ? moment(completedDate) : null; const startTaskDate = moment(startDate); const totalDays = expireMoment.diff(moment(startTaskDate), 'days'); const daysLeft = expireMoment.diff(today, 'days'); const diffTotalandDay = totalDays - daysLeft; let percentage: number; if ( completedMoment && completedMoment.isBefore(today) && expireMoment ) { percentage = 100; } else if (diffTotalandDay !== 0) { if (!completedMoment || !completedMoment.isValid()) { percentage = (daysLeft / totalDays) * 100; } else if (completedMoment && completedMoment.isValid()) { percentage = 100 - (daysLeft / totalDays) * 100; } else { percentage = (daysLeft / 365) * 100; } } else { const timeDifference = today.diff(moment(), 'hours'); if (timeDifference > 0) { const daysProgress = totalDays !== 0 ? (1 / totalDays) * 100 : (1 / 365) * 100; percentage = daysProgress / (24 / timeDifference); } else { percentage = 0; } } if (!percentage) { percentage = totalDays > 0 ? (daysLeft / totalDays) * 100 : 0; } return `${percentage}%`; } }