mirror of
https://github.com/vercel/commerce.git
synced 2025-06-19 13:41:22 +00:00
Vendure provider: split out gql operations, remove unused files
This commit is contained in:
parent
23c3412c17
commit
36303dddd5
@ -4,21 +4,7 @@ import useLogin, { UseLogin } from '@commerce/auth/use-login'
|
|||||||
import { CommerceError, ValidationError } from '@commerce/utils/errors'
|
import { CommerceError, ValidationError } from '@commerce/utils/errors'
|
||||||
import useCustomer from '../customer/use-customer'
|
import useCustomer from '../customer/use-customer'
|
||||||
import { LoginMutation, LoginMutationVariables } from '../schema'
|
import { LoginMutation, LoginMutationVariables } from '../schema'
|
||||||
|
import { loginMutation } from '../lib/mutations/log-in-mutation'
|
||||||
export const loginMutation = /* GraphQL */ `
|
|
||||||
mutation login($username: String!, $password: String!) {
|
|
||||||
login(username: $username, password: $password) {
|
|
||||||
__typename
|
|
||||||
... on CurrentUser {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
... on ErrorResult {
|
|
||||||
errorCode
|
|
||||||
message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useLogin as UseLogin<typeof handler>
|
export default useLogin as UseLogin<typeof handler>
|
||||||
|
|
||||||
|
@ -3,14 +3,7 @@ import { MutationHook } from '@commerce/utils/types'
|
|||||||
import useLogout, { UseLogout } from '@commerce/auth/use-logout'
|
import useLogout, { UseLogout } from '@commerce/auth/use-logout'
|
||||||
import useCustomer from '../customer/use-customer'
|
import useCustomer from '../customer/use-customer'
|
||||||
import { LogoutMutation } from '../schema'
|
import { LogoutMutation } from '../schema'
|
||||||
|
import { logoutMutation } from '../lib/mutations/log-out-mutation'
|
||||||
export const logoutMutation = /* GraphQL */ `
|
|
||||||
mutation logout {
|
|
||||||
logout {
|
|
||||||
success
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useLogout as UseLogout<typeof handler>
|
export default useLogout as UseLogout<typeof handler>
|
||||||
|
|
||||||
|
@ -8,21 +8,7 @@ import {
|
|||||||
SignupMutation,
|
SignupMutation,
|
||||||
SignupMutationVariables,
|
SignupMutationVariables,
|
||||||
} from '../schema'
|
} from '../schema'
|
||||||
|
import { signupMutation } from '../lib/mutations/sign-up-mutation'
|
||||||
export const signupMutation = /* GraphQL */ `
|
|
||||||
mutation signup($input: RegisterCustomerInput!) {
|
|
||||||
registerCustomerAccount(input: $input) {
|
|
||||||
__typename
|
|
||||||
... on Success {
|
|
||||||
success
|
|
||||||
}
|
|
||||||
... on ErrorResult {
|
|
||||||
errorCode
|
|
||||||
message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useSignup as UseSignup<typeof handler>
|
export default useSignup as UseSignup<typeof handler>
|
||||||
|
|
||||||
|
@ -4,23 +4,9 @@ import { CommerceError } from '@commerce/utils/errors'
|
|||||||
import { MutationHook } from '@commerce/utils/types'
|
import { MutationHook } from '@commerce/utils/types'
|
||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
import useCart from './use-cart'
|
import useCart from './use-cart'
|
||||||
import { cartFragment } from '../api/fragments/cart'
|
|
||||||
import { AddItemToOrderMutation } from '../schema'
|
import { AddItemToOrderMutation } from '../schema'
|
||||||
import { normalizeCart } from '../lib/normalize'
|
import { normalizeCart } from '../lib/normalize'
|
||||||
|
import { addItemToOrderMutation } from '../lib/mutations/add-item-to-order-mutation'
|
||||||
export const addItemToOrderMutation = /* GraphQL */ `
|
|
||||||
mutation addItemToOrder($variantId: ID!, $quantity: Int!) {
|
|
||||||
addItemToOrder(productVariantId: $variantId, quantity: $quantity) {
|
|
||||||
__typename
|
|
||||||
...Cart
|
|
||||||
... on ErrorResult {
|
|
||||||
errorCode
|
|
||||||
message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
${cartFragment}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useAddItem as UseAddItem<typeof handler>
|
export default useAddItem as UseAddItem<typeof handler>
|
||||||
|
|
||||||
|
@ -1,19 +1,10 @@
|
|||||||
import { Cart } from '@commerce/types'
|
import { Cart } from '@commerce/types'
|
||||||
import { SWRHook } from '@commerce/utils/types'
|
import { SWRHook } from '@commerce/utils/types'
|
||||||
import useCart, { FetchCartInput, UseCart } from '@commerce/cart/use-cart'
|
import useCart, { FetchCartInput, UseCart } from '@commerce/cart/use-cart'
|
||||||
import { cartFragment } from '../api/fragments/cart'
|
|
||||||
import { ActiveOrderQuery, CartFragment } from '../schema'
|
import { ActiveOrderQuery, CartFragment } from '../schema'
|
||||||
import { normalizeCart } from '../lib/normalize'
|
import { normalizeCart } from '../lib/normalize'
|
||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
|
import { getCartQuery } from '../lib/queries/get-cart-query'
|
||||||
export const getCartQuery = /* GraphQL */ `
|
|
||||||
query activeOrder {
|
|
||||||
activeOrder {
|
|
||||||
...Cart
|
|
||||||
}
|
|
||||||
}
|
|
||||||
${cartFragment}
|
|
||||||
`
|
|
||||||
|
|
||||||
export type CartResult = {
|
export type CartResult = {
|
||||||
activeOrder?: CartFragment
|
activeOrder?: CartFragment
|
||||||
|
@ -3,27 +3,13 @@ import { HookFetcherContext, MutationHookContext } from '@commerce/utils/types'
|
|||||||
import useRemoveItem, { UseRemoveItem } from '@commerce/cart/use-remove-item'
|
import useRemoveItem, { UseRemoveItem } from '@commerce/cart/use-remove-item'
|
||||||
import { CommerceError } from '@commerce/utils/errors'
|
import { CommerceError } from '@commerce/utils/errors'
|
||||||
import useCart from './use-cart'
|
import useCart from './use-cart'
|
||||||
import { cartFragment } from '../api/fragments/cart'
|
|
||||||
import {
|
import {
|
||||||
RemoveOrderLineMutation,
|
RemoveOrderLineMutation,
|
||||||
RemoveOrderLineMutationVariables,
|
RemoveOrderLineMutationVariables,
|
||||||
} from '../schema'
|
} from '../schema'
|
||||||
import { Cart, LineItem, RemoveCartItemBody } from '@commerce/types'
|
import { Cart, LineItem, RemoveCartItemBody } from '@commerce/types'
|
||||||
import { normalizeCart } from '../lib/normalize'
|
import { normalizeCart } from '../lib/normalize'
|
||||||
|
import { removeOrderLineMutation } from '../lib/mutations/remove-order-line-mutation'
|
||||||
export const removeOrderLineMutation = /* GraphQL */ `
|
|
||||||
mutation removeOrderLine($orderLineId: ID!) {
|
|
||||||
removeOrderLine(orderLineId: $orderLineId) {
|
|
||||||
__typename
|
|
||||||
...Cart
|
|
||||||
... on ErrorResult {
|
|
||||||
errorCode
|
|
||||||
message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
${cartFragment}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useRemoveItem as UseRemoveItem<typeof handler>
|
export default useRemoveItem as UseRemoveItem<typeof handler>
|
||||||
|
|
||||||
|
@ -13,22 +13,8 @@ import {
|
|||||||
AdjustOrderLineMutation,
|
AdjustOrderLineMutation,
|
||||||
AdjustOrderLineMutationVariables,
|
AdjustOrderLineMutationVariables,
|
||||||
} from '../schema'
|
} from '../schema'
|
||||||
import { cartFragment } from '../api/fragments/cart'
|
|
||||||
import { normalizeCart } from '../lib/normalize'
|
import { normalizeCart } from '../lib/normalize'
|
||||||
|
import { adjustOrderLineMutation } from '../lib/mutations/adjust-order-line-mutation'
|
||||||
export const adjustOrderLineMutation = /* GraphQL */ `
|
|
||||||
mutation adjustOrderLine($orderLineId: ID!, $quantity: Int!) {
|
|
||||||
adjustOrderLine(orderLineId: $orderLineId, quantity: $quantity) {
|
|
||||||
__typename
|
|
||||||
...Cart
|
|
||||||
... on ErrorResult {
|
|
||||||
errorCode
|
|
||||||
message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
${cartFragment}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useUpdateItem as UseUpdateItem<typeof handler>
|
export default useUpdateItem as UseUpdateItem<typeof handler>
|
||||||
|
|
||||||
|
@ -1,28 +1,7 @@
|
|||||||
import { VendureConfig, getConfig } from '../api'
|
import { getConfig, VendureConfig } from '../api'
|
||||||
import { GetCollectionsQuery } from '../schema'
|
import { GetCollectionsQuery } from '../schema'
|
||||||
import { arrayToTree } from '../lib/array-to-tree'
|
import { arrayToTree } from '../lib/array-to-tree'
|
||||||
|
import { getCollectionsQuery } from '../lib/queries/get-collections-query'
|
||||||
export const getCollectionsQuery = /* GraphQL */ `
|
|
||||||
query getCollections {
|
|
||||||
collections {
|
|
||||||
items {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
description
|
|
||||||
slug
|
|
||||||
productVariants {
|
|
||||||
totalItems
|
|
||||||
}
|
|
||||||
parent {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
children {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
async function getSiteInfo({
|
async function getSiteInfo({
|
||||||
query = getCollectionsQuery,
|
query = getCollectionsQuery,
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import { GetCustomerIdQuery } from '../schema'
|
|
||||||
import { VendureConfig, getConfig } from '../api'
|
|
||||||
|
|
||||||
export const getCustomerIdQuery = /* */ `
|
|
||||||
query getCustomerId {
|
|
||||||
customer {
|
|
||||||
entityId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
async function getCustomerId({
|
|
||||||
customerToken,
|
|
||||||
config,
|
|
||||||
}: {
|
|
||||||
customerToken: string
|
|
||||||
config?: VendureConfig
|
|
||||||
}): Promise<number | undefined> {
|
|
||||||
config = getConfig(config)
|
|
||||||
|
|
||||||
const { data } = await config.fetch<GetCustomerIdQuery>(
|
|
||||||
getCustomerIdQuery,
|
|
||||||
undefined,
|
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
cookie: `${config.customerCookie}=${customerToken}`,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
return data?.customer?.entityId
|
|
||||||
}
|
|
||||||
|
|
||||||
export default getCustomerId
|
|
@ -1,41 +1,4 @@
|
|||||||
import type { RecursivePartial, RecursiveRequired } from '../api/utils/types'
|
import { getConfig, VendureConfig } from '../api'
|
||||||
import { definitions } from '../api/definitions/wishlist'
|
|
||||||
import { VendureConfig, getConfig } from '../api'
|
|
||||||
import getAllProducts, { ProductEdge } from '../product/get-all-products'
|
|
||||||
|
|
||||||
export type Wishlist = Omit<definitions['wishlist_Full'], 'items'> & {
|
|
||||||
items?: WishlistItem[]
|
|
||||||
}
|
|
||||||
|
|
||||||
export type WishlistItem = NonNullable<
|
|
||||||
definitions['wishlist_Full']['items']
|
|
||||||
>[0] & {
|
|
||||||
product?: ProductEdge['node']
|
|
||||||
}
|
|
||||||
|
|
||||||
export type GetCustomerWishlistResult<
|
|
||||||
T extends { wishlist?: any } = { wishlist?: Wishlist }
|
|
||||||
> = T
|
|
||||||
|
|
||||||
export type GetCustomerWishlistVariables = {
|
|
||||||
customerId: number
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getCustomerWishlist(opts: {
|
|
||||||
variables: GetCustomerWishlistVariables
|
|
||||||
config?: VendureConfig
|
|
||||||
includeProducts?: boolean
|
|
||||||
}): Promise<GetCustomerWishlistResult>
|
|
||||||
|
|
||||||
async function getCustomerWishlist<
|
|
||||||
T extends { wishlist?: any },
|
|
||||||
V = any
|
|
||||||
>(opts: {
|
|
||||||
url: string
|
|
||||||
variables: V
|
|
||||||
config?: VendureConfig
|
|
||||||
includeProducts?: boolean
|
|
||||||
}): Promise<GetCustomerWishlistResult<T>>
|
|
||||||
|
|
||||||
async function getCustomerWishlist({
|
async function getCustomerWishlist({
|
||||||
config,
|
config,
|
||||||
@ -43,45 +6,13 @@ async function getCustomerWishlist({
|
|||||||
includeProducts,
|
includeProducts,
|
||||||
}: {
|
}: {
|
||||||
url?: string
|
url?: string
|
||||||
variables: GetCustomerWishlistVariables
|
variables: any
|
||||||
config?: VendureConfig
|
config?: VendureConfig
|
||||||
includeProducts?: boolean
|
includeProducts?: boolean
|
||||||
}): Promise<GetCustomerWishlistResult> {
|
}): Promise<any> {
|
||||||
|
// Not implemented as Vendure does not ship with wishlist functionality at present
|
||||||
config = getConfig(config)
|
config = getConfig(config)
|
||||||
|
return { wishlist: {} }
|
||||||
const { data = [] } = await config.storeApiFetch<
|
|
||||||
RecursivePartial<{ data: Wishlist[] }>
|
|
||||||
>(`/v3/wishlists?customer_id=${variables.customerId}`)
|
|
||||||
const wishlist = data[0]
|
|
||||||
|
|
||||||
if (includeProducts && wishlist?.items?.length) {
|
|
||||||
const entityIds = wishlist.items
|
|
||||||
?.map((item) => item?.product_id)
|
|
||||||
.filter((id): id is number => !!id)
|
|
||||||
|
|
||||||
if (entityIds?.length) {
|
|
||||||
const graphqlData = await getAllProducts({
|
|
||||||
variables: { first: 100, entityIds },
|
|
||||||
config,
|
|
||||||
})
|
|
||||||
// Put the products in an object that we can use to get them by id
|
|
||||||
const productsById = graphqlData.products.reduce<{
|
|
||||||
[k: number]: ProductEdge
|
|
||||||
}>((prods, p) => {
|
|
||||||
prods[p.node.entityId] = p
|
|
||||||
return prods
|
|
||||||
}, {})
|
|
||||||
// Populate the wishlist items with the graphql products
|
|
||||||
wishlist.items.forEach((item) => {
|
|
||||||
const product = item && productsById[item.product_id!]
|
|
||||||
if (item && product) {
|
|
||||||
item.product = product.node
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return { wishlist: wishlist as RecursiveRequired<typeof wishlist> }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default getCustomerWishlist
|
export default getCustomerWishlist
|
||||||
|
@ -2,17 +2,7 @@ import { SWRHook } from '@commerce/utils/types'
|
|||||||
import useCustomer, { UseCustomer } from '@commerce/customer/use-customer'
|
import useCustomer, { UseCustomer } from '@commerce/customer/use-customer'
|
||||||
import { Customer } from '@commerce/types'
|
import { Customer } from '@commerce/types'
|
||||||
import { ActiveCustomerQuery } from '../schema'
|
import { ActiveCustomerQuery } from '../schema'
|
||||||
|
import { activeCustomerQuery } from '../lib/queries/active-customer-query'
|
||||||
export const activeCustomerQuery = /* GraphQL */ `
|
|
||||||
query activeCustomer {
|
|
||||||
activeCustomer {
|
|
||||||
id
|
|
||||||
firstName
|
|
||||||
lastName
|
|
||||||
emailAddress
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useCustomer as UseCustomer<typeof handler>
|
export default useCustomer as UseCustomer<typeof handler>
|
||||||
|
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
|
|
||||||
import update, { Context } from 'immutability-helper';
|
|
||||||
|
|
||||||
const c = new Context();
|
|
||||||
|
|
||||||
c.extend('$auto', function(value, object) {
|
|
||||||
return object ?
|
|
||||||
c.update(object, value):
|
|
||||||
c.update({}, value);
|
|
||||||
});
|
|
||||||
|
|
||||||
c.extend('$autoArray', function(value, object) {
|
|
||||||
return object ?
|
|
||||||
c.update(object, value):
|
|
||||||
c.update([], value);
|
|
||||||
});
|
|
||||||
|
|
||||||
export default c.update
|
|
@ -0,0 +1,15 @@
|
|||||||
|
import { cartFragment } from '../fragments/cart-fragment'
|
||||||
|
|
||||||
|
export const addItemToOrderMutation = /* GraphQL */ `
|
||||||
|
mutation addItemToOrder($variantId: ID!, $quantity: Int!) {
|
||||||
|
addItemToOrder(productVariantId: $variantId, quantity: $quantity) {
|
||||||
|
__typename
|
||||||
|
...Cart
|
||||||
|
... on ErrorResult {
|
||||||
|
errorCode
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
${cartFragment}
|
||||||
|
`
|
@ -0,0 +1,15 @@
|
|||||||
|
import { cartFragment } from '../fragments/cart-fragment'
|
||||||
|
|
||||||
|
export const adjustOrderLineMutation = /* GraphQL */ `
|
||||||
|
mutation adjustOrderLine($orderLineId: ID!, $quantity: Int!) {
|
||||||
|
adjustOrderLine(orderLineId: $orderLineId, quantity: $quantity) {
|
||||||
|
__typename
|
||||||
|
...Cart
|
||||||
|
... on ErrorResult {
|
||||||
|
errorCode
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
${cartFragment}
|
||||||
|
`
|
14
framework/vendure/lib/mutations/log-in-mutation.ts
Normal file
14
framework/vendure/lib/mutations/log-in-mutation.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
export const loginMutation = /* GraphQL */ `
|
||||||
|
mutation login($username: String!, $password: String!) {
|
||||||
|
login(username: $username, password: $password) {
|
||||||
|
__typename
|
||||||
|
... on CurrentUser {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
... on ErrorResult {
|
||||||
|
errorCode
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
7
framework/vendure/lib/mutations/log-out-mutation.ts
Normal file
7
framework/vendure/lib/mutations/log-out-mutation.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export const logoutMutation = /* GraphQL */ `
|
||||||
|
mutation logout {
|
||||||
|
logout {
|
||||||
|
success
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
@ -0,0 +1,15 @@
|
|||||||
|
import { cartFragment } from '../fragments/cart-fragment'
|
||||||
|
|
||||||
|
export const removeOrderLineMutation = /* GraphQL */ `
|
||||||
|
mutation removeOrderLine($orderLineId: ID!) {
|
||||||
|
removeOrderLine(orderLineId: $orderLineId) {
|
||||||
|
__typename
|
||||||
|
...Cart
|
||||||
|
... on ErrorResult {
|
||||||
|
errorCode
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
${cartFragment}
|
||||||
|
`
|
14
framework/vendure/lib/mutations/sign-up-mutation.ts
Normal file
14
framework/vendure/lib/mutations/sign-up-mutation.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
export const signupMutation = /* GraphQL */ `
|
||||||
|
mutation signup($input: RegisterCustomerInput!) {
|
||||||
|
registerCustomerAccount(input: $input) {
|
||||||
|
__typename
|
||||||
|
... on Success {
|
||||||
|
success
|
||||||
|
}
|
||||||
|
... on ErrorResult {
|
||||||
|
errorCode
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
@ -1,74 +1,6 @@
|
|||||||
import { Cart, Product } from '@commerce/types'
|
import { Cart, Product } from '@commerce/types'
|
||||||
import update from '../lib/immutability'
|
|
||||||
import { CartFragment, SearchResultFragment } from '../schema'
|
import { CartFragment, SearchResultFragment } from '../schema'
|
||||||
|
|
||||||
function normalizeProductOption(productOption: any) {
|
|
||||||
const {
|
|
||||||
node: {
|
|
||||||
entityId,
|
|
||||||
values: { edges },
|
|
||||||
...rest
|
|
||||||
},
|
|
||||||
} = productOption
|
|
||||||
|
|
||||||
return {
|
|
||||||
id: entityId,
|
|
||||||
values: edges?.map(({ node }: any) => node),
|
|
||||||
...rest,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function normalizeProduct(productNode: any): Product {
|
|
||||||
const {
|
|
||||||
entityId: id,
|
|
||||||
productOptions,
|
|
||||||
prices,
|
|
||||||
path,
|
|
||||||
id: _,
|
|
||||||
options: _0,
|
|
||||||
} = productNode
|
|
||||||
|
|
||||||
return update(productNode, {
|
|
||||||
id: { $set: String(id) },
|
|
||||||
images: {
|
|
||||||
$apply: ({ edges }: any) =>
|
|
||||||
edges?.map(({ node: { urlOriginal, altText, ...rest } }: any) => ({
|
|
||||||
url: urlOriginal,
|
|
||||||
alt: altText,
|
|
||||||
...rest,
|
|
||||||
})),
|
|
||||||
},
|
|
||||||
variants: {
|
|
||||||
$apply: ({ edges }: any) =>
|
|
||||||
edges?.map(({ node: { entityId, productOptions, ...rest } }: any) => ({
|
|
||||||
id: entityId,
|
|
||||||
options: productOptions?.edges
|
|
||||||
? productOptions.edges.map(normalizeProductOption)
|
|
||||||
: [],
|
|
||||||
...rest,
|
|
||||||
})),
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
$set: productOptions.edges
|
|
||||||
? productOptions?.edges.map(normalizeProductOption)
|
|
||||||
: [],
|
|
||||||
},
|
|
||||||
brand: {
|
|
||||||
$apply: (brand: any) => (brand?.entityId ? brand?.entityId : null),
|
|
||||||
},
|
|
||||||
slug: {
|
|
||||||
$set: path?.replace(/^\/+|\/+$/g, ''),
|
|
||||||
},
|
|
||||||
price: {
|
|
||||||
$set: {
|
|
||||||
value: prices?.price.value,
|
|
||||||
currencyCode: prices?.price.currencyCode,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
$unset: ['entityId'],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export function normalizeSearchResult(item: SearchResultFragment): Product {
|
export function normalizeSearchResult(item: SearchResultFragment): Product {
|
||||||
return {
|
return {
|
||||||
id: item.productId,
|
id: item.productId,
|
||||||
|
10
framework/vendure/lib/queries/active-customer-query.ts
Normal file
10
framework/vendure/lib/queries/active-customer-query.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export const activeCustomerQuery = /* GraphQL */ `
|
||||||
|
query activeCustomer {
|
||||||
|
activeCustomer {
|
||||||
|
id
|
||||||
|
firstName
|
||||||
|
lastName
|
||||||
|
emailAddress
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
@ -0,0 +1,9 @@
|
|||||||
|
export const getAllProductPathsQuery = /* GraphQL */ `
|
||||||
|
query getAllProductPaths($first: Int = 100) {
|
||||||
|
products(options: { take: $first }) {
|
||||||
|
items {
|
||||||
|
slug
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
12
framework/vendure/lib/queries/get-all-products-query.ts
Normal file
12
framework/vendure/lib/queries/get-all-products-query.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { searchResultFragment } from '../fragments/search-result-fragment'
|
||||||
|
|
||||||
|
export const getAllProductsQuery = /* GraphQL */ `
|
||||||
|
query getAllProducts($input: SearchInput!) {
|
||||||
|
search(input: $input) {
|
||||||
|
items {
|
||||||
|
...SearchResult
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
${searchResultFragment}
|
||||||
|
`
|
10
framework/vendure/lib/queries/get-cart-query.ts
Normal file
10
framework/vendure/lib/queries/get-cart-query.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { cartFragment } from '../fragments/cart-fragment'
|
||||||
|
|
||||||
|
export const getCartQuery = /* GraphQL */ `
|
||||||
|
query activeOrder {
|
||||||
|
activeOrder {
|
||||||
|
...Cart
|
||||||
|
}
|
||||||
|
}
|
||||||
|
${cartFragment}
|
||||||
|
`
|
21
framework/vendure/lib/queries/get-collections-query.ts
Normal file
21
framework/vendure/lib/queries/get-collections-query.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
export const getCollectionsQuery = /* GraphQL */ `
|
||||||
|
query getCollections {
|
||||||
|
collections {
|
||||||
|
items {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
description
|
||||||
|
slug
|
||||||
|
productVariants {
|
||||||
|
totalItems
|
||||||
|
}
|
||||||
|
parent {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
children {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
41
framework/vendure/lib/queries/get-product-query.ts
Normal file
41
framework/vendure/lib/queries/get-product-query.ts
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
export const getProductQuery = /* GraphQL */ `
|
||||||
|
query getProduct($slug: String!) {
|
||||||
|
product(slug: $slug) {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
slug
|
||||||
|
description
|
||||||
|
assets {
|
||||||
|
id
|
||||||
|
preview
|
||||||
|
name
|
||||||
|
}
|
||||||
|
variants {
|
||||||
|
id
|
||||||
|
priceWithTax
|
||||||
|
currencyCode
|
||||||
|
options {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
code
|
||||||
|
groupId
|
||||||
|
group {
|
||||||
|
id
|
||||||
|
options {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
optionGroups {
|
||||||
|
id
|
||||||
|
code
|
||||||
|
name
|
||||||
|
options {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
13
framework/vendure/lib/queries/search-query.ts
Normal file
13
framework/vendure/lib/queries/search-query.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { searchResultFragment } from '../fragments/search-result-fragment'
|
||||||
|
|
||||||
|
export const searchQuery = /* GraphQL */ `
|
||||||
|
query search($input: SearchInput!) {
|
||||||
|
search(input: $input) {
|
||||||
|
items {
|
||||||
|
...SearchResult
|
||||||
|
}
|
||||||
|
totalItems
|
||||||
|
}
|
||||||
|
}
|
||||||
|
${searchResultFragment}
|
||||||
|
`
|
@ -2,17 +2,8 @@ import type {
|
|||||||
GetAllProductPathsQuery,
|
GetAllProductPathsQuery,
|
||||||
GetAllProductPathsQueryVariables,
|
GetAllProductPathsQueryVariables,
|
||||||
} from '../schema'
|
} from '../schema'
|
||||||
import { VendureConfig, getConfig } from '../api'
|
import { getConfig, VendureConfig } from '../api'
|
||||||
|
import { getAllProductPathsQuery } from '../lib/queries/get-all-product-paths-query'
|
||||||
export const getAllProductPathsQuery = /* GraphQL */ `
|
|
||||||
query getAllProductPaths($first: Int = 100) {
|
|
||||||
products(options: { take: $first }) {
|
|
||||||
items {
|
|
||||||
slug
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
export type GetAllProductPathsResult = {
|
export type GetAllProductPathsResult = {
|
||||||
products: Array<{ node: { path: string } }>
|
products: Array<{ node: { path: string } }>
|
||||||
|
@ -1,19 +1,8 @@
|
|||||||
import { Product } from '@commerce/types'
|
import { Product } from '@commerce/types'
|
||||||
import { getConfig, VendureConfig } from '../api'
|
import { getConfig, VendureConfig } from '../api'
|
||||||
import { searchResultFragment } from '../api/fragments/search-result'
|
|
||||||
import { GetAllProductsQuery } from '../schema'
|
import { GetAllProductsQuery } from '../schema'
|
||||||
import { normalizeSearchResult } from '../lib/normalize'
|
import { normalizeSearchResult } from '../lib/normalize'
|
||||||
|
import { getAllProductsQuery } from '../lib/queries/get-all-products-query'
|
||||||
export const getAllProductsQuery = /* GraphQL */ `
|
|
||||||
query getAllProducts($input: SearchInput!) {
|
|
||||||
search(input: $input) {
|
|
||||||
items {
|
|
||||||
...SearchResult
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
${searchResultFragment}
|
|
||||||
`
|
|
||||||
|
|
||||||
export type ProductVariables = { first?: number }
|
export type ProductVariables = { first?: number }
|
||||||
|
|
||||||
|
@ -1,48 +1,7 @@
|
|||||||
import { Product } from '@commerce/types'
|
import { Product } from '@commerce/types'
|
||||||
import { getConfig, VendureConfig } from '../api'
|
import { getConfig, VendureConfig } from '../api'
|
||||||
import { GetProductQuery } from '@framework/schema'
|
import { GetProductQuery } from '../schema'
|
||||||
|
import { getProductQuery } from '../lib/queries/get-product-query'
|
||||||
export const getProductQuery = /* GraphQL */ `
|
|
||||||
query getProduct($slug: String!) {
|
|
||||||
product(slug: $slug) {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
slug
|
|
||||||
description
|
|
||||||
assets {
|
|
||||||
id
|
|
||||||
preview
|
|
||||||
name
|
|
||||||
}
|
|
||||||
variants {
|
|
||||||
id
|
|
||||||
priceWithTax
|
|
||||||
currencyCode
|
|
||||||
options {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
code
|
|
||||||
groupId
|
|
||||||
group {
|
|
||||||
id
|
|
||||||
options {
|
|
||||||
name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
optionGroups {
|
|
||||||
id
|
|
||||||
code
|
|
||||||
name
|
|
||||||
options {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
async function getProduct({
|
async function getProduct({
|
||||||
query = getProductQuery,
|
query = getProductQuery,
|
||||||
|
@ -2,20 +2,8 @@ import { SWRHook } from '@commerce/utils/types'
|
|||||||
import useSearch, { UseSearch } from '@commerce/product/use-search'
|
import useSearch, { UseSearch } from '@commerce/product/use-search'
|
||||||
import { Product } from '@commerce/types'
|
import { Product } from '@commerce/types'
|
||||||
import { SearchQuery, SearchQueryVariables } from '../schema'
|
import { SearchQuery, SearchQueryVariables } from '../schema'
|
||||||
import { searchResultFragment } from '../api/fragments/search-result'
|
|
||||||
import { normalizeSearchResult } from '../lib/normalize'
|
import { normalizeSearchResult } from '../lib/normalize'
|
||||||
|
import { searchQuery } from '../lib/queries/search-query'
|
||||||
export const searchQuery = /* GraphQL */ `
|
|
||||||
query search($input: SearchInput!) {
|
|
||||||
search(input: $input) {
|
|
||||||
items {
|
|
||||||
...SearchResult
|
|
||||||
}
|
|
||||||
totalItems
|
|
||||||
}
|
|
||||||
}
|
|
||||||
${searchResultFragment}
|
|
||||||
`
|
|
||||||
|
|
||||||
export default useSearch as UseSearch<typeof handler>
|
export default useSearch as UseSearch<typeof handler>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user