saleor-dashboard/src/collections/containers/CollectionOperations.tsx

108 lines
3.7 KiB
TypeScript
Raw Normal View History

2019-08-09 10:26:22 +00:00
import React from "react";
2019-06-19 14:40:52 +00:00
import { getMutationProviderData } from "../../misc";
import { PartialMutationProviderOutput } from "../../types";
import {
TypedCollectionAssignProductMutation,
TypedCollectionRemoveMutation,
TypedCollectionUpdateMutation,
TypedCollectionUpdateWithHomepageMutation,
TypedUnassignCollectionProductMutation
} from "../mutations";
import {
CollectionAssignProduct,
CollectionAssignProductVariables
} from "../types/CollectionAssignProduct";
import {
CollectionUpdate,
CollectionUpdateVariables
} from "../types/CollectionUpdate";
import {
CollectionUpdateWithHomepage,
CollectionUpdateWithHomepageVariables
} from "../types/CollectionUpdateWithHomepage";
import {
RemoveCollection,
RemoveCollectionVariables
} from "../types/RemoveCollection";
import {
UnassignCollectionProduct,
UnassignCollectionProductVariables
} from "../types/UnassignCollectionProduct";
interface CollectionUpdateOperationsProps {
children: (
props: {
updateCollectionWithHomepage: PartialMutationProviderOutput<
CollectionUpdateWithHomepage,
CollectionUpdateWithHomepageVariables
>;
assignProduct: PartialMutationProviderOutput<
CollectionAssignProduct,
CollectionAssignProductVariables
>;
unassignProduct: PartialMutationProviderOutput<
UnassignCollectionProduct,
UnassignCollectionProductVariables
>;
updateCollection: PartialMutationProviderOutput<
CollectionUpdate,
CollectionUpdateVariables
>;
removeCollection: PartialMutationProviderOutput<
RemoveCollection,
RemoveCollectionVariables
>;
}
) => React.ReactNode;
onUpdate: (data: CollectionUpdate) => void;
onProductAssign: (data: CollectionAssignProduct) => void;
onProductUnassign: (data: UnassignCollectionProduct) => void;
onRemove: (data: RemoveCollection) => void;
}
const CollectionOperations: React.StatelessComponent<
CollectionUpdateOperationsProps
> = ({ children, onUpdate, onProductAssign, onProductUnassign, onRemove }) => (
<TypedCollectionUpdateMutation onCompleted={onUpdate}>
{(...updateCollection) => (
<TypedCollectionRemoveMutation onCompleted={onRemove}>
{(...removeCollection) => (
<TypedCollectionAssignProductMutation onCompleted={onProductAssign}>
{(...assignProduct) => (
<TypedCollectionUpdateWithHomepageMutation onCompleted={onUpdate}>
{(...updateWithHomepage) => (
<TypedUnassignCollectionProductMutation
onCompleted={onProductUnassign}
>
{(...unassignProduct) =>
children({
assignProduct: getMutationProviderData(
...assignProduct
),
removeCollection: getMutationProviderData(
...removeCollection
),
unassignProduct: getMutationProviderData(
...unassignProduct
),
updateCollection: getMutationProviderData(
...updateCollection
),
updateCollectionWithHomepage: getMutationProviderData(
...updateWithHomepage
)
})
}
</TypedUnassignCollectionProductMutation>
)}
</TypedCollectionUpdateWithHomepageMutation>
)}
</TypedCollectionAssignProductMutation>
)}
</TypedCollectionRemoveMutation>
)}
</TypedCollectionUpdateMutation>
);
export default CollectionOperations;