import {h, VNode} from 'preact';
import MaterialComponent from '../Base/MaterialComponent';
export interface ILayoutGridInnerProps {}
export interface ILayoutGridInnerState {}
export class LayoutGridInner extends MaterialComponent<
ILayoutGridInnerProps,
ILayoutGridInnerState
> {
protected componentName = 'layout-grid__inner';
protected mdcProps = [];
protected materialDom(props) {
return (
{props.children}
);
}
}
type PhoneCols = 1 | 2 | 3 | 4;
type TabletCols = PhoneCols | 5 | 6 | 7 | 8;
type LayoutCols = TabletCols | 9 | 10 | 11 | 12;
export interface ILayoutGridCellProps {
cols?: LayoutCols;
desktopCols?: LayoutCols;
tabletCols?: TabletCols;
phoneCols?: PhoneCols;
order?: LayoutCols;
align?: 'top' | 'middle' | 'bottom';
}
export interface ILayoutGridCellState {}
export class LayoutGridCell extends MaterialComponent<
ILayoutGridCellProps,
ILayoutGridCellState
> {
protected static readonly propsDict = {
align: 'align',
cols: 'cols',
desktop: 'desktopCols',
order: 'order',
phone: 'phoneCols',
tablet: 'tabletCols'
};
protected static createClassName(props) {
const baseClass = 'mdc-layout-grid__cell--';
const classes: string[] = [];
if (props[LayoutGridCell.propsDict.cols]) {
classes.push(`${baseClass}span-${props[LayoutGridCell.propsDict.cols]}`);
}
if (props[LayoutGridCell.propsDict.desktop]) {
classes.push(
`${baseClass}span-${props[LayoutGridCell.propsDict.desktop]}-desktop`
);
}
if (props[LayoutGridCell.propsDict.tablet]) {
classes.push(
`${baseClass}span-${props[LayoutGridCell.propsDict.tablet]}-tablet`
);
}
if (props[LayoutGridCell.propsDict.phone]) {
classes.push(
`${baseClass}span-${props[LayoutGridCell.propsDict.phone]}-phone`
);
}
if (props[LayoutGridCell.propsDict.order]) {
classes.push(
`${baseClass}order-${props[LayoutGridCell.propsDict.order]}`
);
}
if (props[LayoutGridCell.propsDict.align]) {
classes.push(
`${baseClass}align-${props[LayoutGridCell.propsDict.align]}`
);
}
return classes.join(' ');
}
protected componentName = 'layout-grid__cell';
protected mdcProps = [];
public render(props): VNode {
const element = super.render(props);
// remove the extra attributes used for customising this element - keep the DOM clean
Object.keys(LayoutGridCell.propsDict).forEach(
key =>
// @ts-ignore
delete (element.props || element.attributes)[
LayoutGridCell.propsDict[key]
]
);
return element;
}
protected materialDom(props) {
return (
{props.children}
);
}
}
export interface ILayoutGridProps {}
export interface ILayoutGridState {}
export class LayoutGrid extends MaterialComponent<
ILayoutGridProps,
ILayoutGridState
> {
protected componentName = 'layout-grid';
protected mdcProps = [];
protected materialDom(props) {
return (
{props.children}
);
}
}
export default class extends LayoutGrid {
public static readonly Cell = LayoutGridCell;
public static readonly Inner = LayoutGridInner;
}