[WIP] docs view
This commit is contained in:
		
				
					committed by
					
						
						fabioberger
					
				
			
			
				
	
			
			
			
						parent
						
							d56fb374a7
						
					
				
				
					commit
					8154209eab
				
			@@ -1,4 +1,4 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import React, { useEffect, useState } from 'react';
 | 
			
		||||
import { match } from 'react-router-dom';
 | 
			
		||||
import styled from 'styled-components';
 | 
			
		||||
 | 
			
		||||
@@ -20,7 +20,7 @@ import { Heading, Paragraph } from 'ts/components/text';
 | 
			
		||||
 | 
			
		||||
import { documentConstants } from 'ts/utils/document_meta_constants';
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
interface IDocsViewProps {
 | 
			
		||||
    history: History;
 | 
			
		||||
    location: Location;
 | 
			
		||||
    match: match<any>;
 | 
			
		||||
@@ -31,55 +31,51 @@ interface Props {
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface State {
 | 
			
		||||
interface IDocsViewState {
 | 
			
		||||
    title: string;
 | 
			
		||||
    Component: JSX.Element | string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class DocsView extends React.Component<Props, State> {
 | 
			
		||||
    public state = {
 | 
			
		||||
        title: '',
 | 
			
		||||
        Component: '',
 | 
			
		||||
        mdxComponents: {
 | 
			
		||||
            p: Paragraph,
 | 
			
		||||
            h1: LargeHeading,
 | 
			
		||||
            h2: H2,
 | 
			
		||||
            h3: H3,
 | 
			
		||||
            ol: TutorialSteps,
 | 
			
		||||
            ul: UnorderedList,
 | 
			
		||||
            code: Code,
 | 
			
		||||
            table: Table,
 | 
			
		||||
            hr: Separator,
 | 
			
		||||
            Notification,
 | 
			
		||||
            Tabs,
 | 
			
		||||
            TabList,
 | 
			
		||||
            Tab,
 | 
			
		||||
            TabPanel,
 | 
			
		||||
        },
 | 
			
		||||
    };
 | 
			
		||||
    public componentDidMount(): void {
 | 
			
		||||
export const DocsView: React.FC<IDocsViewProps> = props => {
 | 
			
		||||
    const [state, setState] = useState<IDocsViewState>({
 | 
			
		||||
        title: 'Loading',
 | 
			
		||||
        Component: Separator,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const { title, Component } = state;
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        // tslint:disable-next-line: no-console
 | 
			
		||||
        console.log(this.props.match.params.page);
 | 
			
		||||
        this._addComponentAsync(this.props.match.params.page);
 | 
			
		||||
    }
 | 
			
		||||
    public componentDidUpdate(prevProps: Props, prevState: State): void {
 | 
			
		||||
        if (prevProps.match.params.page !== this.props.match.params.page) {
 | 
			
		||||
            this._addComponentAsync(this.props.match.params.page);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public render(): React.ReactNode {
 | 
			
		||||
        const { title, Component, mdxComponents } = this.state;
 | 
			
		||||
        console.log(props.match.params.page);
 | 
			
		||||
        void addComponentAsync(props.match.params.page);
 | 
			
		||||
    }, [props.match.params.page]);
 | 
			
		||||
 | 
			
		||||
    const addComponentAsync = async (name: string) => {
 | 
			
		||||
        const component = await import(`../../../md/new-docs/${name}.mdx`);
 | 
			
		||||
        // if (component) {
 | 
			
		||||
        //     setState({
 | 
			
		||||
        //         title: component.meta.title,
 | 
			
		||||
        //         Component: component.default,
 | 
			
		||||
        //     });
 | 
			
		||||
        // }
 | 
			
		||||
        // @TODO: add error handling, loading
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <SiteWrap theme="light">
 | 
			
		||||
            <DocumentTitle {...documentConstants.DOCS} />
 | 
			
		||||
            <Hero isHome={false} title={title} />
 | 
			
		||||
                <Section maxWidth={'1030px'} isPadded={false} padding="0 0">
 | 
			
		||||
            <Section maxWidth="1030px" isPadded={false} padding="0 0">
 | 
			
		||||
                <Columns>
 | 
			
		||||
                    <aside>
 | 
			
		||||
                        <h3>Sidebar</h3>
 | 
			
		||||
                    </aside>
 | 
			
		||||
                    <ContentWrapper>
 | 
			
		||||
                            <MDXProvider components={mdxComponents}>{Component ? <Component /> : null}</MDXProvider>
 | 
			
		||||
                        <MDXProvider components={mdxComponents}>
 | 
			
		||||
                            {/*
 | 
			
		||||
                                // @ts-ignore */}
 | 
			
		||||
                            <Component />
 | 
			
		||||
                        </MDXProvider>
 | 
			
		||||
                        <HelpCallout />
 | 
			
		||||
                        <HelpfulCta />
 | 
			
		||||
                    </ContentWrapper>
 | 
			
		||||
@@ -87,23 +83,7 @@ export class DocsView extends React.Component<Props, State> {
 | 
			
		||||
            </Section>
 | 
			
		||||
        </SiteWrap>
 | 
			
		||||
    );
 | 
			
		||||
    }
 | 
			
		||||
    private async _addComponentAsync(name: string): Promise<void> {
 | 
			
		||||
        const component = await import(`../../../md/new-docs/${name}.mdx`).catch(e => {
 | 
			
		||||
            return null;
 | 
			
		||||
        });
 | 
			
		||||
        if (!component) {
 | 
			
		||||
            this.setState({
 | 
			
		||||
                Component: '',
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.setState({
 | 
			
		||||
            title: component.meta.title,
 | 
			
		||||
            Component: component.default,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const Columns = styled.div`
 | 
			
		||||
    display: grid;
 | 
			
		||||
@@ -139,3 +119,20 @@ const H3 = styled(Heading).attrs({
 | 
			
		||||
    size: 'default',
 | 
			
		||||
    asElement: 'h3',
 | 
			
		||||
})``;
 | 
			
		||||
 | 
			
		||||
const mdxComponents = {
 | 
			
		||||
    p: Paragraph,
 | 
			
		||||
    h1: LargeHeading,
 | 
			
		||||
    h2: H2,
 | 
			
		||||
    h3: H3,
 | 
			
		||||
    ol: TutorialSteps,
 | 
			
		||||
    ul: UnorderedList,
 | 
			
		||||
    code: Code,
 | 
			
		||||
    table: Table,
 | 
			
		||||
    hr: Separator,
 | 
			
		||||
    Notification,
 | 
			
		||||
    Tabs,
 | 
			
		||||
    TabList,
 | 
			
		||||
    Tab,
 | 
			
		||||
    TabPanel,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										141
									
								
								packages/website/ts/pages/docs/view_OLDER.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								packages/website/ts/pages/docs/view_OLDER.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import { match } from 'react-router-dom';
 | 
			
		||||
import styled from 'styled-components';
 | 
			
		||||
 | 
			
		||||
import { MDXProvider } from '@mdx-js/react';
 | 
			
		||||
 | 
			
		||||
import { Code } from 'ts/components/docs/code';
 | 
			
		||||
import { HelpCallout } from 'ts/components/docs/help_callout';
 | 
			
		||||
import { HelpfulCta } from 'ts/components/docs/helpful_cta';
 | 
			
		||||
import { Hero } from 'ts/components/docs/hero';
 | 
			
		||||
import { Notification } from 'ts/components/docs/notification';
 | 
			
		||||
import { SiteWrap } from 'ts/components/docs/siteWrap';
 | 
			
		||||
import { Table } from 'ts/components/docs/table';
 | 
			
		||||
import { Tab, TabList, TabPanel, Tabs } from 'ts/components/docs/tabs';
 | 
			
		||||
import { TutorialSteps } from 'ts/components/docs/tutorial_steps';
 | 
			
		||||
import { UnorderedList } from 'ts/components/docs/unordered_list';
 | 
			
		||||
import { DocumentTitle } from 'ts/components/document_title';
 | 
			
		||||
import { Section } from 'ts/components/newLayout';
 | 
			
		||||
import { Heading, Paragraph } from 'ts/components/text';
 | 
			
		||||
 | 
			
		||||
import { documentConstants } from 'ts/utils/document_meta_constants';
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
    history: History;
 | 
			
		||||
    location: Location;
 | 
			
		||||
    match: match<any>;
 | 
			
		||||
    theme: {
 | 
			
		||||
        bgColor: string;
 | 
			
		||||
        textColor: string;
 | 
			
		||||
        linkColor: string;
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface State {
 | 
			
		||||
    title: string;
 | 
			
		||||
    Component: JSX.Element | string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class DocsView extends React.Component<Props, State> {
 | 
			
		||||
    public state = {
 | 
			
		||||
        title: '',
 | 
			
		||||
        Component: '',
 | 
			
		||||
        mdxComponents: {
 | 
			
		||||
            p: Paragraph,
 | 
			
		||||
            h1: LargeHeading,
 | 
			
		||||
            h2: H2,
 | 
			
		||||
            h3: H3,
 | 
			
		||||
            ol: TutorialSteps,
 | 
			
		||||
            ul: UnorderedList,
 | 
			
		||||
            code: Code,
 | 
			
		||||
            table: Table,
 | 
			
		||||
            hr: Separator,
 | 
			
		||||
            Notification,
 | 
			
		||||
            Tabs,
 | 
			
		||||
            TabList,
 | 
			
		||||
            Tab,
 | 
			
		||||
            TabPanel,
 | 
			
		||||
        },
 | 
			
		||||
    };
 | 
			
		||||
    public componentDidMount(): void {
 | 
			
		||||
        // tslint:disable-next-line: no-console
 | 
			
		||||
        console.log(this.props.match.params.page);
 | 
			
		||||
        this._addComponentAsync(this.props.match.params.page);
 | 
			
		||||
    }
 | 
			
		||||
    public componentDidUpdate(prevProps: Props, prevState: State): void {
 | 
			
		||||
        if (prevProps.match.params.page !== this.props.match.params.page) {
 | 
			
		||||
            this._addComponentAsync(this.props.match.params.page);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public render(): React.ReactNode {
 | 
			
		||||
        const { title, Component, mdxComponents } = this.state;
 | 
			
		||||
        return (
 | 
			
		||||
            <SiteWrap theme="light">
 | 
			
		||||
                <DocumentTitle {...documentConstants.DOCS} />
 | 
			
		||||
                <Hero isHome={false} title={title} />
 | 
			
		||||
                <Section maxWidth={'1030px'} isPadded={false} padding="0 0">
 | 
			
		||||
                    <Columns>
 | 
			
		||||
                        <aside>
 | 
			
		||||
                            <h3>Sidebar</h3>
 | 
			
		||||
                        </aside>
 | 
			
		||||
                        <ContentWrapper>
 | 
			
		||||
                            <MDXProvider components={mdxComponents}>{Component ? <Component /> : null}</MDXProvider>
 | 
			
		||||
                            <HelpCallout />
 | 
			
		||||
                            <HelpfulCta />
 | 
			
		||||
                        </ContentWrapper>
 | 
			
		||||
                    </Columns>
 | 
			
		||||
                </Section>
 | 
			
		||||
            </SiteWrap>
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
    private async _addComponentAsync(name: string): Promise<void> {
 | 
			
		||||
        const component = await import(`../../../md/new-docs/${name}.mdx`).catch(e => {
 | 
			
		||||
            return null;
 | 
			
		||||
        });
 | 
			
		||||
        if (!component) {
 | 
			
		||||
            this.setState({
 | 
			
		||||
                Component: '',
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.setState({
 | 
			
		||||
            title: component.meta.title,
 | 
			
		||||
            Component: component.default,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Columns = styled.div`
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: 230px 1fr;
 | 
			
		||||
    grid-column-gap: 118px;
 | 
			
		||||
    grid-row-gap: 30px;
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
const ContentWrapper = styled.article`
 | 
			
		||||
    min-height: 300px;
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
const Separator = styled.hr`
 | 
			
		||||
    border-width: 0 0 1px;
 | 
			
		||||
    border-color: #e4e4e4;
 | 
			
		||||
    height: 0;
 | 
			
		||||
    margin-top: 60px;
 | 
			
		||||
    margin-bottom: 60px;
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
const LargeHeading = styled(Heading).attrs({
 | 
			
		||||
    asElement: 'h1',
 | 
			
		||||
})`
 | 
			
		||||
    font-size: 2.125rem !important;
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
const H2 = styled(Heading).attrs({
 | 
			
		||||
    size: 'default',
 | 
			
		||||
    asElement: 'h2',
 | 
			
		||||
})``;
 | 
			
		||||
 | 
			
		||||
const H3 = styled(Heading).attrs({
 | 
			
		||||
    size: 'default',
 | 
			
		||||
    asElement: 'h3',
 | 
			
		||||
})``;
 | 
			
		||||
		Reference in New Issue
	
	Block a user