guestbell-forms 2.0.241 → 2.0.245

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.
@@ -16,13 +16,12 @@ export interface BookingCalendarProps<T extends BookingCalendarItemT, TLaneData>
16
16
  from: Moment;
17
17
  till: Moment;
18
18
  onRangeChange?: (range: BookingCalendarDateRange) => void;
19
- onExtraBookingsChange?: (extraBookings: T[]) => void;
20
19
  startOfStep?: Moment;
21
20
  step?: Duration;
22
21
  showGrid?: boolean;
23
22
  gridSubdivisions?: number;
24
- lanesCount?: number;
25
- lanesSource?: LaneSourceData<TLaneData>[];
23
+ minLanesCount?: number;
24
+ lanesSource?: LaneSourceData<T, TLaneData>[];
26
25
  BookingCalendarItem?: React.ComponentType<BookingCalendarItemProps<T>>;
27
26
  BookingCalendarRenderItem?: React.ComponentType<BookingCalendarRenderItemProps<T>>;
28
27
  BookingCalendarLane?: React.ComponentType<BookingCalendarLaneProps<T>>;
@@ -49,7 +49,6 @@ function BookingCalendar(props) {
49
49
  from = props.from,
50
50
  till = props.till,
51
51
  onRangeChange = props.onRangeChange,
52
- onExtraBookingsChange = props.onExtraBookingsChange,
53
52
  _props$step = props.step,
54
53
  step = _props$step === void 0 ? defaultStep : _props$step,
55
54
  _props$startOfStep = props.startOfStep,
@@ -58,7 +57,7 @@ function BookingCalendar(props) {
58
57
  showGrid = _props$showGrid === void 0 ? true : _props$showGrid,
59
58
  _props$gridSubdivisio = props.gridSubdivisions,
60
59
  gridSubdivisions = _props$gridSubdivisio === void 0 ? 1 : _props$gridSubdivisio,
61
- lanesCount = props.lanesCount,
60
+ minLanesCount = props.minLanesCount,
62
61
  lanesSource = props.lanesSource,
63
62
  _props$BookingCalenda = props.BookingCalendarControls,
64
63
  BookingCalendarControls = _props$BookingCalenda === void 0 ? _BookingCalendarControls.BookingCalendarControls : _props$BookingCalenda,
@@ -74,16 +73,9 @@ function BookingCalendar(props) {
74
73
  BookingCalendarLanesHeader = _props$BookingCalenda5 === void 0 ? _bookingCalendarLanesHeader.BookingCalendarLanesHeader : _props$BookingCalenda5,
75
74
  _props$BookingCalenda6 = props.BookingCalendarDatePicker,
76
75
  BookingCalendarDatePicker = _props$BookingCalenda6 === void 0 ? _bookingCalendarDatePicker.BookingCalendarDatePicker : _props$BookingCalenda6;
77
-
78
- var _React$useMemo = React.useMemo(function () {
79
- return (0, _utils.splitBookingsToLanes)(bookings, from, lanesCount, lanesSource);
80
- }, [bookings, from, lanesCount, lanesSource]),
81
- lanes = _React$useMemo.lanes,
82
- extraBookings = _React$useMemo.extraBookings;
83
-
84
- React.useEffect(function () {
85
- onExtraBookingsChange === null || onExtraBookingsChange === void 0 ? void 0 : onExtraBookingsChange(extraBookings);
86
- }, [extraBookings]);
76
+ var lanes = React.useMemo(function () {
77
+ return (0, _utils.splitBookingsToLanes)(bookings, from, minLanesCount, lanesSource);
78
+ }, [bookings, from, minLanesCount, lanesSource]);
87
79
  return /*#__PURE__*/React.createElement("div", {
88
80
  className: (0, _classnames.default)(_classes.bookingCalendarDefaultClasses.className, className)
89
81
  }, /*#__PURE__*/React.createElement(BookingCalendarControls, _extends({}, controlsClasses, {
@@ -105,11 +97,14 @@ function BookingCalendar(props) {
105
97
  step: step,
106
98
  startOfStep: startOfStep
107
99
  }))))), /*#__PURE__*/React.createElement("tbody", null, lanes.map(function (lane, laneIndex) {
108
- var _lane$laneKey;
100
+ var _lane$BookingCalendar, _lane$BookingCalendar2, _lane$laneKey, _lane$BookingCalendar3, _lane$BookingCalendar4;
109
101
 
102
+ var LaneBookingCalendarLaneHeader = (_lane$BookingCalendar = lane.BookingCalendarLaneHeader) !== null && _lane$BookingCalendar !== void 0 ? _lane$BookingCalendar : BookingCalendarLaneHeader;
103
+ var LaneBookingCalendarLane = (_lane$BookingCalendar2 = lane.BookingCalendarLane) !== null && _lane$BookingCalendar2 !== void 0 ? _lane$BookingCalendar2 : BookingCalendarLane;
110
104
  return /*#__PURE__*/React.createElement("tr", {
111
- key: laneIndex
112
- }, /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(BookingCalendarLaneHeader, {
105
+ key: laneIndex,
106
+ className: (0, _classnames.default)(lane.rowClassName)
107
+ }, /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(LaneBookingCalendarLaneHeader, {
113
108
  laneKey: (_lane$laneKey = lane.laneKey) !== null && _lane$laneKey !== void 0 ? _lane$laneKey : laneIndex,
114
109
  data: lane.data
115
110
  })), /*#__PURE__*/React.createElement("td", {
@@ -119,13 +114,13 @@ function BookingCalendar(props) {
119
114
  till: till,
120
115
  step: step,
121
116
  subdivisions: gridSubdivisions
122
- }), /*#__PURE__*/React.createElement(BookingCalendarLane, {
117
+ }), /*#__PURE__*/React.createElement(LaneBookingCalendarLane, {
123
118
  laneIndex: laneIndex,
124
119
  items: lane.items,
125
120
  from: from,
126
121
  till: till,
127
- BookingCalendarItem: BookingCalendarItem,
128
- BookingCalendarRenderItem: BookingCalendarRenderItem,
122
+ BookingCalendarItem: (_lane$BookingCalendar3 = lane.BookingCalendarItem) !== null && _lane$BookingCalendar3 !== void 0 ? _lane$BookingCalendar3 : BookingCalendarItem,
123
+ BookingCalendarRenderItem: (_lane$BookingCalendar4 = lane.BookingCalendarRenderItem) !== null && _lane$BookingCalendar4 !== void 0 ? _lane$BookingCalendar4 : BookingCalendarRenderItem,
129
124
  step: step
130
125
  })));
131
126
  }))));
@@ -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","step","startOfStep","showGrid","gridSubdivisions","minLanesCount","lanesSource","BookingCalendarControls","DefaultBookingCalendarControls","BookingCalendarItem","BookingCalendarLane","DefaultBookingCalendarLane","BookingCalendarRenderItem","BookingCalendarGrid","DefaultBookingCalendarGrid","BookingCalendarLaneHeader","DefaultBookingCalendarLaneHeader","BookingCalendarLanesHeader","DefaultBookingCalendarLanesHeader","BookingCalendarDatePicker","DefaultBookingCalendarDatePicker","lanes","React","useMemo","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 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 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 = 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 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,27 +1,35 @@
1
1
  import moment, { Moment, Duration } from 'moment';
2
- import { BookingCalendarItemT, BookingCalendarItemWithOriginalIndexT } from './common';
2
+ import { BookingCalendarItemProps } from './bookingCalendarItem';
3
+ import { BookingCalendarLaneProps } from './bookingCalendarLane';
4
+ import { BookingCalendarLaneHeaderProps } from './bookingCalendarLaneHeader';
5
+ import { BookingCalendarRenderItemProps } from './bookingCalendarRenderItem';
6
+ import { BookingCalendarItemT } 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>[];
13
- extraBookings: (T & BookingCalendarItemWithOriginalIndexT)[];
14
- };
20
+ export declare function splitBookingsToLanes<T extends BookingCalendarItemT, TLaneData>(bookings: T[], from: Moment, minLanesCount: number, lanesSource?: LaneSourceData<T, TLaneData>[]): LaneData<T, TLaneData>[];
15
21
  export declare function itemsOverlap<T extends BookingCalendarItemT>(a: T, b: T): boolean;
16
22
  export declare const getItemPositionStyle: (marginStart: number, width: number) => import("react").CSSProperties;
17
23
  export declare function calculateItemsDimensions<T extends BookingCalendarItemT>(items: T[], from: Moment, till: Moment): {
18
24
  item: T;
19
25
  start: number;
20
26
  realStart: number;
27
+ realFrom: moment.Moment;
21
28
  startIsCut: boolean;
22
29
  width: number;
23
30
  end: number;
24
31
  realEnd: number;
32
+ realTill: moment.Moment;
25
33
  endIsCut: boolean;
26
34
  marginStart: number;
27
35
  }[];
@@ -44,43 +44,32 @@ 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) {
51
- return {
52
- lanes: [],
53
- extraBookings: []
54
- };
51
+ return [];
55
52
  }
56
53
 
57
54
  var lanes = [];
58
- var extraBookings = [];
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
55
 
70
56
  if (lanesSource !== null && lanesSource !== void 0 && lanesSource.length) {
71
57
  lanes = lanesSource.map(function (source) {
72
- return {
73
- items: [],
74
- laneKey: source.laneKey,
75
- data: source.data
76
- };
58
+ return _objectSpread(_objectSpread({}, source), {}, {
59
+ items: []
60
+ });
77
61
  });
78
62
  }
79
63
 
80
- if (bookings.every(function (b) {
81
- return b.laneKey !== undefined;
82
- })) {
83
- var grouped = groupBy(bookings.map(function (booking, originalIndex) {
64
+ var bookingsWithoutLaneKey = bookings.filter(function (a) {
65
+ return a.laneKey === undefined;
66
+ });
67
+ var bookingsWithLaneKey = bookings.filter(function (a) {
68
+ return a.laneKey !== undefined;
69
+ });
70
+
71
+ if (bookingsWithLaneKey.length) {
72
+ var grouped = groupBy(bookingsWithLaneKey.map(function (booking, originalIndex) {
84
73
  return _objectSpread(_objectSpread({}, booking), {}, {
85
74
  originalIndex: originalIndex
86
75
  });
@@ -88,14 +77,17 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
88
77
  return a.laneKey;
89
78
  });
90
79
  lanes = Object.keys(grouped).map(function (key) {
91
- var _lanesSource$find;
80
+ var _lanesSource$find, _lanesSource$find2;
92
81
 
93
82
  return {
94
83
  laneKey: Number(key),
95
84
  items: grouped[key],
96
85
  data: lanesSource === null || lanesSource === void 0 ? void 0 : (_lanesSource$find = lanesSource.find(function (a) {
97
86
  return a.laneKey === Number(key);
98
- })) === null || _lanesSource$find === void 0 ? void 0 : _lanesSource$find.data
87
+ })) === null || _lanesSource$find === void 0 ? void 0 : _lanesSource$find.data,
88
+ rowClassName: lanesSource === null || lanesSource === void 0 ? void 0 : (_lanesSource$find2 = lanesSource.find(function (a) {
89
+ return a.laneKey === Number(key);
90
+ })) === null || _lanesSource$find2 === void 0 ? void 0 : _lanesSource$find2.rowClassName
99
91
  };
100
92
  });
101
93
  var missingLanes = lanesSource === null || lanesSource === void 0 ? void 0 : lanesSource.filter(function (a) {
@@ -108,9 +100,11 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
108
100
  items: []
109
101
  });
110
102
  }));
111
- } else {
103
+ }
104
+
105
+ if (bookingsWithoutLaneKey.length) {
112
106
  (function () {
113
- var remainingBookings = bookings.map(function (booking, originalIndex) {
107
+ var remainingBookings = bookingsWithoutLaneKey.map(function (booking, originalIndex) {
114
108
  return _objectSpread(_objectSpread({}, booking), {}, {
115
109
  originalIndex: originalIndex
116
110
  });
@@ -149,16 +143,13 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
149
143
  if (bookingIndex >= 0 && laneIndex >= 0) {
150
144
  lanes[laneIndex].items = lanes[laneIndex].items.concat(_objectSpread({}, remainingBookings[bookingIndex]));
151
145
  remainingBookings.splice(bookingIndex, 1);
152
- } else if (!lanesCount) {
146
+ } else {
153
147
  lanes = lanes.concat({
154
148
  items: [_objectSpread({}, remainingBookings[0])],
155
149
  laneKey: lanes.length,
156
- data: null
150
+ data: undefined
157
151
  });
158
152
  remainingBookings.shift();
159
- } else {
160
- // lanes = lanes.concat([[{ ...remainingBookings[0] }]]);
161
- extraBookings = extraBookings.concat(remainingBookings.shift());
162
153
  }
163
154
  };
164
155
 
@@ -189,13 +180,20 @@ function splitBookingsToLanes(bookings, from, lanesCount) {
189
180
  });
190
181
  }
191
182
 
183
+ if (lanes.length < minLanesCount) {
184
+ lanes = lanes.concat(new Array(minLanesCount - lanes.length).fill(null).map(function (_, index) {
185
+ return {
186
+ items: [],
187
+ laneKey: index + lanes.length,
188
+ data: null
189
+ };
190
+ }));
191
+ }
192
+
192
193
  lanes = lanes.sort(function (a, b) {
193
194
  return a.laneKey - b.laneKey;
194
195
  });
195
- return {
196
- lanes: lanes,
197
- extraBookings: extraBookings
198
- };
196
+ return lanes;
199
197
  }
200
198
 
201
199
  function itemsOverlap(a, b) {
@@ -231,20 +229,24 @@ function calculateItemsDimensions(items, from, till) {
231
229
  return widthMs > 0 ? items === null || items === void 0 ? void 0 : items.map(function (item) {
232
230
  var startIsCut = item.from.valueOf() < startMs;
233
231
  var realStart = (item.from.valueOf() - startMs) / widthMs;
232
+ var realFrom = startIsCut ? (0, _moment.default)(startMs) : (0, _moment.default)(item.from);
234
233
  var start = startIsCut ? 0 : realStart;
235
234
  var endIsCut = item.till.valueOf() > endMs;
236
235
  var realEnd = (item.till.valueOf() - startMs) / widthMs;
237
236
  var end = endIsCut ? (endMs - startMs) / widthMs : realEnd;
237
+ var realTill = endIsCut ? (0, _moment.default)(endMs) : (0, _moment.default)(item.till);
238
238
  var marginStart = start - lastEnd;
239
239
  lastEnd = (item.till.valueOf() - startMs) / widthMs;
240
240
  return {
241
241
  item: item,
242
242
  start: start,
243
243
  realStart: realStart,
244
+ realFrom: realFrom,
244
245
  startIsCut: startIsCut,
245
246
  width: end - start,
246
247
  end: end,
247
248
  realEnd: realEnd,
249
+ realTill: realTill,
248
250
  endIsCut: endIsCut,
249
251
  marginStart: marginStart
250
252
  };
@@ -263,6 +265,10 @@ var generateControlItems = function generateControlItems(from, till, step, start
263
265
  subtract -= step.asMilliseconds();
264
266
  }
265
267
 
268
+ if (till.valueOf() - from.valueOf() > step.asMilliseconds()) {
269
+ steps += 1;
270
+ }
271
+
266
272
  return new Array(steps).fill(0).map(function (_, index) {
267
273
  return {
268
274
  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","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 [];\r\n }\r\n let lanes: LaneData<T, TLaneData>[] = [];\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 {\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 }\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 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 lanes = lanes.sort((a, b) => a.laneKey - b.laneKey);\r\n return lanes;\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;