vue-holiday-planner
This library consists of of a calendar component - Resource view which displays a scrollable overview of several people's calendars through months. Check out the Demo
Installation
npm install vue-holiday-planner
Usage
<template>
<HolidayPlanner :resources="rows">
</HolidayPlanner>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { HolidayPlanner } from 'vue-holiday-planner';
import dayjs from 'dayjs';
export default defineComponent({
name: "App",
components: {
HolidayPlanner,
},
data() {
return {
rows: [
{
id: 1,
title: "Krystalle Logie",
subtitle: "Senior Sales Associate",
img: "assets/woman1.jpg",
days: [
{
date: dayjs(),
class: 'orange',
}
],
}
],
};
},
});
</script>
Props
resources
- Array of items (rows) displayed in the calendar:
id
title
subtitle
img
- Href of image displayed in the default row header templatedays
- Array of dates highlighted in the calendar for this resource
date
{DayJs}class
string|string[]
{
resources: {
type: Array,
required: true,
},
startDate: {
default: () => dayjs().startOf('day'),
},
maxDate: {
default: () => dayjs().endOf('year'),
},
minDate: {
default: () => dayjs().startOf('year'),
},
infiniteScroll: {
type: Boolean,
default: true,
},
customDays: {
type: Object,
default: () => ({}),
},
getClassFn: {
type: Function,
default: (date: Dayjs) => {
const d = date.day();
if (d === 6 || d === 0) {
return 'weekend';
}
},
},
getHeaderClassFn: {
type: Function,
default: (date: Dayjs) => {
return {
'today': date.isSame(dayjs(), 'day'),
'start-of-month': date.date() === 1
};
},
},
getDayValueFn: {
type: Function,
default: (date: Dayjs) => {
return date.date();
},
},
getDayHeaderFn: {
type: Function,
default: (date: Dayjs) => {
return date.format('dd')[0];
},
},
selectionEnabled: {
type: Boolean,
default: true,
}
}
Events
Most are self-explanatory
@header-click
- Emits when a date is clicked in the header.@row-click
@day-click
@selection-end
Slots
row-header
- Custom row template
Example:
<template v-slot:row-header="{ row }">
<div>Row:{{row.title}}</div>
</template>
Example:
<template v-slot:title="{ from, to }">
<div>
From:{{from && from.format('MMM D. YYYY')}}, To:{{to && to.format('MMM D. YYYY')}
<div>
</template>