import React, { useState, useRef } from 'react'; import find from 'lodash/find'; import filter from 'lodash/filter'; import classnames from 'classnames'; import { IconHome2, IconChevronRight, IconChevronLeft } from '@tabler/icons'; import { useSelector, useDispatch } from 'react-redux'; import { focusTab } from 'providers/ReduxStore/slices/tabs'; import NewRequest from 'components/Sidebar/NewRequest'; import CollectionToolBar from './CollectionToolBar'; import RequestTab from './RequestTab'; import StyledWrapper from './StyledWrapper'; const RequestTabs = () => { const dispatch = useDispatch(); const tabsRef = useRef(); const [newRequestModalOpen, setNewRequestModalOpen] = useState(false); const tabs = useSelector((state) => state.tabs.tabs); const activeTabUid = useSelector((state) => state.tabs.activeTabUid); const collections = useSelector((state) => state.collections.collections); const leftSidebarWidth = useSelector((state) => state.app.leftSidebarWidth); const screenWidth = useSelector((state) => state.app.screenWidth); const getTabClassname = (tab, index) => { return classnames("request-tab select-none", { 'active': tab.uid === activeTabUid, 'last-tab': tabs && tabs.length && (index === tabs.length - 1) }); }; const handleClick = (tab) => { dispatch(focusTab({ uid: tab.uid })); }; const createNewTab = () => setNewRequestModalOpen(true); if(!activeTabUid) { return null; } const activeTab = find(tabs, (t) => t.uid === activeTabUid); if(!activeTab) { return ( Something went wrong! ); } const activeCollection = find(collections, (c) => c.uid === activeTab.collectionUid); const collectionRequestTabs = filter(tabs, (t) => t.collectionUid === activeTab.collectionUid); const maxTablistWidth = screenWidth - leftSidebarWidth - 150; const tabsWidth = (collectionRequestTabs.length * 150) + 34; // 34: (+)icon const showChevrons = maxTablistWidth < tabsWidth; const leftSlide = () => { tabsRef.current.scrollBy({ left: -120, behavior: 'smooth' }); }; // todo: bring new tab to focus if its not in focus // tabsRef.current.scrollLeft const rightSlide = () => { tabsRef.current.scrollBy({ left: 120, behavior: 'smooth' }); }; const getRootClassname = () => { return classnames({ 'has-chevrons': showChevrons }); }; return ( {newRequestModalOpen && setNewRequestModalOpen(false)}/>} {collectionRequestTabs && collectionRequestTabs.length ? ( <>
    {showChevrons ? (
  • ) : null} {/* Moved to post mvp */} {/*
  • */}
    {collectionRequestTabs && collectionRequestTabs.length ? collectionRequestTabs.map((tab, index) => { return (
  • handleClick(tab)}>
  • ) }) : null}
    {showChevrons ? (
  • ) : null}
  • {/* Moved to post mvp */} {/*
  • */}
) : null}
); }; export default RequestTabs;