Skip to content

Commit a8bc983

Browse files
committed
Create calendar picker component
1 parent 3a3623b commit a8bc983

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

components/calendarPicker.vue

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<script setup lang="ts">
2+
import { CalendarDaysIcon } from '@heroicons/vue/24/solid';
3+
import { format } from 'date-fns';
4+
import { DatePicker as VCalendarDatePicker } from 'v-calendar';
5+
import 'v-calendar/dist/style.css';
6+
7+
const emit = defineEmits<{
8+
(e: 'change', value: string): void;
9+
}>();
10+
11+
const props = defineProps<{
12+
disabled: boolean;
13+
name: string;
14+
value?: string;
15+
}>();
16+
17+
const { value } = useField(() => props.name);
18+
19+
const curDate = new Date();
20+
21+
const range = ref({
22+
start: curDate,
23+
end: curDate,
24+
});
25+
26+
watch(range, (updated) => {
27+
value.value = updated;
28+
});
29+
30+
onMounted(() => {
31+
value.value = range.value;
32+
});
33+
34+
watchEffect(() => {
35+
if (props.value) {
36+
value.value = props.value;
37+
}
38+
});
39+
</script>
40+
41+
<template>
42+
<div tabindex="0" class="collapse bg-base-200">
43+
<input type="checkbox" />
44+
<div class="flex collapse-title gap-4 text-sm font-medium">
45+
<CalendarDaysIcon class="w-4 h-4" />
46+
{{ format(range.start, 'MMMM d, yyy') }} - {{ format(range.end, 'MMMM d, yyy') }}
47+
</div>
48+
<div class="collapse-content">
49+
<VCalendarDatePicker v-model.range="range" />
50+
</div>
51+
</div>
52+
</template>

0 commit comments

Comments
 (0)