summaryrefslogtreecommitdiff
path: root/components/common
diff options
context:
space:
mode:
Diffstat (limited to 'components/common')
-rw-r--r--components/common/vendor/vendor-selector.tsx9
-rw-r--r--components/common/vendor/vendor-service.ts34
2 files changed, 30 insertions, 13 deletions
diff --git a/components/common/vendor/vendor-selector.tsx b/components/common/vendor/vendor-selector.tsx
index aa79943a..8f3cf32b 100644
--- a/components/common/vendor/vendor-selector.tsx
+++ b/components/common/vendor/vendor-selector.tsx
@@ -34,6 +34,7 @@ interface VendorSelectorProps {
showInitialData?: boolean // 초기 클릭시 벤더들을 로드할지 여부
maxSelections?: number // 최대 선택 가능한 벤더 개수
statusFilter?: string // 특정 상태의 벤더만 표시
+ includeCountry?: boolean // 국가 정보 포함 여부
}
export function VendorSelector({
@@ -48,7 +49,8 @@ export function VendorSelector({
excludeVendorIds,
showInitialData = true,
maxSelections,
- statusFilter
+ statusFilter,
+ includeCountry = false
}: VendorSelectorProps) {
const [open, setOpen] = useState(false)
@@ -79,7 +81,8 @@ export function VendorSelector({
const result = await searchVendorsForSelector(query, page, 10, {
statusFilter,
sortBy: 'vendorName',
- sortOrder: 'asc'
+ sortOrder: 'asc',
+ includeCountry
})
if (result.success) {
@@ -113,7 +116,7 @@ export function VendorSelector({
} finally {
setIsSearching(false)
}
- }, [statusFilter])
+ }, [statusFilter, includeCountry])
// Popover 열림시 초기 데이터 로드
React.useEffect(() => {
diff --git a/components/common/vendor/vendor-service.ts b/components/common/vendor/vendor-service.ts
index 8c440df2..bc53be3e 100644
--- a/components/common/vendor/vendor-service.ts
+++ b/components/common/vendor/vendor-service.ts
@@ -12,6 +12,7 @@ export interface VendorSearchItem {
taxId: string | null // 사업자번호
status: string
displayText: string // vendorName + vendorCode로 구성된 표시용 텍스트
+ country?: string | null // 국가 정보 (선택적)
}
// 벤더 검색 옵션
@@ -22,6 +23,7 @@ export interface VendorSearchOptions {
offset?: number
sortBy?: 'vendorName' | 'vendorCode' | 'status'
sortOrder?: 'asc' | 'desc'
+ includeCountry?: boolean // 국가 정보 포함 여부
}
// 페이지네이션 정보
@@ -50,7 +52,7 @@ export async function searchVendorsForSelector(
error?: string
}> {
try {
- const { statusFilter, sortBy = 'vendorName', sortOrder = 'asc' } = options
+ const { statusFilter, sortBy = 'vendorName', sortOrder = 'asc', includeCountry = false } = options
const offset = (page - 1) * perPage
// WHERE 조건 구성
@@ -95,15 +97,26 @@ export async function searchVendorsForSelector(
const totalCountResult = await totalCountQuery
const total = totalCountResult.length
- // 데이터 조회
+ // 데이터 조회 - includeCountry에 따라 필드 선택
+ const selectFields = includeCountry
+ ? {
+ id: vendors.id,
+ vendorName: vendors.vendorName,
+ vendorCode: vendors.vendorCode,
+ taxId: vendors.taxId,
+ status: vendors.status,
+ country: vendors.country,
+ }
+ : {
+ id: vendors.id,
+ vendorName: vendors.vendorName,
+ vendorCode: vendors.vendorCode,
+ taxId: vendors.taxId,
+ status: vendors.status,
+ }
+
let dataQuery = db
- .select({
- id: vendors.id,
- vendorName: vendors.vendorName,
- vendorCode: vendors.vendorCode,
- taxId: vendors.taxId,
- status: vendors.status,
- })
+ .select(selectFields)
.from(vendors)
if (whereClause) {
@@ -120,7 +133,8 @@ export async function searchVendorsForSelector(
...vendor,
displayText: vendor.vendorCode
? `${vendor.vendorName} (${vendor.vendorCode})`
- : vendor.vendorName
+ : vendor.vendorName,
+ ...(includeCountry && { country: (vendor as any).country })
}))
// 페이지네이션 정보 계산