UNPKG

cozy-search

Version:

UI components about search bar and IA assistant

195 lines (153 loc) 8.97 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _twakeIcons = require("@linagora/twake-icons"); var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireWildcard(require("react")); var _reactRouterDom = require("react-router-dom"); var _cozyFlags = _interopRequireDefault(require("cozy-flags")); var _Buttons = _interopRequireDefault(require("cozy-ui/transpiled/react/Buttons")); var _Divider = _interopRequireDefault(require("cozy-ui/transpiled/react/Divider")); var _IconButton = _interopRequireDefault(require("cozy-ui/transpiled/react/IconButton")); var _LoadMore = _interopRequireDefault(require("cozy-ui/transpiled/react/LoadMore")); var _Typography = _interopRequireDefault(require("cozy-ui/transpiled/react/Typography")); var _Breakpoints = require("cozy-ui/transpiled/react/providers/Breakpoints"); var _twakeI18n = require("twake-i18n"); var _useConversation2 = _interopRequireDefault(require("../../hooks/useConversation")); var _useFetchConversations = _interopRequireDefault(require("../../hooks/useFetchConversations")); var _AssistantProvider = require("../AssistantProvider"); var _PrettyScrollbar = _interopRequireDefault(require("../Containers/PrettyScrollbar")); var _ConversationList = _interopRequireDefault(require("../Conversations/ConversationList")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var styles = { "sidebar-container": "styles__sidebar-container___155dK", "sidebar-overlay--mobile": "styles__sidebar-overlay--mobile___vvKHu", "menu-toggle-floating": "styles__menu-toggle-floating___2GTmQ" }; var Sidebar = function Sidebar(_ref) { var _cx; var className = _ref.className; var _useI18n = (0, _twakeI18n.useI18n)(), t = _useI18n.t; var _useParams = (0, _reactRouterDom.useParams)(), currentConversationId = _useParams.conversationId; var _useConversation = (0, _useConversation2.default)(), createNewConversation = _useConversation.createNewConversation, goToConversation = _useConversation.goToConversation; var _useAssistant = (0, _AssistantProvider.useAssistant)(), isOpenSearchConversation = _useAssistant.isOpenSearchConversation, setIsOpenSearchConversation = _useAssistant.setIsOpenSearchConversation; var _useBreakpoints = (0, _Breakpoints.useBreakpoints)(), isMobile = _useBreakpoints.isMobile; var _useState = (0, _react.useState)(!isMobile), _useState2 = (0, _slicedToArray2.default)(_useState, 2), sidebarOpen = _useState2[0], setSidebarOpen = _useState2[1]; var _useFetchConversation = (0, _useFetchConversations.default)(), conversations = _useFetchConversation.conversations, hasMore = _useFetchConversation.hasMore, fetchMore = _useFetchConversation.fetchMore; // When the sidebar is closed on mobile, the toggle sits over the scrolling // conversation and must read as a distinct floating button, not blend into // the text behind it. var isFloatingToggle = !sidebarOpen && isMobile; var onToggleSidebar = function onToggleSidebar() { setSidebarOpen(!sidebarOpen); }; var onToggleSearch = function onToggleSearch() { setIsOpenSearchConversation(!isOpenSearchConversation); if (isMobile) { setSidebarOpen(false); } }; var onCreateNewConversation = function onCreateNewConversation() { createNewConversation(); if (isMobile) { setSidebarOpen(false); } }; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)('u-flex u-flex-column u-h-100 u-bdw-1', className, (_cx = { 'u-w-auto': !sidebarOpen }, (0, _defineProperty2.default)(_cx, styles['sidebar-container'], sidebarOpen), (0, _defineProperty2.default)(_cx, 'u-left-0 u-pos-absolute', isMobile), _cx)) }, /*#__PURE__*/_react.default.createElement("div", { className: "u-flex u-flex-items-center u-flex-justify-between u-ph-1 u-pv-1" }, /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)('u-flex', (0, _defineProperty2.default)({ 'u-bdrs-circle': isFloatingToggle }, styles['menu-toggle-floating'], isFloatingToggle)) }, /*#__PURE__*/_react.default.createElement(_IconButton.default, { size: "medium", edge: "start", className: "u-bdrs-6", onClick: onToggleSidebar, "aria-label": t('assistant.sidebar.toggle_sidebar') }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, { icon: _twakeIcons.Menu, "aria-hidden": "true" }))), /*#__PURE__*/_react.default.createElement("div", null, sidebarOpen && (0, _cozyFlags.default)('cozy.assistant.search-conversation.enabled') && /*#__PURE__*/_react.default.createElement(_IconButton.default, { size: "medium", edge: "end", className: "u-bdrs-6", onClick: onToggleSearch, "aria-label": t('assistant.sidebar.toggle_search') }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, { icon: _twakeIcons.Magnifier, "aria-hidden": "true" })), sidebarOpen && isMobile && /*#__PURE__*/_react.default.createElement(_IconButton.default, { size: "medium", className: "u-bdrs-6", onClick: onToggleSidebar, "aria-label": t('assistant.sidebar.close_sidebar') }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, { icon: _twakeIcons.CrossSmall, "aria-hidden": "true" })))), /*#__PURE__*/_react.default.createElement("div", { className: "u-ph-1 u-pb-half" }, sidebarOpen ? /*#__PURE__*/_react.default.createElement(_Buttons.default, { className: "u-w-100 u-bdrs-6", label: t('assistant.sidebar.create_new'), startIcon: /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, { icon: _twakeIcons.Plus }), fullWidth: true, variant: "primary", onClick: onCreateNewConversation }) : isMobile ? null : /*#__PURE__*/_react.default.createElement(_IconButton.default, { size: "medium", className: "u-bg-primaryColor u-white u-bdrs-6", onClick: onCreateNewConversation, "aria-label": t('assistant.sidebar.create_new') }, /*#__PURE__*/_react.default.createElement(_twakeIcons.Icon, { icon: _twakeIcons.Plus, "aria-hidden": "true" }))), sidebarOpen && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Typography.default, { variant: "h6", className: "u-ph-1 u-pv-half" }, t('assistant.sidebar.recent_chats')), /*#__PURE__*/_react.default.createElement(_PrettyScrollbar.default, { className: "u-flex-auto u-ov-auto u-pb-half" }, /*#__PURE__*/_react.default.createElement(_ConversationList.default, { conversations: conversations, currentConversationId: currentConversationId, onOpenConversation: goToConversation }), hasMore && /*#__PURE__*/_react.default.createElement("div", { className: "u-flex u-flex-items-center u-flex-justify-center u-mt-1" }, /*#__PURE__*/_react.default.createElement(_LoadMore.default, { fetchMore: fetchMore, label: t('assistant.sidebar.conversation.actions.load_more') }))))), isMobile && sidebarOpen && /*#__PURE__*/_react.default.createElement("div", { className: styles['sidebar-overlay--mobile'], onClick: onToggleSidebar, "aria-hidden": "true" }), sidebarOpen && !isMobile && /*#__PURE__*/_react.default.createElement(_Divider.default, { orientation: "vertical", flexItem: true })); }; var _default = Sidebar; exports.default = _default;