import * as moment from 'moment'; import * as React from 'react'; import { Col, Grid, Row } from 'react-bootstrap'; import { Observable } from 'rxjs'; import { BaseView, BaseViewProps } from '../../React'; import { PageFooterViewModel, ViewportDimensions } from './PageFooterViewModel'; export interface PageFooterProps { copyright?: string | boolean; copyrightYear?: number | string; copyrightUri?: string; footerContent?: any; hideDimensions?: boolean; responsive?: boolean; } export interface PageFooterViewProps extends BaseViewProps, PageFooterProps {} export class PageFooterView extends BaseView< PageFooterViewProps, PageFooterViewModel > { public static displayName = 'PageFooterView'; static defaultProps: Partial = {}; constructor(props: any) { super(props); this.bindObservableToCommand( Observable.merge( Observable.fromEvent(window, 'resize'), Observable.fromEvent(window, 'orientationchange'), ) .startWith(undefined as any) .map(() => this.getDimensions()), x => x.viewportDimensionsChanged, ); } private getDimensions(): ViewportDimensions { return { width: window.innerWidth, height: window.innerHeight, }; } updateOn(viewModel: Readonly) { return [viewModel.viewportDimensions.changed]; } render() { const { className, props, rest } = this.restProps(x => { const { copyright, copyrightYear, copyrightUri, footerContent, hideDimensions, responsive, } = x; return { copyright, copyrightYear, copyrightUri, footerContent, hideDimensions, responsive, }; }); const copyrightContent = this.wxr.renderConditional( props.copyright !== false, () => ( {`© ${this.renderCopyrightYear()} `} {this.renderCopyrightText()} ), ); const dimensions = this.wxr.renderConditional( props.hideDimensions !== true, () => ( {this.renderDimensions()} ), ); return (
{copyrightContent} {this.wxr.renderConditional( copyrightContent != null && dimensions != null, () => ( | ), )} {dimensions}
{props.footerContent && (
{props.footerContent}
)}
); } private renderCopyrightYear() { return this.props.copyrightYear || moment().format('YYYY'); } private renderCopyrightText() { return ( (this.props.copyrightUri && ( {this.props.copyright || ''} )) || this.props.copyright || '' ); } private renderDimensions() { const dim = this.viewModel.viewportDimensions.value; return this.wxr.renderConditional( dim == null || dim.width === 0 || dim.height === 0, () => 'Measuring...', () => `Viewport: ${dim.width}x${dim.height}`, ); } }