react-ui-basics 0.0.133 → 0.0.137
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/AutocompleteSelect.js +1 -0
- package/AutocompleteSelect.js.map +1 -1
- package/Scrollable.js +0 -3
- package/Scrollable.js.map +1 -1
- package/ScrollableTable.js +8 -1
- package/ScrollableTable.js.map +1 -1
- package/Table.js +20 -14
- package/Table.js.map +1 -1
- package/bundle.css +430 -430
- package/package.json +1 -1
package/AutocompleteSelect.js
CHANGED
|
@@ -151,6 +151,7 @@ var AutocompleteSelect = function (_React$Component) {
|
|
|
151
151
|
_this.setState({
|
|
152
152
|
filterValue: value
|
|
153
153
|
});
|
|
154
|
+
_this.props.onFilterInputChange == null ? void 0 : _this.props.onFilterInputChange(value);
|
|
154
155
|
};
|
|
155
156
|
var that = _assertThisInitialized(_this);
|
|
156
157
|
that.state = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteSelect.js","sources":["../src/react-ui-basics/AutocompleteSelect.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './AutocompleteSelect.css'\nimport TextField from \"./TextField\";\nimport FilteredList, {getLabel} from \"./FilteredList\";\nimport {\n classNames,\n continuousIncludes,\n getRandomId,\n ref,\n orNoop,\n preventDefault,\n stopPropagation,\n DOCUMENT,\n addEventListener,\n removeEventListener,\n isObject,\n isFunction,\n isString, UNDEFINED\n} from \"./Tools\";\nimport Button from \"./Button\";\nimport MaterialIcon from \"./MaterialIcon\";\n\nexport const MODE_DEFAULT = 'default';\nexport const MODE_INLINE = 'inline';\nexport const MODE_INLINE_MULTIPLE = 'inline-multiple';\nexport const MODE_MULTIPLE_AUTO = 'multiple-auto';\nexport const MODE_MULTIPLE = 'multiple';\nexport const MODE_MULTIPLE_MINI = 'multiple-mini';\nexport const MODE_MINI = 'mini';\nexport const MODE_MULTIPLE_MINI_INLINE = 'multiple-mini-inline';\n\n\nconst DummyChild = ({id, label, dataConsumer, onClick}) => {\n orNoop(dataConsumer)(label || id);\n return <div className={`DummyChild`} onClick={onClick}>{label || id}</div>\n};\n\nconst prepareSelected = (value) => {\n let result;\n if (value != null) {\n if (Array.isArray(value))\n result = value.reduce((map, obj) => {\n map[obj] = obj;\n return map;\n }, {});\n else if (isObject(value))\n result = value;\n else if (value)\n result = {[value]: value};\n else\n result = {}\n } else {\n result = {};\n }\n return result;\n};\n\nconst findParent = (el, tag) => {\n if (el != null) {\n const tagName = el.tagName;\n if (tagName && tagName.toUpperCase() === tag.toUpperCase()) {\n return el;\n } else {\n return findParent(el.parentNode, tag)\n }\n }\n return null;\n}\n\nfunction isMultipleSelect(mode) {\n return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;\n}\n\nclass AutocompleteSelect extends React.Component {\n\n static propTypes = {\n mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])\n };\n\n constructor(props) {\n super(props);\n const that = this;\n that.state = {\n selected: prepareSelected(props.value),\n isActive: !!props.focused,\n\n };\n that.randomId = getRandomId('acs-');\n\n const {data, getSelected} = props;\n isFunction(data) && data(data => that.setState({data}));\n\n getSelected && getSelected(() => Object.values(that.state.selected));\n }\n\n componentDidMount() {\n addEventListener(DOCUMENT, 'mousedown', this.listener = (e) => {\n if (this.state.isActive && this.el && !this.el.contains(e.target)) {\n this.onClickOutside()\n }\n })\n if (this.props.required) {\n const form = findParent(this.el.parentNode, 'form')\n if (form) {\n addEventListener(this.submitButton = form.querySelector('button[type=submit]'), 'click', this.formSubmitListener = (e) => {\n const errored = Object.keys(this.state.selected).length === 0;\n this.setState({errored: errored})\n })\n }\n }\n this.initSelected(this.props, this.state)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.value !== prevProps.value)\n this.initSelected(this.props, this.state)\n }\n\n initSelected = ({value, mode, allowCustom}, {filterValue = ''}) => {\n this.setState({\n selected: prepareSelected(value),\n filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue,\n });\n };\n\n componentWillUnmount() {\n removeEventListener(DOCUMENT, 'mousedown', this.listener)\n removeEventListener(this.submitButton, 'click', this.formSubmitListener)\n }\n\n static defaultProps = {\n childComponent: DummyChild,\n withArrow: true,\n withFilter: true,\n withReset: false,\n scrollToValue: false,\n mode: MODE_DEFAULT,\n selectedMode: 'full',\n removeIcon: <MaterialIcon icon=\"close\"/>,\n };\n\n render() {\n const {\n childComponent,\n childProps,\n withArrow,\n withFilter,\n withReset,\n filter,\n label,\n inputLabel,\n mode,\n selectedMode,\n prefilter,\n className,\n scrollToValue,\n scroll,\n required,\n allowCustom,\n inlineSelected,\n removeIcon,\n } = this.props;\n const id = this.props.id || this.randomId;\n const selectedComponent = this.props.selectedComponent || childComponent;\n const {selected = {}, filterValue = '', errored} = this.state;\n let {isActive} = this.state;\n if (this.props.isActive !== UNDEFINED) {\n isActive = this.props.isActive\n }\n let {data = [], labels = {}} = this.props;\n if (this.state.data)\n data = this.state.data;\n\n if (!Array.isArray(data))\n data = [];\n\n const selectedIds = Object.values(selected);\n const hasSelected = selectedIds.length !== 0;\n const setActive = (e) => {\n stopPropagation(e);\n this.setState({isActive: true}, () => (scrollToValue && selectedIds.length > 0) && this.list.scrollTo(selectedIds[0]));\n };\n const toggle = (e) => {\n if (!this.state.isActive) {\n setActive(e);\n } else {\n stopPropagation(e);\n this.setState({isActive: false});\n }\n };\n\n const isInline = mode === MODE_INLINE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE;\n const filterValueTrimmed = filterValue.trim();\n const dataFiltered = allowCustom ? [filterValueTrimmed, ...data.filter(suggestion => suggestion !== filterValueTrimmed)] : data;\n\n const list = <FilteredList className={classNames(isActive && 'visible')}\n ref={ref('list', this)}\n filter={it => {\n if (!it) return false;\n if (prefilter && !prefilter(it)) return false;\n if (!filterValue) return true;\n\n const f = filterValueTrimmed.toLowerCase();\n if (filter) return filter(it, f);\n\n let value = (isString(it) ? it : (it.name || it.label || '')).toLowerCase().trim();\n return continuousIncludes(value, f);\n }}\n selectSingle={!allowCustom}\n scroll={scroll}\n inline={isInline}\n nextProvider={ref('next', this)}\n prevProvider={ref('prev', this)}\n selectedProvider={ref('getSelected', this)}\n resetProvider={ref('reset', this)}\n onSelect={this.onSelect}\n selected={selected}\n childComponent={childComponent}\n childProps={childProps}\n data={dataFiltered}\n labels={labels}\n />;\n\n return (\n <div id={id}\n className={classNames(\n 'AutocompleteSelect',\n mode,\n isMultipleSelect(mode) && 'multi',\n className,\n withFilter ? 'withFilter' : 'withoutFilter',\n isActive && 'active',\n errored && 'errored',\n inlineSelected && 'inlineSelected',\n hasSelected && 'hasSelected',\n )}\n ref={ref('el', this)}>\n {label && <label className={classNames(`label`, (hasSelected || filterValue) && 'active', hasSelected && 'hasSelected')}\n htmlFor={'f-' + id}\n onClick={() => {\n if (mode === MODE_MULTIPLE_MINI_INLINE || !isActive) {\n toggle();\n }\n }}\n >\n {label}\n {required && ' *'}\n {withArrow && <span className=\"arrow\"/>}\n </label>}\n\n {(!isActive || mode === MODE_MULTIPLE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE_AUTO || !withFilter) && !inlineSelected && hasSelected && (\n <div\n className={classNames('selected',\n !label && 'nolabel',\n (mode === MODE_MULTIPLE_MINI || mode === MODE_MINI || mode === MODE_MULTIPLE_MINI_INLINE) && 'clickable',\n selectedMode)}\n onClick={toggle}>\n\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n {!label && withArrow && <span className=\"arrow\"/>}\n {withReset && <Button className=\"reset\" raised={false} onClick={this.clean}>\n {removeIcon}\n </Button>}\n </div>\n )}\n\n {inlineSelected && hasSelected && <>\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n </>}\n\n {(isActive || (!hasSelected && mode !== MODE_MULTIPLE_MINI_INLINE) || mode === MODE_MULTIPLE || (mode === MODE_MULTIPLE_AUTO && selectedIds.length > 1) || mode === MODE_INLINE_MULTIPLE) && (\n <div className={`input`} data-value={filterValue}>\n {withFilter && <TextField autoComplete=\"new-password\" id={'f-' + id}\n ref={ref('input', this)}\n focused={isActive}\n value={filterValue}\n label={inputLabel}\n onChange={this.onChange}\n onFocus={e => this.setState({isActive: true})}\n check={this.props.filterCheck}\n onKeyDown={e => {\n const keyCode = e.keyCode;\n if (keyCode === 38/*up*/) {\n preventDefault(e);\n this.prev();\n } else if (keyCode === 40/*down*/) {\n preventDefault(e);\n this.next();\n } else if (keyCode === 13/*enter*/) {\n preventDefault(e);\n this.onSelect(this.getSelected())\n } else if (keyCode === 9/*tab*/) {\n this.onSelect(this.getSelected())\n } else if (keyCode === 8/*backspace*/) {\n if (!filterValue && (selectedIds.length !== 0) && isMultipleSelect(mode)) {\n this.remove(selectedIds[selectedIds.length - 1]);\n }\n this.reset()\n } else if (keyCode === 46/*delete*/) {\n this.reset()\n } else if (keyCode === 27/*esc*/) {\n this.setState({\n isActive: false,\n filterValue: isMultipleSelect(mode) ? '' : (allowCustom ? filterValue : ''),\n });\n this.input.getInput().blur()\n this.onCancel();\n }\n // console.log('key pressed:', e.keyCode)\n }}\n />}\n {!withFilter && inputLabel && <label>{inputLabel}</label>}\n </div>\n )}\n {list}\n </div>\n )\n }\n\n onClickOutside = () => {\n const {allowCustom, required} = this.props;\n const {filterValue} = this.state;\n if (allowCustom && (!!filterValue || !required)) {\n this.onSelect()\n }\n\n this.setState({isActive: false});\n\n this.onCancel();\n };\n\n onCancel = () => {\n orNoop(this.props.onCancel)()\n };\n\n onSelect = (selectedId) => {\n const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = this.props;\n const {filterValue, selected: currentSelection} = this.state;\n\n if (selectedId == null && (!!filterValue || !required) && allowCustom && (!this.input || !this.input.check()))\n selectedId = filterValue.trim();\n\n const isMultiSelect = isMultipleSelect(mode);\n\n if (!selectedId && isMultiSelect) {\n selectedId = null;\n }\n\n // debugger\n\n const isSelected = selectedId != null;\n\n let selected = {...currentSelection};\n if (selected[selectedId] && (defaultValue || isMultiSelect)) {\n delete selected[selectedId];\n if (defaultValue && Object.keys(selected).length === 0)\n selected[defaultValue] = defaultValue;\n } else if (isSelected && (isMultiSelect)) {\n selected[selectedId] = selectedId;\n } else if (isSelected) {\n selected = {[selectedId]: selectedId};\n }\n\n const errored = required && Object.keys(selected) === 0;\n\n const isActive = mode === MODE_MULTIPLE_MINI_INLINE || (isMultiSelect && isSelected)\n\n this.setState({\n isActive: isActive,\n selected: selected,\n filterValue: isMultiSelect ? '' : (allowCustom ? selectedId || '' : ''),\n errored,\n });\n\n if (isActive && this.input)\n this.input.getInput().focus()\n\n orNoop(onSelect)(selectedId);\n orNoop(onChange)(Object.values(selected));\n };\n\n clean = (e) => {\n preventDefault(e);\n stopPropagation(e);\n\n this.setState({\n isActive: false,\n selected: {},\n filterValue: '',\n });\n\n orNoop(this.props.onSelect)(null);\n orNoop(this.props.onChange)([]);\n\n this.initSelected(this.props, this.state);\n };\n\n remove = (id) => {\n let result = {\n ...this.state,\n selected: {...this.state.selected},\n filterValue: '',\n };\n delete result.selected[id];\n this.setState(result);\n orNoop(this.props.onChange)(Object.values(result.selected));\n };\n\n onChange = (event) => {\n const value = event.target.value;\n this.setState({filterValue: value});\n }\n}\n\nexport default AutocompleteSelect;\n"],"names":["MODE_DEFAULT","MODE_INLINE","MODE_INLINE_MULTIPLE","MODE_MULTIPLE_AUTO","MODE_MULTIPLE","MODE_MULTIPLE_MINI","MODE_MINI","MODE_MULTIPLE_MINI_INLINE","DummyChild","id","label","dataConsumer","onClick","orNoop","prepareSelected","value","result","Array","isArray","reduce","map","obj","isObject","findParent","el","tag","tagName","toUpperCase","parentNode","isMultipleSelect","mode","AutocompleteSelect","props","initSelected","allowCustom","filterValue","setState","selected","isString","onClickOutside","required","state","onSelect","isActive","onCancel","selectedId","onChange","defaultValue","currentSelection","input","check","trim","isMultiSelect","isSelected","Object","keys","length","errored","getInput","focus","values","clean","e","preventDefault","stopPropagation","remove","event","target","that","focused","randomId","getRandomId","data","getSelected","isFunction","addEventListener","DOCUMENT","listener","contains","form","submitButton","querySelector","formSubmitListener","prevProps","prevState","snapshot","removeEventListener","childComponent","childProps","withArrow","withFilter","withReset","filter","inputLabel","selectedMode","prefilter","className","scrollToValue","scroll","inlineSelected","removeIcon","selectedComponent","UNDEFINED","labels","selectedIds","hasSelected","setActive","list","scrollTo","toggle","isInline","filterValueTrimmed","dataFiltered","suggestion","classNames","ref","it","f","toLowerCase","name","continuousIncludes","React","createElement","getLabel","filterCheck","keyCode","prev","next","reset","blur","Component","propTypes","PropTypes","oneOf","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AutocompleteSelect.js","sources":["../src/react-ui-basics/AutocompleteSelect.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './AutocompleteSelect.css'\nimport TextField from \"./TextField\";\nimport FilteredList, {getLabel} from \"./FilteredList\";\nimport {\n classNames,\n continuousIncludes,\n getRandomId,\n ref,\n orNoop,\n preventDefault,\n stopPropagation,\n DOCUMENT,\n addEventListener,\n removeEventListener,\n isObject,\n isFunction,\n isString, UNDEFINED\n} from \"./Tools\";\nimport Button from \"./Button\";\nimport MaterialIcon from \"./MaterialIcon\";\n\nexport const MODE_DEFAULT = 'default';\nexport const MODE_INLINE = 'inline';\nexport const MODE_INLINE_MULTIPLE = 'inline-multiple';\nexport const MODE_MULTIPLE_AUTO = 'multiple-auto';\nexport const MODE_MULTIPLE = 'multiple';\nexport const MODE_MULTIPLE_MINI = 'multiple-mini';\nexport const MODE_MINI = 'mini';\nexport const MODE_MULTIPLE_MINI_INLINE = 'multiple-mini-inline';\n\n\nconst DummyChild = ({id, label, dataConsumer, onClick}) => {\n orNoop(dataConsumer)(label || id);\n return <div className={`DummyChild`} onClick={onClick}>{label || id}</div>\n};\n\nconst prepareSelected = (value) => {\n let result;\n if (value != null) {\n if (Array.isArray(value))\n result = value.reduce((map, obj) => {\n map[obj] = obj;\n return map;\n }, {});\n else if (isObject(value))\n result = value;\n else if (value)\n result = {[value]: value};\n else\n result = {}\n } else {\n result = {};\n }\n return result;\n};\n\nconst findParent = (el, tag) => {\n if (el != null) {\n const tagName = el.tagName;\n if (tagName && tagName.toUpperCase() === tag.toUpperCase()) {\n return el;\n } else {\n return findParent(el.parentNode, tag)\n }\n }\n return null;\n}\n\nfunction isMultipleSelect(mode) {\n return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;\n}\n\nclass AutocompleteSelect extends React.Component {\n\n static propTypes = {\n mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])\n };\n\n constructor(props) {\n super(props);\n const that = this;\n that.state = {\n selected: prepareSelected(props.value),\n isActive: !!props.focused,\n\n };\n that.randomId = getRandomId('acs-');\n\n const {data, getSelected} = props;\n isFunction(data) && data(data => that.setState({data}));\n\n getSelected && getSelected(() => Object.values(that.state.selected));\n }\n\n componentDidMount() {\n addEventListener(DOCUMENT, 'mousedown', this.listener = (e) => {\n if (this.state.isActive && this.el && !this.el.contains(e.target)) {\n this.onClickOutside()\n }\n })\n if (this.props.required) {\n const form = findParent(this.el.parentNode, 'form')\n if (form) {\n addEventListener(this.submitButton = form.querySelector('button[type=submit]'), 'click', this.formSubmitListener = (e) => {\n const errored = Object.keys(this.state.selected).length === 0;\n this.setState({errored: errored})\n })\n }\n }\n this.initSelected(this.props, this.state)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.value !== prevProps.value)\n this.initSelected(this.props, this.state)\n }\n\n initSelected = ({value, mode, allowCustom}, {filterValue = ''}) => {\n this.setState({\n selected: prepareSelected(value),\n filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue,\n });\n };\n\n componentWillUnmount() {\n removeEventListener(DOCUMENT, 'mousedown', this.listener)\n removeEventListener(this.submitButton, 'click', this.formSubmitListener)\n }\n\n static defaultProps = {\n childComponent: DummyChild,\n withArrow: true,\n withFilter: true,\n withReset: false,\n scrollToValue: false,\n mode: MODE_DEFAULT,\n selectedMode: 'full',\n removeIcon: <MaterialIcon icon=\"close\"/>,\n };\n\n render() {\n const {\n childComponent,\n childProps,\n withArrow,\n withFilter,\n withReset,\n filter,\n label,\n inputLabel,\n mode,\n selectedMode,\n prefilter,\n className,\n scrollToValue,\n scroll,\n required,\n allowCustom,\n inlineSelected,\n removeIcon,\n } = this.props;\n const id = this.props.id || this.randomId;\n const selectedComponent = this.props.selectedComponent || childComponent;\n const {selected = {}, filterValue = '', errored} = this.state;\n let {isActive} = this.state;\n if (this.props.isActive !== UNDEFINED) {\n isActive = this.props.isActive\n }\n let {data = [], labels = {}} = this.props;\n if (this.state.data)\n data = this.state.data;\n\n if (!Array.isArray(data))\n data = [];\n\n const selectedIds = Object.values(selected);\n const hasSelected = selectedIds.length !== 0;\n const setActive = (e) => {\n stopPropagation(e);\n this.setState({isActive: true}, () => (scrollToValue && selectedIds.length > 0) && this.list.scrollTo(selectedIds[0]));\n };\n const toggle = (e) => {\n if (!this.state.isActive) {\n setActive(e);\n } else {\n stopPropagation(e);\n this.setState({isActive: false});\n }\n };\n\n const isInline = mode === MODE_INLINE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE;\n const filterValueTrimmed = filterValue.trim();\n const dataFiltered = allowCustom ? [filterValueTrimmed, ...data.filter(suggestion => suggestion !== filterValueTrimmed)] : data;\n\n const list = <FilteredList className={classNames(isActive && 'visible')}\n ref={ref('list', this)}\n filter={it => {\n if (!it) return false;\n if (prefilter && !prefilter(it)) return false;\n if (!filterValue) return true;\n\n const f = filterValueTrimmed.toLowerCase();\n if (filter) return filter(it, f);\n\n let value = (isString(it) ? it : (it.name || it.label || '')).toLowerCase().trim();\n return continuousIncludes(value, f);\n }}\n selectSingle={!allowCustom}\n scroll={scroll}\n inline={isInline}\n nextProvider={ref('next', this)}\n prevProvider={ref('prev', this)}\n selectedProvider={ref('getSelected', this)}\n resetProvider={ref('reset', this)}\n onSelect={this.onSelect}\n selected={selected}\n childComponent={childComponent}\n childProps={childProps}\n data={dataFiltered}\n labels={labels}\n />;\n\n return (\n <div id={id}\n className={classNames(\n 'AutocompleteSelect',\n mode,\n isMultipleSelect(mode) && 'multi',\n className,\n withFilter ? 'withFilter' : 'withoutFilter',\n isActive && 'active',\n errored && 'errored',\n inlineSelected && 'inlineSelected',\n hasSelected && 'hasSelected',\n )}\n ref={ref('el', this)}>\n {label && <label className={classNames(`label`, (hasSelected || filterValue) && 'active', hasSelected && 'hasSelected')}\n htmlFor={'f-' + id}\n onClick={() => {\n if (mode === MODE_MULTIPLE_MINI_INLINE || !isActive) {\n toggle();\n }\n }}\n >\n {label}\n {required && ' *'}\n {withArrow && <span className=\"arrow\"/>}\n </label>}\n\n {(!isActive || mode === MODE_MULTIPLE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE_AUTO || !withFilter) && !inlineSelected && hasSelected && (\n <div\n className={classNames('selected',\n !label && 'nolabel',\n (mode === MODE_MULTIPLE_MINI || mode === MODE_MINI || mode === MODE_MULTIPLE_MINI_INLINE) && 'clickable',\n selectedMode)}\n onClick={toggle}>\n\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n {!label && withArrow && <span className=\"arrow\"/>}\n {withReset && <Button className=\"reset\" raised={false} onClick={this.clean}>\n {removeIcon}\n </Button>}\n </div>\n )}\n\n {inlineSelected && hasSelected && <>\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n </>}\n\n {(isActive || (!hasSelected && mode !== MODE_MULTIPLE_MINI_INLINE) || mode === MODE_MULTIPLE || (mode === MODE_MULTIPLE_AUTO && selectedIds.length > 1) || mode === MODE_INLINE_MULTIPLE) && (\n <div className={`input`} data-value={filterValue}>\n {withFilter && <TextField autoComplete=\"new-password\" id={'f-' + id}\n ref={ref('input', this)}\n focused={isActive}\n value={filterValue}\n label={inputLabel}\n onChange={this.onChange}\n onFocus={e => this.setState({isActive: true})}\n check={this.props.filterCheck}\n onKeyDown={e => {\n const keyCode = e.keyCode;\n if (keyCode === 38/*up*/) {\n preventDefault(e);\n this.prev();\n } else if (keyCode === 40/*down*/) {\n preventDefault(e);\n this.next();\n } else if (keyCode === 13/*enter*/) {\n preventDefault(e);\n this.onSelect(this.getSelected())\n } else if (keyCode === 9/*tab*/) {\n this.onSelect(this.getSelected())\n } else if (keyCode === 8/*backspace*/) {\n if (!filterValue && (selectedIds.length !== 0) && isMultipleSelect(mode)) {\n this.remove(selectedIds[selectedIds.length - 1]);\n }\n this.reset()\n } else if (keyCode === 46/*delete*/) {\n this.reset()\n } else if (keyCode === 27/*esc*/) {\n this.setState({\n isActive: false,\n filterValue: isMultipleSelect(mode) ? '' : (allowCustom ? filterValue : ''),\n });\n this.input.getInput().blur()\n this.onCancel();\n }\n // console.log('key pressed:', e.keyCode)\n }}\n />}\n {!withFilter && inputLabel && <label>{inputLabel}</label>}\n </div>\n )}\n {list}\n </div>\n )\n }\n\n onClickOutside = () => {\n const {allowCustom, required} = this.props;\n const {filterValue} = this.state;\n if (allowCustom && (!!filterValue || !required)) {\n this.onSelect()\n }\n\n this.setState({isActive: false});\n\n this.onCancel();\n };\n\n onCancel = () => {\n orNoop(this.props.onCancel)()\n };\n\n onSelect = (selectedId) => {\n const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = this.props;\n const {filterValue, selected: currentSelection} = this.state;\n\n if (selectedId == null && (!!filterValue || !required) && allowCustom && (!this.input || !this.input.check()))\n selectedId = filterValue.trim();\n\n const isMultiSelect = isMultipleSelect(mode);\n\n if (!selectedId && isMultiSelect) {\n selectedId = null;\n }\n\n // debugger\n\n const isSelected = selectedId != null;\n\n let selected = {...currentSelection};\n if (selected[selectedId] && (defaultValue || isMultiSelect)) {\n delete selected[selectedId];\n if (defaultValue && Object.keys(selected).length === 0)\n selected[defaultValue] = defaultValue;\n } else if (isSelected && (isMultiSelect)) {\n selected[selectedId] = selectedId;\n } else if (isSelected) {\n selected = {[selectedId]: selectedId};\n }\n\n const errored = required && Object.keys(selected) === 0;\n\n const isActive = mode === MODE_MULTIPLE_MINI_INLINE || (isMultiSelect && isSelected)\n\n this.setState({\n isActive: isActive,\n selected: selected,\n filterValue: isMultiSelect ? '' : (allowCustom ? selectedId || '' : ''),\n errored,\n });\n\n if (isActive && this.input)\n this.input.getInput().focus()\n\n orNoop(onSelect)(selectedId);\n orNoop(onChange)(Object.values(selected));\n };\n\n clean = (e) => {\n preventDefault(e);\n stopPropagation(e);\n\n this.setState({\n isActive: false,\n selected: {},\n filterValue: '',\n });\n\n orNoop(this.props.onSelect)(null);\n orNoop(this.props.onChange)([]);\n\n this.initSelected(this.props, this.state);\n };\n\n remove = (id) => {\n let result = {\n ...this.state,\n selected: {...this.state.selected},\n filterValue: '',\n };\n delete result.selected[id];\n this.setState(result);\n orNoop(this.props.onChange)(Object.values(result.selected));\n };\n\n onChange = (event) => {\n const value = event.target.value;\n this.setState({filterValue: value});\n this.props.onFilterInputChange?.(value);\n }\n}\n\nexport default AutocompleteSelect;\n"],"names":["MODE_DEFAULT","MODE_INLINE","MODE_INLINE_MULTIPLE","MODE_MULTIPLE_AUTO","MODE_MULTIPLE","MODE_MULTIPLE_MINI","MODE_MINI","MODE_MULTIPLE_MINI_INLINE","DummyChild","id","label","dataConsumer","onClick","orNoop","prepareSelected","value","result","Array","isArray","reduce","map","obj","isObject","findParent","el","tag","tagName","toUpperCase","parentNode","isMultipleSelect","mode","AutocompleteSelect","props","initSelected","allowCustom","filterValue","setState","selected","isString","onClickOutside","required","state","onSelect","isActive","onCancel","selectedId","onChange","defaultValue","currentSelection","input","check","trim","isMultiSelect","isSelected","Object","keys","length","errored","getInput","focus","values","clean","e","preventDefault","stopPropagation","remove","event","target","onFilterInputChange","that","focused","randomId","getRandomId","data","getSelected","isFunction","addEventListener","DOCUMENT","listener","contains","form","submitButton","querySelector","formSubmitListener","prevProps","prevState","snapshot","removeEventListener","childComponent","childProps","withArrow","withFilter","withReset","filter","inputLabel","selectedMode","prefilter","className","scrollToValue","scroll","inlineSelected","removeIcon","selectedComponent","UNDEFINED","labels","selectedIds","hasSelected","setActive","list","scrollTo","toggle","isInline","filterValueTrimmed","dataFiltered","suggestion","classNames","ref","it","f","toLowerCase","name","continuousIncludes","React","createElement","getLabel","filterCheck","keyCode","prev","next","reset","blur","Component","propTypes","PropTypes","oneOf","defaultProps"],"mappings":"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"}
|
package/Scrollable.js
CHANGED
|
@@ -105,9 +105,6 @@ var Scrollable = function (_PureComponent) {
|
|
|
105
105
|
};
|
|
106
106
|
var moveListener = function moveListener(e) {
|
|
107
107
|
if (!scrolling) return;
|
|
108
|
-
if (e.buttons === 0) {
|
|
109
|
-
reset();
|
|
110
|
-
}
|
|
111
108
|
if (scrolling === 'v') {
|
|
112
109
|
viewport.scrollTop += (e.clientY - lastY) * ratio;
|
|
113
110
|
lastY = e.clientY;
|
package/Scrollable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scrollable.js","sources":["../src/react-ui-basics/Scrollable.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './Scrollable.css'\nimport {classNames, preventDefault, WINDOW, addEventListener, removeEventListener, setTimeout, clearTimeout, setInterval, clearInterval, createRef, orNoop, NOOP} from \"./Tools\";\nimport {propsGetter, stateGS, PureComponent, render, componentDidMount, componentDidUpdate, componentWillUnmount} from \"./ReactConstants\";\n\nexport const SCROLLBAR_MODE_HIDDEN = 'hidden';\nexport const SCROLLBAR_MODE_VISIBLE = 'visible';\nexport const SCROLLBAR_MODE_AUTO = 'auto';\n\nlet NATIVE_SCROLL_WIDTH = -1;\nlet NATIVE_SCROLL_HEIGHT = -1;\n\nconst WITHOUT_SCROLL = 'without-scroll';\nconst WITH_SCROLL = 'with-scroll';\n\nconst createFieldGetter = field => el => el[field];\nconst scrollHeightOf = createFieldGetter('scrollHeight');\nconst scrollWidthOf = createFieldGetter('scrollWidth');\nconst offsetHeightOf = createFieldGetter('offsetHeight');\nconst offsetWidthOf = createFieldGetter('offsetWidth');\nconst styleOf = createFieldGetter('style');\nconst scrollBarModeOf = createFieldGetter('scrollBarMode');\nconst horizontalScrollBarModeOf = createFieldGetter('horizontalScrollBarMode');\n\nclass Scrollable extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n that.state = {};\n\n const props = propsGetter(that);\n const status = stateGS(that);\n const statusH = stateGS(that);\n\n const containerRef = createRef();\n const viewportRef = createRef();\n const scrollbarRef = createRef();\n const horizontalScrollbarRef = createRef();\n const thumbRef = createRef();\n const horizontalThumbRef = createRef();\n\n let resizeInterval;\n let initTimeout;\n\n const clear = () => {\n clearInterval(resizeInterval);\n clearTimeout(initTimeout);\n };\n\n const init = () => {\n clear();\n\n if (scrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN && horizontalScrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {\n status(WITHOUT_SCROLL);\n statusH(WITHOUT_SCROLL);\n return;\n }\n\n const viewport = viewportRef();\n const scrollbar = scrollbarRef();\n const scrollbarH = horizontalScrollbarRef();\n const container = containerRef();\n const thumb = thumbRef();\n const thumbH = horizontalThumbRef();\n\n let scrolling = false;\n let scrolledToBottom = false;\n let scrolledToTop = false;\n let adjustedScrollWidth = false;\n let lastY = 0;\n let lastX = 0;\n let ratio = 0;\n let ratioH = 0;\n\n viewport.onscroll = (e) => {\n const scrollHeight = scrollHeightOf(viewport);\n const offsetHeight = offsetHeightOf(viewport);\n const scrollWidth = scrollWidthOf(viewport);\n const offsetWidth = offsetWidthOf(viewport);\n const scrollbarHeight = offsetHeightOf(scrollbar);\n const scrollbarWidth = offsetWidthOf(scrollbarH);\n let position = viewport.scrollTop / (scrollHeight - offsetHeight);\n const positionH = viewport.scrollLeft / (scrollWidth - offsetWidth);\n\n if (position > 1) {\n viewport.scrollTop = scrollHeight - offsetHeight;\n position = 1\n }\n\n styleOf(thumb).top = (position * (scrollbarHeight - offsetHeightOf(thumb))) + 'px';\n styleOf(thumbH).left = (positionH * (scrollbarWidth - offsetWidthOf(thumbH))) + 'px';\n\n if (position >= 0.98) {\n !scrolledToBottom && orNoop(props().onScrolledToBottom)();\n scrolledToBottom = true;\n } else {\n scrolledToBottom = false;\n }\n\n if (position <= 0.02) {\n !scrolledToTop && orNoop(props().onScrolledToTop)();\n scrolledToTop = true;\n } else {\n scrolledToTop = false;\n }\n };\n const reset = () => {\n removeEventListener(WINDOW, 'mouseup', reset);\n removeEventListener(WINDOW, 'mousemove', moveListener);\n viewport.style.scrollBehavior = ''\n scrolling = false;\n };\n const moveListener = (e) => {\n if (!scrolling)\n return;\n\n if (e.buttons === 0) {\n reset();\n }\n\n if (scrolling === 'v') {\n viewport.scrollTop += (e.clientY - lastY) * ratio;\n lastY = e.clientY;\n } else if (scrolling === 'h') {\n viewport.scrollLeft += (e.clientX - lastX) * ratioH;\n lastX = e.clientX;\n }\n };\n thumb.onmousedown = (e) => {\n lastY = e.clientY;\n scrolling = 'v';\n ratio = scrollHeightOf(viewport) / offsetHeightOf(viewport);\n viewport.style.scrollBehavior = 'unset'\n\n addEventListener(WINDOW, 'mouseup', reset);\n addEventListener(WINDOW, 'mousemove', moveListener);\n };\n thumb.ondragstart = preventDefault;\n thumb.onmouseup = reset;\n\n thumbH.onmousedown = (e) => {\n lastX = e.clientX;\n scrolling = 'h';\n ratioH = scrollWidthOf(viewport) / offsetWidthOf(viewport);\n viewport.style.scrollBehavior = 'unset'\n\n addEventListener(WINDOW, 'mouseup', reset);\n addEventListener(WINDOW, 'mousemove', moveListener);\n };\n thumbH.ondragstart = preventDefault;\n thumbH.onmouseup = reset;\n\n scrollbar.onclick = (e) => {\n if (e.target === scrollbar) {\n let thumbPosition = parseInt(styleOf(thumb).top);\n viewport.scrollTop += offsetHeightOf(viewport) * 0.9 * (e.offsetY < thumbPosition ? -1 : 1);\n }\n };\n scrollbarH.onclick = (e) => {\n if (e.target === scrollbarH) {\n let thumbPosition = parseInt(styleOf(thumbH).left);\n viewport.scrollLeft += offsetWidthOf(viewport) * 0.9 * (e.offsetX < thumbPosition ? -1 : 1);\n }\n };\n\n const adjustScrollWidth = () => {\n if (NATIVE_SCROLL_WIDTH < 0) {\n NATIVE_SCROLL_WIDTH = viewport.offsetWidth - viewport.clientWidth;\n if (NATIVE_SCROLL_WIDTH === 0 && scrollHeightOf(viewport) !== offsetHeightOf(viewport)) {\n NATIVE_SCROLL_WIDTH = -1;\n }\n }\n if (NATIVE_SCROLL_HEIGHT < 0) {\n NATIVE_SCROLL_HEIGHT = viewport.offsetHeight - viewport.clientHeight;\n if (NATIVE_SCROLL_HEIGHT === 0 && scrollWidthOf(viewport) !== offsetWidthOf(viewport)) {\n NATIVE_SCROLL_HEIGHT = -1;\n }\n }\n\n if (!adjustedScrollWidth) {\n if (NATIVE_SCROLL_WIDTH >= 0 && status() !== WITHOUT_SCROLL) {\n styleOf(viewport).paddingRight = (NATIVE_SCROLL_WIDTH) + scrollbar.clientWidth + 'px';\n styleOf(viewport).marginRight = -(NATIVE_SCROLL_WIDTH) - scrollbar.clientWidth + 'px';\n }\n if (NATIVE_SCROLL_HEIGHT >= 0 && statusH() !== WITHOUT_SCROLL) {\n styleOf(viewport).paddingBottom = (NATIVE_SCROLL_HEIGHT) + scrollbarH.clientHeight + 'px';\n styleOf(viewport).marginBottom = -(NATIVE_SCROLL_HEIGHT) - scrollbarH.clientHeight + 'px';\n }\n adjustedScrollWidth = true;\n }\n };\n\n adjustScrollWidth();\n\n const showScrollbar = (scrollbar, viewport, adjustScrollWidth) => {\n styleOf(scrollbar).visibility = 'inherit';\n styleOf(scrollbar).bottom = '0'; //enable scrollbar\n styleOf(viewport).overflowY = '';\n adjustScrollWidth();\n status() !== WITH_SCROLL && status(WITH_SCROLL);\n };\n\n const hideScrollbar = (scrollbar, viewport) => {\n styleOf(scrollbar).visibility = 'hidden'; //disable scrollbar\n styleOf(viewport).overflowY = 'inherit';\n styleOf(viewport).paddingRight = '0';\n styleOf(viewport).marginRight = '0';\n status() !== WITHOUT_SCROLL && status(WITHOUT_SCROLL);\n };\n\n const showHorizontalScrollbar = (scrollbar, viewport, adjustScrollWidth) => {\n styleOf(scrollbar).visibility = 'inherit';\n styleOf(scrollbar).right = '0'; //enable scrollbar\n styleOf(viewport).overflowX = '';\n adjustScrollWidth();\n statusH() !== WITH_SCROLL && statusH(WITH_SCROLL);\n };\n\n const hideHorizontalScrollbar = (scrollbar, viewport) => {\n styleOf(scrollbar).visibility = 'hidden'; //disable scrollbar\n styleOf(viewport).overflowX = 'inherit';\n styleOf(viewport).paddingBottom = '0';\n styleOf(viewport).marginBottom = '0';\n statusH() !== WITHOUT_SCROLL && statusH(WITHOUT_SCROLL);\n };\n\n const updateVerticalScrollbar = () => {\n const scrollHeight = scrollHeightOf(viewport);\n const scrollbarHeight = offsetHeightOf(scrollbar);\n\n !adjustedScrollWidth && adjustScrollWidth();\n\n const newRatio = scrollHeight / scrollbarHeight;\n if ((ratio === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;\n\n const offsetHeight = offsetHeightOf(viewport);\n const horizontalScrollBarOffset = statusH() !== WITHOUT_SCROLL ? scrollbarH.clientHeight + Math.max(NATIVE_SCROLL_HEIGHT, 0) : 0;\n\n let containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;\n if (containerOffsetHeight === scrollHeight && status() === WITHOUT_SCROLL)\n return;\n\n if (props().autoScrollTop && scrollHeight - offsetHeight - viewport.scrollTop <= 20 && newRatio < ratio && Number.isFinite(newRatio) && Number.isFinite(ratio)) {\n viewport.scrollTop = 0; // scroll to top if scrollbar gets smaller\n }\n\n ratio = newRatio;\n styleOf(thumb).height = (scrollbarHeight / newRatio) + 'px';\n\n styleOf(container).height = scrollHeight - horizontalScrollBarOffset + 'px';\n containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;\n\n if (scrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {\n if (status() !== WITHOUT_SCROLL)\n hideScrollbar(scrollbar, viewport);\n\n return\n }\n\n if (containerOffsetHeight < scrollHeight) {\n adjustedScrollWidth = false;\n showScrollbar(scrollbar, viewport, adjustScrollWidth);\n } else {\n hideScrollbar(scrollbar, viewport);\n }\n\n scrolledToBottom = false;\n scrolledToTop = false;\n\n const position = viewport.scrollTop / (scrollHeight - offsetHeight);\n styleOf(thumb).top = (position * (scrollbarHeight - offsetHeightOf(thumb))) + 'px';\n };\n\n const updateHorizontalScrollbar = () => {\n\n const scrollWidth = scrollWidthOf(viewport);\n const scrollbarWidth = offsetWidthOf(scrollbarH);\n\n !adjustedScrollWidth && adjustScrollWidth();\n\n const newRatio = scrollWidth / scrollbarWidth;\n if ((ratioH === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;\n\n const offsetWidth = offsetWidthOf(viewport);\n\n const verticalScrollBarOffset = status() !== WITHOUT_SCROLL ? scrollbar.clientWidth + Math.max(NATIVE_SCROLL_WIDTH, 0) : 0;\n let containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;\n\n if (containerOffsetWidth === scrollWidth && statusH() === WITHOUT_SCROLL)\n return;\n\n ratioH = newRatio;\n styleOf(thumbH).width = (scrollbarWidth / newRatio) + 'px';\n\n\n if (horizontalScrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {\n if (statusH() !== WITHOUT_SCROLL)\n hideHorizontalScrollbar(scrollbarH, viewport);\n\n return\n }\n\n styleOf(container).width = (scrollWidth - verticalScrollBarOffset) + 'px';\n containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;\n\n if (containerOffsetWidth < scrollWidth) {\n adjustedScrollWidth = false;\n showHorizontalScrollbar(scrollbarH, viewport, adjustScrollWidth);\n } else {\n hideHorizontalScrollbar(scrollbarH, viewport);\n }\n\n const position = viewport.scrollLeft / (scrollWidth - offsetWidth);\n styleOf(thumbH).left = (position * (scrollbarWidth - offsetWidthOf(thumbH))) + 'px';\n };\n\n initTimeout = setTimeout(() => {\n resizeInterval = setInterval(() => {\n updateVerticalScrollbar();\n updateHorizontalScrollbar();\n }, 50);\n }, 200)\n };\n\n that[componentDidMount] = init;\n that[componentWillUnmount] = clear;\n\n that[componentDidUpdate] = (prevProps) => {\n if (scrollBarModeOf(props()) !== scrollBarModeOf(prevProps))\n init();\n };\n\n that.setScroll = (y) => {\n viewportRef().scrollTop = y\n };\n that.getScroll = () => viewportRef().scrollTop;\n that.getScrollHeight = () => scrollHeightOf(viewportRef());\n that.getHeight = () => containerRef().clientHeight;\n\n that[render] = () => {\n const _props = props();\n const {className, children} = _props;\n return (\n <div className={classNames('Scrollable', className, status() || WITH_SCROLL, statusH() + '-horizontal')} style={styleOf(_props)} ref={containerRef}>\n <div className=\"viewport\" ref={viewportRef}>\n {children}\n </div>\n <div className={classNames('scrollbar', scrollBarModeOf(_props) || SCROLLBAR_MODE_AUTO)} ref={scrollbarRef}>\n <div className=\"thumb\" ref={thumbRef}/>\n </div>\n <div className={classNames('scrollbar horizontal', horizontalScrollBarModeOf(_props))} ref={horizontalScrollbarRef}>\n <div className=\"thumb\" ref={horizontalThumbRef}/>\n </div>\n </div>\n )\n };\n }\n}\n\nexport default Scrollable\n\nScrollable.defaultProps = {\n autoScrollTop: true,\n horizontalScrollBarMode: SCROLLBAR_MODE_HIDDEN\n};\n\nif (window.isNotProductionEnvironment) {\n Scrollable.propTypes = {\n scrollBarMode: PropTypes.oneOf([SCROLLBAR_MODE_AUTO, SCROLLBAR_MODE_HIDDEN, SCROLLBAR_MODE_VISIBLE]),\n horizontalScrollBarMode: PropTypes.oneOf([SCROLLBAR_MODE_AUTO, SCROLLBAR_MODE_HIDDEN, SCROLLBAR_MODE_VISIBLE]),\n className: PropTypes.string,\n style: PropTypes.object,\n onScrolledToBottom: PropTypes.func,\n onScrolledToTop: PropTypes.func,\n autoScrollTop: PropTypes.bool,\n }\n}"],"names":["SCROLLBAR_MODE_HIDDEN","SCROLLBAR_MODE_VISIBLE","SCROLLBAR_MODE_AUTO","NATIVE_SCROLL_WIDTH","NATIVE_SCROLL_HEIGHT","WITHOUT_SCROLL","WITH_SCROLL","createFieldGetter","field","el","scrollHeightOf","scrollWidthOf","offsetHeightOf","offsetWidthOf","styleOf","scrollBarModeOf","horizontalScrollBarModeOf","Scrollable","properties","that","state","props","propsGetter","status","stateGS","statusH","containerRef","createRef","viewportRef","scrollbarRef","horizontalScrollbarRef","thumbRef","horizontalThumbRef","resizeInterval","initTimeout","clear","clearInterval","clearTimeout","init","viewport","scrollbar","scrollbarH","container","thumb","thumbH","scrolling","scrolledToBottom","scrolledToTop","adjustedScrollWidth","lastY","lastX","ratio","ratioH","onscroll","e","scrollHeight","offsetHeight","scrollWidth","offsetWidth","scrollbarHeight","scrollbarWidth","position","scrollTop","positionH","scrollLeft","top","left","orNoop","onScrolledToBottom","onScrolledToTop","reset","removeEventListener","WINDOW","moveListener","style","scrollBehavior","buttons","clientY","clientX","onmousedown","addEventListener","ondragstart","preventDefault","onmouseup","onclick","target","thumbPosition","parseInt","offsetY","offsetX","adjustScrollWidth","clientWidth","clientHeight","paddingRight","marginRight","paddingBottom","marginBottom","showScrollbar","visibility","bottom","overflowY","hideScrollbar","showHorizontalScrollbar","right","overflowX","hideHorizontalScrollbar","updateVerticalScrollbar","newRatio","Number","isFinite","isNaN","horizontalScrollBarOffset","Math","max","containerOffsetHeight","autoScrollTop","height","updateHorizontalScrollbar","verticalScrollBarOffset","containerOffsetWidth","width","setTimeout","setInterval","componentDidMount","componentWillUnmount","componentDidUpdate","prevProps","setScroll","y","getScroll","getScrollHeight","getHeight","render","_props","className","children","classNames","PureComponent","defaultProps","horizontalScrollBarMode","window","isNotProductionEnvironment","propTypes","scrollBarMode","PropTypes","oneOf","string","object","func","bool"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Scrollable.js","sources":["../src/react-ui-basics/Scrollable.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './Scrollable.css'\nimport {classNames, preventDefault, WINDOW, addEventListener, removeEventListener, setTimeout, clearTimeout, setInterval, clearInterval, createRef, orNoop, NOOP} from \"./Tools\";\nimport {propsGetter, stateGS, PureComponent, render, componentDidMount, componentDidUpdate, componentWillUnmount} from \"./ReactConstants\";\n\nexport const SCROLLBAR_MODE_HIDDEN = 'hidden';\nexport const SCROLLBAR_MODE_VISIBLE = 'visible';\nexport const SCROLLBAR_MODE_AUTO = 'auto';\n\nlet NATIVE_SCROLL_WIDTH = -1;\nlet NATIVE_SCROLL_HEIGHT = -1;\n\nconst WITHOUT_SCROLL = 'without-scroll';\nconst WITH_SCROLL = 'with-scroll';\n\nconst createFieldGetter = field => el => el[field];\nconst scrollHeightOf = createFieldGetter('scrollHeight');\nconst scrollWidthOf = createFieldGetter('scrollWidth');\nconst offsetHeightOf = createFieldGetter('offsetHeight');\nconst offsetWidthOf = createFieldGetter('offsetWidth');\nconst styleOf = createFieldGetter('style');\nconst scrollBarModeOf = createFieldGetter('scrollBarMode');\nconst horizontalScrollBarModeOf = createFieldGetter('horizontalScrollBarMode');\n\nclass Scrollable extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n that.state = {};\n\n const props = propsGetter(that);\n const status = stateGS(that);\n const statusH = stateGS(that);\n\n const containerRef = createRef();\n const viewportRef = createRef();\n const scrollbarRef = createRef();\n const horizontalScrollbarRef = createRef();\n const thumbRef = createRef();\n const horizontalThumbRef = createRef();\n\n let resizeInterval;\n let initTimeout;\n\n const clear = () => {\n clearInterval(resizeInterval);\n clearTimeout(initTimeout);\n };\n\n const init = () => {\n clear();\n\n if (scrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN && horizontalScrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {\n status(WITHOUT_SCROLL);\n statusH(WITHOUT_SCROLL);\n return;\n }\n\n const viewport = viewportRef();\n const scrollbar = scrollbarRef();\n const scrollbarH = horizontalScrollbarRef();\n const container = containerRef();\n const thumb = thumbRef();\n const thumbH = horizontalThumbRef();\n\n let scrolling = false;\n let scrolledToBottom = false;\n let scrolledToTop = false;\n let adjustedScrollWidth = false;\n let lastY = 0;\n let lastX = 0;\n let ratio = 0;\n let ratioH = 0;\n\n viewport.onscroll = (e) => {\n const scrollHeight = scrollHeightOf(viewport);\n const offsetHeight = offsetHeightOf(viewport);\n const scrollWidth = scrollWidthOf(viewport);\n const offsetWidth = offsetWidthOf(viewport);\n const scrollbarHeight = offsetHeightOf(scrollbar);\n const scrollbarWidth = offsetWidthOf(scrollbarH);\n let position = viewport.scrollTop / (scrollHeight - offsetHeight);\n const positionH = viewport.scrollLeft / (scrollWidth - offsetWidth);\n\n if (position > 1) {\n viewport.scrollTop = scrollHeight - offsetHeight;\n position = 1\n }\n\n styleOf(thumb).top = (position * (scrollbarHeight - offsetHeightOf(thumb))) + 'px';\n styleOf(thumbH).left = (positionH * (scrollbarWidth - offsetWidthOf(thumbH))) + 'px';\n\n if (position >= 0.98) {\n !scrolledToBottom && orNoop(props().onScrolledToBottom)();\n scrolledToBottom = true;\n } else {\n scrolledToBottom = false;\n }\n\n if (position <= 0.02) {\n !scrolledToTop && orNoop(props().onScrolledToTop)();\n scrolledToTop = true;\n } else {\n scrolledToTop = false;\n }\n };\n const reset = () => {\n removeEventListener(WINDOW, 'mouseup', reset);\n removeEventListener(WINDOW, 'mousemove', moveListener);\n viewport.style.scrollBehavior = ''\n scrolling = false;\n };\n const moveListener = (e) => {\n if (!scrolling)\n return;\n\n if (scrolling === 'v') {\n viewport.scrollTop += (e.clientY - lastY) * ratio;\n lastY = e.clientY;\n } else if (scrolling === 'h') {\n viewport.scrollLeft += (e.clientX - lastX) * ratioH;\n lastX = e.clientX;\n }\n };\n thumb.onmousedown = (e) => {\n lastY = e.clientY;\n scrolling = 'v';\n ratio = scrollHeightOf(viewport) / offsetHeightOf(viewport);\n viewport.style.scrollBehavior = 'unset'\n\n addEventListener(WINDOW, 'mouseup', reset);\n addEventListener(WINDOW, 'mousemove', moveListener);\n };\n thumb.ondragstart = preventDefault;\n thumb.onmouseup = reset;\n\n thumbH.onmousedown = (e) => {\n lastX = e.clientX;\n scrolling = 'h';\n ratioH = scrollWidthOf(viewport) / offsetWidthOf(viewport);\n viewport.style.scrollBehavior = 'unset'\n\n addEventListener(WINDOW, 'mouseup', reset);\n addEventListener(WINDOW, 'mousemove', moveListener);\n };\n thumbH.ondragstart = preventDefault;\n thumbH.onmouseup = reset;\n\n scrollbar.onclick = (e) => {\n if (e.target === scrollbar) {\n let thumbPosition = parseInt(styleOf(thumb).top);\n viewport.scrollTop += offsetHeightOf(viewport) * 0.9 * (e.offsetY < thumbPosition ? -1 : 1);\n }\n };\n scrollbarH.onclick = (e) => {\n if (e.target === scrollbarH) {\n let thumbPosition = parseInt(styleOf(thumbH).left);\n viewport.scrollLeft += offsetWidthOf(viewport) * 0.9 * (e.offsetX < thumbPosition ? -1 : 1);\n }\n };\n\n const adjustScrollWidth = () => {\n if (NATIVE_SCROLL_WIDTH < 0) {\n NATIVE_SCROLL_WIDTH = viewport.offsetWidth - viewport.clientWidth;\n if (NATIVE_SCROLL_WIDTH === 0 && scrollHeightOf(viewport) !== offsetHeightOf(viewport)) {\n NATIVE_SCROLL_WIDTH = -1;\n }\n }\n if (NATIVE_SCROLL_HEIGHT < 0) {\n NATIVE_SCROLL_HEIGHT = viewport.offsetHeight - viewport.clientHeight;\n if (NATIVE_SCROLL_HEIGHT === 0 && scrollWidthOf(viewport) !== offsetWidthOf(viewport)) {\n NATIVE_SCROLL_HEIGHT = -1;\n }\n }\n\n if (!adjustedScrollWidth) {\n if (NATIVE_SCROLL_WIDTH >= 0 && status() !== WITHOUT_SCROLL) {\n styleOf(viewport).paddingRight = (NATIVE_SCROLL_WIDTH) + scrollbar.clientWidth + 'px';\n styleOf(viewport).marginRight = -(NATIVE_SCROLL_WIDTH) - scrollbar.clientWidth + 'px';\n }\n if (NATIVE_SCROLL_HEIGHT >= 0 && statusH() !== WITHOUT_SCROLL) {\n styleOf(viewport).paddingBottom = (NATIVE_SCROLL_HEIGHT) + scrollbarH.clientHeight + 'px';\n styleOf(viewport).marginBottom = -(NATIVE_SCROLL_HEIGHT) - scrollbarH.clientHeight + 'px';\n }\n adjustedScrollWidth = true;\n }\n };\n\n adjustScrollWidth();\n\n const showScrollbar = (scrollbar, viewport, adjustScrollWidth) => {\n styleOf(scrollbar).visibility = 'inherit';\n styleOf(scrollbar).bottom = '0'; //enable scrollbar\n styleOf(viewport).overflowY = '';\n adjustScrollWidth();\n status() !== WITH_SCROLL && status(WITH_SCROLL);\n };\n\n const hideScrollbar = (scrollbar, viewport) => {\n styleOf(scrollbar).visibility = 'hidden'; //disable scrollbar\n styleOf(viewport).overflowY = 'inherit';\n styleOf(viewport).paddingRight = '0';\n styleOf(viewport).marginRight = '0';\n status() !== WITHOUT_SCROLL && status(WITHOUT_SCROLL);\n };\n\n const showHorizontalScrollbar = (scrollbar, viewport, adjustScrollWidth) => {\n styleOf(scrollbar).visibility = 'inherit';\n styleOf(scrollbar).right = '0'; //enable scrollbar\n styleOf(viewport).overflowX = '';\n adjustScrollWidth();\n statusH() !== WITH_SCROLL && statusH(WITH_SCROLL);\n };\n\n const hideHorizontalScrollbar = (scrollbar, viewport) => {\n styleOf(scrollbar).visibility = 'hidden'; //disable scrollbar\n styleOf(viewport).overflowX = 'inherit';\n styleOf(viewport).paddingBottom = '0';\n styleOf(viewport).marginBottom = '0';\n statusH() !== WITHOUT_SCROLL && statusH(WITHOUT_SCROLL);\n };\n\n const updateVerticalScrollbar = () => {\n const scrollHeight = scrollHeightOf(viewport);\n const scrollbarHeight = offsetHeightOf(scrollbar);\n\n !adjustedScrollWidth && adjustScrollWidth();\n\n const newRatio = scrollHeight / scrollbarHeight;\n if ((ratio === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;\n\n const offsetHeight = offsetHeightOf(viewport);\n const horizontalScrollBarOffset = statusH() !== WITHOUT_SCROLL ? scrollbarH.clientHeight + Math.max(NATIVE_SCROLL_HEIGHT, 0) : 0;\n\n let containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;\n if (containerOffsetHeight === scrollHeight && status() === WITHOUT_SCROLL)\n return;\n\n if (props().autoScrollTop && scrollHeight - offsetHeight - viewport.scrollTop <= 20 && newRatio < ratio && Number.isFinite(newRatio) && Number.isFinite(ratio)) {\n viewport.scrollTop = 0; // scroll to top if scrollbar gets smaller\n }\n\n ratio = newRatio;\n styleOf(thumb).height = (scrollbarHeight / newRatio) + 'px';\n\n styleOf(container).height = scrollHeight - horizontalScrollBarOffset + 'px';\n containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;\n\n if (scrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {\n if (status() !== WITHOUT_SCROLL)\n hideScrollbar(scrollbar, viewport);\n\n return\n }\n\n if (containerOffsetHeight < scrollHeight) {\n adjustedScrollWidth = false;\n showScrollbar(scrollbar, viewport, adjustScrollWidth);\n } else {\n hideScrollbar(scrollbar, viewport);\n }\n\n scrolledToBottom = false;\n scrolledToTop = false;\n\n const position = viewport.scrollTop / (scrollHeight - offsetHeight);\n styleOf(thumb).top = (position * (scrollbarHeight - offsetHeightOf(thumb))) + 'px';\n };\n\n const updateHorizontalScrollbar = () => {\n\n const scrollWidth = scrollWidthOf(viewport);\n const scrollbarWidth = offsetWidthOf(scrollbarH);\n\n !adjustedScrollWidth && adjustScrollWidth();\n\n const newRatio = scrollWidth / scrollbarWidth;\n if ((ratioH === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;\n\n const offsetWidth = offsetWidthOf(viewport);\n\n const verticalScrollBarOffset = status() !== WITHOUT_SCROLL ? scrollbar.clientWidth + Math.max(NATIVE_SCROLL_WIDTH, 0) : 0;\n let containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;\n\n if (containerOffsetWidth === scrollWidth && statusH() === WITHOUT_SCROLL)\n return;\n\n ratioH = newRatio;\n styleOf(thumbH).width = (scrollbarWidth / newRatio) + 'px';\n\n\n if (horizontalScrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {\n if (statusH() !== WITHOUT_SCROLL)\n hideHorizontalScrollbar(scrollbarH, viewport);\n\n return\n }\n\n styleOf(container).width = (scrollWidth - verticalScrollBarOffset) + 'px';\n containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;\n\n if (containerOffsetWidth < scrollWidth) {\n adjustedScrollWidth = false;\n showHorizontalScrollbar(scrollbarH, viewport, adjustScrollWidth);\n } else {\n hideHorizontalScrollbar(scrollbarH, viewport);\n }\n\n const position = viewport.scrollLeft / (scrollWidth - offsetWidth);\n styleOf(thumbH).left = (position * (scrollbarWidth - offsetWidthOf(thumbH))) + 'px';\n };\n\n initTimeout = setTimeout(() => {\n resizeInterval = setInterval(() => {\n updateVerticalScrollbar();\n updateHorizontalScrollbar();\n }, 50);\n }, 200)\n };\n\n that[componentDidMount] = init;\n that[componentWillUnmount] = clear;\n\n that[componentDidUpdate] = (prevProps) => {\n if (scrollBarModeOf(props()) !== scrollBarModeOf(prevProps))\n init();\n };\n\n that.setScroll = (y) => {\n viewportRef().scrollTop = y\n };\n that.getScroll = () => viewportRef().scrollTop;\n that.getScrollHeight = () => scrollHeightOf(viewportRef());\n that.getHeight = () => containerRef().clientHeight;\n\n that[render] = () => {\n const _props = props();\n const {className, children} = _props;\n return (\n <div className={classNames('Scrollable', className, status() || WITH_SCROLL, statusH() + '-horizontal')} style={styleOf(_props)} ref={containerRef}>\n <div className=\"viewport\" ref={viewportRef}>\n {children}\n </div>\n <div className={classNames('scrollbar', scrollBarModeOf(_props) || SCROLLBAR_MODE_AUTO)} ref={scrollbarRef}>\n <div className=\"thumb\" ref={thumbRef}/>\n </div>\n <div className={classNames('scrollbar horizontal', horizontalScrollBarModeOf(_props))} ref={horizontalScrollbarRef}>\n <div className=\"thumb\" ref={horizontalThumbRef}/>\n </div>\n </div>\n )\n };\n }\n}\n\nexport default Scrollable\n\nScrollable.defaultProps = {\n autoScrollTop: true,\n horizontalScrollBarMode: SCROLLBAR_MODE_HIDDEN\n};\n\nif (window.isNotProductionEnvironment) {\n Scrollable.propTypes = {\n scrollBarMode: PropTypes.oneOf([SCROLLBAR_MODE_AUTO, SCROLLBAR_MODE_HIDDEN, SCROLLBAR_MODE_VISIBLE]),\n horizontalScrollBarMode: PropTypes.oneOf([SCROLLBAR_MODE_AUTO, SCROLLBAR_MODE_HIDDEN, SCROLLBAR_MODE_VISIBLE]),\n className: PropTypes.string,\n style: PropTypes.object,\n onScrolledToBottom: PropTypes.func,\n onScrolledToTop: PropTypes.func,\n autoScrollTop: PropTypes.bool,\n }\n}"],"names":["SCROLLBAR_MODE_HIDDEN","SCROLLBAR_MODE_VISIBLE","SCROLLBAR_MODE_AUTO","NATIVE_SCROLL_WIDTH","NATIVE_SCROLL_HEIGHT","WITHOUT_SCROLL","WITH_SCROLL","createFieldGetter","field","el","scrollHeightOf","scrollWidthOf","offsetHeightOf","offsetWidthOf","styleOf","scrollBarModeOf","horizontalScrollBarModeOf","Scrollable","properties","that","state","props","propsGetter","status","stateGS","statusH","containerRef","createRef","viewportRef","scrollbarRef","horizontalScrollbarRef","thumbRef","horizontalThumbRef","resizeInterval","initTimeout","clear","clearInterval","clearTimeout","init","viewport","scrollbar","scrollbarH","container","thumb","thumbH","scrolling","scrolledToBottom","scrolledToTop","adjustedScrollWidth","lastY","lastX","ratio","ratioH","onscroll","e","scrollHeight","offsetHeight","scrollWidth","offsetWidth","scrollbarHeight","scrollbarWidth","position","scrollTop","positionH","scrollLeft","top","left","orNoop","onScrolledToBottom","onScrolledToTop","reset","removeEventListener","WINDOW","moveListener","style","scrollBehavior","clientY","clientX","onmousedown","addEventListener","ondragstart","preventDefault","onmouseup","onclick","target","thumbPosition","parseInt","offsetY","offsetX","adjustScrollWidth","clientWidth","clientHeight","paddingRight","marginRight","paddingBottom","marginBottom","showScrollbar","visibility","bottom","overflowY","hideScrollbar","showHorizontalScrollbar","right","overflowX","hideHorizontalScrollbar","updateVerticalScrollbar","newRatio","Number","isFinite","isNaN","horizontalScrollBarOffset","Math","max","containerOffsetHeight","autoScrollTop","height","updateHorizontalScrollbar","verticalScrollBarOffset","containerOffsetWidth","width","setTimeout","setInterval","componentDidMount","componentWillUnmount","componentDidUpdate","prevProps","setScroll","y","getScroll","getScrollHeight","getHeight","render","_props","className","children","classNames","PureComponent","defaultProps","horizontalScrollBarMode","window","isNotProductionEnvironment","propTypes","scrollBarMode","PropTypes","oneOf","string","object","func","bool"],"mappings":"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"}
|
package/ScrollableTable.js
CHANGED
|
@@ -4,6 +4,7 @@ import ReactCreateElement from './ReactCreateElement.js';
|
|
|
4
4
|
import Table from './Table.js';
|
|
5
5
|
import Scrollable from './Scrollable.js';
|
|
6
6
|
import { render, props, PureComponent } from './ReactConstants.js';
|
|
7
|
+
import { createRef } from './Tools.js';
|
|
7
8
|
|
|
8
9
|
var ScrollableTable = function (_PureComponent) {
|
|
9
10
|
_inherits(ScrollableTable, _PureComponent);
|
|
@@ -13,10 +14,16 @@ var ScrollableTable = function (_PureComponent) {
|
|
|
13
14
|
_classCallCheck(this, ScrollableTable);
|
|
14
15
|
_this = _super.call(this, properties);
|
|
15
16
|
var that = _assertThisInitialized(_this);
|
|
17
|
+
var scrollableRef = createRef();
|
|
16
18
|
that[render] = function () {
|
|
17
19
|
return ReactCreateElement("div", {
|
|
18
20
|
className: "ScrollableTable"
|
|
19
|
-
}, ReactCreateElement(Scrollable,
|
|
21
|
+
}, ReactCreateElement(Scrollable, {
|
|
22
|
+
ref: scrollableRef
|
|
23
|
+
}, ReactCreateElement(Table, props(that))));
|
|
24
|
+
};
|
|
25
|
+
that.getScrollable = function () {
|
|
26
|
+
return scrollableRef();
|
|
20
27
|
};
|
|
21
28
|
return _this;
|
|
22
29
|
}
|
package/ScrollableTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollableTable.js","sources":["../src/react-ui-basics/ScrollableTable.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport Table from \"./Table\";\nimport Scrollable from \"./Scrollable\";\nimport \"./ScrollableTable.css\";\nimport {props, render, PureComponent} from \"./ReactConstants\";\n\nclass ScrollableTable extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n\n that[render] = () => {\n return <div className={`ScrollableTable`}>\n <Scrollable>\n <Table {...props(that)}/>\n </Scrollable>\n </div>;\n }\n }\n}\n\nexport default ScrollableTable"],"names":["ScrollableTable","properties","that","render","props","PureComponent"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ScrollableTable.js","sources":["../src/react-ui-basics/ScrollableTable.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport Table from \"./Table\";\nimport Scrollable from \"./Scrollable\";\nimport \"./ScrollableTable.css\";\nimport {props, render, PureComponent} from \"./ReactConstants\";\nimport {createRef} from \"./Tools\";\n\nclass ScrollableTable extends PureComponent {\n\n constructor(properties) {\n super(properties);\n const that = this;\n\n const scrollableRef = createRef();\n\n that[render] = () => {\n return <div className={`ScrollableTable`}>\n <Scrollable ref={scrollableRef}>\n <Table {...props(that)}/>\n </Scrollable>\n </div>;\n }\n that.getScrollable = () => scrollableRef()\n }\n}\n\nexport default ScrollableTable"],"names":["ScrollableTable","properties","that","scrollableRef","createRef","render","props","getScrollable","PureComponent"],"mappings":";;;;;;;;IAQMA;;;AAEF,2BAAYC,UAAZ,EAAwB;AAAA;AAAA;AACpB,8BAAMA,UAAN;AACA,QAAMC,IAAI,gCAAV;AAEA,QAAMC,aAAa,GAAGC,SAAS,EAA/B;AAEAF,IAAAA,IAAI,CAACG,MAAD,CAAJ,GAAe,YAAM;AACjB,aAAO;AAAK,QAAA,SAAS;AAAd,SACH,mBAAC,UAAD;AAAY,QAAA,GAAG,EAAEF;AAAjB,SACI,mBAAC,KAAD,EAAWG,KAAK,CAACJ,IAAD,CAAhB,CADJ,CADG,CAAP;AAKH,KAND;AAOAA,IAAAA,IAAI,CAACK,aAAL,GAAqB;AAAA,aAAMJ,aAAa,EAAnB;AAAA,KAArB;AAboB;AAcvB;;EAhByBK;AAmB9B,wBAAeR,eAAf;;;;"}
|
package/Table.js
CHANGED
|
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
|
|
|
5
5
|
import TextField from './TextField.js';
|
|
6
6
|
import AutocompleteSelect, { MODE_MULTIPLE_MINI, MODE_DEFAULT } from './AutocompleteSelect.js';
|
|
7
7
|
import Switch from './Switch.js';
|
|
8
|
-
import { Comparators, isString, preventDefault, classNames, isFunction, NOOP, stopPropagation } from './Tools.js';
|
|
8
|
+
import { Comparators, orNoop, isString, preventDefault, classNames, isFunction, NOOP, stopPropagation } from './Tools.js';
|
|
9
9
|
import MaterialIcon from './MaterialIcon.js';
|
|
10
10
|
|
|
11
11
|
var SORT_ASC = Comparators.SORT_ASC;
|
|
@@ -23,11 +23,18 @@ var Table = function (_Component) {
|
|
|
23
23
|
_this.setData = function (data) {
|
|
24
24
|
var _this$state = _this.state,
|
|
25
25
|
sortBy = _this$state.sortBy,
|
|
26
|
-
sortOrder = _this$state.sortOrder
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
sortOrder = _this$state.sortOrder,
|
|
27
|
+
comparator = _this$state.comparator;
|
|
28
|
+
if (sortBy) {
|
|
29
|
+
var c = comparator;
|
|
30
|
+
if (c && sortOrder === SORT_DESC) c = Comparators.inverse(c);
|
|
31
|
+
data.sort(c || Comparators.of(sortBy, sortOrder, data));
|
|
32
|
+
_this.setState({
|
|
33
|
+
data: data
|
|
34
|
+
}, function () {
|
|
35
|
+
orNoop(_this.props.onSortChange)(sortBy, sortOrder);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
31
38
|
};
|
|
32
39
|
_this.updateHeaders = function () {
|
|
33
40
|
var headers = _this.headers;
|
|
@@ -84,14 +91,11 @@ var Table = function (_Component) {
|
|
|
84
91
|
var updated = _objectSpread2(_objectSpread2({}, editing.item), {}, _defineProperty({}, editing.field, value));
|
|
85
92
|
_this.props.onChange(updated, _this.cancelEditing);
|
|
86
93
|
};
|
|
87
|
-
_this.sort = function (e, sortBy) {
|
|
94
|
+
_this.sort = function (e, sortBy, comparator) {
|
|
88
95
|
preventDefault(e);
|
|
89
|
-
|
|
90
|
-
sortOrder: _this.state.sortOrder === SORT_ASC ? SORT_DESC : SORT_ASC
|
|
91
|
-
|
|
92
|
-
return _this.setData(_this.state.data);
|
|
93
|
-
});else _this.setState({
|
|
94
|
-
sortOrder: SORT_ASC,
|
|
96
|
+
_this.setState({
|
|
97
|
+
sortOrder: _this.state.sortBy === sortBy && _this.state.sortOrder === SORT_ASC ? SORT_DESC : SORT_ASC,
|
|
98
|
+
comparator: comparator,
|
|
95
99
|
sortBy: sortBy
|
|
96
100
|
}, function () {
|
|
97
101
|
return _this.setData(_this.state.data);
|
|
@@ -158,7 +162,7 @@ var Table = function (_Component) {
|
|
|
158
162
|
return ReactCreateElement("th", {
|
|
159
163
|
key: i,
|
|
160
164
|
onClick: function onClick(e) {
|
|
161
|
-
return sortable && _this3.sort(e, column.field);
|
|
165
|
+
return sortable && _this3.sort(e, column.field, column.comparator);
|
|
162
166
|
}
|
|
163
167
|
}, ReactCreateElement("div", {
|
|
164
168
|
className: classNames('hidden', sortable && 'sortable', sortBy === column.field && 'active')
|
|
@@ -290,6 +294,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
290
294
|
sortable: PropTypes.bool,
|
|
291
295
|
field: PropTypes.string,
|
|
292
296
|
formatter: PropTypes.func,
|
|
297
|
+
comparator: PropTypes.func,
|
|
293
298
|
editable: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),
|
|
294
299
|
editor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
|
|
295
300
|
displayEditor: PropTypes.bool,
|
|
@@ -298,6 +303,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
298
303
|
data: PropTypes.array,
|
|
299
304
|
disabled: PropTypes.func,
|
|
300
305
|
onRowClick: PropTypes.func,
|
|
306
|
+
onSortChange: PropTypes.func,
|
|
301
307
|
onChange: PropTypes.func,
|
|
302
308
|
toKey: PropTypes.func
|
|
303
309
|
};
|
package/Table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../src/react-ui-basics/Table.js"],"sourcesContent":["import React, {Component} from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport './Table.css'\nimport PropTypes from \"prop-types\";\nimport TextField from \"./TextField\";\nimport AutocompleteSelect, {MODE_DEFAULT, MODE_MULTIPLE_MINI} from \"./AutocompleteSelect\";\nimport Switch from \"./Switch\";\nimport {Comparators, NOOP, classNames, preventDefault, stopPropagation, isFunction, isString} from \"./Tools\";\nimport MaterialIcon from \"./MaterialIcon\";\n\nexport const SORT_ASC = Comparators.SORT_ASC;\nexport const SORT_DESC = Comparators.SORT_DESC;\n\nconst getId = item => item.id;\n\n\nclass Table extends Component {\n\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {\n const {sortBy, sortOrder = SORT_ASC} = this.props;\n this.setState({sortBy, sortOrder}, () => this.setData(this.props.data));\n\n this.updateHeaders();\n this.updateHeadersInterval = setInterval(this.updateHeaders, 1000)\n };\n\n setData = (data) => {\n const {sortBy, sortOrder} = this.state;\n sortBy && data.sort(Comparators.of(sortBy, sortOrder, data));\n this.setState({data})\n };\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.data !== prevProps.data) {\n this.setData(this.props.data)\n }\n this.updateHeaders();\n };\n\n render() {\n const {columns = [], onRowClick = NOOP, disabled, className, rowClassName, toKey = getId} = this.props;\n const {sortBy, sortOrder, data = [], editing} = this.state;\n return (\n <table className={classNames(`Table`, className)}>\n <thead>\n <tr ref={headers => this.headers = headers}>\n {columns.filter(it => !!it).map((column, i) => {\n const sortable = column.sortable || column.sortable == null;\n return (\n <th key={i} onClick={e => sortable && this.sort(e, column.field)}>\n <div className={classNames('hidden', sortable && 'sortable', sortBy === column.field && 'active')}>\n {column.header}\n {column.header && sortBy === column.field && sortOrder === SORT_ASC && (<MaterialIcon icon={'keyboard_arrow_up'}/>)}\n {column.header && sortBy === column.field && sortOrder === SORT_DESC && (<MaterialIcon icon={'keyboard_arrow_down'}/>)}\n </div>\n <div className={classNames('fixed', sortable && 'sortable', sortBy === column.field && 'active')}>\n {column.header}\n {column.header && sortBy === column.field && sortOrder === SORT_ASC && (<MaterialIcon icon={'keyboard_arrow_up'}/>)}\n {column.header && sortBy === column.field && sortOrder === SORT_DESC && (<MaterialIcon icon={'keyboard_arrow_down'}/>)}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.map(item => (<Row key={toKey(item)}\n item={item}\n disabled={disabled}\n editing={editing && editing.id === item.id ? editing : null}\n onClick={onRowClick}\n className={rowClassName}\n columns={columns}\n editingContext={this}\n />\n ))}\n </tbody>\n </table>\n );\n };\n\n componentWillUnmount() {\n clearInterval(this.updateHeadersInterval)\n };\n\n updateHeaders = () => {\n const headers = this.headers;\n\n const hidden = headers.querySelectorAll('.hidden');\n const fixed = headers.querySelectorAll('.fixed');\n for (let i = 0; i < hidden.length; i++) {\n fixed[i].style.width = hidden[i].offsetWidth + 'px'\n }\n };\n\n cancelEditing = () => this.setState({editing: false});\n\n setEditing = (item, columnIndex, field) => this.setState({editing: this.prepareEditing(item, field, columnIndex)});\n\n prepareEditing = (item, field, columnIndex) => ({id: item.id, value: item[field], columnIndex, item, field});\n\n handleInputChange = (event) => {\n const value = this.extractValue(event);\n this.setState({editing: {...this.state.editing, value}});\n };\n\n extractValue = (event) => {\n const target = event.target;\n return target.type === 'checkbox' ? target.checked : target.value;\n };\n\n selectNewValue = (value) => {\n this.setState({editing: {...this.state.editing, value}}, this.onFinishEditing);\n };\n\n onFinishEditing = (e) => {\n const editing = this.state.editing;\n if (editing.value === null)\n return;\n\n let value = editing.value;\n if (isString(value))\n value = value.trim();\n\n if (value === editing.item[editing.field])\n return this.cancelEditing();\n\n let updated = {\n ...editing.item,\n [editing.field]: value\n };\n this.props.onChange(updated, this.cancelEditing)\n };\n\n sort = (e, sortBy) => {\n preventDefault(e);\n if (this.state.sortBy === sortBy)\n this.setState({sortOrder: this.state.sortOrder === SORT_ASC ? SORT_DESC : SORT_ASC}, () => this.setData(this.state.data));\n else\n this.setState({sortOrder: SORT_ASC, sortBy}, () => this.setData(this.state.data));\n }\n}\n\nconst formatValue = (item, column) => {\n const value = (column.value !== undefined) ? column.value : item[column.field];\n if (column.formatter) {\n return column.formatter(value, item, column.format)\n } else {\n return '' + value\n }\n};\n\nconst Row = React.memo(({item, disabled, editing, onClick, className, columns, editingContext}) => {\n return <tr onClick={e => onClick(item)}\n className={classNames(disabled && disabled(item) && 'disabled', className && (isFunction(className) ? className(item) : className))}>\n {columns.filter(it => !!it).map((column, i) => {\n const isEditing = editing && editing.id === item.id && editing.columnIndex === i;\n const editable = isFunction(column.editable) ? column.editable(item) : !!column.editable;\n return (\n <td key={i}\n className={classNames(editable ? 'editable' : 'ro', isEditing && 'editing', column.className)}\n onClick={!isEditing && editable ? () => editingContext.setEditing(item, i, column.field) : NOOP}>\n {(isEditing || column.displayEditor) && !column.editor && (\n <TextField\n value={column.preEditor ? column.preEditor(editing.value) : editing.value}\n focused={true}\n onBlur={editingContext.cancelEditing}\n onChange={editingContext.handleInputChange}\n onKeyDown={e => {\n if (e.keyCode === 27/*escape*/) {\n preventDefault(e);\n editingContext.cancelEditing();\n }\n if (e.keyCode === 13/*enter*/) {\n preventDefault(e);\n editingContext.onFinishEditing();\n }\n }}\n />\n )}\n {(isEditing || column.displayEditor) && column.editor === 'Select' && (\n <AutocompleteSelect\n value={column.preEditor ? column.preEditor(editing.value) : editing.value}\n data={column.editorData}\n focused={true}\n withArrow={false}\n withFilter={false}\n selectedMode={'inline'}\n selectedComponent={column.editorSelectedComponent}\n mode={column.multiSelect ? MODE_MULTIPLE_MINI : MODE_DEFAULT}\n onChange={column.multiSelect && (column.onSelect ? (value => editingContext.selectNewValue(column.onSelect(value))) : editingContext.selectNewValue)}\n onSelect={!column.multiSelect && (column.onSelect ? (value => editingContext.selectNewValue(column.onSelect(value))) : editingContext.selectNewValue)}\n childComponent={column.editorChildCompononRowClickent}\n onCancel={editingContext.cancelEditing}\n prefilter={column.prefilter}\n />\n )}\n {(isEditing || column.displayEditor) && column.editor === 'Switch' && (\n <Switch onClick={e => {\n stopPropagation(e);\n preventDefault(e);\n editingContext.setState({\n editing: {\n ...editingContext.prepareEditing(item, column.field, i),\n value: !item[column.field]\n }\n }, editingContext.onFinishEditing);\n }} value={item[column.field]}/>\n )}\n {(isEditing || column.displayEditor) && isFunction(column.editor) && column.editor(item, editingContext.cancelEditing, isEditing)}\n {!isEditing && !column.displayEditor && formatValue(item, column)}\n </td>\n );\n })}\n </tr>\n }\n)\n\nTable.defaultProps = {\n columns: [],\n onRowClick: NOOP,\n toKey: getId,\n};\n\nif (window.isNotProductionEnvironment) {\n Table.propTypes = {\n className: PropTypes.string,\n rowClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n columns: PropTypes.arrayOf(PropTypes.shape({\n header: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n className: PropTypes.string,\n sortable: PropTypes.bool,\n field: PropTypes.string,\n formatter: PropTypes.func,\n editable: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n editor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n displayEditor: PropTypes.bool,\n preEditor: PropTypes.func,\n })),\n data: PropTypes.array,\n disabled: PropTypes.func,\n onRowClick: PropTypes.func,\n onChange: PropTypes.func,\n toKey: PropTypes.func,\n };\n}\n\n\nexport default Table;"],"names":["SORT_ASC","Comparators","SORT_DESC","getId","item","id","Table","props","setData","data","state","sortBy","sortOrder","sort","of","setState","updateHeaders","headers","hidden","querySelectorAll","fixed","i","length","style","width","offsetWidth","cancelEditing","editing","setEditing","columnIndex","field","prepareEditing","value","handleInputChange","event","extractValue","target","type","checked","selectNewValue","onFinishEditing","e","isString","trim","updated","onChange","preventDefault","updateHeadersInterval","setInterval","prevProps","prevState","snapshot","columns","onRowClick","NOOP","disabled","className","rowClassName","toKey","classNames","filter","it","map","column","sortable","header","clearInterval","Component","formatValue","undefined","formatter","format","Row","React","memo","onClick","editingContext","isFunction","isEditing","editable","displayEditor","editor","preEditor","keyCode","editorData","editorSelectedComponent","multiSelect","MODE_MULTIPLE_MINI","MODE_DEFAULT","onSelect","editorChildCompononRowClickent","prefilter","stopPropagation","defaultProps","window","isNotProductionEnvironment","propTypes","PropTypes","string","oneOfType","func","arrayOf","shape","element","bool","array"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../src/react-ui-basics/Table.js"],"sourcesContent":["import React, {Component} from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport './Table.css'\nimport PropTypes from \"prop-types\";\nimport TextField from \"./TextField\";\nimport AutocompleteSelect, {MODE_DEFAULT, MODE_MULTIPLE_MINI} from \"./AutocompleteSelect\";\nimport Switch from \"./Switch\";\nimport {Comparators, NOOP, classNames, preventDefault, stopPropagation, isFunction, isString, orNoop} from \"./Tools\";\nimport MaterialIcon from \"./MaterialIcon\";\n\nexport const SORT_ASC = Comparators.SORT_ASC;\nexport const SORT_DESC = Comparators.SORT_DESC;\n\nconst getId = item => item.id;\n\n\nclass Table extends Component {\n\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {\n const {sortBy, sortOrder = SORT_ASC} = this.props;\n this.setState({sortBy, sortOrder}, () => this.setData(this.props.data));\n\n this.updateHeaders();\n this.updateHeadersInterval = setInterval(this.updateHeaders, 1000)\n };\n\n setData = (data) => {\n const {sortBy, sortOrder, comparator} = this.state;\n if (sortBy) {\n let c = comparator\n if(c && sortOrder === SORT_DESC)\n c = Comparators.inverse(c)\n\n data.sort(c || Comparators.of(sortBy, sortOrder, data));\n this.setState({data}, () => {\n orNoop(this.props.onSortChange)(sortBy, sortOrder)\n })\n }\n };\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.data !== prevProps.data) {\n this.setData(this.props.data)\n }\n this.updateHeaders();\n };\n\n render() {\n const {columns = [], onRowClick = NOOP, disabled, className, rowClassName, toKey = getId} = this.props;\n const {sortBy, sortOrder, data = [], editing} = this.state;\n return (\n <table className={classNames(`Table`, className)}>\n <thead>\n <tr ref={headers => this.headers = headers}>\n {columns.filter(it => !!it).map((column, i) => {\n const sortable = column.sortable || column.sortable == null;\n return (\n <th key={i} onClick={e => sortable && this.sort(e, column.field, column.comparator)}>\n <div className={classNames('hidden', sortable && 'sortable', sortBy === column.field && 'active')}>\n {column.header}\n {column.header && sortBy === column.field && sortOrder === SORT_ASC && (<MaterialIcon icon={'keyboard_arrow_up'}/>)}\n {column.header && sortBy === column.field && sortOrder === SORT_DESC && (<MaterialIcon icon={'keyboard_arrow_down'}/>)}\n </div>\n <div className={classNames('fixed', sortable && 'sortable', sortBy === column.field && 'active')}>\n {column.header}\n {column.header && sortBy === column.field && sortOrder === SORT_ASC && (<MaterialIcon icon={'keyboard_arrow_up'}/>)}\n {column.header && sortBy === column.field && sortOrder === SORT_DESC && (<MaterialIcon icon={'keyboard_arrow_down'}/>)}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.map(item => (<Row key={toKey(item)}\n item={item}\n disabled={disabled}\n editing={editing && editing.id === item.id ? editing : null}\n onClick={onRowClick}\n className={rowClassName}\n columns={columns}\n editingContext={this}\n />\n ))}\n </tbody>\n </table>\n );\n };\n\n componentWillUnmount() {\n clearInterval(this.updateHeadersInterval)\n };\n\n updateHeaders = () => {\n const headers = this.headers;\n\n const hidden = headers.querySelectorAll('.hidden');\n const fixed = headers.querySelectorAll('.fixed');\n for (let i = 0; i < hidden.length; i++) {\n fixed[i].style.width = hidden[i].offsetWidth + 'px'\n }\n };\n\n cancelEditing = () => this.setState({editing: false});\n\n setEditing = (item, columnIndex, field) => this.setState({editing: this.prepareEditing(item, field, columnIndex)});\n\n prepareEditing = (item, field, columnIndex) => ({id: item.id, value: item[field], columnIndex, item, field});\n\n handleInputChange = (event) => {\n const value = this.extractValue(event);\n this.setState({editing: {...this.state.editing, value}});\n };\n\n extractValue = (event) => {\n const target = event.target;\n return target.type === 'checkbox' ? target.checked : target.value;\n };\n\n selectNewValue = (value) => {\n this.setState({editing: {...this.state.editing, value}}, this.onFinishEditing);\n };\n\n onFinishEditing = (e) => {\n const editing = this.state.editing;\n if (editing.value === null)\n return;\n\n let value = editing.value;\n if (isString(value))\n value = value.trim();\n\n if (value === editing.item[editing.field])\n return this.cancelEditing();\n\n let updated = {\n ...editing.item,\n [editing.field]: value\n };\n this.props.onChange(updated, this.cancelEditing)\n };\n\n sort = (e, sortBy, comparator) => {\n preventDefault(e);\n this.setState({\n sortOrder: this.state.sortBy === sortBy && this.state.sortOrder === SORT_ASC ? SORT_DESC : SORT_ASC,\n comparator,\n sortBy\n }, () => this.setData(this.state.data));\n }\n}\n\nconst formatValue = (item, column) => {\n const value = (column.value !== undefined) ? column.value : item[column.field];\n if (column.formatter) {\n return column.formatter(value, item, column.format)\n } else {\n return '' + value\n }\n};\n\nconst Row = React.memo(({item, disabled, editing, onClick, className, columns, editingContext}) => {\n return <tr onClick={e => onClick(item)}\n className={classNames(disabled && disabled(item) && 'disabled', className && (isFunction(className) ? className(item) : className))}>\n {columns.filter(it => !!it).map((column, i) => {\n const isEditing = editing && editing.id === item.id && editing.columnIndex === i;\n const editable = isFunction(column.editable) ? column.editable(item) : !!column.editable;\n return (\n <td key={i}\n className={classNames(editable ? 'editable' : 'ro', isEditing && 'editing', column.className)}\n onClick={!isEditing && editable ? () => editingContext.setEditing(item, i, column.field) : NOOP}>\n {(isEditing || column.displayEditor) && !column.editor && (\n <TextField\n value={column.preEditor ? column.preEditor(editing.value) : editing.value}\n focused={true}\n onBlur={editingContext.cancelEditing}\n onChange={editingContext.handleInputChange}\n onKeyDown={e => {\n if (e.keyCode === 27/*escape*/) {\n preventDefault(e);\n editingContext.cancelEditing();\n }\n if (e.keyCode === 13/*enter*/) {\n preventDefault(e);\n editingContext.onFinishEditing();\n }\n }}\n />\n )}\n {(isEditing || column.displayEditor) && column.editor === 'Select' && (\n <AutocompleteSelect\n value={column.preEditor ? column.preEditor(editing.value) : editing.value}\n data={column.editorData}\n focused={true}\n withArrow={false}\n withFilter={false}\n selectedMode={'inline'}\n selectedComponent={column.editorSelectedComponent}\n mode={column.multiSelect ? MODE_MULTIPLE_MINI : MODE_DEFAULT}\n onChange={column.multiSelect && (column.onSelect ? (value => editingContext.selectNewValue(column.onSelect(value))) : editingContext.selectNewValue)}\n onSelect={!column.multiSelect && (column.onSelect ? (value => editingContext.selectNewValue(column.onSelect(value))) : editingContext.selectNewValue)}\n childComponent={column.editorChildCompononRowClickent}\n onCancel={editingContext.cancelEditing}\n prefilter={column.prefilter}\n />\n )}\n {(isEditing || column.displayEditor) && column.editor === 'Switch' && (\n <Switch onClick={e => {\n stopPropagation(e);\n preventDefault(e);\n editingContext.setState({\n editing: {\n ...editingContext.prepareEditing(item, column.field, i),\n value: !item[column.field]\n }\n }, editingContext.onFinishEditing);\n }} value={item[column.field]}/>\n )}\n {(isEditing || column.displayEditor) && isFunction(column.editor) && column.editor(item, editingContext.cancelEditing, isEditing)}\n {!isEditing && !column.displayEditor && formatValue(item, column)}\n </td>\n );\n })}\n </tr>\n }\n)\n\nTable.defaultProps = {\n columns: [],\n onRowClick: NOOP,\n toKey: getId,\n};\n\nif (window.isNotProductionEnvironment) {\n Table.propTypes = {\n className: PropTypes.string,\n rowClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n columns: PropTypes.arrayOf(PropTypes.shape({\n header: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n className: PropTypes.string,\n sortable: PropTypes.bool,\n field: PropTypes.string,\n formatter: PropTypes.func,\n comparator: PropTypes.func,\n editable: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n editor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n displayEditor: PropTypes.bool,\n preEditor: PropTypes.func,\n })),\n data: PropTypes.array,\n disabled: PropTypes.func,\n onRowClick: PropTypes.func,\n onSortChange: PropTypes.func,\n onChange: PropTypes.func,\n toKey: PropTypes.func,\n };\n}\n\n\nexport default Table;"],"names":["SORT_ASC","Comparators","SORT_DESC","getId","item","id","Table","props","setData","data","state","sortBy","sortOrder","comparator","c","inverse","sort","of","setState","orNoop","onSortChange","updateHeaders","headers","hidden","querySelectorAll","fixed","i","length","style","width","offsetWidth","cancelEditing","editing","setEditing","columnIndex","field","prepareEditing","value","handleInputChange","event","extractValue","target","type","checked","selectNewValue","onFinishEditing","e","isString","trim","updated","onChange","preventDefault","updateHeadersInterval","setInterval","prevProps","prevState","snapshot","columns","onRowClick","NOOP","disabled","className","rowClassName","toKey","classNames","filter","it","map","column","sortable","header","clearInterval","Component","formatValue","undefined","formatter","format","Row","React","memo","onClick","editingContext","isFunction","isEditing","editable","displayEditor","editor","preEditor","keyCode","editorData","editorSelectedComponent","multiSelect","MODE_MULTIPLE_MINI","MODE_DEFAULT","onSelect","editorChildCompononRowClickent","prefilter","stopPropagation","defaultProps","window","isNotProductionEnvironment","propTypes","PropTypes","string","oneOfType","func","arrayOf","shape","element","bool","array"],"mappings":"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"}
|