summaryrefslogtreecommitdiff
path: root/lib/approval-line/table/create-approval-line-sheet.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/approval-line/table/create-approval-line-sheet.tsx')
-rw-r--r--lib/approval-line/table/create-approval-line-sheet.tsx52
1 files changed, 49 insertions, 3 deletions
diff --git a/lib/approval-line/table/create-approval-line-sheet.tsx b/lib/approval-line/table/create-approval-line-sheet.tsx
index c19d11ab..b7878f71 100644
--- a/lib/approval-line/table/create-approval-line-sheet.tsx
+++ b/lib/approval-line/table/create-approval-line-sheet.tsx
@@ -30,6 +30,7 @@ import { type ApprovalLineFormData, ApprovalLineSchema } from "../validations"
import { ApprovalLineSelector } from "@/components/knox/approval/ApprovalLineSelector"
import { OrganizationManagerSelector, type OrganizationManagerItem } from "@/components/common/organization/organization-manager-selector"
import { useSession } from "next-auth/react"
+import { getActiveApprovalTemplateCategories, type ApprovalTemplateCategory } from "@/lib/approval-template/category-service"
interface CreateApprovalLineSheetProps {
open: boolean
@@ -39,6 +40,8 @@ interface CreateApprovalLineSheetProps {
export function CreateApprovalLineSheet({ open, onOpenChange }: CreateApprovalLineSheetProps) {
const { data: session } = useSession();
const [isSubmitting, setIsSubmitting] = React.useState(false);
+ const [categories, setCategories] = React.useState<ApprovalTemplateCategory[]>([]);
+ const [isLoadingCategories, setIsLoadingCategories] = React.useState(false);
// 고유 ID 생성 함수 (조직 관리자 추가 시 사용)
const generateUniqueId = () => `apln-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
@@ -68,6 +71,30 @@ export function CreateApprovalLineSheet({ open, onOpenChange }: CreateApprovalLi
const aplns = form.watch("aplns");
+ // 카테고리 목록 로드
+ React.useEffect(() => {
+ let active = true;
+ const loadCategories = async () => {
+ if (!open) return;
+
+ setIsLoadingCategories(true);
+ try {
+ const data = await getActiveApprovalTemplateCategories();
+ if (active) {
+ setCategories(data);
+ }
+ } catch (error) {
+ console.error('카테고리 로드 실패:', error);
+ } finally {
+ if (active) setIsLoadingCategories(false);
+ }
+ };
+ loadCategories();
+ return () => {
+ active = false;
+ };
+ }, [open]);
+
// 조직 관리자 추가 (공용 선택기 외 보조 입력 경로)
const addOrganizationManagers = (managers: OrganizationManagerItem[]) => {
const next = [...aplns];
@@ -157,9 +184,28 @@ export function CreateApprovalLineSheet({ open, onOpenChange }: CreateApprovalLi
render={({ field }) => (
<FormItem>
<FormLabel>카테고리</FormLabel>
- <FormControl>
- <Input placeholder="카테고리를 입력하세요" {...field} />
- </FormControl>
+ <Select
+ value={field.value || "none"}
+ onValueChange={(value) => field.onChange(value === "none" ? "" : value)}
+ disabled={isLoadingCategories}
+ >
+ <SelectTrigger>
+ <SelectValue placeholder={isLoadingCategories ? "카테고리 로드 중..." : "카테고리를 선택하세요"} />
+ </SelectTrigger>
+ <SelectContent>
+ <SelectItem value="none">선택 안함</SelectItem>
+ {categories
+ .sort((a, b) => a.sortOrder - b.sortOrder)
+ .map((category) => (
+ <SelectItem key={`category-${category.id}`} value={category.name}>
+ {category.name}
+ {category.description && (
+ <span className="text-muted-foreground ml-2">({category.description})</span>
+ )}
+ </SelectItem>
+ ))}
+ </SelectContent>
+ </Select>
<FormMessage />
</FormItem>
)}