Files
webstudio/apps/builder/app/shared/copy-paste/plugin-embed-template.ts
T
Bogdan Chadkin 86defe847f refactor: move component meta to sdk (#4720)
Moved all component meta and embed template to sdk schema. Embed
template generator is left in react-sdk, will probably be removed
eventually.
2025-01-05 23:20:23 +07:00

39 lines
1.1 KiB
TypeScript

import { z } from "zod";
import { WsEmbedTemplate } from "@webstudio-is/sdk";
import { generateDataFromEmbedTemplate } from "@webstudio-is/react-sdk";
import { $registeredComponentMetas } from "../nano-states";
import {
findClosestInsertable,
insertWebstudioFragmentAt,
} from "../instance-utils";
const version = "@webstudio/template";
const ClipboardData = z.object({ [version]: WsEmbedTemplate });
const parse = (clipboardData: string): WsEmbedTemplate | undefined => {
try {
const data = ClipboardData.parse(JSON.parse(clipboardData));
return data[version];
} catch {
return;
}
};
export const mimeType = "text/plain";
export const onPaste = (clipboardData: string) => {
const template = parse(clipboardData);
if (template === undefined) {
return false;
}
const metas = $registeredComponentMetas.get();
const fragment = generateDataFromEmbedTemplate(template, metas);
const insertable = findClosestInsertable(fragment);
if (insertable === undefined) {
return false;
}
insertWebstudioFragmentAt(fragment, insertable);
return true;
};