Skip to content

Commit 86b695d

Browse files
committed
Fix autoStopChanged
1 parent e3fb8cc commit 86b695d

File tree

1 file changed

+155
-146
lines changed

1 file changed

+155
-146
lines changed

site/src/xServices/workspaceSchedule/workspaceScheduleXService.ts

Lines changed: 155 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -55,171 +55,180 @@ export type WorkspaceScheduleEvent =
5555
| { type: "APPLY_LATER" }
5656

5757
export const workspaceSchedule =
58-
/** @xstate-layout N4IgpgJg5mDOIC5QHcD2AnA1rADgQwGMwBlAgC0gFcAbEgFzzrAGIBxAUQBUB9AdQHkASgGliABQCCAYXYBtAAwBdRKBypYASzobUAOxUgAHogCMAJgB0AVgAcAThsAWeXZMA2O2YDsdq1YA0IACeiGbyFl428o4AzFYmMT4xbl5mAL5pgWhYuIQk5FS0xAxMFjB02rpQvBjY+ETMEHpgFhq6AG6omC3lNTn1YArKSCBqmtp6BsYI7tbybmZ+9mYO8u6OgSEIMY6OFo5eC34mdqkLNhlZtblEpBQQNPSMPWAVbdXXA8xg6OgYFjhqIwAGYYAC2ZVefTqeSGBjGWh0+hG02SNmsXhMVhWdkcbkcNm8Xk2oRcFgW7hi8h8djcVkuIGyMNuBQeRRKLzeVTEPzBGlgmj0sEazVaHS6LQKBEwPPQfIFSNgcJGCImyNA0wAtOEYrjsa4vD5bMkEiSEG44uTFosCa41lY3AymTd8vdHsVnpCuVBZfLBbphT8-ugAUC6KC5RYpTLefz-UqlPD1IjJijEMkrBE3G4bO5cfN5GYzGadnsDgt5rmnFZHL4nZ88ndCk9Sjh0HAwLo6AAxcHMYgAVQAQgBZACSPGIUgAEuwACIDgAyckTKuTaqmiEzqTMdOzJixJi82OLwUQNic5MxrjxusS5nr-UbrPdHIssEoACM+d6m2yWE0ugtG0nTdO+X4-n+jzKqo65IpuMx7CYF7ZjYMSJLihpeBsZ4zO4Jj7HahomPINaEo4j7Mq6zYeqUH7flolRQFBtAikBYqgS09GQS+tCyCYwyweM8Fpggjg1hYu5UrqZiOCsjjmGaB5uARtYkfq7jUjYjqZIyDYsm67KetxjHvCxLBBv8gIguC4EMXQ5kwaMcGphq6YpBEB4JFYuqxN4Jhmq4bj7CkiReNEpykSYlEuuZtFcWQqDIO8ghwAw6B0HOGh4NQqBQMwgjsMQnASIIPACCI4jSCugnOcJrlGOeMT7LYyExMhClybESmJMFrU2OFDo+OYOlXE+Bk0W+sCJclVSpbA6WZdluX5RIYhiIuACa3CLhInDsIITmqiJbnbG4Oq1gpaxOHmMRKWY2kWPYObnehOwxDFAxxW+lnoGwXB8EIoiSDIR0ueqjXbFYdgWKcVZmCN5x+EpBJPa4ngmLE8jtV4GS6boqAQHABjOl9vEtmASb1RDWqo75GmGr4aFuGampYpYTgI-IUS+Nzhy47ppPPoZFOtBAtBUymNOmOEUQ1nidJWMe1IPazdIWDsXMHseXgxFEAtjVR32euUTHQi6ksbqJXgWPI8y1rJix23ESso3sdvRLrKxmDEjvpIL+nUf+8VekxvpxoqlsnZD6K5nYLhHnJNjYmsZoEjbuu+ASJqdbrn3C5Nnpth2Xa9nKUcNdMuxPdjaFOFS2ErGakTNQjDu3qkJF2PnE3B1NEGmVU5kV9LMzhNDSvzBa1IqZ4OFbLSMMWj7OZoXrhIfQH41B6+xkzSlaV4BlWU5XlI8ISReyYbJ5h2A4cnI7hI2ZtmcSRNpOZxP7huxeTIe-efUSthMyyU8PHO+R4LRKQks4HMmMDhfzWNFLeRs-5vkApTNc1MEK6hAe4c6pE6QDTCCzJ+tZY4nD1qkdCqQBYZCAA */
59-
createMachine(
60-
{
61-
id: "workspaceScheduleState",
62-
predictableActionArguments: true,
63-
tsTypes: {} as import("./workspaceScheduleXService.typegen").Typegen0,
64-
schema: {
65-
context: {} as WorkspaceScheduleContext,
66-
events: {} as WorkspaceScheduleEvent,
67-
services: {} as {
68-
getWorkspace: {
69-
data: TypesGen.Workspace
70-
}
58+
/** @xstate-layout N4IgpgJg5mDOIC5QHcD2AnA1rADgQwGMwBlAgC0gFcAbEgFzzrAGIBxAUQBUB9AdQHkASgGliABQCCAYXYBtAAwBdRKBypYASzobUAOxUgAHogCMAJgB0AVgAcAThsAWeXZMA2O2YDsdq1YA0IACeiGbyFl428o4AzFYmMT4xbl5mAL5pgWhYuIQk5FS0xAxMFjB02rpQvBjY+ETMEHpgFhq6AG6omC3lNTn1YArKSCBqmtp6BsYI7tbybmZ+9mYO8u6OgSEIMY6OFo5eC34mdqkLNhlZtblEpBQQNPSMPWAVbdXXA8xg6OgYFjhqIwAGYYAC2ZVefTqeSGBjGWh0+hG02SNmsXhMVhWdkcbkcNm8Xk2oRcFgW7hi8h8djcVkuIGyMNuBQeRRKLzeVTEPzBGlgmj0sEazVaHS6LQKBEwPPQfIFSNgcJGCImyNA0wAtOEYrjsa4vD5bMkEiSEG44uTFosCa41lY3AymTd8vdHsVnpCuVBZfLBbphT8-ugAUC6KC5RYpTLefz-UqlPD1IjJijEMkrBE3G4bO5cfN5GYzGadnsDgt5rmnFZHL4nZ88ndCk9Sjh0HAwLo6AAxcHMYgAVQAQgBZACSPGIUgAEuwACIDgAyckTKuTaqmiEzqTMdOzJixJi82OLwUQNic5MxrjxusS5nr-UbrPdHIssEoACM+d6m2yWE0ugtG0nTdO+X4-n+jzKqo65IpuMx7CYF7ZjYMSJLihpeBsZ4zO4Jj7HahomPINaEo4j7Mq6zYeqUH7flolRQFBtAikBYqgS09GQS+tCyCYwyweM8Fpggjg1hYu5UrqZiOCsjjmGaB5uARtYkfq7jUjYjqZIyDYsm67KetxjHvCxLBBv8gIguC4EMXQ5kwaMcGphq6YpBEB4JFYuqxN4Jhmq4bj7CkiReNEpykSYlEuuZtFcWQqDIO8ghwAw6B0HOGh4NQqBQMwgjsMQnASIIPACCI4jSCugnOcJrlGOeMT7LYyExMhClybESmJMFrU2OFDo+OYOlXE+Bk0W+sCJclVSpbA6WZdluX5RIYhiIuACa3CLhInDsIITmqiJbnbG4Oq1gpaxOHmMRKWY2kWPYObnehOwxDFAxxW+lnoGwXB8EIoiSDIR0ueqjXbFYdgWKcVZmCN5x+EpBJPa4ngmLE8jtV4GS6boqAQHABjOl9vEtmASb1RDWqo75GmGr4aFuGampYpYTgI-IUS+Nzhy47ppPPoZFOtBAtBUymNOmOEUQ1nidJWMe1IPazdIWDsXMHseXgxFEAtjVR32euUTHQi6ksbqJXgWPI8y1rJix23ESso3sdvRLrKxmDEjvpIL+nUf+8VekxvpxoqlsnZD6K5nYLhHnJNjYmsZoEjbuu+ASJqdbrn3C5Nnpth2Xa9nKUcNdMuxPdjaFOFS2ErGakTNQjDu3qkJF2PnE3B1NEGmVU5kV9LMzhNDSvzBa1IqZ4OFbLSMMWj7OZoXrhIfQH41B6+xkzSlaV4BlWU5XlI8ISReyYbJ5h2A4cnI7hI2ZtmcSRNpOZxP7huxeTIe-efUSthMyyU8PHO+R4LRKQks4HMmMDhfzWNFLeRs-5vkApTNc1MEK6hAe4c6pE6QDTCCzJ+tZY4nD1qkdCqQBYZCAA */
59+
createMachine(
60+
{
61+
id: "workspaceScheduleState",
62+
predictableActionArguments: true,
63+
tsTypes: {} as import("./workspaceScheduleXService.typegen").Typegen0,
64+
schema: {
65+
context: {} as WorkspaceScheduleContext,
66+
events: {} as WorkspaceScheduleEvent,
67+
services: {} as {
68+
getWorkspace: {
69+
data: TypesGen.Workspace
70+
}
71+
},
7172
},
72-
},
73-
initial: "idle",
74-
on: {
75-
GET_WORKSPACE: "gettingWorkspace",
76-
},
77-
states: {
78-
idle: {
79-
tags: "loading",
73+
initial: "idle",
74+
on: {
75+
GET_WORKSPACE: "gettingWorkspace",
8076
},
81-
gettingWorkspace: {
82-
entry: ["clearGetWorkspaceError", "clearContext"],
83-
invoke: {
84-
src: "getWorkspace",
85-
id: "getWorkspace",
86-
onDone: {
87-
target: "gettingPermissions",
88-
actions: ["assignWorkspace"],
89-
},
90-
onError: {
91-
target: "error",
92-
actions: ["assignGetWorkspaceError"],
93-
},
77+
states: {
78+
idle: {
79+
tags: "loading",
9480
},
95-
tags: "loading",
96-
},
97-
gettingPermissions: {
98-
entry: "clearGetPermissionsError",
99-
invoke: {
100-
src: "checkPermissions",
101-
id: "checkPermissions",
102-
onDone: [
103-
{
104-
actions: ["assignPermissions"],
105-
target: "presentForm",
81+
gettingWorkspace: {
82+
entry: ["clearGetWorkspaceError", "clearContext"],
83+
invoke: {
84+
src: "getWorkspace",
85+
id: "getWorkspace",
86+
onDone: {
87+
target: "gettingPermissions",
88+
actions: ["assignWorkspace"],
10689
},
107-
],
108-
onError: [
109-
{
110-
actions: "assignGetPermissionsError",
90+
onError: {
11191
target: "error",
92+
actions: ["assignGetWorkspaceError"],
11293
},
113-
],
94+
},
95+
tags: "loading",
11496
},
115-
},
116-
presentForm: {
117-
on: {
118-
SUBMIT_SCHEDULE: { target: "submittingSchedule", actions: "assignAutoStopChanged" },
97+
gettingPermissions: {
98+
entry: "clearGetPermissionsError",
99+
invoke: {
100+
src: "checkPermissions",
101+
id: "checkPermissions",
102+
onDone: [
103+
{
104+
actions: ["assignPermissions"],
105+
target: "presentForm",
106+
},
107+
],
108+
onError: [
109+
{
110+
actions: "assignGetPermissionsError",
111+
target: "error",
112+
},
113+
],
114+
},
119115
},
120-
},
121-
submittingSchedule: {
122-
invoke: {
123-
src: "submitSchedule",
124-
id: "submitSchedule",
125-
onDone: [
126-
{
127-
cond: "autoStartChanged",
128-
target: "showingRestartDialog",
116+
presentForm: {
117+
on: {
118+
SUBMIT_SCHEDULE: {
119+
target: "submittingSchedule",
120+
actions: "assignAutoStopChanged",
129121
},
130-
{ target: "done" }
131-
],
132-
onError: {
133-
target: "presentForm",
134-
actions: ["assignSubmissionError"],
135122
},
136123
},
137-
tags: "loading",
138-
},
139-
showingRestartDialog: {
140-
on: {
141-
RESTART_WORKSPACE: { target: "done", actions: "assignRestartWorkspace" },
142-
APPLY_LATER: "done"
124+
submittingSchedule: {
125+
invoke: {
126+
src: "submitSchedule",
127+
id: "submitSchedule",
128+
onDone: [
129+
{
130+
cond: "autoStartChanged",
131+
target: "showingRestartDialog",
132+
},
133+
{ target: "done" },
134+
],
135+
onError: {
136+
target: "presentForm",
137+
actions: ["assignSubmissionError"],
138+
},
139+
},
140+
tags: "loading",
143141
},
144-
},
145-
error: {
146-
on: {
147-
GET_WORKSPACE: "gettingWorkspace",
142+
showingRestartDialog: {
143+
on: {
144+
RESTART_WORKSPACE: {
145+
target: "done",
146+
actions: "assignRestartWorkspace",
147+
},
148+
APPLY_LATER: "done",
149+
},
150+
},
151+
error: {
152+
on: {
153+
GET_WORKSPACE: "gettingWorkspace",
154+
},
148155
},
156+
done: {},
149157
},
150-
done: {}
151158
},
152-
},
153-
{
154-
guards: {
155-
autoStartChanged: (context) => Boolean(context.autoStopChanged)
156-
},
157-
actions: {
158-
assignSubmissionError: assign({
159-
submitScheduleError: (_, event) => event.data,
160-
}),
161-
assignWorkspace: assign({
162-
workspace: (_, event) => event.data,
163-
}),
164-
assignGetWorkspaceError: assign({
165-
getWorkspaceError: (_, event) => event.data,
166-
}),
167-
assignPermissions: assign({
168-
// Setting event.data as Permissions to be more stricted. So we know
169-
// what permissions we asked for.
170-
permissions: (_, event) => event.data as Permissions,
171-
}),
172-
assignGetPermissionsError: assign({
173-
checkPermissionsError: (_, event) => event.data,
174-
}),
175-
assignAutoStopChanged: assign({
176-
autoStopChanged: (_) => true
177-
}),
178-
assignRestartWorkspace: assign({
179-
shouldRestartWorkspace: (_) => true
180-
}),
181-
clearGetPermissionsError: assign({
182-
checkPermissionsError: (_) => undefined,
183-
}),
184-
clearContext: () => {
185-
assign({ workspace: undefined, permissions: undefined })
159+
{
160+
guards: {
161+
autoStartChanged: (context) => Boolean(context.autoStopChanged),
186162
},
187-
clearGetWorkspaceError: (context) => {
188-
assign({ ...context, getWorkspaceError: undefined })
163+
actions: {
164+
assignSubmissionError: assign({
165+
submitScheduleError: (_, event) => event.data,
166+
}),
167+
assignWorkspace: assign({
168+
workspace: (_, event) => event.data,
169+
}),
170+
assignGetWorkspaceError: assign({
171+
getWorkspaceError: (_, event) => event.data,
172+
}),
173+
assignPermissions: assign({
174+
// Setting event.data as Permissions to be more stricted. So we know
175+
// what permissions we asked for.
176+
permissions: (_, event) => event.data as Permissions,
177+
}),
178+
assignGetPermissionsError: assign({
179+
checkPermissionsError: (_, event) => event.data,
180+
}),
181+
assignAutoStopChanged: assign({
182+
autoStopChanged: (_, event) => event.autoStopChanged,
183+
}),
184+
assignRestartWorkspace: assign({
185+
shouldRestartWorkspace: (_) => true,
186+
}),
187+
clearGetPermissionsError: assign({
188+
checkPermissionsError: (_) => undefined,
189+
}),
190+
clearContext: () => {
191+
assign({ workspace: undefined, permissions: undefined })
192+
},
193+
clearGetWorkspaceError: (context) => {
194+
assign({ ...context, getWorkspaceError: undefined })
195+
},
189196
},
190-
},
191197

192-
services: {
193-
getWorkspace: async (_, event) => {
194-
return await API.getWorkspaceByOwnerAndName(
195-
event.username,
196-
event.workspaceName,
197-
)
198-
},
199-
checkPermissions: async (context) => {
200-
if (context.workspace) {
201-
return await API.checkAuthorization({
202-
checks: permissionsToCheck(context.workspace),
203-
})
204-
} else {
205-
throw Error(
206-
"Cannot check permissions without both workspace and user id",
198+
services: {
199+
getWorkspace: async (_, event) => {
200+
return await API.getWorkspaceByOwnerAndName(
201+
event.username,
202+
event.workspaceName,
207203
)
208-
}
209-
},
210-
submitSchedule: async (context, event) => {
211-
if (!context.workspace?.id) {
212-
// This state is theoretically impossible, but helps TS
213-
throw new Error("Failed to load workspace.")
214-
}
204+
},
205+
checkPermissions: async (context) => {
206+
if (context.workspace) {
207+
return await API.checkAuthorization({
208+
checks: permissionsToCheck(context.workspace),
209+
})
210+
} else {
211+
throw Error(
212+
"Cannot check permissions without both workspace and user id",
213+
)
214+
}
215+
},
216+
submitSchedule: async (context, event) => {
217+
if (!context.workspace?.id) {
218+
// This state is theoretically impossible, but helps TS
219+
throw new Error("Failed to load workspace.")
220+
}
215221

216-
if (event.autoStartChanged) {
217-
await API.putWorkspaceAutostart(context.workspace.id, event.autoStart)
218-
}
219-
if (event.autoStopChanged) {
220-
await API.putWorkspaceAutostop(context.workspace.id, event.ttl)
221-
}
222+
if (event.autoStartChanged) {
223+
await API.putWorkspaceAutostart(
224+
context.workspace.id,
225+
event.autoStart,
226+
)
227+
}
228+
if (event.autoStopChanged) {
229+
await API.putWorkspaceAutostop(context.workspace.id, event.ttl)
230+
}
231+
},
222232
},
223233
},
224-
},
225-
)
234+
)

0 commit comments

Comments
 (0)