summaryrefslogtreecommitdiff
path: root/components/common
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-09-23 14:22:46 +0900
committerjoonhoekim <26rote@gmail.com>2025-09-23 14:22:46 +0900
commitbd758e6611850d6c7c865cf1d5dbfd3ef6946bee (patch)
tree1b974a69ee69c50cfdaaa048f4a0209ea001a06b /components/common
parentda00bbf203534b2663289d6fe45b6ed8663e7e11 (diff)
(김준회) nonsap code 테이블 동기화 처리
Diffstat (limited to 'components/common')
-rw-r--r--components/common/selectors/place-of-shipping/place-of-shipping-selector.tsx58
1 files changed, 41 insertions, 17 deletions
diff --git a/components/common/selectors/place-of-shipping/place-of-shipping-selector.tsx b/components/common/selectors/place-of-shipping/place-of-shipping-selector.tsx
index 8230e265..63532365 100644
--- a/components/common/selectors/place-of-shipping/place-of-shipping-selector.tsx
+++ b/components/common/selectors/place-of-shipping/place-of-shipping-selector.tsx
@@ -12,7 +12,8 @@
import { Select, SelectItem, SelectContent } from "@/components/ui/select"
import { SelectTrigger } from "@/components/ui/select"
import { SelectValue } from "@/components/ui/select"
-import { useState, useEffect } from "react"
+import { Input } from "@/components/ui/input"
+import { useState, useEffect, useMemo } from "react"
import { getPlaceOfShippingForSelection } from "./place-of-shipping-service"
interface PlaceOfShippingData {
@@ -37,6 +38,15 @@ export function PlaceOfShippingSelector({
}: PlaceOfShippingSelectorProps) {
const [placeOfShippingData, setPlaceOfShippingData] = useState<PlaceOfShippingData[]>([])
const [isLoading, setIsLoading] = useState(true)
+ const [searchTerm, setSearchTerm] = useState("")
+
+ const filteredData = useMemo(() => {
+ if (!searchTerm) return placeOfShippingData
+ return placeOfShippingData.filter(item =>
+ item.code.toLowerCase().includes(searchTerm.toLowerCase()) ||
+ item.description.toLowerCase().includes(searchTerm.toLowerCase())
+ )
+ }, [placeOfShippingData, searchTerm])
useEffect(() => {
const loadData = async () => {
@@ -55,21 +65,35 @@ export function PlaceOfShippingSelector({
}, [])
return (
- <Select
- value={value}
- onValueChange={onValueChange}
- disabled={disabled || isLoading}
- >
- <SelectTrigger className={className}>
- <SelectValue placeholder={isLoading ? "로딩 중..." : placeholder} />
- </SelectTrigger>
- <SelectContent>
- {placeOfShippingData.map((item) => (
- <SelectItem key={item.code} value={item.code}>
- {item.code} {item.description}
- </SelectItem>
- ))}
- </SelectContent>
- </Select>
+ <div className="space-y-2">
+ <Input
+ placeholder="검색..."
+ value={searchTerm}
+ onChange={(e) => setSearchTerm(e.target.value)}
+ className="w-full"
+ />
+ <Select
+ value={value}
+ onValueChange={onValueChange}
+ disabled={disabled || isLoading}
+ >
+ <SelectTrigger className={className}>
+ <SelectValue placeholder={isLoading ? "로딩 중..." : placeholder} />
+ </SelectTrigger>
+ <SelectContent>
+ {filteredData.length === 0 && searchTerm ? (
+ <div className="p-2 text-sm text-muted-foreground">
+ 검색 결과가 없습니다
+ </div>
+ ) : (
+ filteredData.map((item) => (
+ <SelectItem key={item.code} value={item.code}>
+ {item.code} {item.description}
+ </SelectItem>
+ ))
+ )}
+ </SelectContent>
+ </Select>
+ </div>
)
} \ No newline at end of file