saleor-dashboard/src/collections/queries.ts
2019-12-18 11:22:02 +01:00

133 lines
2.6 KiB
TypeScript

import gql from "graphql-tag";
import makeQuery from "@saleor/hooks/makeQuery";
import { TypedQuery } from "../queries";
import {
CollectionDetails,
CollectionDetailsVariables
} from "./types/CollectionDetails";
import {
CollectionList,
CollectionListVariables
} from "./types/CollectionList";
export const collectionFragment = gql`
fragment CollectionFragment on Collection {
id
isPublished
name
}
`;
export const collectionDetailsFragment = gql`
${collectionFragment}
fragment CollectionDetailsFragment on Collection {
...CollectionFragment
backgroundImage {
alt
url
}
descriptionJson
publicationDate
seoDescription
seoTitle
isPublished
}
`;
// This fragment is used to make sure that product's fields that are returned
// are always the same - fixes apollo cache
// https://github.com/apollographql/apollo-client/issues/2496
// https://github.com/apollographql/apollo-client/issues/3468
export const collectionProductFragment = gql`
fragment CollectionProductFragment on Product {
id
isPublished
name
productType {
id
name
}
thumbnail {
url
}
}
`;
export const collectionList = gql`
${collectionFragment}
query CollectionList(
$first: Int
$after: String
$last: Int
$before: String
$filter: CollectionFilterInput
$sort: CollectionSortingInput
) {
collections(
first: $first
after: $after
before: $before
last: $last
filter: $filter
sortBy: $sort
) {
edges {
node {
...CollectionFragment
products {
totalCount
}
}
}
pageInfo {
endCursor
hasNextPage
hasPreviousPage
startCursor
}
}
}
`;
export const useCollectionListQuery = makeQuery<
CollectionList,
CollectionListVariables
>(collectionList);
export const collectionDetails = gql`
${collectionDetailsFragment}
${collectionProductFragment}
query CollectionDetails(
$id: ID!
$first: Int
$after: String
$last: Int
$before: String
) {
collection(id: $id) {
...CollectionDetailsFragment
products(first: $first, after: $after, before: $before, last: $last) {
edges {
node {
...CollectionProductFragment
}
}
pageInfo {
endCursor
hasNextPage
hasPreviousPage
startCursor
}
}
}
shop {
homepageCollection {
id
}
}
}
`;
export const TypedCollectionDetailsQuery = TypedQuery<
CollectionDetails,
CollectionDetailsVariables
>(collectionDetails);