diff --git a/site/src/pages/TemplateBuilder/TemplateCustomizationsStep.tsx b/site/src/pages/TemplateBuilder/TemplateCustomizationsStep.tsx index 740e9bc053ed4..16b433cfe4d1e 100644 --- a/site/src/pages/TemplateBuilder/TemplateCustomizationsStep.tsx +++ b/site/src/pages/TemplateBuilder/TemplateCustomizationsStep.tsx @@ -1,16 +1,22 @@ import { type FC, useEffect, useState } from "react"; import { useQuery } from "react-query"; -import { permittedOrganizations } from "#/api/queries/organizations"; +import { + permittedOrganizations, + provisionerDaemons, +} from "#/api/queries/organizations"; import type { Organization } from "#/api/typesGenerated"; +import { Alert } from "#/components/Alert/Alert"; import { IconField } from "#/components/IconField/IconField"; import { Input } from "#/components/Input/Input"; import { Label } from "#/components/Label/Label"; +import { Link } from "#/components/Link/Link"; import { OrganizationAutocomplete } from "#/components/OrganizationAutocomplete/OrganizationAutocomplete"; import { Textarea } from "#/components/Textarea/Textarea"; import { TemplateBuilderSubtitle, TemplateBuilderTitle, } from "#/pages/TemplateBuilder/TemplateBuilderHeader"; +import { docs } from "#/utils/docs"; import type { SelectedBaseMeta, TemplateBuilderWizardState, @@ -37,6 +43,12 @@ export const TemplateCustomizationsStep: FC< const [selectedOrg, setSelectedOrg] = useState(null); + const { data: provisioners } = useQuery({ + ...provisionerDaemons(selectedOrg?.id ?? ""), + enabled: Boolean(selectedOrg), + }); + const showProvisionerWarning = provisioners ? provisioners.length < 1 : false; + // Auto-select when exactly one org is available. useEffect(() => { if (orgOptions.length === 1 && !selectedOrg) { @@ -57,6 +69,8 @@ export const TemplateCustomizationsStep: FC< Add additional configurations. + {showProvisionerWarning && } +
{/* Base template card */} {state.selectedBase && } @@ -142,6 +156,18 @@ export const TemplateCustomizationsStep: FC< ); }; +const ProvisionerWarning: FC = () => { + return ( + + This organization does not have any provisioners. Before you create a + template, you'll need to configure a provisioner.{" "} + + See our documentation + + + ); +}; + const BaseTemplateCard: FC<{ base: SelectedBaseMeta }> = ({ base }) => { return (