Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/BelkaLab/react-yearly-calendar
React.js Yearly Calendar Component
https://github.com/BelkaLab/react-yearly-calendar
Last synced: about 2 months ago
JSON representation
React.js Yearly Calendar Component
- Host: GitHub
- URL: https://github.com/BelkaLab/react-yearly-calendar
- Owner: BelkaLab
- License: mit
- Archived: true
- Fork: true (hanse/react-calendar)
- Created: 2015-11-12T08:09:19.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2020-11-13T08:59:35.000Z (about 4 years ago)
- Last Synced: 2024-09-19T07:42:42.268Z (3 months ago)
- Language: JavaScript
- Homepage:
- Size: 2.77 MB
- Stars: 551
- Watchers: 18
- Forks: 71
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-react-components-all - react-yearly-calendar - React.js Yearly Calendar Component. (Uncategorized / Uncategorized)
- awesome-react-components - react-yearly-calendar - React.js Yearly Calendar Component. (UI Components / Form Components)
- awesome-react - react-yearly-calendar - React.js Yearly Calendar Component. ![](https://img.shields.io/github/stars/BelkaLab/react-yearly-calendar.svg?style=social&label=Star) (UI Components / Form Components)
- awesome-list - react-yearly-calendar - React.js Yearly Calendar Component. (Demos / Form Components)
- awesome-react-components - react-yearly-calendar - React.js Yearly Calendar Component. (UI Components / Form Components)
- awesome-react-components - react-yearly-calendar - React.js Yearly Calendar Component. (UI Components / Form Components)
README
# React-yearly-calendar
[React](https://facebook.github.io/react/) calendar component with yearly view.
[![npm version](https://badge.fury.io/js/react-yearly-calendar.svg)](https://badge.fury.io/js/react-yearly-calendar)
![Alt text](https://img.shields.io/badge/license-MIT-green.svg?style=flat)```bash
$ npm install react-yearly-calendar
```# Demo
**[http://belkalab.github.io/react-yearly-calendar/](https://belkalab.github.io/react-yearly-calendar)**![http://belkalab.github.io/react-yearly-calendar/](examples/screen.png)
Or taste an example usage below:
```js
var ReactDOM = require('react-dom');
var {Calendar, CalendarControls} = require('react-yearly-calendar');function onDatePicked(date) {
alert(date);
}ReactDOM.render(
,
document.getElementById('calendar')
);
```## Options
#### Calendar
| Prop | Type | Description | Default |
|------|------|-------------|---------|
| **year** | React.PropTypes.number.isRequired | year to be displayed | current year |
| selectedDay | moment.js object | selected day | today |
| forceFullWeeks | React.PropTypes.bool | match calendar row end with row start | false |
| showDaysOfWeek | React.PropTypes.bool | show table header with days of week | true |
| showWeekSeparators | React.PropTypes.bool | shows a blank column between one week and another | true |
| firstDayOfWeek | React.PropTypes.number | select first day of week | 0 (Sunday) |
| selectRange | React.PropTypes.bool | enable selecting ranges | false |
| selectedRange | `[moment.js obj, moment.js obj]` | selected range of dates in the form `[start, end]` | |
| customClasses | React.PropTypes.object, React.PropTypes.func | custom days/periods coloring (see section below) | |
| titles | React.PropTypes.func | function mapping dates to html titles | |#### CalendarControls
| Prop | Type | Description | Default |
|------|------|-------------|---------|
| **year** | React.PropTypes.number.isRequired | current year number | current year |
| showTodayButton | React.PropTypes.bool | show *Today* button on top left | true |## Callbacks
#### Calendar
| Prop | Type | Syntax | Description |
|------|------|--------|-------------|
| onPickDate| React.PropTypes.func | function(selectedDay, dayClasses) {} | called when user clicks on a day. `dayClasses` is a string representing the classes applied to that day |
| onPickRange| React.PropTypes.func | function(rangeStart, rangeEnd) {} | called when user selects a range of dates (only in `selectRange` mode) |#### CalendarControls
| Prop | Type | Syntax | Description |
|------|------|--------|-------------|
| onPrevYear| React.PropTypes.func | function() {} | called on user clicking `«` (*previous year button*) |
| onNextYear| React.PropTypes.func | function() {} | called on user clicking `»` (*next year button*) |
| goToToday| React.PropTypes.func | function() {} | called on user clicking the `today` button |## Styling guide
The calendar is rendered as an html `table` element, to ensure proper displaying even in case the style isn't being loaded.Take a look at the css file in [`examples/basic/src/style.css`](https://github.com/BelkaLab/react-yearly-calendar/blob/master/examples/basic/src/style.css). Here are some head-ups if you want to style it yourself.
- `table.calendar`: the main element that renders the calendar
- `table.calendar thead`: renders the week day names
- `table.calendar thead th.bolder`: adds `bolder` class to Sundays
- `table.calendar td.month-name`: first column in table body, showing month names
- `table.calendar td.prev-month`, `table.calendar td.next-month`: classes applied to the days of the previous and next month showed in a month's row to fill it up. Day numbers and callbacks are present even in these cells, so we suggest to play with text color to make days less intrusive and add `pointer-events: none` to prevent clicking.
- `table.calendar td.week-separator`: class applied to table cells used to separate one week from another. As above, `pointer-events: none` is suggested
- `table.calendar td.selected`: the currently selected day
- `table.calendar td.bolder`: the days which are Sundays
- `table.calendar td.range`: the days in the selected range
- `table.calendar td.range-left`, `table.calendar td.range-right`: the left and right boundaries of the selected range
____- `div.calendar-controls`: the main CalendarControls container
- `div.calendar-controls .current-year`: the current year
- `div.calendar-controls .controls`: applies to *next* and *previous* arrows and to *today* button
- `div.calendar-controls .today`: the *today* button### Responsive
A first attempt at making this design responsive can be seen [here](https://belkalab.github.io/react-yearly-calendar/responsive/) (window width < 1200px triggers mobile layout). Suggestions and feedback on this are welcome [on issue #10](https://github.com/BelkaLab/react-yearly-calendar/issues/10)
## Custom days/periods colors
By passing the `customClasses` prop, you can have a fine control on which CSS classes are assigned to each day.
- `customClasses` can be a function accepting a *moment* object as a parameter, giving back the css class to be applied to the given day.
```js
const customClasses = day => ( day.isBefore( moment([day.year(),2,21]) ) || day.isAfter( moment([day.year(),11,21]) ) ) ? 'cheap low-season': 'expensive high-season'
```- If `customClasses` is an object, the Calendar will use the keys as css classes and the values as rules to apply them.
- if the value is **an array** of strings in the form `YYYY-MM-DD`, those days will be given the css class. Useful for **single days**, like holidays!
- if the value is **an object** with a `start` and an `end` value (still in the `YYYY-MM-DD` form), the days in that **period** will be given the css class. Nice for seasons!
- if the value is **a string** of comma-separated, three-letter weekdays names in the form `"ddd,ddd"`, the class will be given to the **days of the week** appearing on the string. Great for closing days during the week!
- if the value is **a function** returning a boolean value, the class will be assigned using the function itself as a test. A must have for the finest tuning!Confused? see the snippet below or try it yourself with this [interactive example](http://belkalab.github.io/react-yearly-calendar/custom_classes/)!
```js
const customCSSclasses = {
holidays: [
'2018-04-25',
'2018-05-01',
'2018-06-02',
'2018-08-15',
'2018-11-01'
],
spring: {
start: '2018-03-21',
end: '2018-6-20'
},
summer: {
start: '2018-06-21',
end: '2018-09-22'
},
autumn: {
start: '2018-09-23',
end: '2018-12-21'
},
weekend: 'Sat,Sun',
winter: day => day.isBefore( moment([2018,2,21]) ) || day.isAfter( moment([2018,11,21]))
}
```## Build it yourself
Clone and run
```bash
$ npm install
```## License
react-yearly-calendar is Copyright (c) 2016-2020 Belka s.r.l.It is free software, and may be redistributed under the terms specified in the LICENSE file (TL;DR: **MIT license**).
## About Belka
[Belka](https://belkadigital.com) is a Digital Agency focused on design, mobile applications development and custom solutions.
We love open source software! You can [see our projects](https://belkadigital.com/case-studies) or look at our case studies.Interested? [Hire us](https://belkadigital.com/contacts) to help you build your next amazing project.
[www.belkadigital.com](https://belkadigital.com)