function cloneTemplate(templateId, userId, customizations = {}) {
customizations: customizations
const encodedMetadata = btoa(JSON.stringify(metadata));
const embedUrl = `https://app.templated.io/editor/${templateId}?embed=YOUR_CONFIG_ID&metadata=${encodedMetadata}`;
const newWindow = window.open(embedUrl, '_blank');
// Optional: Listen for completion
const checkClosed = setInterval(() => {
clearInterval(checkClosed);
console.log('Template clone editor closed');
// Handle post-clone actions
// Example with product customization
function customizeProduct(productId, templateId) {
allowedElements: ['text', 'image'], // Restrict editing
hiddenLayers: ['background', 'logo'], // Lock certain layers
requiredFields: ['customer_name', 'order_number']
cloneTemplate(templateId, 'customer_123', customizations);
// React component example
function TemplateCloneButton({ templateId, onComplete }) {
const handleClone = () => {
returnUrl: window.location.href
const encodedMetadata = btoa(JSON.stringify(metadata));
const embedUrl = `https://app.templated.io/editor/${templateId}?embed=${process.env.REACT_APP_EMBED_CONFIG}&metadata=${encodedMetadata}`;
// Use popup window for better UX
const popup = window.open(
'width=1200,height=800,scrollbars=yes,resizable=yes'
// Listen for completion message
const messageHandler = (event) => {
if (event.origin === 'https://app.templated.io' && event.data.type === 'template_saved') {
onComplete(event.data.template);
window.removeEventListener('message', messageHandler);
window.addEventListener('message', messageHandler);
<button onClick={handleClone} className="clone-template-btn">