Files
HeuJung b07d6c8953 fix(ecommerce,tosspayments,templates): 에스크로 표시 누락·결제수단 전환 시 입력 잔류 수정
- 에스크로 표시가 영구히 렌더되지 않던 문제: is_escrow 가 DB·모델·부분취소 차단
 로직에는 있으나 OrderPaymentResource 가 내보내지 않아, 이 값을 참조하는 주문
 상세(관리자·구매자)의 에스크로 행이 항상 false 로 평가됐다. Resource 에 노출한다.

- 결제수단을 바꿔도 이전 수단의 입력이 주문에 실리던 문제: 결제수단 버튼이
 _local.paymentMethod 만 바꾸고 슬롯이 소유한 확장 페이로드·환불계좌는 비우지
 않았다. 확장 슬롯과 환불계좌 블록은 결제수단 조건부로 언마운트되지만 _local
 값은 남으므로, 무통장에서 현금영수증·환불계좌를 입력한 뒤 카드로 전환하면 그
 값이 주문 생성 요청에 그대로 실렸다.
 프론트는 결제수단 전환 시 슬롯 소유 상태를 초기화하고, 서버는 환불계좌가 쓰이지
 않는 결제수단이면 저장하지 않도록 게이팅한다(현금영수증은 이미 dbank 게이트 보유).

- Modal 이 받지 않는 size prop 을 쓰던 4곳을 width 로 교체(무시되어 의도한 폭이
 나오지 않았다). 토스 에러 모달의 setState target 을 params 안으로 옮긴다.

- 레이아웃 편집기 팔레트에서 체크박스를 넣으면 라벨 없이 네모 칸만 놓이던 문제:
 Checkbox 는 label prop 을 렌더하지 않으므로 Label 래핑 + Span 텍스트로 바꾸고,
 Accordion 이 Label 을 받도록 중첩 스펙을 맞춘다.
2026-08-06 13:58:00 +09:00

475 lines
8.3 KiB
JSON

{
"comment": "draggable = 편집기에서 드래그/팔레트 배치 가능한 컴포넌트 목록. containers.accepts = 해당 컨테이너가 자식으로 받을 수 있는 컴포넌트 이름 목록. Img/Hr/Icon 등 leaf 는 accepts:[] 로 자식 거부. composite 는 통째 이동만 허용(자체는 draggable 에 포함되나 내부 accepts 는 [] 로 비편집).",
"draggable": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Hr",
"Ul",
"Ol",
"Li",
"Nav",
"Section",
"Code",
"Pre",
"Container",
"Grid",
"Flex",
"SectionLayout",
"ThreeColumnLayout",
"Card",
"Badge",
"StatusBadge",
"Alert",
"EmptyState",
"LoadingSpinner",
"PageHeader",
"Breadcrumb",
"TabNavigation",
"TabNavigationScroll",
"Toggle",
"FormField",
"Input",
"Textarea",
"Label",
"Select",
"Checkbox",
"RadioGroup",
"FileInput",
"FileUploader",
"DataGrid",
"CardGrid",
"Pagination",
"SearchBar",
"StatCard",
"ProductCard",
"TemplateCard",
"BarChart",
"DonutChart",
"HtmlContent",
"HtmlEditor",
"ImageGallery",
"Form",
"Table",
"Accordion",
"IconButton",
"Dropdown",
"ActionMenu",
"TagInput",
"SearchableDropdown",
"RichSelect",
"TagSelect",
"IconSelect",
"ChipCheckbox",
"MultilingualInput",
"MultilingualTagInput",
"LanguageSelector",
"PermissionTree",
"CategoryTree",
"ExtensionBadge",
"UserProfile",
"FilterGroup",
"SortableMenuList",
"DynamicFieldList",
"SectionHeader",
"ThemeToggle",
"NotificationCenter",
"ColumnSelector",
"AdminSidebar",
"AdminFooter"
],
"containers": {
"Div": {
"accepts": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Hr",
"Ul",
"Ol",
"Nav",
"Section",
"Code",
"Pre",
"Container",
"Grid",
"Flex",
"SectionLayout",
"ThreeColumnLayout",
"Card",
"Badge",
"StatusBadge",
"Alert",
"EmptyState",
"LoadingSpinner",
"PageHeader",
"Breadcrumb",
"TabNavigation",
"TabNavigationScroll",
"Toggle",
"FormField",
"Input",
"Textarea",
"Label",
"Select",
"Checkbox",
"RadioGroup",
"FileInput",
"FileUploader",
"DataGrid",
"CardGrid",
"Pagination",
"SearchBar",
"StatCard",
"ProductCard",
"TemplateCard",
"BarChart",
"DonutChart",
"HtmlContent",
"HtmlEditor",
"ImageGallery",
"Form",
"Table",
"Accordion",
"IconButton",
"Dropdown",
"ActionMenu",
"TagInput",
"SearchableDropdown",
"RichSelect",
"TagSelect",
"IconSelect",
"ChipCheckbox",
"MultilingualInput",
"MultilingualTagInput",
"LanguageSelector",
"PermissionTree",
"CategoryTree",
"ExtensionBadge",
"UserProfile",
"FilterGroup",
"SortableMenuList",
"DynamicFieldList",
"SectionHeader",
"ThemeToggle",
"NotificationCenter",
"ColumnSelector",
"AdminSidebar",
"AdminFooter"
]
},
"Section": {
"accepts": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Hr",
"Container",
"Grid",
"Flex",
"Card",
"PageHeader",
"DataGrid",
"CardGrid",
"SectionHeader",
"ThemeToggle",
"NotificationCenter",
"ColumnSelector",
"AdminSidebar",
"AdminFooter"
]
},
"Nav": {
"accepts": [
"Ul",
"Ol",
"A",
"Button",
"Span",
"Icon",
"Div"
]
},
"P": {
"accepts": [
"Span",
"A",
"Img",
"Icon",
"Code"
]
},
"Span": {
"accepts": [
"Span",
"A",
"Img",
"Icon"
]
},
"A": {
"accepts": [
"Span",
"Img",
"Icon"
]
},
"Ul": {
"accepts": [
"Li"
]
},
"Ol": {
"accepts": [
"Li"
]
},
"Li": {
"accepts": [
"Span",
"A",
"Img",
"Icon",
"P",
"Div",
"Button"
]
},
"Container": {
"accepts": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Hr",
"Ul",
"Ol",
"Section",
"Grid",
"Flex",
"SectionLayout",
"ThreeColumnLayout",
"Card",
"PageHeader",
"Breadcrumb",
"TabNavigation",
"DataGrid",
"CardGrid",
"Pagination",
"SectionHeader",
"ThemeToggle",
"NotificationCenter",
"ColumnSelector",
"AdminSidebar",
"AdminFooter"
]
},
"Grid": {
"accepts": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Card",
"StatCard",
"ProductCard",
"TemplateCard"
]
},
"Flex": {
"accepts": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Hr",
"Card",
"Badge",
"StatusBadge"
]
},
"SectionLayout": {
"accepts": [
"Div",
"Section",
"Container",
"Grid",
"Flex",
"Card",
"PageHeader",
"SectionHeader",
"ThemeToggle",
"NotificationCenter",
"ColumnSelector",
"AdminSidebar",
"AdminFooter"
]
},
"ThreeColumnLayout": {
"accepts": [
"Div",
"Section",
"Container",
"Grid",
"Flex",
"Card",
"PageHeader",
"SectionHeader",
"ThemeToggle",
"NotificationCenter",
"ColumnSelector",
"AdminSidebar",
"AdminFooter"
]
},
"Card": {
"accepts": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Hr",
"Badge",
"StatusBadge",
"Ul",
"Ol"
]
},
"Form": {
"accepts": [
"Div",
"Span",
"P",
"Label",
"Input",
"Textarea",
"Select",
"Checkbox",
"RadioGroup",
"FileInput",
"FileUploader",
"Button",
"FormField",
"Container",
"Grid",
"Flex",
"Hr",
"MultilingualInput",
"MultilingualTagInput",
"TagInput",
"TagSelect",
"SearchableDropdown",
"RichSelect",
"IconSelect",
"ChipCheckbox",
"DynamicFieldList"
]
},
"FormField": {
"accepts": [
"Input",
"Textarea",
"Select",
"Checkbox",
"RadioGroup",
"FileInput",
"FileUploader",
"Label",
"Span",
"MultilingualInput",
"MultilingualTagInput",
"TagInput",
"TagSelect",
"SearchableDropdown",
"RichSelect",
"IconSelect"
]
},
"Table": {
"accepts": []
},
"Accordion": {
"accepts": [
"Div",
"Span",
"P",
"H1",
"H2",
"H3",
"H4",
"A",
"Button",
"Img",
"Icon",
"Hr",
"Ul",
"Ol",
"Container",
"Grid",
"Flex",
"Card",
"DataGrid",
"Table",
"FormField",
"Input",
"Textarea",
"Select",
"Checkbox",
"Label"
]
}
}
}