UNPKG

@reaqtive/components

Version:

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

268 lines (237 loc) 9.12 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 _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread")); var _react = _interopRequireWildcard(require("react")); var _reactSpring = require("react-spring"); var _propTypes = _interopRequireDefault(require("prop-types")); var _layout = require("@reaqtive/layout"); var _searchResults = _interopRequireDefault(require("./search-results")); var _useDebounce = require("use-debounce"); var _q = require("@reaqtive/q"); var _index = require("../index"); var _jsxFileName = "/Users/paolo_d/Projects/React/reaqtive/packages/components/src/lib/rqtv-search-object/rqtv-search.js"; const AnimatedInput = props => { const expandFrom = props.expandFrom, focus = props.focus, width = props.width; const wrapperStyles = { transformOrigin: expandFrom, position: 'absolute', top: 0, left: 0, width: width, transformStyle: 'preserve-3d' }; const animatedProps = (0, _reactSpring.useSpring)({ from: { transform: "scaleX(0)", opacity: 0.5, transformStyle: 'preserve-3d' }, to: { transform: "scaleX(".concat(focus ? 1 : 0, ")"), opacity: focus ? 1 : 0.5 } }); //console.log(focus) return _react.default.createElement(_reactSpring.animated.div, { style: (0, _objectSpread2.default)({}, wrapperStyles, animatedProps), __source: { fileName: _jsxFileName, lineNumber: 30 }, __self: void 0 }, _react.default.createElement(_layout.SearchInput, Object.assign({}, props, { hideWhenDeleteString: false, __source: { fileName: _jsxFileName, lineNumber: 31 }, __self: void 0 }))); }; const RqtvSearch = props => { const _useState = (0, _react.useState)(), _useState2 = (0, _slicedToArray2.default)(_useState, 2), searchString = _useState2[0], setSearchString = _useState2[1]; const _useState3 = (0, _react.useState)(false), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), showResults = _useState4[0], setShowResults = _useState4[1]; const _useState5 = (0, _react.useState)({ qTop: 0, qLeft: 0, qHeight: 20, qWidth: 1 }), _useState6 = (0, _slicedToArray2.default)(_useState5, 2), qArea = _useState6[0], setQArea = _useState6[1]; const qSearchResultsHandler = (0, _q.useQGlobalSearch)(props.searchFields, searchString, qArea.qTop, 20); const qSearchResults = qSearchResultsHandler.qSearchResults; const searchResultsEl = (0, _react.useRef)(); const containerEl = (0, _react.useRef)(); (0, _layout.useOutsideEventListener)(containerEl, () => clearSearch(), showResults); const _useState7 = (0, _react.useState)({ top: 0, left: 0 }), _useState8 = (0, _slicedToArray2.default)(_useState7, 2), scrollPosition = _useState8[0], setScrollPosition = _useState8[1]; const _useState9 = (0, _react.useState)({ qcy: 1, qcx: 1 }), _useState10 = (0, _slicedToArray2.default)(_useState9, 2), size = _useState10[0], setSize = _useState10[1]; const getScrollData = qDisplayArea => { //setSearchOffset(qDisplayArea.qTop) setQArea({ qTop: qDisplayArea.qTop, qLeft: 0, qHeight: 20, qWidth: 1 }); //searchResultsEl.current.scrollTop=scrollPosition.top; }; const scrollHandler = (0, _q.useScrollHandler)(scrollPosition, qArea, size, searchResultsEl.current && searchResultsEl.current.clientHeight, 86, 0.2, getScrollData); const _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)( // function target => { setScrollPosition({ top: searchResultsEl.current.scrollTop, left: searchResultsEl.current.scrollLeft }); }, // delay in ms //props.debounceDelay 200), _useDebouncedCallback2 = (0, _slicedToArray2.default)(_useDebouncedCallback, 1), handleScroll = _useDebouncedCallback2[0]; const handleChangeString = string => { //console.log(1111, qSearchResultsHandler.qEngineError.qError) setSearchString(string); setShowResults(true); }; const clearSearch = () => { searchResultsEl.current.scrollTop = 0; setShowResults(false); setSearchString(); props.hideSearch(); }; const retry = () => { qSearchResultsHandler.search(); }; const acceptSearchResult = (searchTerm = searchString) => { qSearchResultsHandler.selectSearchResults(searchTerm, 0, clearSearch()); }; (0, _react.useEffect)(() => { setSize({ qcy: qSearchResults && qSearchResults.qTotalNumberOfGroups || 0, qcx: 1 }); }, [qSearchResults]); const searchResultGroupHeight = 88; const singleFieldItemHeight = 48; const manySearchResultHeight = qSearchResults && qSearchResults.qTotalNumberOfGroups === 1 && qSearchResults.qSearchGroupArray[0].qItems.length * singleFieldItemHeight + singleFieldItemHeight; const singleSearchResultHeight = qSearchResults && qSearchResults.qTotalNumberOfGroups === 1 && qSearchResults.qSearchGroupArray[0].qItems.length * singleFieldItemHeight + singleFieldItemHeight; const searchResultHeight = qSearchResults && qSearchResults.qTotalNumberOfGroups ? Math.min(isNaN(props.resultsHeight) ? Infinity : props.resultsHeight, qSearchResults && qSearchResults.qTotalNumberOfGroups > 1 ? qSearchResults.qTotalNumberOfGroups * searchResultGroupHeight : qSearchResults.qSearchGroupArray[0].qItems.length * singleFieldItemHeight + singleFieldItemHeight) : 0; const titleEl = (0, _react.useRef)(); const singleTitleHeight = titleEl.current && titleEl.current.offsetHeight; const dropdownMenuStyle = singleSearchResultHeight ? { minHeight: singleSearchResultHeight + (singleTitleHeight || 0) } : {}; return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement("div", { className: "rqtv-search dropdown ".concat(showResults ? 'show' : ''), ref: containerEl, __source: { fileName: _jsxFileName, lineNumber: 117 }, __self: void 0 }, _react.default.createElement(AnimatedInput, { searchAction: handleChangeString, clearSearchAction: () => clearSearch(), acceptSearchAction: acceptSearchResult, hideSearch: props.hideSearch, placeholder: props.placeholder, focus: props.show, expandFrom: props.expandFrom, width: props.width, __source: { fileName: _jsxFileName, lineNumber: 118 }, __self: void 0 }), _react.default.createElement("div", { className: "dropdown-menu ".concat(showResults ? 'show' : '', " search-results-container"), onScroll: e => handleScroll(e.target), ref: searchResultsEl //style={dropdownMenuStyle} , style: (0, _objectSpread2.default)({ //height:searchResultsEl.current&&searchResultsEl.current.clientHeight, //minHeight:searchResultsEl.current&&searchResultsEl.current.clientHeight, //maxHeight:searchResultsEl.current&&searchResultsEl.current.clientHeight, overflowY: 'auto' }, dropdownMenuStyle), __source: { fileName: _jsxFileName, lineNumber: 129 }, __self: void 0 }, searchString && _react.default.createElement(_index.RqtvRenderer, { loading: qSearchResultsHandler.qLoading, error: qSearchResultsHandler.qEngineError, noData: qSearchResults && qSearchResults.qSearchGroupArray.length === 0 || qSearchResultsHandler.qLoading === false && !qSearchResults, reload: retry, __source: { fileName: _jsxFileName, lineNumber: 141 }, __self: void 0 }, _react.default.createElement("div", { style: { width: props.resultsWidth, height: searchResultHeight, maxHeight: '100%' }, __source: { fileName: _jsxFileName, lineNumber: 147 }, __self: void 0 }, showResults && _react.default.createElement(_searchResults.default, { searchResults: qSearchResults, scrollHandler: scrollHandler, selectSearchResults: acceptSearchResult, titleEl: titleEl, singleFieldItemHeight: singleFieldItemHeight, __source: { fileName: _jsxFileName, lineNumber: 151 }, __self: void 0 })))))); }; RqtvSearch.propTypes = { resultshHeight: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), resultsWidth: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), searchFields: _propTypes.default.array, useBackdrop: _propTypes.default.bool, backdropStyle: _propTypes.default.object, placeholder: _propTypes.default.string }; RqtvSearch.defaultProps = { resultsHeight: 500, fields: [], usebackdrop: false, backdropStyle: {}, searchFields: [] }; var _default = RqtvSearch; exports.default = _default;