Skip to content
Snippets Groups Projects
Commit 8f622001 authored by Santiago González's avatar Santiago González
Browse files

Layout and Page improvements

parent 89628534
No related branches found
No related tags found
No related merge requests found
import * as React from "react"; import * as React from "react";
import { Data } from "./core";
import { AppNavigator, AppNavigatorRoute } from "./ui/navigation/AppNavigator"; import { AppNavigator, AppNavigatorRoute } from "./ui/navigation/AppNavigator";
import { Course } from "./ui/pages/course/Course"; import { Course } from "./ui/pages/course/Course";
import { Courses } from "./ui/pages/courses/Courses"; import { Courses } from "./ui/pages/courses/Courses";
...@@ -58,6 +59,8 @@ const routes: Array<AppNavigatorRoute<any>> = [ ...@@ -58,6 +59,8 @@ const routes: Array<AppNavigatorRoute<any>> = [
} }
]; ];
Data.Store.INSTANCE = new Data.Store();
class App extends React.Component { class App extends React.Component {
public render() { public render() {
return <AppNavigator routes={routes} />; return <AppNavigator routes={routes} />;
......
...@@ -16,12 +16,4 @@ export class Store { ...@@ -16,12 +16,4 @@ export class Store {
public courseState = new CourseState(); public courseState = new CourseState();
public updateState = new UpdateState(); public updateState = new UpdateState();
public faqsState = new FAQState(); public faqsState = new FAQState();
constructor() {
if (_.isNil(Store.INSTANCE)) {
Store.INSTANCE = this;
}
return Store.INSTANCE;
}
} }
...@@ -10,5 +10,5 @@ export abstract class BaseComponent< ...@@ -10,5 +10,5 @@ export abstract class BaseComponent<
S extends BaseComponentState = BaseComponentState S extends BaseComponentState = BaseComponentState
> extends React.Component<P, S> { > extends React.Component<P, S> {
public state = {} as S; public state = {} as S;
protected store = new Data.Store(); protected store = Data.Store.INSTANCE;
} }
import * as _ from "lodash";
import * as React from "react"; import * as React from "react";
import styled, { css } from "styled-components"; import styled, { css } from "styled-components";
import { NavBar } from "../components/navbar/NavBar";
import { LayoutOptions } from "../navigation/Layout"; import { LayoutOptions } from "../navigation/Layout";
import { WiderThan } from "../stylesheets/Mixins"; import { WiderThan } from "../stylesheets/Mixins";
import { Breakpoint } from "../stylesheets/Variables"; import { Breakpoint } from "../stylesheets/Variables";
import { LayoutBase, LayoutBaseProps } from "./LayoutBase"; import { LayoutBase, LayoutBaseProps, LayoutBaseState } from "./LayoutBase";
export interface DefaultLayoutOptions extends LayoutOptions {} export interface DefaultLayoutHeaderOptions {
render: () => React.ReactNode;
}
export interface DefaultLayoutNavOptions {
render: () => React.ReactNode;
}
export interface DefaultLayoutOptions extends LayoutOptions {
header: Partial<DefaultLayoutHeaderOptions>;
navOptions: Partial<DefaultLayoutNavOptions>;
}
export interface DefaultLayoutProps< export interface DefaultLayoutProps<
L extends DefaultLayoutOptions = DefaultLayoutOptions L extends DefaultLayoutOptions = DefaultLayoutOptions
> extends LayoutBaseProps<L> {} > extends LayoutBaseProps<L> {}
export class DefaultLayout extends LayoutBase { export interface DefaultLayoutState extends LayoutBaseState {}
export class DefaultLayout<
P extends DefaultLayoutProps = DefaultLayoutProps,
S extends DefaultLayoutState = DefaultLayoutState
> extends LayoutBase<P, S> {
protected Container = styled.div` protected Container = styled.div`
height: 100%; height: 100%;
width: 100%; width: 100%;
...@@ -44,17 +60,20 @@ export class DefaultLayout extends LayoutBase { ...@@ -44,17 +60,20 @@ export class DefaultLayout extends LayoutBase {
`; `;
public renderContent() { public renderContent() {
const { children } = this.props; const { children, options } = this.props;
const { Container, NavBarWrapper } = this; const { Container, NavBarWrapper } = this;
return ( return (
<Container> <Container>
{children}
<NavBarWrapper> <NavBarWrapper>
<NavBar /> {!_.isNil(options) &&
!_.isNil(options.navOptions) &&
!_.isNil(options.navOptions.render) &&
options.navOptions.render()}
</NavBarWrapper> </NavBarWrapper>
{children}
</Container> </Container>
); );
} }
......
...@@ -16,4 +16,4 @@ export interface LayoutBaseState extends LayoutState {} ...@@ -16,4 +16,4 @@ export interface LayoutBaseState extends LayoutState {}
export abstract class LayoutBase< export abstract class LayoutBase<
P extends LayoutBaseProps = LayoutBaseProps, P extends LayoutBaseProps = LayoutBaseProps,
S extends LayoutBaseState = LayoutBaseState S extends LayoutBaseState = LayoutBaseState
> extends Layout {} > extends Layout<P, S> {}
...@@ -21,7 +21,7 @@ export interface AppNavigatorState { ...@@ -21,7 +21,7 @@ export interface AppNavigatorState {
page: typeof Page; page: typeof Page;
routeComponentProps: RouteComponentProps<any>; routeComponentProps: RouteComponentProps<any>;
layoutOptions: LayoutOptions; layoutOptions: Partial<LayoutOptions>;
routeProps: RouteProps[]; routeProps: RouteProps[];
} }
......
...@@ -2,17 +2,11 @@ import * as React from "react"; ...@@ -2,17 +2,11 @@ import * as React from "react";
export interface HeaderOptions {} export interface HeaderOptions {}
export interface NavOptions {
node: typeof React.Component;
}
export interface LayoutOptions { export interface LayoutOptions {
navOptions: NavOptions;
layout: typeof Layout; layout: typeof Layout;
} }
export interface LayoutProps<L extends LayoutOptions = LayoutOptions> export interface LayoutProps<L extends LayoutOptions = LayoutOptions> {
extends React.Props<Layout> {
options?: Partial<L>; options?: Partial<L>;
} }
......
...@@ -14,7 +14,7 @@ export abstract class Page< ...@@ -14,7 +14,7 @@ export abstract class Page<
P extends PageProps = PageProps, P extends PageProps = PageProps,
S extends PageState = PageState S extends PageState = PageState
> extends React.Component<P, S> { > extends React.Component<P, S> {
public static defaultLayoutOptions: LayoutOptions; public static defaultLayoutOptions: Partial<LayoutOptions>;
private layoutOptions: LayoutOptions; private layoutOptions: LayoutOptions;
......
...@@ -2,7 +2,7 @@ import { Observer } from "mobx-react"; ...@@ -2,7 +2,7 @@ import { Observer } from "mobx-react";
import * as React from "react"; import * as React from "react";
import { Data } from "../../core/Index"; import { Data } from "../../core/Index";
import { NavBar } from "../components/navbar/NavBar"; import { NavBar } from "../components/navbar/NavBar";
import { DefaultLayout } from "../layout/DefaultLayout"; import { DefaultLayout, DefaultLayoutOptions } from "../layout/DefaultLayout";
import { LayoutOptions } from "../navigation/Layout"; import { LayoutOptions } from "../navigation/Layout";
import { Page, PageProps, PageState } from "../navigation/Page"; import { Page, PageProps, PageState } from "../navigation/Page";
...@@ -15,10 +15,10 @@ export abstract class BasePage< ...@@ -15,10 +15,10 @@ export abstract class BasePage<
P extends BasePageProps = BasePageProps, P extends BasePageProps = BasePageProps,
S extends BasePageState = BasePageState S extends BasePageState = BasePageState
> extends Page<P, S> { > extends Page<P, S> {
public static defaultLayoutOptions: LayoutOptions = { public static defaultLayoutOptions: Partial<DefaultLayoutOptions> = {
layout: DefaultLayout, layout: DefaultLayout,
navOptions: { navOptions: {
node: NavBar render: () => <NavBar />
} }
}; };
......
...@@ -64,7 +64,7 @@ export class Course extends CourseBase { ...@@ -64,7 +64,7 @@ export class Course extends CourseBase {
${WiderThan( ${WiderThan(
Breakpoint.small, Breakpoint.small,
css` css`
background-color: #fafafa; background-color: white;
` `
)}; )};
`; `;
......
import * as _ from "lodash"; import * as _ from "lodash";
import * as React from "react"; import * as React from "react";
import styled from "styled-components"; import styled from "styled-components";
import { NavBar } from "../../components/navbar/NavBar";
import { DefaultLayout } from "../../layout/DefaultLayout";
import { LayoutOptions } from "../../navigation/Layout";
import { List } from "../../stylesheets/Mixins"; import { List } from "../../stylesheets/Mixins";
import { FAQItem } from "./faqitem/FAQItem"; import { FAQItem } from "./faqitem/FAQItem";
import { FAQsBase } from "./FAQsBase"; import { FAQsBase } from "./FAQsBase";
...@@ -20,10 +23,6 @@ export class FAQs extends FAQsBase { ...@@ -20,10 +23,6 @@ export class FAQs extends FAQsBase {
padding: 0 2em; padding: 0 2em;
max-width: 700px; max-width: 700px;
max-height: initial; max-height: initial;
a {
color: #236aa7;
}
`; `;
public renderContent() { public renderContent() {
......
...@@ -28,6 +28,10 @@ export class FAQItem extends FAQItemBase { ...@@ -28,6 +28,10 @@ export class FAQItem extends FAQItemBase {
protected FAQItemContent = styled.div` protected FAQItemContent = styled.div`
font-weight: lighter; font-weight: lighter;
text-align: center; text-align: center;
> a {
color: #236aa7;
}
`; `;
public render() { public render() {
......
import * as React from "react"; import * as React from "react";
import styled from "styled-components"; import styled from "styled-components";
import { NavBar } from "../../components/navbar/NavBar";
import { DefaultLayout } from "../../layout/DefaultLayout";
import { LayoutOptions } from "../../navigation/Layout";
import { Grid } from "../../stylesheets/Mixins"; import { Grid } from "../../stylesheets/Mixins";
import { HomeBase } from "./HomeBase"; import { HomeBase } from "./HomeBase";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment