diff --git a/playground/Playground.tsx b/playground/Playground.tsx index 76d3cef..df9fa90 100644 --- a/playground/Playground.tsx +++ b/playground/Playground.tsx @@ -24,8 +24,10 @@ import {useEffect, useRef, useState} from "react"; interface Settings { apiKey: string; templateId: string | null; + embedType?: "templateDetails" | "templateEditor"; permissions: string[]; features: Required; + editorFeatures?: badge.TemplateEditorFeatures; sdkPath: string; googleFont: string; primaryColor: string; @@ -41,9 +43,21 @@ export function Playground() { key: "state", defaultValue: DEFAULT_SETTINGS, serialize: JSON.stringify, - deserialize: JSON.parse as ( - value: string | undefined, - ) => typeof DEFAULT_SETTINGS, + deserialize: (value: string | undefined): Settings => { + if (!value) { + return DEFAULT_SETTINGS; + } + + const parsed = JSON.parse(value) as Partial; + + return { + ...DEFAULT_SETTINGS, + ...parsed, + embedType: parsed.embedType ?? "templateDetails", + editorFeatures: + parsed.editorFeatures ?? badge.TEMPLATE_EDITOR_FEATURES_DEFAULT, + }; + }, getInitialValueInEffect: false, }); @@ -54,7 +68,10 @@ export function Playground() { const [sdkCall, setSdkCall] = useState<{ sdkOptions: badge.SdkOptions; - embedTemplatePageOptions: badge.EmbedTemplatePageOptions; + options: + | badge.EmbedTemplatePageOptions + | badge.EmbedTemplateEditorPageOptions; + functionName: string; }>(); function launchEmbed() { @@ -95,31 +112,57 @@ export function Playground() { const primaryColor = settings.primaryColor || undefined; const neutralColor = settings.neutralColor || undefined; - const embedTemplatePageOptions: badge.EmbedTemplatePageOptions = { - templateId, - features: settings.features, - fonts: googleFont - ? [ - { - cssSrc: `https://fonts.googleapis.com/css2?family=${googleFont.replace(/ /g, "+")}&display=swap`, - }, - ] - : undefined, - appearance: { - fontFamily: googleFont, - colors: { - primary: primaryColor, - neutral: neutralColor, - }, + const fonts = googleFont + ? [ + { + cssSrc: `https://fonts.googleapis.com/css2?family=${googleFont.replace(/ /g, "+")}&display=swap`, + }, + ] + : undefined; + + const appearance = { + fontFamily: googleFont, + colors: { + primary: primaryColor, + neutral: neutralColor, }, }; - badge.embedTemplatePage(sdk, element, embedTemplatePageOptions); - - setSdkCall({ - sdkOptions, - embedTemplatePageOptions, - }); + const embedType = settings.embedType ?? "templateDetails"; + switch (embedType) { + case "templateEditor": { + const options: badge.EmbedTemplateEditorPageOptions = { + templateId, + features: + settings.editorFeatures ?? + badge.TEMPLATE_EDITOR_FEATURES_DEFAULT, + fonts, + appearance, + }; + badge.embedTemplateEditorPage(sdk, element, options); + setSdkCall({ + sdkOptions, + options, + functionName: "embedTemplateEditorPage", + }); + return; + } + case "templateDetails": { + const options: badge.EmbedTemplatePageOptions = { + templateId, + features: settings.features, + fonts, + appearance, + }; + badge.embedTemplatePage(sdk, element, options); + setSdkCall({ + sdkOptions, + options, + functionName: "embedTemplatePage", + }); + return; + } + } }) .catch(alert); } @@ -160,6 +203,7 @@ export function Playground() { handleApiKeyChange(settings.apiKey); }, [handleApiKeyChange, settings.apiKey]); + const embedType = settings.embedType ?? "templateDetails"; return ( +