diff --git a/app/components/ui/file-upload/FileUpload.vue b/app/components/ui/file-upload/FileUpload.vue index eff2bf7..b0d9ac0 100644 --- a/app/components/ui/file-upload/FileUpload.vue +++ b/app/components/ui/file-upload/FileUpload.vue @@ -2,25 +2,30 @@ import type { HTMLAttributes } from "vue"; import { Motion } from "motion-v"; import { ref } from "vue"; +import { X } from "lucide-vue-next"; +import Button from "../button/Button.vue"; interface FileUploadProps { class?: HTMLAttributes["class"]; accept?: string; + modelValue?: File[]; } -defineProps(); +const props = defineProps(); const emit = defineEmits<{ (e: "onChange", files: File[]): void; + (e: "update:modelValue", files: File[]): void; }>(); const fileInputRef = ref(null); -const files = ref([]); +const files = ref(props.modelValue || []); const isActive = ref(false); function handleFileChange(newFiles: File[]) { files.value = [...files.value, ...newFiles]; emit("onChange", files.value); + emit("update:modelValue", files.value); } function onFileChange(e: Event) { @@ -44,6 +49,17 @@ function handleDrop(e: DragEvent) { const droppedFiles = e.dataTransfer?.files ? Array.from(e.dataTransfer.files) : []; if (droppedFiles.length) handleFileChange(droppedFiles); } +function removeFile(event: MouseEvent, index: number) { + files.value.splice(index, 1); + event.stopPropagation(); + emit("update:modelValue", files.value); +} + +watch(() => props.modelValue, (newVal) => { + if (newVal) { + files.value = newVal; + } +}, { deep: true });
- +