-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
ScreenHtmlReport.go
95 lines (79 loc) · 2.37 KB
/
ScreenHtmlReport.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package Cli
import (
"fmt"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/halleck45/ast-metrics/src/Analyzer"
pb "github.com/halleck45/ast-metrics/src/NodeType"
Report "github.com/halleck45/ast-metrics/src/Report/Html"
)
type ScreenHtmlReport struct {
isInteractive bool
files []*pb.File
projectAggregated Analyzer.ProjectAggregated
}
func NewScreenHtmlReport(isInteractive bool, files []*pb.File, projectAggregated Analyzer.ProjectAggregated) ScreenHtmlReport {
return ScreenHtmlReport{
isInteractive: isInteractive,
files: files,
projectAggregated: projectAggregated,
}
}
func (v ScreenHtmlReport) GetScreenName() string {
return "Generate HTML report\n"
}
func (v ScreenHtmlReport) GetModel() tea.Model {
m := modelScreenHtmlReport{files: v.files, projectAggregated: v.projectAggregated}
return m
}
type modelScreenHtmlReport struct {
parent tea.Model
files []*pb.File
projectAggregated Analyzer.ProjectAggregated
generated bool
}
func (m modelScreenHtmlReport) Init() tea.Cmd {
return nil
}
func (m *ScreenHtmlReport) Reset(files []*pb.File, projectAggregated Analyzer.ProjectAggregated) {
m.files = files
m.projectAggregated = projectAggregated
}
func (m modelScreenHtmlReport) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c", "esc":
return NewScreenHome(true, m.files, m.projectAggregated).GetModel(), tea.ClearScreen
}
case DoRefreshModel:
// refresh the model
m.files = msg.files
m.projectAggregated = msg.projectAggregated
m.generated = false
return m, nil
}
return m, nil
}
func (m modelScreenHtmlReport) View() string {
directory := "ast-metrics-report"
if !m.generated {
// Generate report
// report: html
htmlReportGenerator := Report.NewHtmlReportGenerator(directory)
err := htmlReportGenerator.Generate(m.files, m.projectAggregated)
if err != nil {
return fmt.Sprintf("Error generating report: %s", err)
}
}
destination := lipgloss.NewStyle().
Foreground(lipgloss.Color("#f0f0f0")).
Render(directory + "/index.html")
box := lipgloss.NewStyle().
Align(lipgloss.Center).
Margin(2)
return StyleScreen(
StyleTitle("HTML report").Render() +
box.Render("Report generated at: "+destination) +
StyleHowToQuit("").Render()).Render()
}