11using PainKiller . PowerCommands . Shared . Utils . DisplayTable ;
22
3-
43namespace $safeprojectname $. Services ;
54public static class ConsoleTableService
65{
76 private static readonly Dictionary < string , IEnumerable < IColumnRender > > TableColumnRenderDefinitions = new ( ) ;
8-
97 public static void RenderTable < T > ( IEnumerable < T > items , IConsoleWriter consoleWriter ) where T : new ( )
108 {
11- var tableITems = items . ToArray ( ) ;
12- if ( ! tableITems . Any ( ) ) return ;
9+ var tableItems = items . ToArray ( ) ;
10+ if ( ! tableItems . Any ( ) ) return ;
1311 var rows = ConsoleTable
14- . From < T > ( tableITems )
12+ . From < T > ( tableItems )
1513 . Configure ( o => o . NumberAlignment = Alignment . Right )
1614 . Read ( WriteFormat . Alternative ) . Split ( "\r \n " ) ;
17-
18- for ( var rowIndex = 0 ; rowIndex < rows . Length ; rowIndex ++ )
19- {
20- var row = rows [ rowIndex ] ;
21- if ( rowIndex < 3 )
22- {
23- consoleWriter . WriteHeadLine ( row ) ;
24- continue ;
25- }
26- consoleWriter . WriteLine ( row ) ;
27- }
15+ RenderConsoleTable ( rows , consoleWriter ) ;
2816 }
29-
3017 public static void RenderConsoleCommandTable < T > ( IEnumerable < T > items , IConsoleWriter consoleWriter ) where T : class , IConsoleCommandTable , new ( )
3118 {
32- var tableITems = items . ToArray ( ) ;
33- if ( ! tableITems . Any ( ) ) return ;
19+ var tableItems = items . ToArray ( ) ;
20+ if ( ! tableItems . Any ( ) ) return ;
3421 if ( typeof ( T ) . GetInterface ( nameof ( IConsoleCommandTable ) ) != null )
3522 {
36- var consoleCommandTable = tableITems . First ( ) ;
37- RenderTable ( tableITems , consoleCommandTable . GetColumnRenderOptionsAttribute ( ) . ToArray ( ) , consoleWriter ) ;
23+ var consoleCommandTable = tableItems . First ( ) ;
24+ RenderTable ( tableItems , consoleCommandTable . GetColumnRenderOptionsAttribute ( ) . ToArray ( ) , consoleWriter ) ;
3825 return ;
3926 }
4027 var rows = ConsoleTable
41- . From < T > ( tableITems )
28+ . From < T > ( tableItems )
4229 . Configure ( o => o . NumberAlignment = Alignment . Right )
4330 . Read ( WriteFormat . Alternative ) . Split ( "\r \n " ) ;
44-
31+ RenderConsoleTable ( rows , consoleWriter ) ;
32+ }
33+ private static void RenderConsoleTable ( string [ ] rows , IConsoleWriter consoleWriter )
34+ {
4535 for ( var rowIndex = 0 ; rowIndex < rows . Length ; rowIndex ++ )
4636 {
37+ if ( rowIndex % 2 == 0 ) continue ;
4738 var row = rows [ rowIndex ] ;
39+ row = row . Replace ( "+-" , "" ) . Replace ( "-+" , "" ) . Replace ( " |" , "" ) . Replace ( "| " , "" ) ;
4840 if ( rowIndex < 3 )
4941 {
50- consoleWriter . WriteHeadLine ( row ) ;
42+ var foregroundColor = Console . ForegroundColor ;
43+ var color = Console . BackgroundColor ;
44+ Console . BackgroundColor = ConsoleColor . White ;
45+ Console . ForegroundColor = ConsoleColor . Blue ;
46+ consoleWriter . Write ( row ) ;
47+ Console . BackgroundColor = color ;
48+ Console . ForegroundColor = foregroundColor ;
49+ Console . WriteLine ( ) ;
5150 continue ;
5251 }
53- consoleWriter . WriteLine ( row ) ;
52+ var color2 = Console . BackgroundColor ;
53+ Console . BackgroundColor = ConsoleColor . DarkCyan ;
54+ consoleWriter . Write ( row ) ;
55+ Console . BackgroundColor = color2 ;
56+ Console . WriteLine ( ) ;
5457 }
5558 }
5659 public static void AddTableColumnRenderDefinitions ( string name , IEnumerable < IColumnRender > columnRenderDefinitions )
@@ -73,7 +76,7 @@ private static void RenderTable<T>(IEnumerable<T> tableData, ColumnRenderOptions
7376
7477 for ( var index = 0 ; index < rows . Length ; index ++ )
7578 {
76- if ( index < 3 ) continue ;
79+ if ( index < 3 ) continue ;
7780 var row = rows [ index ] ;
7881 if ( row . StartsWith ( "+-" ) )
7982 {
@@ -94,43 +97,18 @@ private static void RenderTable<T>(IEnumerable<T> tableData, ColumnRenderOptions
9497 }
9598 }
9699 }
97- private static void WriteHeaderRow ( string row , ColumnRenderOptionsAttribute [ ] columnRenderDefinitions , IConsoleWriter consoleWriter )
98- {
99- var cols = row . Split ( '|' ) ;
100- var render = new ColumnRenderHeader ( consoleWriter ) ;
101- for ( var colIndex = 0 ; colIndex < cols . Length ; colIndex ++ )
102- {
103- if ( colIndex == cols . Length - 1 )
104- {
105- consoleWriter . WriteLine ( "" ) ;
106- break ;
107- }
108- render . Write ( cols [ colIndex ] ) ;
109- }
110- }
111100 private static IEnumerable < IColumnRender > GetColumnRenders < T > ( IEnumerable < ColumnRenderOptionsAttribute > columnRenderDefinitions , IConsoleWriter consoleWriter )
112101 {
113- var renderCol = new List < IColumnRender > ( ) ;
114- foreach ( var optionsAttribute in columnRenderDefinitions . OrderBy ( c => c . Order ) )
115- {
116- IColumnRender render ;
117- switch ( optionsAttribute . RenderFormat )
102+ var renderCol = columnRenderDefinitions . OrderBy ( c => c . Order )
103+ . Select ( optionsAttribute => optionsAttribute . RenderFormat switch
118104 {
119- case ColumnRenderFormat . None :
120- render = new ColumnRenderBase ( consoleWriter ) ;
121- break ;
122- case ColumnRenderFormat . Standard :
123- render = new ColumnRenderStandard ( consoleWriter ) ;
124- break ;
125- case ColumnRenderFormat . SucessOrFailure :
126- render = new ColumnRenderSuccsessOrFailure ( consoleWriter , optionsAttribute . Trigger1 , optionsAttribute . Trigger2 , optionsAttribute . Mark ) ;
127- break ;
128- default :
129- throw new ArgumentOutOfRangeException ( ) ;
130- }
131- renderCol . Add ( render ) ;
132- }
133- renderCol . Insert ( 0 , new ColumnRenderStandard ( consoleWriter ) ) ;
105+ ColumnRenderFormat . None => new ColumnRenderBase ( consoleWriter ) ,
106+ ColumnRenderFormat . Standard => new ColumnRenderStandard ( consoleWriter ) ,
107+ ColumnRenderFormat . SucessOrFailure => new ColumnRenderSuccsessOrFailure ( consoleWriter , optionsAttribute . Trigger1 , optionsAttribute . Trigger2 , optionsAttribute . Mark ) , _ => throw new ArgumentOutOfRangeException ( )
108+ } )
109+ . Cast < IColumnRender > ( )
110+ . ToList ( ) ;
111+ renderCol . Insert ( 0 , new ColumnRenderStandard ( consoleWriter ) ) ;
134112 renderCol . Add ( new ColumnRenderBase ( consoleWriter ) ) ;
135113 AddTableColumnRenderDefinitions ( typeof ( T ) . Name , renderCol ) ;
136114 return renderCol ;
0 commit comments