coder/site/src/pages/CreateTemplatePage/utils.ts

81 lines
2.4 KiB
TypeScript

import type {
Entitlements,
ProvisionerType,
TemplateExample,
VariableValue,
} from "api/typesGenerated";
import { calculateAutostopRequirementDaysValue } from "utils/schedule";
import type { CreateTemplateData } from "./CreateTemplateForm";
const provisioner: ProvisionerType =
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Playwright needs to use a different provisioner type!
typeof (window as any).playwright !== "undefined" ? "echo" : "terraform";
export const newTemplate = (formData: CreateTemplateData) => {
const { autostop_requirement_days_of_week, autostop_requirement_weeks } =
formData;
const safeTemplateData = {
name: formData.name,
display_name: formData.display_name,
description: formData.description,
icon: formData.icon,
allow_user_autostart: formData.allow_user_autostart,
allow_user_autostop: formData.allow_user_autostop,
allow_user_cancel_workspace_jobs: formData.allow_user_cancel_workspace_jobs,
user_variable_values: formData.user_variable_values,
allow_everyone_group_access: formData.allow_everyone_group_access,
};
return {
...safeTemplateData,
disable_everyone_group_access: !formData.allow_everyone_group_access,
default_ttl_ms: formData.default_ttl_hours * 60 * 60 * 1000, // Convert hours to ms
autostop_requirement: {
days_of_week: calculateAutostopRequirementDaysValue(
autostop_requirement_days_of_week,
),
weeks: autostop_requirement_weeks,
},
autostart_requirement: {
days_of_week: formData.autostart_requirement_days_of_week,
},
require_active_version: false,
};
};
export const getFormPermissions = (entitlements: Entitlements) => {
const allowAdvancedScheduling =
entitlements.features["advanced_template_scheduling"].enabled;
return {
allowAdvancedScheduling,
};
};
export const firstVersionFromFile = (
fileId: string,
variables: VariableValue[] | undefined,
) => {
return {
storage_method: "file" as const,
provisioner: provisioner,
user_variable_values: variables,
file_id: fileId,
tags: {},
};
};
export const firstVersionFromExample = (
example: TemplateExample,
variables: VariableValue[] | undefined,
) => {
return {
storage_method: "file" as const,
provisioner: provisioner,
user_variable_values: variables,
example_id: example.id,
tags: {},
};
};