web-src 폴더의 목적 살펴보기 web-src-folder
이 샘플 앱의 web-src 폴더에는 많은 JavaScript 파일과 폴더가 있습니다. 이 폴더는 사용자 인터페이스가 있는 애플리케이션에 사용됩니다. 일부 애플리케이션에서는 이 기능을 사용하지 않습니다. 예를 들어, 외부 인벤토리 관리 시스템과 Commerce 통합에는 프론트엔드 인터페이스와 코드가 필요하지 않을 수 있습니다.
이 비디오는 누구의 것입니까?
web-src
폴더 및 해당 콘텐츠에 대해 학습하는 개발자로서 Adobe App Builder을 사용하여 경험이 제한된 Adobe Commerce을 처음 사용하는 개발자입니다.
비디오 콘텐츠
web-src
폴더의 주요 용도는 무엇입니까?- 일반적으로 포함된 파일 및 폴더
- 샘플 응용 프로그램에서
web-src
폴더와 내부 내용을 사용하는 방법
코드 샘플
web-src/src/components/Orders.js
/*
* Copyright 2023 Adobe
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe and its suppliers, if any. The intellectual
* and technical concepts contained herein are proprietary to Adobe
* and its suppliers and are protected by all applicable intellectual
* property laws, including trade secret and copyright laws.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe.
*/
import {
Content,
Heading,
IllustratedMessage,
TableView,
TableHeader,
TableBody,
Column,
Row,
Cell,
View,
Flex,
ProgressCircle
} from '@adobe/react-spectrum'
import {useCommerceOrders} from '../hooks/useCommerceOrders'
export const Orders = props => {
const {isLoadingCommerceOrders, commerceOrders} = useCommerceOrders(props)
const ordersColumns = [
{name: 'Order Id', uid: 'increment_id'},
{name: 'Status', uid: 'status'},
{name: 'Store Name', uid: 'store_name'},
{name: 'Total Item Count', uid: 'total_item_count'},
{name: 'Total Quantity', uid: 'total_qty_ordered'},
{name: 'Total Due', uid: 'total_due'},
{name: 'Tax', uid: 'tax_amount'},
{name: 'Created At', uid: 'created_at'}
]
function renderEmptyState() {
return (
<IllustratedMessage>
<Content>No data available</Content>
</IllustratedMessage>
)
}
return (
<View>
{isLoadingCommerceOrders ? (
<Flex alignItems="center" justifyContent="center" height="100vh">
<ProgressCircle size="L" aria-label="Loading…" isIndeterminate/>
</Flex>
) : (
<View margin={10}>
<Heading level={1}>Fetched orders from Adobe Commerce</Heading>
<TableView
overflowMode="wrap"
aria-label="orders table"
flex
renderEmptyState={renderEmptyState}
height="static-size-1000"
>
<TableHeader columns={ordersColumns}>
{column => <Column key={column.uid}>{column.name}</Column>}
</TableHeader>
<TableBody items={commerceOrders}>
{order => (
<Row key={order['increment_id']}>{columnKey => <Cell>{order[columnKey]}</Cell>}</Row>
)}
</TableBody>
</TableView>
</View>
)}
</View>
)
}
web-src/src/hooks/useCommerceOrders.js
CAUTION
API 호출을 수행할 때 일종의 searchCriteria가 사용되는지 확인하십시오. 페이지 매김을 사용하는 것도 고려해 볼 수 있습니다. Adobe Commerce의 결과가 너무 크면 Adobe Developer App Builder 용량이 충족되어 파일이 예기치 않게 종료될 수 있습니다. 그 결과 400 오류로 인해 응답 형식이 잘못되었습니다.
예를 들어 Adobe Commerce에서 모든 현재 제품을 요청해야 한다고 가정해 보겠습니다. 결과 URL은
예를 들어 Adobe Commerce에서 모든 현재 제품을 요청해야 한다고 가정해 보겠습니다. 결과 URL은
{{base_url}}rest/V1/products?searchCriteria=all
과(와) 비슷합니다. 반환된 카탈로그의 크기에 따라 App Builder에서 사용하기에는 json이 너무 클 수 있습니다. 대신 페이지 매김을 사용하고 Response is not valid 'message/http'.
을(를) 피하기 위해 몇 가지 요청을 하십시오.아래 예제에서 코드 샘플은 요청을 제한하는 not
입니다. 400 오류를 방지하려면 searchCriteria
을(를) 사용하여 응답 크기를 줄이십시오.
?searchCriteria[filter_groups][0][filters][0][field]=created_at&searchCriteria[filter_groups][0][filters][0][value]=2022-12-01&searchCriteria[filter_groups][0][filters][0][condition_type]=gt
/*
* Copyright 2023 Adobe
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe and its suppliers, if any. The intellectual
* and technical concepts contained herein are proprietary to Adobe
* and its suppliers and are protected by all applicable intellectual
* property laws, including trade secret and copyright laws.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe.
*/
import { useEffect, useState } from 'react'
import { callAction } from '../utils'
export const useCommerceOrders = props => {
const [isLoadingCommerceOrders, setIsLoadingCommerceOrders] = useState(true)
const [commerceOrders, setCommerceOrders] = useState([])
const fetchCommerceOrders = async () => {
const commerceOrdersResponse = await callAction(
props,
'commerce-rest-get',
'orders?searchCriteria=all'
)
setCommerceOrders(commerceOrdersResponse.error ? [] : commerceOrdersResponse.items)
}
useEffect(() => {
fetchCommerceOrders().then(() => setIsLoadingCommerceOrders(false))
}, [])
return { isLoadingCommerceOrders, commerceOrders }
}
App Builder - 첫 번째 앱 관련 페이지 작성
recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f