From be1844bf703ef2b723de9a1af46334e8eeddea7a Mon Sep 17 00:00:00 2001 From: jayesh Date: Thu, 21 Aug 2025 20:55:44 +0530 Subject: [PATCH] refactor(templates): use SDK models and build repo URL as https://// --- src/lib/helpers/templateSource.ts | 46 ++++++++----------- .../sites/create-site/aside.svelte | 2 +- .../template-[template]/+page.svelte | 1 + 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/lib/helpers/templateSource.ts b/src/lib/helpers/templateSource.ts index 5e34a8e1b..3c94967d1 100644 --- a/src/lib/helpers/templateSource.ts +++ b/src/lib/helpers/templateSource.ts @@ -1,32 +1,26 @@ -export type Template = { - key?: string; // template slug, e.g. "magic-portfolio" - frameworks?: Array<{ - key?: string; - providerRootDirectory?: string; - }>; // e.g. [{ key: "nextjs", providerRootDirectory: "./nextjs/magic-portfolio" }] - providerOwner?: string; // e.g. "appwrite" - providerRepositoryId?: string; // e.g. "templates-for-sites" or "template-for-store" - repository?: string; // if API already returns full URL, use it - repoUrl?: string; // alias some builds may use - source?: string; // alias some builds may use -}; +import type { Models } from "@appwrite.io/console"; -export function getTemplateSourceUrl(template: Template): string | null { - // 1) Prefer a direct URL if the API already provides it - const direct = template.repository || template.repoUrl || template.source; - if (direct) return direct; +/** + * Build VCS repo URL from the template response model. + * Example (GitHub): https://github.com/appwrite/templates-for-sites + */ +export function getTemplateSourceUrl( + t: Models.TemplateSite | Models.TemplateFunction +): string | null { + const owner = t.providerOwner; + const repo = t.providerRepositoryId; + const provider = t.vcsProvider; // e.g., "github" - // 2) Ensure we have the parts to build the GitHub URL - const owner = template.providerOwner || "appwrite"; - const repo = template.providerRepositoryId || "templates-for-sites"; - const rootDir = template.frameworks?.[0]?.providerRootDirectory ?? "./"; + if (!owner || !repo || !provider) return null; - // strip leading "./" - const cleanDir = rootDir.startsWith("./") ? rootDir.slice(2) : rootDir; + // Map provider → host (extend if needed) + const hostMap: Record = { + github: "github.com", + gitlab: "gitlab.com", + bitbucket: "bitbucket.org", + }; - if (!cleanDir || cleanDir === "") { - return `https://github.com/${owner}/${repo}/tree/main`; - } + const host = hostMap[provider.toLowerCase()] ?? provider; // fallback - return `https://github.com/${owner}/${repo}/tree/main/${cleanDir}`; + return `https://${host}/${owner}/${repo}`; } diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/aside.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/aside.svelte index ceb05e128..85d65bb6e 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/aside.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/aside.svelte @@ -63,7 +63,7 @@ - + {/if} diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte index de0d296aa..b4e3e2ea5 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte @@ -357,6 +357,7 @@ {@const sourceUrl = getTemplateSourceUrl(data.template)} {#if sourceUrl}