saleor-dashboard/src/collections/views/CollectionCreate.tsx

79 lines
2.8 KiB
TypeScript
Raw Normal View History

2019-06-19 14:40:52 +00:00
import * as React from "react";
import { WindowTitle } from "@saleor/components/WindowTitle";
import useNavigator from "@saleor/hooks/useNavigator";
import useNotifier from "@saleor/hooks/useNotifier";
import i18n from "../../i18n";
import { getMutationState, maybe } from "../../misc";
import { CollectionCreateInput } from "../../types/globalTypes";
import CollectionCreatePage from "../components/CollectionCreatePage/CollectionCreatePage";
import { TypedCollectionCreateMutation } from "../mutations";
import { CreateCollection } from "../types/CreateCollection";
import { collectionListUrl, collectionUrl } from "../urls";
export const CollectionCreate: React.StatelessComponent<{}> = () => {
const navigate = useNavigator();
const notify = useNotifier();
const handleCollectionCreateSuccess = (data: CreateCollection) => {
if (data.collectionCreate.errors.length === 0) {
notify({
text: i18n.t("Created collection", {
context: "notification"
})
});
navigate(collectionUrl(data.collectionCreate.collection.id));
} else {
const backgroundImageError = data.collectionCreate.errors.find(
error =>
error.field === ("backgroundImage" as keyof CollectionCreateInput)
);
if (backgroundImageError) {
notify({
text: backgroundImageError.message
});
}
}
};
return (
<TypedCollectionCreateMutation onCompleted={handleCollectionCreateSuccess}>
{(createCollection, { called, data, loading }) => {
const formTransitionState = getMutationState(
called,
loading,
maybe(() => data.collectionCreate.errors)
);
return (
<>
<WindowTitle title={i18n.t("Create collection")} />
<CollectionCreatePage
errors={maybe(() => data.collectionCreate.errors, [])}
onBack={() => navigate(collectionListUrl())}
disabled={loading}
onSubmit={formData =>
createCollection({
variables: {
input: {
backgroundImage: formData.backgroundImage.value,
backgroundImageAlt: formData.backgroundImageAlt,
descriptionJson: JSON.stringify(formData.description),
isPublished: formData.isPublished,
name: formData.name,
seo: {
description: formData.seoDescription,
title: formData.seoTitle
}
}
}
})
}
saveButtonBarState={formTransitionState}
/>
</>
);
}}
</TypedCollectionCreateMutation>
);
};
export default CollectionCreate;