2.3.1 • Published 3 years ago

date-slot-picker v2.3.1

Weekly downloads
4
License
MIT
Repository
github
Last release
3 years ago

Datetime Slot Picker

This is a Web Component for Date and Time Slot Picker. This project is a standalone Web Component built using StencilJS.

You have to pass in dates and time slots that you want to display.

When "timeSlots" is not passed, the component acts as a pure date picker.

This date and time slot picker is useful for below cases:

  • If you have a set of dates that alone should be available for user input
  • If you also want to display a custom time slot along with the date, eg: Sat, 28 Nov 2020, 10 AM - 11 AM.
  • Useful for appointment booking, choosing a delivery time, restaurant reservation, etc.
  • Supports multi language translations. You can pass your own translations and display text.
  • Supports displaying time slots in multiple formats: Eg: 4 PM, 4:00 PM, 16:00, 4 PM - 5 PM, 4:00 PM - 5:00 PM, 16:00 - 17:00.

Usage and Live Demo

View JS Bin

Using the component in HTML

The properties are optional, you can use them to pass custom text.

<datetime-slot-picker 
      placeholder="Pick a time slot" 
      time-slots-text="Time"
      no-slots-text="No slots are available"
      >
</datetime-slot-picker>

To display time slots in HH:mm format, pass the "time-format" property. The "dates-hidden-when-times-shown" property can be used if you would like to make the popup more compact, when time slots are shown the date calendar will be hidden.

<datetime-slot-picker 
      placeholder="Pick a time slot" 
      time-slots-text="Time"
      no-slots-text="No slots are available" 
      time-format="HH:mm"
      dates-hidden-when-times-shown
      >
</datetime-slot-picker>

Initializing slots & listening to slot changes in Javascript

Add the below code inside in your HTML. Ensure the input date and time format is as stated below.

Supported input date format:

  • ddd, D MMM YYYY (Thu, 26 Nov 2020)

Supported input time formats: (Pick a format and all time slots should be the same format)

  • H A (10 AM)
  • H:mm A (10:00 AM)
  • H A - H A (10 AM - 11 AM)
  • H:mm A - H:mm A (10:00 AM - 11:00 AM)
    const datetimeSlotPicker = document.querySelector('datetime-slot-picker');
    datetimeSlotPicker.addEventListener('slotUpdate', function(event){ console.log('Updated Slot: ', event.detail) });
    datetimeSlotPicker.slots = [
        {
            date: 'Thu, 26 Nov 2020',
            timeSlots: [
            '10:00 AM',
            '11:00 AM',
            '4:00 PM',
            '5:00 PM'
            ]
        },
        {
            date: 'Fri, 27 Nov 2020',
            timeSlots: [
            '10:00 AM',
            '11:00 AM',
            '4:00 PM',
            '5:00 PM'
            ]
        }
    ];

If you are passing translations (using Javascript as shown below), you can set the language code

<datetime-slot-picker 
      placeholder="Pick a time slot" 
      time-slots-text="Time"
      no-slots-text="No slots are available" 
      language="en"
      >
</datetime-slot-picker>

To pass translations, also set the translations property as shown below. You can have multiple langage codes like "en".

    const datetimeSlotPicker = document.querySelector('datetime-slot-picker');
    datetimeSlotPicker.addEventListener('slotUpdate', function(event){ console.log('Updated Slot: ', event.detail) });
    datetimeSlotPicker.slots = [
        {
            date: 'Thu, 26 Nov 2020',
            timeSlots: [
            '10 AM - 11 AM',
            '11 AM - 12 PM',
            '4 PM - 5 PM',
            '5 PM - 6 PM'
            ]
        },
        {
            date: 'Fri, 27 Nov 2020',
            timeSlots: [
            '10 AM - 11 AM',
            '11 AM - 12 PM',
            '4 PM - 5 PM',
            '5 PM - 6 PM'
            ]
        }
    ];
    datetimeSlotPicker.translations = {
        en: {
            Mon: 'Mon',
            Tue: 'Tue',
            Wed: 'Wed',
            Thu: 'Thu',
            Fri: 'Fri',
            Sat: 'Sat',
            Sun: 'Sun',
            AM: 'AM',
            PM: 'PM',
            Jan: 'Jan',
            Feb: 'Feb',
            Mar: 'Mar',
            Apr: 'Apr',
            May: 'May',
            Jun: 'Jun',
            Jul: 'Jul',
            Aug: 'Aug',
            Sep: 'Sep',
            Oct: 'Oct',
            Nov: 'Nov',
            Dec: 'Dec'
        }
    };

Using this component

There are three strategies we recommend for using web components built with Stencil.

Script tag

  • Put a script tag similar to this <script src='https://unpkg.com/datetime-slot-picker/dist/datetime-slot-picker/datetime-slot-picker.js'></script> in the head of your index.html
  • Then you can use the element anywhere in your template, JSX, html etc

Node Modules

  • Run npm install datetime-slot-picker --save
  • Put a script tag similar to this <script src='node_modules/datetime-slot-picker/dist/datetime-slot-picker/datetime-slot-picker.js'></script> in the head of your index.html
  • Then you can use the element anywhere in your template, JSX, html etc

In a stencil-starter app

  • Run npm install datetime-slot-picker --save
  • Add an import to the npm packages import datetime-slot-picker;
  • Then you can use the element anywhere in your template, JSX, html etc

Customizing Appearance

You can customize the styling by using CSS. All HTML elemets have a class name (usually starting with "neo", Eg: "neo-input") that can be used.

Developers

To run the project locally, run:

gh repo clone cyberabis/datetime-slot-picker
cd datetime-slot-picker
npm install
npm start

To build the component for production, run:

npm run build

The scripts will be generated under dist/datetime-slot-picker. The whole folder needs to be served, datetime-slot-picker.js acts as the entry point that's included in HTML.

NPM Repository

https://www.npmjs.com/package/datetime-slot-picker

Raising issues / getting help?

Please use the GitHub issue tracker - https://github.com/cyberabis/datetime-slot-picker/issues.

2.3.1

3 years ago

2.3.0

3 years ago

2.2.9

3 years ago

2.2.8

3 years ago

2.2.7

3 years ago

2.2.6

3 years ago

2.2.5

3 years ago

2.2.4

3 years ago

2.2.3

3 years ago

2.2.1

3 years ago

2.2.2

3 years ago

2.2.0

3 years ago

2.1.9

3 years ago

2.1.8

3 years ago

2.1.7

3 years ago

2.1.6

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.5

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.0.9

3 years ago

2.0.10

3 years ago

2.0.8

3 years ago

2.1.0

3 years ago

2.0.7

3 years ago

2.0.6

3 years ago

2.0.5

3 years ago

2.0.3

3 years ago

2.0.2

3 years ago

2.0.4

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

0.1.9

3 years ago

0.1.8

3 years ago