npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@lightspeed/cirrus-datepicker

v1.3.2

Published

Cirrus Datepicker Component

Downloads

991

Readme

Cirrus Date Picker

For all things Date and Time.

See story on how to use.

TODO

  • [ ] RTL support
  • [ ] Support different start of week
  • [ ] DateRange with only 1 month calendar
  • [ ] An actual TimePicker component

Installation

First, make sure you have been through the install steps steps required to add Flame in your application. Although it's not required to have Flame installed to use Logo, you will need to install its peer dependencies.

If using Yarn:

yarn add @lightspeed/cirrus-datepicker

Or using npm:

npm i -S @lightspeed/cirrus-datepicker

Usage

Components

<DateRange>

| Prop | Type | Description | | --------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | startDate | Date | Javascript Date representing the initially selected start date | | endDate | Date | Javascript Date representing the initially selected end date | | isDateBlocked | (Date) => boolean | Callback function used for determining whether or not a date should be blocked | | onSubmit | ({ startDate:Date, endDate:Date }) => void | Callback function when clicking on the "apply" button. The selected start and end date will be sent back if all is valid | | presetDates | Array<{label: string, startDate: Date, endDate: Date}> | List of preset dates. By adding this, a small menu will be created within the calendar to automatically select the start and end date. You may add an empty object, which will automatically create a divider | | dateFormat | String | A Luxon compatible string format | | translations | Object | A key value pairing for forwarding translated messages. See the Translation section for further details. | | locale | String | Valid language locale, e.g: 'en-fr', 'en-us'. Changing this parameter will adjust some dateFormat outputs to match the target locale |

Translations

When adding translations to the DateRange, it is important to use the right translation key for the component to pick up the string.

Here is a sample translation object:

{
  START_DATE_NOT_DEFINED: 'The start date is not defined',
  END_DATE_NOT_DEFINED: 'The end date is not defined',
  START_DATE_FORMAT_NOT_VALID: 'The start date is not valid',
  END_DATE_FORMAT_NOT_VALID: 'The end date is not valid',
  START_DATE_MUST_BE_BEFORE_END_DATE: 'The start date should be before the end date',
  END_DATE_MUST_BE_AFTER_START_DATE: 'The end date should be after the start date',
  START_DATE_NOT_WITHIN_RANGE: 'The start date is not within the accepted range',
  END_DATE_NOT_WITHIN_RANGE: 'The end date is not within the accepted range',
  APPLY: 'Apply',
  DAY_TITLE_FREE: (date: any) => `Choose: ${date}`,
  DAY_TITLE_SELECTED: (date: any) => `Selected. ${date}`,
  // This field is optional and will default to the dateFormat
  START_DATE_INPUT_PLACEHOLDER: 'yyyy/MM/dd';
  // This field is optional and will default to the dateFormat
  END_DATE_INPUT_PLACEHOLDER: 'yyyy/MM/dd';
}
Example Usage
import { DateRange } from '@lightspeed/cirrus-datepicker';

const translations = {
  // ...
};

const App = () => {
  const [dates, setDates] = useState({
    startDate: new Date(2019, 6, 21),
    endDate: new Date(2019, 6, 27),
  });

  return (
    <DateRange
      startDate={dates.startDate}
      endDate={dates.endDate}
      dateFormat="yyyy/MM/dd"
      translations={translations}
      onSubmit={dates => {
        console.log(dates);
      }}
    />
  );
};
Example Usage - With Presets
import { DateRange, createWeekPreset, createMonthPreset } from '@lightspeed/cirrus-datepicker';

const translations = {
  // ...
};

const lastWeek = createWeekPreset({ label: 'Last week', amountOfWeeks: 1, relativeStart: -1 });
const thisWeek = createWeekPreset({ label: 'This week', amountOfWeeks: 1 });

const App = () => {
  const [dates, setDates] = useState({
    startDate: new Date(2019, 6, 21),
    endDate: new Date(2019, 6, 27),
  });

  return (
    <DateRange
      startDate={dates.startDate}
      endDate={dates.endDate}
      dateFormat="yyyy/MM/dd"
      presetDates={[
        {
          label: 'Some Arbitrary Preset',
          startDate: new Date(2019, 6, 28),
          endDate: new Date(2019, 6, 29),
        },
        {
          label: 'Another Preset',
          startDate: new Date(2019, 5, 1),
          endDate: new Date(2019, 5, 14),
        },
        {}, // this makes a separator
        lastWeek,
        thisWeek,
      ]}
      translations={translations}
      onSubmit={dates => {
        console.log(dates);
      }}
    />
  );
};

<DateRangePicker>

| Prop | Type | Description | | --------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | startDate | Date | Javascript Date representing the initially selected start date | | endDate | Date | Javascript Date representing the initially selected end date | | isDateBlocked | (Date) => boolean | Callback function used for determining whether or not a date should be blocked | | onSubmit | ({ startDate:Date, endDate:Date }) => void | Callback function when clicking on the "apply" button. The selected start and end date will be sent back if all is valid | | presetDates | Array<{label: string, startDate: Date, endDate: Date}> | List of preset dates. By adding this, a small menu will be created within the calendar to automatically select the start and end date. You may add an empty object, which will automatically create a divider | | dateFormat | String | A Luxon compatible string format | | target | (targetRef: ref, toggle: () => void, isActive: boolean) => ReactNode | Pass a custom React element as a target | | translations | Object | A key value pairing for forwarding translated messages. See the Translation section for further details. | | locale | String | Valid language locale, e.g: 'en-fr', 'en-us'. Changing this parameter will adjust some dateFormat outputs to match the target locale |

Translations

When adding translations to the DateRangePicker, it is important to use the right translation key for the component to pick up the string.

Here is a sample translation object:

{
  START_DATE_NOT_DEFINED: 'The start date is not defined',
  END_DATE_NOT_DEFINED: 'The end date is not defined',
  START_DATE_FORMAT_NOT_VALID: 'The start date is not valid',
  END_DATE_FORMAT_NOT_VALID: 'The end date is not valid',
  START_DATE_MUST_BE_BEFORE_END_DATE: 'The start date should be before the end date',
  END_DATE_MUST_BE_AFTER_START_DATE: 'The end date should be after the start date',
  START_DATE_NOT_WITHIN_RANGE: 'The start date is not within the accepted range',
  END_DATE_NOT_WITHIN_RANGE: 'The end date is not within the accepted range',
  APPLY: 'Apply',
  DAY_TITLE_FREE: (date: any) => `Choose: ${date}`,
  DAY_TITLE_SELECTED: (date: any) => `Selected. ${date}`,
  // This field is optional and will default to the dateFormat
  START_DATE_INPUT_PLACEHOLDER: 'yyyy/MM/dd';
  // This field is optional and will default to the dateFormat
  END_DATE_INPUT_PLACEHOLDER: 'yyyy/MM/dd';
}
Example Usage
import { DateRangePicker } from '@lightspeed/cirrus-datepicker';

const translations = {
  // ...
};

const App = () => {
  const [dates, setDates] = useState({
    startDate: new Date(2019, 6, 21),
    endDate: new Date(2019, 6, 27),
  });

  return (
    <DateRangePicker
      startDate={dates.startDate}
      endDate={dates.endDate}
      dateFormat="yyyy/MM/dd"
      translations={translations}
      onSubmit={dates => {
        console.log(dates);
      }}
    />
  );
};
Example Usage - With Presets
import {
  DateRangePicker,
  createWeekPreset,
  createMonthPreset,
} from '@lightspeed/cirrus-datepicker';

const translations = {
  // ...
};

const lastWeek = createWeekPreset({ label: 'Last week', amountOfWeeks: 1, relativeStart: -1 });
const thisWeek = createWeekPreset({ label: 'This week', amountOfWeeks: 1 });
const thisMonth = createMonthPreset({ label: 'This month', amountOfMonths: 1 });
const nextMonth = createMonthPreset({ label: 'Next month', amountOfMonths: 1, relativeStart: 1 });

const App = () => {
  const [dates, setDates] = useState({
    startDate: new Date(2019, 6, 21),
    endDate: new Date(2019, 6, 27),
  });

  return (
    <DateRangePicker
      startDate={dates.startDate}
      endDate={dates.endDate}
      dateFormat="yyyy/MM/dd"
      presetDates={[
        {
          label: 'Some Arbitrary Preset',
          startDate: new Date(2019, 6, 28),
          endDate: new Date(2019, 6, 29),
        },
        {
          label: 'Another Preset',
          startDate: new Date(2019, 5, 1),
          endDate: new Date(2019, 5, 14),
        },
        {}, // this makes a separator
        lastWeek,
        thisWeek,
        {},
        thisMonth,
        nextMonth,
      ]}
      translations={translations}
      onSubmit={dates => {
        console.log(dates);
      }}
    />
  );
};

<DatePicker>

| Prop | Type | Description | | --------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | date | Date | Date representing the initially selected start date | | isDateBlocked | (Date) => boolean | Callback function used for determining whether or not a date should be blocked | | onSubmit | ({ date:Date }) => void | Callback function that receives an object containing the startDate end endDate selected | | presetDates | Array<{label:string, startDate: Moment, endDate: Moment}> | List of preset dates. By adding this, a small menu will be created within the calendar to automatically select the start and end date. | | dateFormat | String | Luxon compatible string format | | target | func | Pass a custom React element as a target | | translations | Object | A key value pairing for forwarding translated messages. See the Translation section for further details. | | locale | String | Valid language locale, e.g: 'en-fr', 'en-us'. Changing this parameter will adjust some dateFormat outputs to match the target locale |

Translations

When adding translations to the DatePicker, it is important to use the right translation key for the component to pick up the string.

Here is a sample translation object:

{
  DATE_NOT_DEFINED: 'The date is not defined',
  DATE_NOT_VALID: 'The date is not valid',
  DATE_NOT_WITHIN_RANGE: 'The date is not within the accepted range',
  APPLY: 'Apply Button Text',
  DAY_TITLE_FREE: (date: any) => `Choose: ${date}`,
  DAY_TITLE_SELECTED: (date: any) => `Selected. ${date}`,
  // This field is optional and will default to the dateFormat
  INPUT_PLACEHOLDER: 'yyyy/MM/dd'
}
Example Usage
import { DateRangePicker } from '@lightspeed/cirrus-datepicker';

const translations = {
  // ...
};

const App = () => {
  const [dates, setDates] = useState(new Date(2019, 6, 21));

  return (
    <DatePicker
      date={date}
      dateFormat="yyyy/MM/dd"
      translations={translations}
      onSubmit={values => {
        console.log(values);
      }}
    />
  );
};

createWeekPreset

Helper function to rapidly generate some presets used in the DateRangePicker.

| Prop | Type | Description | | --------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | label | string | Label of the preset | | relativeStart | number | Relative start week based on today's date. By default, the value is set to 0, which represents this week. If we were to put 1, we would be selected next week as our starting week | | amountOfWeeks | number | Amount of weeks to select when starting from the relativeStart. |

const lastWeek = createWeekPreset({ label: 'Last week', amountOfWeeks: 1, relativeStart: -1 });
const thisWeek = createWeekPreset({ label: 'This week', amountOfWeeks: 1 });
const nextWeek = createWeekPreset({ label: 'Next week', amountOfWeeks: 1, relativeStart: 1 });

createMonthPreset

Helper function to rapidly generate some presets used in the DateRangePicker.

| Prop | Type | Description | | ---------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | label | string | Label of the preset | | relativeStart | number | Relative start month based on today's date. By default, the value is set to 0, which represents this month. If we were to put 1, we would be selected next month as our starting month | | amountOfMonths | number | Amount of months to select when starting from the relativeStart |

const lastMonth = createMonthPreset({ label: 'Last month', amountOfMonths: 1, relativeStart: -1 });
const thisMonth = createMonthPreset({ label: 'This month', amountOfMonths: 1 });
const nextMonth = createMonthPreset({ label: 'Next month', amountOfMonths: 1, relativeStart: 1 });

<TimeSelect>

Experimental Component Ahead

| Prop | Type | Description | | ------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------- | | date | Date | Date object we wish to set the time on. By default, sets to Today | | minuteSteps | number | Minute selector increments. e.g: setting this to 5 will result only in minutes with multiples of 5 to be displayed | | format | 12h | 24h | Format of the TimeSelect. By default, 24h is selected | | onChange | (date: Date) => void | Callback function that takes the entry date and returns the same date, but with the time changed |

Example Usage
import { TimeSelect } from '@lightspeed/cirrus-datepicker';

const App = () => {
  return (
    <TimeSelect
      onChange={nextDate => {
        console.log(nextDate);
      }}
    />
  );
};