4
4
* See License.AGPL.txt in the project root for license information.
5
5
*/
6
6
7
- import { useContext , useState } from "react" ;
7
+ import { useContext , useEffect , useState } from "react" ;
8
8
import { getGitpodService } from "../service/service" ;
9
9
import { UserContext } from "../user-context" ;
10
10
import { trackEvent } from "../Analytics" ;
11
11
import SelectIDE from "./SelectIDE" ;
12
12
import { PageWithSettingsSubMenu } from "./PageWithSettingsSubMenu" ;
13
13
import { ThemeSelector } from "../components/ThemeSelector" ;
14
- import CheckBox from "../components/CheckBox" ;
15
- import { WorkspaceTimeoutDuration } from "@gitpod/gitpod-protocol" ;
14
+ import Alert from "../components/Alert" ;
16
15
17
16
export default function Preferences ( ) {
18
17
const { user } = useContext ( UserContext ) ;
@@ -31,32 +30,22 @@ export default function Preferences() {
31
30
}
32
31
} ;
33
32
34
- const [ disabledClosedTimeout , setDisabledClosedTimeout ] = useState < boolean > (
35
- user ?. additionalData ?. disabledClosedTimeout ?? false ,
36
- ) ;
37
- const actuallySetDisabledClosedTimeout = async ( value : boolean ) => {
38
- try {
39
- const additionalData = user ?. additionalData || { } ;
40
- additionalData . disabledClosedTimeout = value ;
41
- await getGitpodService ( ) . server . updateLoggedInUser ( { additionalData } ) ;
42
- setDisabledClosedTimeout ( value ) ;
43
- } catch ( e ) {
44
- alert ( "Cannot set custom workspace timeout: " + e . message ) ;
45
- }
46
- } ;
47
-
48
33
const [ workspaceTimeout , setWorkspaceTimeout ] = useState < string > ( user ?. additionalData ?. workspaceTimeout ?? "" ) ;
49
34
const actuallySetWorkspaceTimeout = async ( value : string ) => {
50
35
try {
51
- const timeout = WorkspaceTimeoutDuration . validate ( value ) ;
52
- const additionalData = user ?. additionalData || { } ;
53
- additionalData . workspaceTimeout = timeout ;
54
- await getGitpodService ( ) . server . updateLoggedInUser ( { additionalData } ) ;
36
+ await getGitpodService ( ) . server . updateWorkspaceTimeoutSetting ( { workspaceTimeout : value } ) ;
55
37
} catch ( e ) {
56
38
alert ( "Cannot set custom workspace timeout: " + e . message ) ;
57
39
}
58
40
} ;
59
41
42
+ const [ allowConfigureWorkspaceTimeout , setAllowConfigureWorkspaceTimeout ] = useState < boolean > ( false ) ;
43
+ useEffect ( ( ) => {
44
+ getGitpodService ( )
45
+ . server . supportConfigureWorkspaceTimeout ( )
46
+ . then ( ( r ) => setAllowConfigureWorkspaceTimeout ( r ) ) ;
47
+ } , [ ] ) ;
48
+
60
49
return (
61
50
< div >
62
51
< PageWithSettingsSubMenu >
@@ -107,17 +96,31 @@ export default function Preferences() {
107
96
input commands). You can increase the workspace timeout up to a maximum of 24 hours.
108
97
</ p >
109
98
< div className = "mt-4 max-w-xl" >
110
- < h4 > Default Inactivity Timeout</ h4 >
111
- < span className = "flex" >
99
+ < h4 > Default Workspace Inactivity Timeout</ h4 >
100
+
101
+ { ! allowConfigureWorkspaceTimeout && (
102
+ < Alert type = "message" >
103
+ Only paid users can update the inactivity timeout. See
104
+ < a href = "https://www.gitpod.io/pricing" target = "price-info" className = "gp-link" >
105
+ { " " }
106
+ pricing{ " " }
107
+ </ a >
108
+ for more.
109
+ </ Alert >
110
+ ) }
111
+
112
+ < span className = "flex mt-2" >
112
113
< input
113
114
type = "text"
114
115
className = "w-96 h-9"
115
116
value = { workspaceTimeout }
116
- placeholder = "timeout time, such as 30m, 1h, max 24h"
117
+ disabled = { ! allowConfigureWorkspaceTimeout }
118
+ placeholder = "e.g. 30m"
117
119
onChange = { ( e ) => setWorkspaceTimeout ( e . target . value ) }
118
120
/>
119
121
< button
120
122
className = "secondary ml-2"
123
+ disabled = { ! allowConfigureWorkspaceTimeout }
121
124
onClick = { ( ) => actuallySetWorkspaceTimeout ( workspaceTimeout ) }
122
125
>
123
126
Save Changes
@@ -128,13 +131,6 @@ export default function Preferences() {
128
131
Use minutes or hours, like < strong > 30m</ strong > or < strong > 2h</ strong > .
129
132
</ p >
130
133
</ div >
131
-
132
- < CheckBox
133
- title = "Stop workspace when no active editor connection"
134
- desc = { < span > Don't change workspace inactivity timeout when closing the editor.</ span > }
135
- checked = { disabledClosedTimeout }
136
- onChange = { ( e ) => actuallySetDisabledClosedTimeout ( e . target . checked ) }
137
- />
138
134
</ div >
139
135
</ PageWithSettingsSubMenu >
140
136
</ div >
0 commit comments