Initial commit related to getAllPages

This commit is contained in:
amolnadagonde 2021-08-30 19:02:05 +05:30
parent 9e92abdda0
commit bb285ec67c
5 changed files with 135 additions and 23 deletions

View File

@ -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'
@ -17,7 +17,7 @@ const config: KiboCommerceConfig = {
cartCookie: process.env.KIBO_CART_COOKIE || '',
customerCookie: process.env.KIBO_CUSTOMER_COOKIE || '',
cartCookieMaxAge: 2592000,
fetch: createFetcher(() => getCommerceApi().getConfig()),
fetch: createFetchGraphqlApi(() => getCommerceApi().getConfig()),
}
const operations = {

View File

@ -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
}

View File

@ -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>
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 {}
}
export default function getPageOperation() {
function getPage(): Promise<GetPageResult> {
return Promise.resolve({})
}
return getPage
}

View File

@ -0,0 +1,11 @@
export const documentListDocumentsQuery = /* GraphQL */`
query {
documentListDocuments(documentListName:"siteSnippets@mozu"){
items {
id
name
listFQN
properties
}
}
}`;

View 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