Skip to content

Commit 9ff169d

Browse files
committed
feat(generate): allow multiple pptxgenjs creates in callback
1 parent c0495d9 commit 9ff169d

File tree

2 files changed

+45
-10
lines changed

2 files changed

+45
-10
lines changed

__tests__/generate-pptxgenjs-image.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,15 @@ test('insert an image with pptxgenjs on a template slide', async () => {
1919
x: 1,
2020
y: 2,
2121
});
22+
pptxGenJSSlide.addImage({
23+
path: `${__dirname}/images/test.svg`,
24+
x: 1,
25+
y: 2,
26+
});
2227
});
2328
});
2429

2530
const result = await pres.write(`generate-pptxgenjs-image.test.pptx`);
2631

27-
expect(result.images).toBe(1);
32+
expect(result.images).toBe(3);
2833
});

src/helper/generate/generate-pptxgenjs.ts

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,44 +47,74 @@ export default class GeneratePptxGenJs implements IGenerator {
4747
slide: ISlide,
4848
) {
4949
generate.forEach((generateElement) => {
50-
generateElement.objectName = generateElement.objectName || randomUUID();
5150
generateElement.tmpSlideNumber = this.countSlides;
51+
52+
const addedObjects = <string[]>[];
53+
5254
generateElement.callback(
53-
this.supportedSlideItems(pgenSlide, generateElement.objectName),
55+
this.supportedSlideItems(pgenSlide, generateElement, addedObjects),
5456
this.generator,
5557
);
56-
slide.addElement(
57-
this.tmpFile,
58-
this.countSlides,
59-
generateElement.objectName,
60-
);
58+
59+
addedObjects.forEach((addedObjectName) => {
60+
slide.addElement(this.tmpFile, this.countSlides, addedObjectName);
61+
});
6162
});
6263
}
6364

6465
supportedSlideItems = (
6566
pgenSlide: PptxGenJS.Slide,
66-
objectName: string,
67+
generateElement: GenerateElements,
68+
addedObjects: string[],
6769
): SupportedPptxGenJSSlide => {
6870
return {
6971
addChart: (type, data, options) => {
72+
const objectName = this.generateObjectName(
73+
generateElement,
74+
addedObjects,
75+
);
7076
pgenSlide.addChart(type, data, this.getOptions(options, objectName));
7177
},
7278
addImage: (options) => {
79+
const objectName = this.generateObjectName(
80+
generateElement,
81+
addedObjects,
82+
);
7383
pgenSlide.addImage(this.getOptions(options, objectName));
7484
},
7585
addShape: (shapeName, options?) => {
86+
const objectName = this.generateObjectName(
87+
generateElement,
88+
addedObjects,
89+
);
7690
pgenSlide.addShape(shapeName, this.getOptions(options, objectName));
7791
},
7892
addTable: (tableRows, options?) => {
93+
const objectName = this.generateObjectName(
94+
generateElement,
95+
addedObjects,
96+
);
7997
pgenSlide.addTable(tableRows, this.getOptions(options, objectName));
8098
},
8199
addText: (text, options?) => {
100+
const objectName = this.generateObjectName(
101+
generateElement,
102+
addedObjects,
103+
);
82104
pgenSlide.addText(text, this.getOptions(options, objectName));
83105
},
84106
};
85107
};
86108

87-
getOptions = (options, objectName) => {
109+
generateObjectName(generateElement, addedObjects: string[]): string {
110+
const objectName =
111+
(generateElement.objectName ? generateElement.objectName + '-' : '') +
112+
randomUUID();
113+
addedObjects.push(objectName);
114+
return objectName;
115+
}
116+
117+
getOptions = (options, objectName: string) => {
88118
options = options || {};
89119
return {
90120
...options,

0 commit comments

Comments
 (0)