import * as React from "react"; import "./base.css"; import "./default.css"; import { RawCell, Cells, CodeCell, MarkdownCell } from "@nteract/stateful-components"; import CodeMirrorEditor from "@nteract/stateful-components/lib/inputs/connected-editors/codemirror"; import Prompt from "./Prompt"; import { promptContent } from "./PromptContent"; import { AzureTheme } from "./AzureTheme"; import { DndProvider } from "react-dnd"; import HTML5Backend from "react-dnd-html5-backend"; import { connect } from "react-redux"; import { Dispatch } from "redux"; import { actions, ContentRef } from "@nteract/core"; import { CellId } from "@nteract/commutable"; import loadTransform from "../NotebookComponent/loadTransform"; import DraggableCell from "./decorators/draggable"; import CellCreator from "./decorators/CellCreator"; import KeyboardShortcuts from "./decorators/kbd-shortcuts"; import CellToolbar from "./Toolbar"; import StatusBar from "./StatusBar"; import HijackScroll from "./decorators/hijack-scroll"; import { CellType } from "@nteract/commutable/src"; import "./NotebookRenderer.less"; import HoverableCell from "./decorators/HoverableCell"; import CellLabeler from "./decorators/CellLabeler"; <<<<<<< HEAD import MonacoEditor from "../MonacoEditor/MonacoEditor"; ======= import * as cdbActions from "../NotebookComponent/actions"; >>>>>>> master export interface NotebookRendererBaseProps { contentRef: any; } interface NotebookRendererDispatchProps { updateNotebookParentDomElt: (contentRef: ContentRef, parentElt: HTMLElement) => void; } type NotebookRendererProps = NotebookRendererBaseProps & NotebookRendererDispatchProps; interface PassedEditorProps { id: string; contentRef: ContentRef; editorFocused: boolean; value: string; channels: any; kernelStatus: string; theme: string; onChange: (text: string) => void; onFocusChange: (focused: boolean) => void; className: string; } const decorate = (id: string, contentRef: ContentRef, cell_type: CellType, children: React.ReactNode) => { const Cell = () => ( {children} ); Cell.defaultProps = { cell_type }; return ; }; class BaseNotebookRenderer extends React.Component { private notebookRendererRef = React.createRef(); constructor(props: NotebookRendererProps) { super(props); this.state = { hoveredCellId: undefined }; } componentDidMount() { loadTransform(this.props as any); this.props.updateNotebookParentDomElt(this.props.contentRef, this.notebookRendererRef.current); } componentDidUpdate() { this.props.updateNotebookParentDomElt(this.props.contentRef, this.notebookRendererRef.current); } componentWillUnmount() { this.props.updateNotebookParentDomElt(this.props.contentRef, undefined); } render(): JSX.Element { return ( <>
{{ code: ({ id, contentRef }: { id: CellId; contentRef: ContentRef }) => decorate( id, contentRef, "code", {{ editor: { codemirror: (props: PassedEditorProps) => ( // ) }, prompt: ({ id, contentRef }: { id: CellId; contentRef: ContentRef }) => ( {promptContent} ), toolbar: () => }} ), markdown: ({ id, contentRef }: { id: any; contentRef: ContentRef }) => decorate( id, contentRef, "markdown", {{ toolbar: () => }} ), raw: ({ id, contentRef }: { id: any; contentRef: ContentRef }) => decorate( id, contentRef, "raw", {{ toolbar: () => }} ) }}
); } } const makeMapDispatchToProps = (initialDispatch: Dispatch, initialProps: NotebookRendererBaseProps) => { const mapDispatchToProps = (dispatch: Dispatch) => { return { addTransform: (transform: React.ComponentType & { MIMETYPE: string }) => { return dispatch( actions.addTransform({ mediaType: transform.MIMETYPE, component: transform }) ); }, updateNotebookParentDomElt: (contentRef: ContentRef, parentElt: HTMLElement) => { return dispatch( cdbActions.UpdateNotebookParentDomElt({ contentRef, parentElt }) ); } }; }; return mapDispatchToProps; }; export default connect(null, makeMapDispatchToProps)(BaseNotebookRenderer);