-
Notifications
You must be signed in to change notification settings - Fork 984
Closed
Description
User Story 👥
A real user story (thanks @ammario 🎉):
Allow setting "Days of Week" when "Start time" is unset
This one confused me. We shouldn't assume that users will fill out the form in top to bottom order.
Implementation Notes
Under the hood, the form has logic like:
disabled={form.isSubmitting || isLoading || !form.values.startTime} |
At the parent level, whereby the form values are transformed into an API request, nothing should change:
coder/site/src/pages/WorkspaceSchedulePage/WorkspaceSchedulePage.tsx
Lines 24 to 92 in b85de3e
export const formValuesToAutoStartRequest = ( | |
values: WorkspaceScheduleFormValues, | |
): TypesGen.UpdateWorkspaceAutostartRequest => { | |
if (!values.startTime) { | |
return { | |
schedule: "", | |
} | |
} | |
const [HH, mm] = values.startTime.split(":") | |
// Note: Space after CRON_TZ if timezone is defined | |
const preparedTZ = values.timezone ? `CRON_TZ=${values.timezone} ` : "" | |
const makeCronString = (dow: string) => `${preparedTZ}${mm} ${HH} * * ${dow}` | |
const days = [ | |
values.sunday, | |
values.monday, | |
values.tuesday, | |
values.wednesday, | |
values.thursday, | |
values.friday, | |
values.saturday, | |
] | |
const isEveryDay = days.every((day) => day) | |
const isMonThroughFri = | |
!values.sunday && | |
values.monday && | |
values.tuesday && | |
values.wednesday && | |
values.thursday && | |
values.friday && | |
!values.saturday && | |
!values.sunday | |
// Handle special cases, falling through to comma-separation | |
if (isEveryDay) { | |
return { | |
schedule: makeCronString("*"), | |
} | |
} else if (isMonThroughFri) { | |
return { | |
schedule: makeCronString("1-5"), | |
} | |
} else { | |
const dow = days.reduce((previous, current, idx) => { | |
if (!current) { | |
return previous | |
} else { | |
const prefix = previous ? "," : "" | |
return previous + prefix + idx | |
} | |
}, "") | |
return { | |
schedule: makeCronString(dow), | |
} | |
} | |
} | |
export const formValuesToTTLRequest = (values: WorkspaceScheduleFormValues): TypesGen.UpdateWorkspaceTTLRequest => { | |
return { | |
// minutes to nanoseconds | |
ttl: values.ttl ? values.ttl * 60 * 60 * 1000 * 1_000_000 : undefined, | |
} | |
} |
Metadata
Metadata
Assignees
Labels
siteArea: frontend dashboardArea: frontend dashboard