UNPKG

@reaqtive/components

Version:

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

259 lines (236 loc) 7.17 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "RqtvSideMenuMain", { enumerable: true, get: function () { return _layout.SideMenuMain; } }); exports.RqtvSideMenu = void 0; var _react = _interopRequireWildcard(require("react")); var _uuid = require("uuid"); var _propTypes = _interopRequireDefault(require("prop-types")); var _layout = require("@reaqtive/layout"); var _index = require("../index"); var _rqtvAppContext = require("../contexts/rqtv-app-context"); var _pageList = _interopRequireDefault(require("./page-list")); var _jsxFileName = "/Users/paolo_d/Projects/React/reaqtive/packages/components/src/lib/side-menu/index.js"; /** * RqtvSideMenu * * It returns toggleable fixed-positioned side menu displayed on the left of the page. * Default tabs are the list of pages of the app and a multibox with filters. * The open/close state has to be managed in parent component * */ const RqtvSideMenu = props => { const sideMenuFieldsMatch = props.sideMenuFieldsMatch, useFieldList = props.useFieldList, usePageList = props.usePageList, useTabs = props.useTabs, alwaysShowBackdrop = props.alwaysShowBackdrop, clickAwayAccept = props.clickAwayAccept; const rqtvApp = (0, _react.useContext)(_rqtvAppContext.RqtvAppContext); const fieldList = sideMenuFieldsMatch ? rqtvApp && rqtvApp.filterFieldList(rqtvApp.enhancedFieldList, sideMenuFieldsMatch) : rqtvApp && rqtvApp.sideMenuFieldList; const pages = rqtvApp && rqtvApp.pages; const showFieldList = Boolean(fieldList && useFieldList); const showPageList = Boolean(usePageList && pages); const tabsQty = 1 * showPageList + 1 * Number(showFieldList) + props.additionalTabs.length; const tabFlexBasis = 1 / tabsQty; return _react.default.createElement(_layout.SideMenu, { className: "rqtv-side-menu", isOpen: props.isOpen, onClose: props.onClose, alwaysShowBackdrop: alwaysShowBackdrop, __source: { fileName: _jsxFileName, lineNumber: 34 }, __self: void 0 }, useTabs ? _react.default.createElement(_layout.Tabs, { animatedTabs: true, style: { height: '100%' }, __source: { fileName: _jsxFileName, lineNumber: 36 }, __self: void 0 }, _react.default.createElement(_layout.TabList, { useIcons: true, __source: { fileName: _jsxFileName, lineNumber: 37 }, __self: void 0 }, showPageList && _react.default.createElement(_layout.Tab, { label: "pages", icon: _react.default.createElement(_layout.LuiIcon, { iconType: "sheet", __source: { fileName: _jsxFileName, lineNumber: 38 }, __self: void 0 }), style: { flexBasis: tabFlexBasis }, __source: { fileName: _jsxFileName, lineNumber: 38 }, __self: void 0 }), showFieldList && _react.default.createElement(_layout.Tab, { label: "fields", icon: _react.default.createElement(_layout.LuiIcon, { iconType: "field", __source: { fileName: _jsxFileName, lineNumber: 39 }, __self: void 0 }), style: { flexBasis: tabFlexBasis }, __source: { fileName: _jsxFileName, lineNumber: 39 }, __self: void 0 }), props.additionalTabs && props.additionalTabs.map(additionalTab => _react.default.createElement(_layout.Tab, { key: (0, _uuid.v4)(), label: additionalTab.label, icon: additionalTab.icon, style: { flexBasis: tabFlexBasis }, __source: { fileName: _jsxFileName, lineNumber: 40 }, __self: void 0 }))), _react.default.createElement(_layout.TabPanels, { __source: { fileName: _jsxFileName, lineNumber: 42 }, __self: void 0 }, showPageList && _react.default.createElement(TabPanel, { __source: { fileName: _jsxFileName, lineNumber: 43 }, __self: void 0 }, _react.default.createElement(_pageList.default, { pages: pages, __source: { fileName: _jsxFileName, lineNumber: 43 }, __self: void 0 })), showFieldList && fieldList ? _react.default.createElement(FieldList, { fieldList: fieldList.map(field => { return { qFieldExpr: field.qName, label: field.qName, hasSelections: field.selectedCount > 0, toggle: !field.neverToggle, quickSelectionMode: field.neverToggle }; }), clickAwayAccept: clickAwayAccept, __source: { fileName: _jsxFileName, lineNumber: 45 }, __self: void 0 }) : _react.default.createElement(_react.default.Fragment, null), props.additionalTabs && props.additionalTabs.map(additionalTab => _react.default.createElement(TabPanel, { key: (0, _uuid.v4)(), __source: { fileName: _jsxFileName, lineNumber: 56 }, __self: void 0 }, additionalTab.tab)))) : props.children); }; exports.RqtvSideMenu = RqtvSideMenu; const TabPanel = props => props.children; const FieldList = props => { const height = props.tabsEl.current.offsetHeight - props.tabListEl.current.offsetHeight; const width = props.tabsEl.current.offsetHeight - props.tabListEl.current.offsetWidth; return _react.default.createElement("div", { className: "hide-scrollbar", style: { height: height }, __source: { fileName: _jsxFileName, lineNumber: 72 }, __self: void 0 }, _react.default.createElement(_index.RqtvMultibox, { fieldList: props.fieldList, fieldHeight: 400, clickAwayAccept: props.clickAwayAccept, __source: { fileName: _jsxFileName, lineNumber: 73 }, __self: void 0 })); }; RqtvSideMenu.propTypes = { /** * open/close the menu */ isOpen: _propTypes.default.bool.isRequired, /** * function to set isOpen to false */ onClose: _propTypes.default.func.isRequired, /** * show/hide the page list tab */ usePageList: _propTypes.default.bool, /** * show hide the multibox */ useFieldList: _propTypes.default.bool, /** * if true it uses the the tabs to display different views in the side menu, if false it just shows its children */ useTabs: _propTypes.default.bool, /** * * if tru backdrop is always shown when RqtvSideMenu is open */ alwaysShowBackdrop: _propTypes.default.bool, /** * * additional tabs to display after pages and filters */ additionalTabs: _propTypes.default.arrayOf(_propTypes.default.shape({ label: _propTypes.default.string, icon: _propTypes.default.element, tab: _propTypes.default.element })), /** * if true selections are accepted when clicking away from an active listbox in selection mode in the multibox */ clickAwayAccept: _propTypes.default.bool }; RqtvSideMenu.defaultProps = { usePageList: false, useFieldList: false, useTabs: false, alwaysShowBackdrop: false, additionalTabs: [], clickAwayAccept: false };