1.0.2 • Published 5 years ago

boring-datepicker v1.0.2

Weekly downloads
3
License
ISC
Repository
github
Last release
5 years ago

boring-datepicker

Styleable datepicker utilizing the native <input type="date">

Features:

  • Light-weight, no dependencies
  • Includes optional React-component
  • Supports datetime strings (only replaces date-portion upon change)
  • Simple styling, with BEM classes

Browser support

Supported:

  • Chrome
  • Firefox
  • Edge
  • Safari iOS

Not supported (datepicker is hidden):

  • Safari MacOS
  • IE

Usage

Vanilla JS

const BoringDatepicker = require('boring-datepicker');
const picker = new BoringDatepicker({
  onChange: (newValue) => {
    console.log(newValue);
  },
});
someElement.appendChild(picker.element);

See API.

React

const BoringDatepicker = require('boring-datepicker/src/react');
const SomeComponent = () => {
  const [date, setDate] = useState('2020-11-01');
  return (
    <BoringDatepicker value={date} onChange={(newValue) => setDate(newValue)} />
  );
};

See React API.

API

class BoringDatepicker

constructor(options)

options is an object with the following properties:

options.onChange

type: function default: (value) => {}

Callback function which is called when the user selects a new date.

Receives the new value as string (e.g. "2020-11-01" or "2020-11-01 13:15:00"; just the date-portion of the original value is replaced).

options.existingElement

type: DOMElement default: null

If set, existing element will be used instead of creating a new span element.

options.win

type: Window default: window

For the rare use case (e.g. using inside a child iframe) when setting window is necessary.

setValue(dateString)

Set the value of the datepicker.

dateString should be a string containing a date in YYYY-MM-DD format. For example, all of these are valid:

  • "2020-11-01"
  • "2020-11-01 13:15:00"
  • "2020-11-01T13:15:00"

Upon changes, BoringDatepicker will replace the date-portion of the string and return the result.

element

Contains a reference to the datepicker element.

React API

BoringDatepicker component

Props:

<BoringDatepicker
  value={date}
  onChange={(newValue) => {}}
  className="customClassName"
>
  {optionalChildren}
</BoringDatepicker>

props.value

type: string default: ""

Initial value. Examples:

  • value="2020-11-01"
  • value="2020-11-01 13:15:00"
  • value="2020-11-01T13:15:00"

props.onChange

type: function default: (value) => {}

Callback function which is called when the user selects a new date.

Receives the new value as string (e.g. "2020-11-01" or "2020-11-01 13:15:00"; just the date-portion of the original value is replaced).

props.className

type: string default: ""

Custom className for the created element.

Example with className="CustomClass":

<span class="BoringDatepicker CustomClass">
  <input class="BoringDatepicker__input" type="date" />
</span>

optionalChildren

If children are given, they are inserted into the resulting DOM. This can be used for any styling needs.

Example:

<span class="BoringDatepicker">
  <!-- Children will be inserted here -->
  <input class="BoringDatepicker__input" type="date" />
</span>

Styling / DOM structure

The following DOM is created for each datepicker:

<span class="BoringDatepicker">
  <input class="BoringDatepicker__input" type="date" />
</span>

The recommended way to style the datepicker is to apply styles (e.g. width/height and a background-image) to the topmost element. Example:

.BoringDatepicker {
  width: 16px;
  height: 16px;
  background: transparent url(...) no-repeat center center;
}

Note: under normal circumstances you should not add any styles to .BoringDatepicker__input!

Development

Source files reside in src/. They should be remain valid ES5 code (they are not precompiled in any way).

License

ISC