1- import type { Effect } from "effect"
1+ import { Effect } from "effect"
22
3- import { type BrowserActionContext , requireSelectedProjectId , withBusy } from "./actions-shared.js"
3+ import { type BrowserActionContext , confirmAction , requireSelectedProjectId , withBusy } from "./actions-shared.js"
44import { loadProjectTaskLogs , loadProjectTasks , stopProjectTask } from "./api.js"
55import type { ContainerTaskSnapshot } from "./api.js"
66
7+ type LoadSelectedProjectTasksOptions = {
8+ readonly includeDefault ?: boolean
9+ readonly silent ?: boolean
10+ }
11+
712const requireProjectIdForTasks = ( context : BrowserActionContext ) : string | null => {
813 const projectId = requireSelectedProjectId ( context )
914 if ( projectId === null ) {
@@ -66,16 +71,20 @@ const removeTaskFromSnapshot = (
6671
6772const stopSelectedProjectTaskEffect = (
6873 selected : SelectedProjectTaskAction
69- ) : Effect . Effect < void , string > => stopProjectTask ( selected . projectId , selected . pid )
74+ ) : Effect . Effect < ContainerTaskSnapshot , string > =>
75+ stopProjectTask ( selected . projectId , selected . pid ) . pipe (
76+ Effect . flatMap ( ( ) => loadProjectTasks ( selected . projectId , selected . context . projectTasksIncludeDefault ) )
77+ )
7078
7179const loadSelectedProjectTaskLogsEffect = (
7280 selected : SelectedProjectTaskAction
7381) : Effect . Effect < string , string > => loadProjectTaskLogs ( selected . projectId , selected . pid , 200 )
7482
7583const applyStoppedProjectTask = (
76- selected : SelectedProjectTaskAction
84+ selected : SelectedProjectTaskAction ,
85+ snapshot : ContainerTaskSnapshot
7786) : void => {
78- selected . context . setProjectTasks ( ( snapshot ) => removeTaskFromSnapshot ( snapshot , selected . pid ) )
87+ selected . context . setProjectTasks ( removeTaskFromSnapshot ( snapshot , selected . pid ) )
7988 selected . context . setMessage ( `Sent SIGTERM to PID ${ selected . pid } .` )
8089}
8190
@@ -87,18 +96,16 @@ const applyLoadedProjectTaskLogs = (
8796 selected . context . setMessage ( `Loaded logs for PID ${ selected . pid } .` )
8897}
8998
90- export const loadSelectedProjectTasks = (
99+ export const loadProjectTasksById = (
91100 context : BrowserActionContext ,
92- options ?: { readonly silent ?: boolean }
101+ projectId : string ,
102+ options ?: LoadSelectedProjectTasksOptions
93103) => {
94- const projectId = requireProjectIdForTasks ( context )
95- if ( projectId === null ) {
96- return
97- }
104+ const includeDefault = options ?. includeDefault ?? context . projectTasksIncludeDefault
98105 withBusy ( {
99106 context,
100- effect : loadProjectTasks ( projectId ) ,
101- label : "Loading container tasks" ,
107+ effect : loadProjectTasks ( projectId , includeDefault ) ,
108+ label : includeDefault ? "Loading all container tasks" : "Loading container tasks" ,
102109 onSuccess : ( snapshot ) => {
103110 context . setProjectTasks ( snapshot )
104111 if ( options ?. silent !== true ) {
@@ -108,16 +115,46 @@ export const loadSelectedProjectTasks = (
108115 } )
109116}
110117
118+ export const loadSelectedProjectTasks = (
119+ context : BrowserActionContext ,
120+ options ?: LoadSelectedProjectTasksOptions
121+ ) => {
122+ const projectId = requireProjectIdForTasks ( context )
123+ if ( projectId === null ) {
124+ return
125+ }
126+ loadProjectTasksById ( context , projectId , options )
127+ }
128+
129+ export const setSelectedProjectTasksIncludeDefault = (
130+ context : BrowserActionContext ,
131+ includeDefault : boolean
132+ ) => {
133+ context . setProjectTasksIncludeDefault ( includeDefault )
134+ context . setProjectTaskLogs ( "" )
135+ const projectId = requireProjectIdForTasks ( context )
136+ if ( projectId === null ) {
137+ return
138+ }
139+ loadProjectTasksById ( context , projectId , { includeDefault } )
140+ }
141+
111142export const stopSelectedProjectTask = (
112143 context : BrowserActionContext ,
113144 pid : number
114145) => {
115- withSelectedProjectTaskBusy ( {
116- context,
117- effect : stopSelectedProjectTaskEffect ,
118- label : "Stopping container task" ,
119- onSuccess : applyStoppedProjectTask ,
120- pid
146+ withSelectedProjectTask ( context , pid , ( selected ) => {
147+ if ( ! confirmAction ( `Stop PID ${ selected . pid } ?` ) ) {
148+ return
149+ }
150+ withBusy ( {
151+ context : selected . context ,
152+ effect : stopSelectedProjectTaskEffect ( selected ) ,
153+ label : "Stopping container task" ,
154+ onSuccess : ( snapshot ) => {
155+ applyStoppedProjectTask ( selected , snapshot )
156+ }
157+ } )
121158 } )
122159}
123160
0 commit comments