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.
- package/build/components/bookingCalendar/BookingCalendar.d.ts +2 -2
- package/build/components/bookingCalendar/BookingCalendar.js +12 -9
- package/build/components/bookingCalendar/BookingCalendar.js.map +1 -1
- package/build/components/bookingCalendar/bookingCalendarItem/BookingCalendarItem.d.ts +8 -0
- package/build/components/bookingCalendar/bookingCalendarItem/BookingCalendarItem.js.map +1 -1
- package/build/components/bookingCalendar/bookingCalendarLane/BookingCalendarLane.js +2 -2
- package/build/components/bookingCalendar/bookingCalendarLane/BookingCalendarLane.js.map +1 -1
- package/build/components/bookingCalendar/bookingCalendarLanesHeader/BookingCalendarLanesHeaderRenderItem.js +9 -3
- package/build/components/bookingCalendar/bookingCalendarLanesHeader/BookingCalendarLanesHeaderRenderItem.js.map +1 -1
- package/build/components/bookingCalendar/utils.d.ts +16 -5
- package/build/components/bookingCalendar/utils.js +44 -27
- package/build/components/bookingCalendar/utils.js.map +1 -1
- package/build/dist/guestbell-forms.css +4 -0
- package/build/dist/guestbell-forms.css.map +1 -1
- package/build/dist/guestbell-forms.min.css +1 -1
- package/build/dist/report.html +1 -1
- package/build/scss/components/bookingCalendar/bookingCalendar.scss +6 -0
- package/package.json +1 -1
@@ -21,8 +21,8 @@ export interface BookingCalendarProps<T extends BookingCalendarItemT, TLaneData>
|
|
21
21
|
step?: Duration;
|
22
22
|
showGrid?: boolean;
|
23
23
|
gridSubdivisions?: number;
|
24
|
-
|
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
|
-
|
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,
|
80
|
-
}, [bookings, from,
|
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
|
-
|
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(
|
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;;;;;;;;
|
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,
|
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,
|
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?:
|
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,
|
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,
|
12
|
-
lanes: LaneData<T,
|
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,
|
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
|
-
|
75
|
-
data: source.data
|
76
|
-
};
|
62
|
+
return _objectSpread(_objectSpread({}, source), {}, {
|
63
|
+
items: []
|
64
|
+
});
|
77
65
|
});
|
78
66
|
}
|
79
67
|
|
80
|
-
|
81
|
-
return
|
82
|
-
})
|
83
|
-
|
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
|
-
}
|
107
|
+
}
|
108
|
+
|
109
|
+
if (bookingsWithoutLaneKey.length) {
|
112
110
|
(function () {
|
113
|
-
var remainingBookings =
|
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
|
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 (!
|
150
|
+
} else if (!minLanesCount) {
|
153
151
|
lanes = lanes.concat({
|
154
152
|
items: [_objectSpread({}, remainingBookings[0])],
|
155
153
|
laneKey: lanes.length,
|
156
|
-
data:
|
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;
|