11import { Clipboard } from '@angular/cdk/clipboard' ;
22import { DatePipe , DecimalPipe } from '@angular/common' ;
33import { HttpClient } from '@angular/common/http' ;
4- import {
5- afterNextRender ,
6- Component ,
7- computed ,
8- ElementRef ,
9- inject ,
10- input ,
11- resource ,
12- signal ,
13- viewChild ,
14- } from '@angular/core' ;
4+ import { afterNextRender , Component , computed , inject , input , resource , signal } from '@angular/core' ;
155import { NgxJsonViewerModule } from 'ngx-json-viewer' ;
166import {
177 BuildErrorType ,
@@ -48,7 +38,10 @@ import {ProviderLabel} from '../../shared/provider-label';
4838import { AiAssistant } from '../../shared/ai-assistant/ai-assistant' ;
4939import { LighthouseCategory } from './lighthouse-category' ;
5040import { MultiSelect } from '../../shared/multi-select/multi-select' ;
41+ < < < << << HEAD
5142import { FileCodeViewer } from '../../shared/file-code-viewer/file-code-viewer' ;
43+ === === =
44+ >>> >>> > 7 c6ff1f ( refactor : change code location and color gradiant of repair attempt graph )
5245import {
5346 calculateAverageRepairAttempts ,
5447 createRepairAttemptGraphData ,
@@ -311,21 +304,7 @@ export class ReportViewer {
311304 return null ;
312305 }
313306
314- let totalRepairs = 0 ;
315- let count = 0 ;
316-
317- for ( const result of report . results ) {
318- // Only consider successful builds that required repairs.
319- if (
320- result . finalAttempt . buildResult . status === BuildResultStatus . SUCCESS &&
321- result . repairAttempts > 0
322- ) {
323- totalRepairs += result . repairAttempts ;
324- count ++ ;
325- }
326- }
327-
328- return count > 0 ? totalRepairs / count : null ;
307+ return calculateAverageRepairAttempts ( report ) ;
329308 } ) ;
330309
331310 protected repairAttemptsAsGraphData = computed < StackedBarChartData > ( ( ) => {
@@ -334,70 +313,7 @@ export class ReportViewer {
334313 return [ ] ;
335314 }
336315
337- const repairsToAppCount = new Map < number | 'failed' , number > ( ) ;
338-
339- // Map repair count to how many applications shared that count.
340- let maxRepairCount = 0 ;
341- for ( const result of report . results ) {
342- if ( result . finalAttempt . buildResult . status === BuildResultStatus . ERROR ) {
343- repairsToAppCount . set ( 'failed' , ( repairsToAppCount . get ( 'failed' ) || 0 ) + 1 ) ;
344- } else {
345- const repairs = result . repairAttempts ;
346- // For this graph, we ignore applications that required no repair.
347- if ( repairs > 0 ) {
348- repairsToAppCount . set ( repairs , ( repairsToAppCount . get ( repairs ) || 0 ) + 1 ) ;
349- maxRepairCount = Math . max ( maxRepairCount , repairs ) ;
350- }
351- }
352- }
353-
354- const data : StackedBarChartData = [ ] ;
355-
356- // All the numeric keys, sorted by value.
357- const intermediateRepairKeys = Array . from ( repairsToAppCount . keys ( ) )
358- . filter ( ( k ) : k is number => typeof k === 'number' )
359- . sort ( ( a , b ) => a - b ) ;
360-
361- // This graph might involve a bunch of sections. We want to scale them among all the possible color "grades".
362-
363- const minGrade = 1 ;
364- const maxGrade = 8 ;
365- const failureGrade = 9 ;
366-
367- for ( let repairCount = 1 ; repairCount <= maxRepairCount ; repairCount ++ ) {
368- const applicationCount = repairsToAppCount . get ( repairCount ) ;
369- if ( ! applicationCount ) continue ;
370- const label = `${ repairCount } repair${ repairCount > 1 ? 's' : '' } ` ;
371-
372- // Normalize the repair count to the range [0, 1].
373- const normalizedRepairCount = ( repairCount - 1 ) / ( maxRepairCount - 1 ) ;
374-
375- let gradeIndex : number ;
376- if ( intermediateRepairKeys . length === 1 ) {
377- // If there's only one intermediate repair count, map it to a middle grade (e.g., --chart-grade-5)
378- gradeIndex = Math . floor ( maxGrade / 2 ) + minGrade ;
379- } else {
380- // Distribute multiple intermediate repair counts evenly across available grades
381- gradeIndex = minGrade + Math . round ( normalizedRepairCount * ( maxGrade - minGrade ) ) ;
382- }
383-
384- data . push ( {
385- label,
386- color : `var(--chart-grade-${ gradeIndex } )` ,
387- value : applicationCount ,
388- } ) ;
389- }
390-
391- // Handle 'Build failed even after all retries' - always maps to the "failure" grade.
392- const failedCount = repairsToAppCount . get ( 'failed' ) || 0 ;
393- if ( failedCount > 0 ) {
394- data . push ( {
395- label : 'Build failed even after all retries' ,
396- color : `var(--chart-grade-${ failureGrade } )` ,
397- value : failedCount ,
398- } ) ;
399- }
400- return data ;
316+ return createRepairAttemptGraphData ( report ) ;
401317 } ) ;
402318
403319 protected testsAsGraphData ( tests : RunSummaryTests ) : StackedBarChartData {
0 commit comments