UNPKG

@reaqtive/components

Version:

A react library to speed up the development of Qlik mash ups and data visualization apps

268 lines (226 loc) 7.33 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _q = require("@reaqtive/q"); var _layout = _interopRequireDefault(require("./layout")); var _index = require("../helpers/index"); var _rqtvDropdownButton = _interopRequireDefault(require("../../buttons/rqtv-dropdown-button")); var _rqtvListObject = _interopRequireDefault(require("../rqtv-list-object")); var _jsxFileName = "/Users/paolo_d/Projects/React/reaqtive/packages/components/src/lib/filters/rqtv-dropdown/index.js"; /** * RqtvDropdownFilter * It is a listbox shaped as a dropdown. * It has the same responsive behaviour as bootstrap dropdown when wrapped in a collapse * * You can twek its behavuiour using props. * * You can customize its styles using css or using props. */ const RqtvDropdownFilter = props => { const _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2.default)(_useState, 2), show = _useState2[0], setShow = _useState2[1]; const _useState3 = (0, _react.useState)(), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), justHidden = _useState4[0], setJustHidden = _useState4[1]; const dropdownEl = (0, _react.useRef)(); const toggleShow = () => { setShow(!show); }; const handleClick = () => { if (!justHidden) { toggleShow(); } }; const hideDropdownMenu = e => { setJustHidden(true); setShow(false); setTimeout(() => setJustHidden(false), 500); }; //const {qFieldExpr, qSortObject, qLabelExpr, showCaret, buttonStyle, buttonClassName,qState} = props const showCaret = props.showCaret, buttonStyle = props.buttonStyle, buttonClassName = props.buttonClassName, isNavItem = props.isNavItem; const qObjectDef = (0, _index.useMapPropsToDef)(props); const qButtonLabelExpr = props.qLabelExpr ? props.qLabelExpr : qObjectDef.label.qStringExpression.qExpr; return _react.default.createElement("div", { className: "dropdown ".concat(show ? 'show' : '', " rqtv-dropdown"), ref: dropdownEl, __source: { fileName: _jsxFileName, lineNumber: 42 }, __self: void 0 }, _react.default.createElement(_rqtvDropdownButton.default, { onClick: handleClick, show: show, qLabelExpr: qButtonLabelExpr, showCaret: showCaret, style: buttonStyle, className: buttonClassName, isNavItem: isNavItem, __source: { fileName: _jsxFileName, lineNumber: 43 }, __self: void 0 }), show && _react.default.createElement(_q.QGenericObject, { qObjectDef: qObjectDef, quickSelectionMode: props.quickSelectionMode, __source: { fileName: _jsxFileName, lineNumber: 53 }, __self: void 0 }, _react.default.createElement(_rqtvListObject.default, Object.assign({}, props, { __source: { fileName: _jsxFileName, lineNumber: 54 }, __self: void 0 }), _react.default.createElement(_layout.default, Object.assign({}, props, { show: show, hideDropdownMenu: hideDropdownMenu, __source: { fileName: _jsxFileName, lineNumber: 55 }, __self: void 0 }))))); }; RqtvDropdownFilter.propTypes = { /** * It allows to align the dropdown menu to the left or to rhe right of the button */ align: _propTypes.default.string, /** * The expression which will be used in the listbox. It can be a fieldname or a valid expression */ qFieldExpr: _propTypes.default.string.isRequired, /** * The expression of the title used in the dropdown button (by default it shows the name of the field and the count distinct of that * field or the selected value if there is only one selected value) */ qFieldLabelExpr: _propTypes.default.string, qSortObject: _propTypes.default.shape({ /** * Sorts the field values according to their logical state (selected, optional, alternative or excluded). */ qSortByState: _propTypes.default.number, /** * Sorts the field values by frequency (number of occurrences in the field). */ qSortByFrequency: _propTypes.default.number, /** * Sorts the field values by numeric value. */ qSortByNumeric: _propTypes.default.number, /** * Sorts the field by alphabetical order. */ qSortByAscii: _propTypes.default.number, /** * Sorts the field values by the initial load order. */ qSortByLoadOrder: _propTypes.default.number, /** * Sorts the field by expression. */ qSortByExpression: _propTypes.default.number, /** * Sort by expression. */ qExpression: _propTypes.default.shape({ qv: _propTypes.default.string }), qSortByGreyness: _propTypes.default.number }), /** * state of the listbox */ qState: _propTypes.default.string, /** * Show/hide the search input when the dropdown is open */ showSearch: _propTypes.default.bool, /** * Height of the dropdown when is open */ dropdownMenuHeight: _propTypes.default.number, /** * Width of the dropdown when is open */ dropdownMenuWidth: _propTypes.default.number, /** * Show/hide the caret in the dropdown button */ showCaret: _propTypes.default.bool, /** * style object to customize the dropdown button */ buttonStyle: _propTypes.default.object, /** * className for the dropdown button */ buttonClassName: _propTypes.default.string, /** * style object to customize the dropdown menu */ dropdownMenuStyle: _propTypes.default.object, /** * style object to customize the style of the dropdown menu items (it can be overwritten by selections color coding) */ dropdownMenuItemStyle: _propTypes.default.object, /** * Show/hide overflowX */ hideHorizontalScrollbar: _propTypes.default.bool, /** * if true uses Qlik Sense selection behaviour (begin selection and asks confirmation to apply), * if false it uses Qlik View selection behaviour (apply selections immediately) */ quickSelectionMode: _propTypes.default.bool, /** * if true uses toggle select */ toggle: _propTypes.default.bool, /** * if true selections are accepted when clicking away from the listbox in selection mode */ clickAwayAccept: _propTypes.default.bool }; RqtvDropdownFilter.defaultProps = { align: 'left', qSortObject: { qSortByState: 1, qSortByFrequency: 0, qSortByNumeric: 0, qSortByAscii: 0, qSortByLoadOrder: 0, qSortByExpression: 0 }, qState: "", showSearch: true, dropdownMenuHeight: 300, dropdownMenuWidth: 265, showCaret: true, buttonStyle: {}, buttonClassName: 'primary text-light', dropdownMenuStyle: {}, dropdownMenuItemStyle: {}, hideHorizontalScrollbar: false, quickSelectionMode: false, toggle: true, clickAwayAccept: false }; var _default = RqtvDropdownFilter; exports.default = _default;