A versatile, configurable and responsive timetable component for React. Ideal for showing the agenda for locations on a specific date.
- Items can contain a
cancelled
property - Items starting before or ending after the timetable scope are now included
- Increased configurability of the timetable style and its locations and items
- The current time indicator can be hidden by setting
showTimeMarker
to false - Fixed the horizontal scrollbar which was hidden, so mouse-only users couldn't scroll horizontally
- The display format of the dates is now configurable through
dateFormat
npm i ftr-timetable
import {
TimeTable,
type TimeTableItem,
type TimeTableLocation,
type TimeTableRenderedItem,
} from "ftr-timetable";
interface EventData {
type?: string;
category?: string;
isFree: boolean;
}
const locations: TimeTableLocation[] = [
{
id: "1",
name: "Mainstage",
items: [
{
id: "4",
name: "Event included in location",
startDate: "2024-05-05T16:00:00+02:00",
endDate: "2024-05-05T18:00:00+02:00",
data: {
isFree: true,
},
},
],
},
{
id: "2",
name: "Garden",
},
];
const items: TimeTableItem[] = [
{
id: "1",
name: "Main event",
info: "Don't miss it!",
locationId: "1",
startDate: "2024-05-05T10:00:00+02:00",
endDate: "2024-05-05T15:00:00+02:00",
},
{
id: "2",
name: "Violin concert",
locationId: "2",
startDate: "2024-05-05T08:00:00+02:00",
endDate: "2024-05-05T12:00:00+02:00",
cancelled: true,
data: {
type: "Music",
category: "Classical",
isFree: true,
},
},
{
id: "3",
name: "Day 2 Main event",
locationId: "1",
startDate: "2024-05-06T10:00:00+02:00",
endDate: "2024-05-06T15:00:00+02:00",
},
];
const onItemClicked = (item: TimeTableRenderedItem<EventData>) => {
console.log("Item clicked: ", item, `Free: ${item.data?.isFree || false}`);
};
return (
<TimeTable
items={items}
variant="horizontal"
locations={locations}
onItemClick={onItemClicked}
styles={{
backgroundColor: "transparent",
dateBackgroundColor: "ivory",
locationBackgroundColor: "beige",
textColor: "#000",
borderStyle: "solid 1px #ccc",
itemBackgroundColor: "burlywood",
itemHoverBackgroundColor: "darkkhaki",
itemTextColor: "#fff",
}}
/>
);
Options
Option | Type | Required | Default | Description |
---|---|---|---|---|
locations | TimeTableLocation[] | yes | The locations to show in the timetable | |
items | TimeTableItem[] | no | [] | The events to show in the timetable |
variant | string | no | horizontal | The display style of the timetable. Can be horizontal or vertical . Defaults to vertical when unspecified and there is only 1 location |
dates | string[] | no | Predefined dates to choose from. The first date will be selected by default. The format needs to be yyyy-MM-dd
|
|
startingHour | number | no | 6 | Starting hour of a day |
numberOfHours | number | no | 24 | Number of hours to display for a single day |
styles | TimeTableStyles | no | Custom styling to apply to the timetable | |
onDateChange | function(date: string) | no | Callback function when the date is changed. Returns the selected date as yyyy-MM-dd
|
|
onItemClick | function(item: TimeTableRenderedItem<T> ) => void |
no | Callback function when an item is clicked | |
onLocationClick | function(item: TimeTableLocation ) => void |
no | Callback function when a location is clicked | |
renderItem | function(item: TimeTableRenderedItem<T> ) => React.ReactNode |
no | Custom rendering of items | |
renderLocation | function(item: TimeTableLocation ) => React.ReactNode |
no | Custom rendering of locations | |
dateFormat | string | no | eee dd MMMM | Date format of the date picker. Guide |
showTimeMarker | boolean | no | true | Show or hide the current time marker |
Options
Option | Type | Required | Default | Description |
---|---|---|---|---|
id | string / number | yes | Location ID | |
name | string | yes | Location name | |
items | TimeTableItem[] | no | Event items for the location | |
style | React.CSSProperties |
no | Custom style for the location |
Options
Option | Type | Required | Default | Description |
---|---|---|---|---|
id | string / number | yes | Item ID | |
name | string | yes | Item name | |
info | string | no | Item extra info | |
startDate | Date / string | yes | Item start date | |
endDate | Date / string | yes | Item end date | |
data | {} | no | Optional extra data. Useful for callbacks | |
style | React.CSSProperties |
no | Custom style for the item | |
cancelled | boolean | no | false | Shows the item as cancelled |
Options
Option | Type | Default | Description |
---|---|---|---|
backgroundColor | string | #1f2937 | Background color |
borderStyle | string | solid 2px #374151 | CSS Border style, specify "none" to remove borderStyle |
dateBackgroundColor | string | #1f2937 | Background color of the date and hours. Avoid using "transparent" |
dateTextColor | string | inherit | Text color of the date and hours |
datePickerBackgroundColor | string | #1f2937 | Background of the date picker |
itemBackgroundColor | string | #304151 | Background color of an item |
itemHoverBackgroundColor | string | #374151 | Background color of an item on hover |
itemTextColor | string | inherit | Text color of an item |
locationBackgroundColor | string | #000 | Background color of a location |
locationTextColor | string | inherit | Text color of a location |
textColor | string | #fff | General text color used in the timetable |
timeMarkerColor | string | #666 | Color of the current time indicator |