saleor-dashboard/src/products/queries.ts

502 lines
8.7 KiB
TypeScript
Raw Normal View History

2020-01-15 15:36:45 +00:00
import makeQuery from "@saleor/hooks/makeQuery";
2020-04-03 14:29:32 +00:00
import { warehouseFragment } from "@saleor/warehouses/queries";
import gql from "graphql-tag";
2019-08-13 09:04:52 +00:00
import { pageInfoFragment, TypedQuery } from "../queries";
import {
AvailableInGridAttributes,
AvailableInGridAttributesVariables
} from "./types/AvailableInGridAttributes";
import {
CreateMultipleVariantsData,
CreateMultipleVariantsDataVariables
} from "./types/CreateMultipleVariantsData";
import {
InitialProductFilterData,
InitialProductFilterDataVariables
} from "./types/InitialProductFilterData";
2019-06-19 14:40:52 +00:00
import {
ProductDetails,
ProductDetailsVariables
} from "./types/ProductDetails";
import {
ProductImageById,
ProductImageByIdVariables
} from "./types/ProductImageById";
import { ProductList, ProductListVariables } from "./types/ProductList";
import {
ProductVariantCreateData,
ProductVariantCreateDataVariables
} from "./types/ProductVariantCreateData";
import {
ProductVariantDetails,
ProductVariantDetailsVariables
} from "./types/ProductVariantDetails";
2020-03-19 12:15:47 +00:00
export const stockFragment = gql`
fragment StockFragment on Stock {
id
quantity
quantityAllocated
2020-03-19 12:15:47 +00:00
warehouse {
id
name
}
}
`;
2019-06-19 14:40:52 +00:00
export const fragmentMoney = gql`
fragment Money on Money {
amount
currency
}
`;
export const fragmentProductImage = gql`
fragment ProductImageFragment on ProductImage {
id
alt
sortOrder
url
}
`;
export const productFragment = gql`
fragment ProductFragment on Product {
id
name
thumbnail {
url
}
isAvailable
isPublished
2019-06-19 14:40:52 +00:00
productType {
id
name
}
}
`;
const productVariantAttributesFragment = gql`
fragment ProductVariantAttributesFragment on Product {
id
attributes {
attribute {
id
slug
name
inputType
valueRequired
values {
id
name
slug
}
}
values {
id
name
slug
}
}
productType {
2020-04-07 12:46:10 +00:00
id
variantAttributes {
id
name
values {
id
name
slug
}
}
}
}
`;
2019-06-19 14:40:52 +00:00
export const productFragmentDetails = gql`
${fragmentProductImage}
${fragmentMoney}
${productVariantAttributesFragment}
2020-03-19 12:15:47 +00:00
${stockFragment}
2019-06-19 14:40:52 +00:00
fragment Product on Product {
...ProductVariantAttributesFragment
2019-06-19 14:40:52 +00:00
name
descriptionJson
seoTitle
seoDescription
category {
id
name
}
collections {
id
name
}
margin {
start
stop
}
purchaseCost {
start {
...Money
}
stop {
...Money
}
}
isAvailable
isPublished
chargeTaxes
publicationDate
pricing {
priceRange {
start {
net {
...Money
}
}
stop {
net {
...Money
}
}
}
}
images {
...ProductImageFragment
}
variants {
id
sku
name
2020-06-10 13:39:10 +00:00
price {
2019-06-19 14:40:52 +00:00
...Money
}
margin
2020-03-19 12:15:47 +00:00
stocks {
...StockFragment
2020-02-06 16:51:01 +00:00
}
trackInventory
2019-06-19 14:40:52 +00:00
}
productType {
id
name
hasVariants
}
}
`;
export const fragmentVariant = gql`
${fragmentMoney}
${fragmentProductImage}
2020-03-19 12:15:47 +00:00
${stockFragment}
2019-06-19 14:40:52 +00:00
fragment ProductVariant on ProductVariant {
id
attributes {
attribute {
id
name
slug
2019-08-09 11:14:35 +00:00
valueRequired
2019-06-19 14:40:52 +00:00
values {
id
name
slug
}
}
2020-01-09 11:13:24 +00:00
values {
2019-06-19 14:40:52 +00:00
id
name
slug
}
}
costPrice {
...Money
}
images {
id
url
}
name
2020-06-10 13:39:10 +00:00
price {
2019-06-19 14:40:52 +00:00
...Money
}
product {
id
images {
...ProductImageFragment
}
name
thumbnail {
url
}
variants {
id
name
sku
images {
id
url
}
}
}
sku
2020-03-19 12:15:47 +00:00
stocks {
...StockFragment
2020-02-06 16:51:01 +00:00
}
trackInventory
2019-06-19 14:40:52 +00:00
}
`;
2020-01-15 15:36:45 +00:00
const initialProductFilterDataQuery = gql`
2020-01-16 13:49:06 +00:00
query InitialProductFilterData(
$categories: [ID!]
$collections: [ID!]
$productTypes: [ID!]
) {
2020-01-17 14:25:50 +00:00
attributes(first: 100, filter: { filterableInDashboard: true }) {
edges {
node {
id
name
slug
values {
id
name
slug
}
}
}
}
2020-01-16 13:49:06 +00:00
categories(first: 100, filter: { ids: $categories }) {
edges {
node {
id
name
}
}
}
collections(first: 100, filter: { ids: $collections }) {
2020-01-15 15:36:45 +00:00
edges {
node {
id
name
}
}
}
2020-01-16 13:49:06 +00:00
productTypes(first: 100, filter: { ids: $productTypes }) {
2020-01-15 15:36:45 +00:00
edges {
node {
id
name
}
}
}
}
`;
export const useInitialProductFilterDataQuery = makeQuery<
InitialProductFilterData,
InitialProductFilterDataVariables
>(initialProductFilterDataQuery);
2019-06-19 14:40:52 +00:00
const productListQuery = gql`
${productFragment}
query ProductList(
$first: Int
$after: String
$last: Int
$before: String
$filter: ProductFilterInput
2019-09-13 11:33:42 +00:00
$sort: ProductOrder
2019-06-19 14:40:52 +00:00
) {
products(
before: $before
after: $after
first: $first
last: $last
filter: $filter
2019-09-13 11:33:42 +00:00
sortBy: $sort
2019-06-19 14:40:52 +00:00
) {
edges {
node {
...ProductFragment
2019-08-13 09:04:52 +00:00
attributes {
attribute {
id
}
values {
id
name
}
}
variants {
price {
amount
currency
}
}
2019-06-19 14:40:52 +00:00
}
}
pageInfo {
hasPreviousPage
hasNextPage
startCursor
endCursor
}
}
}
`;
export const TypedProductListQuery = TypedQuery<
ProductList,
ProductListVariables
>(productListQuery);
const productDetailsQuery = gql`
${productFragmentDetails}
query ProductDetails($id: ID!) {
product(id: $id) {
...Product
}
}
`;
export const TypedProductDetailsQuery = TypedQuery<
ProductDetails,
ProductDetailsVariables
>(productDetailsQuery);
const productVariantQuery = gql`
${fragmentVariant}
query ProductVariantDetails($id: ID!) {
productVariant(id: $id) {
...ProductVariant
}
}
`;
export const TypedProductVariantQuery = TypedQuery<
ProductVariantDetails,
ProductVariantDetailsVariables
>(productVariantQuery);
const productVariantCreateQuery = gql`
query ProductVariantCreateData($id: ID!) {
product(id: $id) {
id
images {
id
sortOrder
url
}
name
productType {
id
variantAttributes {
id
slug
name
2019-08-09 11:14:35 +00:00
valueRequired
2019-06-19 14:40:52 +00:00
values {
id
name
slug
}
}
}
thumbnail {
url
}
variants {
id
name
sku
images {
id
url
}
}
}
}
`;
export const TypedProductVariantCreateQuery = TypedQuery<
ProductVariantCreateData,
ProductVariantCreateDataVariables
>(productVariantCreateQuery);
const productImageQuery = gql`
query ProductImageById($productId: ID!, $imageId: ID!) {
product(id: $productId) {
id
name
mainImage: imageById(id: $imageId) {
id
alt
url
}
images {
id
url(size: 48)
}
}
}
`;
export const TypedProductImageQuery = TypedQuery<
ProductImageById,
ProductImageByIdVariables
>(productImageQuery);
2019-08-13 09:04:52 +00:00
const availableInGridAttributes = gql`
${pageInfoFragment}
query GridAttributes($first: Int!, $after: String, $ids: [ID!]!) {
availableInGrid: attributes(
2019-08-13 09:04:52 +00:00
first: $first
after: $after
filter: { availableInGrid: true, isVariantOnly: false }
2019-08-13 09:04:52 +00:00
) {
edges {
node {
id
name
}
}
pageInfo {
...PageInfoFragment
}
totalCount
}
grid: attributes(first: 25, filter: { ids: $ids }) {
edges {
node {
id
name
}
}
}
2019-08-13 09:04:52 +00:00
}
`;
export const AvailableInGridAttributesQuery = TypedQuery<
AvailableInGridAttributes,
AvailableInGridAttributesVariables
>(availableInGridAttributes);
const createMultipleVariantsData = gql`
${productVariantAttributesFragment}
2020-04-03 14:29:32 +00:00
${warehouseFragment}
query CreateMultipleVariantsData($id: ID!) {
product(id: $id) {
...ProductVariantAttributesFragment
}
2020-04-03 14:29:32 +00:00
warehouses(first: 20) {
edges {
node {
...WarehouseFragment
}
}
}
}
`;
export const useCreateMultipleVariantsData = makeQuery<
CreateMultipleVariantsData,
CreateMultipleVariantsDataVariables
>(createMultipleVariantsData);