summaryrefslogtreecommitdiff
path: root/lib/vendor-investigation/table/update-investigation-sheet.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor-investigation/table/update-investigation-sheet.tsx')
-rw-r--r--lib/vendor-investigation/table/update-investigation-sheet.tsx90
1 files changed, 45 insertions, 45 deletions
diff --git a/lib/vendor-investigation/table/update-investigation-sheet.tsx b/lib/vendor-investigation/table/update-investigation-sheet.tsx
index c04aad64..14350815 100644
--- a/lib/vendor-investigation/table/update-investigation-sheet.tsx
+++ b/lib/vendor-investigation/table/update-investigation-sheet.tsx
@@ -3,7 +3,7 @@
import * as React from "react"
import { zodResolver } from "@hookform/resolvers/zod"
import { useForm } from "react-hook-form"
-import { CalendarIcon, Loader, X } from "lucide-react"
+import { CalendarIcon, Loader, X, Download } from "lucide-react"
import { format } from "date-fns"
import { toast } from "sonner"
@@ -67,6 +67,7 @@ import {
import { updateVendorInvestigationAction, getInvestigationAttachments, deleteInvestigationAttachment } from "../service"
import { VendorInvestigationsViewWithContacts } from "@/config/vendorInvestigationsColumnsConfig"
import prettyBytes from "pretty-bytes"
+import { downloadFile } from "@/lib/file-download"
interface UpdateVendorInvestigationSheetProps
extends React.ComponentPropsWithoutRef<typeof Sheet> {
@@ -123,7 +124,6 @@ export function UpdateVendorInvestigationSheet({
defaultValues: {
investigationId: investigation?.investigationId ?? 0,
investigationStatus: investigation?.investigationStatus ?? "PLANNED",
- evaluationType: investigation?.evaluationType ?? undefined,
investigationAddress: investigation?.investigationAddress ?? "",
investigationMethod: investigation?.investigationMethod ?? undefined,
forecastedAt: investigation?.forecastedAt ?? undefined,
@@ -143,7 +143,6 @@ export function UpdateVendorInvestigationSheet({
form.reset({
investigationId: investigation.investigationId,
investigationStatus: investigation.investigationStatus || "PLANNED",
- evaluationType: investigation.evaluationType ?? undefined,
investigationAddress: investigation.investigationAddress ?? "",
investigationMethod: investigation.investigationMethod ?? undefined,
forecastedAt: investigation.forecastedAt ?? undefined,
@@ -203,10 +202,28 @@ export function UpdateVendorInvestigationSheet({
}
}
+ // 첨부파일 다운로드 함수
+ const handleDownloadAttachment = async (attachment: any) => {
+ if (!attachment.filePath || !attachment.fileName) {
+ toast.error("첨부파일 정보가 올바르지 않습니다.")
+ return
+ }
+
+ try {
+ await downloadFile(attachment.filePath, attachment.fileName, {
+ showToast: true,
+ action: 'download'
+ })
+ } catch (error) {
+ console.error("첨부파일 다운로드 오류:", error)
+ toast.error("첨부파일 다운로드 중 오류가 발생했습니다.")
+ }
+ }
+
// 선택된 파일에서 특정 파일 제거
const handleRemoveSelectedFile = (indexToRemove: number) => {
const currentFiles = form.getValues("attachments") || []
- const updatedFiles = currentFiles.filter((_, index) => index !== indexToRemove)
+ const updatedFiles = currentFiles.filter((_: File, index: number) => index !== indexToRemove)
form.setValue("attachments", updatedFiles.length > 0 ? updatedFiles : undefined)
if (updatedFiles.length === 0) {
@@ -250,16 +267,30 @@ export function UpdateVendorInvestigationSheet({
({Math.round(attachment.fileSize / 1024)}KB)
</span>
</div>
- <Button
- type="button"
- variant="ghost"
- size="sm"
- onClick={() => handleDeleteAttachment(attachment.id)}
- className="text-destructive hover:text-destructive"
- disabled={isPending}
- >
- 삭제
- </Button>
+ <div className="flex items-center gap-1">
+ <Button
+ type="button"
+ variant="ghost"
+ size="sm"
+ onClick={() => handleDownloadAttachment(attachment)}
+ className="text-blue-600 hover:text-blue-700"
+ disabled={isPending}
+ title="파일 다운로드"
+ >
+ <Download className="h-4 w-4" />
+ </Button>
+ <Button
+ type="button"
+ variant="ghost"
+ size="sm"
+ onClick={() => handleDeleteAttachment(attachment.id)}
+ className="text-destructive hover:text-destructive"
+ disabled={isPending}
+ title="파일 삭제"
+ >
+ <X className="h-4 w-4" />
+ </Button>
+ </div>
</div>
))
) : (
@@ -417,10 +448,6 @@ export function UpdateVendorInvestigationSheet({
formData.append("investigationId", String(values.investigationId))
formData.append("investigationStatus", values.investigationStatus)
- // 선택적 필드들
- if (values.evaluationType) {
- formData.append("evaluationType", values.evaluationType)
- }
if (values.investigationAddress) {
formData.append("investigationAddress", values.investigationAddress)
@@ -559,33 +586,6 @@ export function UpdateVendorInvestigationSheet({
)}
/>
- {/* 평가 유형 */}
- <FormField
- control={form.control}
- name="evaluationType"
- render={({ field }) => (
- <FormItem>
- <FormLabel>평가 유형</FormLabel>
- <FormControl>
- <Select value={field.value || ""} onValueChange={field.onChange}>
- <SelectTrigger>
- <SelectValue placeholder="평가 유형을 선택하세요" />
- </SelectTrigger>
- <SelectContent>
- <SelectGroup>
- <SelectItem value="PURCHASE_SELF_EVAL">구매자체평가</SelectItem>
- <SelectItem value="DOCUMENT_EVAL">서류평가</SelectItem>
- <SelectItem value="PRODUCT_INSPECTION">제품검사평가</SelectItem>
- <SelectItem value="SITE_VISIT_EVAL">방문실사평가</SelectItem>
- </SelectGroup>
- </SelectContent>
- </Select>
- </FormControl>
- <FormMessage />
- </FormItem>
- )}
- />
-
{/* 실사 주소 */}
<FormField
control={form.control}