summaryrefslogtreecommitdiff
path: root/lib/bidding/failure/biddings-closure-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bidding/failure/biddings-closure-dialog.tsx')
-rw-r--r--lib/bidding/failure/biddings-closure-dialog.tsx53
1 files changed, 17 insertions, 36 deletions
diff --git a/lib/bidding/failure/biddings-closure-dialog.tsx b/lib/bidding/failure/biddings-closure-dialog.tsx
index f331167b..cea1f42a 100644
--- a/lib/bidding/failure/biddings-closure-dialog.tsx
+++ b/lib/bidding/failure/biddings-closure-dialog.tsx
@@ -4,7 +4,6 @@
import { useState } from "react"
import { useSession } from "next-auth/react"
import { toast } from "sonner"
-import { requestBiddingClosureWithApproval } from "@/lib/bidding/approval-actions"
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog"
import { Label } from "@/components/ui/label"
import { Textarea } from "@/components/ui/textarea"
@@ -21,58 +20,41 @@ interface BiddingsClosureDialogProps {
biddingNumber: string;
} | null;
onSuccess?: () => void;
+ onApprovalPreview: (data: { description: string; files: File[]; biddingId: number }) => Promise<void>;
}
export function BiddingsClosureDialog({
open,
onOpenChange,
bidding,
- onSuccess
+ onSuccess,
+ onApprovalPreview
}: BiddingsClosureDialogProps) {
const { data: session } = useSession()
const [description, setDescription] = useState('')
const [files, setFiles] = useState<File[]>([])
- const [isSubmitting, setIsSubmitting] = useState(false)
- const handleSubmit = async (e: React.FormEvent) => {
+ const handleNextStep = async (e: React.FormEvent) => {
e.preventDefault()
-
+
if (!bidding || !description.trim()) {
toast.error('폐찰 사유를 입력해주세요.')
return
}
-
- setIsSubmitting(true)
try {
- const result = await requestBiddingClosureWithApproval({
- biddingId: bidding.id,
+ // 결재자 선택 단계로 데이터 전달
+ await onApprovalPreview({
description: description.trim(),
- files,
- currentUser: {
- id: session?.user?.id ? Number(session.user.id) : 0,
- epId: session?.user?.epId || null,
- email: session?.user?.email || undefined,
- },
+ files: files,
+ biddingId: bidding.id,
})
- if (result.status === 'pending_approval') {
- toast.success('폐찰 결재가 상신되었습니다.')
- onOpenChange(false)
- // 폼 초기화
- setDescription('')
- setFiles([])
- if (onSuccess) {
- onSuccess()
- }
- } else {
- toast.error('결재 상신에 실패했습니다.')
- }
+ // 다이얼로그 닫기
+ onOpenChange(false)
} catch (error) {
- console.error('폐찰 결재 상신 실패:', error)
- toast.error(error instanceof Error ? error.message : '결재 상신 중 오류가 발생했습니다.')
- } finally {
- setIsSubmitting(false)
+ console.error('결재 미리보기 준비 실패:', error)
+ toast.error('결재 미리보기 준비 중 오류가 발생했습니다.')
}
}
@@ -98,7 +80,7 @@ interface BiddingsClosureDialogProps {
</DialogDescription>
</DialogHeader>
- <form onSubmit={handleSubmit} className="space-y-4">
+ <form onSubmit={handleNextStep} className="space-y-4">
<div className="space-y-2">
<Label htmlFor="description">폐찰 사유 <span className="text-destructive">*</span></Label>
<Textarea
@@ -133,16 +115,15 @@ interface BiddingsClosureDialogProps {
type="button"
variant="outline"
onClick={() => onOpenChange(false)}
- disabled={isSubmitting}
>
취소
</Button>
<Button
type="submit"
- variant="destructive"
- disabled={isSubmitting || !description.trim()}
+ variant="default"
+ disabled={!description.trim()}
>
- {isSubmitting ? '상신 중...' : '결재 상신'}
+ 다음 단계
</Button>
</div>
</form>