8000 feat(site): add create template from scratch by BrunoQuaresma · Pull Request #12082 · coder/coder · GitHub
[go: up one dir, main page]

Skip to content

feat(site): add create template from scratch #12082

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Feb 9, 2024
Merged
Prev Previous commit
Next Next commit
Add create from scratch flow
  • Loading branch information
BrunoQuaresma committed Feb 9, 2024
commit 4c60dccc8981b88d7a6627c0391632f077f3abfa
11 changes: 8 additions & 3 deletions site/src/pages/CreateTemplatePage/CreateTemplatePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@ import { FullPageHorizontalForm } from "components/FullPageForm/FullPageHorizont
import { DuplicateTemplateView } from "./DuplicateTemplateView";
import { ImportStarterTemplateView } from "./ImportStarterTemplateView";
import { UploadTemplateView } from "./UploadTemplateView";
import { Template } from "api/typesGenerated";

const CreateTemplatePage: FC = () => {
const navigate = useNavigate();
const [searchParams] = useSearchParams();

const onSuccess = (template: Template) => {
navigate(`/templates/${template.name}/files`);
};

const onCancel = () => {
navigate(-1);
};
Expand All @@ -23,11 +28,11 @@ const CreateTemplatePage: FC = () => {

<FullPageHorizontalForm title="Create Template" onCancel={onCancel}>
{searchParams.has("fromTemplate") ? (
<DuplicateTemplateView />
<DuplicateTemplateView onSuccess={onSuccess} />
) : searchParams.has("exampleId") ? (
<ImportStarterTemplateView />
<ImportStarterTemplateView onSuccess={onSuccess} />
) : (
<UploadTemplateView />
<UploadTemplateView onSuccess={onSuccess} />
)}
</FullPageHorizontalForm>
</>
Expand Down
11 changes: 9 additions & 2 deletions site/src/pages/CreateTemplatePage/DuplicateTemplateView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,15 @@ import { ErrorAlert } from "components/Alert/ErrorAlert";
import { Loader } from "components/Loader/Loader";
import { CreateTemplateForm } from "./CreateTemplateForm";
import { firstVersionFromFile, getFormPermissions, newTemplate } from "./utils";
import { Template } from "api/typesGenerated";

export const DuplicateTemplateView: FC = () => {
type DuplicateTemplateViewProps = {
onSuccess: (template: Template) => void;
};

export const DuplicateTemplateView: FC<DuplicateTemplateViewProps> = ({
onSuccess,
}) => {
const navigate = useNavigate();
const organizationId = useOrganizationId();
const [searchParams] = useSearchParams();
Expand Down Expand Up @@ -79,7 +86,7 @@ export const DuplicateTemplateView: FC = () => {
),
template: newTemplate(formData),
});
navigate(`/templates/${template.name}`);
onSuccess(template);
}}
/>
);
Expand Down
11 changes: 9 additions & 2 deletions site/src/pages/CreateTemplatePage/ImportStarterTemplateView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,15 @@ import {
getFormPermissions,
newTemplate,
} from "./utils";
import { Template } from "api/typesGenerated";

export const ImportStarterTemplateView: FC = () => {
type ImportStarterTemplateViewProps = {
onSuccess: (template: Template) => void;
};

export const ImportStarterTemplateView: FC<ImportStarterTemplateViewProps> = ({
onSuccess,
}) => {
const navigate = useNavigate();
const organizationId = useOrganizationId();
const [searchParams] = useSearchParams();
Expand Down Expand Up @@ -76,7 +83,7 @@ export const ImportStarterTemplateView: FC = () => {
),
template: newTemplate(formData),
});
navigate(`/templates/${template.name}`);
onSuccess(template);
}}
/>
);
Expand Down
12 changes: 10 additions & 2 deletions site/src/pages/CreateTemplatePage/UploadTemplateView.tsx
< 8000 td class="blob-code blob-code-context js-file-line"> template: newTemplate(formData),
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,16 @@ import { useOrganizationId } from "contexts/auth/useOrganizationId";
import { useDashboard } from "modules/dashboard/useDashboard";
import { CreateTemplateForm } from "./CreateTemplateForm";
import { firstVersionFromFile, getFormPermissions, newTemplate } from "./utils";
import { Template } from "api/typesGenerated";
import { FC } from "react";

export const UploadTemplateView = () => {
type UploadTemplateViewProps = {
onSuccess: (template: Template) => void;
};

export const UploadTemplateView: FC<UploadTemplateViewProps> = ({
onSuccess,
}) => {
const navigate = useNavigate();
const organizationId = useOrganizationId();

Expand Down Expand Up @@ -61,7 +69,7 @@ export const UploadTemplateView = () => {
),
});
navigate(`/templates/${template.name}`);
onSuccess(template);
}}
/>
);
Expand Down
58 changes: 44 additions & 14 deletions site/src/pages/TemplatesPage/TemplatesPageView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import AddIcon from "@mui/icons-material/AddOutlined";
import { type FC } from "react";
import { useNavigate, Link as RouterLink } from "react-router-dom";
import { useNavigate } from "react-router-dom";
import { createDayString } from "utils/createDayString";
import {
formatTemplateBuildTime,
Expand Down Expand Up @@ -45,6 +45,15 @@ import { docs } from "utils/docs";
import Skeleton from "@mui/material/Skeleton";
import { AvatarDataSkeleton } from "components/AvatarData/AvatarDataSkeleton";
import { DeprecatedBadge } from "components/Badges/Badges";
import {
MoreMenu,
MoreMenuContent,
MoreMenuItem,
MoreMenuTrigger,
} from "components/MoreMenu/MoreMenu";
import NoteAddOutlined from "@mui/icons-material/NoteAddOutlined";
import UploadOutlined from "@mui/icons-material/UploadOutlined";
import Inventory2 from "@mui/icons-material/Inventory2";

export const Language = {
developerCount: (activeCount: number): string => {
Expand Down Expand Up @@ -165,25 +174,46 @@ export const TemplatesPageView: FC<TemplatesPageViewProps> = ({
}) => {
const isLoading = !templates;
const isEmpty = templates && templates.length === 0;
const navigate = useNavigate();

return (
<Margins>
<PageHeader
actions={
canCreateTemplates && (
<>
<Button component={RouterLink} to="/starter-templates">
Starter Templates
</Button>
<Button
startIcon={<AddIcon />}
component={RouterLink}
to="new"
variant="contained"
>
Create Template
</Button>
</>
<MoreMenu>
<MoreMenuTrigger>
<Button startIcon={<AddIcon />} variant="contained">
Create Template
</Button>
</MoreMenuTrigger>
<MoreMenuContent>
<MoreMenuItem
onClick={() => {
navigate(`/templates/new?exampleId=scratch`);
}}
>
<NoteAddOutlined />
From scratch
</MoreMenuItem>
<MoreMenuItem
onClick={() => {
navigate("/templates/new");
}}
>
<UploadOutlined />
Upload template
</MoreMenuItem>
<MoreMenuItem
onClick={() => {
navigate("/starter-templates");
}}
>
<Inventory2 />
Choose a starter template
</MoreMenuItem>
</MoreMenuContent>
</MoreMenu>
)
}
>
Expand Down
0