🔀 merge: branch 'release-stable' of https://github.com/KieIO/grocery-vercel-commerce into checkout

:%s
This commit is contained in:
lytrankieio123
2021-10-22 15:36:04 +07:00
26 changed files with 571 additions and 169 deletions

View File

@@ -11,7 +11,8 @@ import getProduct from './operations/get-product'
import getSiteInfo from './operations/get-site-info'
import login from './operations/login'
import fetchGraphqlApi from './utils/fetch-graphql-api'
import getAllBlogs from './operations/get-all-blogs'
import getFeaturedBlog from './operations/get-featured-blog'
export interface VendureConfig extends CommerceAPIConfig {}
@@ -44,6 +45,8 @@ const operations = {
getProduct,
getAllFacets,
getAllCollections,
getAllBlogs,
getFeaturedBlog
}
export const provider = { config, operations }

View File

@@ -0,0 +1,61 @@
import { OperationContext } from '@commerce/api/operations'
import { Provider, VendureConfig } from '..'
import { GetAllBlogsQuery,BlogList } from '../../schema'
import { getAllBlogsQuery } from '../../utils/queries/get-all-blog-query'
export type BlogVariables = {
excludeBlogIds?: string[],
take?: number,
skip?:number
}
export default function getAllBlogsOperation({
commerce,
}: OperationContext<Provider>) {
async function getAllBlogs(opts?: {
variables?: BlogVariables
config?: Partial<VendureConfig>
preview?: boolean
}): Promise<{ blogs: GetAllBlogsQuery[],totalItems:number }>
async function getAllBlogs({
query = getAllBlogsQuery,
variables: { ...vars } = {},
config: cfg,
}: {
query?: string
variables?: BlogVariables
config?: Partial<VendureConfig>
preview?: boolean
} = {}): Promise<{ blogs: GetAllBlogsQuery[] | any[] ,totalItems?:number }> {
const config = commerce.getConfig(cfg)
const variables = {
excludeBlogIds: vars.excludeBlogIds,
options: {
take: vars.take,
skip: vars.skip,
},
}
const { data } = await config.fetch<GetAllBlogsQuery>(query, {
variables,
})
return {
blogs: data?.blogs?.items?.map((val:BlogList)=>({
id: val.id,
title: val.translations[0]?.title,
imageSrc: val.featuredAsset?.preview ?? null,
slug: val.translations[0]?.slug,
description: val.translations[0]?.description,
isPublish: val.isPublish,
isFeatured: val.isFeatured,
authorName: val.authorName,
authorAvatarAsset : val.authorAvatarAsset?.preview,
createdAt: val.createdAt
})),
totalItems: data?.blogs?.totalItems || null
}
}
return getAllBlogs
}

View File

@@ -0,0 +1,56 @@
import { OperationContext } from '@commerce/api/operations'
import { Provider, VendureConfig } from '..'
import { GetFeaturedBlogQuery,BlogList } from '../../schema'
import { getFeatuedBlogsQuery } from '../../utils/queries/get-featued-query'
export type BlogVariables = {
take?: number,
skip?:number
}
export default function getFeaturedBlogOperation({
commerce,
}: OperationContext<Provider>) {
async function getFeaturedBlog(opts?: {
variables?: BlogVariables
config?: Partial<VendureConfig>
preview?: boolean
}): Promise<{ featuredBlogs: GetFeaturedBlogQuery[],totalItems:number }>
async function getFeaturedBlog({
query = getFeatuedBlogsQuery,
variables: { ...vars } = {},
config: cfg,
}: {
query?: string
variables?: BlogVariables
config?: Partial<VendureConfig>
preview?: boolean
} = {}): Promise<{ featuredBlogs: GetFeaturedBlogQuery[] | any[] ,totalItems?:number }> {
const config = commerce.getConfig(cfg)
const variables = {
options: {
take: vars.take,
},
}
const { data } = await config.fetch<GetFeaturedBlogQuery>(query, {
variables,
})
return {
featuredBlogs: data?.featuredBlogs?.items?.map((val:BlogList)=>({
id: val.id,
title: val.translations[0]?.title,
imageSrc: val.featuredAsset?.preview ?? null,
slug: val.translations[0]?.slug,
description: val.translations[0]?.description,
isPublish: val.isPublish,
isFeatured: val.isFeatured,
authorName: val.authorName,
authorAvatarAsset : val.authorAvatarAsset?.preview,
createdAt: val.createdAt
}))
}
}
return getFeaturedBlog
}

View File

@@ -2379,6 +2379,55 @@ export type Product = Node & {
customFields?: Maybe<Scalars['JSON']>
}
export type BlogList = Node &{
id: ID!
createdAt: DateTime!
updatedAt: DateTime!
featuredAsset?: Maybe<Asset>
isPublish:Boolean
translations: Array<BlogTranslation>
authorName: Scalars['String']
authorAvatarAsset:Asset
relevantProducts: Product
isFeatured: Boolean
}
export type BlogTranslation = {
__typename?: 'BlogTranslation'
id: Scalars['ID']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
languageCode: LanguageCode
title: Scalars['String']
slug: Scalars['String']
description: Scalars['String']
content: Scalars['String']
}
export type GetAllBlogsQuery = PaginatedList & {
blogs: { __typename?: 'BlogList' } & {
items: Array<{ __typename?: 'Blog' } & BlogList!>,
'totalItems'
}
}
export type GetFeaturedBlogQuery = PaginatedList & {
id:string,
featuredBlogs: { __typename?: 'BlogList' } & {
items: Array<{ __typename?: 'Blog' } & BlogList!>,
'totalItems'
}
}
export type QueryBlogs = {
excludeBlogIds:Array,
options: BlogListOptions
}
export type BlogListOptions = {
skip?: Maybe<Scalars['Int']>
take?: Maybe<Scalars['Int']>
}
export type ProductTranslation = {
__typename?: 'ProductTranslation'
id: Scalars['ID']
@@ -3551,3 +3600,4 @@ export type SearchQuery = { __typename?: 'Query' } & {
'totalItems'
> & { items: Array<{ __typename?: 'SearchResult' } & SearchResultFragment> }
}

View File

@@ -1,6 +1,6 @@
import { Cart, CartCheckout } from '@commerce/types/cart'
import { Product, ProductCard } from '@commerce/types/product'
import { CartFragment, Favorite, SearchResultFragment, ShippingMethod } from '../schema'
import { CartFragment, Favorite, SearchResultFragment, ShippingMethod, BlogList } from '../schema'
export function normalizeSearchResult(item: SearchResultFragment): ProductCard {
return {
@@ -140,4 +140,19 @@ export function normalizeProductCard(product: Product): ProductCard {
facetValueIds: product.facetValueIds,
collectionIds: product.collectionIds,
}
}
export function normalizeBlogList(blog: BlogList) {
return {
id: blog.id,
title: blog.translations[0]?.title,
imageSrc: blog.featuredAsset?.preview ?? null,
slug: blog.translations[0]?.slug,
description: blog.translations[0]?.description,
isPublish: blog.isPublish,
isFeatured:blog.isFeatured,
authorName: blog.authorName,
authorAvatarAsset : blog.authorAvatarAsset?.preview,
createdAt: blog.createdAt
}
}

View File

@@ -0,0 +1,26 @@
export const getAllBlogsQuery = /* GraphQL */ `
query GetBlogs($excludeBlogIds: [ID]!, $options: BlogListOptions) {
blogs(excludeBlogIds: $excludeBlogIds, options: $options) {
totalItems
items {
id
isPublish
isFeatured
authorName
createdAt
authorAvatarAsset{
preview
}
featuredAsset {
preview
}
translations {
title
slug
description
content
}
}
}
}
`

View File

@@ -0,0 +1,25 @@
export const getFeatuedBlogsQuery = /* GraphQL */ `
query GetFeaturedBlogs($options: BlogListOptions) {
featuredBlogs( options: $options){
items {
id
isPublish
isFeatured
authorName
createdAt
authorAvatarAsset{
preview
}
featuredAsset {
preview
}
translations {
title
slug
description
content
}
}
}
}
`