saleor-dashboard/src/products/queries.ts
2021-06-20 01:13:16 +02:00

425 lines
9.2 KiB
TypeScript

import {
attributeValueFragment,
attributeValueListFragment
} from "@saleor/fragments/attributes";
import { pageInfoFragment } from "@saleor/fragments/pageInfo";
import {
fragmentVariant,
productFragment,
productFragmentDetails,
productVariantAttributesFragment,
variantAttributeFragment
} from "@saleor/fragments/products";
import { taxTypeFragment } from "@saleor/fragments/taxes";
import { warehouseFragment } from "@saleor/fragments/warehouses";
import makeQuery from "@saleor/hooks/makeQuery";
import {
ProductMediaById,
ProductMediaByIdVariables
} from "@saleor/products/types/ProductMediaById";
import gql from "graphql-tag";
import {
CreateMultipleVariantsData,
CreateMultipleVariantsDataVariables
} from "./types/CreateMultipleVariantsData";
import {
GridAttributes,
GridAttributesVariables
} from "./types/GridAttributes";
import { InitialProductFilterAttributes } from "./types/InitialProductFilterAttributes";
import {
InitialProductFilterCategories,
InitialProductFilterCategoriesVariables
} from "./types/InitialProductFilterCategories";
import {
InitialProductFilterCollections,
InitialProductFilterCollectionsVariables
} from "./types/InitialProductFilterCollections";
import {
InitialProductFilterProductTypes,
InitialProductFilterProductTypesVariables
} from "./types/InitialProductFilterProductTypes";
import { ProductCount, ProductCountVariables } from "./types/ProductCount";
import {
ProductDetails,
ProductDetailsVariables
} from "./types/ProductDetails";
import { ProductList, ProductListVariables } from "./types/ProductList";
import { ProductType, ProductTypeVariables } from "./types/ProductType";
import {
ProductVariantCreateData,
ProductVariantCreateDataVariables
} from "./types/ProductVariantCreateData";
import {
ProductVariantDetails,
ProductVariantDetailsVariables
} from "./types/ProductVariantDetails";
const initialProductFilterAttributesQuery = gql`
query InitialProductFilterAttributes {
attributes(
first: 100
filter: { filterableInDashboard: true, type: PRODUCT_TYPE }
) {
edges {
node {
id
name
inputType
slug
}
}
}
}
`;
export const useInitialProductFilterAttributesQuery = makeQuery<
InitialProductFilterAttributes,
never
>(initialProductFilterAttributesQuery);
const initialProductFilterCategoriesQuery = gql`
query InitialProductFilterCategories($categories: [ID!]) {
categories(first: 100, filter: { ids: $categories }) {
edges {
node {
id
name
}
}
}
}
`;
export const useInitialProductFilterCategoriesQuery = makeQuery<
InitialProductFilterCategories,
InitialProductFilterCategoriesVariables
>(initialProductFilterCategoriesQuery);
const initialProductFilterCollectionsQuery = gql`
query InitialProductFilterCollections($collections: [ID!]) {
collections(first: 100, filter: { ids: $collections }) {
edges {
node {
id
name
}
}
}
}
`;
export const useInitialProductFilterCollectionsQuery = makeQuery<
InitialProductFilterCollections,
InitialProductFilterCollectionsVariables
>(initialProductFilterCollectionsQuery);
const initialProductFilterProductTypesQuery = gql`
query InitialProductFilterProductTypes($productTypes: [ID!]) {
productTypes(first: 100, filter: { ids: $productTypes }) {
edges {
node {
id
name
}
}
}
}
`;
export const useInitialProductFilterProductTypesQuery = makeQuery<
InitialProductFilterProductTypes,
InitialProductFilterProductTypesVariables
>(initialProductFilterProductTypesQuery);
const productListQuery = gql`
${productFragment}
${attributeValueFragment}
query ProductList(
$first: Int
$after: String
$last: Int
$before: String
$filter: ProductFilterInput
$sort: ProductOrder
) {
products(
before: $before
after: $after
first: $first
last: $last
filter: $filter
sortBy: $sort
) {
edges {
node {
...ProductFragment
attributes {
attribute {
id
}
values {
...AttributeValueFragment
}
}
}
}
pageInfo {
hasPreviousPage
hasNextPage
startCursor
endCursor
}
totalCount
}
}
`;
export const useProductListQuery = makeQuery<ProductList, ProductListVariables>(
productListQuery
);
const productCountQuery = gql`
query ProductCount($filter: ProductFilterInput) {
products(filter: $filter) {
totalCount
}
}
`;
export const useProductCountQuery = makeQuery<
ProductCount,
ProductCountVariables
>(productCountQuery);
const productDetailsQuery = gql`
${productFragmentDetails}
${taxTypeFragment}
query ProductDetails(
$id: ID!
$channel: String
$firstValues: Int
$afterValues: String
$lastValues: Int
$beforeValues: String
) {
product(id: $id, channel: $channel) {
...Product
}
taxTypes {
...TaxTypeFragment
}
}
`;
export const useProductDetails = makeQuery<
ProductDetails,
ProductDetailsVariables
>(productDetailsQuery);
const productTypeQuery = gql`
${taxTypeFragment}
${attributeValueListFragment}
query ProductType(
$id: ID!
$firstValues: Int
$afterValues: String
$lastValues: Int
$beforeValues: String
) {
productType(id: $id) {
id
name
hasVariants
productAttributes {
id
inputType
entityType
slug
name
valueRequired
unit
choices(
first: $firstValues
after: $afterValues
last: $lastValues
before: $beforeValues
) {
...AttributeValueListFragment
}
}
taxType {
...TaxTypeFragment
}
}
}
`;
export const useProductTypeQuery = makeQuery<ProductType, ProductTypeVariables>(
productTypeQuery
);
const productVariantQuery = gql`
${fragmentVariant}
query ProductVariantDetails(
$id: ID!
$firstValues: Int
$afterValues: String
$lastValues: Int
$beforeValues: String
) {
productVariant(id: $id) {
...ProductVariant
}
}
`;
export const useProductVariantQuery = makeQuery<
ProductVariantDetails,
ProductVariantDetailsVariables
>(productVariantQuery);
const productVariantCreateQuery = gql`
${variantAttributeFragment}
query ProductVariantCreateData(
$id: ID!
$firstValues: Int
$afterValues: String
$lastValues: Int
$beforeValues: String
) {
product(id: $id) {
id
media {
id
sortOrder
url
}
channelListings {
channel {
id
name
currencyCode
}
}
name
productType {
id
selectionVariantAttributes: variantAttributes(
variantSelection: VARIANT_SELECTION
) {
...VariantAttributeFragment
}
nonSelectionVariantAttributes: variantAttributes(
variantSelection: NOT_VARIANT_SELECTION
) {
...VariantAttributeFragment
}
}
thumbnail {
url
}
variants {
id
name
sku
media {
id
url
type
}
}
}
}
`;
export const useProductVariantCreateQuery = makeQuery<
ProductVariantCreateData,
ProductVariantCreateDataVariables
>(productVariantCreateQuery);
const productMediaQuery = gql`
query ProductMediaById($productId: ID!, $mediaId: ID!) {
product(id: $productId) {
id
name
mainImage: mediaById(id: $mediaId) {
id
alt
url
type
oembedData
}
media {
id
url(size: 48)
alt
type
oembedData
}
}
}
`;
export const useProductMediaQuery = makeQuery<
ProductMediaById,
ProductMediaByIdVariables
>(productMediaQuery);
const availableInGridAttributes = gql`
${pageInfoFragment}
query GridAttributes($first: Int!, $after: String, $ids: [ID!]!) {
availableInGrid: attributes(
first: $first
after: $after
filter: {
availableInGrid: true
isVariantOnly: false
type: PRODUCT_TYPE
}
) {
edges {
node {
id
name
}
}
pageInfo {
...PageInfoFragment
}
totalCount
}
grid: attributes(first: 25, filter: { ids: $ids }) {
edges {
node {
id
name
}
}
}
}
`;
export const useAvailableInGridAttributesQuery = makeQuery<
GridAttributes,
GridAttributesVariables
>(availableInGridAttributes);
const createMultipleVariantsData = gql`
${productVariantAttributesFragment}
${warehouseFragment}
query CreateMultipleVariantsData(
$id: ID!
$firstValues: Int
$afterValues: String
$lastValues: Int
$beforeValues: String
) {
product(id: $id) {
...ProductVariantAttributesFragment
}
warehouses(first: 20) {
edges {
node {
...WarehouseFragment
}
}
}
}
`;
export const useCreateMultipleVariantsData = makeQuery<
CreateMultipleVariantsData,
CreateMultipleVariantsDataVariables
>(createMultipleVariantsData);