Skip to content

Commit 5d00c01

Browse files
committed
feat: Update ChatInputForm and FileSelector components for v-model binding
- Refactored `ChatInputForm.vue` to use v-model for handling file selection with `FileSelector` component. - Removed `handleFilesSelected` method from `ChatInputForm.vue` as it is no longer needed with v-model. - Updated `FileSelector.vue` component to accept a `modelValue` prop and emit `update:modelValue` for two-way data binding. - Added a watcher in `FileSelector.vue` to update the displayed file names whenever `modelValue` changes.
1 parent 566ccc2 commit 5d00c01

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

src/components/ChatInputForm.vue

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
@keydown="checkCtrlEnter"></textarea>
66
</div>
77
<div class="d-flex justify-content-between align-items-center">
8-
<FileSelector @files-selected="handleFilesSelected" />
8+
<FileSelector v-model="selectedFiles"/>
99
<button type="submit" class="btn btn-primary">Send</button>
1010
</div>
1111
</form>
@@ -51,9 +51,6 @@ export default defineComponent({
5151
this.handleSubmit();
5252
}
5353
},
54-
handleFilesSelected(files: File[]) {
55-
this.selectedFiles = files;
56-
},
5754
},
5855
mounted() {
5956

src/components/FileSelector.vue

+17-7
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,30 @@
1717
</template>
1818

1919
<script lang="ts">
20-
import { defineComponent, ref } from 'vue';
20+
import { defineComponent, ref, watch } from 'vue';
2121
2222
export default defineComponent({
23-
emits: ['files-selected'],
24-
setup(_, { emit }) {
25-
const selectedFiles = ref<File[]>([]);
23+
props: {
24+
modelValue: {
25+
type: Array as () => File[],
26+
default: () => []
27+
}
28+
},
29+
emits: ['update:modelValue'],
30+
setup(props, { emit }) {
2631
const fileNames = ref<string[]>([]);
2732
const fileInput = ref<HTMLInputElement | null>(null);
2833
34+
// Watch for changes in modelValue and update fileNames
35+
watch(() => props.modelValue, (newFiles) => {
36+
fileNames.value = newFiles.map(file => file.name);
37+
}, { immediate: true });
38+
2939
const handleFileChange = (event: Event) => {
3040
const target = event.target as HTMLInputElement;
3141
if (target.files) {
32-
selectedFiles.value = Array.from(target.files);
33-
fileNames.value = selectedFiles.value.map(file => file.name);
34-
emit('files-selected', selectedFiles.value);
42+
const files = Array.from(target.files);
43+
emit('update:modelValue', files);
3544
}
3645
};
3746
@@ -49,4 +58,5 @@ export default defineComponent({
4958
});
5059
</script>
5160

61+
5262
<style scoped></style>

0 commit comments

Comments
 (0)