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.
- package/build/components/bookingCalendar/BookingCalendar.d.ts +2 -3
- package/build/components/bookingCalendar/BookingCalendar.js +13 -18
- 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 -8
- package/build/components/bookingCalendar/utils.js +44 -38
- 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
@@ -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
|
-
|
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
|
-
|
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
|
-
|
79
|
-
|
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
|
-
|
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(
|
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":";;;;;;;;;AAAA;;AACA;;AAIA;;AAEA;;AAIA;;AACA;;AAIA;;AAGA;;AAIA;;AAIA;;AAIA;;;;;;;;;;AA0CA,IAAMA,WAAW,GAAG,sBAAS,CAAT,EAAY,KAAZ,CAApB;AACA,IAAMC,kBAAkB,GAAG,uBAASC,OAAT,CAAiB,KAAjB,CAA3B;;AAEO,SAASC,eAAT,CACLC,KADK,EAEL;AACA,MACEC,QADF,GAwBID,KAxBJ,CACEC,QADF;AAAA,MAEEC,SAFF,GAwBIF,KAxBJ,CAEEE,SAFF;AAAA,MAGEC,eAHF,GAwBIH,KAxBJ,CAGEG,eAHF;AAAA,MAIEC,eAJF,GAwBIJ,KAxBJ,CAIEI,eAJF;AAAA,MAKEC,cALF,GAwBIL,KAxBJ,CAKEK,cALF;AAAA,MAMEC,IANF,GAwBIN,KAxBJ,CAMEM,IANF;AAAA,MAOEC,IAPF,GAwBIP,KAxBJ,CAOEO,IAPF;AAAA,MAQEC,aARF,GAwBIR,KAxBJ,CAQEQ,aARF;AAAA,MASEC,qBATF,GAwBIT,KAxBJ,CASES,qBATF;AAAA,oBAwBIT,KAxBJ,CAUEU,IAVF;AAAA,MAUEA,IAVF,4BAUSd,WAVT;AAAA,2BAwBII,KAxBJ,CAWEW,WAXF;AAAA,MAWEA,WAXF,mCAWgBd,kBAXhB;AAAA,wBAwBIG,KAxBJ,CAYEY,QAZF;AAAA,MAYEA,QAZF,gCAYa,IAZb;AAAA,8BAwBIZ,KAxBJ,CAaEa,gBAbF;AAAA,MAaEA,gBAbF,sCAaqB,CAbrB;AAAA,MAcEC,UAdF,GAwBId,KAxBJ,CAcEc,UAdF;AAAA,MAeEC,WAfF,GAwBIf,KAxBJ,CAeEe,WAfF;AAAA,8BAwBIf,KAxBJ,CAgBEgB,uBAhBF;AAAA,MAgBEA,uBAhBF,sCAgB4BC,gDAhB5B;AAAA,MAiBEC,mBAjBF,GAwBIlB,KAxBJ,CAiBEkB,mBAjBF;AAAA,+BAwBIlB,KAxBJ,CAkBEmB,mBAlBF;AAAA,MAkBEA,mBAlBF,uCAkBwBC,wCAlBxB;AAAA,MAmBEC,yBAnBF,GAwBIrB,KAxBJ,CAmBEqB,yBAnBF;AAAA,+BAwBIrB,KAxBJ,CAoBEsB,mBApBF;AAAA,MAoBEA,mBApBF,uCAoBwBC,wCApBxB;AAAA,+BAwBIvB,KAxBJ,CAqBEwB,yBArBF;AAAA,MAqBEA,yBArBF,uCAqB8BC,oDArB9B;AAAA,+BAwBIzB,KAxBJ,CAsBE0B,0BAtBF;AAAA,MAsBEA,0BAtBF,uCAsB+BC,sDAtB/B;AAAA,+BAwBI3B,KAxBJ,CAuBE4B,yBAvBF;AAAA,MAuBEA,yBAvBF,uCAuB8BC,oDAvB9B;;AAyBA,uBAAiCC,KAAK,CAACC,OAAN,CAC/B;AAAA,WACE,iCACE9B,QADF,EAEEK,IAFF,EAGEQ,UAHF,EAIEC,WAJF,CADF;AAAA,GAD+B,EAQ/B,CAACd,QAAD,EAAWK,IAAX,EAAiBQ,UAAjB,EAA6BC,WAA7B,CAR+B,CAAjC;AAAA,MAAQiB,KAAR,kBAAQA,KAAR;AAAA,MAAeC,aAAf,kBAAeA,aAAf;;AAUAH,EAAAA,KAAK,CAACI,SAAN,CAAgB,YAAM;AACpBzB,IAAAA,qBAAqB,SAArB,IAAAA,qBAAqB,WAArB,YAAAA,qBAAqB,CAAGwB,aAAH,CAArB;AACD,GAFD,EAEG,CAACA,aAAD,CAFH;AAGA,sBACE;AACE,IAAA,SAAS,EAAE,yBAAWE,uCAA8BjC,SAAzC,EAAoDA,SAApD;AADb,kBAGE,oBAAC,uBAAD,eACME,eADN;AAEE,IAAA,KAAK,EAAEH,QAFT;AAGE,IAAA,IAAI,EAAEK,IAHR;AAIE,IAAA,IAAI,EAAEC,IAJR;AAKE,IAAA,aAAa,EAAEC,aALjB;AAME,IAAA,IAAI,EAAEE;AANR,KAHF,eAWE;AACE,IAAA,SAAS,EAAE,yBACTyB,uCAA8B9B,cADrB,EAETA,cAFS;AADb,kBAME,gDACE,6CACE,6CACE,oBAAC,yBAAD;AACE,IAAA,IAAI,EAAEC,IADR;AAEE,IAAA,IAAI,EAAEC,IAFR;AAGE,IAAA,aAAa,EAAEC;AAHjB,IADF,CADF,eAQE,6CACE,oBAAC,0BAAD,eACMJ,eADN;AAEE,IAAA,IAAI,EAAEE,IAFR;AAGE,IAAA,IAAI,EAAEC,IAHR;AAIE,IAAA,aAAa,EAAEC,aAJjB;AAKE,IAAA,IAAI,EAAEE,IALR;AAME,IAAA,WAAW,EAAEC;AANf,KADF,CARF,CADF,CANF,eA2BE,mCACGqB,KAAK,CAACI,GAAN,CAAU,UAACC,IAAD,EAAOC,SAAP;AAAA;;AAAA,wBACT;AAAI,MAAA,GAAG,EAAEA;AAAT,oBACE,6CACE,oBAAC,yBAAD;AACE,MAAA,OAAO,mBAAED,IAAI,CAACE,OAAP,yDAAkBD,SAD3B;AAEE,MAAA,IAAI,EAAED,IAAI,CAACG;AAFb,MADF,CADF,eAOE;AACE,MAAA,SAAS,EAAE,yBACTL,uCAA8BhC,eADrB,EAETA,eAFS;AADb,OAMGS,QAAQ,iBACP,oBAAC,mBAAD;AACE,MAAA,IAAI,EAAEN,IADR;AAEE,MAAA,IAAI,EAAEC,IAFR;AAGE,MAAA,IAAI,EAAEG,IAHR;AAIE,MAAA,YAAY,EAAEG;AAJhB,MAPJ,eAcE,oBAAC,mBAAD;AACE,MAAA,SAAS,EAAEyB,SADb;AAEE,MAAA,KAAK,EAAED,IAAI,CAACI,KAFd;AAGE,MAAA,IAAI,EAAEnC,IAHR;AAIE,MAAA,IAAI,EAAEC,IAJR;AAKE,MAAA,mBAAmB,EAAEW,mBALvB;AAME,MAAA,yBAAyB,EAAEG,yBAN7B;AAOE,MAAA,IAAI,EAAEX;AAPR,MAdF,CAPF,CADS;AAAA,GAAV,CADH,CA3BF,CAXF,CADF;AA8ED","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;;;;;;;;
|
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,27 +1,35 @@
|
|
1
1
|
import moment, { Moment, Duration } from 'moment';
|
2
|
-
import {
|
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?:
|
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, 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,
|
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
|
-
|
75
|
-
data: source.data
|
76
|
-
};
|
58
|
+
return _objectSpread(_objectSpread({}, source), {}, {
|
59
|
+
items: []
|
60
|
+
});
|
77
61
|
});
|
78
62
|
}
|
79
63
|
|
80
|
-
|
81
|
-
return
|
82
|
-
})
|
83
|
-
|
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
|
-
}
|
103
|
+
}
|
104
|
+
|
105
|
+
if (bookingsWithoutLaneKey.length) {
|
112
106
|
(function () {
|
113
|
-
var remainingBookings =
|
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
|
146
|
+
} else {
|
153
147
|
lanes = lanes.concat({
|
154
148
|
items: [_objectSpread({}, remainingBookings[0])],
|
155
149
|
laneKey: lanes.length,
|
156
|
-
data:
|
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;
|