tangled
alpha
login
or
join now
melse.tngl.sh
/
lens
1
fork
atom
a code review tool
1
fork
atom
overview
issues
pulls
pipelines
fix(tui): refresh review status after approving a change
melse.tngl.sh
1 month ago
ebe43cd1
6893e8aa
+23
-17
5 changed files
expand all
collapse all
unified
split
lib
tui
lens_tui.ml
log_screen.ml
log_view.ml
log_view.mli
review_view.ml
+5
-3
lib/tui/lens_tui.ml
···
61
61
flavor
62
62
(fun (graph @ local) ->
63
63
let route, set_route = Bonsai.state (Log : Route.t) graph in
64
64
-
(* Review progress survives route changes *)
64
64
+
(* Review progress and generation survive route changes *)
65
65
let reviewed_files_map, set_reviewed_files_map =
66
66
Bonsai.state String.Map.empty graph
67
67
in
68
68
+
let review_generation, set_review_generation = Bonsai.state 0 graph in
68
69
let%sub final_view, final_handler =
69
70
match%sub route with
70
71
| Log ->
···
102
103
else Effect.Ignore
103
104
in
104
105
let ~view, ~handler =
105
105
-
Log_screen.component ~dimensions ~store ~exit ~enter_review graph
106
106
+
Log_screen.component ~dimensions ~store ~exit ~enter_review ~review_generation graph
106
107
in
107
108
let%arr view and handler in
108
109
view, handler
···
126
127
set_route Log
127
128
in
128
129
let on_approve =
129
129
-
let%arr set_route and change_id and commit_id in
130
130
+
let%arr set_route and change_id and commit_id and set_review_generation and review_generation in
130
131
let open Effect.Let_syntax in
131
132
let%bind () =
132
133
Effect.of_lwt_thunk (fun () ->
133
134
Lens_backend.Store.approve store change_id user_id commit_id)
134
135
in
136
136
+
let%bind () = set_review_generation (review_generation + 1) in
135
137
set_route Log
136
138
in
137
139
let ~view, ~handler =
+3
-2
lib/tui/log_screen.ml
···
120
120
~(store : Lens_backend.Store.t)
121
121
~(exit : unit -> unit Effect.t)
122
122
~(enter_review : (Jj.Change.t -> unit Effect.t) Bonsai.t)
123
123
+
~(review_generation : int Bonsai.t)
123
124
(graph @ local)
124
125
=
125
126
let focus, set_focus = Bonsai.state (Log : Focus.t) graph in
···
148
149
- pad_h
149
150
}
150
151
in
151
151
-
let log_view = Log_view.component ~dimensions:top_dims ~store graph in
152
152
+
let log_view = Log_view.component ~dimensions:top_dims ~store ~review_generation graph in
152
153
let editor = Editor.component ~dimensions graph in
153
154
let selected_change =
154
155
let%arr selected_row = log_view.selected_row in
155
156
Option.map selected_row ~f:Graph_layout.Row.change
156
157
in
157
158
let bottom_view = Diff_view.component ~dimensions:bottom_dims ~selected_change graph in
158
158
-
let review_view = Review_view.component ~selected_change ~store graph in
159
159
+
let review_view = Review_view.component ~selected_change ~store ~review_generation graph in
159
160
let textbox_focused =
160
161
let%arr focus in
161
162
match focus with
+6
-6
lib/tui/log_view.ml
···
134
134
View.vcat [ line1; line2 ]
135
135
;;
136
136
137
137
-
let component ~dimensions ~(store : Lens_backend.Store.t) (graph @ local) =
137
137
+
let component ~dimensions ~(store : Lens_backend.Store.t) ~review_generation (graph @ local) =
138
138
let selected_idx, set_selected_idx = Bonsai.state' 0 graph in
139
139
let changes, refresh_changes =
140
140
Bonsai.Edge.Poll.manual_refresh
···
149
149
Graph_layout.layout changes
150
150
in
151
151
(* Review counts: poll when changes update or when manually refreshed *)
152
152
-
let review_generation, set_review_generation = Bonsai.state' 0 graph in
152
152
+
let internal_review_gen, set_internal_review_gen = Bonsai.state' 0 graph in
153
153
let review_poll_input =
154
154
-
let%arr changes and review_generation in
155
155
-
changes, review_generation
154
154
+
let%arr changes and internal_review_gen and review_generation in
155
155
+
changes, internal_review_gen + review_generation
156
156
in
157
157
let review_counts =
158
158
Bonsai.Edge.Poll.effect_on_change
···
180
180
graph
181
181
in
182
182
let refresh_reviews =
183
183
-
let%arr set_review_generation in
184
184
-
set_review_generation (fun n -> n + 1)
183
183
+
let%arr set_internal_review_gen in
184
184
+
set_internal_review_gen (fun n -> n + 1)
185
185
in
186
186
let less_keybindings =
187
187
Navigation_key_bindings.component
+1
lib/tui/log_view.mli
···
14
14
val component
15
15
: dimensions:Dimensions.t Bonsai.t
16
16
-> store:Lens_backend.Store.t
17
17
+
-> review_generation:int Bonsai.t
17
18
-> Bonsai.graph @ local
18
19
-> t
+8
-6
lib/tui/review_view.ml
···
36
36
([ View.text ~attrs:[ Attr.fg (c Subtext0) ] "Reviews: " ] @ reviewer_views)
37
37
;;
38
38
39
39
-
let component ~selected_change ~(store : Lens_backend.Store.t) (graph @ local) =
40
40
-
let generation, set_generation = Bonsai.state' 0 graph in
39
39
+
let component ~selected_change ~(store : Lens_backend.Store.t) ~review_generation
40
40
+
(graph @ local)
41
41
+
=
42
42
+
let internal_gen, set_internal_gen = Bonsai.state' 0 graph in
41
43
let poll_input =
42
42
-
let%arr selected_change and generation in
43
43
-
selected_change, generation
44
44
+
let%arr selected_change and internal_gen and review_generation in
45
45
+
selected_change, internal_gen + review_generation
44
46
in
45
47
let review_data =
46
48
Bonsai.Edge.Poll.effect_on_change
···
84
86
render_reviews ~flavor statuses
85
87
in
86
88
let refresh =
87
87
-
let%arr set_generation in
88
88
-
set_generation (fun n -> n + 1)
89
89
+
let%arr set_internal_gen in
90
90
+
set_internal_gen (fun n -> n + 1)
89
91
in
90
92
{ view; refresh }
91
93
;;