/**
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React, { useEffect } from 'react';
import { ApolloProvider } from '@apollo/client';
import { connect } from 'react-redux';
import { Link } from 'react-router-dom';
import useBrowserRouting from './hooks/useBrowserRouting';
import { client } from 'src/gql-client';
import analyticsTracking from 'src/services/analytics-service';
import * as urlFor from 'src/shared/helpers/urlHelper';
import { BreakpointWidth } from 'src/global/globalConfig';
import {
parseEnsObjectId,
buildFocusIdForUrl
} from 'src/shared/state/ens-object/ensObjectHelpers';
import { toggleTrackPanel } from 'src/content/app/browser/track-panel/trackPanelActions';
import { toggleDrawer } from './drawer/drawerActions';
import {
getBrowserNavOpenState,
getChrLocation,
getBrowserActivated,
getBrowserActiveGenomeId,
getBrowserQueryParams,
getBrowserActiveEnsObjectId,
getBrowserActiveEnsObjectIds
} from './browserSelectors';
import { getIsTrackPanelOpened } from './track-panel/trackPanelSelectors';
import { getIsDrawerOpened } from './drawer/drawerSelectors';
import { getExampleEnsObjects } from 'src/shared/state/ens-object/ensObjectSelectors';
import { getBreakpointWidth } from 'src/global/globalSelectors';
import BrowserBar from './browser-bar/BrowserBar';
import BrowserImage from './browser-image/BrowserImage';
import BrowserNavBar from './browser-nav/BrowserNavBar';
import TrackPanel from './track-panel/TrackPanel';
import TrackPanelBar from './track-panel/track-panel-bar/TrackPanelBar';
import TrackPanelTabs from './track-panel/track-panel-tabs/TrackPanelTabs';
import BrowserAppBar from './browser-app-bar/BrowserAppBar';
import Drawer from './drawer/Drawer';
import { StandardAppLayout } from 'src/shared/components/layout';
import BrowserInterstitial from './interstitial/BrowserInterstitial';
import { RootState } from 'src/store';
import { ChrLocation } from './browserState';
import { EnsObject } from 'src/shared/state/ens-object/ensObjectTypes';
import styles from './Browser.scss';
export type BrowserProps = {
activeGenomeId: string | null;
activeEnsObjectId: string | null;
browserActivated: boolean;
browserNavOpenState: boolean;
browserQueryParams: { [key: string]: string };
chrLocation: ChrLocation | null;
isDrawerOpened: boolean;
isTrackPanelOpened: boolean;
exampleEnsObjects: EnsObject[];
viewportWidth: BreakpointWidth;
toggleTrackPanel: (isOpen: boolean) => void;
toggleDrawer: (isDrawerOpened: boolean) => void;
};
export const Browser = (props: BrowserProps) => {
const { changeGenomeId } = useBrowserRouting();
const { isDrawerOpened } = props;
useEffect(() => {
const { activeGenomeId } = props;
if (!activeGenomeId) {
return;
}
analyticsTracking.setSpeciesDimension(activeGenomeId);
}, [props.activeGenomeId]);
const onSidebarToggle = () => {
props.toggleTrackPanel(!props.isTrackPanelOpened); // FIXME
};
const toggleDrawer = () => {
props.toggleDrawer(!props.isDrawerOpened);
};
const shouldShowNavBar =
props.browserActivated && props.browserNavOpenState && !isDrawerOpened;
const mainContent = (
<>
{shouldShowNavBar &&