import React from 'react';
import clsx from 'classnames';
import { get, isFunction } from 'lodash';
import { x } from '@xstyled/emotion';
import { css } from '@emotion/css';
import { Box, BoxProps } from '../lib/layout/Box';
import { Group, GroupProps } from '../lib/layout/Group';
export interface PaperTemplateProps extends BoxProps {
primaryColor?: string;
secondaryColor?: string;
children?: React.ReactNode;
}
export function PaperTemplate({
primaryColor,
secondaryColor,
children,
...restProps
}: PaperTemplateProps) {
return (
{children}
);
}
interface PaperTemplateBigTitleProps {
title: string;
}
PaperTemplate.BigTitle = ({ title }: PaperTemplateBigTitleProps) => {
return (
{title}
);
};
interface PaperTemplateLogoProps {
logoUri: string;
}
PaperTemplate.Logo = ({ logoUri }: PaperTemplateLogoProps) => {
return (
);
};
interface PaperTemplateTableProps {
columns: Array<{
accessor: string | ((data: Record) => JSX.Element);
label: string;
value?: JSX.Element;
align?: 'left' | 'center' | 'right';
}>;
data: Array>;
}
PaperTemplate.Table = ({ columns, data }: PaperTemplateTableProps) => {
return (
{columns.map((col, index) => (
{col.label}
))}
{data.map((_data: any) => (
{columns.map((column, index) => (
{isFunction(column?.accessor)
? column?.accessor(_data)
: get(_data, column.accessor)}
))}
))}
);
};
export enum PaperTemplateTotalBorder {
Gray = 'gray',
Dark = 'dark',
}
PaperTemplate.Totals = ({ children }: { children: React.ReactNode }) => {
return (
{children}
);
};
const totalBottomBordered = css`
border-bottom: 1px solid #000;
`;
const totalBottomGrayBordered = css`
border-bottom: 1px solid #dadada;
`;
PaperTemplate.TotalLine = ({
label,
amount,
border,
style,
}: {
label: string;
amount: string;
border?: PaperTemplateTotalBorder;
style?: any;
}) => {
return (
{label}
{amount}
);
};
PaperTemplate.AddressesGroup = (props: GroupProps) => {
return (
div {
flex: 1;
}
`}
/>
);
};
PaperTemplate.Address = ({ children }: { children: React.ReactNode }) => {
return {children};
};
PaperTemplate.Statement = ({
label,
children,
}: {
label: string;
children: React.ReactNode;
}) => {
return (
{label && {label}}
{children}
);
};
PaperTemplate.TermsList = ({ children }: { children: React.ReactNode }) => {
return (
{children}
);
};
PaperTemplate.TermsItem = ({
label,
children,
}: {
label: string;
children: React.ReactNode;
}) => {
return (
{label}
{children}
);
};