mirror of
https://github.com/vercel/commerce.git
synced 2025-07-04 04:01:21 +00:00
Initial commit related to getAllPages
This commit is contained in:
parent
9e92abdda0
commit
bb285ec67c
@ -1,6 +1,6 @@
|
||||
import type { CommerceAPI, CommerceAPIConfig } from '@commerce/api'
|
||||
import { getCommerceApi as commerceApi } from '@commerce/api'
|
||||
import createFetcher from './utils/fetch-local'
|
||||
import createFetchGraphqlApi from "../api/utils/fetch-graphql-api"
|
||||
|
||||
import getAllPages from './operations/get-all-pages'
|
||||
import getPage from './operations/get-page'
|
||||
@ -10,14 +10,14 @@ import getAllProductPaths from './operations/get-all-product-paths'
|
||||
import getAllProducts from './operations/get-all-products'
|
||||
import getProduct from './operations/get-product'
|
||||
|
||||
export interface KiboCommerceConfig extends CommerceAPIConfig {}
|
||||
export interface KiboCommerceConfig extends CommerceAPIConfig { }
|
||||
const config: KiboCommerceConfig = {
|
||||
commerceUrl: process.env.KIBO_API_URL || '',
|
||||
apiToken: process.env.KIBO_API_TOKEN || '',
|
||||
cartCookie: process.env.KIBO_CART_COOKIE || '',
|
||||
customerCookie: process.env.KIBO_CUSTOMER_COOKIE || '',
|
||||
cartCookieMaxAge: 2592000,
|
||||
fetch: createFetcher(() => getCommerceApi().getConfig()),
|
||||
fetch: createFetchGraphqlApi(() => getCommerceApi().getConfig()),
|
||||
}
|
||||
|
||||
const operations = {
|
||||
@ -35,7 +35,7 @@ export const provider = { config, operations }
|
||||
export type KiboCommerceProvider = typeof provider
|
||||
export type KiboCommerceAPI<
|
||||
P extends KiboCommerceProvider = KiboCommerceProvider
|
||||
> = CommerceAPI<P | any>
|
||||
> = CommerceAPI<P | any>
|
||||
|
||||
export function getCommerceApi<P extends KiboCommerceProvider>(
|
||||
customProvider: P = provider as any
|
||||
|
@ -1,19 +1,43 @@
|
||||
export type Page = { url: string }
|
||||
export type GetAllPagesResult = { pages: Page[] }
|
||||
import type { OperationContext } from '@commerce/api/operations'
|
||||
// import { QueryPagesArgs, PageCountableEdge } from '../../schema'
|
||||
// import type { SaleorConfig, Provider } from '..'
|
||||
// import * as Query from '../../utils/queries'
|
||||
import type { KiboCommerceConfig } from '../index'
|
||||
import { documentListDocumentsQuery } from '../queries/getDocumentListDocuments'
|
||||
|
||||
export default function getAllPagesOperation() {
|
||||
function getAllPages({
|
||||
export type Page = any
|
||||
|
||||
export type GetAllPagesResult<
|
||||
T extends { pages: any[] } = { pages: Page[] }
|
||||
> = T
|
||||
|
||||
export default function getAllPagesOperation({
|
||||
commerce,
|
||||
}: OperationContext<any>) {
|
||||
|
||||
async function getAllPages({
|
||||
query = documentListDocumentsQuery,
|
||||
config,
|
||||
preview,
|
||||
variables,
|
||||
}: {
|
||||
url?: string
|
||||
config?: Partial<KiboCommerceConfig>
|
||||
variables?: any
|
||||
preview?: boolean
|
||||
}): Promise<GetAllPagesResult> {
|
||||
return Promise.resolve({
|
||||
pages: [],
|
||||
})
|
||||
query?: string
|
||||
} = {}): Promise<GetAllPagesResult> {
|
||||
const cfg = commerce.getConfig(config)
|
||||
const { data } = await cfg.fetch(query);
|
||||
|
||||
const pages = data.documentListDocuments.items.map((page: any) => {
|
||||
return {
|
||||
name: page.name.charAt(0).toUpperCase() + page.name.slice(1),
|
||||
url: page.properties.url.split('/')[1],
|
||||
}
|
||||
});
|
||||
|
||||
return { pages }
|
||||
}
|
||||
|
||||
return getAllPages
|
||||
}
|
||||
}
|
@ -1,13 +1,54 @@
|
||||
export type Page = any
|
||||
export type GetPageResult = { page?: Page }
|
||||
import type {
|
||||
OperationContext,
|
||||
OperationOptions,
|
||||
} from '@commerce/api/operations'
|
||||
// import type { GetPageOperation, Page } from '../../types/page'
|
||||
// import type { RecursivePartial, RecursiveRequired } from '../utils/types'
|
||||
import type { KiboCommerceConfig, KiboCommerceProvider } from '..'
|
||||
import { normalizePage } from '../../../bigcommerce/lib/normalize'
|
||||
|
||||
export type PageVariables = {
|
||||
id: number
|
||||
}
|
||||
export default function getPageOperation({
|
||||
commerce,
|
||||
}: OperationContext<KiboCommerceProvider>) {
|
||||
async function getPage<T extends any>(opts: {
|
||||
variables: any
|
||||
config?: Partial<KiboCommerceConfig>
|
||||
preview?: boolean
|
||||
}): Promise<any>
|
||||
|
||||
export default function getPageOperation() {
|
||||
function getPage(): Promise<GetPageResult> {
|
||||
return Promise.resolve({})
|
||||
async function getPage<T extends any>(
|
||||
opts: {
|
||||
variables: any
|
||||
config?: Partial<KiboCommerceConfig>
|
||||
preview?: boolean
|
||||
} & OperationOptions
|
||||
): Promise<any>
|
||||
|
||||
async function getPage<T extends any>({
|
||||
url,
|
||||
variables,
|
||||
config,
|
||||
preview,
|
||||
}: {
|
||||
url?: string
|
||||
variables: any
|
||||
config?: Partial<KiboCommerceConfig>
|
||||
preview?: boolean
|
||||
}): Promise<any> {
|
||||
// RecursivePartial forces the method to check for every prop in the data, which is
|
||||
// required in case there's a custom `url`
|
||||
const cfg = commerce.getConfig(config)
|
||||
const { data } = await cfg.fetch<
|
||||
any
|
||||
>(url || `/v3/content/pages?id=${variables.id}&include=body`)
|
||||
const firstPage = data?.[0]
|
||||
const page = firstPage as any
|
||||
|
||||
if (preview || page?.is_visible) {
|
||||
return { page: normalizePage(page as any) }
|
||||
}
|
||||
return {}
|
||||
}
|
||||
|
||||
return getPage
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
export const documentListDocumentsQuery = /* GraphQL */`
|
||||
query {
|
||||
documentListDocuments(documentListName:"siteSnippets@mozu"){
|
||||
items {
|
||||
id
|
||||
name
|
||||
listFQN
|
||||
properties
|
||||
}
|
||||
}
|
||||
}`;
|
36
framework/kibocommerce/api/utils/fetch-graphql-api.ts
Normal file
36
framework/kibocommerce/api/utils/fetch-graphql-api.ts
Normal file
@ -0,0 +1,36 @@
|
||||
import { FetcherError } from '@commerce/utils/errors'
|
||||
import type { GraphQLFetcher } from '@commerce/api'
|
||||
import type { KiboCommerceConfig } from '../index'
|
||||
import fetch from './fetch'
|
||||
|
||||
const fetchGraphqlApi: (getConfig: () => KiboCommerceConfig) => GraphQLFetcher =
|
||||
(getConfig) =>
|
||||
async (query: string, { variables, preview } = {}, fetchOptions) => {
|
||||
// log.warn(query)
|
||||
const config = getConfig()
|
||||
const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), {
|
||||
...fetchOptions,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${config.apiToken}`,
|
||||
...fetchOptions?.headers,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query,
|
||||
variables,
|
||||
}),
|
||||
})
|
||||
|
||||
const json = await res.json()
|
||||
if (json.errors) {
|
||||
throw new FetcherError({
|
||||
errors: json.errors ?? [{ message: 'Failed to fetch KiboCommerce API' }],
|
||||
status: res.status,
|
||||
})
|
||||
}
|
||||
|
||||
return { data: json.data, res }
|
||||
}
|
||||
|
||||
export default fetchGraphqlApi
|
Loading…
x
Reference in New Issue
Block a user