- {Object.entries(grouped).map(([brand, group]) => {
- const allChecked = group.every((i) => i.selected);
- const handleBrandToggle = () => onToggleBrand(brand, !allChecked);
+ items.forEach((item) => {
+ if (item.selected !== next) onToggleItem(item.id);
+ });
+ };
- return (
-
-
-
- {brand}
-
+ return (
+
+
-
- {group.map((item) => (
-
- ))}
-
-
- );
- })}
+ {Object.entries(grouped).map(([brand, group]) => (
+
item.selected)}
+ onToggleBrand={onToggleBrand}
+ onToggleItem={onToggleItem}
+ onChangeQty={onChangeQty}
+ onDelete={onDelete}
+ />
+ ))}
);
}
diff --git a/src/components/organisms/Order/DeliveryInfoSection/DeliveryInfoSection.tsx b/src/components/organisms/Order/DeliveryInfoSection/DeliveryInfoSection.tsx
new file mode 100644
index 0000000..6f7253d
--- /dev/null
+++ b/src/components/organisms/Order/DeliveryInfoSection/DeliveryInfoSection.tsx
@@ -0,0 +1,166 @@
+import { AddressSearchModal } from "../../../molecules";
+import styles from "../OrderPage.module.css";
+
+type DeliveryInfo = {
+ name: string;
+ recipient: string;
+ phone: string;
+ address: string;
+ detailAddress: string;
+ deliveryRequest: string;
+};
+
+type AddressModalProps = {
+ isOpen: boolean;
+ keyword: string;
+ results: Array<{ id: number; address: string; detail: string }>;
+ isSearching: boolean;
+ hasSearched: boolean;
+ onKeywordChange: (value: string) => void;
+ onSearch: () => void;
+ onSelect: (address: string) => void;
+ onClose: () => void;
+ onOpen: () => void;
+ searchInputId: string;
+};
+
+type DeliveryInfoSectionProps = {
+ info: DeliveryInfo;
+ onChange: (field: keyof DeliveryInfo, value: string) => void;
+ requestOptions: string[];
+ ids: {
+ name: string;
+ recipient: string;
+ phone: string;
+ address: string;
+ detail: string;
+ request: string;
+ };
+ addressModal: AddressModalProps;
+};
+
+export default function DeliveryInfoSection({
+ info,
+ onChange,
+ requestOptions,
+ ids,
+ addressModal,
+}: DeliveryInfoSectionProps) {
+ return (
+
+ 배송지 정보
+
+
+
+
+ onChange("name", event.target.value)}
+ placeholder="예) 우리 집"
+ />
+
+
+
+
+ onChange("recipient", event.target.value)}
+ placeholder="받으실 분의 이름"
+ />
+
+
+
+
+ onChange("phone", event.target.value)}
+ placeholder="010-0000-0000"
+ />
+
+
+
+
+
+ onChange("address", event.target.value)}
+ placeholder="주소를 검색해주세요"
+ />
+
+
+
+
+
+
+ onChange("detailAddress", event.target.value)}
+ placeholder="상세주소"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/organisms/Order/DiscountSection/DiscountSection.tsx b/src/components/organisms/Order/DiscountSection/DiscountSection.tsx
new file mode 100644
index 0000000..b59257a
--- /dev/null
+++ b/src/components/organisms/Order/DiscountSection/DiscountSection.tsx
@@ -0,0 +1,119 @@
+import type { Coupon } from "../../../../types/order";
+import { CouponModal } from "../../../molecules";
+import styles from "../OrderPage.module.css";
+
+type DiscountSectionProps = {
+ ids: {
+ couponSelect: string;
+ pointInput: string;
+ };
+ coupons: Coupon[];
+ selectedCouponId: string;
+ onSelectCoupon: (couponId: string) => void;
+ onApplyCoupon: (couponId: string) => void;
+ onOpenCouponModal: () => void;
+ couponModal: {
+ isOpen: boolean;
+ onClose: () => void;
+ };
+ pointsUsed: number;
+ onChangePoints: (value: number) => void;
+ onApplyAllPoints: () => void;
+ availablePoints: number;
+ minPointUse: number;
+ formatCurrency: (value: number) => string;
+};
+
+export default function DiscountSection({
+ ids,
+ coupons,
+ selectedCouponId,
+ onSelectCoupon,
+ onApplyCoupon,
+ onOpenCouponModal,
+ couponModal,
+ pointsUsed,
+ onChangePoints,
+ onApplyAllPoints,
+ availablePoints,
+ minPointUse,
+ formatCurrency,
+}: DiscountSectionProps) {
+ return (
+
+ 할인 적용
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onChangePoints(Number(event.target.value || 0))
+ }
+ placeholder="사용할 포인트 입력"
+ />
+
+
+
+ 보유 포인트 {formatCurrency(availablePoints)}
+ {minPointUse > 0
+ ? ` / 최소 ${formatCurrency(minPointUse)} 이상 사용`
+ : ""}
+
+
+
+
+
+ );
+}
diff --git a/src/components/organisms/Order/OrderFixedBar/OrderFixedBar.tsx b/src/components/organisms/Order/OrderFixedBar/OrderFixedBar.tsx
new file mode 100644
index 0000000..971a80f
--- /dev/null
+++ b/src/components/organisms/Order/OrderFixedBar/OrderFixedBar.tsx
@@ -0,0 +1,41 @@
+import styles from "../OrderPage.module.css";
+
+type OrderFixedBarProps = {
+ itemCount: number;
+ finalAmount: number;
+ disabled: boolean;
+ onSubmit: () => void;
+ formatCurrency: (value: number) => string;
+ buttonLabel?: string;
+ isProcessing?: boolean;
+};
+
+export default function OrderFixedBar({
+ itemCount,
+ finalAmount,
+ disabled,
+ onSubmit,
+ formatCurrency,
+ buttonLabel,
+ isProcessing = false,
+}: OrderFixedBarProps) {
+ const label = buttonLabel ?? `${formatCurrency(finalAmount)} 결제하기`;
+ return (
+
+
+
+
총 {itemCount}개 상품
+
{formatCurrency(finalAmount)}
+
+
+
+
+ );
+}
diff --git a/src/components/organisms/Order/OrderHeader/OrderHeader.tsx b/src/components/organisms/Order/OrderHeader/OrderHeader.tsx
new file mode 100644
index 0000000..5347128
--- /dev/null
+++ b/src/components/organisms/Order/OrderHeader/OrderHeader.tsx
@@ -0,0 +1,24 @@
+import styles from "../OrderPage.module.css";
+
+type OrderHeaderProps = {
+ title: string;
+ onBack: () => void;
+};
+
+export default function OrderHeader({ title, onBack }: OrderHeaderProps) {
+ return (
+
+ );
+}
diff --git a/src/components/organisms/Order/OrderItemsSection/OrderItemsSection.tsx b/src/components/organisms/Order/OrderItemsSection/OrderItemsSection.tsx
new file mode 100644
index 0000000..48d24b3
--- /dev/null
+++ b/src/components/organisms/Order/OrderItemsSection/OrderItemsSection.tsx
@@ -0,0 +1,79 @@
+import { useState } from "react";
+import type { OrderItem } from "../../../../types/order";
+import styles from "../OrderPage.module.css";
+
+type OrderItemsSectionProps = {
+ items: OrderItem[];
+ formatCurrency: (value: number) => string;
+ defaultOpen?: boolean;
+ loading?: boolean;
+ errorMessage?: string | null;
+};
+
+export default function OrderItemsSection({
+ items,
+ formatCurrency,
+ defaultOpen = false,
+ loading = false,
+ errorMessage = null,
+}: OrderItemsSectionProps) {
+ const [open, setOpen] = useState(defaultOpen);
+ const hasItems = items.length > 0;
+
+ return (
+
+
+
+ {loading && (
+ 주문 상품을 불러오는 중입니다.
+ )}
+
+ {!loading && errorMessage && (
+ {errorMessage}
+ )}
+
+ {open && !loading && hasItems && (
+
+ {items.map((item, index) => (
+
+
+

+
+
+
{item.brand}
+
{item.name}
+
+ 옵션 {item.size} | 수량: {item.quantity}개
+
+
+ {formatCurrency(item.price * item.quantity)}
+
+
+ {index < items.length - 1 && (
+
+ )}
+
+ ))}
+
+ )}
+
+ {!loading && !errorMessage && !hasItems && open && (
+ 주문 상품 정보가 없습니다.
+ )}
+
+ );
+}
diff --git a/src/components/organisms/Order/OrderPage.module.css b/src/components/organisms/Order/OrderPage.module.css
new file mode 100644
index 0000000..4ae1545
--- /dev/null
+++ b/src/components/organisms/Order/OrderPage.module.css
@@ -0,0 +1,581 @@
+:root {
+ --black: #111;
+ --line: #eaeaea;
+ --muted: #777;
+ --minus: #e60023;
+ --green: #11a55a;
+ --card: #fff;
+ --bg: #fff;
+}
+* {
+ box-sizing: border-box;
+}
+button {
+ border: 0;
+ background: none;
+ padding: 0;
+ cursor: pointer;
+}
+img {
+ display: block;
+}
+
+/* Page */
+.pageWrap {
+ min-height: 100vh;
+ background: var(--bg);
+ color: #111;
+ font-family:
+ "Pretendard",
+ system-ui,
+ -apple-system,
+ Segoe UI,
+ Roboto,
+ sans-serif;
+}
+
+/* Header */
+.header {
+ position: sticky;
+ top: 0;
+ z-index: 40;
+ background: #fff;
+ border-bottom: 1px solid var(--line);
+}
+.headerInner {
+ max-width: 960px;
+ margin: 0 auto;
+ padding: 0 16px;
+ height: 56px;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+.backBtn {
+ width: 36px;
+ height: 36px;
+ border-radius: 8px;
+ display: grid;
+ place-items: center;
+}
+.backBtn:hover {
+ background: #f6f6f6;
+}
+.iconArrow {
+ width: 8px;
+ height: 8px;
+ border-right: 2px solid #111;
+ border-bottom: 2px solid #111;
+ transform: rotate(135deg);
+}
+.headerTitle {
+ font-size: 18px;
+ font-weight: 600;
+}
+
+.main {
+ max-width: 960px;
+ margin: 0 auto;
+ padding: 24px 16px 120px;
+}
+
+/* Card */
+.card {
+ background: var(--card);
+ border: 1px solid var(--line);
+ border-radius: 12px;
+ padding: 16px;
+ margin-bottom: 16px;
+}
+.cardTitle {
+ font-size: 17px;
+ font-weight: 700;
+}
+.cardTitleRow {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+.rowDivider {
+ height: 1px;
+ background: #eee;
+ margin: 8px 0 0;
+}
+
+.itemsStack {
+ display: grid;
+ gap: 12px;
+ margin-top: 12px;
+}
+.itemRow {
+ padding-bottom: 8px;
+}
+.thumbBox {
+ width: 64px;
+ height: 64px;
+ overflow: hidden;
+ border-radius: 10px;
+ background: #f2f2f2;
+ float: left;
+ margin-right: 12px;
+}
+.thumb {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+.itemMeta {
+ overflow: hidden;
+}
+.itemBrand {
+ font-size: 12px;
+ color: #666;
+}
+.itemName {
+ font-weight: 600;
+}
+.itemOpt {
+ font-size: 13px;
+ color: #777;
+ margin: 2px 0 4px;
+}
+.itemPrice {
+ font-weight: 800;
+}
+
+/* Chevrons */
+.chev {
+ width: 10px;
+ height: 10px;
+ border-right: 2px solid #999;
+ border-bottom: 2px solid #999;
+}
+.chevDown {
+ transform: rotate(45deg);
+}
+.chevUp {
+ transform: rotate(-135deg);
+}
+
+/* Forms */
+.formStack {
+ display: grid;
+ gap: 12px;
+ margin-top: 12px;
+}
+.formItem {
+ display: grid;
+ gap: 8px;
+}
+.label {
+ font-size: 14px;
+ font-weight: 600;
+ color: #222;
+}
+.req {
+ color: var(--minus);
+}
+
+.row {
+ display: grid;
+ grid-template-columns: 1fr 120px;
+ gap: 8px;
+}
+@media (max-width: 420px) {
+ .row {
+ grid-template-columns: 1fr;
+ }
+}
+
+.input,
+.select {
+ width: 100%;
+ border: 1px solid #d9d9d9;
+ border-radius: 10px;
+ padding: 12px 14px;
+ font-size: 14px;
+ outline: none;
+ background: #fff;
+}
+.input:focus,
+.select:focus {
+ border-color: #111;
+ box-shadow: 0 0 0 3px rgba(17, 17, 17, 0.08);
+}
+
+.selectWrap {
+ position: relative;
+}
+.select {
+ appearance: none;
+}
+.chevDownSmall {
+ position: absolute;
+ right: 14px;
+ top: 50%;
+ width: 8px;
+ height: 8px;
+ border-right: 2px solid #999;
+ border-bottom: 2px solid #999;
+ transform: translateY(-50%) rotate(45deg);
+}
+
+/* Buttons */
+.btnGhost {
+ border: 1px solid #d9d9d9;
+ border-radius: 10px;
+ padding: 12px;
+ font-weight: 600;
+ background: #fff;
+}
+.btnGhost:hover {
+ background: #f7f7f7;
+}
+.btnPrimary {
+ background: #111;
+ color: #fff;
+ border-radius: 10px;
+ padding: 12px 16px;
+ font-weight: 700;
+}
+.btnPrimary:hover {
+ filter: brightness(0.96);
+}
+
+/* Same as delivery */
+.sameRow {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-top: 4px;
+ margin-bottom: 8px;
+}
+.checkSquare {
+ width: 18px;
+ height: 18px;
+ border: 2px solid #cfcfcf;
+ border-radius: 4px;
+ position: relative;
+}
+.checkOn {
+ border-color: #111;
+ background: #111;
+}
+.checkOn::after {
+ content: "";
+ position: absolute;
+ left: 4px;
+ top: 0px;
+ width: 6px;
+ height: 12px;
+ border-right: 2px solid #fff;
+ border-bottom: 2px solid #fff;
+ transform: rotate(45deg);
+}
+.sameLabel {
+ font-size: 14px;
+}
+
+/* Modal */
+.modalBackdrop {
+ position: fixed;
+ inset: 0;
+ background: rgba(0, 0, 0, 0.5);
+ display: grid;
+ place-items: center;
+ z-index: 60;
+}
+.modalBox {
+ width: 100%;
+ max-width: 560px;
+ background: #fff;
+ border-radius: 14px;
+ padding: 16px;
+}
+.modalHeader {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 12px;
+}
+.modalTitle {
+ font-size: 17px;
+ font-weight: 700;
+}
+.iconBtn {
+ width: 36px;
+ height: 36px;
+ border-radius: 8px;
+ display: grid;
+ place-items: center;
+}
+.iconBtn:hover {
+ background: #f6f6f6;
+}
+.iconClose {
+ width: 14px;
+ height: 14px;
+ position: relative;
+}
+.iconClose::before,
+.iconClose::after {
+ content: "";
+ position: absolute;
+ left: 6px;
+ top: 0;
+ width: 2px;
+ height: 14px;
+ background: #555;
+ border-radius: 1px;
+}
+.iconClose::before {
+ transform: rotate(45deg);
+}
+.iconClose::after {
+ transform: rotate(-45deg);
+}
+
+.searchRow {
+ display: grid;
+ grid-template-columns: 1fr 100px;
+ gap: 8px;
+ margin-bottom: 12px;
+}
+.resultList {
+ max-height: 380px;
+ overflow: auto;
+}
+.addrItem {
+ width: 100%;
+ text-align: left;
+ border: 1px solid #e5e5e5;
+ border-radius: 10px;
+ padding: 12px;
+ margin-bottom: 8px;
+}
+.addrItem:hover {
+ border-color: #bdbdbd;
+}
+.addrLine {
+ font-weight: 600;
+ margin-bottom: 2px;
+}
+.addrDetail {
+ font-size: 12px;
+ color: #666;
+}
+.centerBox {
+ display: grid;
+ place-items: center;
+ padding: 24px 0;
+}
+.centerMuted {
+ text-align: center;
+ padding: 24px 0;
+ color: #777;
+}
+
+/* Spinner */
+.spinner {
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+ border: 3px solid #111;
+ border-top-color: transparent;
+ animation: spin 0.8s linear infinite;
+}
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+/* Coupon list */
+.couponList {
+ display: grid;
+ gap: 10px;
+ margin-top: 8px;
+ max-height: 60vh;
+ overflow: auto;
+}
+.couponItem {
+ text-align: left;
+ border: 2px solid #e5e5e5;
+ border-radius: 12px;
+ padding: 12px;
+ background: #fff;
+}
+.couponItem:hover {
+ border-color: #d8d8d8;
+}
+.couponOn {
+ border-color: #111;
+ background: #fafafa;
+}
+.couponHead {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 6px;
+}
+.couponName {
+ font-weight: 700;
+}
+.couponBadge {
+ font-size: 13px;
+ font-weight: 700;
+ color: var(--minus);
+}
+.couponDesc {
+ font-size: 13px;
+ color: #666;
+ margin-bottom: 6px;
+}
+.couponMeta {
+ font-size: 12px;
+ color: #8b8b8b;
+ display: grid;
+ gap: 2px;
+}
+.modalActions {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 8px;
+ margin-top: 12px;
+}
+
+/* Summary */
+.summaryCard {
+ background: #f8f8f8;
+ border: 1px solid #eee;
+ border-radius: 12px;
+ padding: 16px;
+}
+.summaryRows {
+ display: grid;
+ gap: 8px;
+ margin-top: 8px;
+}
+.summaryRow {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+.summaryTotal {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-top: 8px;
+ font-size: 18px;
+ font-weight: 800;
+}
+.muted {
+ color: #666;
+}
+.bold {
+ font-weight: 700;
+}
+.minus {
+ color: var(--minus);
+ font-weight: 700;
+}
+.free {
+ color: var(--green);
+ font-weight: 700;
+}
+
+/* Fixed bottom bar */
+.fixedBar {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: #fff;
+ border-top: 1px solid var(--line);
+ z-index: 45;
+}
+.fixedInner {
+ max-width: 960px;
+ margin: 0 auto;
+ padding: 12px 16px;
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 10px;
+}
+@media (min-width: 560px) {
+ .fixedInner {
+ grid-template-columns: 1fr 260px;
+ align-items: center;
+ }
+}
+.fixedRight {
+ text-align: right;
+}
+.fixedMeta {
+ font-size: 12px;
+ color: #666;
+}
+.fixedPrice {
+ font-weight: 800;
+ font-size: 18px;
+}
+.payButton {
+ width: 100%;
+ padding: 14px;
+ font-size: 16px;
+ font-weight: 800;
+ color: #fff;
+ background: #111;
+ border-radius: 12px;
+}
+.payButton:active {
+ transform: translateY(1px);
+}
+.payDisabled {
+ background: #cfcfcf;
+ color: #666;
+ cursor: not-allowed;
+}
+.errorBox {
+ margin-top: 12px;
+ padding: 12px;
+ border-radius: 10px;
+ background: #fff4f4;
+ border: 1px solid #ffcdcd;
+ color: #c81e1e;
+ font-size: 14px;
+}
+
+.errorBox {
+ margin-top: 12px;
+ padding: 12px;
+ border-radius: 10px;
+ background: #fff4f4;
+ border: 1px solid #ffcdcd;
+ color: #c81e1e;
+ font-size: 14px;
+}
+
+.centerMuted {
+ text-align: center;
+ color: #777;
+ font-size: 14px;
+ padding: 16px 0;
+}
+
+.errorBox {
+ margin-top: 12px;
+ padding: 12px;
+ border-radius: 10px;
+ background: #fff4f4;
+ border: 1px solid #ffcdcd;
+ color: #c81e1e;
+ font-size: 14px;
+}
+.centerMuted {
+ text-align: center;
+ color: #777;
+ font-size: 14px;
+ padding: 16px 0;
+}
diff --git a/src/components/organisms/Order/OrderSummarySection/OrderSummarySection.tsx b/src/components/organisms/Order/OrderSummarySection/OrderSummarySection.tsx
new file mode 100644
index 0000000..fd3f7ee
--- /dev/null
+++ b/src/components/organisms/Order/OrderSummarySection/OrderSummarySection.tsx
@@ -0,0 +1,61 @@
+import styles from "../OrderPage.module.css";
+
+type OrderSummarySectionProps = {
+ originalTotal: number;
+ cartDiscount: number;
+ couponDiscount: number;
+ pointsUsed: number;
+ shippingFee: number;
+ finalAmount: number;
+ formatCurrency: (value: number) => string;
+};
+
+export default function OrderSummarySection({
+ originalTotal,
+ cartDiscount,
+ couponDiscount,
+ pointsUsed,
+ shippingFee,
+ finalAmount,
+ formatCurrency,
+}: OrderSummarySectionProps) {
+ return (
+
+ 결제 정보
+
+
+ 상품 금액
+ {formatCurrency(originalTotal)}
+
+
+ 장바구니 할인
+ - {formatCurrency(cartDiscount)}
+
+
+ 쿠폰 할인
+
+ - {formatCurrency(couponDiscount)}
+
+
+
+ 포인트 사용
+ - {formatCurrency(pointsUsed)}
+
+
+ 배송비
+
+ {shippingFee === 0 ? (
+ 무료
+ ) : (
+ formatCurrency(shippingFee)
+ )}
+
+
+
+ 총 결제 금액
+ {formatCurrency(finalAmount)}
+
+
+
+ );
+}
diff --git a/src/components/organisms/Order/OrdererInfoSection/OrdererInfoSection.tsx b/src/components/organisms/Order/OrdererInfoSection/OrdererInfoSection.tsx
new file mode 100644
index 0000000..98b2edf
--- /dev/null
+++ b/src/components/organisms/Order/OrdererInfoSection/OrdererInfoSection.tsx
@@ -0,0 +1,85 @@
+import styles from "../OrderPage.module.css";
+
+type OrdererInfo = {
+ name: string;
+ email: string;
+ phone: string;
+ sameAsDelivery: boolean;
+};
+
+type OrdererInfoSectionProps = {
+ info: OrdererInfo;
+ onChange: (field: keyof OrdererInfo, value: string | boolean) => void;
+ onToggleSameAsDelivery: () => void;
+ ids: {
+ name: string;
+ email: string;
+ phone: string;
+ };
+};
+
+export default function OrdererInfoSection({
+ info,
+ onChange,
+ onToggleSameAsDelivery,
+ ids,
+}: OrdererInfoSectionProps) {
+ return (
+
+ 주문자 정보
+
+
+
+
+
+ );
+}
diff --git a/src/components/organisms/OrderHistorySection/OrderHistorySection.tsx b/src/components/organisms/OrderHistorySection/OrderHistorySection.tsx
index 7c3fcff..75fceee 100644
--- a/src/components/organisms/OrderHistorySection/OrderHistorySection.tsx
+++ b/src/components/organisms/OrderHistorySection/OrderHistorySection.tsx
@@ -1,11 +1,24 @@
-import { ShoppingBag } from "lucide-react";
+import { ShoppingBag } from "lucide-react";
import { useState } from "react";
-import type { Order } from "../../../types/order";
import { Select, Tag } from "../../atoms";
import { EmptyState, Table } from "../../molecules";
import styles from "./OrderHistorySection.module.css";
-const dummyOrders: Order[] = [
+type OrderHistory = {
+ date: string;
+ orderNumber: string;
+ products: Array<{
+ name: string;
+ image: string;
+ option: string;
+ count: number;
+ }>;
+ amount: string;
+ status: string;
+ statusType: "success" | "processing" | "canceled";
+};
+
+const dummyOrders: OrderHistory[] = [
{
date: "2023-10-01",
orderNumber: "ORD123456",
@@ -27,7 +40,7 @@ const dummyOrders: Order[] = [
orderNumber: "ORD123457",
products: [
{
- name: "오버사이즈 블레이저",
+ name: "오버핏 블레이저",
image:
"https://readdy.ai/api/search-image?query=elegant%20black%20blazer%20jacket%20on%20white%20background%20minimalist%20fashion%20photography%20studio%20lighting%20professional%20commercial%20style&width=400&height=400&seq=product2&orientation=squarish",
option: "M",
@@ -57,15 +70,14 @@ const dummyOrders: Order[] = [
count: 1,
},
{
- name: "레트로 매트 립스틱",
+ name: "매트 립스틱",
image:
"https://readdy.ai/api/search-image?query=elegant%20red%20lipstick%20on%20black%20glossy%20surface%20minimalist%20beauty%20product%20photography%20studio%20lighting%20professional%20commercial%20style&width=400&height=400&seq=product11&orientation=squarish",
-
- option: "312호",
+ option: "312",
count: 1,
},
{
- name: "수분 크림",
+ name: "보습 크림",
image:
"https://readdy.ai/api/search-image?query=luxury%20moisturizing%20cream%20in%20elegant%20glass%20jar%20on%20clean%20white%20background%20minimalist%20beauty%20product%20photography%20studio%20lighting%20professional%20commercial%20style&width=400&height=400&seq=product8&orientation=squarish",
option: "50ml",
@@ -91,7 +103,7 @@ export default function OrderHistorySection() {
const onPeriodChange = (period: string) => {
setSelected(period);
- // 여기에 기간 변경에 따른 추가 로직을 작성할 수 있습니다.
+ // TODO: 기간 변경에 따른 필터링 로직을 추가하세요.
};
return (
@@ -101,9 +113,9 @@ export default function OrderHistorySection() {
주문 내역