@skbkontur/react-ui 2.17.5 → 2.17.6
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/CHANGELOG.md +11 -0
- package/cjs/internal/Calendar/Calendar.js +1 -1
- package/cjs/internal/Calendar/Calendar.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/internal/Calendar/Calendar/Calendar.js +2 -1
- package/internal/Calendar/Calendar/Calendar.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +4 -2
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.17.6](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@2.17.5...@skbkontur/react-ui@2.17.6) (2021-11-09)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **Calendar,ComboBox:** add some data-tids ([#2627](https://github.com/skbkontur/retail-ui/issues/2627)) ([8a50717](https://github.com/skbkontur/retail-ui/commit/8a5071797cac832c7584636c688e6b3c204a7b0b)), closes [#2620](https://github.com/skbkontur/retail-ui/issues/2620) [#2625](https://github.com/skbkontur/retail-ui/issues/2625)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [2.17.5](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@2.17.4...@skbkontur/react-ui@2.17.5) (2021-11-03)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -207,7 +207,7 @@ Calendar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
207
207
|
var positions = _this.getMonthPositions();
|
|
208
208
|
var wrapperStyle = { height: (0, _config.themeConfig)(_this.theme).WRAPPER_HEIGHT };
|
|
209
209
|
return /*#__PURE__*/(
|
|
210
|
-
_react.default.createElement("div", { ref: _this.refRoot, className: _Calendar.jsStyles.root(_this.theme) }, /*#__PURE__*/
|
|
210
|
+
_react.default.createElement("div", { ref: _this.refRoot, className: _Calendar.jsStyles.root(_this.theme), "data-tid": "Calendar" }, /*#__PURE__*/
|
|
211
211
|
_react.default.createElement("div", { style: wrapperStyle, className: _Calendar.jsStyles.wrapper() },
|
|
212
212
|
_this.state.months.
|
|
213
213
|
map(function (x, i) {return [positions[i], x];}).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Calendar.tsx"],"names":["getTodayDate","date","Date","getDate","month","getMonth","year","getFullYear","Calendar","props","theme","wheelEndTimeout","root","animation","scrollToMonth","inProgress","finish","Promise","r","setTimeout","minDate","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","CalendarUtils","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","MonthViewModel","create","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","renderMain","positions","getMonthPositions","wrapperStyle","height","WRAPPER_HEIGHT","refRoot","jsStyles","wrapper","map","x","i","filter","top","isMonthVisible","renderMonth","element","addEventListener","handleWheel","passive","removeEventListener","handleMonthYearChange","event","WheelEvent","preventDefault","pixelY","scrollTarget","calculateScrollPosition","handleWheelEnd","animate","deltaY","applyDelta","CalendarScrollEvents","emit","clearTimeout","window","scrollToNearestWeek","scrollDirection","trasholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_SIZE","amount","pos","scrollAmmount","scrollAmount","today","initialMonth","initialYear","componentWillUnmount","cancel","render","value","onSelect","isHoliday","position","push","React","Component","__KONTUR_REACT_UI__","defaultProps","holidays","MIN_YEAR","MIN_MONTH","MIN_DATE","MAX_YEAR","MAX_MONTH","MAX_DATE"],"mappings":"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","sourcesContent":["import React from 'react';\r\nimport normalizeWheel from 'normalize-wheel';\r\n\r\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { Theme } from '../../lib/theming/Theme';\r\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\r\nimport { Animation } from '../../lib/animation';\r\n\r\nimport { themeConfig } from './config';\r\nimport * as CalendarUtils from './CalendarUtils';\r\nimport { MonthViewModel } from './MonthViewModel';\r\nimport * as CalendarScrollEvents from './CalendarScrollEvents';\r\nimport { Month } from './Month';\r\nimport { jsStyles } from './Calendar.styles';\r\nimport { CalendarDateShape, create, isGreater, isLess } from './CalendarDateShape';\r\n\r\nexport interface CalendarProps {\r\n initialMonth?: number;\r\n initialYear?: number;\r\n onSelect?: (date: CalendarDateShape) => void;\r\n value?: Nullable<CalendarDateShape>;\r\n maxDate?: CalendarDateShape;\r\n minDate?: CalendarDateShape;\r\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\r\n}\r\n\r\nexport interface CalendarState {\r\n scrollPosition: number;\r\n months: MonthViewModel[];\r\n today: CalendarDateShape;\r\n scrollDirection: number;\r\n scrollTarget: number;\r\n}\r\n\r\nconst getTodayDate = () => {\r\n const date = new Date();\r\n return {\r\n date: date.getDate(),\r\n month: date.getMonth(),\r\n year: date.getFullYear(),\r\n };\r\n};\r\n\r\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\r\n public static __KONTUR_REACT_UI__ = 'Calendar';\r\n\r\n public static defaultProps = {\r\n holidays: [],\r\n minDate: {\r\n year: MIN_YEAR,\r\n month: MIN_MONTH,\r\n date: MIN_DATE,\r\n },\r\n maxDate: {\r\n year: MAX_YEAR,\r\n month: MAX_MONTH,\r\n date: MAX_DATE,\r\n },\r\n };\r\n\r\n private theme!: Theme;\r\n private wheelEndTimeout: Nullable<number>;\r\n private root: Nullable<HTMLElement>;\r\n private animation = Animation();\r\n\r\n constructor(props: CalendarProps) {\r\n super(props);\r\n\r\n const today = getTodayDate();\r\n\r\n const initialMonth = props.initialMonth == null ? today.month : props.initialMonth;\r\n const initialYear = props.initialYear == null ? today.year : props.initialYear;\r\n\r\n this.state = {\r\n scrollPosition: 0,\r\n months: CalendarUtils.getMonths(initialMonth, initialYear),\r\n today,\r\n scrollDirection: 1,\r\n scrollTarget: 0,\r\n };\r\n }\r\n\r\n public componentWillUnmount() {\r\n if (this.animation.inProgress()) {\r\n this.animation.cancel();\r\n }\r\n }\r\n\r\n public render() {\r\n return (\r\n <ThemeContext.Consumer>\r\n {theme => {\r\n this.theme = theme;\r\n return this.renderMain();\r\n }}\r\n </ThemeContext.Consumer>\r\n );\r\n }\r\n\r\n /**\r\n * Scrolls calendar to given date\r\n * @public\r\n */\r\n public scrollToMonth = async (month: number, year: number) => {\r\n if (this.animation.inProgress()) {\r\n this.animation.finish();\r\n // FIXME: Dirty hack to await batched updates\r\n await new Promise(r => setTimeout(r));\r\n }\r\n\r\n const { minDate, maxDate } = this.props;\r\n\r\n if (minDate && isGreater(minDate, create(32, month, year))) {\r\n this.scrollToMonth(minDate.month, minDate.year);\r\n return;\r\n }\r\n\r\n if (maxDate && isLess(maxDate, create(0, month, year))) {\r\n this.scrollToMonth(maxDate.month, maxDate.year);\r\n return;\r\n }\r\n\r\n const currentMonth = this.state.months[1];\r\n const diffInMonths = currentMonth.month + currentMonth.year * 12 - month - year * 12;\r\n\r\n if (diffInMonths === 0) {\r\n this.scrollTo(0);\r\n return;\r\n }\r\n\r\n const maxMonthsToAdd = themeConfig(this.theme).MAX_MONTHS_TO_APPEND_ON_SCROLL;\r\n\r\n const onEnd = () =>\r\n this.setState({\r\n months: CalendarUtils.getMonths(month, year),\r\n scrollPosition: 0,\r\n });\r\n\r\n const isYearChanges = (state: CalendarState) =>\r\n state.months[1].year !== year &&\r\n // if diff in months is 2 or less,\r\n // either year is not changing either months already\r\n // have right isFirstInYear/isLastInYear flags\r\n Math.abs(diffInMonths) > 2;\r\n\r\n // If scrolling upwards, prepend maximum maxMonthsToAdd months\r\n // and scroll to the first month\r\n if (diffInMonths > 0) {\r\n const monthsToPrependCount = Math.min(Math.abs(diffInMonths) - 1, maxMonthsToAdd);\r\n const monthsToPrepend = Array.from({ length: monthsToPrependCount }, (_, index) =>\r\n MonthViewModel.create(month + index, year),\r\n );\r\n this.setState(\r\n state => {\r\n const yearChanges = isYearChanges(state);\r\n if (yearChanges) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[0].isFirstInYear = true;\r\n if (monthsToPrepend.length) {\r\n // Mutating item here is safe as it was just created\r\n monthsToPrepend[monthsToPrepend.length - 1].isLastInYear = true;\r\n }\r\n }\r\n return {\r\n months: monthsToPrepend.concat(state.months),\r\n scrollPosition: -CalendarUtils.getMonthsHeight(monthsToPrepend, this.theme),\r\n };\r\n },\r\n () => {\r\n const targetPosition = this.state.months[0].getHeight(this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n\r\n // If scrolling downwards, append maximum maxMonthsToAdd months\r\n // and scroll to the last but one month\r\n if (diffInMonths < 0) {\r\n const monthsToAppendCount = Math.min(Math.abs(diffInMonths), maxMonthsToAdd);\r\n const monthsToAppend = Array.from({ length: monthsToAppendCount }, (_, index) =>\r\n MonthViewModel.create(month + index - monthsToAppendCount + 2, year),\r\n );\r\n this.setState(\r\n state => {\r\n if (isYearChanges(state)) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[state.months.length - 1].isLastInYear = true;\r\n // Mutating item here is safe as it was just created\r\n if (monthsToAppend[0]) {\r\n monthsToAppend[0].isFirstInYear = true;\r\n }\r\n }\r\n return { months: state.months.concat(monthsToAppend) };\r\n },\r\n () => {\r\n const targetPosition = -1 * CalendarUtils.getMonthsHeight(this.state.months.slice(1, -2), this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n };\r\n\r\n private renderMain = () => {\r\n const positions = this.getMonthPositions();\r\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\r\n return (\r\n <div ref={this.refRoot} className={jsStyles.root(this.theme)}>\r\n <div style={wrapperStyle} className={jsStyles.wrapper()}>\r\n {this.state.months\r\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\r\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme))\r\n .map(this.renderMonth, this)}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n private refRoot = (element: HTMLElement | null) => {\r\n if (!this.root && element) {\r\n element.addEventListener('wheel', this.handleWheel, { passive: false });\r\n }\r\n if (this.root && !element) {\r\n this.root.removeEventListener('wheel', this.handleWheel);\r\n }\r\n this.root = element;\r\n };\r\n\r\n private renderMonth([top, month]: [number, MonthViewModel]) {\r\n return (\r\n <Month\r\n key={month.month + '-' + month.year}\r\n top={top}\r\n month={month}\r\n maxDate={this.props.maxDate}\r\n minDate={this.props.minDate}\r\n today={this.state.today}\r\n value={this.props.value}\r\n onDateClick={this.props.onSelect}\r\n onMonthYearChange={this.handleMonthYearChange}\r\n isHoliday={this.props.isHoliday}\r\n />\r\n );\r\n }\r\n\r\n private getMonthPositions() {\r\n const { scrollPosition, months } = this.state;\r\n\r\n const positions = [scrollPosition - months[0].getHeight(this.theme)];\r\n for (let i = 1; i < months.length; i++) {\r\n const position = positions[i - 1] + months[i - 1].getHeight(this.theme);\r\n positions.push(position);\r\n }\r\n return positions;\r\n }\r\n\r\n private handleMonthYearChange = (month: number, year: number) => {\r\n this.scrollToMonth(month, year);\r\n };\r\n\r\n private handleWheel = (event: Event) => {\r\n if (!(event instanceof WheelEvent)) {\r\n return;\r\n }\r\n event.preventDefault();\r\n const { pixelY } = normalizeWheel(event);\r\n\r\n this.setState(({ months, scrollPosition, scrollTarget }) => {\r\n const targetPosition = CalendarUtils.calculateScrollPosition(months, scrollPosition, pixelY, this.theme)\r\n .scrollPosition;\r\n return { scrollTarget: targetPosition };\r\n }, this.handleWheelEnd);\r\n\r\n this.animation.animate(pixelY, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n\r\n CalendarScrollEvents.emit();\r\n };\r\n\r\n private handleWheelEnd = () => {\r\n if (this.wheelEndTimeout) {\r\n clearTimeout(this.wheelEndTimeout);\r\n }\r\n this.wheelEndTimeout = window.setTimeout(this.scrollToNearestWeek, 300);\r\n };\r\n\r\n private scrollToNearestWeek = () => {\r\n const { scrollTarget, scrollDirection } = this.state;\r\n\r\n const trasholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_SIZE;\r\n\r\n if (scrollTarget < trasholdHeight) {\r\n let targetPosition = 0;\r\n if (scrollDirection < 0) {\r\n targetPosition = trasholdHeight;\r\n }\r\n\r\n this.setState({ scrollTarget: targetPosition }, () => {\r\n const amount = scrollTarget - targetPosition;\r\n this.animation.animate(amount, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n });\r\n }\r\n };\r\n\r\n private scrollTo = (pos: number, onEnd?: () => void) => {\r\n const scrollAmmount = pos - this.state.scrollPosition;\r\n return this.scrollAmount(scrollAmmount, onEnd);\r\n };\r\n\r\n private scrollAmount = (scrollAmmount: number, onEnd?: () => void) => {\r\n return this.animation.animate(\r\n scrollAmmount,\r\n deltaY =>\r\n this.setState(({ scrollPosition }) => ({\r\n scrollPosition: scrollPosition + deltaY,\r\n })),\r\n onEnd,\r\n );\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["Calendar.tsx"],"names":["getTodayDate","date","Date","getDate","month","getMonth","year","getFullYear","Calendar","props","theme","wheelEndTimeout","root","animation","scrollToMonth","inProgress","finish","Promise","r","setTimeout","minDate","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","CalendarUtils","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","MonthViewModel","create","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","renderMain","positions","getMonthPositions","wrapperStyle","height","WRAPPER_HEIGHT","refRoot","jsStyles","wrapper","map","x","i","filter","top","isMonthVisible","renderMonth","element","addEventListener","handleWheel","passive","removeEventListener","handleMonthYearChange","event","WheelEvent","preventDefault","pixelY","scrollTarget","calculateScrollPosition","handleWheelEnd","animate","deltaY","applyDelta","CalendarScrollEvents","emit","clearTimeout","window","scrollToNearestWeek","scrollDirection","trasholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_SIZE","amount","pos","scrollAmmount","scrollAmount","today","initialMonth","initialYear","componentWillUnmount","cancel","render","value","onSelect","isHoliday","position","push","React","Component","__KONTUR_REACT_UI__","defaultProps","holidays","MIN_YEAR","MIN_MONTH","MIN_DATE","MAX_YEAR","MAX_MONTH","MAX_DATE"],"mappings":"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","sourcesContent":["import React from 'react';\r\nimport normalizeWheel from 'normalize-wheel';\r\n\r\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { Theme } from '../../lib/theming/Theme';\r\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\r\nimport { Animation } from '../../lib/animation';\r\n\r\nimport { themeConfig } from './config';\r\nimport * as CalendarUtils from './CalendarUtils';\r\nimport { MonthViewModel } from './MonthViewModel';\r\nimport * as CalendarScrollEvents from './CalendarScrollEvents';\r\nimport { Month } from './Month';\r\nimport { jsStyles } from './Calendar.styles';\r\nimport { CalendarDateShape, create, isGreater, isLess } from './CalendarDateShape';\r\n\r\nexport interface CalendarProps {\r\n initialMonth?: number;\r\n initialYear?: number;\r\n onSelect?: (date: CalendarDateShape) => void;\r\n value?: Nullable<CalendarDateShape>;\r\n maxDate?: CalendarDateShape;\r\n minDate?: CalendarDateShape;\r\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\r\n}\r\n\r\nexport interface CalendarState {\r\n scrollPosition: number;\r\n months: MonthViewModel[];\r\n today: CalendarDateShape;\r\n scrollDirection: number;\r\n scrollTarget: number;\r\n}\r\n\r\nconst getTodayDate = () => {\r\n const date = new Date();\r\n return {\r\n date: date.getDate(),\r\n month: date.getMonth(),\r\n year: date.getFullYear(),\r\n };\r\n};\r\n\r\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\r\n public static __KONTUR_REACT_UI__ = 'Calendar';\r\n\r\n public static defaultProps = {\r\n holidays: [],\r\n minDate: {\r\n year: MIN_YEAR,\r\n month: MIN_MONTH,\r\n date: MIN_DATE,\r\n },\r\n maxDate: {\r\n year: MAX_YEAR,\r\n month: MAX_MONTH,\r\n date: MAX_DATE,\r\n },\r\n };\r\n\r\n private theme!: Theme;\r\n private wheelEndTimeout: Nullable<number>;\r\n private root: Nullable<HTMLElement>;\r\n private animation = Animation();\r\n\r\n constructor(props: CalendarProps) {\r\n super(props);\r\n\r\n const today = getTodayDate();\r\n\r\n const initialMonth = props.initialMonth == null ? today.month : props.initialMonth;\r\n const initialYear = props.initialYear == null ? today.year : props.initialYear;\r\n\r\n this.state = {\r\n scrollPosition: 0,\r\n months: CalendarUtils.getMonths(initialMonth, initialYear),\r\n today,\r\n scrollDirection: 1,\r\n scrollTarget: 0,\r\n };\r\n }\r\n\r\n public componentWillUnmount() {\r\n if (this.animation.inProgress()) {\r\n this.animation.cancel();\r\n }\r\n }\r\n\r\n public render() {\r\n return (\r\n <ThemeContext.Consumer>\r\n {theme => {\r\n this.theme = theme;\r\n return this.renderMain();\r\n }}\r\n </ThemeContext.Consumer>\r\n );\r\n }\r\n\r\n /**\r\n * Scrolls calendar to given date\r\n * @public\r\n */\r\n public scrollToMonth = async (month: number, year: number) => {\r\n if (this.animation.inProgress()) {\r\n this.animation.finish();\r\n // FIXME: Dirty hack to await batched updates\r\n await new Promise(r => setTimeout(r));\r\n }\r\n\r\n const { minDate, maxDate } = this.props;\r\n\r\n if (minDate && isGreater(minDate, create(32, month, year))) {\r\n this.scrollToMonth(minDate.month, minDate.year);\r\n return;\r\n }\r\n\r\n if (maxDate && isLess(maxDate, create(0, month, year))) {\r\n this.scrollToMonth(maxDate.month, maxDate.year);\r\n return;\r\n }\r\n\r\n const currentMonth = this.state.months[1];\r\n const diffInMonths = currentMonth.month + currentMonth.year * 12 - month - year * 12;\r\n\r\n if (diffInMonths === 0) {\r\n this.scrollTo(0);\r\n return;\r\n }\r\n\r\n const maxMonthsToAdd = themeConfig(this.theme).MAX_MONTHS_TO_APPEND_ON_SCROLL;\r\n\r\n const onEnd = () =>\r\n this.setState({\r\n months: CalendarUtils.getMonths(month, year),\r\n scrollPosition: 0,\r\n });\r\n\r\n const isYearChanges = (state: CalendarState) =>\r\n state.months[1].year !== year &&\r\n // if diff in months is 2 or less,\r\n // either year is not changing either months already\r\n // have right isFirstInYear/isLastInYear flags\r\n Math.abs(diffInMonths) > 2;\r\n\r\n // If scrolling upwards, prepend maximum maxMonthsToAdd months\r\n // and scroll to the first month\r\n if (diffInMonths > 0) {\r\n const monthsToPrependCount = Math.min(Math.abs(diffInMonths) - 1, maxMonthsToAdd);\r\n const monthsToPrepend = Array.from({ length: monthsToPrependCount }, (_, index) =>\r\n MonthViewModel.create(month + index, year),\r\n );\r\n this.setState(\r\n state => {\r\n const yearChanges = isYearChanges(state);\r\n if (yearChanges) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[0].isFirstInYear = true;\r\n if (monthsToPrepend.length) {\r\n // Mutating item here is safe as it was just created\r\n monthsToPrepend[monthsToPrepend.length - 1].isLastInYear = true;\r\n }\r\n }\r\n return {\r\n months: monthsToPrepend.concat(state.months),\r\n scrollPosition: -CalendarUtils.getMonthsHeight(monthsToPrepend, this.theme),\r\n };\r\n },\r\n () => {\r\n const targetPosition = this.state.months[0].getHeight(this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n\r\n // If scrolling downwards, append maximum maxMonthsToAdd months\r\n // and scroll to the last but one month\r\n if (diffInMonths < 0) {\r\n const monthsToAppendCount = Math.min(Math.abs(diffInMonths), maxMonthsToAdd);\r\n const monthsToAppend = Array.from({ length: monthsToAppendCount }, (_, index) =>\r\n MonthViewModel.create(month + index - monthsToAppendCount + 2, year),\r\n );\r\n this.setState(\r\n state => {\r\n if (isYearChanges(state)) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[state.months.length - 1].isLastInYear = true;\r\n // Mutating item here is safe as it was just created\r\n if (monthsToAppend[0]) {\r\n monthsToAppend[0].isFirstInYear = true;\r\n }\r\n }\r\n return { months: state.months.concat(monthsToAppend) };\r\n },\r\n () => {\r\n const targetPosition = -1 * CalendarUtils.getMonthsHeight(this.state.months.slice(1, -2), this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n };\r\n\r\n private renderMain = () => {\r\n const positions = this.getMonthPositions();\r\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\r\n return (\r\n <div ref={this.refRoot} className={jsStyles.root(this.theme)} data-tid=\"Calendar\">\r\n <div style={wrapperStyle} className={jsStyles.wrapper()}>\r\n {this.state.months\r\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\r\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme))\r\n .map(this.renderMonth, this)}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n private refRoot = (element: HTMLElement | null) => {\r\n if (!this.root && element) {\r\n element.addEventListener('wheel', this.handleWheel, { passive: false });\r\n }\r\n if (this.root && !element) {\r\n this.root.removeEventListener('wheel', this.handleWheel);\r\n }\r\n this.root = element;\r\n };\r\n\r\n private renderMonth([top, month]: [number, MonthViewModel]) {\r\n return (\r\n <Month\r\n key={month.month + '-' + month.year}\r\n top={top}\r\n month={month}\r\n maxDate={this.props.maxDate}\r\n minDate={this.props.minDate}\r\n today={this.state.today}\r\n value={this.props.value}\r\n onDateClick={this.props.onSelect}\r\n onMonthYearChange={this.handleMonthYearChange}\r\n isHoliday={this.props.isHoliday}\r\n />\r\n );\r\n }\r\n\r\n private getMonthPositions() {\r\n const { scrollPosition, months } = this.state;\r\n\r\n const positions = [scrollPosition - months[0].getHeight(this.theme)];\r\n for (let i = 1; i < months.length; i++) {\r\n const position = positions[i - 1] + months[i - 1].getHeight(this.theme);\r\n positions.push(position);\r\n }\r\n return positions;\r\n }\r\n\r\n private handleMonthYearChange = (month: number, year: number) => {\r\n this.scrollToMonth(month, year);\r\n };\r\n\r\n private handleWheel = (event: Event) => {\r\n if (!(event instanceof WheelEvent)) {\r\n return;\r\n }\r\n event.preventDefault();\r\n const { pixelY } = normalizeWheel(event);\r\n\r\n this.setState(({ months, scrollPosition, scrollTarget }) => {\r\n const targetPosition = CalendarUtils.calculateScrollPosition(months, scrollPosition, pixelY, this.theme)\r\n .scrollPosition;\r\n return { scrollTarget: targetPosition };\r\n }, this.handleWheelEnd);\r\n\r\n this.animation.animate(pixelY, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n\r\n CalendarScrollEvents.emit();\r\n };\r\n\r\n private handleWheelEnd = () => {\r\n if (this.wheelEndTimeout) {\r\n clearTimeout(this.wheelEndTimeout);\r\n }\r\n this.wheelEndTimeout = window.setTimeout(this.scrollToNearestWeek, 300);\r\n };\r\n\r\n private scrollToNearestWeek = () => {\r\n const { scrollTarget, scrollDirection } = this.state;\r\n\r\n const trasholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_SIZE;\r\n\r\n if (scrollTarget < trasholdHeight) {\r\n let targetPosition = 0;\r\n if (scrollDirection < 0) {\r\n targetPosition = trasholdHeight;\r\n }\r\n\r\n this.setState({ scrollTarget: targetPosition }, () => {\r\n const amount = scrollTarget - targetPosition;\r\n this.animation.animate(amount, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n });\r\n }\r\n };\r\n\r\n private scrollTo = (pos: number, onEnd?: () => void) => {\r\n const scrollAmmount = pos - this.state.scrollPosition;\r\n return this.scrollAmount(scrollAmmount, onEnd);\r\n };\r\n\r\n private scrollAmount = (scrollAmmount: number, onEnd?: () => void) => {\r\n return this.animation.animate(\r\n scrollAmmount,\r\n deltaY =>\r\n this.setState(({ scrollPosition }) => ({\r\n scrollPosition: scrollPosition + deltaY,\r\n })),\r\n onEnd,\r\n );\r\n };\r\n}\r\n"]}
|
|
@@ -139,4 +139,4 @@ ComboBoxMenu = (_dec = (0, _decorators.locale)('ComboBox', _locale.CustomComboBo
|
|
|
139
139
|
function (state) {return renderItem(item, state);}));
|
|
140
140
|
|
|
141
141
|
|
|
142
|
-
};return _this;}var _proto = ComboBoxMenu.prototype;_proto.render = function render() {var _this$props2 = this.props,opened = _this$props2.opened,items = _this$props2.items,totalCount = _this$props2.totalCount,loading = _this$props2.loading,refMenu = _this$props2.refMenu,_this$props2$renderNo = _this$props2.renderNotFound,renderNotFound = _this$props2$renderNo === void 0 ? function () {return notFound;} : _this$props2$renderNo,renderTotalCount = _this$props2.renderTotalCount,maxMenuHeight = _this$props2.maxMenuHeight,requestStatus = _this$props2.requestStatus;var _this$locale = this.locale,notFound = _this$locale.notFound,errorNetworkButton = _this$locale.errorNetworkButton,errorNetworkMessage = _this$locale.errorNetworkMessage;if (!opened) {return null;}var renderAddButton = null;if (this.props.renderAddButton) {renderAddButton = this.props.renderAddButton();}if (loading && (!items || !items.length)) {return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu }, /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { disabled: true }, /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, { type: "mini", dimmed: true })));}if (items === null && requestStatus === _CustomComboBoxTypes.ComboBoxRequestStatus.Failed) {return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu, maxHeight: maxMenuHeight }, /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { disabled: true, key: "message" }, /*#__PURE__*/_react.default.createElement("div", { style: { maxWidth: 300, whiteSpace: 'normal' } }, errorNetworkMessage)), /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { link: true, onClick: this.props.repeatRequest, key: "retry" }, errorNetworkButton));}if ((items == null || items.length === 0) && renderNotFound) {var notFoundValue = renderNotFound();if (renderAddButton) return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu }, renderAddButton);if (notFoundValue) return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu }, /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { "data-tid": "ComboBoxMenu__notFound", disabled: true }, notFoundValue));return null;}var total = null;if (items && renderTotalCount && totalCount && items.length < totalCount) {total = /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { disabled: true, key: "total" }, /*#__PURE__*/_react.default.createElement("div", { style: { fontSize: 12 } }, renderTotalCount(items.length, totalCount)));}return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { "data-tid": "ComboBoxMenu__items", ref: refMenu, maxHeight: maxMenuHeight }, items && items.map(this.renderItem), total, renderAddButton && [/*#__PURE__*/_react.default.createElement(_MenuSeparator.MenuSeparator, { key: "separator" }), renderAddButton]);};return ComboBoxMenu;}(_react.Component), _class2.__KONTUR_REACT_UI__ = 'ComboBoxMenu', _class2.defaultProps = { repeatRequest: function repeatRequest() {return undefined;}, requestStatus: _CustomComboBoxTypes.ComboBoxRequestStatus.Unknown }, _temp)) || _class);exports.ComboBoxMenu = ComboBoxMenu;
|
|
142
|
+
};return _this;}var _proto = ComboBoxMenu.prototype;_proto.render = function render() {var _this$props2 = this.props,opened = _this$props2.opened,items = _this$props2.items,totalCount = _this$props2.totalCount,loading = _this$props2.loading,refMenu = _this$props2.refMenu,_this$props2$renderNo = _this$props2.renderNotFound,renderNotFound = _this$props2$renderNo === void 0 ? function () {return notFound;} : _this$props2$renderNo,renderTotalCount = _this$props2.renderTotalCount,maxMenuHeight = _this$props2.maxMenuHeight,requestStatus = _this$props2.requestStatus;var _this$locale = this.locale,notFound = _this$locale.notFound,errorNetworkButton = _this$locale.errorNetworkButton,errorNetworkMessage = _this$locale.errorNetworkMessage;if (!opened) {return null;}var renderAddButton = null;if (this.props.renderAddButton) {renderAddButton = this.props.renderAddButton();}if (loading && (!items || !items.length)) {return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu, "data-tid": "ComboBoxMenu__loading" }, /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { disabled: true }, /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, { type: "mini", dimmed: true })));}if (items === null && requestStatus === _CustomComboBoxTypes.ComboBoxRequestStatus.Failed) {return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu, maxHeight: maxMenuHeight, "data-tid": "ComboBoxMenu__failed" }, /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { disabled: true, key: "message" }, /*#__PURE__*/_react.default.createElement("div", { style: { maxWidth: 300, whiteSpace: 'normal' } }, errorNetworkMessage)), /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { link: true, onClick: this.props.repeatRequest, key: "retry" }, errorNetworkButton));}if ((items == null || items.length === 0) && renderNotFound) {var notFoundValue = renderNotFound();if (renderAddButton) return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu }, renderAddButton);if (notFoundValue) return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: refMenu }, /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { "data-tid": "ComboBoxMenu__notFound", disabled: true }, notFoundValue));return null;}var total = null;if (items && renderTotalCount && totalCount && items.length < totalCount) {total = /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { disabled: true, key: "total" }, /*#__PURE__*/_react.default.createElement("div", { style: { fontSize: 12 } }, renderTotalCount(items.length, totalCount)));}return /*#__PURE__*/_react.default.createElement(_Menu.Menu, { "data-tid": "ComboBoxMenu__items", ref: refMenu, maxHeight: maxMenuHeight }, items && items.map(this.renderItem), total, renderAddButton && [/*#__PURE__*/_react.default.createElement(_MenuSeparator.MenuSeparator, { key: "separator" }), renderAddButton]);};return ComboBoxMenu;}(_react.Component), _class2.__KONTUR_REACT_UI__ = 'ComboBoxMenu', _class2.defaultProps = { repeatRequest: function repeatRequest() {return undefined;}, requestStatus: _CustomComboBoxTypes.ComboBoxRequestStatus.Unknown }, _temp)) || _class);exports.ComboBoxMenu = ComboBoxMenu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComboBoxMenu.tsx"],"names":["ComboBoxMenu","CustomComboBoxLocaleHelper","locale","renderItem","item","index","props","onValueChange","React","isValidElement","element","Object","assign","key","onClick","cloneElement","state","render","opened","items","totalCount","loading","refMenu","renderNotFound","notFound","renderTotalCount","maxMenuHeight","requestStatus","errorNetworkButton","errorNetworkMessage","renderAddButton","length","ComboBoxRequestStatus","Failed","maxWidth","whiteSpace","repeatRequest","notFoundValue","total","fontSize","map","Component","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\r\n\r\nimport { locale } from '../../lib/locale/decorators';\r\nimport { Menu } from '../Menu';\r\nimport { MenuItem, MenuItemState } from '../../components/MenuItem';\r\nimport { Spinner } from '../../components/Spinner';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { MenuSeparator } from '../../components/MenuSeparator';\r\n\r\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\r\nimport { ComboBoxLocale, CustomComboBoxLocaleHelper } from './locale';\r\n\r\nexport interface ComboBoxMenuProps<T> {\r\n opened?: boolean;\r\n items?: Nullable<T[]>;\r\n totalCount?: number;\r\n loading?: boolean;\r\n maxMenuHeight?: number | string;\r\n refMenu?: (menu: Nullable<Menu>) => void;\r\n renderNotFound?: () => React.ReactNode;\r\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\r\n renderItem: (item: T, state: MenuItemState) => React.ReactNode;\r\n onValueChange: (value: T) => any;\r\n renderAddButton?: () => React.ReactNode;\r\n caption?: React.ReactNode;\r\n repeatRequest?: () => void;\r\n requestStatus?: ComboBoxRequestStatus;\r\n}\r\n\r\n@locale('ComboBox', CustomComboBoxLocaleHelper)\r\nexport class ComboBoxMenu<T> extends Component<ComboBoxMenuProps<T>> {\r\n public static __KONTUR_REACT_UI__ = 'ComboBoxMenu';\r\n\r\n public static defaultProps = {\r\n repeatRequest: () => undefined,\r\n requestStatus: ComboBoxRequestStatus.Unknown,\r\n };\r\n\r\n private readonly locale!: ComboBoxLocale;\r\n\r\n public render() {\r\n const {\r\n opened,\r\n items,\r\n totalCount,\r\n loading,\r\n refMenu,\r\n renderNotFound = () => notFound,\r\n renderTotalCount,\r\n maxMenuHeight,\r\n requestStatus,\r\n } = this.props;\r\n\r\n const { notFound, errorNetworkButton, errorNetworkMessage } = this.locale;\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n let renderAddButton = null;\r\n if (this.props.renderAddButton) {\r\n renderAddButton = this.props.renderAddButton();\r\n }\r\n\r\n if (loading && (!items || !items.length)) {\r\n return (\r\n <Menu ref={refMenu}>\r\n <MenuItem disabled>\r\n <Spinner type=\"mini\" dimmed />\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {\r\n return (\r\n <Menu ref={refMenu} maxHeight={maxMenuHeight}>\r\n <MenuItem disabled key=\"message\">\r\n <div style={{ maxWidth: 300, whiteSpace: 'normal' }}>{errorNetworkMessage}</div>\r\n </MenuItem>\r\n <MenuItem link onClick={this.props.repeatRequest} key=\"retry\">\r\n {errorNetworkButton}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if ((items == null || items.length === 0) && renderNotFound) {\r\n const notFoundValue = renderNotFound();\r\n if (renderAddButton) return <Menu ref={refMenu}>{renderAddButton}</Menu>;\r\n if (notFoundValue)\r\n return (\r\n <Menu ref={refMenu}>\r\n <MenuItem data-tid=\"ComboBoxMenu__notFound\" disabled>\r\n {notFoundValue}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n return null;\r\n }\r\n\r\n let total = null;\r\n if (items && renderTotalCount && totalCount && items.length < totalCount) {\r\n total = (\r\n <MenuItem disabled key=\"total\">\r\n <div style={{ fontSize: 12 }}>{renderTotalCount(items.length, totalCount)}</div>\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return (\r\n <Menu data-tid=\"ComboBoxMenu__items\" ref={refMenu} maxHeight={maxMenuHeight}>\r\n {items && items.map(this.renderItem)}\r\n {total}\r\n {renderAddButton && [<MenuSeparator key=\"separator\" />, renderAddButton]}\r\n </Menu>\r\n );\r\n }\r\n\r\n private renderItem = (item: T, index: number): React.ReactNode => {\r\n // NOTE this is undesireable feature, better\r\n // to remove it from further versions\r\n const { renderItem, onValueChange } = this.props;\r\n if (typeof item === 'function' || React.isValidElement(item)) {\r\n // @ts-ignore\r\n const element = typeof item === 'function' ? item() : item;\r\n const props = Object.assign(\r\n {\r\n key: index,\r\n onClick: () => onValueChange(element.props),\r\n },\r\n element.props,\r\n );\r\n return React.cloneElement(element, props);\r\n }\r\n\r\n return (\r\n <MenuItem data-tid=\"ComboBoxMenu__item\" onClick={() => onValueChange(item)} key={index}>\r\n {state => renderItem(item, state)}\r\n </MenuItem>\r\n );\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["ComboBoxMenu.tsx"],"names":["ComboBoxMenu","CustomComboBoxLocaleHelper","locale","renderItem","item","index","props","onValueChange","React","isValidElement","element","Object","assign","key","onClick","cloneElement","state","render","opened","items","totalCount","loading","refMenu","renderNotFound","notFound","renderTotalCount","maxMenuHeight","requestStatus","errorNetworkButton","errorNetworkMessage","renderAddButton","length","ComboBoxRequestStatus","Failed","maxWidth","whiteSpace","repeatRequest","notFoundValue","total","fontSize","map","Component","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\r\n\r\nimport { locale } from '../../lib/locale/decorators';\r\nimport { Menu } from '../Menu';\r\nimport { MenuItem, MenuItemState } from '../../components/MenuItem';\r\nimport { Spinner } from '../../components/Spinner';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { MenuSeparator } from '../../components/MenuSeparator';\r\n\r\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\r\nimport { ComboBoxLocale, CustomComboBoxLocaleHelper } from './locale';\r\n\r\nexport interface ComboBoxMenuProps<T> {\r\n opened?: boolean;\r\n items?: Nullable<T[]>;\r\n totalCount?: number;\r\n loading?: boolean;\r\n maxMenuHeight?: number | string;\r\n refMenu?: (menu: Nullable<Menu>) => void;\r\n renderNotFound?: () => React.ReactNode;\r\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\r\n renderItem: (item: T, state: MenuItemState) => React.ReactNode;\r\n onValueChange: (value: T) => any;\r\n renderAddButton?: () => React.ReactNode;\r\n caption?: React.ReactNode;\r\n repeatRequest?: () => void;\r\n requestStatus?: ComboBoxRequestStatus;\r\n}\r\n\r\n@locale('ComboBox', CustomComboBoxLocaleHelper)\r\nexport class ComboBoxMenu<T> extends Component<ComboBoxMenuProps<T>> {\r\n public static __KONTUR_REACT_UI__ = 'ComboBoxMenu';\r\n\r\n public static defaultProps = {\r\n repeatRequest: () => undefined,\r\n requestStatus: ComboBoxRequestStatus.Unknown,\r\n };\r\n\r\n private readonly locale!: ComboBoxLocale;\r\n\r\n public render() {\r\n const {\r\n opened,\r\n items,\r\n totalCount,\r\n loading,\r\n refMenu,\r\n renderNotFound = () => notFound,\r\n renderTotalCount,\r\n maxMenuHeight,\r\n requestStatus,\r\n } = this.props;\r\n\r\n const { notFound, errorNetworkButton, errorNetworkMessage } = this.locale;\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n let renderAddButton = null;\r\n if (this.props.renderAddButton) {\r\n renderAddButton = this.props.renderAddButton();\r\n }\r\n\r\n if (loading && (!items || !items.length)) {\r\n return (\r\n <Menu ref={refMenu} data-tid=\"ComboBoxMenu__loading\">\r\n <MenuItem disabled>\r\n <Spinner type=\"mini\" dimmed />\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {\r\n return (\r\n <Menu ref={refMenu} maxHeight={maxMenuHeight} data-tid=\"ComboBoxMenu__failed\">\r\n <MenuItem disabled key=\"message\">\r\n <div style={{ maxWidth: 300, whiteSpace: 'normal' }}>{errorNetworkMessage}</div>\r\n </MenuItem>\r\n <MenuItem link onClick={this.props.repeatRequest} key=\"retry\">\r\n {errorNetworkButton}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if ((items == null || items.length === 0) && renderNotFound) {\r\n const notFoundValue = renderNotFound();\r\n if (renderAddButton) return <Menu ref={refMenu}>{renderAddButton}</Menu>;\r\n if (notFoundValue)\r\n return (\r\n <Menu ref={refMenu}>\r\n <MenuItem data-tid=\"ComboBoxMenu__notFound\" disabled>\r\n {notFoundValue}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n return null;\r\n }\r\n\r\n let total = null;\r\n if (items && renderTotalCount && totalCount && items.length < totalCount) {\r\n total = (\r\n <MenuItem disabled key=\"total\">\r\n <div style={{ fontSize: 12 }}>{renderTotalCount(items.length, totalCount)}</div>\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return (\r\n <Menu data-tid=\"ComboBoxMenu__items\" ref={refMenu} maxHeight={maxMenuHeight}>\r\n {items && items.map(this.renderItem)}\r\n {total}\r\n {renderAddButton && [<MenuSeparator key=\"separator\" />, renderAddButton]}\r\n </Menu>\r\n );\r\n }\r\n\r\n private renderItem = (item: T, index: number): React.ReactNode => {\r\n // NOTE this is undesireable feature, better\r\n // to remove it from further versions\r\n const { renderItem, onValueChange } = this.props;\r\n if (typeof item === 'function' || React.isValidElement(item)) {\r\n // @ts-ignore\r\n const element = typeof item === 'function' ? item() : item;\r\n const props = Object.assign(\r\n {\r\n key: index,\r\n onClick: () => onValueChange(element.props),\r\n },\r\n element.props,\r\n );\r\n return React.cloneElement(element, props);\r\n }\r\n\r\n return (\r\n <MenuItem data-tid=\"ComboBoxMenu__item\" onClick={() => onValueChange(item)} key={index}>\r\n {state => renderItem(item, state)}\r\n </MenuItem>\r\n );\r\n };\r\n}\r\n"]}
|
|
@@ -196,7 +196,8 @@ export var Calendar = /*#__PURE__*/function (_React$Component) {
|
|
|
196
196
|
};
|
|
197
197
|
return /*#__PURE__*/React.createElement("div", {
|
|
198
198
|
ref: _this.refRoot,
|
|
199
|
-
className: jsStyles.root(_this.theme)
|
|
199
|
+
className: jsStyles.root(_this.theme),
|
|
200
|
+
"data-tid": "Calendar"
|
|
200
201
|
}, /*#__PURE__*/React.createElement("div", {
|
|
201
202
|
style: wrapperStyle,
|
|
202
203
|
className: jsStyles.wrapper()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Calendar.tsx"],"names":["React","normalizeWheel","MAX_DATE","MAX_MONTH","MAX_YEAR","MIN_DATE","MIN_MONTH","MIN_YEAR","ThemeContext","Animation","themeConfig","CalendarUtils","MonthViewModel","CalendarScrollEvents","Month","jsStyles","create","isGreater","isLess","getTodayDate","date","Date","getDate","month","getMonth","year","getFullYear","Calendar","props","theme","wheelEndTimeout","root","animation","scrollToMonth","inProgress","finish","Promise","r","setTimeout","minDate","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","renderMain","positions","getMonthPositions","wrapperStyle","height","WRAPPER_HEIGHT","refRoot","wrapper","map","x","i","filter","top","isMonthVisible","renderMonth","element","addEventListener","handleWheel","passive","removeEventListener","handleMonthYearChange","event","WheelEvent","preventDefault","pixelY","scrollTarget","calculateScrollPosition","handleWheelEnd","animate","deltaY","applyDelta","emit","clearTimeout","window","scrollToNearestWeek","scrollDirection","trasholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_SIZE","amount","pos","scrollAmmount","scrollAmount","today","initialMonth","initialYear","componentWillUnmount","cancel","render","value","onSelect","isHoliday","position","push","Component","__KONTUR_REACT_UI__","defaultProps","holidays"],"mappings":"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","sourcesContent":["import React from 'react';\r\nimport normalizeWheel from 'normalize-wheel';\r\n\r\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { Theme } from '../../lib/theming/Theme';\r\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\r\nimport { Animation } from '../../lib/animation';\r\n\r\nimport { themeConfig } from './config';\r\nimport * as CalendarUtils from './CalendarUtils';\r\nimport { MonthViewModel } from './MonthViewModel';\r\nimport * as CalendarScrollEvents from './CalendarScrollEvents';\r\nimport { Month } from './Month';\r\nimport { jsStyles } from './Calendar.styles';\r\nimport { CalendarDateShape, create, isGreater, isLess } from './CalendarDateShape';\r\n\r\nexport interface CalendarProps {\r\n initialMonth?: number;\r\n initialYear?: number;\r\n onSelect?: (date: CalendarDateShape) => void;\r\n value?: Nullable<CalendarDateShape>;\r\n maxDate?: CalendarDateShape;\r\n minDate?: CalendarDateShape;\r\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\r\n}\r\n\r\nexport interface CalendarState {\r\n scrollPosition: number;\r\n months: MonthViewModel[];\r\n today: CalendarDateShape;\r\n scrollDirection: number;\r\n scrollTarget: number;\r\n}\r\n\r\nconst getTodayDate = () => {\r\n const date = new Date();\r\n return {\r\n date: date.getDate(),\r\n month: date.getMonth(),\r\n year: date.getFullYear(),\r\n };\r\n};\r\n\r\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\r\n public static __KONTUR_REACT_UI__ = 'Calendar';\r\n\r\n public static defaultProps = {\r\n holidays: [],\r\n minDate: {\r\n year: MIN_YEAR,\r\n month: MIN_MONTH,\r\n date: MIN_DATE,\r\n },\r\n maxDate: {\r\n year: MAX_YEAR,\r\n month: MAX_MONTH,\r\n date: MAX_DATE,\r\n },\r\n };\r\n\r\n private theme!: Theme;\r\n private wheelEndTimeout: Nullable<number>;\r\n private root: Nullable<HTMLElement>;\r\n private animation = Animation();\r\n\r\n constructor(props: CalendarProps) {\r\n super(props);\r\n\r\n const today = getTodayDate();\r\n\r\n const initialMonth = props.initialMonth == null ? today.month : props.initialMonth;\r\n const initialYear = props.initialYear == null ? today.year : props.initialYear;\r\n\r\n this.state = {\r\n scrollPosition: 0,\r\n months: CalendarUtils.getMonths(initialMonth, initialYear),\r\n today,\r\n scrollDirection: 1,\r\n scrollTarget: 0,\r\n };\r\n }\r\n\r\n public componentWillUnmount() {\r\n if (this.animation.inProgress()) {\r\n this.animation.cancel();\r\n }\r\n }\r\n\r\n public render() {\r\n return (\r\n <ThemeContext.Consumer>\r\n {theme => {\r\n this.theme = theme;\r\n return this.renderMain();\r\n }}\r\n </ThemeContext.Consumer>\r\n );\r\n }\r\n\r\n /**\r\n * Scrolls calendar to given date\r\n * @public\r\n */\r\n public scrollToMonth = async (month: number, year: number) => {\r\n if (this.animation.inProgress()) {\r\n this.animation.finish();\r\n // FIXME: Dirty hack to await batched updates\r\n await new Promise(r => setTimeout(r));\r\n }\r\n\r\n const { minDate, maxDate } = this.props;\r\n\r\n if (minDate && isGreater(minDate, create(32, month, year))) {\r\n this.scrollToMonth(minDate.month, minDate.year);\r\n return;\r\n }\r\n\r\n if (maxDate && isLess(maxDate, create(0, month, year))) {\r\n this.scrollToMonth(maxDate.month, maxDate.year);\r\n return;\r\n }\r\n\r\n const currentMonth = this.state.months[1];\r\n const diffInMonths = currentMonth.month + currentMonth.year * 12 - month - year * 12;\r\n\r\n if (diffInMonths === 0) {\r\n this.scrollTo(0);\r\n return;\r\n }\r\n\r\n const maxMonthsToAdd = themeConfig(this.theme).MAX_MONTHS_TO_APPEND_ON_SCROLL;\r\n\r\n const onEnd = () =>\r\n this.setState({\r\n months: CalendarUtils.getMonths(month, year),\r\n scrollPosition: 0,\r\n });\r\n\r\n const isYearChanges = (state: CalendarState) =>\r\n state.months[1].year !== year &&\r\n // if diff in months is 2 or less,\r\n // either year is not changing either months already\r\n // have right isFirstInYear/isLastInYear flags\r\n Math.abs(diffInMonths) > 2;\r\n\r\n // If scrolling upwards, prepend maximum maxMonthsToAdd months\r\n // and scroll to the first month\r\n if (diffInMonths > 0) {\r\n const monthsToPrependCount = Math.min(Math.abs(diffInMonths) - 1, maxMonthsToAdd);\r\n const monthsToPrepend = Array.from({ length: monthsToPrependCount }, (_, index) =>\r\n MonthViewModel.create(month + index, year),\r\n );\r\n this.setState(\r\n state => {\r\n const yearChanges = isYearChanges(state);\r\n if (yearChanges) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[0].isFirstInYear = true;\r\n if (monthsToPrepend.length) {\r\n // Mutating item here is safe as it was just created\r\n monthsToPrepend[monthsToPrepend.length - 1].isLastInYear = true;\r\n }\r\n }\r\n return {\r\n months: monthsToPrepend.concat(state.months),\r\n scrollPosition: -CalendarUtils.getMonthsHeight(monthsToPrepend, this.theme),\r\n };\r\n },\r\n () => {\r\n const targetPosition = this.state.months[0].getHeight(this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n\r\n // If scrolling downwards, append maximum maxMonthsToAdd months\r\n // and scroll to the last but one month\r\n if (diffInMonths < 0) {\r\n const monthsToAppendCount = Math.min(Math.abs(diffInMonths), maxMonthsToAdd);\r\n const monthsToAppend = Array.from({ length: monthsToAppendCount }, (_, index) =>\r\n MonthViewModel.create(month + index - monthsToAppendCount + 2, year),\r\n );\r\n this.setState(\r\n state => {\r\n if (isYearChanges(state)) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[state.months.length - 1].isLastInYear = true;\r\n // Mutating item here is safe as it was just created\r\n if (monthsToAppend[0]) {\r\n monthsToAppend[0].isFirstInYear = true;\r\n }\r\n }\r\n return { months: state.months.concat(monthsToAppend) };\r\n },\r\n () => {\r\n const targetPosition = -1 * CalendarUtils.getMonthsHeight(this.state.months.slice(1, -2), this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n };\r\n\r\n private renderMain = () => {\r\n const positions = this.getMonthPositions();\r\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\r\n return (\r\n <div ref={this.refRoot} className={jsStyles.root(this.theme)}>\r\n <div style={wrapperStyle} className={jsStyles.wrapper()}>\r\n {this.state.months\r\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\r\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme))\r\n .map(this.renderMonth, this)}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n private refRoot = (element: HTMLElement | null) => {\r\n if (!this.root && element) {\r\n element.addEventListener('wheel', this.handleWheel, { passive: false });\r\n }\r\n if (this.root && !element) {\r\n this.root.removeEventListener('wheel', this.handleWheel);\r\n }\r\n this.root = element;\r\n };\r\n\r\n private renderMonth([top, month]: [number, MonthViewModel]) {\r\n return (\r\n <Month\r\n key={month.month + '-' + month.year}\r\n top={top}\r\n month={month}\r\n maxDate={this.props.maxDate}\r\n minDate={this.props.minDate}\r\n today={this.state.today}\r\n value={this.props.value}\r\n onDateClick={this.props.onSelect}\r\n onMonthYearChange={this.handleMonthYearChange}\r\n isHoliday={this.props.isHoliday}\r\n />\r\n );\r\n }\r\n\r\n private getMonthPositions() {\r\n const { scrollPosition, months } = this.state;\r\n\r\n const positions = [scrollPosition - months[0].getHeight(this.theme)];\r\n for (let i = 1; i < months.length; i++) {\r\n const position = positions[i - 1] + months[i - 1].getHeight(this.theme);\r\n positions.push(position);\r\n }\r\n return positions;\r\n }\r\n\r\n private handleMonthYearChange = (month: number, year: number) => {\r\n this.scrollToMonth(month, year);\r\n };\r\n\r\n private handleWheel = (event: Event) => {\r\n if (!(event instanceof WheelEvent)) {\r\n return;\r\n }\r\n event.preventDefault();\r\n const { pixelY } = normalizeWheel(event);\r\n\r\n this.setState(({ months, scrollPosition, scrollTarget }) => {\r\n const targetPosition = CalendarUtils.calculateScrollPosition(months, scrollPosition, pixelY, this.theme)\r\n .scrollPosition;\r\n return { scrollTarget: targetPosition };\r\n }, this.handleWheelEnd);\r\n\r\n this.animation.animate(pixelY, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n\r\n CalendarScrollEvents.emit();\r\n };\r\n\r\n private handleWheelEnd = () => {\r\n if (this.wheelEndTimeout) {\r\n clearTimeout(this.wheelEndTimeout);\r\n }\r\n this.wheelEndTimeout = window.setTimeout(this.scrollToNearestWeek, 300);\r\n };\r\n\r\n private scrollToNearestWeek = () => {\r\n const { scrollTarget, scrollDirection } = this.state;\r\n\r\n const trasholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_SIZE;\r\n\r\n if (scrollTarget < trasholdHeight) {\r\n let targetPosition = 0;\r\n if (scrollDirection < 0) {\r\n targetPosition = trasholdHeight;\r\n }\r\n\r\n this.setState({ scrollTarget: targetPosition }, () => {\r\n const amount = scrollTarget - targetPosition;\r\n this.animation.animate(amount, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n });\r\n }\r\n };\r\n\r\n private scrollTo = (pos: number, onEnd?: () => void) => {\r\n const scrollAmmount = pos - this.state.scrollPosition;\r\n return this.scrollAmount(scrollAmmount, onEnd);\r\n };\r\n\r\n private scrollAmount = (scrollAmmount: number, onEnd?: () => void) => {\r\n return this.animation.animate(\r\n scrollAmmount,\r\n deltaY =>\r\n this.setState(({ scrollPosition }) => ({\r\n scrollPosition: scrollPosition + deltaY,\r\n })),\r\n onEnd,\r\n );\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["Calendar.tsx"],"names":["React","normalizeWheel","MAX_DATE","MAX_MONTH","MAX_YEAR","MIN_DATE","MIN_MONTH","MIN_YEAR","ThemeContext","Animation","themeConfig","CalendarUtils","MonthViewModel","CalendarScrollEvents","Month","jsStyles","create","isGreater","isLess","getTodayDate","date","Date","getDate","month","getMonth","year","getFullYear","Calendar","props","theme","wheelEndTimeout","root","animation","scrollToMonth","inProgress","finish","Promise","r","setTimeout","minDate","maxDate","currentMonth","state","months","diffInMonths","scrollTo","maxMonthsToAdd","MAX_MONTHS_TO_APPEND_ON_SCROLL","onEnd","setState","getMonths","scrollPosition","isYearChanges","Math","abs","monthsToPrependCount","min","monthsToPrepend","Array","from","length","_","index","yearChanges","isFirstInYear","isLastInYear","concat","getMonthsHeight","targetPosition","getHeight","monthsToAppendCount","monthsToAppend","slice","renderMain","positions","getMonthPositions","wrapperStyle","height","WRAPPER_HEIGHT","refRoot","wrapper","map","x","i","filter","top","isMonthVisible","renderMonth","element","addEventListener","handleWheel","passive","removeEventListener","handleMonthYearChange","event","WheelEvent","preventDefault","pixelY","scrollTarget","calculateScrollPosition","handleWheelEnd","animate","deltaY","applyDelta","emit","clearTimeout","window","scrollToNearestWeek","scrollDirection","trasholdHeight","MONTH_TITLE_OFFSET_HEIGHT","DAY_SIZE","amount","pos","scrollAmmount","scrollAmount","today","initialMonth","initialYear","componentWillUnmount","cancel","render","value","onSelect","isHoliday","position","push","Component","__KONTUR_REACT_UI__","defaultProps","holidays"],"mappings":"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","sourcesContent":["import React from 'react';\r\nimport normalizeWheel from 'normalize-wheel';\r\n\r\nimport { MAX_DATE, MAX_MONTH, MAX_YEAR, MIN_DATE, MIN_MONTH, MIN_YEAR } from '../../lib/date/constants';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { Theme } from '../../lib/theming/Theme';\r\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\r\nimport { Animation } from '../../lib/animation';\r\n\r\nimport { themeConfig } from './config';\r\nimport * as CalendarUtils from './CalendarUtils';\r\nimport { MonthViewModel } from './MonthViewModel';\r\nimport * as CalendarScrollEvents from './CalendarScrollEvents';\r\nimport { Month } from './Month';\r\nimport { jsStyles } from './Calendar.styles';\r\nimport { CalendarDateShape, create, isGreater, isLess } from './CalendarDateShape';\r\n\r\nexport interface CalendarProps {\r\n initialMonth?: number;\r\n initialYear?: number;\r\n onSelect?: (date: CalendarDateShape) => void;\r\n value?: Nullable<CalendarDateShape>;\r\n maxDate?: CalendarDateShape;\r\n minDate?: CalendarDateShape;\r\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\r\n}\r\n\r\nexport interface CalendarState {\r\n scrollPosition: number;\r\n months: MonthViewModel[];\r\n today: CalendarDateShape;\r\n scrollDirection: number;\r\n scrollTarget: number;\r\n}\r\n\r\nconst getTodayDate = () => {\r\n const date = new Date();\r\n return {\r\n date: date.getDate(),\r\n month: date.getMonth(),\r\n year: date.getFullYear(),\r\n };\r\n};\r\n\r\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\r\n public static __KONTUR_REACT_UI__ = 'Calendar';\r\n\r\n public static defaultProps = {\r\n holidays: [],\r\n minDate: {\r\n year: MIN_YEAR,\r\n month: MIN_MONTH,\r\n date: MIN_DATE,\r\n },\r\n maxDate: {\r\n year: MAX_YEAR,\r\n month: MAX_MONTH,\r\n date: MAX_DATE,\r\n },\r\n };\r\n\r\n private theme!: Theme;\r\n private wheelEndTimeout: Nullable<number>;\r\n private root: Nullable<HTMLElement>;\r\n private animation = Animation();\r\n\r\n constructor(props: CalendarProps) {\r\n super(props);\r\n\r\n const today = getTodayDate();\r\n\r\n const initialMonth = props.initialMonth == null ? today.month : props.initialMonth;\r\n const initialYear = props.initialYear == null ? today.year : props.initialYear;\r\n\r\n this.state = {\r\n scrollPosition: 0,\r\n months: CalendarUtils.getMonths(initialMonth, initialYear),\r\n today,\r\n scrollDirection: 1,\r\n scrollTarget: 0,\r\n };\r\n }\r\n\r\n public componentWillUnmount() {\r\n if (this.animation.inProgress()) {\r\n this.animation.cancel();\r\n }\r\n }\r\n\r\n public render() {\r\n return (\r\n <ThemeContext.Consumer>\r\n {theme => {\r\n this.theme = theme;\r\n return this.renderMain();\r\n }}\r\n </ThemeContext.Consumer>\r\n );\r\n }\r\n\r\n /**\r\n * Scrolls calendar to given date\r\n * @public\r\n */\r\n public scrollToMonth = async (month: number, year: number) => {\r\n if (this.animation.inProgress()) {\r\n this.animation.finish();\r\n // FIXME: Dirty hack to await batched updates\r\n await new Promise(r => setTimeout(r));\r\n }\r\n\r\n const { minDate, maxDate } = this.props;\r\n\r\n if (minDate && isGreater(minDate, create(32, month, year))) {\r\n this.scrollToMonth(minDate.month, minDate.year);\r\n return;\r\n }\r\n\r\n if (maxDate && isLess(maxDate, create(0, month, year))) {\r\n this.scrollToMonth(maxDate.month, maxDate.year);\r\n return;\r\n }\r\n\r\n const currentMonth = this.state.months[1];\r\n const diffInMonths = currentMonth.month + currentMonth.year * 12 - month - year * 12;\r\n\r\n if (diffInMonths === 0) {\r\n this.scrollTo(0);\r\n return;\r\n }\r\n\r\n const maxMonthsToAdd = themeConfig(this.theme).MAX_MONTHS_TO_APPEND_ON_SCROLL;\r\n\r\n const onEnd = () =>\r\n this.setState({\r\n months: CalendarUtils.getMonths(month, year),\r\n scrollPosition: 0,\r\n });\r\n\r\n const isYearChanges = (state: CalendarState) =>\r\n state.months[1].year !== year &&\r\n // if diff in months is 2 or less,\r\n // either year is not changing either months already\r\n // have right isFirstInYear/isLastInYear flags\r\n Math.abs(diffInMonths) > 2;\r\n\r\n // If scrolling upwards, prepend maximum maxMonthsToAdd months\r\n // and scroll to the first month\r\n if (diffInMonths > 0) {\r\n const monthsToPrependCount = Math.min(Math.abs(diffInMonths) - 1, maxMonthsToAdd);\r\n const monthsToPrepend = Array.from({ length: monthsToPrependCount }, (_, index) =>\r\n MonthViewModel.create(month + index, year),\r\n );\r\n this.setState(\r\n state => {\r\n const yearChanges = isYearChanges(state);\r\n if (yearChanges) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[0].isFirstInYear = true;\r\n if (monthsToPrepend.length) {\r\n // Mutating item here is safe as it was just created\r\n monthsToPrepend[monthsToPrepend.length - 1].isLastInYear = true;\r\n }\r\n }\r\n return {\r\n months: monthsToPrepend.concat(state.months),\r\n scrollPosition: -CalendarUtils.getMonthsHeight(monthsToPrepend, this.theme),\r\n };\r\n },\r\n () => {\r\n const targetPosition = this.state.months[0].getHeight(this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n\r\n // If scrolling downwards, append maximum maxMonthsToAdd months\r\n // and scroll to the last but one month\r\n if (diffInMonths < 0) {\r\n const monthsToAppendCount = Math.min(Math.abs(diffInMonths), maxMonthsToAdd);\r\n const monthsToAppend = Array.from({ length: monthsToAppendCount }, (_, index) =>\r\n MonthViewModel.create(month + index - monthsToAppendCount + 2, year),\r\n );\r\n this.setState(\r\n state => {\r\n if (isYearChanges(state)) {\r\n // Mutating here can lead to some unexpected bugs\r\n // but we couldn't find any yet\r\n state.months[state.months.length - 1].isLastInYear = true;\r\n // Mutating item here is safe as it was just created\r\n if (monthsToAppend[0]) {\r\n monthsToAppend[0].isFirstInYear = true;\r\n }\r\n }\r\n return { months: state.months.concat(monthsToAppend) };\r\n },\r\n () => {\r\n const targetPosition = -1 * CalendarUtils.getMonthsHeight(this.state.months.slice(1, -2), this.theme);\r\n this.scrollTo(targetPosition, onEnd);\r\n },\r\n );\r\n }\r\n };\r\n\r\n private renderMain = () => {\r\n const positions = this.getMonthPositions();\r\n const wrapperStyle = { height: themeConfig(this.theme).WRAPPER_HEIGHT };\r\n return (\r\n <div ref={this.refRoot} className={jsStyles.root(this.theme)} data-tid=\"Calendar\">\r\n <div style={wrapperStyle} className={jsStyles.wrapper()}>\r\n {this.state.months\r\n .map<[number, MonthViewModel]>((x, i) => [positions[i], x])\r\n .filter(([top, month]) => CalendarUtils.isMonthVisible(top, month, this.theme))\r\n .map(this.renderMonth, this)}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n private refRoot = (element: HTMLElement | null) => {\r\n if (!this.root && element) {\r\n element.addEventListener('wheel', this.handleWheel, { passive: false });\r\n }\r\n if (this.root && !element) {\r\n this.root.removeEventListener('wheel', this.handleWheel);\r\n }\r\n this.root = element;\r\n };\r\n\r\n private renderMonth([top, month]: [number, MonthViewModel]) {\r\n return (\r\n <Month\r\n key={month.month + '-' + month.year}\r\n top={top}\r\n month={month}\r\n maxDate={this.props.maxDate}\r\n minDate={this.props.minDate}\r\n today={this.state.today}\r\n value={this.props.value}\r\n onDateClick={this.props.onSelect}\r\n onMonthYearChange={this.handleMonthYearChange}\r\n isHoliday={this.props.isHoliday}\r\n />\r\n );\r\n }\r\n\r\n private getMonthPositions() {\r\n const { scrollPosition, months } = this.state;\r\n\r\n const positions = [scrollPosition - months[0].getHeight(this.theme)];\r\n for (let i = 1; i < months.length; i++) {\r\n const position = positions[i - 1] + months[i - 1].getHeight(this.theme);\r\n positions.push(position);\r\n }\r\n return positions;\r\n }\r\n\r\n private handleMonthYearChange = (month: number, year: number) => {\r\n this.scrollToMonth(month, year);\r\n };\r\n\r\n private handleWheel = (event: Event) => {\r\n if (!(event instanceof WheelEvent)) {\r\n return;\r\n }\r\n event.preventDefault();\r\n const { pixelY } = normalizeWheel(event);\r\n\r\n this.setState(({ months, scrollPosition, scrollTarget }) => {\r\n const targetPosition = CalendarUtils.calculateScrollPosition(months, scrollPosition, pixelY, this.theme)\r\n .scrollPosition;\r\n return { scrollTarget: targetPosition };\r\n }, this.handleWheelEnd);\r\n\r\n this.animation.animate(pixelY, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n\r\n CalendarScrollEvents.emit();\r\n };\r\n\r\n private handleWheelEnd = () => {\r\n if (this.wheelEndTimeout) {\r\n clearTimeout(this.wheelEndTimeout);\r\n }\r\n this.wheelEndTimeout = window.setTimeout(this.scrollToNearestWeek, 300);\r\n };\r\n\r\n private scrollToNearestWeek = () => {\r\n const { scrollTarget, scrollDirection } = this.state;\r\n\r\n const trasholdHeight = themeConfig(this.theme).MONTH_TITLE_OFFSET_HEIGHT + themeConfig(this.theme).DAY_SIZE;\r\n\r\n if (scrollTarget < trasholdHeight) {\r\n let targetPosition = 0;\r\n if (scrollDirection < 0) {\r\n targetPosition = trasholdHeight;\r\n }\r\n\r\n this.setState({ scrollTarget: targetPosition }, () => {\r\n const amount = scrollTarget - targetPosition;\r\n this.animation.animate(amount, deltaY =>\r\n // FIXME: Typescript not resolving setState cb type\r\n this.setState(CalendarUtils.applyDelta(deltaY, this.theme) as any),\r\n );\r\n });\r\n }\r\n };\r\n\r\n private scrollTo = (pos: number, onEnd?: () => void) => {\r\n const scrollAmmount = pos - this.state.scrollPosition;\r\n return this.scrollAmount(scrollAmmount, onEnd);\r\n };\r\n\r\n private scrollAmount = (scrollAmmount: number, onEnd?: () => void) => {\r\n return this.animation.animate(\r\n scrollAmmount,\r\n deltaY =>\r\n this.setState(({ scrollPosition }) => ({\r\n scrollPosition: scrollPosition + deltaY,\r\n })),\r\n onEnd,\r\n );\r\n };\r\n}\r\n"]}
|
|
@@ -89,7 +89,8 @@ export var ComboBoxMenu = (_dec = locale('ComboBox', CustomComboBoxLocaleHelper)
|
|
|
89
89
|
|
|
90
90
|
if (loading && (!items || !items.length)) {
|
|
91
91
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
92
|
-
ref: refMenu
|
|
92
|
+
ref: refMenu,
|
|
93
|
+
"data-tid": "ComboBoxMenu__loading"
|
|
93
94
|
}, /*#__PURE__*/React.createElement(MenuItem, {
|
|
94
95
|
disabled: true
|
|
95
96
|
}, /*#__PURE__*/React.createElement(Spinner, {
|
|
@@ -101,7 +102,8 @@ export var ComboBoxMenu = (_dec = locale('ComboBox', CustomComboBoxLocaleHelper)
|
|
|
101
102
|
if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {
|
|
102
103
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
103
104
|
ref: refMenu,
|
|
104
|
-
maxHeight: maxMenuHeight
|
|
105
|
+
maxHeight: maxMenuHeight,
|
|
106
|
+
"data-tid": "ComboBoxMenu__failed"
|
|
105
107
|
}, /*#__PURE__*/React.createElement(MenuItem, {
|
|
106
108
|
disabled: true,
|
|
107
109
|
key: "message"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComboBoxMenu.tsx"],"names":["React","Component","locale","Menu","MenuItem","Spinner","MenuSeparator","ComboBoxRequestStatus","CustomComboBoxLocaleHelper","ComboBoxMenu","renderItem","item","index","props","onValueChange","isValidElement","element","Object","assign","key","onClick","cloneElement","state","render","opened","items","totalCount","loading","refMenu","renderNotFound","notFound","renderTotalCount","maxMenuHeight","requestStatus","errorNetworkButton","errorNetworkMessage","renderAddButton","length","Failed","maxWidth","whiteSpace","repeatRequest","notFoundValue","total","fontSize","map","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"uGAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;;AAEA,SAASC,MAAT,QAAuB,6BAAvB;AACA,SAASC,IAAT,QAAqB,SAArB;AACA,SAASC,QAAT,QAAwC,2BAAxC;AACA,SAASC,OAAT,QAAwB,0BAAxB;;AAEA,SAASC,aAAT,QAA8B,gCAA9B;;AAEA,SAASC,qBAAT,QAAsC,uBAAtC;AACA,SAAyBC,0BAAzB,QAA2D,UAA3D;;;;;;;;;;;;;;;;;;;;AAoBA,WAAaC,YAAb,WADCP,MAAM,CAAC,UAAD,EAAaM,0BAAb,CACP;;;;;;;;AAQmBN,IAAAA,MARnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFUQ,IAAAA,UAzFV,GAyFuB,UAACC,IAAD,EAAUC,KAAV,EAA6C;AAChE;AACA;AAFgE,wBAG1B,MAAKC,KAHqB,CAGxDH,UAHwD,eAGxDA,UAHwD,CAG5CI,aAH4C,eAG5CA,aAH4C;AAIhE,UAAI,OAAOH,IAAP,KAAgB,UAAhB,iBAA8BX,KAAK,CAACe,cAAN,CAAqBJ,IAArB,CAAlC,EAA8D;AAC5D;AACA,YAAMK,OAAO,GAAG,OAAOL,IAAP,KAAgB,UAAhB,GAA6BA,IAAI,EAAjC,GAAsCA,IAAtD;AACA,YAAME,KAAK,GAAGI,MAAM,CAACC,MAAP;AACZ;AACEC,UAAAA,GAAG,EAAEP,KADP;AAEEQ,UAAAA,OAAO,EAAE,2BAAMN,aAAa,CAACE,OAAO,CAACH,KAAT,CAAnB,EAFX,EADY;;AAKZG,QAAAA,OAAO,CAACH,KALI,CAAd;;AAOA,4BAAOb,KAAK,CAACqB,YAAN,CAAmBL,OAAnB,EAA4BH,KAA5B,CAAP;AACD;;AAED;AACE,4BAAC,QAAD,IAAU,YAAS,oBAAnB,EAAwC,OAAO,EAAE,2BAAMC,aAAa,CAACH,IAAD,CAAnB,EAAjD,EAA4E,GAAG,EAAEC,KAAjF;AACG,kBAAAU,KAAK,UAAIZ,UAAU,CAACC,IAAD,EAAOW,KAAP,CAAd,EADR,CADF;;;AAKD,KA/GH,0DAUSC,MAVT,GAUE,kBAAgB,oBAWV,KAAKV,KAXK,CAEZW,MAFY,gBAEZA,MAFY,CAGZC,KAHY,gBAGZA,KAHY,CAIZC,UAJY,gBAIZA,UAJY,CAKZC,OALY,gBAKZA,OALY,CAMZC,OANY,gBAMZA,OANY,sCAOZC,cAPY,CAOZA,cAPY,sCAOK,oBAAMC,QAAN,EAPL,yBAQZC,gBARY,gBAQZA,gBARY,CASZC,aATY,gBASZA,aATY,CAUZC,aAVY,gBAUZA,aAVY,oBAagD,KAAK/B,MAbrD,CAaN4B,QAbM,gBAaNA,QAbM,CAaII,kBAbJ,gBAaIA,kBAbJ,CAawBC,mBAbxB,gBAawBA,mBAbxB,CAed,IAAI,CAACX,MAAL,EAAa,CACX,OAAO,IAAP,CACD,CAED,IAAIY,eAAe,GAAG,IAAtB,CACA,IAAI,KAAKvB,KAAL,CAAWuB,eAAf,EAAgC,CAC9BA,eAAe,GAAG,KAAKvB,KAAL,CAAWuB,eAAX,EAAlB,CACD,CAED,IAAIT,OAAO,KAAK,CAACF,KAAD,IAAU,CAACA,KAAK,CAACY,MAAtB,CAAX,EAA0C,CACxC,oBACE,oBAAC,IAAD,IAAM,GAAG,EAAET,OAAX,iBACE,oBAAC,QAAD,IAAU,QAAQ,MAAlB,iBACE,oBAAC,OAAD,IAAS,IAAI,EAAC,MAAd,EAAqB,MAAM,MAA3B,GADF,CADF,CADF,CAOD,CAED,IAAIH,KAAK,KAAK,IAAV,IAAkBQ,aAAa,KAAK1B,qBAAqB,CAAC+B,MAA9D,EAAsE,CACpE,oBACE,oBAAC,IAAD,IAAM,GAAG,EAAEV,OAAX,EAAoB,SAAS,EAAEI,aAA/B,iBACE,oBAAC,QAAD,IAAU,QAAQ,MAAlB,EAAmB,GAAG,EAAC,SAAvB,iBACE,6BAAK,KAAK,EAAE,EAAEO,QAAQ,EAAE,GAAZ,EAAiBC,UAAU,EAAE,QAA7B,EAAZ,IAAsDL,mBAAtD,CADF,CADF,eAIE,oBAAC,QAAD,IAAU,IAAI,MAAd,EAAe,OAAO,EAAE,KAAKtB,KAAL,CAAW4B,aAAnC,EAAkD,GAAG,EAAC,OAAtD,IACGP,kBADH,CAJF,CADF,CAUD,CAED,IAAI,CAACT,KAAK,IAAI,IAAT,IAAiBA,KAAK,CAACY,MAAN,KAAiB,CAAnC,KAAyCR,cAA7C,EAA6D,CAC3D,IAAMa,aAAa,GAAGb,cAAc,EAApC,CACA,IAAIO,eAAJ,EAAqB,oBAAO,oBAAC,IAAD,IAAM,GAAG,EAAER,OAAX,IAAqBQ,eAArB,CAAP,CACrB,IAAIM,aAAJ,EACE,oBACE,oBAAC,IAAD,IAAM,GAAG,EAAEd,OAAX,iBACE,oBAAC,QAAD,IAAU,YAAS,wBAAnB,EAA4C,QAAQ,MAApD,IACGc,aADH,CADF,CADF,CAOF,OAAO,IAAP,CACD,CAED,IAAIC,KAAK,GAAG,IAAZ,CACA,IAAIlB,KAAK,IAAIM,gBAAT,IAA6BL,UAA7B,IAA2CD,KAAK,CAACY,MAAN,GAAeX,UAA9D,EAA0E,CACxEiB,KAAK,gBACH,oBAAC,QAAD,IAAU,QAAQ,MAAlB,EAAmB,GAAG,EAAC,OAAvB,iBACE,6BAAK,KAAK,EAAE,EAAEC,QAAQ,EAAE,EAAZ,EAAZ,IAA+Bb,gBAAgB,CAACN,KAAK,CAACY,MAAP,EAAeX,UAAf,CAA/C,CADF,CADF,CAKD,CAED,oBACE,oBAAC,IAAD,IAAM,YAAS,qBAAf,EAAqC,GAAG,EAAEE,OAA1C,EAAmD,SAAS,EAAEI,aAA9D,IACGP,KAAK,IAAIA,KAAK,CAACoB,GAAN,CAAU,KAAKnC,UAAf,CADZ,EAEGiC,KAFH,EAGGP,eAAe,IAAI,cAAC,oBAAC,aAAD,IAAe,GAAG,EAAC,WAAnB,GAAD,EAAoCA,eAApC,CAHtB,CADF,CAOD,CAvFH,uBAAqCnC,SAArC,WACgB6C,mBADhB,GACsC,cADtC,UAGgBC,YAHhB,GAG+B,EAC3BN,aAAa,EAAE,iCAAMO,SAAN,EADY,EAE3Bf,aAAa,EAAE1B,qBAAqB,CAAC0C,OAFV,EAH/B","sourcesContent":["import React, { Component } from 'react';\r\n\r\nimport { locale } from '../../lib/locale/decorators';\r\nimport { Menu } from '../Menu';\r\nimport { MenuItem, MenuItemState } from '../../components/MenuItem';\r\nimport { Spinner } from '../../components/Spinner';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { MenuSeparator } from '../../components/MenuSeparator';\r\n\r\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\r\nimport { ComboBoxLocale, CustomComboBoxLocaleHelper } from './locale';\r\n\r\nexport interface ComboBoxMenuProps<T> {\r\n opened?: boolean;\r\n items?: Nullable<T[]>;\r\n totalCount?: number;\r\n loading?: boolean;\r\n maxMenuHeight?: number | string;\r\n refMenu?: (menu: Nullable<Menu>) => void;\r\n renderNotFound?: () => React.ReactNode;\r\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\r\n renderItem: (item: T, state: MenuItemState) => React.ReactNode;\r\n onValueChange: (value: T) => any;\r\n renderAddButton?: () => React.ReactNode;\r\n caption?: React.ReactNode;\r\n repeatRequest?: () => void;\r\n requestStatus?: ComboBoxRequestStatus;\r\n}\r\n\r\n@locale('ComboBox', CustomComboBoxLocaleHelper)\r\nexport class ComboBoxMenu<T> extends Component<ComboBoxMenuProps<T>> {\r\n public static __KONTUR_REACT_UI__ = 'ComboBoxMenu';\r\n\r\n public static defaultProps = {\r\n repeatRequest: () => undefined,\r\n requestStatus: ComboBoxRequestStatus.Unknown,\r\n };\r\n\r\n private readonly locale!: ComboBoxLocale;\r\n\r\n public render() {\r\n const {\r\n opened,\r\n items,\r\n totalCount,\r\n loading,\r\n refMenu,\r\n renderNotFound = () => notFound,\r\n renderTotalCount,\r\n maxMenuHeight,\r\n requestStatus,\r\n } = this.props;\r\n\r\n const { notFound, errorNetworkButton, errorNetworkMessage } = this.locale;\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n let renderAddButton = null;\r\n if (this.props.renderAddButton) {\r\n renderAddButton = this.props.renderAddButton();\r\n }\r\n\r\n if (loading && (!items || !items.length)) {\r\n return (\r\n <Menu ref={refMenu}>\r\n <MenuItem disabled>\r\n <Spinner type=\"mini\" dimmed />\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {\r\n return (\r\n <Menu ref={refMenu} maxHeight={maxMenuHeight}>\r\n <MenuItem disabled key=\"message\">\r\n <div style={{ maxWidth: 300, whiteSpace: 'normal' }}>{errorNetworkMessage}</div>\r\n </MenuItem>\r\n <MenuItem link onClick={this.props.repeatRequest} key=\"retry\">\r\n {errorNetworkButton}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if ((items == null || items.length === 0) && renderNotFound) {\r\n const notFoundValue = renderNotFound();\r\n if (renderAddButton) return <Menu ref={refMenu}>{renderAddButton}</Menu>;\r\n if (notFoundValue)\r\n return (\r\n <Menu ref={refMenu}>\r\n <MenuItem data-tid=\"ComboBoxMenu__notFound\" disabled>\r\n {notFoundValue}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n return null;\r\n }\r\n\r\n let total = null;\r\n if (items && renderTotalCount && totalCount && items.length < totalCount) {\r\n total = (\r\n <MenuItem disabled key=\"total\">\r\n <div style={{ fontSize: 12 }}>{renderTotalCount(items.length, totalCount)}</div>\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return (\r\n <Menu data-tid=\"ComboBoxMenu__items\" ref={refMenu} maxHeight={maxMenuHeight}>\r\n {items && items.map(this.renderItem)}\r\n {total}\r\n {renderAddButton && [<MenuSeparator key=\"separator\" />, renderAddButton]}\r\n </Menu>\r\n );\r\n }\r\n\r\n private renderItem = (item: T, index: number): React.ReactNode => {\r\n // NOTE this is undesireable feature, better\r\n // to remove it from further versions\r\n const { renderItem, onValueChange } = this.props;\r\n if (typeof item === 'function' || React.isValidElement(item)) {\r\n // @ts-ignore\r\n const element = typeof item === 'function' ? item() : item;\r\n const props = Object.assign(\r\n {\r\n key: index,\r\n onClick: () => onValueChange(element.props),\r\n },\r\n element.props,\r\n );\r\n return React.cloneElement(element, props);\r\n }\r\n\r\n return (\r\n <MenuItem data-tid=\"ComboBoxMenu__item\" onClick={() => onValueChange(item)} key={index}>\r\n {state => renderItem(item, state)}\r\n </MenuItem>\r\n );\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["ComboBoxMenu.tsx"],"names":["React","Component","locale","Menu","MenuItem","Spinner","MenuSeparator","ComboBoxRequestStatus","CustomComboBoxLocaleHelper","ComboBoxMenu","renderItem","item","index","props","onValueChange","isValidElement","element","Object","assign","key","onClick","cloneElement","state","render","opened","items","totalCount","loading","refMenu","renderNotFound","notFound","renderTotalCount","maxMenuHeight","requestStatus","errorNetworkButton","errorNetworkMessage","renderAddButton","length","Failed","maxWidth","whiteSpace","repeatRequest","notFoundValue","total","fontSize","map","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\r\n\r\nimport { locale } from '../../lib/locale/decorators';\r\nimport { Menu } from '../Menu';\r\nimport { MenuItem, MenuItemState } from '../../components/MenuItem';\r\nimport { Spinner } from '../../components/Spinner';\r\nimport { Nullable } from '../../typings/utility-types';\r\nimport { MenuSeparator } from '../../components/MenuSeparator';\r\n\r\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\r\nimport { ComboBoxLocale, CustomComboBoxLocaleHelper } from './locale';\r\n\r\nexport interface ComboBoxMenuProps<T> {\r\n opened?: boolean;\r\n items?: Nullable<T[]>;\r\n totalCount?: number;\r\n loading?: boolean;\r\n maxMenuHeight?: number | string;\r\n refMenu?: (menu: Nullable<Menu>) => void;\r\n renderNotFound?: () => React.ReactNode;\r\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\r\n renderItem: (item: T, state: MenuItemState) => React.ReactNode;\r\n onValueChange: (value: T) => any;\r\n renderAddButton?: () => React.ReactNode;\r\n caption?: React.ReactNode;\r\n repeatRequest?: () => void;\r\n requestStatus?: ComboBoxRequestStatus;\r\n}\r\n\r\n@locale('ComboBox', CustomComboBoxLocaleHelper)\r\nexport class ComboBoxMenu<T> extends Component<ComboBoxMenuProps<T>> {\r\n public static __KONTUR_REACT_UI__ = 'ComboBoxMenu';\r\n\r\n public static defaultProps = {\r\n repeatRequest: () => undefined,\r\n requestStatus: ComboBoxRequestStatus.Unknown,\r\n };\r\n\r\n private readonly locale!: ComboBoxLocale;\r\n\r\n public render() {\r\n const {\r\n opened,\r\n items,\r\n totalCount,\r\n loading,\r\n refMenu,\r\n renderNotFound = () => notFound,\r\n renderTotalCount,\r\n maxMenuHeight,\r\n requestStatus,\r\n } = this.props;\r\n\r\n const { notFound, errorNetworkButton, errorNetworkMessage } = this.locale;\r\n\r\n if (!opened) {\r\n return null;\r\n }\r\n\r\n let renderAddButton = null;\r\n if (this.props.renderAddButton) {\r\n renderAddButton = this.props.renderAddButton();\r\n }\r\n\r\n if (loading && (!items || !items.length)) {\r\n return (\r\n <Menu ref={refMenu} data-tid=\"ComboBoxMenu__loading\">\r\n <MenuItem disabled>\r\n <Spinner type=\"mini\" dimmed />\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if (items === null && requestStatus === ComboBoxRequestStatus.Failed) {\r\n return (\r\n <Menu ref={refMenu} maxHeight={maxMenuHeight} data-tid=\"ComboBoxMenu__failed\">\r\n <MenuItem disabled key=\"message\">\r\n <div style={{ maxWidth: 300, whiteSpace: 'normal' }}>{errorNetworkMessage}</div>\r\n </MenuItem>\r\n <MenuItem link onClick={this.props.repeatRequest} key=\"retry\">\r\n {errorNetworkButton}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n }\r\n\r\n if ((items == null || items.length === 0) && renderNotFound) {\r\n const notFoundValue = renderNotFound();\r\n if (renderAddButton) return <Menu ref={refMenu}>{renderAddButton}</Menu>;\r\n if (notFoundValue)\r\n return (\r\n <Menu ref={refMenu}>\r\n <MenuItem data-tid=\"ComboBoxMenu__notFound\" disabled>\r\n {notFoundValue}\r\n </MenuItem>\r\n </Menu>\r\n );\r\n return null;\r\n }\r\n\r\n let total = null;\r\n if (items && renderTotalCount && totalCount && items.length < totalCount) {\r\n total = (\r\n <MenuItem disabled key=\"total\">\r\n <div style={{ fontSize: 12 }}>{renderTotalCount(items.length, totalCount)}</div>\r\n </MenuItem>\r\n );\r\n }\r\n\r\n return (\r\n <Menu data-tid=\"ComboBoxMenu__items\" ref={refMenu} maxHeight={maxMenuHeight}>\r\n {items && items.map(this.renderItem)}\r\n {total}\r\n {renderAddButton && [<MenuSeparator key=\"separator\" />, renderAddButton]}\r\n </Menu>\r\n );\r\n }\r\n\r\n private renderItem = (item: T, index: number): React.ReactNode => {\r\n // NOTE this is undesireable feature, better\r\n // to remove it from further versions\r\n const { renderItem, onValueChange } = this.props;\r\n if (typeof item === 'function' || React.isValidElement(item)) {\r\n // @ts-ignore\r\n const element = typeof item === 'function' ? item() : item;\r\n const props = Object.assign(\r\n {\r\n key: index,\r\n onClick: () => onValueChange(element.props),\r\n },\r\n element.props,\r\n );\r\n return React.cloneElement(element, props);\r\n }\r\n\r\n return (\r\n <MenuItem data-tid=\"ComboBoxMenu__item\" onClick={() => onValueChange(item)} key={index}>\r\n {state => renderItem(item, state)}\r\n </MenuItem>\r\n );\r\n };\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skbkontur/react-ui",
|
|
3
|
-
"version": "2.17.
|
|
3
|
+
"version": "2.17.6",
|
|
4
4
|
"description": "UI Components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "index.js",
|
|
7
7
|
"sideEffects": false,
|
|
8
|
-
"homepage": "https://tech.skbkontur.ru/react-ui/2.17.
|
|
8
|
+
"homepage": "https://tech.skbkontur.ru/react-ui/2.17.6/",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "git@github.com:skbkontur/retail-ui.git"
|