Skip to content

Commit db14220

Browse files
committed
Refactor ImportStarterTemplateView
1 parent 21ae383 commit db14220

File tree

2 files changed

+71
-5
lines changed

2 files changed

+71
-5
lines changed

site/src/pages/CreateTemplatePage/CreateTemplatePage.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Helmet } from "react-helmet-async";
44
import { useNavigate, useSearchParams } from "react-router-dom";
55
import { pageTitle } from "utils/page";
66
import { DuplicateTemplateView } from "./DuplicateTemplateView";
7+
import { ImportStarterTemplateView } from "./ImportStarterTemplateView";
78

89
const CreateTemplatePage: FC = () => {
910
const navigate = useNavigate();
@@ -49,7 +50,7 @@ const CreateTemplatePage: FC = () => {
4950
{searchParams.has("fromTemplate") ? (
5051
<DuplicateTemplateView />
5152
) : searchParams.has("exampleId") ? (
52-
<ImportStaterTemplateView />
53+
<ImportStarterTemplateView />
5354
) : (
5455
<UploadTemplateView />
5556
)}
@@ -97,10 +98,6 @@ const CreateTemplatePage: FC = () => {
9798
);
9899
};
99100

100-
const ImportStaterTemplateView = () => {
101-
return <div>Import</div>;
102-
};
103-
104101
const UploadTemplateView = () => {
105102
return <div>Upload</div>;
106103
};
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { useQuery, useMutation } from "@tanstack/react-query";
2+
import { templateVersionLogs } from "api/queries/templateVersions";
3+
import {
4+
JobError,
5+
createTemplate,
6+
templateExamples,
7+
} from "api/queries/templates";
8+
import { ErrorAlert } from "components/Alert/ErrorAlert";
9+
import { useOrganizationId } from "hooks";
10+
import { useNavigate, useSearchParams } from "react-router-dom";
11+
import { CreateTemplateForm } from "./CreateTemplateForm";
12+
import { Loader } from "components/Loader/Loader";
13+
import { useDashboard } from "components/Dashboard/DashboardProvider";
14+
import { firstVersion, getFormPermissions, newTemplate } from "./utils";
15+
16+
export const ImportStarterTemplateView = () => {
17+
const navigate = useNavigate();
18+
const organizationId = useOrganizationId();
19+
const [searchParams] = useSearchParams();
20+
const templateExamplesQuery = useQuery(templateExamples(organizationId));
21+
const templateExample = templateExamplesQuery.data?.find(
22+
(e) => e.id === searchParams.get("exampleId")!,
23+
);
24+
25+
const isLoading = templateExamplesQuery.isLoading;
26+
const loadingError = templateExamplesQuery.error;
27+
28+
const dashboard = useDashboard();
29+
const formPermissions = getFormPermissions(dashboard.entitlements);
30+
31+
const createTemplateMutation = useMutation(createTemplate());
32+
const createError = createTemplateMutation.error;
33+
const isJobError = createError instanceof JobError;
34+
const templateVersionLogsQuery = useQuery({
35+
...templateVersionLogs(isJobError ? createError.version.id : ""),
36+
enabled: isJobError,
37+
});
38+
39+
if (isLoading) {
40+
return <Loader />;
41+
}
42+
43+
if (loadingError) {
44+
return <ErrorAlert error={loadingError} />;
45+
}
46+
47+
return (
48+
<CreateTemplateForm
49+
{...formPermissions}
50+
starterTemplate={templateExample!}
51+
error={createTemplateMutation.error}
52+
isSubmitting={createTemplateMutation.isLoading}
53+
onCancel={() => navigate(-1)}
54+
jobError={isJobError ? createError.job.error : undefined}
55+
logs={templateVersionLogsQuery.data}
56+
onSubmit={async (formData) => {
57+
const template = await createTemplateMutation.mutateAsync({
58+
organizationId,
59+
version: firstVersion(
60+
templateExample!,
61+
formData.user_variable_values,
62+
),
63+
template: newTemplate(formData),
64+
});
65+
navigate(`/templates/${template.name}`);
66+
}}
67+
/>
68+
);
69+
};

0 commit comments

Comments
 (0)