mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-04-22 01:24:21 +01:00
115 lines
3.2 KiB
TypeScript
115 lines
3.2 KiB
TypeScript
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 <NotebookViewerComponent {...props} />;
|
|
}
|
|
|
|
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 <GalleryViewerComponent {...props} />;
|
|
}
|
|
|
|
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,
|
|
});
|
|
};
|
|
}
|