Git Product home page Git Product logo

react-infinite-calendar's Introduction

React Infinite Calendar

npm version downloads build coverage bitHound Overall Score license XO code style Gitter

Examples available here: http://clauderic.github.io/react-infinite-calendar/

Features

  • Infinite scroll – Just keep scrollin', just keep scrollin'
  • Flexible – Min/max date, disabled dates, disabled days, etc.
  • Localization and translation – En français, s'il vous plaît!
  • Customizeable – Customize and theme to your heart's content.
  • Keyboard support – ⬆️ ⬇️ ⬆️ ⬇️ ⬅️ ➡️ ⬅️ ➡️ ↩️
  • Events and callbacks – beforeSelect, onSelect, onScroll, yadda yadda yadda.
  • Mobile-friendly

And mucho, mucho mas 🎉

Installation

Using npm:

$ npm install react-infinite-calendar --save

Then, using a module bundler that supports either CommonJS or ES2015 modules, such as webpack:

// Using an ES6 transpiler like Babel
import InfiniteCalendar from 'react-infinite-calendar';
import 'react-infinite-calendar/styles.css'; // Make sure to import the default stylesheet

// Not using an ES6 transpiler
var InfiniteCalendar = require('react-infinite-calendar');
require('react-infinite-calendar/styles.css');

Alternatively, an UMD build is also available:

<link rel="stylesheet" href="react-infinite-calendar/styles.css">
<script src="react-infinite-calendar/dist/umd/react-infinite-calendar.js"></script>

Usage

Basic Example

import React from 'react';
import { render } from 'react-dom';
import InfiniteCalendar from 'react-infinite-calendar';
import 'react-infinite-calendar/styles.css'; // only needs to be imported once

// Render the Calendar
var today = new Date();
var minDate = Number(new Date()) - (24*60*60*1000) * 7; // One week before today

render(
  <InfiniteCalendar
    width={400}
    height={600}
    selectedDate={today}
    disabledDays={[0,6]}
    minDate={minDate}
    keyboardSupport={true}
  />,
  document.getElementById('root')
);

For more usage examples, see http://clauderic.github.io/react-infinite-calendar/

Prop Types

Property Type Default Description
selectedDate Date or Boolean new Date() Value of the date that appears to be selected. Supports any input format supported by moment.js. Set to false if you don't wish to have a date initially selected.
min Date new Date(1980,0,1) The minimum month that can be scrolled to. Supports any input format supported by moment.js
max Date new Date(2050,11,31) The maximum month that can be scrolled to. Supports any input format supported by moment.js
minDate Date new Date(1980,0,1) The minimum date that is selectable. Supports any input format supported by moment.js
maxDate Date new Date(2050,11,31) The maximum date that is selectable. Supports any input format supported by moment.js
locale Object See default locale By default, React Infinite Calendar comes with the English locale strings. You can use this to change the language, or change the first day of the week. See moment.js documentation for more details
theme Object See default theme Basic customization of the colors
width Number or String 400 Width of the calendar. Use number for pixel width, string for percentage, for example: width={400} or width={'80%'}
height Number 600 Height of the calendar
rowHeight Number 56 Height of each row in the calendar (each week is considered a row)
className String Optional CSS class name to append to the root InfiniteCalendar element.
overscanMonthCount Number 4 Number of months to render above/below the visible months. Tweaking this can help reduce flickering during scrolling on certain browers/devices.
disabledDays Array of Numbers Array of days of the week that should be disabled. For example, to disable Monday and Sunday: [0, 6]
disabledDates Array of Dates Array of arbitrary dates that should be disabled. Supports any input format supported by moment.js. For example: ['2016-01-08', new Date(), '20160520', {year: 2015, month: 03, day: 15}]
beforeSelect Function Callback invoked before the state is mutated. Can be used to prevent the state from being changed by returning false. Example: function(date) { return true / false; }
onSelect Function Callback invoked after beforeSelect() returns true, but before the state of the calendar updates
afterSelect Function Callback invoked after the state of the calendar has sucessfully been updated
onScroll Function Callback invoked when the scroll offset changes. function (scrollTop: number) {}
onScrollEnd Function Callback invoked 150ms after the last onScroll event is triggered. function (scrollTop: number) {}
keyboardSupport Boolean true Keyboard support (left, right, up, down, enter)
autoFocus Boolean true Whether the Calendar root should be auto-focused when it mounts. This is useful when keyboardSupport is enabled (the calendar must be focused to listen for keyboard events)
tabIndex Number 1 Tab-index of the calendar
layout String 'portrait' Layout of the calendar. Should be one of 'portrait' or 'landscape'
showHeader Boolean true Show/hide the header
shouldHeaderAnimate Boolean true Enable/Disable the header animation
showOverlay Boolean true Show/hide the month overlay when scrolling
showTodayHelper Boolean true Show/hide the floating back to Today helper

Dependencies

React Infinite Calendar has few dependencies. It relies on the great work done by react-virtualized/VirtualScroll for handling virtual scrolling logic and Moment.js for handling date manipulation. It also has the following peer dependencies: react, react-dom, react-addons-shallow-compare, and react-addons-css-transition-group.

Contributions

Yes please! Feature requests / pull requests are welcome.

Made with ❤︎ in the heart of Montreal.

react-infinite-calendar's People

Contributors

clauderic avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.