demark-pro / react-booking-calendar

A responsive customizable booking calendar with overbooking protection.
https://www.npmjs.com/package/@demark-pro/react-booking-calendar
MIT License
10 stars 1 forks source link
booking calendar react

React Booking Calendar

Снимок экрана 2024-05-31 в 23 54 21

A responsive customizable booking calendar with overbooking protection.

Demo

Example #1 - Сalendar component

Example #2 - ScrollableСalendar component

Example #3 - EventsCalendar component. An example of how easily you can customize a calendar using components and classnames props with tailwindcss

Installation

Install with npm

  npm i @demark-pro/react-booking-calendar --save

Below is a simple example of how to use the Calendar in a React view. You will also need to require the CSS file from this package (or provide your own). The example below shows how to include the CSS from this package if your build system supports requiring CSS files (Webpack is one that does).

import React, { useState } from "react";
import { Calendar } from "@demark-pro/react-booking-calendar";

import "@demark-pro/react-booking-calendar/dist/react-booking-calendar.css";

// CSS Modules, react-booking-calendar-cssmodules.css
// import '@demark-pro/react-booking-calendar/dist/react-booking-calendar-cssmodules.css';

const oneDay = 86400000;
const today = new Date().getTime() + oneDay;

const reserved = Array.from({ length: 3 }, (_, i) => {
  const daysCount = Math.floor(Math.random() * (7 - 4) + 3);
  const startDate = new Date(today + oneDay * 8 * i);

  return {
    startDate,
    endDate: new Date(startDate.getTime() + oneDay * daysCount),
  };
});

const BookingCalendar = () => {
  const [selectedDates, setSelectedDates] = useState([]);

  return (
    <Calendar
      selected={selectedDates}
      reserved={reserved}
      onChange={setSelectedDates}
    />
  );
};

Customisation

The classNames prop

ClassNames takes an object with keys to represent the various inner components that react-select is made up of. Each inner component takes a callback function with the following signature:

<Calendar
  classNames={{
    DayContent: "text-orange-600",
  }}
/>

The components prop

Calendar allows you to augment layout and functionality by replacing the default components with your own, using the components property. These components are given all the current props and state

import { DaySelectionProps } from "@demark-pro/react-booking-calendar";

import "@demark-pro/react-booking-calendar/dist/react-booking-calendar.css";

const DaySelection = ({ innerProps, state }: DaySelectionProps) => {
  if (state.isReserved) return null;

  return <div {...innerProps} />;
};

<Calendar
  components={{
    DaySelection: DaySelection,
  }}
/>;

Documentation

For more information about the props that you can pass to the component, see the documentation here.