import {omit} from "lodash"; import * as React from "react"; import {MessageCenter as DefaultMessageCenter} from "../../message"; import {ErrorCenter as DefaultErrorCenter, ErrorCenterStyle} from "./error-center"; import {Header, HeaderStyle} from "./header"; import {FieldStyle} from "../../entity"; import {ActionBarStyle, LineStyle, ListStyle, TopicDisplayerStyle} from "../../list"; import {MessageCenterStyle} from "../../message"; import {LoadingBarStyle} from "../../network"; import {AdvancedSearchStyle, FacetBoxStyle, FacetStyle, GroupComponentStyle, ListSummaryStyle} from "../../search"; import {injectStyle, StyleProvider} from "../../theming"; import styles from "./style/index.css"; export type LayoutStyle = Partial; export {DefaultErrorCenter as ErrorCenter} export {Header, HeaderStyle}; export interface LayoutProps { AppHeader?: ReactComponent; children?: React.ReactChildren; classNames?: LayoutStyle; ErrorCenter?: ReactComponent | null; Footer?: ReactComponent; LoadingBar?: ReactComponent; MenuLeft?: ReactComponent; MessageCenter?: ReactComponent; DevTools?: ReactComponent; OtherRootComponent?: ReactComponent; } const LayoutBase = injectStyle("layout", ({ AppHeader = Header, children, classNames, ErrorCenter = DefaultErrorCenter, Footer, LoadingBar, MenuLeft, MessageCenter = DefaultMessageCenter, DevTools, OtherRootComponent }: LayoutProps) => (
{LoadingBar ? : null} {ErrorCenter ? : null} {MenuLeft ? : null}
{children}
{Footer ?
: null} {DevTools ? : null} {OtherRootComponent ? : null}
)); export interface LayoutStyleProviderProps { actionBar?: ActionBarStyle; advancedSearch?: AdvancedSearchStyle; errorCenter?: ErrorCenterStyle; facet?: FacetStyle; facetBox?: FacetBoxStyle; field?: FieldStyle; form?: string; groupComponent?: GroupComponentStyle; header?: HeaderStyle; layout?: LayoutStyle; line?: LineStyle; list?: ListStyle; listSummary?: ListSummaryStyle; loadingBar?: LoadingBarStyle; messageCenter?: MessageCenterStyle; topicDisplayer?: TopicDisplayerStyle; } export function Layout(props: LayoutProps & {injectedStyle?: LayoutStyleProviderProps}) { return ( {props.children} ); }