import React from 'react'; import { Link } from 'react-router-dom'; import { connect } from 'react-redux'; import upperFirst from 'lodash/upperFirst'; import { RootState } from 'src/store'; import { EnsObject } from 'src/shared/state/ens-object/ensObjectTypes'; import { getBrowserActiveGenomeId } from '../../../browserSelectors'; import { updateTrackStatesAndSave } from 'src/content/app/browser/browserActions'; import { BrowserTrackStates } from 'src/content/app/browser/track-panel/trackPanelConfig'; import { getActiveGenomePreviouslyViewedObjects } from 'src/content/app/browser/track-panel/trackPanelSelectors'; import { fetchExampleEnsObjects } from 'src/shared/state/ens-object/ensObjectActions'; import { getExampleEnsObjects } from 'src/shared/state/ens-object/ensObjectSelectors'; import * as urlFor from 'src/shared/helpers/urlHelper'; import { closeTrackPanelModal } from '../../trackPanelActions'; import ImageButton from 'src/shared/components/image-button/ImageButton'; import { ReactComponent as EllipsisIcon } from 'static/img/track-panel/ellipsis.svg'; import { changeDrawerViewAndOpen } from 'src/content/app/browser/drawer/drawerActions'; import { PreviouslyViewedObject } from 'src/content/app/browser/track-panel/trackPanelState'; import analyticsTracking from 'src/services/analytics-service'; import { Status } from 'src/shared/types/status'; import styles from './TrackPanelBookmarks.scss'; export type TrackPanelBookmarksProps = { activeGenomeId: string | null; exampleEnsObjects: EnsObject[]; previouslyViewedObjects: PreviouslyViewedObject[]; fetchExampleEnsObjects: (objectId: string) => void; updateTrackStatesAndSave: (trackStates: BrowserTrackStates) => void; closeTrackPanelModal: () => void; changeDrawerViewAndOpen: (drawerView: string) => void; }; type ExampleLinksProps = Pick< TrackPanelBookmarksProps, 'exampleEnsObjects' | 'activeGenomeId' | 'closeTrackPanelModal' >; export const ExampleLinks = (props: ExampleLinksProps) => { return (
{props.exampleEnsObjects.map((exampleObject) => { const path = urlFor.browser({ genomeId: props.activeGenomeId, focus: exampleObject.object_id }); return (
{exampleObject.label} {upperFirst(exampleObject.object_type)}
); })}
); }; type PreviouslyViewedLinksProps = Pick< TrackPanelBookmarksProps, | 'previouslyViewedObjects' | 'updateTrackStatesAndSave' | 'closeTrackPanelModal' >; export const PreviouslyViewedLinks = (props: PreviouslyViewedLinksProps) => { const onLinkClick = (objectType: string, index: number) => { analyticsTracking.trackEvent({ category: 'recent_bookmark_link', label: objectType, action: 'clicked', value: index + 1 }); props.closeTrackPanelModal(); }; return (
{[...props.previouslyViewedObjects] .reverse() .map((previouslyViewedObject, index) => { const path = urlFor.browser({ genomeId: previouslyViewedObject.genome_id, focus: previouslyViewedObject.object_id }); return (
onLinkClick(previouslyViewedObject.object_type, index) } > {previouslyViewedObject.label} {upperFirst(previouslyViewedObject.object_type)}
); })}
); }; export const TrackPanelBookmarks = (props: TrackPanelBookmarksProps) => { const { previouslyViewedObjects, exampleEnsObjects, activeGenomeId, updateTrackStatesAndSave, closeTrackPanelModal } = props; const limitedPreviouslyViewedObjects = previouslyViewedObjects.slice(-20); const onEllipsisClick = () => { analyticsTracking.trackEvent({ category: 'drawer_open', label: 'recent_bookmarks', action: 'clicked', value: previouslyViewedObjects.length }); props.changeDrawerViewAndOpen('bookmarks'); }; return (

Bookmarks

{exampleEnsObjects.length ? ( <>
Example links
) : null} {limitedPreviouslyViewedObjects.length ? ( <>
Previously viewed {props.previouslyViewedObjects.length > 20 && ( )}
) : null}
); }; const mapStateToProps = (state: RootState) => ({ activeGenomeId: getBrowserActiveGenomeId(state), exampleEnsObjects: getExampleEnsObjects(state), previouslyViewedObjects: getActiveGenomePreviouslyViewedObjects(state) }); const mapDispatchToProps = { fetchExampleEnsObjects, updateTrackStatesAndSave, closeTrackPanelModal, changeDrawerViewAndOpen }; export default connect( mapStateToProps, mapDispatchToProps )(TrackPanelBookmarks);