mirror of
https://github.com/vercel/commerce.git
synced 2025-06-19 05:31:22 +00:00
Added getAllProductPaths operation
This commit is contained in:
parent
29a720e75e
commit
3fe75a2d67
@ -21,6 +21,7 @@ import getAllPages from './operations/get-all-pages'
|
|||||||
import getPage from './operations/get-page'
|
import getPage from './operations/get-page'
|
||||||
import getSiteInfo from './operations/get-site-info'
|
import getSiteInfo from './operations/get-site-info'
|
||||||
import getCustomerWishlist from './operations/get-customer-wishlist'
|
import getCustomerWishlist from './operations/get-customer-wishlist'
|
||||||
|
import getAllProductPaths from './operations/get-all-product-paths'
|
||||||
|
|
||||||
export interface BigcommerceConfig extends CommerceAPIConfig {
|
export interface BigcommerceConfig extends CommerceAPIConfig {
|
||||||
// Indicates if the returned metadata with translations should be applied to the
|
// Indicates if the returned metadata with translations should be applied to the
|
||||||
@ -116,7 +117,14 @@ const config2: BigcommerceConfig = {
|
|||||||
|
|
||||||
export const provider = {
|
export const provider = {
|
||||||
config: config2,
|
config: config2,
|
||||||
operations: { login, getAllPages, getPage, getSiteInfo, getCustomerWishlist },
|
operations: {
|
||||||
|
login,
|
||||||
|
getAllPages,
|
||||||
|
getPage,
|
||||||
|
getSiteInfo,
|
||||||
|
getCustomerWishlist,
|
||||||
|
getAllProductPaths,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Provider = typeof provider
|
export type Provider = typeof provider
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
import type {
|
||||||
|
OperationContext,
|
||||||
|
OperationOptions,
|
||||||
|
} from '@commerce/api/operations'
|
||||||
|
import type { GetAllProductPathsQuery } from '../../schema'
|
||||||
|
import type { GetAllProductPathsOperation } from '../../types/product'
|
||||||
|
import type { RecursivePartial, RecursiveRequired } from '../utils/types'
|
||||||
|
import filterEdges from '../utils/filter-edges'
|
||||||
|
import { BigcommerceConfig, Provider } from '..'
|
||||||
|
|
||||||
|
export const getAllProductPathsQuery = /* GraphQL */ `
|
||||||
|
query getAllProductPaths($first: Int = 100) {
|
||||||
|
site {
|
||||||
|
products(first: $first) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
export default function getAllProductPathsOperation({
|
||||||
|
commerce,
|
||||||
|
}: OperationContext<Provider>) {
|
||||||
|
async function getAllProductPaths<
|
||||||
|
T extends GetAllProductPathsOperation
|
||||||
|
>(opts?: {
|
||||||
|
variables?: T['variables']
|
||||||
|
config?: BigcommerceConfig
|
||||||
|
}): Promise<T['data']>
|
||||||
|
|
||||||
|
async function getAllProductPaths<
|
||||||
|
T extends GetAllProductPathsOperation
|
||||||
|
>(opts: {
|
||||||
|
variables?: T['variables']
|
||||||
|
config?: BigcommerceConfig
|
||||||
|
} & OperationOptions): Promise<T['data']>
|
||||||
|
|
||||||
|
async function getAllProductPaths<T extends GetAllProductPathsOperation>({
|
||||||
|
query = getAllProductPathsQuery,
|
||||||
|
variables,
|
||||||
|
config,
|
||||||
|
}: {
|
||||||
|
query?: string
|
||||||
|
variables?: T['variables']
|
||||||
|
config?: BigcommerceConfig
|
||||||
|
} = {}): Promise<T['data']> {
|
||||||
|
config = commerce.getConfig(config)
|
||||||
|
// RecursivePartial forces the method to check for every prop in the data, which is
|
||||||
|
// required in case there's a custom `query`
|
||||||
|
const { data } = await config.fetch<
|
||||||
|
RecursivePartial<GetAllProductPathsQuery>
|
||||||
|
>(query, { variables })
|
||||||
|
const products = data.site?.products?.edges
|
||||||
|
|
||||||
|
return {
|
||||||
|
products: filterEdges(products as RecursiveRequired<typeof products>).map(
|
||||||
|
({ node }) => node
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return getAllProductPaths
|
||||||
|
}
|
@ -1,71 +0,0 @@
|
|||||||
import type {
|
|
||||||
GetAllProductPathsQuery,
|
|
||||||
GetAllProductPathsQueryVariables,
|
|
||||||
} from '../schema'
|
|
||||||
import type { RecursivePartial, RecursiveRequired } from '../api/utils/types'
|
|
||||||
import filterEdges from '../api/utils/filter-edges'
|
|
||||||
import { BigcommerceConfig, getConfig } from '../api'
|
|
||||||
|
|
||||||
export const getAllProductPathsQuery = /* GraphQL */ `
|
|
||||||
query getAllProductPaths($first: Int = 100) {
|
|
||||||
site {
|
|
||||||
products(first: $first) {
|
|
||||||
edges {
|
|
||||||
node {
|
|
||||||
path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
export type ProductPath = NonNullable<
|
|
||||||
NonNullable<GetAllProductPathsQuery['site']['products']['edges']>[0]
|
|
||||||
>
|
|
||||||
|
|
||||||
export type ProductPaths = ProductPath[]
|
|
||||||
|
|
||||||
export type { GetAllProductPathsQueryVariables }
|
|
||||||
|
|
||||||
export type GetAllProductPathsResult<
|
|
||||||
T extends { products: any[] } = { products: ProductPaths }
|
|
||||||
> = T
|
|
||||||
|
|
||||||
async function getAllProductPaths(opts?: {
|
|
||||||
variables?: GetAllProductPathsQueryVariables
|
|
||||||
config?: BigcommerceConfig
|
|
||||||
}): Promise<GetAllProductPathsResult>
|
|
||||||
|
|
||||||
async function getAllProductPaths<
|
|
||||||
T extends { products: any[] },
|
|
||||||
V = any
|
|
||||||
>(opts: {
|
|
||||||
query: string
|
|
||||||
variables?: V
|
|
||||||
config?: BigcommerceConfig
|
|
||||||
}): Promise<GetAllProductPathsResult<T>>
|
|
||||||
|
|
||||||
async function getAllProductPaths({
|
|
||||||
query = getAllProductPathsQuery,
|
|
||||||
variables,
|
|
||||||
config,
|
|
||||||
}: {
|
|
||||||
query?: string
|
|
||||||
variables?: GetAllProductPathsQueryVariables
|
|
||||||
config?: BigcommerceConfig
|
|
||||||
} = {}): Promise<GetAllProductPathsResult> {
|
|
||||||
config = getConfig(config)
|
|
||||||
// RecursivePartial forces the method to check for every prop in the data, which is
|
|
||||||
// required in case there's a custom `query`
|
|
||||||
const { data } = await config.fetch<
|
|
||||||
RecursivePartial<GetAllProductPathsQuery>
|
|
||||||
>(query, { variables })
|
|
||||||
const products = data.site?.products?.edges
|
|
||||||
|
|
||||||
return {
|
|
||||||
products: filterEdges(products as RecursiveRequired<typeof products>),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default getAllProductPaths
|
|
@ -3,6 +3,7 @@ import type { LoginOperation } from '../types/login'
|
|||||||
import type { GetAllPagesOperation, GetPageOperation } from '../types/page'
|
import type { GetAllPagesOperation, GetPageOperation } from '../types/page'
|
||||||
import type { GetSiteInfoOperation } from '../types/site'
|
import type { GetSiteInfoOperation } from '../types/site'
|
||||||
import type { GetCustomerWishlistOperation } from '../types/wishlist'
|
import type { GetCustomerWishlistOperation } from '../types/wishlist'
|
||||||
|
import type { GetAllProductPathsOperation } from '../types/product'
|
||||||
import type { APIProvider, CommerceAPI } from '.'
|
import type { APIProvider, CommerceAPI } from '.'
|
||||||
|
|
||||||
const noop = () => {
|
const noop = () => {
|
||||||
@ -94,6 +95,20 @@ export type Operations<P extends APIProvider> = {
|
|||||||
} & OperationOptions
|
} & OperationOptions
|
||||||
): Promise<T['data']>
|
): Promise<T['data']>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getAllProductPaths: {
|
||||||
|
<T extends GetAllProductPathsOperation>(opts: {
|
||||||
|
variables?: T['variables']
|
||||||
|
config?: P['config']
|
||||||
|
}): Promise<T['data']>
|
||||||
|
|
||||||
|
<T extends GetAllProductPathsOperation>(
|
||||||
|
opts: {
|
||||||
|
variables?: T['variables']
|
||||||
|
config?: P['config']
|
||||||
|
} & OperationOptions
|
||||||
|
): Promise<T['data']>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type APIOperations<P extends APIProvider> = {
|
export type APIOperations<P extends APIProvider> = {
|
||||||
|
@ -65,3 +65,10 @@ export type ProductsSchema<T extends ProductTypes = ProductTypes> = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type GetAllProductPathsOperation<
|
||||||
|
T extends ProductTypes = ProductTypes
|
||||||
|
> = {
|
||||||
|
data: { products: Pick<T['product'], 'path'>[] }
|
||||||
|
variables: { first?: number }
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user