import * as React from "react"; import { JunoClient, IGalleryItem } from "../../../Juno/JunoClient"; import { GalleryTab, SortBy, GalleryViewerComponentProps, GalleryViewerComponent } from "./GalleryViewerComponent"; import { NotebookViewerComponentProps, NotebookViewerComponent } from "../NotebookViewer/NotebookViewerComponent"; import * as GalleryUtils from "../../../Utils/GalleryUtils"; import Explorer from "../../Explorer"; export interface GalleryAndNotebookViewerComponentProps { container?: Explorer; junoClient: JunoClient; notebookUrl?: string; galleryItem?: IGalleryItem; isFavorite?: boolean; selectedTab: GalleryTab; sortBy: SortBy; searchText: string; } interface GalleryAndNotebookViewerComponentState { notebookUrl: string; galleryItem: IGalleryItem; isFavorite: boolean; selectedTab: GalleryTab; sortBy: SortBy; searchText: string; } export class GalleryAndNotebookViewerComponent extends React.Component< GalleryAndNotebookViewerComponentProps, GalleryAndNotebookViewerComponentState > { constructor(props: GalleryAndNotebookViewerComponentProps) { super(props); this.state = { notebookUrl: props.notebookUrl, galleryItem: props.galleryItem, isFavorite: props.isFavorite, selectedTab: props.selectedTab, sortBy: props.sortBy, searchText: props.searchText, }; } public render(): JSX.Element { if (this.state.notebookUrl) { const props: NotebookViewerComponentProps = { container: this.props.container, junoClient: this.props.junoClient, notebookUrl: this.state.notebookUrl, galleryItem: this.state.galleryItem, isFavorite: this.state.isFavorite, backNavigationText: GalleryUtils.getTabTitle(this.state.selectedTab), onBackClick: this.onBackClick, onTagClick: this.loadTaggedItems, }; return ; } const props: GalleryViewerComponentProps = { container: this.props.container, junoClient: this.props.junoClient, selectedTab: this.state.selectedTab, sortBy: this.state.sortBy, searchText: this.state.searchText, openNotebook: this.openNotebook, onSelectedTabChange: this.onSelectedTabChange, onSortByChange: this.onSortByChange, onSearchTextChange: this.onSearchTextChange, }; return ; } private onBackClick = (): void => { this.setState({ notebookUrl: undefined, }); }; private loadTaggedItems = (tag: string): void => { this.setState({ notebookUrl: undefined, searchText: tag, }); }; private openNotebook = (data: IGalleryItem, isFavorite: boolean): void => { this.setState({ notebookUrl: this.props.junoClient.getNotebookContentUrl(data.id), galleryItem: data, isFavorite, }); }; private onSelectedTabChange = (selectedTab: GalleryTab): void => { this.setState({ selectedTab, }); }; private onSortByChange = (sortBy: SortBy): void => { this.setState({ sortBy, }); }; private onSearchTextChange = (searchText: string): void => { this.setState({ searchText, }); }; }