mirror of
https://github.com/documenso/documenso.git
synced 2026-07-14 14:57:12 +10:00
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import type { Page } from '@playwright/test';
|
|
import type Konva from 'konva';
|
|
|
|
export const getKonvaElementCountForPage = async (page: Page, pageNumber: number, elementSelector: string) => {
|
|
await page.locator('.konva-container canvas').first().waitFor({ state: 'visible' });
|
|
|
|
return await page.evaluate(
|
|
({ pageNumber, elementSelector }) => {
|
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
const konva: typeof Konva = (window as unknown as { Konva: typeof Konva }).Konva;
|
|
|
|
const pageOne = konva.stages.find((stage) => stage.attrs.id === `page-${pageNumber}`);
|
|
|
|
return pageOne?.find(elementSelector).length || 0;
|
|
},
|
|
{ pageNumber, elementSelector },
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Returns how many field groups are currently attached to the page's Konva
|
|
* transformer, i.e. the size of the active canvas selection. Used to assert
|
|
* multi-select behaviour (marquee drag and Shift+click).
|
|
*/
|
|
export const getKonvaTransformerNodeCountForPage = async (page: Page, pageNumber: number) => {
|
|
await page.locator('.konva-container canvas').first().waitFor({ state: 'visible' });
|
|
|
|
return await page.evaluate(
|
|
({ pageNumber }) => {
|
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
const konva: typeof Konva = (window as unknown as { Konva: typeof Konva }).Konva;
|
|
|
|
const stage = konva.stages.find((stage) => stage.attrs.id === `page-${pageNumber}`);
|
|
|
|
if (!stage) {
|
|
return 0;
|
|
}
|
|
|
|
const transformer = stage.find('Transformer')[0];
|
|
|
|
if (!transformer) {
|
|
return 0;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
return (transformer as Konva.Transformer).nodes().length;
|
|
},
|
|
{ pageNumber },
|
|
);
|
|
};
|