@skbkontur/react-ui 3.11.0 → 3.12.2
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 +41 -0
- package/cjs/components/DatePicker/DatePicker.d.ts +0 -3
- package/cjs/components/DatePicker/DatePicker.js +14 -9
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Select/Select.js +4 -1
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +4 -1
- package/cjs/components/SidePage/SidePage.js +18 -9
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePageContext.d.ts +2 -0
- package/cjs/components/SidePage/SidePageContext.js +3 -0
- package/cjs/components/SidePage/SidePageContext.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.d.ts +3 -0
- package/cjs/components/SidePage/SidePageHeader.js +26 -8
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/Sticky/Sticky.d.ts +6 -1
- package/cjs/components/Sticky/Sticky.js +5 -0
- package/cjs/components/Sticky/Sticky.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +2 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js +25 -10
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.styles.d.ts +3 -0
- package/cjs/internal/DropdownContainer/DropdownContainer.styles.js +9 -0
- package/cjs/internal/DropdownContainer/DropdownContainer.styles.js.map +1 -0
- package/cjs/internal/Menu/Menu.d.ts +2 -0
- package/cjs/internal/Menu/Menu.js +33 -3
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Menu/Menu.styles.d.ts +3 -0
- package/cjs/internal/Menu/Menu.styles.js +23 -3
- package/cjs/internal/Menu/Menu.styles.js.map +1 -1
- package/cjs/internal/Popup/Popup.js +3 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/components/DatePicker/DatePicker/DatePicker.js +19 -15
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +0 -3
- package/components/Select/Select/Select.js +5 -2
- package/components/Select/Select/Select.js.map +1 -1
- package/components/SidePage/SidePage/SidePage.js +20 -13
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +4 -1
- package/components/SidePage/SidePageContext/SidePageContext.js +3 -0
- package/components/SidePage/SidePageContext/SidePageContext.js.map +1 -1
- package/components/SidePage/SidePageContext.d.ts +2 -0
- package/components/SidePage/SidePageHeader/SidePageHeader.js +21 -2
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/SidePage/SidePageHeader.d.ts +3 -0
- package/components/Sticky/Sticky/Sticky.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +6 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +27 -23
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +2 -1
- package/internal/DropdownContainer/DropdownContainer.styles/DropdownContainer.styles.js +10 -0
- package/internal/DropdownContainer/DropdownContainer.styles/DropdownContainer.styles.js.map +1 -0
- package/internal/DropdownContainer/DropdownContainer.styles/package.json +6 -0
- package/internal/DropdownContainer/DropdownContainer.styles.d.ts +3 -0
- package/internal/Menu/Menu/Menu.js +30 -6
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Menu/Menu.d.ts +2 -0
- package/internal/Menu/Menu.styles/Menu.styles.js +12 -3
- package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
- package/internal/Menu/Menu.styles.d.ts +3 -0
- package/internal/Popup/Popup/Popup.js +2 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/package.json +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","state","opened","canUseMobileNativeDatePicker","input","focused","internalDate","parseValueToDate","props","value","minDate","maxDate","setRootNode","renderMain","picker","date","toNativeFormat","getParent","menuAlign","undefined","handlePick","handleSelect","enableTodayLink","isHoliday","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private internalDate?: InternalDate = this.parseValueToDate(this.props.value);\n private minDate?: InternalDate = this.parseValueToDate(this.props.minDate);\n private maxDate?: InternalDate = this.parseValueToDate(this.props.maxDate);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled, value, minDate, maxDate } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n this.internalDate = this.parseValueToDate(value);\n this.minDate = this.parseValueToDate(minDate);\n this.maxDate = this.parseValueToDate(maxDate);\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n const date = this.internalDate ? this.internalDate.toNativeFormat() : null;\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={(this.minDate && this.minDate.toNativeFormat()) || undefined}\n maxDate={(this.maxDate && this.maxDate.toNativeFormat()) || undefined}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","state","opened","canUseMobileNativeDatePicker","input","focused","setRootNode","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n\n const { value, minDate, maxDate } = this.props;\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
@@ -100,9 +100,6 @@ export declare class DatePicker extends React.PureComponent<DatePickerProps<Date
|
|
|
100
100
|
state: DatePickerState;
|
|
101
101
|
private input;
|
|
102
102
|
private focused;
|
|
103
|
-
private internalDate?;
|
|
104
|
-
private minDate?;
|
|
105
|
-
private maxDate?;
|
|
106
103
|
private setRootNode;
|
|
107
104
|
componentDidMount(): void;
|
|
108
105
|
componentDidUpdate(): void;
|
|
@@ -389,16 +389,19 @@ export var Select = (_dec = locale('Select', SelectLocaleHelper), rootNode(_clas
|
|
|
389
389
|
width: "100%"
|
|
390
390
|
})) : null;
|
|
391
391
|
var value = this.getValue();
|
|
392
|
+
var hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';
|
|
392
393
|
return /*#__PURE__*/React.createElement(DropdownContainer, {
|
|
393
394
|
getParent: this.dropdownContainerGetParent,
|
|
394
395
|
offsetY: -1,
|
|
395
396
|
align: this.props.menuAlign,
|
|
396
|
-
disablePortal: this.props.disablePortal
|
|
397
|
+
disablePortal: this.props.disablePortal,
|
|
398
|
+
hasFixedWidth: hasFixedWidth
|
|
397
399
|
}, /*#__PURE__*/React.createElement(Menu, {
|
|
398
400
|
ref: this.refMenu,
|
|
399
401
|
width: this.props.menuWidth,
|
|
400
402
|
onItemClick: this.close,
|
|
401
|
-
maxHeight: this.props.maxMenuHeight
|
|
403
|
+
maxHeight: this.props.maxMenuHeight,
|
|
404
|
+
align: this.props.menuAlign
|
|
402
405
|
}, search, this.mapItems(function (iValue, item, i, comment) {
|
|
403
406
|
if (isFunction(item)) {
|
|
404
407
|
var element = item();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","setRootNode","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","getRootNode","rootNode","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","setRootNode","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","hasFixedWidth","menuWidth","menuAlign","disablePortal","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -50,18 +50,20 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
|
|
|
50
50
|
};
|
|
51
51
|
_this.theme = void 0;
|
|
52
52
|
_this.stackSubscription = null;
|
|
53
|
-
_this.
|
|
53
|
+
_this.layout = null;
|
|
54
|
+
_this.header = null;
|
|
54
55
|
_this.footer = null;
|
|
55
56
|
_this.rootRef = /*#__PURE__*/React.createRef();
|
|
56
57
|
|
|
57
58
|
_this.updateLayout = function () {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
var _this$header, _this$footer;
|
|
60
|
+
|
|
61
|
+
(_this$header = _this.header) == null ? void 0 : _this$header.update();
|
|
62
|
+
(_this$footer = _this.footer) == null ? void 0 : _this$footer.update();
|
|
61
63
|
};
|
|
62
64
|
|
|
63
65
|
_this.disablePageScroll = function (e) {
|
|
64
|
-
var layout = _this.
|
|
66
|
+
var layout = _this.layout;
|
|
65
67
|
if (!layout) return;
|
|
66
68
|
var reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;
|
|
67
69
|
var reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;
|
|
@@ -79,6 +81,7 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
|
|
|
79
81
|
requestClose: _this.requestClose,
|
|
80
82
|
getWidth: _this.getWidth,
|
|
81
83
|
updateLayout: _this.updateLayout,
|
|
84
|
+
headerRef: _this.headerRef,
|
|
82
85
|
footerRef: _this.footerRef,
|
|
83
86
|
setHasHeader: _this.setHasHeader,
|
|
84
87
|
setHasFooter: _this.setHasFooter,
|
|
@@ -87,11 +90,11 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
|
|
|
87
90
|
};
|
|
88
91
|
|
|
89
92
|
_this.getWidth = function () {
|
|
90
|
-
if (!_this.
|
|
93
|
+
if (!_this.layout) {
|
|
91
94
|
return 'auto';
|
|
92
95
|
}
|
|
93
96
|
|
|
94
|
-
return _this.
|
|
97
|
+
return _this.layout.clientWidth;
|
|
95
98
|
};
|
|
96
99
|
|
|
97
100
|
_this.handleStackChange = function (stack) {
|
|
@@ -144,10 +147,18 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
|
|
|
144
147
|
}
|
|
145
148
|
};
|
|
146
149
|
|
|
150
|
+
_this.headerRef = function (ref) {
|
|
151
|
+
_this.header = ref;
|
|
152
|
+
};
|
|
153
|
+
|
|
147
154
|
_this.footerRef = function (ref) {
|
|
148
155
|
_this.footer = ref;
|
|
149
156
|
};
|
|
150
157
|
|
|
158
|
+
_this.layoutRef = function (ref) {
|
|
159
|
+
_this.layout = ref;
|
|
160
|
+
};
|
|
161
|
+
|
|
151
162
|
_this.setHasHeader = function (hasHeader) {
|
|
152
163
|
if (hasHeader === void 0) {
|
|
153
164
|
hasHeader = true;
|
|
@@ -239,9 +250,7 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
|
|
|
239
250
|
};
|
|
240
251
|
|
|
241
252
|
_proto.renderContainer = function renderContainer() {
|
|
242
|
-
var _cx,
|
|
243
|
-
_cx2,
|
|
244
|
-
_this3 = this;
|
|
253
|
+
var _cx, _cx2;
|
|
245
254
|
|
|
246
255
|
var _this$props2 = this.props,
|
|
247
256
|
width = _this$props2.width,
|
|
@@ -271,9 +280,7 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
|
|
|
271
280
|
}, /*#__PURE__*/React.createElement("div", {
|
|
272
281
|
"data-tid": "SidePage__container",
|
|
273
282
|
className: cx(styles.wrapper(this.theme), (_cx2 = {}, _cx2[styles.wrapperLeft()] = fromLeft, _cx2[styles.wrapperMarginLeft()] = this.state.hasMargin && fromLeft, _cx2[styles.wrapperMarginRight()] = this.state.hasMargin && !fromLeft, _cx2[styles.shadow(this.theme)] = this.state.hasShadow, _cx2)),
|
|
274
|
-
ref:
|
|
275
|
-
return _this3.layoutRef = _;
|
|
276
|
-
}
|
|
283
|
+
ref: this.layoutRef
|
|
277
284
|
}, /*#__PURE__*/React.createElement(SidePageContext.Provider, {
|
|
278
285
|
value: this.getSidePageContextProps()
|
|
279
286
|
}, this.props.children)))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","isTestEnv","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layoutRef","footer","rootRef","createRef","updateLayout","update","disablePageScroll","e","layout","reachedTop","scrollTop","deltaY","reachedBottom","scrollHeight","offsetHeight","props","blockBackground","preventDefault","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","setState","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","current","passive","add","componentWillUnmount","removeEventListener","remove","render","renderMain","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n private rootRef = React.createRef<HTMLDivElement>();\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.addEventListener('wheel', this.disablePageScroll, { passive: false });\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.removeEventListener('wheel', this.disablePageScroll);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n nodeRef={this.rootRef}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n wrapperRef={this.rootRef}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private disablePageScroll = (e: WheelEvent) => {\n const layout = this.layoutRef;\n if (!layout) return;\n const reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;\n const reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;\n\n if (!this.props.blockBackground && (reachedTop || reachedBottom)) {\n e.preventDefault();\n }\n };\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","isTestEnv","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layout","header","footer","rootRef","createRef","updateLayout","update","disablePageScroll","e","reachedTop","scrollTop","deltaY","reachedBottom","scrollHeight","offsetHeight","props","blockBackground","preventDefault","getSidePageContextProps","requestClose","getWidth","headerRef","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","setState","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","layoutRef","componentDidMount","window","addEventListener","current","passive","add","componentWillUnmount","removeEventListener","remove","render","renderMain","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layout: HTMLElement | null = null;\n private header: SidePageHeader | null = null;\n private footer: SidePageFooter | null = null;\n private rootRef = React.createRef<HTMLDivElement>();\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.addEventListener('wheel', this.disablePageScroll, { passive: false });\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.removeEventListener('wheel', this.disablePageScroll);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n this.header?.update();\n this.footer?.update();\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n nodeRef={this.rootRef}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n wrapperRef={this.rootRef}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={this.layoutRef}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private disablePageScroll = (e: WheelEvent) => {\n const layout = this.layout;\n if (!layout) return;\n const reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;\n const reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;\n\n if (!this.props.blockBackground && (reachedTop || reachedBottom)) {\n e.preventDefault();\n }\n };\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n headerRef: this.headerRef,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layout) {\n return 'auto';\n }\n return this.layout.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private headerRef = (ref: SidePageHeader | null) => {\n this.header = ref;\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private layoutRef = (ref: HTMLDivElement | null) => {\n this.layout = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
@@ -72,7 +72,8 @@ export declare class SidePage extends React.Component<SidePageProps, SidePageSta
|
|
|
72
72
|
state: SidePageState;
|
|
73
73
|
private theme;
|
|
74
74
|
private stackSubscription;
|
|
75
|
-
private
|
|
75
|
+
private layout;
|
|
76
|
+
private header;
|
|
76
77
|
private footer;
|
|
77
78
|
private rootRef;
|
|
78
79
|
componentDidMount(): void;
|
|
@@ -99,7 +100,9 @@ export declare class SidePage extends React.Component<SidePageProps, SidePageSta
|
|
|
99
100
|
private handleClickOutside;
|
|
100
101
|
private handleKeyDown;
|
|
101
102
|
private requestClose;
|
|
103
|
+
private headerRef;
|
|
102
104
|
private footerRef;
|
|
105
|
+
private layoutRef;
|
|
103
106
|
private setHasHeader;
|
|
104
107
|
private setHasFooter;
|
|
105
108
|
private setHasPanel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SidePageContext.ts"],"names":["React","SidePageContext","createContext","requestClose","undefined","getWidth","updateLayout","footerRef","displayName"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB
|
|
1
|
+
{"version":3,"sources":["SidePageContext.ts"],"names":["React","SidePageContext","createContext","requestClose","undefined","getWidth","updateLayout","headerRef","footerRef","displayName"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;;;;;;;;;;;;;;;;;;;AAmBA,OAAO,IAAMC,eAAe,gBAAGD,KAAK,CAACE,aAAN,CAAyC;AACtEC,EAAAA,YAAY,EAAE,gCAAMC,SAAN,EADwD;AAEtEC,EAAAA,QAAQ,EAAE,4BAAM,MAAN,EAF4D;AAGtEC,EAAAA,YAAY,EAAE,gCAAMF,SAAN,EAHwD;AAItEG,EAAAA,SAAS,EAAE,6BAAMH,SAAN,EAJ2D;AAKtEI,EAAAA,SAAS,EAAE,6BAAMJ,SAAN,EAL2D,EAAzC,CAAxB;;;AAQPH,eAAe,CAACQ,WAAhB,GAA8B,iBAA9B","sourcesContent":["import React from 'react';\n\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\n\nexport interface SidePageContextType {\n requestClose: () => void;\n getWidth: () => number | string;\n updateLayout: () => void;\n headerRef: (ref: SidePageHeader | null) => void;\n footerRef: (ref: SidePageFooter | null) => void;\n hasHeader?: boolean;\n hasFooter?: boolean;\n hasPanel?: boolean;\n setHasHeader?: (value?: boolean) => void;\n setHasFooter?: (value?: boolean) => void;\n setHasPanel?: (value?: boolean) => void;\n}\n\nexport const SidePageContext = React.createContext<SidePageContextType>({\n requestClose: () => undefined,\n getWidth: () => 'auto',\n updateLayout: () => undefined,\n headerRef: () => undefined,\n footerRef: () => undefined,\n});\n\nSidePageContext.displayName = 'SidePageContext';\n"]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { SidePageFooter } from './SidePageFooter';
|
|
3
|
+
import { SidePageHeader } from './SidePageHeader';
|
|
3
4
|
export interface SidePageContextType {
|
|
4
5
|
requestClose: () => void;
|
|
5
6
|
getWidth: () => number | string;
|
|
6
7
|
updateLayout: () => void;
|
|
8
|
+
headerRef: (ref: SidePageHeader | null) => void;
|
|
7
9
|
footerRef: (ref: SidePageFooter | null) => void;
|
|
8
10
|
hasHeader?: boolean;
|
|
9
11
|
hasFooter?: boolean;
|