guestbell-forms 2.0.268 → 2.0.272

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,7 @@ export interface BookingCalendarProps<T extends BookingCalendarItemT, TLaneData>
21
21
  step?: Duration;
22
22
  showGrid?: boolean;
23
23
  showSelection?: boolean;
24
+ minSelectionSize?: number;
24
25
  gridAvailableSteps?: Duration[];
25
26
  goalGridWidthPx?: number;
26
27
  minLanesCount?: number;
@@ -75,6 +75,8 @@ function BookingCalendar(props) {
75
75
  getMomentFormatFunction = _props$getMomentForma === void 0 ? _common.defaultGetMomentFormatFunction : _props$getMomentForma,
76
76
  _props$goalGridWidthP = props.goalGridWidthPx,
77
77
  goalGridWidthPx = _props$goalGridWidthP === void 0 ? 60 : _props$goalGridWidthP,
78
+ _props$minSelectionSi = props.minSelectionSize,
79
+ minSelectionSize = _props$minSelectionSi === void 0 ? 10 : _props$minSelectionSi,
78
80
  minLanesCount = props.minLanesCount,
79
81
  lanesSource = props.lanesSource,
80
82
  filterBookingsToZoom = props.filterBookingsToZoom,
@@ -114,8 +116,8 @@ function BookingCalendar(props) {
114
116
  return;
115
117
  }
116
118
 
117
- var screenSpaceStartX = data.origin[0];
118
- var screenSpaceEndX = data.target[0];
119
+ var screenSpaceStartX = Math.min(data.origin[0], data.target[0]);
120
+ var screenSpaceEndX = Math.max(data.origin[0], data.target[0]);
119
121
  var durationMs = till.valueOf() - from.valueOf();
120
122
 
121
123
  var toTimeSpace = function toTimeSpace(num) {
@@ -147,7 +149,8 @@ function BookingCalendar(props) {
147
149
  dataRowsCount: lanes.length
148
150
  }), showSelection && /*#__PURE__*/React.createElement(_BookingCalendarSelection.default, {
149
151
  dataRowsCount: lanes.length,
150
- onSelected: onSelected
152
+ onSelected: onSelected,
153
+ minSelectionSize: minSelectionSize
151
154
  }), /*#__PURE__*/React.createElement("div", {
152
155
  className: (0, _classnames.default)(_classes.bookingCalendarDefaultClasses.lanesHeaderHeaderContainerClassName, lanesHeaderHeaderContainerClassName)
153
156
  }, typeof BookingCalendarDatePicker === 'function' ? /*#__PURE__*/React.createElement(BookingCalendarDatePicker, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/components/bookingCalendar/BookingCalendar.tsx"],"names":["defaultStep","BookingCalendar","props","bookings","className","laneContainerClassName","laneHeaderContainerClassName","lanesHeaderContainerClassName","lanesHeaderHeaderContainerClassName","controlsClasses","tableClassName","from","till","onRangeChange","step","showGrid","showSelection","gridAvailableSteps","defaultGridAvailableSteps","getMomentFormatFunction","defaultGetMomentFormatFunction","goalGridWidthPx","minLanesCount","lanesSource","filterBookingsToZoom","zoomLevels","BookingCalendarControls","DefaultBookingCalendarControls","BookingCalendarItem","BookingCalendarLane","DefaultBookingCalendarLane","BookingCalendarRenderItem","BookingCalendarGrid","DefaultBookingCalendarGrid","BookingCalendarLaneHeader","DefaultBookingCalendarLaneHeader","BookingCalendarLanesHeader","DefaultBookingCalendarLanesHeader","BookingCalendarDatePicker","DefaultBookingCalendarDatePicker","lanes","React","useMemo","observe","width","clone","startOf","gridItems","items","bestStep","onSelected","useCallback","data","screenSpaceStartX","origin","screenSpaceEndX","target","durationMs","valueOf","toTimeSpace","num","timeSpaceStart","timeSpaceEnd","bookingCalendarDefaultClasses","length","map","lane","laneIndex","LaneBookingCalendarLaneHeader","LaneBookingCalendarLane","rowClassName","laneKey"],"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 {\r\n BookingCalendarDateRange,\r\n BookingCalendarItemT,\r\n defaultGetMomentFormatFunction,\r\n} from './common';\r\nimport {\r\n BookingCalendarControls as DefaultBookingCalendarControls,\r\n BookingCalendarControlsProps,\r\n} from './bookingCalendarControls/BookingCalendarControls';\r\nimport {\r\n generateGridItems,\r\n LaneSourceData,\r\n splitBookingsToLanes,\r\n} 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\nimport {\r\n defaultGridAvailableSteps,\r\n GetMomentFormatFunctionType,\r\n ZoomLevel,\r\n} from '.';\r\nimport { BookingCalendarTimeAxis } from './bookingCalendarTimeAxis/BookingCalendarTimeAxis';\r\nimport useDimensions from 'react-cool-dimensions';\r\nimport BookingCalendarSelection, {\r\n BookingCalendarSelectionData,\r\n} from './bookingCalendarSelection/BookingCalendarSelection';\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 getMomentFormatFunction?: GetMomentFormatFunctionType;\r\n onRangeChange?: (range: BookingCalendarDateRange) => void;\r\n step?: Duration;\r\n showGrid?: boolean;\r\n showSelection?: boolean;\r\n gridAvailableSteps?: Duration[];\r\n goalGridWidthPx?: number;\r\n minLanesCount?: number;\r\n lanesSource?: LaneSourceData<T, TLaneData>[];\r\n\r\n zoomLevels?: ZoomLevel[];\r\n filterBookingsToZoom?: (booking: T) => boolean;\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?:\r\n | React.ComponentType<BookingCalendarDatePickerProps<T>>\r\n | React.ReactNode;\r\n}\r\n\r\nconst defaultStep = duration(1, '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 laneContainerClassName,\r\n laneHeaderContainerClassName,\r\n lanesHeaderContainerClassName,\r\n lanesHeaderHeaderContainerClassName,\r\n controlsClasses,\r\n tableClassName,\r\n from,\r\n till,\r\n onRangeChange,\r\n step = defaultStep,\r\n showGrid = true,\r\n showSelection = true,\r\n gridAvailableSteps = defaultGridAvailableSteps,\r\n getMomentFormatFunction = defaultGetMomentFormatFunction,\r\n goalGridWidthPx = 60,\r\n minLanesCount,\r\n lanesSource,\r\n filterBookingsToZoom,\r\n zoomLevels,\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 const { observe, width } = useDimensions();\r\n const { items: gridItems, bestStep } = React.useMemo(\r\n () =>\r\n generateGridItems(\r\n from,\r\n till,\r\n step,\r\n width,\r\n gridAvailableSteps,\r\n goalGridWidthPx,\r\n from?.clone()?.startOf('day')\r\n ),\r\n [from, till, step, width, gridAvailableSteps, goalGridWidthPx]\r\n );\r\n const onSelected = React.useCallback(\r\n (data: BookingCalendarSelectionData) => {\r\n if (!from || !till || !width || !onRangeChange) {\r\n return;\r\n }\r\n const screenSpaceStartX = data.origin[0];\r\n const screenSpaceEndX = data.target[0];\r\n const durationMs = till.valueOf() - from.valueOf();\r\n const toTimeSpace = (num: number) => (num / (width || 1)) * durationMs;\r\n const timeSpaceStart = moment(\r\n from.valueOf() + toTimeSpace(screenSpaceStartX)\r\n );\r\n const timeSpaceEnd = moment(\r\n from.valueOf() + toTimeSpace(screenSpaceEndX)\r\n );\r\n onRangeChange({ from: timeSpaceStart, till: timeSpaceEnd });\r\n },\r\n [from, till, width, onRangeChange]\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 filterBookingsToZoom={filterBookingsToZoom}\r\n zoomLevels={zoomLevels}\r\n />\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.tableClassName,\r\n tableClassName\r\n )}\r\n >\r\n {showGrid && (\r\n <BookingCalendarGrid\r\n containerRef={observe}\r\n items={gridItems}\r\n dataRowsCount={lanes.length}\r\n />\r\n )}\r\n {showSelection && (\r\n <BookingCalendarSelection\r\n dataRowsCount={lanes.length}\r\n onSelected={onSelected}\r\n />\r\n )}\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.lanesHeaderHeaderContainerClassName,\r\n lanesHeaderHeaderContainerClassName\r\n )}\r\n >\r\n {typeof BookingCalendarDatePicker === 'function' ? (\r\n <BookingCalendarDatePicker\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n />\r\n ) : (\r\n BookingCalendarDatePicker\r\n )}\r\n </div>\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.lanesHeaderContainerClassName,\r\n lanesHeaderContainerClassName\r\n )}\r\n >\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 />\r\n </div>\r\n\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 <React.Fragment key={laneIndex}>\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.laneHeaderContainerClassName,\r\n laneHeaderContainerClassName,\r\n lane.rowClassName,\r\n {\r\n [`${bookingCalendarDefaultClasses.laneHeaderContainerClassName}--last`]:\r\n laneIndex === lanes.length - 1,\r\n [`${bookingCalendarDefaultClasses.laneHeaderContainerClassName}--first`]:\r\n laneIndex === 0,\r\n }\r\n )}\r\n >\r\n <LaneBookingCalendarLaneHeader<TLaneData>\r\n laneKey={lane.laneKey ?? laneIndex}\r\n data={lane.data}\r\n />\r\n </div>\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.laneContainerClassName,\r\n laneContainerClassName,\r\n lane.rowClassName,\r\n {\r\n [`${bookingCalendarDefaultClasses.laneContainerClassName}--last`]:\r\n laneIndex === lanes.length - 1,\r\n [`${bookingCalendarDefaultClasses.laneContainerClassName}--first`]:\r\n laneIndex === 0,\r\n }\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 ?? BookingCalendarRenderItem\r\n }\r\n step={step}\r\n />\r\n </div>\r\n </React.Fragment>\r\n );\r\n })}\r\n <div />\r\n <div>\r\n <BookingCalendarTimeAxis\r\n items={gridItems}\r\n bestStep={bestStep}\r\n getMomentFormatFunction={getMomentFormatFunction}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendar.js"}
1
+ {"version":3,"sources":["../../../src/lib/components/bookingCalendar/BookingCalendar.tsx"],"names":["defaultStep","BookingCalendar","props","bookings","className","laneContainerClassName","laneHeaderContainerClassName","lanesHeaderContainerClassName","lanesHeaderHeaderContainerClassName","controlsClasses","tableClassName","from","till","onRangeChange","step","showGrid","showSelection","gridAvailableSteps","defaultGridAvailableSteps","getMomentFormatFunction","defaultGetMomentFormatFunction","goalGridWidthPx","minSelectionSize","minLanesCount","lanesSource","filterBookingsToZoom","zoomLevels","BookingCalendarControls","DefaultBookingCalendarControls","BookingCalendarItem","BookingCalendarLane","DefaultBookingCalendarLane","BookingCalendarRenderItem","BookingCalendarGrid","DefaultBookingCalendarGrid","BookingCalendarLaneHeader","DefaultBookingCalendarLaneHeader","BookingCalendarLanesHeader","DefaultBookingCalendarLanesHeader","BookingCalendarDatePicker","DefaultBookingCalendarDatePicker","lanes","React","useMemo","observe","width","clone","startOf","gridItems","items","bestStep","onSelected","useCallback","data","screenSpaceStartX","Math","min","origin","target","screenSpaceEndX","max","durationMs","valueOf","toTimeSpace","num","timeSpaceStart","timeSpaceEnd","bookingCalendarDefaultClasses","length","map","lane","laneIndex","LaneBookingCalendarLaneHeader","LaneBookingCalendarLane","rowClassName","laneKey"],"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 {\r\n BookingCalendarDateRange,\r\n BookingCalendarItemT,\r\n defaultGetMomentFormatFunction,\r\n} from './common';\r\nimport {\r\n BookingCalendarControls as DefaultBookingCalendarControls,\r\n BookingCalendarControlsProps,\r\n} from './bookingCalendarControls/BookingCalendarControls';\r\nimport {\r\n generateGridItems,\r\n LaneSourceData,\r\n splitBookingsToLanes,\r\n} 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\nimport {\r\n defaultGridAvailableSteps,\r\n GetMomentFormatFunctionType,\r\n ZoomLevel,\r\n} from '.';\r\nimport { BookingCalendarTimeAxis } from './bookingCalendarTimeAxis/BookingCalendarTimeAxis';\r\nimport useDimensions from 'react-cool-dimensions';\r\nimport BookingCalendarSelection, {\r\n BookingCalendarSelectionData,\r\n} from './bookingCalendarSelection/BookingCalendarSelection';\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 getMomentFormatFunction?: GetMomentFormatFunctionType;\r\n onRangeChange?: (range: BookingCalendarDateRange) => void;\r\n step?: Duration;\r\n showGrid?: boolean;\r\n showSelection?: boolean;\r\n minSelectionSize?: number;\r\n gridAvailableSteps?: Duration[];\r\n goalGridWidthPx?: number;\r\n minLanesCount?: number;\r\n lanesSource?: LaneSourceData<T, TLaneData>[];\r\n\r\n zoomLevels?: ZoomLevel[];\r\n filterBookingsToZoom?: (booking: T) => boolean;\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?:\r\n | React.ComponentType<BookingCalendarDatePickerProps<T>>\r\n | React.ReactNode;\r\n}\r\n\r\nconst defaultStep = duration(1, '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 laneContainerClassName,\r\n laneHeaderContainerClassName,\r\n lanesHeaderContainerClassName,\r\n lanesHeaderHeaderContainerClassName,\r\n controlsClasses,\r\n tableClassName,\r\n from,\r\n till,\r\n onRangeChange,\r\n step = defaultStep,\r\n showGrid = true,\r\n showSelection = true,\r\n gridAvailableSteps = defaultGridAvailableSteps,\r\n getMomentFormatFunction = defaultGetMomentFormatFunction,\r\n goalGridWidthPx = 60,\r\n minSelectionSize = 10,\r\n minLanesCount,\r\n lanesSource,\r\n filterBookingsToZoom,\r\n zoomLevels,\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 const { observe, width } = useDimensions();\r\n const { items: gridItems, bestStep } = React.useMemo(\r\n () =>\r\n generateGridItems(\r\n from,\r\n till,\r\n step,\r\n width,\r\n gridAvailableSteps,\r\n goalGridWidthPx,\r\n from?.clone()?.startOf('day')\r\n ),\r\n [from, till, step, width, gridAvailableSteps, goalGridWidthPx]\r\n );\r\n const onSelected = React.useCallback(\r\n (data: BookingCalendarSelectionData) => {\r\n if (!from || !till || !width || !onRangeChange) {\r\n return;\r\n }\r\n const screenSpaceStartX = Math.min(data.origin[0], data.target[0]);\r\n const screenSpaceEndX = Math.max(data.origin[0], data.target[0]);\r\n const durationMs = till.valueOf() - from.valueOf();\r\n const toTimeSpace = (num: number) => (num / (width || 1)) * durationMs;\r\n const timeSpaceStart = moment(\r\n from.valueOf() + toTimeSpace(screenSpaceStartX)\r\n );\r\n const timeSpaceEnd = moment(\r\n from.valueOf() + toTimeSpace(screenSpaceEndX)\r\n );\r\n onRangeChange({ from: timeSpaceStart, till: timeSpaceEnd });\r\n },\r\n [from, till, width, onRangeChange]\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 filterBookingsToZoom={filterBookingsToZoom}\r\n zoomLevels={zoomLevels}\r\n />\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.tableClassName,\r\n tableClassName\r\n )}\r\n >\r\n {showGrid && (\r\n <BookingCalendarGrid\r\n containerRef={observe}\r\n items={gridItems}\r\n dataRowsCount={lanes.length}\r\n />\r\n )}\r\n {showSelection && (\r\n <BookingCalendarSelection\r\n dataRowsCount={lanes.length}\r\n onSelected={onSelected}\r\n minSelectionSize={minSelectionSize}\r\n />\r\n )}\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.lanesHeaderHeaderContainerClassName,\r\n lanesHeaderHeaderContainerClassName\r\n )}\r\n >\r\n {typeof BookingCalendarDatePicker === 'function' ? (\r\n <BookingCalendarDatePicker\r\n from={from}\r\n till={till}\r\n onRangeChange={onRangeChange}\r\n />\r\n ) : (\r\n BookingCalendarDatePicker\r\n )}\r\n </div>\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.lanesHeaderContainerClassName,\r\n lanesHeaderContainerClassName\r\n )}\r\n >\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 />\r\n </div>\r\n\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 <React.Fragment key={laneIndex}>\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.laneHeaderContainerClassName,\r\n laneHeaderContainerClassName,\r\n lane.rowClassName,\r\n {\r\n [`${bookingCalendarDefaultClasses.laneHeaderContainerClassName}--last`]:\r\n laneIndex === lanes.length - 1,\r\n [`${bookingCalendarDefaultClasses.laneHeaderContainerClassName}--first`]:\r\n laneIndex === 0,\r\n }\r\n )}\r\n >\r\n <LaneBookingCalendarLaneHeader<TLaneData>\r\n laneKey={lane.laneKey ?? laneIndex}\r\n data={lane.data}\r\n />\r\n </div>\r\n <div\r\n className={classNames(\r\n bookingCalendarDefaultClasses.laneContainerClassName,\r\n laneContainerClassName,\r\n lane.rowClassName,\r\n {\r\n [`${bookingCalendarDefaultClasses.laneContainerClassName}--last`]:\r\n laneIndex === lanes.length - 1,\r\n [`${bookingCalendarDefaultClasses.laneContainerClassName}--first`]:\r\n laneIndex === 0,\r\n }\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 ?? BookingCalendarRenderItem\r\n }\r\n step={step}\r\n />\r\n </div>\r\n </React.Fragment>\r\n );\r\n })}\r\n <div />\r\n <div>\r\n <BookingCalendarTimeAxis\r\n items={gridItems}\r\n bestStep={bestStep}\r\n getMomentFormatFunction={getMomentFormatFunction}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"file":"BookingCalendar.js"}
@@ -15,6 +15,7 @@ export interface BookingCalendarSelectionProps {
15
15
  target: BookingCalendarSelectionCoordinates;
16
16
  }) => void;
17
17
  dataRowsCount: number;
18
+ minSelectionSize: number;
18
19
  }
19
20
  export interface BookingCalendarSelectionState {
20
21
  selectionBoxOrigin: BookingCalendarSelectionCoordinates;
@@ -28,6 +29,7 @@ export default class BookingCalendarSelection extends React.Component<BookingCal
28
29
  private containerRef;
29
30
  constructor(props: any);
30
31
  handleTransformBox(): "scaleY(-1) scaleX(-1)" | "scaleY(-1)" | "scaleX(-1)";
32
+ handleMouseLeave(evt: React.MouseEvent<HTMLElement>): void;
31
33
  handleMouseUp(evt: React.MouseEvent<HTMLElement>): void;
32
34
  handleMouseDown(e: React.MouseEvent<HTMLDivElement>): void;
33
35
  private handleMouseMove;
@@ -63,6 +63,7 @@ var BookingCalendarSelection = /*#__PURE__*/function (_React$Component) {
63
63
  _this.handleMouseUp = _this.handleMouseUp.bind(_assertThisInitialized(_this));
64
64
  _this.handleMouseDown = _this.handleMouseDown.bind(_assertThisInitialized(_this));
65
65
  _this.handleMouseMove = _this.handleMouseMove.bind(_assertThisInitialized(_this));
66
+ _this.handleMouseLeave = _this.handleMouseLeave.bind(_assertThisInitialized(_this));
66
67
  return _this;
67
68
  }
68
69
 
@@ -87,37 +88,58 @@ var BookingCalendarSelection = /*#__PURE__*/function (_React$Component) {
87
88
 
88
89
  return null;
89
90
  }
91
+ }, {
92
+ key: "handleMouseLeave",
93
+ value: function handleMouseLeave(evt) {
94
+ /*if (this.state.hold) {
95
+ this.setState({
96
+ hold: false,
97
+ animation: 'bookingCalendar__selection--fadeout',
98
+ });
99
+ this.animationInProgress = (setTimeout(() => {
100
+ this.setState({
101
+ selectionBox: false,
102
+ animation: '',
103
+ selectionBoxOrigin: [0, 0],
104
+ selectionBoxTarget: [0, 0],
105
+ });
106
+ this.animationInProgress = null;
107
+ }, 300) as unknown) as number;
108
+ }*/
109
+ }
90
110
  }, {
91
111
  key: "handleMouseUp",
92
112
  value: function handleMouseUp(evt) {
93
- var _this$props$onSelecte,
94
- _this$props,
95
- _this2 = this;
113
+ var _this2 = this;
96
114
 
97
- var distance = Math.sqrt(Math.pow(this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1], 2) + Math.pow(this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0], 2));
115
+ if (this.state.hold) {
116
+ var _this$props$onSelecte, _this$props;
98
117
 
99
- if (distance < 10) {
100
- return;
101
- }
102
-
103
- (_this$props$onSelecte = (_this$props = this.props).onSelected) === null || _this$props$onSelecte === void 0 ? void 0 : _this$props$onSelecte.call(_this$props, {
104
- origin: this.state.selectionBoxOrigin,
105
- target: this.state.selectionBoxTarget
106
- });
107
- this.setState({
108
- hold: false,
109
- animation: 'bookingCalendar__selection--fadeout'
110
- });
111
- this.animationInProgress = setTimeout(function () {
112
- _this2.setState({
113
- selectionBox: false,
114
- animation: '',
115
- selectionBoxOrigin: [0, 0],
116
- selectionBoxTarget: [0, 0]
118
+ var distance = Math.sqrt(Math.pow(this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1], 2) + Math.pow(this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0], 2));
119
+ this.setState({
120
+ hold: false,
121
+ animation: 'bookingCalendar__selection--fadeout'
117
122
  });
118
-
119
- _this2.animationInProgress = null;
120
- }, 300);
123
+ this.animationInProgress = setTimeout(function () {
124
+ _this2.setState({
125
+ selectionBox: false,
126
+ animation: '',
127
+ selectionBoxOrigin: [0, 0],
128
+ selectionBoxTarget: [0, 0]
129
+ });
130
+
131
+ _this2.animationInProgress = null;
132
+ }, 300);
133
+
134
+ if (distance < this.props.minSelectionSize) {
135
+ return;
136
+ }
137
+
138
+ (_this$props$onSelecte = (_this$props = this.props).onSelected) === null || _this$props$onSelecte === void 0 ? void 0 : _this$props$onSelecte.call(_this$props, {
139
+ origin: this.state.selectionBoxOrigin,
140
+ target: this.state.selectionBoxTarget
141
+ });
142
+ }
121
143
  }
122
144
  }, {
123
145
  key: "handleMouseDown",
@@ -176,18 +198,18 @@ var BookingCalendarSelection = /*#__PURE__*/function (_React$Component) {
176
198
  transformOrigin: 'top left',
177
199
  transform: this.handleTransformBox()
178
200
  };
179
- var boxVisible = Math.sqrt(Math.pow(this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1], 2) + Math.pow(this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0], 2)) > 20;
201
+ var boxVisible = Math.sqrt(Math.pow(this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1], 2) + Math.pow(this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0], 2)) > this.props.minSelectionSize;
180
202
  return /*#__PURE__*/React.createElement("div", {
181
203
  ref: this.containerRef,
182
204
  className: "bookingCalendar__selection__container",
183
205
  style: {
184
- pointerEvents: 'auto',
185
- zIndex: boxVisible ? 99999 : undefined,
206
+ zIndex: this.state.selectionBox ? 99999 : undefined,
186
207
  gridRowEnd: "span ".concat(this.props.dataRowsCount)
187
208
  },
188
209
  onMouseDown: this.handleMouseDown,
189
210
  onMouseUp: this.handleMouseUp,
190
- onMouseMove: this.handleMouseMove
211
+ onMouseMove: this.handleMouseMove,
212
+ onMouseLeave: this.handleMouseLeave
191
213
  }, boxVisible && this.state.selectionBox && /*#__PURE__*/React.createElement("div", {
192
214
  className: "bookingCalendar__selection ".concat(this.state.animation),
193
215
  style: baseStyle
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarSelection/BookingCalendarSelection.tsx"],"names":["BookingCalendarSelection","props","animationInProgress","containerRef","React","createRef","state","hold","selectionBox","selectionBoxOrigin","selectionBoxTarget","animation","handleMouseUp","bind","handleMouseDown","handleMouseMove","evt","distance","Math","sqrt","pow","onSelected","origin","target","setState","setTimeout","e","disabled","nativeEvent","button","clearTimeout","bb","current","getBoundingClientRect","pageX","x","pageY","y","onSelecting","baseStyle","zIndex","left","top","height","abs","width","userSelect","transformOrigin","transform","handleTransformBox","boxVisible","pointerEvents","undefined","gridRowEnd","dataRowsCount","children","Component"],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nexport type BookingCalendarSelectionCoordinates = [number, number];\nexport interface BookingCalendarSelectionData {\n origin: BookingCalendarSelectionCoordinates;\n target: BookingCalendarSelectionCoordinates;\n}\nexport interface BookingCalendarSelectionProps {\n disabled?: boolean;\n onSelecting?: (data: {\n origin: BookingCalendarSelectionCoordinates;\n target: BookingCalendarSelectionCoordinates;\n }) => void;\n onSelected?: (data: {\n origin: BookingCalendarSelectionCoordinates;\n target: BookingCalendarSelectionCoordinates;\n }) => void;\n dataRowsCount: number;\n}\n\nexport interface BookingCalendarSelectionState {\n selectionBoxOrigin: BookingCalendarSelectionCoordinates;\n selectionBoxTarget: BookingCalendarSelectionCoordinates;\n hold: boolean;\n animation: string;\n selectionBox: boolean;\n}\n\nexport default class BookingCalendarSelection extends React.Component<\n BookingCalendarSelectionProps,\n BookingCalendarSelectionState\n> {\n private animationInProgress: number;\n private containerRef: React.RefObject<HTMLDivElement>;\n\n constructor(props) {\n super(props);\n this.animationInProgress = null;\n this.containerRef = React.createRef();\n this.state = {\n hold: false,\n selectionBox: false,\n selectionBoxOrigin: [0, 0],\n selectionBoxTarget: [0, 0],\n animation: '',\n };\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n }\n\n handleTransformBox() {\n const { selectionBoxOrigin, selectionBoxTarget } = this.state;\n if (\n selectionBoxOrigin[1] > selectionBoxTarget[1] &&\n selectionBoxOrigin[0] > selectionBoxTarget[0]\n ) {\n return 'scaleY(-1) scaleX(-1)';\n }\n\n if (selectionBoxOrigin[1] > selectionBoxTarget[1]) {\n return 'scaleY(-1)';\n }\n if (selectionBoxOrigin[0] > selectionBoxTarget[0]) {\n return 'scaleX(-1)';\n }\n return null;\n }\n\n handleMouseUp(evt: React.MouseEvent<HTMLElement>) {\n const distance = Math.sqrt(\n Math.pow(\n this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1],\n 2\n ) +\n Math.pow(\n this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0],\n 2\n )\n );\n if (distance < 10) {\n return;\n }\n this.props.onSelected?.({\n origin: this.state.selectionBoxOrigin,\n target: this.state.selectionBoxTarget,\n });\n this.setState({\n hold: false,\n animation: 'bookingCalendar__selection--fadeout',\n });\n this.animationInProgress = (setTimeout(() => {\n this.setState({\n selectionBox: false,\n animation: '',\n selectionBoxOrigin: [0, 0],\n selectionBoxTarget: [0, 0],\n });\n this.animationInProgress = null;\n }, 300) as unknown) as number;\n }\n\n handleMouseDown(e: React.MouseEvent<HTMLDivElement>) {\n if (this.props.disabled || e.nativeEvent.button !== 0) {\n return;\n }\n clearTimeout(this.animationInProgress);\n this.animationInProgress = null;\n this.setState({ selectionBox: false, animation: '' });\n\n const bb = this.containerRef.current?.getBoundingClientRect();\n this.setState({\n hold: true,\n selectionBoxOrigin: [\n e.nativeEvent.pageX - bb.x,\n e.nativeEvent.pageY - bb.y,\n ],\n selectionBoxTarget: [\n e.nativeEvent.pageX - bb.x,\n e.nativeEvent.pageY - bb.y,\n ],\n });\n }\n\n private handleMouseMove(evt: React.MouseEvent<HTMLDivElement>) {\n if (this.state.hold && !this.state.selectionBox) {\n this.setState({ selectionBox: true });\n }\n if (this.state.selectionBox && !this.animationInProgress) {\n const bb = this.containerRef.current?.getBoundingClientRect();\n this.setState({\n selectionBoxTarget: [\n evt.nativeEvent.pageX - bb?.x,\n evt.nativeEvent.pageY - bb?.y,\n ],\n });\n\n this.props.onSelecting?.({\n origin: this.state.selectionBoxOrigin,\n target: this.state.selectionBoxTarget,\n });\n }\n }\n\n render() {\n const baseStyle: React.CSSProperties = {\n zIndex: 10,\n left: this.state.selectionBoxOrigin[0],\n top: this.state.selectionBoxOrigin[1],\n height: Math.abs(\n this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1] - 1\n ),\n width: Math.abs(\n this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0] - 1\n ),\n userSelect: 'none',\n transformOrigin: 'top left',\n transform: this.handleTransformBox(),\n };\n const boxVisible =\n Math.sqrt(\n Math.pow(\n this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1],\n 2\n ) +\n Math.pow(\n this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0],\n 2\n )\n ) > 20;\n return (\n <div\n ref={this.containerRef}\n className=\"bookingCalendar__selection__container\"\n style={{\n pointerEvents: 'auto',\n zIndex: boxVisible ? 99999 : undefined,\n gridRowEnd: `span ${this.props.dataRowsCount}`,\n }}\n onMouseDown={this.handleMouseDown}\n onMouseUp={this.handleMouseUp}\n onMouseMove={this.handleMouseMove}\n >\n {boxVisible && this.state.selectionBox && (\n <div\n className={`bookingCalendar__selection ${this.state.animation}`}\n style={baseStyle}\n />\n )}\n {this.props.children}\n </div>\n );\n }\n}\n"],"file":"BookingCalendarSelection.js"}
1
+ {"version":3,"sources":["../../../../src/lib/components/bookingCalendar/bookingCalendarSelection/BookingCalendarSelection.tsx"],"names":["BookingCalendarSelection","props","animationInProgress","containerRef","React","createRef","state","hold","selectionBox","selectionBoxOrigin","selectionBoxTarget","animation","handleMouseUp","bind","handleMouseDown","handleMouseMove","handleMouseLeave","evt","distance","Math","sqrt","pow","setState","setTimeout","minSelectionSize","onSelected","origin","target","e","disabled","nativeEvent","button","clearTimeout","bb","current","getBoundingClientRect","pageX","x","pageY","y","onSelecting","baseStyle","zIndex","left","top","height","abs","width","userSelect","transformOrigin","transform","handleTransformBox","boxVisible","undefined","gridRowEnd","dataRowsCount","children","Component"],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nexport type BookingCalendarSelectionCoordinates = [number, number];\nexport interface BookingCalendarSelectionData {\n origin: BookingCalendarSelectionCoordinates;\n target: BookingCalendarSelectionCoordinates;\n}\nexport interface BookingCalendarSelectionProps {\n disabled?: boolean;\n onSelecting?: (data: {\n origin: BookingCalendarSelectionCoordinates;\n target: BookingCalendarSelectionCoordinates;\n }) => void;\n onSelected?: (data: {\n origin: BookingCalendarSelectionCoordinates;\n target: BookingCalendarSelectionCoordinates;\n }) => void;\n dataRowsCount: number;\n minSelectionSize: number;\n}\n\nexport interface BookingCalendarSelectionState {\n selectionBoxOrigin: BookingCalendarSelectionCoordinates;\n selectionBoxTarget: BookingCalendarSelectionCoordinates;\n hold: boolean;\n animation: string;\n selectionBox: boolean;\n}\n\nexport default class BookingCalendarSelection extends React.Component<\n BookingCalendarSelectionProps,\n BookingCalendarSelectionState\n> {\n private animationInProgress: number;\n private containerRef: React.RefObject<HTMLDivElement>;\n\n constructor(props) {\n super(props);\n this.animationInProgress = null;\n this.containerRef = React.createRef();\n this.state = {\n hold: false,\n selectionBox: false,\n selectionBoxOrigin: [0, 0],\n selectionBoxTarget: [0, 0],\n animation: '',\n };\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n }\n\n handleTransformBox() {\n const { selectionBoxOrigin, selectionBoxTarget } = this.state;\n if (\n selectionBoxOrigin[1] > selectionBoxTarget[1] &&\n selectionBoxOrigin[0] > selectionBoxTarget[0]\n ) {\n return 'scaleY(-1) scaleX(-1)';\n }\n\n if (selectionBoxOrigin[1] > selectionBoxTarget[1]) {\n return 'scaleY(-1)';\n }\n if (selectionBoxOrigin[0] > selectionBoxTarget[0]) {\n return 'scaleX(-1)';\n }\n return null;\n }\n\n handleMouseLeave(evt: React.MouseEvent<HTMLElement>) {\n /*if (this.state.hold) {\n this.setState({\n hold: false,\n animation: 'bookingCalendar__selection--fadeout',\n });\n this.animationInProgress = (setTimeout(() => {\n this.setState({\n selectionBox: false,\n animation: '',\n selectionBoxOrigin: [0, 0],\n selectionBoxTarget: [0, 0],\n });\n this.animationInProgress = null;\n }, 300) as unknown) as number;\n }*/\n }\n\n handleMouseUp(evt: React.MouseEvent<HTMLElement>) {\n if (this.state.hold) {\n const distance = Math.sqrt(\n Math.pow(\n this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1],\n 2\n ) +\n Math.pow(\n this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0],\n 2\n )\n );\n this.setState({\n hold: false,\n animation: 'bookingCalendar__selection--fadeout',\n });\n this.animationInProgress = (setTimeout(() => {\n this.setState({\n selectionBox: false,\n animation: '',\n selectionBoxOrigin: [0, 0],\n selectionBoxTarget: [0, 0],\n });\n this.animationInProgress = null;\n }, 300) as unknown) as number;\n if (distance < this.props.minSelectionSize) {\n return;\n }\n this.props.onSelected?.({\n origin: this.state.selectionBoxOrigin,\n target: this.state.selectionBoxTarget,\n });\n }\n }\n\n handleMouseDown(e: React.MouseEvent<HTMLDivElement>) {\n if (this.props.disabled || e.nativeEvent.button !== 0) {\n return;\n }\n clearTimeout(this.animationInProgress);\n this.animationInProgress = null;\n this.setState({ selectionBox: false, animation: '' });\n\n const bb = this.containerRef.current?.getBoundingClientRect();\n this.setState({\n hold: true,\n selectionBoxOrigin: [\n e.nativeEvent.pageX - bb.x,\n e.nativeEvent.pageY - bb.y,\n ],\n selectionBoxTarget: [\n e.nativeEvent.pageX - bb.x,\n e.nativeEvent.pageY - bb.y,\n ],\n });\n }\n\n private handleMouseMove(evt: React.MouseEvent<HTMLDivElement>) {\n if (this.state.hold && !this.state.selectionBox) {\n this.setState({ selectionBox: true });\n }\n if (this.state.selectionBox && !this.animationInProgress) {\n const bb = this.containerRef.current?.getBoundingClientRect();\n this.setState({\n selectionBoxTarget: [\n evt.nativeEvent.pageX - bb?.x,\n evt.nativeEvent.pageY - bb?.y,\n ],\n });\n\n this.props.onSelecting?.({\n origin: this.state.selectionBoxOrigin,\n target: this.state.selectionBoxTarget,\n });\n }\n }\n\n render() {\n const baseStyle: React.CSSProperties = {\n zIndex: 10,\n left: this.state.selectionBoxOrigin[0],\n top: this.state.selectionBoxOrigin[1],\n height: Math.abs(\n this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1] - 1\n ),\n width: Math.abs(\n this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0] - 1\n ),\n userSelect: 'none',\n transformOrigin: 'top left',\n transform: this.handleTransformBox(),\n };\n const boxVisible =\n Math.sqrt(\n Math.pow(\n this.state.selectionBoxTarget[1] - this.state.selectionBoxOrigin[1],\n 2\n ) +\n Math.pow(\n this.state.selectionBoxTarget[0] - this.state.selectionBoxOrigin[0],\n 2\n )\n ) > this.props.minSelectionSize;\n return (\n <div\n ref={this.containerRef}\n className=\"bookingCalendar__selection__container\"\n style={{\n zIndex: this.state.selectionBox ? 99999 : undefined,\n gridRowEnd: `span ${this.props.dataRowsCount}`,\n }}\n onMouseDown={this.handleMouseDown}\n onMouseUp={this.handleMouseUp}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {boxVisible && this.state.selectionBox && (\n <div\n className={`bookingCalendar__selection ${this.state.animation}`}\n style={baseStyle}\n />\n )}\n {this.props.children}\n </div>\n );\n }\n}\n"],"file":"BookingCalendarSelection.js"}
@@ -19,6 +19,7 @@ export interface MoneyProps extends BaseInputProps<never, MoneyTranslations> {
19
19
  allowMultiple?: boolean;
20
20
  currencies: SelectValue[];
21
21
  prices: MoneyWithCurrency[];
22
+ disableDelete?: boolean;
22
23
  }
23
24
  export interface MoneyState extends BaseInputState {
24
25
  }
@@ -230,7 +230,7 @@ var MoneyRaw = /*#__PURE__*/function (_BaseInput) {
230
230
  className: 'input__base money-input ' + this.getValidationClass() + (this.props.className ? ' ' + this.props.className : ''),
231
231
  ref: this.containerRef
232
232
  }), this.props.prices && this.props.prices.map(function (item, index) {
233
- var _Button$defaultProps;
233
+ var _currentCurrencies$, _Button$defaultProps;
234
234
 
235
235
  var currentCurrencies = _this2.props.currencies.filter(function (c) {
236
236
  return _this2.props.prices.filter(function (priceCurrency, priceIndex) {
@@ -244,7 +244,7 @@ var MoneyRaw = /*#__PURE__*/function (_BaseInput) {
244
244
 
245
245
  var retComponents = currentCurrencies.length ? /*#__PURE__*/React.createElement("div", {
246
246
  key: index
247
- }, /*#__PURE__*/React.createElement(_Select.Select, _extends({}, _this2.props.id && {
247
+ }, currentCurrencies.length > 1 ? /*#__PURE__*/React.createElement(_Select.Select, _extends({}, _this2.props.id && {
248
248
  id: _this2.props.id + '-currency-select-' + index.toString()
249
249
  }, {
250
250
  onFocus: _this2.onFocus,
@@ -253,7 +253,7 @@ var MoneyRaw = /*#__PURE__*/function (_BaseInput) {
253
253
  values: currentCurrencies,
254
254
  onChange: _this2.onCurrencyChanged(index, currentCurrencies),
255
255
  value: item.currency.value.toString()
256
- })), /*#__PURE__*/React.createElement(_Text.Text, _extends({}, _this2.props.id && {
256
+ })) : currentCurrencies === null || currentCurrencies === void 0 ? void 0 : (_currentCurrencies$ = currentCurrencies[0]) === null || _currentCurrencies$ === void 0 ? void 0 : _currentCurrencies$.label, /*#__PURE__*/React.createElement(_Text.Text, _extends({}, _this2.props.id && {
257
257
  id: _this2.props.id + '-amount-input-' + index.toString()
258
258
  }, {
259
259
  onFocus: _this2.onFocus,
@@ -265,7 +265,7 @@ var MoneyRaw = /*#__PURE__*/function (_BaseInput) {
265
265
  value: item.value ? item.value.toString() : '',
266
266
  onChange: _this2.onPriceChanged(index),
267
267
  type: "number"
268
- })), _this2.props.prices.length > 0 && /*#__PURE__*/React.createElement(_Button.Button, _extends({}, _this2.props.id && {
268
+ })), !_this2.props.disableDelete && _this2.props.prices.length > 0 && /*#__PURE__*/React.createElement(_Button.Button, _extends({}, _this2.props.id && {
269
269
  id: _this2.props.id + '-remove-button-' + index.toString()
270
270
  }, {
271
271
  blank: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/components/money/Money.tsx"],"names":["PlusIcon","defaultMoneyTranslations","defaultBaseTranslations","cannotRemoveDefaultCurrency","removePrice","addPrice","addNewCurrency","MoneyRaw","props","index","currentCurrencies","e","newPrices","concat","prices","currency","filter","cc","value","toString","target","onPricesChange","num","Number","parts","split","length","isNaN","str","state","touched","touch","price","itemIndex","required","setInvalid","getTranslations","unusedCurrencies","setValid","setState","focused","currencies","Error","Object","assign","isValid","errors","handleValueChangeEnabled","forcedCurrencies","c","forceSelected","missingForced","find","p","map","undefined","subscribeSelf","translations","title","id","getValidationClass","className","containerRef","item","priceCurrency","priceIndex","retComponents","onFocus","onBlur","onCurrencyChanged","onTheFlightValidate","onPriceChanged","removePriceClick","Button","defaultProps","buttonProps","allowMultiple","addPriceClick","renderDefaultValidation","label","renderLabel","BaseInput","type","onChange","Money"],"mappings":"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","sourcesContent":["import * as PlusIcon from 'material-design-icons/content/svg/production/ic_add_24px.svg';\r\n\r\n// Libs\r\nimport * as React from 'react';\r\n\r\n// Misc\r\nimport { Select, SelectValue } from '../select/Select';\r\nimport { Text } from '../text/Text';\r\nimport InputGroup from '../inputGroup/InputGroup';\r\nimport {\r\n BaseInputProps,\r\n BaseInputState,\r\n BaseInput,\r\n defaultBaseTranslations,\r\n} from '../base/input/BaseInput';\r\nimport { Button } from '../button/Button';\r\nimport { withFormContext } from '../form/withFormContext';\r\nimport { withThemeContext } from '../themeProvider/withThemeContext';\r\n\r\nexport interface MoneyWithCurrency {\r\n value: number;\r\n currency: SelectValue;\r\n}\r\n\r\nexport const defaultMoneyTranslations = {\r\n ...defaultBaseTranslations,\r\n cannotRemoveDefaultCurrency: 'Cannot remove default currency',\r\n removePrice: 'Remove price',\r\n addPrice: 'Add price',\r\n addNewCurrency: 'Add new currency',\r\n};\r\n\r\nexport type MoneyTranslations = Partial<typeof defaultMoneyTranslations>;\r\n\r\nexport interface MoneyProps extends BaseInputProps<never, MoneyTranslations> {\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n onPricesChange: (prices: MoneyWithCurrency[]) => void;\r\n allowMultiple?: boolean;\r\n currencies: SelectValue[];\r\n prices: MoneyWithCurrency[];\r\n}\r\n\r\nexport interface MoneyState extends BaseInputState {}\r\n\r\nexport class MoneyRaw extends BaseInput<\r\n MoneyProps,\r\n MoneyState,\r\n never,\r\n MoneyTranslations\r\n> {\r\n public static defaultProps = Object.assign({}, BaseInput.defaultProps, {\r\n type: 'money',\r\n allowMultiple: false,\r\n onChange: undefined,\r\n });\r\n\r\n constructor(props: MoneyProps) {\r\n super(props, false);\r\n if (!props.currencies || !props.currencies.length) {\r\n throw Error('No currencies supplied to money input');\r\n }\r\n this.state = Object.assign(this.state, {\r\n isValid: props.required ? props.prices.length > 0 : true,\r\n errors:\r\n props.required && props.prices.length === 0\r\n ? [this.getTranslations(defaultMoneyTranslations).required]\r\n : [],\r\n handleValueChangeEnabled: false,\r\n });\r\n const forcedCurrencies = props.currencies.filter(c => c.forceSelected);\r\n const missingForced = forcedCurrencies.filter(\r\n c => !props.prices.find(p => p.currency.value === c.value)\r\n );\r\n if (missingForced.length > 0) {\r\n props.onPricesChange(\r\n props.prices.concat(\r\n missingForced.map(c => ({ currency: c, value: undefined }))\r\n )\r\n );\r\n }\r\n this.subscribeSelf(props);\r\n }\r\n\r\n public render() {\r\n let unusedCurrencies = this.props.currencies;\r\n const translations = this.getTranslations(defaultMoneyTranslations);\r\n return (\r\n <InputGroup title={this.props.title}>\r\n <div\r\n {...(this.props.id && { id: this.props.id })}\r\n className={\r\n 'input__base money-input ' +\r\n this.getValidationClass() +\r\n (this.props.className ? ' ' + this.props.className : '')\r\n }\r\n ref={this.containerRef}\r\n >\r\n {this.props.prices &&\r\n this.props.prices.map((item, index) => {\r\n let currentCurrencies = this.props.currencies.filter(\r\n c =>\r\n this.props.prices.filter(\r\n (priceCurrency, priceIndex) =>\r\n priceIndex !== index &&\r\n priceCurrency.currency.value === c.value\r\n ).length === 0\r\n );\r\n const currency = this.props.currencies.find(\r\n c => c.value === item.currency.value\r\n );\r\n let retComponents = currentCurrencies.length ? (\r\n <div key={index}>\r\n <Select\r\n {...(this.props.id && {\r\n id:\r\n this.props.id + '-currency-select-' + index.toString(),\r\n })}\r\n onFocus={this.onFocus}\r\n onBlur={this.onBlur}\r\n className={'money-input__select m-0'}\r\n values={currentCurrencies}\r\n onChange={this.onCurrencyChanged(index, currentCurrencies)}\r\n value={item.currency.value.toString()}\r\n />\r\n <Text\r\n {...(this.props.id && {\r\n id: this.props.id + '-amount-input-' + index.toString(),\r\n })}\r\n onFocus={this.onFocus}\r\n onBlur={this.onBlur}\r\n onTheFlightValidate={this.onTheFlightValidate}\r\n placeholder={'0.00'}\r\n className={'money-input__text m-0'}\r\n validators={['number']}\r\n value={item.value ? item.value.toString() : ''}\r\n onChange={this.onPriceChanged(index)}\r\n type=\"number\"\r\n />\r\n {this.props.prices.length > 0 && (\r\n <Button\r\n {...(this.props.id && {\r\n id:\r\n this.props.id + '-remove-button-' + index.toString(),\r\n })}\r\n blank={true}\r\n type=\"error\"\r\n onClick={this.removePriceClick(index)}\r\n className=\"transform-rotate--45 line-height--0\"\r\n buttonProps={{\r\n ...Button.defaultProps?.buttonProps,\r\n title:\r\n currency && currency.forceSelected\r\n ? translations.cannotRemoveDefaultCurrency\r\n : translations.removePrice,\r\n }}\r\n circular={true}\r\n disabled={currency && currency.forceSelected}\r\n >\r\n <PlusIcon />\r\n </Button>\r\n )}\r\n </div>\r\n ) : null;\r\n unusedCurrencies = unusedCurrencies.filter(\r\n c => c.value !== item.currency.value\r\n );\r\n return retComponents;\r\n })}\r\n {(this.props.allowMultiple ||\r\n (this.props.prices && !this.props.prices.length)) &&\r\n unusedCurrencies.length ? (\r\n <Button\r\n blank={true}\r\n {...(this.props.id && {\r\n id: this.props.id + '-add-button',\r\n })}\r\n type=\"primary\"\r\n className=\"line-height--0 align-self-start\"\r\n onClick={this.addPriceClick(unusedCurrencies)}\r\n circular={true}\r\n buttonProps={{\r\n ...Button.defaultProps?.buttonProps,\r\n title:\r\n this.props.prices && this.props.prices.length === 0\r\n ? translations.addPrice\r\n : translations.addNewCurrency,\r\n }}\r\n >\r\n <PlusIcon />\r\n </Button>\r\n ) : null}\r\n <span className=\"highlight\" />\r\n <span className={'bar ' + (this.state.focused ? 'focused' : '')} />\r\n {this.renderDefaultValidation()}\r\n {this.props.label && (\r\n <label\r\n className={\r\n this.props.prices && this.props.prices ? 'label--focused' : ''\r\n }\r\n >\r\n {this.renderLabel()}\r\n </label>\r\n )}\r\n </div>\r\n </InputGroup>\r\n );\r\n }\r\n\r\n private onCurrencyChanged = (\r\n index: number,\r\n currentCurrencies: SelectValue[]\r\n ) => e => {\r\n let newPrices: MoneyWithCurrency[] = [].concat(this.props.prices);\r\n newPrices[index].currency = currentCurrencies.filter(\r\n cc => cc.value.toString() === e.target.value\r\n )[0];\r\n this.props.onPricesChange(newPrices);\r\n };\r\n\r\n private onTheFlightValidate = value => {\r\n let num = Number(value);\r\n const parts = value.split('.');\r\n if (parts && parts.length > 1 && parts[parts.length - 1].length > 2) {\r\n return false;\r\n }\r\n if (!isNaN(num)) {\r\n return true;\r\n }\r\n if (num) {\r\n return false;\r\n }\r\n };\r\n\r\n private onPriceChanged = (index: number) => (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n let newPrices: MoneyWithCurrency[] = [].concat(this.props.prices);\r\n let str = e.target.value;\r\n let num = Number(str);\r\n if (!isNaN(num)) {\r\n newPrices[index].value = num;\r\n }\r\n this.props.onPricesChange(newPrices);\r\n if (!this.state.touched) {\r\n this.touch();\r\n }\r\n };\r\n\r\n private removePriceClick = (index: number) => () => {\r\n const newPrices = this.props.prices.filter(\r\n (price, itemIndex) => itemIndex !== index\r\n );\r\n this.props.onPricesChange(newPrices);\r\n if (newPrices.length === 0 && this.props.required) {\r\n this.setInvalid([\r\n this.getTranslations(defaultMoneyTranslations).required,\r\n ]);\r\n }\r\n if (!this.state.touched) {\r\n this.touch();\r\n }\r\n };\r\n\r\n private addPriceClick = (unusedCurrencies: SelectValue[]) => () => {\r\n this.props.onPricesChange(\r\n this.props.prices.concat([{ value: 0, currency: unusedCurrencies[0] }])\r\n );\r\n this.setValid();\r\n if (!this.state.touched) {\r\n this.touch();\r\n }\r\n };\r\n\r\n private onFocus = () => this.setState({ focused: true });\r\n\r\n private onBlur = () => this.setState({ focused: false });\r\n}\r\n\r\nexport const Money = withThemeContext<\r\n MoneyProps,\r\n InstanceType<typeof MoneyRaw>\r\n>(withFormContext<MoneyProps>(MoneyRaw), 'money');\r\n\r\nexport default Money;\r\n"],"file":"Money.js"}
1
+ {"version":3,"sources":["../../../src/lib/components/money/Money.tsx"],"names":["PlusIcon","defaultMoneyTranslations","defaultBaseTranslations","cannotRemoveDefaultCurrency","removePrice","addPrice","addNewCurrency","MoneyRaw","props","index","currentCurrencies","e","newPrices","concat","prices","currency","filter","cc","value","toString","target","onPricesChange","num","Number","parts","split","length","isNaN","str","state","touched","touch","price","itemIndex","required","setInvalid","getTranslations","unusedCurrencies","setValid","setState","focused","currencies","Error","Object","assign","isValid","errors","handleValueChangeEnabled","forcedCurrencies","c","forceSelected","missingForced","find","p","map","undefined","subscribeSelf","translations","title","id","getValidationClass","className","containerRef","item","priceCurrency","priceIndex","retComponents","onFocus","onBlur","onCurrencyChanged","label","onTheFlightValidate","onPriceChanged","disableDelete","removePriceClick","Button","defaultProps","buttonProps","allowMultiple","addPriceClick","renderDefaultValidation","renderLabel","BaseInput","type","onChange","Money"],"mappings":"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","sourcesContent":["import * as PlusIcon from 'material-design-icons/content/svg/production/ic_add_24px.svg';\r\n\r\n// Libs\r\nimport * as React from 'react';\r\n\r\n// Misc\r\nimport { Select, SelectValue } from '../select/Select';\r\nimport { Text } from '../text/Text';\r\nimport InputGroup from '../inputGroup/InputGroup';\r\nimport {\r\n BaseInputProps,\r\n BaseInputState,\r\n BaseInput,\r\n defaultBaseTranslations,\r\n} from '../base/input/BaseInput';\r\nimport { Button } from '../button/Button';\r\nimport { withFormContext } from '../form/withFormContext';\r\nimport { withThemeContext } from '../themeProvider/withThemeContext';\r\n\r\nexport interface MoneyWithCurrency {\r\n value: number;\r\n currency: SelectValue;\r\n}\r\n\r\nexport const defaultMoneyTranslations = {\r\n ...defaultBaseTranslations,\r\n cannotRemoveDefaultCurrency: 'Cannot remove default currency',\r\n removePrice: 'Remove price',\r\n addPrice: 'Add price',\r\n addNewCurrency: 'Add new currency',\r\n};\r\n\r\nexport type MoneyTranslations = Partial<typeof defaultMoneyTranslations>;\r\n\r\nexport interface MoneyProps extends BaseInputProps<never, MoneyTranslations> {\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n onPricesChange: (prices: MoneyWithCurrency[]) => void;\r\n allowMultiple?: boolean;\r\n currencies: SelectValue[];\r\n prices: MoneyWithCurrency[];\r\n disableDelete?: boolean;\r\n}\r\n\r\nexport interface MoneyState extends BaseInputState {}\r\n\r\nexport class MoneyRaw extends BaseInput<\r\n MoneyProps,\r\n MoneyState,\r\n never,\r\n MoneyTranslations\r\n> {\r\n public static defaultProps = Object.assign({}, BaseInput.defaultProps, {\r\n type: 'money',\r\n allowMultiple: false,\r\n onChange: undefined,\r\n });\r\n\r\n constructor(props: MoneyProps) {\r\n super(props, false);\r\n if (!props.currencies || !props.currencies.length) {\r\n throw Error('No currencies supplied to money input');\r\n }\r\n this.state = Object.assign(this.state, {\r\n isValid: props.required ? props.prices.length > 0 : true,\r\n errors:\r\n props.required && props.prices.length === 0\r\n ? [this.getTranslations(defaultMoneyTranslations).required]\r\n : [],\r\n handleValueChangeEnabled: false,\r\n });\r\n const forcedCurrencies = props.currencies.filter(c => c.forceSelected);\r\n const missingForced = forcedCurrencies.filter(\r\n c => !props.prices.find(p => p.currency.value === c.value)\r\n );\r\n if (missingForced.length > 0) {\r\n props.onPricesChange(\r\n props.prices.concat(\r\n missingForced.map(c => ({ currency: c, value: undefined }))\r\n )\r\n );\r\n }\r\n this.subscribeSelf(props);\r\n }\r\n\r\n public render() {\r\n let unusedCurrencies = this.props.currencies;\r\n const translations = this.getTranslations(defaultMoneyTranslations);\r\n return (\r\n <InputGroup title={this.props.title}>\r\n <div\r\n {...(this.props.id && { id: this.props.id })}\r\n className={\r\n 'input__base money-input ' +\r\n this.getValidationClass() +\r\n (this.props.className ? ' ' + this.props.className : '')\r\n }\r\n ref={this.containerRef}\r\n >\r\n {this.props.prices &&\r\n this.props.prices.map((item, index) => {\r\n let currentCurrencies = this.props.currencies.filter(\r\n c =>\r\n this.props.prices.filter(\r\n (priceCurrency, priceIndex) =>\r\n priceIndex !== index &&\r\n priceCurrency.currency.value === c.value\r\n ).length === 0\r\n );\r\n const currency = this.props.currencies.find(\r\n c => c.value === item.currency.value\r\n );\r\n let retComponents = currentCurrencies.length ? (\r\n <div key={index}>\r\n {currentCurrencies.length > 1 ? (\r\n <Select\r\n {...(this.props.id && {\r\n id:\r\n this.props.id +\r\n '-currency-select-' +\r\n index.toString(),\r\n })}\r\n onFocus={this.onFocus}\r\n onBlur={this.onBlur}\r\n className={'money-input__select m-0'}\r\n values={currentCurrencies}\r\n onChange={this.onCurrencyChanged(\r\n index,\r\n currentCurrencies\r\n )}\r\n value={item.currency.value.toString()}\r\n />\r\n ) : (\r\n currentCurrencies?.[0]?.label\r\n )}\r\n <Text\r\n {...(this.props.id && {\r\n id: this.props.id + '-amount-input-' + index.toString(),\r\n })}\r\n onFocus={this.onFocus}\r\n onBlur={this.onBlur}\r\n onTheFlightValidate={this.onTheFlightValidate}\r\n placeholder={'0.00'}\r\n className={'money-input__text m-0'}\r\n validators={['number']}\r\n value={item.value ? item.value.toString() : ''}\r\n onChange={this.onPriceChanged(index)}\r\n type=\"number\"\r\n />\r\n {!this.props.disableDelete && this.props.prices.length > 0 && (\r\n <Button\r\n {...(this.props.id && {\r\n id:\r\n this.props.id + '-remove-button-' + index.toString(),\r\n })}\r\n blank={true}\r\n type=\"error\"\r\n onClick={this.removePriceClick(index)}\r\n className=\"transform-rotate--45 line-height--0\"\r\n buttonProps={{\r\n ...Button.defaultProps?.buttonProps,\r\n title:\r\n currency && currency.forceSelected\r\n ? translations.cannotRemoveDefaultCurrency\r\n : translations.removePrice,\r\n }}\r\n circular={true}\r\n disabled={currency && currency.forceSelected}\r\n >\r\n <PlusIcon />\r\n </Button>\r\n )}\r\n </div>\r\n ) : null;\r\n unusedCurrencies = unusedCurrencies.filter(\r\n c => c.value !== item.currency.value\r\n );\r\n return retComponents;\r\n })}\r\n {(this.props.allowMultiple ||\r\n (this.props.prices && !this.props.prices.length)) &&\r\n unusedCurrencies.length ? (\r\n <Button\r\n blank={true}\r\n {...(this.props.id && {\r\n id: this.props.id + '-add-button',\r\n })}\r\n type=\"primary\"\r\n className=\"line-height--0 align-self-start\"\r\n onClick={this.addPriceClick(unusedCurrencies)}\r\n circular={true}\r\n buttonProps={{\r\n ...Button.defaultProps?.buttonProps,\r\n title:\r\n this.props.prices && this.props.prices.length === 0\r\n ? translations.addPrice\r\n : translations.addNewCurrency,\r\n }}\r\n >\r\n <PlusIcon />\r\n </Button>\r\n ) : null}\r\n <span className=\"highlight\" />\r\n <span className={'bar ' + (this.state.focused ? 'focused' : '')} />\r\n {this.renderDefaultValidation()}\r\n {this.props.label && (\r\n <label\r\n className={\r\n this.props.prices && this.props.prices ? 'label--focused' : ''\r\n }\r\n >\r\n {this.renderLabel()}\r\n </label>\r\n )}\r\n </div>\r\n </InputGroup>\r\n );\r\n }\r\n\r\n private onCurrencyChanged = (\r\n index: number,\r\n currentCurrencies: SelectValue[]\r\n ) => e => {\r\n let newPrices: MoneyWithCurrency[] = [].concat(this.props.prices);\r\n newPrices[index].currency = currentCurrencies.filter(\r\n cc => cc.value.toString() === e.target.value\r\n )[0];\r\n this.props.onPricesChange(newPrices);\r\n };\r\n\r\n private onTheFlightValidate = value => {\r\n let num = Number(value);\r\n const parts = value.split('.');\r\n if (parts && parts.length > 1 && parts[parts.length - 1].length > 2) {\r\n return false;\r\n }\r\n if (!isNaN(num)) {\r\n return true;\r\n }\r\n if (num) {\r\n return false;\r\n }\r\n };\r\n\r\n private onPriceChanged = (index: number) => (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n let newPrices: MoneyWithCurrency[] = [].concat(this.props.prices);\r\n let str = e.target.value;\r\n let num = Number(str);\r\n if (!isNaN(num)) {\r\n newPrices[index].value = num;\r\n }\r\n this.props.onPricesChange(newPrices);\r\n if (!this.state.touched) {\r\n this.touch();\r\n }\r\n };\r\n\r\n private removePriceClick = (index: number) => () => {\r\n const newPrices = this.props.prices.filter(\r\n (price, itemIndex) => itemIndex !== index\r\n );\r\n this.props.onPricesChange(newPrices);\r\n if (newPrices.length === 0 && this.props.required) {\r\n this.setInvalid([\r\n this.getTranslations(defaultMoneyTranslations).required,\r\n ]);\r\n }\r\n if (!this.state.touched) {\r\n this.touch();\r\n }\r\n };\r\n\r\n private addPriceClick = (unusedCurrencies: SelectValue[]) => () => {\r\n this.props.onPricesChange(\r\n this.props.prices.concat([{ value: 0, currency: unusedCurrencies[0] }])\r\n );\r\n this.setValid();\r\n if (!this.state.touched) {\r\n this.touch();\r\n }\r\n };\r\n\r\n private onFocus = () => this.setState({ focused: true });\r\n\r\n private onBlur = () => this.setState({ focused: false });\r\n}\r\n\r\nexport const Money = withThemeContext<\r\n MoneyProps,\r\n InstanceType<typeof MoneyRaw>\r\n>(withFormContext<MoneyProps>(MoneyRaw), 'money');\r\n\r\nexport default Money;\r\n"],"file":"Money.js"}