guestbell-forms 2.0.240 → 2.0.244

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,8 +21,8 @@ export interface BookingCalendarProps<T extends BookingCalendarItemT, TLaneData>
21
21
  step?: Duration;
22
22
  showGrid?: boolean;
23
23
  gridSubdivisions?: number;
24
- lanesCount?: number;
25
- lanesSource?: LaneSourceData<TLaneData>[];
24
+ minLanesCount?: number;
25
+ lanesSource?: LaneSourceData<T, TLaneData>[];
26
26
  BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;
27
27
  BookingCalendarRenderItem?: React.ComponentType<BookingCalendarRenderItemProps<T>>;
28
28
  BookingCalendarLane?: React.ComponentType<BookingCalendarLaneProps<T>>;
@@ -58,7 +58,7 @@ function BookingCalendar(props) {
58
58
  showGrid = _props$showGrid === void 0 ? true : _props$showGrid,
59
59
  _props$gridSubdivisio = props.gridSubdivisions,
60
60
  gridSubdivisions = _props$gridSubdivisio === void 0 ? 1 : _props$gridSubdivisio,
61
- lanesCount = props.lanesCount,
61
+ minLanesCount = props.minLanesCount,
62
62
  lanesSource = props.lanesSource,
63
63
  _props$BookingCalenda = props.BookingCalendarControls,
64
64
  BookingCalendarControls = _props$BookingCalenda === void 0 ? _BookingCalendarControls.BookingCalendarControls : _props$BookingCalenda,
@@ -76,8 +76,8 @@ function BookingCalendar(props) {
76
76
  BookingCalendarDatePicker = _props$BookingCalenda6 === void 0 ? _bookingCalendarDatePicker.BookingCalendarDatePicker : _props$BookingCalenda6;
77
77
 
78
78
  var _React$useMemo = React.useMemo(function () {
79
- return (0, _utils.splitBookingsToLanes)(bookings, from, lanesCount, lanesSource);
80
- }, [bookings, from, lanesCount, lanesSource]),
79
+ return (0, _utils.splitBookingsToLanes)(bookings, from, minLanesCount, lanesSource);
80
+ }, [bookings, from, minLanesCount, lanesSource]),
81
81
  lanes = _React$useMemo.lanes,
82
82
  extraBookings = _React$useMemo.extraBookings;
83
83
 
@@ -105,11 +105,14 @@ function BookingCalendar(props) {
105
105
  step: step,
106
106
  startOfStep: startOfStep
107
107
  }))))), /*#__PURE__*/React.createElement("tbody", null, lanes.map(function (lane, laneIndex) {
108
- var _lane$laneKey;
108
+ var _lane$BookingCalendar, _lane$BookingCalendar2, _lane$laneKey, _lane$BookingCalendar3, _lane$BookingCalendar4;
109
109
 
110
+ var LaneBookingCalendarLaneHeader = (_lane$BookingCalendar = lane.BookingCalendarLaneHeader) !== null && _lane$BookingCalendar !== void 0 ? _lane$BookingCalendar : BookingCalendarLaneHeader;
111
+ var LaneBookingCalendarLane = (_lane$BookingCalendar2 = lane.BookingCalendarLane) !== null && _lane$BookingCalendar2 !== void 0 ? _lane$BookingCalendar2 : BookingCalendarLane;
110
112
  return /*#__PURE__*/React.createElement("tr", {
111
- key: laneIndex
112
- }, /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(BookingCalendarLaneHeader, {
113
+ key: laneIndex,
114
+ className: (0, _classnames.default)(lane.rowClassName)
115
+ }, /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(LaneBookingCalendarLaneHeader, {
113
116
  laneKey: (_lane$laneKey = lane.laneKey) !== null && _lane$laneKey !== void 0 ? _lane$laneKey : laneIndex,
114
117
  data: lane.data
115
118
  })), /*#__PURE__*/React.createElement("td", {
@@ -119,13 +122,13 @@ function BookingCalendar(props) {
119
122
  till: till,
120
123
  step: step,
121
124
  subdivisions: gridSubdivisions
122
- }), /*#__PURE__*/React.createElement(BookingCalendarLane, {
125
+ }), /*#__PURE__*/React.createElement(LaneBookingCalendarLane, {
123
126
  laneIndex: laneIndex,
124
127
  items: lane.items,
125
128
  from: from,
126
129
  till: till,
127
- BookingCalendarItem: BookingCalendarItem,
128
- BookingCalendarRenderItem: BookingCalendarRenderItem,
130
+ BookingCalendarItem: (_lane$BookingCalendar3 = lane.BookingCalendarItem) !== null && _lane$BookingCalendar3 !== void 0 ? _lane$BookingCalendar3 : BookingCalendarItem,
131
+ BookingCalendarRenderItem: (_lane$BookingCalendar4 = lane.BookingCalendarRenderItem) !== null && _lane$BookingCalendar4 !== void 0 ? _lane$BookingCalendar4 : BookingCalendarRenderItem,
129
132
  step: step
130
133
  })));
131
134
  }))));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/components/bookingCalendar/BookingCalendar.tsx"],"names":["defaultStep","defaultStartOfStep","startOf","BookingCalendar","props","bookings","className","laneTdClassName","controlsClasses","tableClassName","from","till","onRangeChange","onExtraBookingsChange","step","startOfStep","showGrid","gridSubdivisions","lanesCount","lanesSource","BookingCalendarControls","DefaultBookingCalendarControls","BookingCalendarItem","BookingCalendarLane","DefaultBookingCalendarLane","BookingCalendarRenderItem","BookingCalendarGrid","DefaultBookingCalendarGrid","BookingCalendarLaneHeader","DefaultBookingCalendarLaneHeader","BookingCalendarLanesHeader","DefaultBookingCalendarLanesHeader","BookingCalendarDatePicker","DefaultBookingCalendarDatePicker","React","useMemo","lanes","extraBookings","useEffect","bookingCalendarDefaultClasses","map","lane","laneIndex","laneKey","data","items"],"mappings":"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","sourcesContent":["import * as React from 'react';\r\nimport {\r\n BookingCalendarClasses,\r\n bookingCalendarDefaultClasses,\r\n} from './classes';\r\nimport classNames from 'classnames';\r\nimport { BookingCalendarDateRange, BookingCalendarItemT } from './common';\r\nimport {\r\n BookingCalendarControls as DefaultBookingCalendarControls,\r\n BookingCalendarControlsProps,\r\n} from './bookingCalendarControls/BookingCalendarControls';\r\nimport { LaneSourceData, splitBookingsToLanes } from './utils';\r\nimport {\r\n BookingCalendarLane as DefaultBookingCalendarLane,\r\n BookingCalendarLaneProps,\r\n} from './bookingCalendarLane/BookingCalendarLane';\r\nimport { Moment, Duration, duration } from 'moment';\r\nimport { BookingCalendarItemProps } from './bookingCalendarItem';\r\nimport { BookingCalendarRenderItemProps } from './bookingCalendarRenderItem';\r\nimport {\r\n BookingCalendarGrid as DefaultBookingCalendarGrid,\r\n BookingCalendarGridProps,\r\n} from './bookingCalendarGrid/BookingCalendarGrid';\r\nimport {\r\n BookingCalendarLaneHeader as DefaultBookingCalendarLaneHeader,\r\n BookingCalendarLaneHeaderProps,\r\n} from './bookingCalendarLaneHeader';\r\nimport {\r\n BookingCalendarLanesHeader as DefaultBookingCalendarLanesHeader,\r\n BookingCalendarLanesHeaderProps,\r\n} from './bookingCalendarLanesHeader';\r\nimport {\r\n BookingCalendarDatePicker as DefaultBookingCalendarDatePicker,\r\n BookingCalendarDatePickerProps,\r\n} from './bookingCalendarDatePicker';\r\nimport moment from 'moment';\r\n\r\nexport interface BookingCalendarProps<\r\n T extends BookingCalendarItemT,\r\n TLaneData\r\n> extends BookingCalendarClasses {\r\n bookings: T[];\r\n from: Moment;\r\n till: Moment;\r\n onRangeChange?: (range: BookingCalendarDateRange) => void;\r\n onExtraBookingsChange?: (extraBookings: T[]) => void;\r\n startOfStep?: Moment;\r\n step?: Duration;\r\n showGrid?: boolean;\r\n gridSubdivisions?: number;\r\n lanesCount?: number;\r\n lanesSource?: LaneSourceData<TLaneData>[];\r\n\r\n BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;\r\n BookingCalendarRenderItem?: React.ComponentType<\r\n BookingCalendarRenderItemProps<T>\r\n >;\r\n BookingCalendarLane?: React.ComponentType<BookingCalendarLaneProps<T>>;\r\n BookingCalendarControls?: React.ComponentType<\r\n BookingCalendarControlsProps<T>\r\n >;\r\n BookingCalendarGrid?: React.ComponentType<BookingCalendarGridProps>;\r\n BookingCalendarLaneHeader?: React.ComponentType<\r\n BookingCalendarLaneHeaderProps<TLaneData>\r\n >;\r\n BookingCalendarLanesHeader?: React.ComponentType<\r\n BookingCalendarLanesHeaderProps<T>\r\n >;\r\n BookingCalendarDatePicker?: React.ComponentType<\r\n BookingCalendarDatePickerProps<T>\r\n >;\r\n}\r\n\r\nconst defaultStep = duration(1, 'day');\r\nconst defaultStartOfStep = moment().startOf('day');\r\n\r\nexport function BookingCalendar<T extends BookingCalendarItemT, TLaneData>(\r\n props: BookingCalendarProps<T, TLaneData>\r\n) {\r\n const {\r\n bookings,\r\n className,\r\n laneTdClassName,\r\n controlsClasses,\r\n tableClassName,\r\n from,\r\n till,\r\n onRangeChange,\r\n onExtraBookingsChange,\r\n step = defaultStep,\r\n startOfStep = defaultStartOfStep,\r\n showGrid = true,\r\n gridSubdivisions = 1,\r\n lanesCount,\r\n lanesSource,\r\n BookingCalendarControls = DefaultBookingCalendarControls,\r\n BookingCalendarItem,\r\n BookingCalendarLane = DefaultBookingCalendarLane,\r\n BookingCalendarRenderItem,\r\n BookingCalendarGrid = DefaultBookingCalendarGrid,\r\n BookingCalendarLaneHeader = DefaultBookingCalendarLaneHeader,\r\n BookingCalendarLanesHeader = DefaultBookingCalendarLanesHeader,\r\n BookingCalendarDatePicker = DefaultBookingCalendarDatePicker,\r\n } = props;\r\n const { lanes, extraBookings } = React.useMemo(\r\n () =>\r\n splitBookingsToLanes<T, TLaneData>(\r\n bookings,\r\n from,\r\n lanesCount,\r\n lanesSource\r\n ),\r\n [bookings, from, lanesCount, lanesSource]\r\n );\r\n React.useEffect(() => {\r\n onExtraBookingsChange?.(extraBookings);\r\n }, [extraBookings]);\r\n return (\r\n <div\r\n className={classNames(bookingCalendarDefaultClasses.className, className)}\r\n >\r\n <BookingCalendarControls<T>\r\n {...controlsClasses}\r\n items={bookings}\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n step={step}\r\n />\r\n <table\r\n className={classNames(\r\n bookingCalendarDefaultClasses.tableClassName,\r\n tableClassName\r\n )}\r\n >\r\n <thead>\r\n <tr>\r\n <td>\r\n <BookingCalendarDatePicker\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n />\r\n </td>\r\n <td>\r\n <BookingCalendarLanesHeader<T>\r\n {...controlsClasses}\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n step={step}\r\n startOfStep={startOfStep}\r\n />\r\n </td>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {lanes.map((lane, laneIndex) => (\r\n <tr key={laneIndex}>\r\n <td>\r\n <BookingCalendarLaneHeader<TLaneData>\r\n laneKey={lane.laneKey ?? laneIndex}\r\n data={lane.data}\r\n />\r\n </td>\r\n <td\r\n className={classNames(\r\n bookingCalendarDefaultClasses.laneTdClassName,\r\n laneTdClassName\r\n )}\r\n >\r\n {showGrid && (\r\n <BookingCalendarGrid\r\n from={from}\r\n till={till}\r\n step={step}\r\n subdivisions={gridSubdivisions}\r\n />\r\n )}\r\n <BookingCalendarLane\r\n laneIndex={laneIndex}\r\n items={lane.items}\r\n from={from}\r\n till={till}\r\n BookingCalendarItem={BookingCalendarItem}\r\n BookingCalendarRenderItem={BookingCalendarRenderItem}\r\n step={step}\r\n />\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendar.js"}
1
+ {"version":3,"sources":["../../../src/lib/components/bookingCalendar/BookingCalendar.tsx"],"names":["defaultStep","defaultStartOfStep","startOf","BookingCalendar","props","bookings","className","laneTdClassName","controlsClasses","tableClassName","from","till","onRangeChange","onExtraBookingsChange","step","startOfStep","showGrid","gridSubdivisions","minLanesCount","lanesSource","BookingCalendarControls","DefaultBookingCalendarControls","BookingCalendarItem","BookingCalendarLane","DefaultBookingCalendarLane","BookingCalendarRenderItem","BookingCalendarGrid","DefaultBookingCalendarGrid","BookingCalendarLaneHeader","DefaultBookingCalendarLaneHeader","BookingCalendarLanesHeader","DefaultBookingCalendarLanesHeader","BookingCalendarDatePicker","DefaultBookingCalendarDatePicker","React","useMemo","lanes","extraBookings","useEffect","bookingCalendarDefaultClasses","map","lane","laneIndex","LaneBookingCalendarLaneHeader","LaneBookingCalendarLane","rowClassName","laneKey","data","items"],"mappings":"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","sourcesContent":["import * as React from 'react';\r\nimport {\r\n BookingCalendarClasses,\r\n bookingCalendarDefaultClasses,\r\n} from './classes';\r\nimport classNames from 'classnames';\r\nimport { BookingCalendarDateRange, BookingCalendarItemT } from './common';\r\nimport {\r\n BookingCalendarControls as DefaultBookingCalendarControls,\r\n BookingCalendarControlsProps,\r\n} from './bookingCalendarControls/BookingCalendarControls';\r\nimport { LaneSourceData, splitBookingsToLanes } from './utils';\r\nimport {\r\n BookingCalendarLane as DefaultBookingCalendarLane,\r\n BookingCalendarLaneProps,\r\n} from './bookingCalendarLane/BookingCalendarLane';\r\nimport { Moment, Duration, duration } from 'moment';\r\nimport { BookingCalendarItemProps } from './bookingCalendarItem';\r\nimport { BookingCalendarRenderItemProps } from './bookingCalendarRenderItem';\r\nimport {\r\n BookingCalendarGrid as DefaultBookingCalendarGrid,\r\n BookingCalendarGridProps,\r\n} from './bookingCalendarGrid/BookingCalendarGrid';\r\nimport {\r\n BookingCalendarLaneHeader as DefaultBookingCalendarLaneHeader,\r\n BookingCalendarLaneHeaderProps,\r\n} from './bookingCalendarLaneHeader';\r\nimport {\r\n BookingCalendarLanesHeader as DefaultBookingCalendarLanesHeader,\r\n BookingCalendarLanesHeaderProps,\r\n} from './bookingCalendarLanesHeader';\r\nimport {\r\n BookingCalendarDatePicker as DefaultBookingCalendarDatePicker,\r\n BookingCalendarDatePickerProps,\r\n} from './bookingCalendarDatePicker';\r\nimport moment from 'moment';\r\n\r\nexport interface BookingCalendarProps<\r\n T extends BookingCalendarItemT,\r\n TLaneData\r\n> extends BookingCalendarClasses {\r\n bookings: T[];\r\n from: Moment;\r\n till: Moment;\r\n onRangeChange?: (range: BookingCalendarDateRange) => void;\r\n onExtraBookingsChange?: (extraBookings: T[]) => void;\r\n startOfStep?: Moment;\r\n step?: Duration;\r\n showGrid?: boolean;\r\n gridSubdivisions?: number;\r\n minLanesCount?: number;\r\n lanesSource?: LaneSourceData<T, TLaneData>[];\r\n\r\n BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;\r\n BookingCalendarRenderItem?: React.ComponentType<\r\n BookingCalendarRenderItemProps<T>\r\n >;\r\n BookingCalendarLane?: React.ComponentType<BookingCalendarLaneProps<T>>;\r\n BookingCalendarControls?: React.ComponentType<\r\n BookingCalendarControlsProps<T>\r\n >;\r\n BookingCalendarGrid?: React.ComponentType<BookingCalendarGridProps>;\r\n BookingCalendarLaneHeader?: React.ComponentType<\r\n BookingCalendarLaneHeaderProps<TLaneData>\r\n >;\r\n BookingCalendarLanesHeader?: React.ComponentType<\r\n BookingCalendarLanesHeaderProps<T>\r\n >;\r\n BookingCalendarDatePicker?: React.ComponentType<\r\n BookingCalendarDatePickerProps<T>\r\n >;\r\n}\r\n\r\nconst defaultStep = duration(1, 'day');\r\nconst defaultStartOfStep = moment().startOf('day');\r\n\r\nexport function BookingCalendar<T extends BookingCalendarItemT, TLaneData>(\r\n props: BookingCalendarProps<T, TLaneData>\r\n) {\r\n const {\r\n bookings,\r\n className,\r\n laneTdClassName,\r\n controlsClasses,\r\n tableClassName,\r\n from,\r\n till,\r\n onRangeChange,\r\n onExtraBookingsChange,\r\n step = defaultStep,\r\n startOfStep = defaultStartOfStep,\r\n showGrid = true,\r\n gridSubdivisions = 1,\r\n minLanesCount,\r\n lanesSource,\r\n BookingCalendarControls = DefaultBookingCalendarControls,\r\n BookingCalendarItem,\r\n BookingCalendarLane = DefaultBookingCalendarLane,\r\n BookingCalendarRenderItem,\r\n BookingCalendarGrid = DefaultBookingCalendarGrid,\r\n BookingCalendarLaneHeader = DefaultBookingCalendarLaneHeader,\r\n BookingCalendarLanesHeader = DefaultBookingCalendarLanesHeader,\r\n BookingCalendarDatePicker = DefaultBookingCalendarDatePicker,\r\n } = props;\r\n const { lanes, extraBookings } = React.useMemo(\r\n () =>\r\n splitBookingsToLanes<T, TLaneData>(\r\n bookings,\r\n from,\r\n minLanesCount,\r\n lanesSource\r\n ),\r\n [bookings, from, minLanesCount, lanesSource]\r\n );\r\n React.useEffect(() => {\r\n onExtraBookingsChange?.(extraBookings);\r\n }, [extraBookings]);\r\n return (\r\n <div\r\n className={classNames(bookingCalendarDefaultClasses.className, className)}\r\n >\r\n <BookingCalendarControls<T>\r\n {...controlsClasses}\r\n items={bookings}\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n step={step}\r\n />\r\n <table\r\n className={classNames(\r\n bookingCalendarDefaultClasses.tableClassName,\r\n tableClassName\r\n )}\r\n >\r\n <thead>\r\n <tr>\r\n <td>\r\n <BookingCalendarDatePicker\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n />\r\n </td>\r\n <td>\r\n <BookingCalendarLanesHeader<T>\r\n {...controlsClasses}\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n step={step}\r\n startOfStep={startOfStep}\r\n />\r\n </td>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {lanes.map((lane, laneIndex) => {\r\n const LaneBookingCalendarLaneHeader =\r\n lane.BookingCalendarLaneHeader ?? BookingCalendarLaneHeader;\r\n const LaneBookingCalendarLane =\r\n lane.BookingCalendarLane ?? BookingCalendarLane;\r\n return (\r\n <tr key={laneIndex} className={classNames(lane.rowClassName)}>\r\n <td>\r\n <LaneBookingCalendarLaneHeader<TLaneData>\r\n laneKey={lane.laneKey ?? laneIndex}\r\n data={lane.data}\r\n />\r\n </td>\r\n <td\r\n className={classNames(\r\n bookingCalendarDefaultClasses.laneTdClassName,\r\n laneTdClassName\r\n )}\r\n >\r\n {showGrid && (\r\n <BookingCalendarGrid\r\n from={from}\r\n till={till}\r\n step={step}\r\n subdivisions={gridSubdivisions}\r\n />\r\n )}\r\n <LaneBookingCalendarLane\r\n laneIndex={laneIndex}\r\n items={lane.items}\r\n from={from}\r\n till={till}\r\n BookingCalendarItem={\r\n lane.BookingCalendarItem ?? BookingCalendarItem\r\n }\r\n BookingCalendarRenderItem={\r\n lane.BookingCalendarRenderItem ??\r\n BookingCalendarRenderItem\r\n }\r\n step={step}\r\n />\r\n </td>\r\n </tr>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendar.js"}
@@ -22,6 +22,10 @@ export interface BookingCalendarItemBaseProps<T extends BookingCalendarItemT> {
22
22
  * Like start but can be negative (go offscreen)
23
23
  */
24
24
  realStart: number;
25
+ /**
26
+ * Actual start date shown on grid
27
+ */
28
+ realFrom: Moment;
25
29
  /**
26
30
  * Some part of the item was cut from the beginning
27
31
  */
@@ -38,6 +42,10 @@ export interface BookingCalendarItemBaseProps<T extends BookingCalendarItemT> {
38
42
  * Like end but can be more than 1 (go offscreen)
39
43
  */
40
44
  realEnd: number;
45
+ /**
46
+ * Actual end date shown on grid
47
+ */
48
+ realTill: Moment;
41
49
  /**
42
50
  * Some part of the item was cut from the end
43
51
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarItem/BookingCalendarItem.tsx"],"names":["BookingCalendarItem","props","className","marginStart","width","BookingCalendarRenderItem","DefaultBookingCalendarRenderItem","style","React","useMemo","bookingCalendarItemDefaultClasses"],"mappings":";;;;;;;;;AAAA;;AACA;;AAKA;;AACA;;AACA;;;;;;;;AAwDO,SAASA,mBAAT,CACLC,KADK,EAEL;AACA,MACEC,SADF,GAKID,KALJ,CACEC,SADF;AAAA,MAEEC,WAFF,GAKIF,KALJ,CAEEE,WAFF;AAAA,MAGEC,KAHF,GAKIH,KALJ,CAGEG,KAHF;AAAA,8BAKIH,KALJ,CAIEI,yBAJF;AAAA,MAIEA,yBAJF,sCAI8BC,oDAJ9B;AAMA,MAAMC,KAAK,GAAGC,KAAK,CAACC,OAAN,CAAc;AAAA,WAAM,iCAAqBN,WAArB,EAAkCC,KAAlC,CAAN;AAAA,GAAd,EAA8D,CAC1ED,WAD0E,EAE1EC,KAF0E,CAA9D,CAAd;AAIA,sBACE;AACE,IAAA,SAAS,EAAE,yBACTM,2CAAkCR,SADzB,EAETA,SAFS,CADb;AAKE,IAAA,KAAK,EAAEK;AALT,kBAOE,oBAAC,yBAAD,EAA+BN,KAA/B,CAPF,CADF;AAWD","sourcesContent":["import * as React from 'react';\r\nimport {\r\n BookingCalendarRenderItem as DefaultBookingCalendarRenderItem,\r\n BookingCalendarRenderItemProps,\r\n} from '../bookingCalendarRenderItem/BookingCalendarRenderItem';\r\nimport { BookingCalendarItemT } from '../common';\r\nimport classNames from 'classnames';\r\nimport { getItemPositionStyle } from './../utils';\r\nimport {\r\n BookingCalendarItemClasses,\r\n bookingCalendarItemDefaultClasses,\r\n} from './classes';\r\nimport { Duration, Moment } from 'moment';\r\n\r\nexport interface BookingCalendarItemBaseProps<T extends BookingCalendarItemT> {\r\n item: T;\r\n itemIndex: number;\r\n laneIndex: number;\r\n from: Moment;\r\n till: Moment;\r\n step: Duration;\r\n /**\r\n * Number between [0,1] that tells how far from previous item (or start) this item starts\r\n */\r\n marginStart: number;\r\n\r\n /**\r\n * Number between [0,1] that tells what part of the lane the item starts at\r\n */\r\n start: number;\r\n /**\r\n * Like start but can be negative (go offscreen)\r\n */\r\n realStart: number;\r\n /**\r\n * Some part of the item was cut from the beginning\r\n */\r\n startIsCut: boolean;\r\n /**\r\n * Number between [0,1] that tells what part of the lane the item takes\r\n */\r\n width: number;\r\n /**\r\n * Number between [0,1] that tells what part of the lane the item ends at\r\n */\r\n end: number;\r\n /**\r\n * Like end but can be more than 1 (go offscreen)\r\n */\r\n realEnd: number;\r\n /**\r\n * Some part of the item was cut from the end\r\n */\r\n endIsCut: boolean;\r\n\r\n BookingCalendarRenderItem?: React.ComponentType<\r\n BookingCalendarRenderItemProps<T>\r\n >;\r\n}\r\n\r\nexport interface BookingCalendarItemProps<T extends BookingCalendarItemT>\r\n extends BookingCalendarItemClasses,\r\n BookingCalendarItemBaseProps<T> {}\r\n\r\nexport function BookingCalendarItem<T extends BookingCalendarItemT>(\r\n props: BookingCalendarItemProps<T>\r\n) {\r\n const {\r\n className,\r\n marginStart,\r\n width,\r\n BookingCalendarRenderItem = DefaultBookingCalendarRenderItem,\r\n } = props;\r\n const style = React.useMemo(() => getItemPositionStyle(marginStart, width), [\r\n marginStart,\r\n width,\r\n ]);\r\n return (\r\n <div\r\n className={classNames(\r\n bookingCalendarItemDefaultClasses.className,\r\n className\r\n )}\r\n style={style}\r\n >\r\n <BookingCalendarRenderItem {...props} />\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendarItem.js"}
1
+ {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarItem/BookingCalendarItem.tsx"],"names":["BookingCalendarItem","props","className","marginStart","width","BookingCalendarRenderItem","DefaultBookingCalendarRenderItem","style","React","useMemo","bookingCalendarItemDefaultClasses"],"mappings":";;;;;;;;;AAAA;;AACA;;AAKA;;AACA;;AACA;;;;;;;;AAgEO,SAASA,mBAAT,CACLC,KADK,EAEL;AACA,MACEC,SADF,GAKID,KALJ,CACEC,SADF;AAAA,MAEEC,WAFF,GAKIF,KALJ,CAEEE,WAFF;AAAA,MAGEC,KAHF,GAKIH,KALJ,CAGEG,KAHF;AAAA,8BAKIH,KALJ,CAIEI,yBAJF;AAAA,MAIEA,yBAJF,sCAI8BC,oDAJ9B;AAMA,MAAMC,KAAK,GAAGC,KAAK,CAACC,OAAN,CAAc;AAAA,WAAM,iCAAqBN,WAArB,EAAkCC,KAAlC,CAAN;AAAA,GAAd,EAA8D,CAC1ED,WAD0E,EAE1EC,KAF0E,CAA9D,CAAd;AAIA,sBACE;AACE,IAAA,SAAS,EAAE,yBACTM,2CAAkCR,SADzB,EAETA,SAFS,CADb;AAKE,IAAA,KAAK,EAAEK;AALT,kBAOE,oBAAC,yBAAD,EAA+BN,KAA/B,CAPF,CADF;AAWD","sourcesContent":["import * as React from 'react';\r\nimport {\r\n BookingCalendarRenderItem as DefaultBookingCalendarRenderItem,\r\n BookingCalendarRenderItemProps,\r\n} from '../bookingCalendarRenderItem/BookingCalendarRenderItem';\r\nimport { BookingCalendarItemT } from '../common';\r\nimport classNames from 'classnames';\r\nimport { getItemPositionStyle } from './../utils';\r\nimport {\r\n BookingCalendarItemClasses,\r\n bookingCalendarItemDefaultClasses,\r\n} from './classes';\r\nimport { Duration, Moment } from 'moment';\r\n\r\nexport interface BookingCalendarItemBaseProps<T extends BookingCalendarItemT> {\r\n item: T;\r\n itemIndex: number;\r\n laneIndex: number;\r\n from: Moment;\r\n till: Moment;\r\n step: Duration;\r\n /**\r\n * Number between [0,1] that tells how far from previous item (or start) this item starts\r\n */\r\n marginStart: number;\r\n\r\n /**\r\n * Number between [0,1] that tells what part of the lane the item starts at\r\n */\r\n start: number;\r\n /**\r\n * Like start but can be negative (go offscreen)\r\n */\r\n realStart: number;\r\n /**\r\n * Actual start date shown on grid\r\n */\r\n realFrom: Moment;\r\n /**\r\n * Some part of the item was cut from the beginning\r\n */\r\n startIsCut: boolean;\r\n /**\r\n * Number between [0,1] that tells what part of the lane the item takes\r\n */\r\n width: number;\r\n /**\r\n * Number between [0,1] that tells what part of the lane the item ends at\r\n */\r\n end: number;\r\n /**\r\n * Like end but can be more than 1 (go offscreen)\r\n */\r\n realEnd: number;\r\n /**\r\n * Actual end date shown on grid\r\n */\r\n realTill: Moment;\r\n /**\r\n * Some part of the item was cut from the end\r\n */\r\n endIsCut: boolean;\r\n\r\n BookingCalendarRenderItem?: React.ComponentType<\r\n BookingCalendarRenderItemProps<T>\r\n >;\r\n}\r\n\r\nexport interface BookingCalendarItemProps<T extends BookingCalendarItemT>\r\n extends BookingCalendarItemClasses,\r\n BookingCalendarItemBaseProps<T> {}\r\n\r\nexport function BookingCalendarItem<T extends BookingCalendarItemT>(\r\n props: BookingCalendarItemProps<T>\r\n) {\r\n const {\r\n className,\r\n marginStart,\r\n width,\r\n BookingCalendarRenderItem = DefaultBookingCalendarRenderItem,\r\n } = props;\r\n const style = React.useMemo(() => getItemPositionStyle(marginStart, width), [\r\n marginStart,\r\n width,\r\n ]);\r\n return (\r\n <div\r\n className={classNames(\r\n bookingCalendarItemDefaultClasses.className,\r\n className\r\n )}\r\n style={style}\r\n >\r\n <BookingCalendarRenderItem {...props} />\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendarItem.js"}
@@ -41,7 +41,7 @@ function BookingCalendarLane(props) {
41
41
  return /*#__PURE__*/React.createElement("div", {
42
42
  className: (0, _classnames.default)(_classes.bookingCalendarLaneDefaultClasses.className, className)
43
43
  }, calculatedItems === null || calculatedItems === void 0 ? void 0 : calculatedItems.map(function (item, itemIndex) {
44
- return /*#__PURE__*/React.createElement(BookingCalendarItem, _extends({
44
+ return item.width > 0 ? /*#__PURE__*/React.createElement(BookingCalendarItem, _extends({
45
45
  BookingCalendarRenderItem: BookingCalendarRenderItem,
46
46
  key: itemIndex,
47
47
  itemIndex: itemIndex,
@@ -49,7 +49,7 @@ function BookingCalendarLane(props) {
49
49
  from: from,
50
50
  till: till,
51
51
  step: step
52
- }, item));
52
+ }, item)) : null;
53
53
  }));
54
54
  }
55
55
  //# sourceMappingURL=BookingCalendarLane.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarLane/BookingCalendarLane.tsx"],"names":["BookingCalendarLane","props","className","items","laneIndex","from","till","step","BookingCalendarItem","DefaultBookingCalendarItem","BookingCalendarRenderItem","calculatedItems","React","useMemo","bookingCalendarLaneDefaultClasses","map","item","itemIndex"],"mappings":";;;;;;;;;AAAA;;AAEA;;AACA;;AAKA;;AAEA;;;;;;;;;;AAkBO,SAASA,mBAAT,CACLC,KADK,EAEL;AACA,MACEC,SADF,GASID,KATJ,CACEC,SADF;AAAA,MAEEC,KAFF,GASIF,KATJ,CAEEE,KAFF;AAAA,MAGEC,SAHF,GASIH,KATJ,CAGEG,SAHF;AAAA,MAIEC,IAJF,GASIJ,KATJ,CAIEI,IAJF;AAAA,MAKEC,IALF,GASIL,KATJ,CAKEK,IALF;AAAA,MAMEC,IANF,GASIN,KATJ,CAMEM,IANF;AAAA,8BASIN,KATJ,CAOEO,mBAPF;AAAA,MAOEA,mBAPF,sCAOwBC,wCAPxB;AAAA,MAQEC,yBARF,GASIT,KATJ,CAQES,yBARF;AAUA,MAAMC,eAAe,GAAGC,KAAK,CAACC,OAAN,CACtB;AAAA,WAAM,qCAAyBV,KAAzB,EAAgCE,IAAhC,EAAsCC,IAAtC,CAAN;AAAA,GADsB,EAEtB,CAACH,KAAD,EAAQE,IAAR,EAAcC,IAAd,CAFsB,CAAxB;AAIA,sBACE;AACE,IAAA,SAAS,EAAE,yBACTQ,2CAAkCZ,SADzB,EAETA,SAFS;AADb,KAMGS,eANH,aAMGA,eANH,uBAMGA,eAAe,CAAEI,GAAjB,CAAqB,UAACC,IAAD,EAAOC,SAAP;AAAA,wBACpB,oBAAC,mBAAD;AACE,MAAA,yBAAyB,EAAEP,yBAD7B;AAEE,MAAA,GAAG,EAAEO,SAFP;AAGE,MAAA,SAAS,EAAEA,SAHb;AAIE,MAAA,SAAS,EAAEb,SAJb;AAKE,MAAA,IAAI,EAAEC,IALR;AAME,MAAA,IAAI,EAAEC,IANR;AAOE,MAAA,IAAI,EAAEC;AAPR,OAQMS,IARN,EADoB;AAAA,GAArB,CANH,CADF;AAqBD","sourcesContent":["import classNames from 'classnames';\r\nimport { Duration, Moment } from 'moment';\r\nimport * as React from 'react';\r\nimport {\r\n BookingCalendarItem as DefaultBookingCalendarItem,\r\n BookingCalendarItemProps,\r\n} from '../bookingCalendarItem/BookingCalendarItem';\r\nimport { BookingCalendarRenderItemProps } from '../bookingCalendarRenderItem';\r\nimport { calculateItemsDimensions } from '../utils';\r\nimport { BookingCalendarItemT } from './../common';\r\nimport {\r\n bookingCalendarLaneDefaultClasses,\r\n BookingCalendarLaneClasses,\r\n} from './classes';\r\n\r\nexport interface BookingCalendarLaneProps<T extends BookingCalendarItemT>\r\n extends BookingCalendarLaneClasses {\r\n items: T[];\r\n laneIndex: number;\r\n from: Moment;\r\n till: Moment;\r\n step: Duration;\r\n BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;\r\n BookingCalendarRenderItem?: React.ComponentType<\r\n BookingCalendarRenderItemProps<T>\r\n >;\r\n}\r\n\r\nexport function BookingCalendarLane<T extends BookingCalendarItemT>(\r\n props: BookingCalendarLaneProps<T>\r\n) {\r\n const {\r\n className,\r\n items,\r\n laneIndex,\r\n from,\r\n till,\r\n step,\r\n BookingCalendarItem = DefaultBookingCalendarItem,\r\n BookingCalendarRenderItem,\r\n } = props;\r\n const calculatedItems = React.useMemo(\r\n () => calculateItemsDimensions(items, from, till),\r\n [items, from, till]\r\n );\r\n return (\r\n <div\r\n className={classNames(\r\n bookingCalendarLaneDefaultClasses.className,\r\n className\r\n )}\r\n >\r\n {calculatedItems?.map((item, itemIndex) => (\r\n <BookingCalendarItem\r\n BookingCalendarRenderItem={BookingCalendarRenderItem}\r\n key={itemIndex}\r\n itemIndex={itemIndex}\r\n laneIndex={laneIndex}\r\n from={from}\r\n till={till}\r\n step={step}\r\n {...item}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendarLane.js"}
1
+ {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarLane/BookingCalendarLane.tsx"],"names":["BookingCalendarLane","props","className","items","laneIndex","from","till","step","BookingCalendarItem","DefaultBookingCalendarItem","BookingCalendarRenderItem","calculatedItems","React","useMemo","bookingCalendarLaneDefaultClasses","map","item","itemIndex","width"],"mappings":";;;;;;;;;AAAA;;AAEA;;AACA;;AAKA;;AAEA;;;;;;;;;;AAkBO,SAASA,mBAAT,CACLC,KADK,EAEL;AACA,MACEC,SADF,GASID,KATJ,CACEC,SADF;AAAA,MAEEC,KAFF,GASIF,KATJ,CAEEE,KAFF;AAAA,MAGEC,SAHF,GASIH,KATJ,CAGEG,SAHF;AAAA,MAIEC,IAJF,GASIJ,KATJ,CAIEI,IAJF;AAAA,MAKEC,IALF,GASIL,KATJ,CAKEK,IALF;AAAA,MAMEC,IANF,GASIN,KATJ,CAMEM,IANF;AAAA,8BASIN,KATJ,CAOEO,mBAPF;AAAA,MAOEA,mBAPF,sCAOwBC,wCAPxB;AAAA,MAQEC,yBARF,GASIT,KATJ,CAQES,yBARF;AAUA,MAAMC,eAAe,GAAGC,KAAK,CAACC,OAAN,CACtB;AAAA,WAAM,qCAAyBV,KAAzB,EAAgCE,IAAhC,EAAsCC,IAAtC,CAAN;AAAA,GADsB,EAEtB,CAACH,KAAD,EAAQE,IAAR,EAAcC,IAAd,CAFsB,CAAxB;AAIA,sBACE;AACE,IAAA,SAAS,EAAE,yBACTQ,2CAAkCZ,SADzB,EAETA,SAFS;AADb,KAMGS,eANH,aAMGA,eANH,uBAMGA,eAAe,CAAEI,GAAjB,CAAqB,UAACC,IAAD,EAAOC,SAAP;AAAA,WACpBD,IAAI,CAACE,KAAL,GAAa,CAAb,gBACE,oBAAC,mBAAD;AACE,MAAA,yBAAyB,EAAER,yBAD7B;AAEE,MAAA,GAAG,EAAEO,SAFP;AAGE,MAAA,SAAS,EAAEA,SAHb;AAIE,MAAA,SAAS,EAAEb,SAJb;AAKE,MAAA,IAAI,EAAEC,IALR;AAME,MAAA,IAAI,EAAEC,IANR;AAOE,MAAA,IAAI,EAAEC;AAPR,OAQMS,IARN,EADF,GAWI,IAZgB;AAAA,GAArB,CANH,CADF;AAuBD","sourcesContent":["import classNames from 'classnames';\r\nimport { Duration, Moment } from 'moment';\r\nimport * as React from 'react';\r\nimport {\r\n BookingCalendarItem as DefaultBookingCalendarItem,\r\n BookingCalendarItemProps,\r\n} from '../bookingCalendarItem/BookingCalendarItem';\r\nimport { BookingCalendarRenderItemProps } from '../bookingCalendarRenderItem';\r\nimport { calculateItemsDimensions } from '../utils';\r\nimport { BookingCalendarItemT } from './../common';\r\nimport {\r\n bookingCalendarLaneDefaultClasses,\r\n BookingCalendarLaneClasses,\r\n} from './classes';\r\n\r\nexport interface BookingCalendarLaneProps<T extends BookingCalendarItemT>\r\n extends BookingCalendarLaneClasses {\r\n items: T[];\r\n laneIndex: number;\r\n from: Moment;\r\n till: Moment;\r\n step: Duration;\r\n BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;\r\n BookingCalendarRenderItem?: React.ComponentType<\r\n BookingCalendarRenderItemProps<T>\r\n >;\r\n}\r\n\r\nexport function BookingCalendarLane<T extends BookingCalendarItemT>(\r\n props: BookingCalendarLaneProps<T>\r\n) {\r\n const {\r\n className,\r\n items,\r\n laneIndex,\r\n from,\r\n till,\r\n step,\r\n BookingCalendarItem = DefaultBookingCalendarItem,\r\n BookingCalendarRenderItem,\r\n } = props;\r\n const calculatedItems = React.useMemo(\r\n () => calculateItemsDimensions(items, from, till),\r\n [items, from, till]\r\n );\r\n return (\r\n <div\r\n className={classNames(\r\n bookingCalendarLaneDefaultClasses.className,\r\n className\r\n )}\r\n >\r\n {calculatedItems?.map((item, itemIndex) =>\r\n item.width > 0 ? (\r\n <BookingCalendarItem\r\n BookingCalendarRenderItem={BookingCalendarRenderItem}\r\n key={itemIndex}\r\n itemIndex={itemIndex}\r\n laneIndex={laneIndex}\r\n from={from}\r\n till={till}\r\n step={step}\r\n {...item}\r\n />\r\n ) : null\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendarLane.js"}
@@ -24,7 +24,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
24
24
  var BookingCalendarLanesHeaderRenderItemFactory = function BookingCalendarLanesHeaderRenderItemFactory(onRangeChange) {
25
25
  return function BookingCalendarLanesHeaderRenderItem(props) {
26
26
  var item = props.item,
27
- className = props.className;
27
+ className = props.className,
28
+ startIsCut = props.startIsCut,
29
+ endIsCut = props.endIsCut,
30
+ realFrom = props.realFrom,
31
+ realTill = props.realTill;
28
32
  var onClick = React.useCallback(function () {
29
33
  return onRangeChange({
30
34
  from: item.from,
@@ -37,9 +41,11 @@ var BookingCalendarLanesHeaderRenderItemFactory = function BookingCalendarLanesH
37
41
  className: "bookingCalendar__lanesHeader__renderItem__button",
38
42
  noShadow: true,
39
43
  onClick: onClick
40
- }, item.from.format('ddd'), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("span", {
44
+ }, startIsCut || endIsCut ? /*#__PURE__*/React.createElement(React.Fragment, null, item.from.format('ddd, Do'), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("span", {
45
+ className: "bookingCalendar__lanesHeader__renderItem__button__mutedText bookingCalendar__lanesHeader__renderItem__button__mutedText--split"
46
+ }, /*#__PURE__*/React.createElement("span", null, realFrom.format('M/D H:mm')), /*#__PURE__*/React.createElement("span", null, realTill.format('M/D H:mm')))) : /*#__PURE__*/React.createElement(React.Fragment, null, item.from.format('ddd'), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("span", {
41
47
  className: "bookingCalendar__lanesHeader__renderItem__button__mutedText"
42
- }, item.from.format('Do')))) : null;
48
+ }, item.from.format('Do'))))) : null;
43
49
  };
44
50
  };
45
51
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarLanesHeader/BookingCalendarLanesHeaderRenderItem.tsx"],"names":["BookingCalendarLanesHeaderRenderItemFactory","onRangeChange","BookingCalendarLanesHeaderRenderItem","props","item","className","onClick","React","useCallback","from","till","bookingCalendarRenderItemDefaultClasses","format"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEA;;AAEA;;;;;;;;AAGO,IAAMA,2CAA2C,GAAG,SAA9CA,2CAA8C,CACzDC,aADyD;AAAA,SAGzD,SAASC,oCAAT,CACEC,KADF,EAEE;AACA,QAAQC,IAAR,GAA4BD,KAA5B,CAAQC,IAAR;AAAA,QAAcC,SAAd,GAA4BF,KAA5B,CAAcE,SAAd;AACA,QAAMC,OAAO,GAAGC,KAAK,CAACC,WAAN,CACd;AAAA,aAAMP,aAAa,CAAC;AAAEQ,QAAAA,IAAI,EAAEL,IAAI,CAACK,IAAb;AAAmBC,QAAAA,IAAI,EAAEN,IAAI,CAACM;AAA9B,OAAD,CAAnB;AAAA,KADc,EAEd,CAACN,IAAD,CAFc,CAAhB;AAIA,WAAOA,IAAI,gBACT;AACE,MAAA,SAAS,EAAE,yBACTO,iDAAwCN,SAD/B,EAETA,SAFS;AADb,oBAME,oBAAC,cAAD;AACE,MAAA,SAAS,EAAC,kDADZ;AAEE,MAAA,QAAQ,EAAE,IAFZ;AAGE,MAAA,OAAO,EAAEC;AAHX,OAKGF,IAAI,CAACK,IAAL,CAAUG,MAAV,CAAiB,KAAjB,CALH,eAME,+BANF,eAOE;AAAM,MAAA,SAAS,EAAC;AAAhB,OACGR,IAAI,CAACK,IAAL,CAAUG,MAAV,CAAiB,IAAjB,CADH,CAPF,CANF,CADS,GAmBP,IAnBJ;AAoBD,GA/BwD;AAAA,CAApD","sourcesContent":["import classNames from 'classnames';\r\nimport * as React from 'react';\r\nimport { BookingCalendarRenderItemProps } from '../bookingCalendarRenderItem';\r\nimport { bookingCalendarRenderItemDefaultClasses } from '../bookingCalendarRenderItem/classes';\r\nimport { BookingCalendarItemT } from '../common';\r\nimport { Button } from '../../button/Button';\r\nimport { BookingCalendarDateRange } from '..';\r\n\r\nexport const BookingCalendarLanesHeaderRenderItemFactory = (\r\n onRangeChange: (range: BookingCalendarDateRange) => void\r\n) =>\r\n function BookingCalendarLanesHeaderRenderItem<T extends BookingCalendarItemT>(\r\n props: BookingCalendarRenderItemProps<T>\r\n ) {\r\n const { item, className } = props;\r\n const onClick = React.useCallback(\r\n () => onRangeChange({ from: item.from, till: item.till }),\r\n [item]\r\n );\r\n return item ? (\r\n <div\r\n className={classNames(\r\n bookingCalendarRenderItemDefaultClasses.className,\r\n className\r\n )}\r\n >\r\n <Button\r\n className=\"bookingCalendar__lanesHeader__renderItem__button\"\r\n noShadow={true}\r\n onClick={onClick}\r\n >\r\n {item.from.format('ddd')}\r\n <br />\r\n <span className=\"bookingCalendar__lanesHeader__renderItem__button__mutedText\">\r\n {item.from.format('Do')}\r\n </span>\r\n </Button>\r\n </div>\r\n ) : null;\r\n };\r\n"],"file":"BookingCalendarLanesHeaderRenderItem.js"}
1
+ {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarLanesHeader/BookingCalendarLanesHeaderRenderItem.tsx"],"names":["BookingCalendarLanesHeaderRenderItemFactory","onRangeChange","BookingCalendarLanesHeaderRenderItem","props","item","className","startIsCut","endIsCut","realFrom","realTill","onClick","React","useCallback","from","till","bookingCalendarRenderItemDefaultClasses","format"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEA;;AAEA;;;;;;;;AAGO,IAAMA,2CAA2C,GAAG,SAA9CA,2CAA8C,CACzDC,aADyD;AAAA,SAGzD,SAASC,oCAAT,CACEC,KADF,EAEE;AACA,QAAQC,IAAR,GAAsED,KAAtE,CAAQC,IAAR;AAAA,QAAcC,SAAd,GAAsEF,KAAtE,CAAcE,SAAd;AAAA,QAAyBC,UAAzB,GAAsEH,KAAtE,CAAyBG,UAAzB;AAAA,QAAqCC,QAArC,GAAsEJ,KAAtE,CAAqCI,QAArC;AAAA,QAA+CC,QAA/C,GAAsEL,KAAtE,CAA+CK,QAA/C;AAAA,QAAyDC,QAAzD,GAAsEN,KAAtE,CAAyDM,QAAzD;AACA,QAAMC,OAAO,GAAGC,KAAK,CAACC,WAAN,CACd;AAAA,aAAMX,aAAa,CAAC;AAAEY,QAAAA,IAAI,EAAET,IAAI,CAACS,IAAb;AAAmBC,QAAAA,IAAI,EAAEV,IAAI,CAACU;AAA9B,OAAD,CAAnB;AAAA,KADc,EAEd,CAACV,IAAD,CAFc,CAAhB;AAIA,WAAOA,IAAI,gBACT;AACE,MAAA,SAAS,EAAE,yBACTW,iDAAwCV,SAD/B,EAETA,SAFS;AADb,oBAME,oBAAC,cAAD;AACE,MAAA,SAAS,EAAC,kDADZ;AAEE,MAAA,QAAQ,EAAE,IAFZ;AAGE,MAAA,OAAO,EAAEK;AAHX,OAKGJ,UAAU,IAAIC,QAAd,gBACC,0CACGH,IAAI,CAACS,IAAL,CAAUG,MAAV,CAAiB,SAAjB,CADH,eAEE,+BAFF,eAGE;AAAM,MAAA,SAAS,EAAC;AAAhB,oBACE,kCAAOR,QAAQ,CAACQ,MAAT,CAAgB,UAAhB,CAAP,CADF,eAEE,kCAAOP,QAAQ,CAACO,MAAT,CAAgB,UAAhB,CAAP,CAFF,CAHF,CADD,gBAUC,0CACGZ,IAAI,CAACS,IAAL,CAAUG,MAAV,CAAiB,KAAjB,CADH,eAEE,+BAFF,eAGE;AAAM,MAAA,SAAS,EAAC;AAAhB,OACGZ,IAAI,CAACS,IAAL,CAAUG,MAAV,CAAiB,IAAjB,CADH,CAHF,CAfJ,CANF,CADS,GAgCP,IAhCJ;AAiCD,GA5CwD;AAAA,CAApD","sourcesContent":["import classNames from 'classnames';\r\nimport * as React from 'react';\r\nimport { BookingCalendarRenderItemProps } from '../bookingCalendarRenderItem';\r\nimport { bookingCalendarRenderItemDefaultClasses } from '../bookingCalendarRenderItem/classes';\r\nimport { BookingCalendarItemT } from '../common';\r\nimport { Button } from '../../button/Button';\r\nimport { BookingCalendarDateRange } from '..';\r\n\r\nexport const BookingCalendarLanesHeaderRenderItemFactory = (\r\n onRangeChange: (range: BookingCalendarDateRange) => void\r\n) =>\r\n function BookingCalendarLanesHeaderRenderItem<T extends BookingCalendarItemT>(\r\n props: BookingCalendarRenderItemProps<T>\r\n ) {\r\n const { item, className, startIsCut, endIsCut, realFrom, realTill } = props;\r\n const onClick = React.useCallback(\r\n () => onRangeChange({ from: item.from, till: item.till }),\r\n [item]\r\n );\r\n return item ? (\r\n <div\r\n className={classNames(\r\n bookingCalendarRenderItemDefaultClasses.className,\r\n className\r\n )}\r\n >\r\n <Button\r\n className=\"bookingCalendar__lanesHeader__renderItem__button\"\r\n noShadow={true}\r\n onClick={onClick}\r\n >\r\n {startIsCut || endIsCut ? (\r\n <>\r\n {item.from.format('ddd, Do')}\r\n <br />\r\n <span className=\"bookingCalendar__lanesHeader__renderItem__button__mutedText bookingCalendar__lanesHeader__renderItem__button__mutedText--split\">\r\n <span>{realFrom.format('M/D H:mm')}</span>\r\n <span>{realTill.format('M/D H:mm')}</span>\r\n </span>\r\n </>\r\n ) : (\r\n <>\r\n {item.from.format('ddd')}\r\n <br />\r\n <span className=\"bookingCalendar__lanesHeader__renderItem__button__mutedText\">\r\n {item.from.format('Do')}\r\n </span>\r\n </>\r\n )}\r\n </Button>\r\n </div>\r\n ) : null;\r\n };\r\n"],"file":"BookingCalendarLanesHeaderRenderItem.js"}
@@ -1,15 +1,24 @@
1
1
  import moment, { Moment, Duration } from 'moment';
2
+ import { BookingCalendarItemProps } from './bookingCalendarItem';
3
+ import { BookingCalendarLaneProps } from './bookingCalendarLane';
4
+ import { BookingCalendarLaneHeaderProps } from './bookingCalendarLaneHeader';
5
+ import { BookingCalendarRenderItemProps } from './bookingCalendarRenderItem';
2
6
  import { BookingCalendarItemT, BookingCalendarItemWithOriginalIndexT } from './common';
3
7
  export declare function groupBy<T>(items: T[], iterator: (item: T) => number | string): {};
4
- export interface LaneSourceData<T> {
8
+ export interface LaneSourceData<T extends BookingCalendarItemT, TLaneData> {
5
9
  laneKey: number;
6
- data?: T;
10
+ data?: TLaneData;
11
+ rowClassName?: string;
12
+ BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;
13
+ BookingCalendarRenderItem?: React.ComponentType<BookingCalendarRenderItemProps<T>>;
14
+ BookingCalendarLaneHeader?: React.ComponentType<BookingCalendarLaneHeaderProps<TLaneData>>;
15
+ BookingCalendarLane?: React.ComponentType<BookingCalendarLaneProps<T>>;
7
16
  }
8
- export interface LaneData<T extends BookingCalendarItemT, B> extends LaneSourceData<B> {
17
+ export interface LaneData<T extends BookingCalendarItemT, TLaneData> extends LaneSourceData<T, TLaneData> {
9
18
  items: T[];
10
19
  }
11
- export declare function splitBookingsToLanes<T extends BookingCalendarItemT, B>(bookings: T[], from: Moment, lanesCount: number, lanesSource?: LaneSourceData<B>[]): {
12
- lanes: LaneData<T, B>[];
20
+ export declare function splitBookingsToLanes<T extends BookingCalendarItemT, TLaneData>(bookings: T[], from: Moment, minLanesCount: number, lanesSource?: LaneSourceData<T, TLaneData>[]): {
21
+ lanes: LaneData<T, TLaneData>[];
13
22
  extraBookings: (T & BookingCalendarItemWithOriginalIndexT)[];
14
23
  };
15
24
  export declare function itemsOverlap<T extends BookingCalendarItemT>(a: T, b: T): boolean;
@@ -18,10 +27,12 @@ export declare function calculateItemsDimensions<T extends BookingCalendarItemT>
18
27
  item: T;
19
28
  start: number;
20
29
  realStart: number;
30
+ realFrom: moment.Moment;
21
31
  startIsCut: boolean;
22
32
  width: number;
23
33
  end: number;
24
34
  realEnd: number;
35
+ realTill: moment.Moment;
25
36
  endIsCut: boolean;
26
37
  marginStart: number;
27
38
  }[];
@@ -44,7 +44,7 @@ function groupBy(items, iterator) {
44
44
  }, {});
45
45
  }
46
46
 
47
- function splitBookingsToLanes(bookings, from, lanesCount) {
47
+ function splitBookingsToLanes(bookings, from, minLanesCount) {
48
48
  var lanesSource = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
49
49
 
50
50
  if (!bookings) {
@@ -57,30 +57,23 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
57
57
  var lanes = [];
58
58
  var extraBookings = [];
59
59
 
60
- if (lanesCount) {
61
- lanes = new Array(lanesCount).fill(null).map(function (_, index) {
62
- return {
63
- items: [],
64
- laneKey: index,
65
- data: null
66
- };
67
- });
68
- }
69
-
70
60
  if (lanesSource !== null && lanesSource !== void 0 && lanesSource.length) {
71
61
  lanes = lanesSource.map(function (source) {
72
- return {
73
- items: [],
74
- laneKey: source.laneKey,
75
- data: source.data
76
- };
62
+ return _objectSpread(_objectSpread({}, source), {}, {
63
+ items: []
64
+ });
77
65
  });
78
66
  }
79
67
 
80
- if (bookings.every(function (b) {
81
- return b.laneKey !== undefined;
82
- })) {
83
- var grouped = groupBy(bookings.map(function (booking, originalIndex) {
68
+ var bookingsWithoutLaneKey = bookings.filter(function (a) {
69
+ return a.laneKey === undefined;
70
+ });
71
+ var bookingsWithLaneKey = bookings.filter(function (a) {
72
+ return a.laneKey !== undefined;
73
+ });
74
+
75
+ if (bookingsWithLaneKey.length) {
76
+ var grouped = groupBy(bookingsWithLaneKey.map(function (booking, originalIndex) {
84
77
  return _objectSpread(_objectSpread({}, booking), {}, {
85
78
  originalIndex: originalIndex
86
79
  });
@@ -88,14 +81,17 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
88
81
  return a.laneKey;
89
82
  });
90
83
  lanes = Object.keys(grouped).map(function (key) {
91
- var _lanesSource$find;
84
+ var _lanesSource$find, _lanesSource$find2;
92
85
 
93
86
  return {
94
87
  laneKey: Number(key),
95
88
  items: grouped[key],
96
89
  data: lanesSource === null || lanesSource === void 0 ? void 0 : (_lanesSource$find = lanesSource.find(function (a) {
97
90
  return a.laneKey === Number(key);
98
- })) === null || _lanesSource$find === void 0 ? void 0 : _lanesSource$find.data
91
+ })) === null || _lanesSource$find === void 0 ? void 0 : _lanesSource$find.data,
92
+ rowClassName: lanesSource === null || lanesSource === void 0 ? void 0 : (_lanesSource$find2 = lanesSource.find(function (a) {
93
+ return a.laneKey === Number(key);
94
+ })) === null || _lanesSource$find2 === void 0 ? void 0 : _lanesSource$find2.rowClassName
99
95
  };
100
96
  });
101
97
  var missingLanes = lanesSource === null || lanesSource === void 0 ? void 0 : lanesSource.filter(function (a) {
@@ -108,9 +104,11 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
108
104
  items: []
109
105
  });
110
106
  }));
111
- } else {
107
+ }
108
+
109
+ if (bookingsWithoutLaneKey.length) {
112
110
  (function () {
113
- var remainingBookings = bookings.map(function (booking, originalIndex) {
111
+ var remainingBookings = bookingsWithoutLaneKey.map(function (booking, originalIndex) {
114
112
  return _objectSpread(_objectSpread({}, booking), {}, {
115
113
  originalIndex: originalIndex
116
114
  });
@@ -137,7 +135,7 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
137
135
  });
138
136
 
139
137
  var _min = Math.min.apply(Math, _toConsumableArray(distances.filter(function (a) {
140
- return a > 0;
138
+ return a >= 0;
141
139
  })));
142
140
 
143
141
  if (_min < min) {
@@ -149,11 +147,11 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
149
147
  if (bookingIndex >= 0 && laneIndex >= 0) {
150
148
  lanes[laneIndex].items = lanes[laneIndex].items.concat(_objectSpread({}, remainingBookings[bookingIndex]));
151
149
  remainingBookings.splice(bookingIndex, 1);
152
- } else if (!lanesCount) {
150
+ } else if (!minLanesCount) {
153
151
  lanes = lanes.concat({
154
152
  items: [_objectSpread({}, remainingBookings[0])],
155
153
  laneKey: lanes.length,
156
- data: null
154
+ data: undefined
157
155
  });
158
156
  remainingBookings.shift();
159
157
  } else {
@@ -192,6 +190,17 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
192
190
  lanes = lanes.sort(function (a, b) {
193
191
  return a.laneKey - b.laneKey;
194
192
  });
193
+
194
+ if (lanes.length < minLanesCount) {
195
+ lanes = lanes.concat(new Array(minLanesCount - lanes.length).fill(null).map(function (_, index) {
196
+ return {
197
+ items: [],
198
+ laneKey: index + lanes.length,
199
+ data: null
200
+ };
201
+ }));
202
+ }
203
+
195
204
  return {
196
205
  lanes: lanes,
197
206
  extraBookings: extraBookings
@@ -231,20 +240,24 @@ function calculateItemsDimensions(items, from, till) {
231
240
  return widthMs > 0 ? items === null || items === void 0 ? void 0 : items.map(function (item) {
232
241
  var startIsCut = item.from.valueOf() < startMs;
233
242
  var realStart = (item.from.valueOf() - startMs) / widthMs;
243
+ var realFrom = startIsCut ? (0, _moment.default)(startMs) : (0, _moment.default)(item.from);
234
244
  var start = startIsCut ? 0 : realStart;
235
245
  var endIsCut = item.till.valueOf() > endMs;
236
246
  var realEnd = (item.till.valueOf() - startMs) / widthMs;
237
247
  var end = endIsCut ? (endMs - startMs) / widthMs : realEnd;
248
+ var realTill = endIsCut ? (0, _moment.default)(endMs) : (0, _moment.default)(item.till);
238
249
  var marginStart = start - lastEnd;
239
250
  lastEnd = (item.till.valueOf() - startMs) / widthMs;
240
251
  return {
241
252
  item: item,
242
253
  start: start,
243
254
  realStart: realStart,
255
+ realFrom: realFrom,
244
256
  startIsCut: startIsCut,
245
257
  width: end - start,
246
258
  end: end,
247
259
  realEnd: realEnd,
260
+ realTill: realTill,
248
261
  endIsCut: endIsCut,
249
262
  marginStart: marginStart
250
263
  };
@@ -263,6 +276,10 @@ var generateControlItems = function generateControlItems(from, till, step, start
263
276
  subtract -= step.asMilliseconds();
264
277
  }
265
278
 
279
+ if (till.valueOf() - from.valueOf() > step.asMilliseconds()) {
280
+ steps += 1;
281
+ }
282
+
266
283
  return new Array(steps).fill(0).map(function (_, index) {
267
284
  return {
268
285
  from: (0, _moment.default)(from).add(subtract).add(step.asMilliseconds() * index),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/components/bookingCalendar/utils.ts"],"names":["groupBy","items","iterator","reduce","obj","item","key","hasOwnProperty","push","splitBookingsToLanes","bookings","from","lanesCount","lanesSource","lanes","extraBookings","Array","fill","map","_","index","laneKey","data","length","source","every","b","undefined","grouped","booking","originalIndex","a","Object","keys","Number","find","missingLanes","filter","some","l","concat","remainingBookings","sort","valueOf","min","bookingIndex","laneIndex","forEach","lane","lastTill","till","distances","dist","diff","Math","abs","_min","indexOf","splice","shift","itemsOverlap","isBefore","isAfter","getItemPositionStyle","marginStart","width","marginLeft","calculateItemsDimensions","lastEnd","widthMs","startMs","endMs","startIsCut","realStart","start","endIsCut","realEnd","end","generateControlItems","step","startOfStep","steps","ceil","asMilliseconds","subtract","add","generateGridItems","subdivisions","floor"],"mappings":"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","sourcesContent":["import moment, { Moment, Duration } from 'moment';\r\nimport {\r\n BookingCalendarItemT,\r\n BookingCalendarItemWithOriginalIndexT,\r\n} from './common';\r\n\r\nexport function groupBy<T>(items: T[], iterator: (item: T) => number | string) {\r\n return items.reduce((obj, item) => {\r\n const key = iterator(item);\r\n if (!obj.hasOwnProperty(key)) {\r\n obj[key] = [];\r\n }\r\n obj[key].push(item);\r\n return obj;\r\n }, {});\r\n}\r\n\r\nexport interface LaneSourceData<T> {\r\n laneKey: number;\r\n data?: T;\r\n}\r\n\r\nexport interface LaneData<T extends BookingCalendarItemT, B>\r\n extends LaneSourceData<B> {\r\n items: T[];\r\n}\r\n\r\nexport function splitBookingsToLanes<T extends BookingCalendarItemT, B>(\r\n bookings: T[],\r\n from: Moment,\r\n lanesCount: number,\r\n lanesSource: LaneSourceData<B>[] = []\r\n) {\r\n if (!bookings) {\r\n return { lanes: [], extraBookings: [] };\r\n }\r\n let lanes: LaneData<T, B>[] = [];\r\n let extraBookings: (T & BookingCalendarItemWithOriginalIndexT)[] = [];\r\n if (lanesCount) {\r\n lanes = new Array<LaneData<T, B>>(lanesCount)\r\n .fill(null)\r\n .map((_, index) => ({ items: [], laneKey: index, data: null }));\r\n }\r\n if (lanesSource?.length) {\r\n lanes = lanesSource.map(source => ({\r\n items: [],\r\n laneKey: source.laneKey,\r\n data: source.data,\r\n }));\r\n }\r\n if (bookings.every(b => b.laneKey !== undefined)) {\r\n const grouped = groupBy(\r\n bookings.map((booking, originalIndex) => ({ ...booking, originalIndex })),\r\n a => a.laneKey\r\n );\r\n lanes = Object.keys(grouped).map(key => ({\r\n laneKey: Number(key),\r\n items: grouped[key],\r\n data: lanesSource?.find(a => a.laneKey === Number(key))?.data,\r\n }));\r\n const missingLanes = lanesSource?.filter(\r\n a => !lanes.some(l => l.laneKey === a.laneKey)\r\n );\r\n lanes = lanes.concat(missingLanes.map(a => ({ ...a, items: [] })));\r\n } else {\r\n let remainingBookings: (T &\r\n BookingCalendarItemWithOriginalIndexT)[] = bookings\r\n .map((booking, originalIndex) => ({ ...booking, originalIndex }))\r\n .sort((a, b) => a.from.valueOf() - b.from.valueOf());\r\n while (remainingBookings.length > 0) {\r\n let min = 99999999999999;\r\n let bookingIndex = -1;\r\n let laneIndex = -1;\r\n lanes.forEach((lane, index) => {\r\n const lastTill = lane.items[lane.items.length - 1]?.till ?? from;\r\n const distances = remainingBookings.map(booking => {\r\n const dist = booking.from.diff(lastTill);\r\n if (lane.items.length === 0) {\r\n return Math.abs(dist);\r\n }\r\n return dist;\r\n });\r\n const _min = Math.min(...distances.filter(a => a > 0));\r\n if (_min < min) {\r\n bookingIndex = distances.indexOf(_min);\r\n laneIndex = index;\r\n }\r\n });\r\n if (bookingIndex >= 0 && laneIndex >= 0) {\r\n lanes[laneIndex].items = lanes[laneIndex].items.concat({\r\n ...remainingBookings[bookingIndex],\r\n });\r\n remainingBookings.splice(bookingIndex, 1);\r\n } else if (!lanesCount) {\r\n lanes = lanes.concat({\r\n items: [{ ...remainingBookings[0] }],\r\n laneKey: lanes.length,\r\n data: null,\r\n });\r\n remainingBookings.shift();\r\n } else {\r\n // lanes = lanes.concat([[{ ...remainingBookings[0] }]]);\r\n extraBookings = extraBookings.concat(remainingBookings.shift());\r\n }\r\n }\r\n // Naive solution that is much less computationally intensive but yields more lanes than necessary\r\n /*bookings.forEach((booking, originalIndex) => {\r\n let found = false;\r\n lanes.forEach((lane, index) => {\r\n if (!lane.some(i => itemsOverlap(booking, i))) {\r\n lanes[index] = lanes[index].concat({ ...booking, originalIndex });\r\n found = true;\r\n }\r\n });\r\n if (!found) {\r\n lanes = lanes.concat([[{ ...booking, originalIndex }]]);\r\n }\r\n });*/\r\n }\r\n for (let index = 0; index < lanes.length; index++) {\r\n const lane = lanes[index];\r\n lanes[index].items = lane.items.sort(\r\n (a, b) => a.from.valueOf() - b.from.valueOf()\r\n );\r\n }\r\n lanes = lanes.sort((a, b) => a.laneKey - b.laneKey);\r\n return { lanes, extraBookings };\r\n}\r\n\r\nexport function itemsOverlap<T extends BookingCalendarItemT>(a: T, b: T) {\r\n if (!a?.from || !a?.till || !b?.from || !b?.till) {\r\n return false;\r\n }\r\n if (b.till.isBefore(a.from)) {\r\n return false;\r\n }\r\n if (b.from.isAfter(a.till)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport const getItemPositionStyle = (marginStart: number, width: number) =>\r\n ({\r\n marginLeft: `${marginStart * 100}%`,\r\n width: `${width * 100}%`,\r\n } as React.CSSProperties);\r\n\r\nexport function calculateItemsDimensions<T extends BookingCalendarItemT>(\r\n items: T[],\r\n from: Moment,\r\n till: Moment\r\n) {\r\n let lastEnd = 0;\r\n const widthMs = till.valueOf() - from.valueOf();\r\n const startMs = from.valueOf();\r\n const endMs = till.valueOf();\r\n return widthMs > 0\r\n ? items?.map(item => {\r\n const startIsCut = item.from.valueOf() < startMs;\r\n const realStart = (item.from.valueOf() - startMs) / widthMs;\r\n const start = startIsCut ? 0 : realStart;\r\n const endIsCut = item.till.valueOf() > endMs;\r\n const realEnd = (item.till.valueOf() - startMs) / widthMs;\r\n const end = endIsCut ? (endMs - startMs) / widthMs : realEnd;\r\n const marginStart = start - lastEnd;\r\n lastEnd = (item.till.valueOf() - startMs) / widthMs;\r\n return {\r\n item,\r\n start,\r\n realStart,\r\n startIsCut,\r\n width: end - start,\r\n end,\r\n realEnd,\r\n endIsCut,\r\n marginStart,\r\n };\r\n })\r\n : [];\r\n}\r\n\r\nexport const generateControlItems = (\r\n from: Moment,\r\n till: Moment,\r\n step: Duration,\r\n startOfStep: Moment\r\n) => {\r\n if (!from || !till || !step) {\r\n return [];\r\n }\r\n const steps = Math.ceil(\r\n (till.valueOf() - from.valueOf()) / step.asMilliseconds()\r\n );\r\n let subtract =\r\n (startOfStep.valueOf() - from.valueOf()) % step.asMilliseconds();\r\n if (subtract > 0) {\r\n subtract -= step.asMilliseconds();\r\n }\r\n return new Array(steps).fill(0).map((_, index) => ({\r\n from: moment(from)\r\n .add(subtract)\r\n .add(step.asMilliseconds() * index),\r\n till: moment(from)\r\n .add(subtract)\r\n .add(step.asMilliseconds() * (index + 1)),\r\n }));\r\n};\r\n\r\nexport const generateGridItems = (\r\n from: Moment,\r\n till: Moment,\r\n step: Duration,\r\n subdivisions: number = 1\r\n) => {\r\n if (!from || !till || !step || subdivisions < 1) {\r\n return [];\r\n }\r\n const steps =\r\n Math.floor(\r\n ((till.valueOf() - from.valueOf()) / step.asMilliseconds()) * subdivisions\r\n ) + 1;\r\n const width = till.valueOf() - from.valueOf();\r\n return new Array(steps)\r\n .fill(0)\r\n .map(\r\n (_, index) => ((step.asMilliseconds() / subdivisions) * index) / width\r\n );\r\n};\r\n"],"file":"utils.js"}
1
+ {"version":3,"sources":["../../../src/lib/components/bookingCalendar/utils.ts"],"names":["groupBy","items","iterator","reduce","obj","item","key","hasOwnProperty","push","splitBookingsToLanes","bookings","from","minLanesCount","lanesSource","lanes","extraBookings","length","map","source","bookingsWithoutLaneKey","filter","a","laneKey","undefined","bookingsWithLaneKey","grouped","booking","originalIndex","Object","keys","Number","data","find","rowClassName","missingLanes","some","l","concat","remainingBookings","sort","b","valueOf","min","bookingIndex","laneIndex","forEach","lane","index","lastTill","till","distances","dist","diff","Math","abs","_min","indexOf","splice","shift","Array","fill","_","itemsOverlap","isBefore","isAfter","getItemPositionStyle","marginStart","width","marginLeft","calculateItemsDimensions","lastEnd","widthMs","startMs","endMs","startIsCut","realStart","realFrom","start","endIsCut","realEnd","end","realTill","generateControlItems","step","startOfStep","steps","ceil","asMilliseconds","subtract","add","generateGridItems","subdivisions","floor"],"mappings":"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","sourcesContent":["import moment, { Moment, Duration } from 'moment';\r\nimport { BookingCalendarItemProps } from './bookingCalendarItem';\r\nimport { BookingCalendarLaneProps } from './bookingCalendarLane';\r\nimport { BookingCalendarLaneHeaderProps } from './bookingCalendarLaneHeader';\r\nimport { BookingCalendarRenderItemProps } from './bookingCalendarRenderItem';\r\nimport {\r\n BookingCalendarItemT,\r\n BookingCalendarItemWithOriginalIndexT,\r\n} from './common';\r\n\r\nexport function groupBy<T>(items: T[], iterator: (item: T) => number | string) {\r\n return items.reduce((obj, item) => {\r\n const key = iterator(item);\r\n if (!obj.hasOwnProperty(key)) {\r\n obj[key] = [];\r\n }\r\n obj[key].push(item);\r\n return obj;\r\n }, {});\r\n}\r\n\r\nexport interface LaneSourceData<T extends BookingCalendarItemT, TLaneData> {\r\n laneKey: number;\r\n data?: TLaneData;\r\n rowClassName?: string;\r\n BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;\r\n BookingCalendarRenderItem?: React.ComponentType<\r\n BookingCalendarRenderItemProps<T>\r\n >;\r\n BookingCalendarLaneHeader?: React.ComponentType<\r\n BookingCalendarLaneHeaderProps<TLaneData>\r\n >;\r\n BookingCalendarLane?: React.ComponentType<BookingCalendarLaneProps<T>>;\r\n}\r\n\r\nexport interface LaneData<T extends BookingCalendarItemT, TLaneData>\r\n extends LaneSourceData<T, TLaneData> {\r\n items: T[];\r\n}\r\n\r\nexport function splitBookingsToLanes<T extends BookingCalendarItemT, TLaneData>(\r\n bookings: T[],\r\n from: Moment,\r\n minLanesCount: number,\r\n lanesSource: LaneSourceData<T, TLaneData>[] = []\r\n) {\r\n if (!bookings) {\r\n return { lanes: [], extraBookings: [] };\r\n }\r\n let lanes: LaneData<T, TLaneData>[] = [];\r\n let extraBookings: (T & BookingCalendarItemWithOriginalIndexT)[] = [];\r\n if (lanesSource?.length) {\r\n lanes = lanesSource.map(source => ({\r\n ...source,\r\n items: [],\r\n }));\r\n }\r\n const bookingsWithoutLaneKey = bookings.filter(a => a.laneKey === undefined);\r\n const bookingsWithLaneKey = bookings.filter(a => a.laneKey !== undefined);\r\n if (bookingsWithLaneKey.length) {\r\n const grouped = groupBy(\r\n bookingsWithLaneKey.map((booking, originalIndex) => ({\r\n ...booking,\r\n originalIndex,\r\n })),\r\n a => a.laneKey\r\n );\r\n lanes = Object.keys(grouped).map(key => ({\r\n laneKey: Number(key),\r\n items: grouped[key],\r\n data: lanesSource?.find(a => a.laneKey === Number(key))?.data,\r\n rowClassName: lanesSource?.find(a => a.laneKey === Number(key))\r\n ?.rowClassName,\r\n }));\r\n const missingLanes = lanesSource?.filter(\r\n a => !lanes.some(l => l.laneKey === a.laneKey)\r\n );\r\n lanes = lanes.concat(missingLanes.map(a => ({ ...a, items: [] })));\r\n }\r\n if (bookingsWithoutLaneKey.length) {\r\n let remainingBookings: (T &\r\n BookingCalendarItemWithOriginalIndexT)[] = bookingsWithoutLaneKey\r\n .map((booking, originalIndex) => ({ ...booking, originalIndex }))\r\n .sort((a, b) => a.from.valueOf() - b.from.valueOf());\r\n while (remainingBookings.length > 0) {\r\n let min = 99999999999999;\r\n let bookingIndex = -1;\r\n let laneIndex = -1;\r\n lanes.forEach((lane, index) => {\r\n const lastTill = lane.items[lane.items.length - 1]?.till ?? from;\r\n const distances = remainingBookings.map(booking => {\r\n const dist = booking.from.diff(lastTill);\r\n if (lane.items.length === 0) {\r\n return Math.abs(dist);\r\n }\r\n return dist;\r\n });\r\n const _min = Math.min(...distances.filter(a => a >= 0));\r\n if (_min < min) {\r\n bookingIndex = distances.indexOf(_min);\r\n laneIndex = index;\r\n }\r\n });\r\n if (bookingIndex >= 0 && laneIndex >= 0) {\r\n lanes[laneIndex].items = lanes[laneIndex].items.concat({\r\n ...remainingBookings[bookingIndex],\r\n });\r\n remainingBookings.splice(bookingIndex, 1);\r\n } else if (!minLanesCount) {\r\n lanes = lanes.concat({\r\n items: [{ ...remainingBookings[0] }],\r\n laneKey: lanes.length,\r\n data: undefined,\r\n });\r\n remainingBookings.shift();\r\n } else {\r\n // lanes = lanes.concat([[{ ...remainingBookings[0] }]]);\r\n extraBookings = extraBookings.concat(remainingBookings.shift());\r\n }\r\n }\r\n // Naive solution that is much less computationally intensive but yields more lanes than necessary\r\n /*bookings.forEach((booking, originalIndex) => {\r\n let found = false;\r\n lanes.forEach((lane, index) => {\r\n if (!lane.some(i => itemsOverlap(booking, i))) {\r\n lanes[index] = lanes[index].concat({ ...booking, originalIndex });\r\n found = true;\r\n }\r\n });\r\n if (!found) {\r\n lanes = lanes.concat([[{ ...booking, originalIndex }]]);\r\n }\r\n });*/\r\n }\r\n for (let index = 0; index < lanes.length; index++) {\r\n const lane = lanes[index];\r\n lanes[index].items = lane.items.sort(\r\n (a, b) => a.from.valueOf() - b.from.valueOf()\r\n );\r\n }\r\n lanes = lanes.sort((a, b) => a.laneKey - b.laneKey);\r\n if (lanes.length < minLanesCount) {\r\n lanes = lanes.concat(\r\n new Array<LaneData<T, TLaneData>>(minLanesCount - lanes.length)\r\n .fill(null)\r\n .map((_, index) => ({\r\n items: [],\r\n laneKey: index + lanes.length,\r\n data: null,\r\n }))\r\n );\r\n }\r\n return { lanes, extraBookings };\r\n}\r\n\r\nexport function itemsOverlap<T extends BookingCalendarItemT>(a: T, b: T) {\r\n if (!a?.from || !a?.till || !b?.from || !b?.till) {\r\n return false;\r\n }\r\n if (b.till.isBefore(a.from)) {\r\n return false;\r\n }\r\n if (b.from.isAfter(a.till)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport const getItemPositionStyle = (marginStart: number, width: number) =>\r\n ({\r\n marginLeft: `${marginStart * 100}%`,\r\n width: `${width * 100}%`,\r\n } as React.CSSProperties);\r\n\r\nexport function calculateItemsDimensions<T extends BookingCalendarItemT>(\r\n items: T[],\r\n from: Moment,\r\n till: Moment\r\n) {\r\n let lastEnd = 0;\r\n const widthMs = till.valueOf() - from.valueOf();\r\n const startMs = from.valueOf();\r\n const endMs = till.valueOf();\r\n return widthMs > 0\r\n ? items?.map(item => {\r\n const startIsCut = item.from.valueOf() < startMs;\r\n const realStart = (item.from.valueOf() - startMs) / widthMs;\r\n const realFrom = startIsCut ? moment(startMs) : moment(item.from);\r\n const start = startIsCut ? 0 : realStart;\r\n const endIsCut = item.till.valueOf() > endMs;\r\n const realEnd = (item.till.valueOf() - startMs) / widthMs;\r\n const end = endIsCut ? (endMs - startMs) / widthMs : realEnd;\r\n const realTill = endIsCut ? moment(endMs) : moment(item.till);\r\n const marginStart = start - lastEnd;\r\n lastEnd = (item.till.valueOf() - startMs) / widthMs;\r\n return {\r\n item,\r\n start,\r\n realStart,\r\n realFrom,\r\n startIsCut,\r\n width: end - start,\r\n end,\r\n realEnd,\r\n realTill,\r\n endIsCut,\r\n marginStart,\r\n };\r\n })\r\n : [];\r\n}\r\n\r\nexport const generateControlItems = (\r\n from: Moment,\r\n till: Moment,\r\n step: Duration,\r\n startOfStep: Moment\r\n) => {\r\n if (!from || !till || !step) {\r\n return [];\r\n }\r\n let steps = Math.ceil(\r\n (till.valueOf() - from.valueOf()) / step.asMilliseconds()\r\n );\r\n let subtract =\r\n (startOfStep.valueOf() - from.valueOf()) % step.asMilliseconds();\r\n if (subtract > 0) {\r\n subtract -= step.asMilliseconds();\r\n }\r\n if (till.valueOf() - from.valueOf() > step.asMilliseconds()) {\r\n steps += 1;\r\n }\r\n return new Array(steps).fill(0).map((_, index) => ({\r\n from: moment(from)\r\n .add(subtract)\r\n .add(step.asMilliseconds() * index),\r\n till: moment(from)\r\n .add(subtract)\r\n .add(step.asMilliseconds() * (index + 1)),\r\n }));\r\n};\r\n\r\nexport const generateGridItems = (\r\n from: Moment,\r\n till: Moment,\r\n step: Duration,\r\n subdivisions: number = 1\r\n) => {\r\n if (!from || !till || !step || subdivisions < 1) {\r\n return [];\r\n }\r\n const steps =\r\n Math.floor(\r\n ((till.valueOf() - from.valueOf()) / step.asMilliseconds()) * subdivisions\r\n ) + 1;\r\n const width = till.valueOf() - from.valueOf();\r\n return new Array(steps)\r\n .fill(0)\r\n .map(\r\n (_, index) => ((step.asMilliseconds() / subdivisions) * index) / width\r\n );\r\n};\r\n"],"file":"utils.js"}
@@ -2653,6 +2653,10 @@ a.guestbell__dropdown-toggle {
2653
2653
  text-transform: none; }
2654
2654
  .bookingCalendar__lanesHeader .bookingCalendar__lanesHeader__renderItem__button__mutedText {
2655
2655
  opacity: 0.8; }
2656
+ .bookingCalendar__lanesHeader .bookingCalendar__lanesHeader__renderItem__button__mutedText--split {
2657
+ display: flex; }
2658
+ .bookingCalendar__lanesHeader .bookingCalendar__lanesHeader__renderItem__button__mutedText--split > span:first-child {
2659
+ margin-right: auto; }
2656
2660
 
2657
2661
  .bookingCalendar__controls {
2658
2662
  display: flex;