37 lines
874 B
TypeScript
37 lines
874 B
TypeScript
import { AbstractElement } from './abstract-element';
|
|
import jsPDF from 'jspdf';
|
|
|
|
export class Column extends AbstractElement {
|
|
public elements: AbstractElement[] = [];
|
|
|
|
constructor(x: number, y: number, elements: AbstractElement[]) {
|
|
super(x, y);
|
|
this.elements = elements;
|
|
}
|
|
|
|
public render(doc: jsPDF, _maxWidth?: number): jsPDF {
|
|
const elements = this.elements ?? [];
|
|
|
|
let currentY = this.y;
|
|
for (let i = 0; i < elements.length; i++) {
|
|
const element = elements[i];
|
|
element.x = this.x;
|
|
element.y = currentY;
|
|
element.render(doc);
|
|
currentY += element.getHeight(doc) + 2;
|
|
}
|
|
return doc;
|
|
}
|
|
|
|
public getHeight(doc): number {
|
|
return this.elements
|
|
.map((e) => e.getHeight(doc))
|
|
.reduce((p, c, i) => {
|
|
if (i === 0) {
|
|
return c;
|
|
}
|
|
return p + c + 2;
|
|
});
|
|
}
|
|
}
|