/* @jsx createElement */ import { createElement } from './index'; import * as XSLFO from './index'; import * as uuid from 'uuid'; export class Report extends XSLFO.Component<{}> { render() { let pageSequences = []; let newChildren = XSLFO.Children.map(this.props.children, (child) => { if (child) { if (child.type !== PageSequence) { throw new Error("Unknown child type. needs PageSequence"); } let sequenceId = uuid.v4(); let { children, pageSize, ...props } = child.props; let s = { sequenceId, element: XSLFO.cloneElement(child, { sequenceId }), pageSize, props, body: undefined, header: undefined, footer: undefined }; XSLFO.Children.map(children, (flow) => { if (flow) { switch (flow.type) { case PageHeader: s.header = ; break; case PageFooter: s.footer = ; break; case PageContent: s.body = ; break; default: throw new Error("Unknown child type. needs PageFooter, PageHeader or PageContent"); } } }); pageSequences.push(s); } }); return {pageSequences.map(s => { return {[s.body, s.header, s.footer]} ; })} {pageSequences.map(s => s.element)} ; } } export class PageSequence extends XSLFO.Component<{ sequenceId: string }> { render() { return {this.props.children} ; } } export class PageContent extends XSLFO.Component { render() { return {this.props.children} ; } } export class PageHeader extends XSLFO.Component { render() { return {this.props.children} ; } } export class PageFooter extends XSLFO.Component { render() { return {this.props.children} ; } } export const PAGE_SIZES = { LETTER_PORTRAIT: { 'page-height': "11in", 'page-width': "8.5in" }, LETTER_LANDSCAPE: { 'page-height': "8.5in", 'page-width': "11in" } };