import React, { FunctionComponent, Fragment, useState, useEffect } from 'react'; import { connect } from 'react-redux'; import { browserInfoConfig } from '../browserConfig'; import { TrackType } from '../track-panel/trackPanelConfig'; import { toggleBrowserNav, toggleGenomeSelector, selectBrowserTab, toggleDrawer } from '../browserActions'; import { ChrLocation } from '../browserState'; import { getBrowserNavOpened, getChrLocation, getBrowserActivated, getDefaultChrLocation, getGenomeSelectorActive, getDrawerOpened, getSelectedBrowserTab, getObjectInfo, getTrackPanelModalOpened } from '../browserSelectors'; import { RootState } from 'src/rootReducer'; import BrowserReset from '../browser-reset/BrowserReset'; import BrowserGenomeSelector from '../browser-genome-selector/BrowserGenomeSelector'; import BrowserTabs from '../browser-tabs/BrowserTabs'; import styles from './BrowserBar.scss'; type StateProps = { browserActivated: boolean; browserNavOpened: boolean; chrLocation: ChrLocation; defaultChrLocation: ChrLocation; drawerOpened: boolean; genomeSelectorActive: boolean; objectInfo: any; selectedBrowserTab: TrackType; trackPanelModalOpened: boolean; }; type DispatchProps = { selectBrowserTab: (selectedBrowserTab: TrackType) => void; toggleBrowserNav: () => void; toggleDrawer: (drawerOpened: boolean) => void; toggleGenomeSelector: (genomeSelectorActive: boolean) => void; }; type OwnProps = { dispatchBrowserLocation: (chrLocation: ChrLocation) => void; }; type BrowserBarProps = StateProps & DispatchProps & OwnProps; export const BrowserBar: FunctionComponent = ( props: BrowserBarProps ) => { const { navigator, reset } = browserInfoConfig; const { objectInfo } = props; const [showBrowserInfo, toggleShowBrowserInfo] = useState(true); const changeBrowserInfoToggle = () => { const [, chrStart, chrEnd] = props.defaultChrLocation; if ( props.genomeSelectorActive === true || (chrStart === 0 && chrEnd === 0) ) { toggleShowBrowserInfo(false); } else { toggleShowBrowserInfo(true); } }; useEffect(() => { changeBrowserInfoToggle(); }, [props.defaultChrLocation]); useEffect(() => { changeBrowserInfoToggle(); }, [props.genomeSelectorActive]); const getBrowserInfoClasses = () => { let classNames = styles.browserInfo; if (props.drawerOpened === true) { classNames += ` ${styles.browserInfoGreyed}`; } return classNames; }; const getBrowserNavIcon = () => { if (props.drawerOpened === true) { return navigator.icon.grey; } else if (props.browserNavOpened === true) { return navigator.icon.selected; } else { return navigator.icon.default; } }; const toggleNavigator = () => { if (props.drawerOpened === true) { return; } props.toggleBrowserNav(); }; return (
{showBrowserInfo ? (
{objectInfo.obj_symbol}
{objectInfo.stable_id}
{objectInfo.spliced_length}
{objectInfo.bio_type}
{objectInfo.strand} strand
) : null}
{props.genomeSelectorActive ? null : (
)}
); }; const mapStateToProps = (state: RootState): StateProps => ({ browserActivated: getBrowserActivated(state), browserNavOpened: getBrowserNavOpened(state), chrLocation: getChrLocation(state), defaultChrLocation: getDefaultChrLocation(state), drawerOpened: getDrawerOpened(state), genomeSelectorActive: getGenomeSelectorActive(state), objectInfo: getObjectInfo(state), selectedBrowserTab: getSelectedBrowserTab(state), trackPanelModalOpened: getTrackPanelModalOpened(state) }); const mapDispatchToProps: DispatchProps = { selectBrowserTab, toggleBrowserNav, toggleDrawer, toggleGenomeSelector }; export default connect( mapStateToProps, mapDispatchToProps )(BrowserBar);