mirror of
https://github.com/vercel/commerce.git
synced 2025-07-04 20:21: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 type { CommerceAPI, CommerceAPIConfig } from '@commerce/api'
|
||||||
import { getCommerceApi as commerceApi } 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 getAllPages from './operations/get-all-pages'
|
||||||
import getPage from './operations/get-page'
|
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 getAllProducts from './operations/get-all-products'
|
||||||
import getProduct from './operations/get-product'
|
import getProduct from './operations/get-product'
|
||||||
|
|
||||||
export interface KiboCommerceConfig extends CommerceAPIConfig {}
|
export interface KiboCommerceConfig extends CommerceAPIConfig { }
|
||||||
const config: KiboCommerceConfig = {
|
const config: KiboCommerceConfig = {
|
||||||
commerceUrl: process.env.KIBO_API_URL || '',
|
commerceUrl: process.env.KIBO_API_URL || '',
|
||||||
apiToken: process.env.KIBO_API_TOKEN || '',
|
apiToken: process.env.KIBO_API_TOKEN || '',
|
||||||
cartCookie: process.env.KIBO_CART_COOKIE || '',
|
cartCookie: process.env.KIBO_CART_COOKIE || '',
|
||||||
customerCookie: process.env.KIBO_CUSTOMER_COOKIE || '',
|
customerCookie: process.env.KIBO_CUSTOMER_COOKIE || '',
|
||||||
cartCookieMaxAge: 2592000,
|
cartCookieMaxAge: 2592000,
|
||||||
fetch: createFetcher(() => getCommerceApi().getConfig()),
|
fetch: createFetchGraphqlApi(() => getCommerceApi().getConfig()),
|
||||||
}
|
}
|
||||||
|
|
||||||
const operations = {
|
const operations = {
|
||||||
@ -35,7 +35,7 @@ export const provider = { config, operations }
|
|||||||
export type KiboCommerceProvider = typeof provider
|
export type KiboCommerceProvider = typeof provider
|
||||||
export type KiboCommerceAPI<
|
export type KiboCommerceAPI<
|
||||||
P extends KiboCommerceProvider = KiboCommerceProvider
|
P extends KiboCommerceProvider = KiboCommerceProvider
|
||||||
> = CommerceAPI<P | any>
|
> = CommerceAPI<P | any>
|
||||||
|
|
||||||
export function getCommerceApi<P extends KiboCommerceProvider>(
|
export function getCommerceApi<P extends KiboCommerceProvider>(
|
||||||
customProvider: P = provider as any
|
customProvider: P = provider as any
|
||||||
|
@ -1,19 +1,43 @@
|
|||||||
export type Page = { url: string }
|
import type { OperationContext } from '@commerce/api/operations'
|
||||||
export type GetAllPagesResult = { pages: Page[] }
|
// import { QueryPagesArgs, PageCountableEdge } from '../../schema'
|
||||||
|
// import type { SaleorConfig, Provider } from '..'
|
||||||
|
// import * as Query from '../../utils/queries'
|
||||||
import type { KiboCommerceConfig } from '../index'
|
import type { KiboCommerceConfig } from '../index'
|
||||||
|
import { documentListDocumentsQuery } from '../queries/getDocumentListDocuments'
|
||||||
|
|
||||||
export default function getAllPagesOperation() {
|
export type Page = any
|
||||||
function getAllPages({
|
|
||||||
|
export type GetAllPagesResult<
|
||||||
|
T extends { pages: any[] } = { pages: Page[] }
|
||||||
|
> = T
|
||||||
|
|
||||||
|
export default function getAllPagesOperation({
|
||||||
|
commerce,
|
||||||
|
}: OperationContext<any>) {
|
||||||
|
|
||||||
|
async function getAllPages({
|
||||||
|
query = documentListDocumentsQuery,
|
||||||
config,
|
config,
|
||||||
preview,
|
variables,
|
||||||
}: {
|
}: {
|
||||||
url?: string
|
url?: string
|
||||||
config?: Partial<KiboCommerceConfig>
|
config?: Partial<KiboCommerceConfig>
|
||||||
|
variables?: any
|
||||||
preview?: boolean
|
preview?: boolean
|
||||||
}): Promise<GetAllPagesResult> {
|
query?: string
|
||||||
return Promise.resolve({
|
} = {}): Promise<GetAllPagesResult> {
|
||||||
pages: [],
|
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
|
return getAllPages
|
||||||
}
|
}
|
@ -1,13 +1,54 @@
|
|||||||
export type Page = any
|
import type {
|
||||||
export type GetPageResult = { page?: Page }
|
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 = {
|
export default function getPageOperation({
|
||||||
id: number
|
commerce,
|
||||||
}
|
}: OperationContext<KiboCommerceProvider>) {
|
||||||
|
async function getPage<T extends any>(opts: {
|
||||||
|
variables: any
|
||||||
|
config?: Partial<KiboCommerceConfig>
|
||||||
|
preview?: boolean
|
||||||
|
}): Promise<any>
|
||||||
|
|
||||||
export default function getPageOperation() {
|
async function getPage<T extends any>(
|
||||||
function getPage(): Promise<GetPageResult> {
|
opts: {
|
||||||
return Promise.resolve({})
|
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
|
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