UNPKG

3.61 kBTypeScriptView Raw
1/// <reference types="react" />
2import { DocumentNode } from 'graphql';
3import { MutationTuple, QueryResult } from 'react-apollo';
4import { CustomerProductListResult, MutationAddToCustomerProductListArgs, MutationRemoveFromCustomerProductListArgs, MutationUpdateCustomerProductListItemArgs, Product, ProductVariant, QueryCustomerProductListArgs, QueryProductsArgs } from '../../types';
5import { ThunkAction } from '../useThunkReducer';
6import { Action } from './product-list-reducer';
7export { useProductList } from './useProductList';
8export { useProductListItems } from './useProductListItems';
9export interface UpdateListOptions {
10 quantity?: number;
11 description?: string;
12 productName?: string;
13}
14export interface ProductListContextOptions {
15 state: ProductListState;
16 dispatch: React.Dispatch<Action | ThunkAction<ProductListState, Action>>;
17 usingLocalList: boolean;
18 queries: ProductListQueries;
19}
20export interface ProductListState {
21 loggedIn: boolean;
22 list: NormalizedProductList;
23 requestIdRef: React.MutableRefObject<string | null>;
24}
25export interface ProductListQueries {
26 /** Products query, used for retrieving products from localList */
27 productsQuery: DocumentNode;
28 /** The customerProductList query */
29 query: DocumentNode;
30 /** The addToCustomerProductList mutation */
31 add: DocumentNode;
32 /** An addToCustomerProductList mutation that returns the full list */
33 login: DocumentNode;
34 /** The removeToCustomerProductList mutation */
35 remove: DocumentNode;
36 /** The updateCustomerProductListItem mutation */
37 update: DocumentNode;
38}
39export interface UpdateListInput extends UpdateListOptions {
40 variantArticleNumber?: string;
41}
42export interface ProductListDetail {
43 /** Whether a query is in flight for the products in the list */
44 loading: boolean;
45 /** An array containing the product data */
46 products: ProductListProduct[];
47}
48export interface NormalizedProductList {
49 [articleNumber: string]: {
50 options: ProductListItemOptions;
51 variants: ProductListItemVariants | null;
52 };
53}
54export interface FlattenedProductListItem {
55 articleNumber: string;
56 parentArticleNumber?: string;
57 options: ProductListItemOptions;
58}
59export interface ProductListItemOptions {
60 quantity?: number;
61 description?: string;
62}
63export interface ProductListItemVariants {
64 [articleNumber: string]: {
65 options: ProductListItemOptions;
66 /** TODO: change to baseArticleNumber ? */
67 parentArticleNumber: string;
68 };
69}
70export interface ProductListProduct extends Product {
71 quantity: number;
72 isVariant: boolean;
73 variant: ProductVariant;
74 validation: ProductListProductValidation;
75}
76export declare type ProductListProductValidation = {
77 status: 'valid' | 'outOfStock' | 'configurations' | 'missingVariant' | 'preOrder' | 'package';
78 message: string;
79};
80export declare type AddToListMutation = MutationTuple<{
81 addToCustomerProductList: CustomerProductListResult;
82}, MutationAddToCustomerProductListArgs>;
83export declare type RemoveFromListMutation = MutationTuple<{
84 removeFromCustomerProductList: CustomerProductListResult;
85}, MutationRemoveFromCustomerProductListArgs>;
86export declare type UpdateListItemMutation = MutationTuple<{
87 updateCustomerProductListItem: CustomerProductListResult;
88}, MutationUpdateCustomerProductListItemArgs>;
89export declare type ListProductsQuery = QueryResult<CustomerProductListResult, QueryCustomerProductListArgs>;
90export declare type ProductsQuery = QueryResult<{
91 products: Product[];
92}, QueryProductsArgs>;