123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import domtoimage from "dom-to-image";
- import { EditorModule } from "..";
- import { DesignComp } from "../../objects/DesignTemp/DesignComp";
- import { createCompStyle } from "../../objects/DesignTemp/creates/createCompStyle";
- import { Layout } from "../../typings";
- export const helpers = EditorModule.helper({
- designToNaturalSize(value: number) {
- return parseFloat((value / 100).toFixed(2)) + "rem";
- },
- findComp(compId: string) {
- const { compMap } = this.store.designData;
- const comp = compMap[compId];
- if (comp) return comp;
- },
- findParentComp(compId: string): DesignComp | undefined {
- const comp = this.helper.findComp(compId);
- if (comp) return this.helper.findComp(comp.pid);
- },
- findRootComp(): DesignComp | undefined {
- return this.store.designData.compMap["root"];
- },
- getCompTrees(compId: string) {
- const comps: DesignComp[] = [];
- const getParentComp = (compId: string) => {
- const comp = this.helper.findComp(compId);
- if (comp) {
- comps.unshift(comp);
- getParentComp(comp.pid);
- }
- };
- getParentComp(compId);
- return comps;
- },
- createStyle(layout: Partial<Layout>) {
- return createCompStyle(this, layout);
- },
- isCurrComp(compId: string) {
- return this.store.currCompId === compId;
- },
- isCustomChildComp(comp: DesignComp): boolean {
- const parentComp = this.helper.findParentComp(comp.id);
- if (!parentComp) return false;
- const i =
- parentComp.children.default?.findIndex((d) => d === comp.id) ?? -1;
- return i >= 0;
- },
- isCompCanDelete(compId: string): boolean {
- const comp = this.helper.findComp(compId);
- if (!comp || !this.helper.isCustomChildComp(comp)) return false;
- return true;
- // if (this.store.isEditComp) return true;
- // return this.store.pageCompIds.includes(compId);
- },
- isShowSaveComp(comp: DesignComp): boolean {
- // if (!comp.children?.default || comp.children?.default?.length == 0)
- // return false;
- if (!this.helper.isCustomChildComp(comp)) return false;
- return true;
- },
- async screenshot(options?: { ratio: number }): Promise<Blob> {
- const dom = document.querySelector(".page-editing-content")
- ?.parentElement as HTMLElement;
- const transferEl = document.querySelector(".transfer") as
- | HTMLElement
- | undefined;
- if (transferEl) {
- transferEl.style.display = "none";
- }
- if (options?.ratio) {
- const result = await domtoimage.toJpeg(dom);
- const img = await new Promise<HTMLImageElement>((resolve) => {
- const image = new Image();
- image.src = result;
- image.onload = function () {
- if (transferEl) {
- transferEl.style.display = "block";
- }
- resolve(image);
- };
- });
- const canvas = document.createElement("canvas");
- canvas.width = img.naturalWidth;
- canvas.height = Math.min(
- img.naturalWidth / options.ratio,
- img.naturalHeight
- );
- const ctx = canvas.getContext("2d");
- ctx?.drawImage(
- img,
- 0,
- 0,
- canvas.width,
- canvas.height,
- 0,
- 0,
- canvas.width,
- canvas.height
- );
- return new Promise((resolve) => {
- canvas.toBlob((blob) => {
- if (transferEl) {
- transferEl.style.display = "block";
- }
- if (blob) {
- resolve(blob);
- }
- });
- });
- } else {
- return domtoimage.toBlob(dom);
- }
- },
- });
|