diff --git a/src/lib/elements/forms/inputText.svelte b/src/lib/elements/forms/inputText.svelte index 658c0475a..93a7a736e 100644 --- a/src/lib/elements/forms/inputText.svelte +++ b/src/lib/elements/forms/inputText.svelte @@ -15,7 +15,7 @@ export let autocomplete = false; export let maxlength: number = null; - let error: string; + export let error: string; const handleInvalid = (event: Event) => { event.preventDefault(); diff --git a/src/lib/helpers/string.ts b/src/lib/helpers/string.ts index 2ef6ac191..4ef014dd5 100644 --- a/src/lib/helpers/string.ts +++ b/src/lib/helpers/string.ts @@ -48,3 +48,8 @@ const formatter = Intl.NumberFormat('en', { export function formatNum(number: number): string { return formatter.format(number); } + +/** + * Returns a regex to check hostname validity. Supports wildcards too! + */ +export const hostnameRegex = String.raw`(\*)|(\*\.)?(?!-)[A-Za-z0-9\-]+([\-\.]{1}[a-z0-9]+)*\.[A-Za-z]{2,18}|localhost`; diff --git a/src/routes/(console)/project-[project]/overview/platforms/createWeb.svelte b/src/routes/(console)/project-[project]/overview/platforms/createWeb.svelte index 3934d7ee1..cbcec9b40 100644 --- a/src/routes/(console)/project-[project]/overview/platforms/createWeb.svelte +++ b/src/routes/(console)/project-[project]/overview/platforms/createWeb.svelte @@ -11,9 +11,11 @@ Fieldset, InlineCode, Card, - Button + Button, + Input, + Tooltip } from '@appwrite.io/pink-svelte'; - import { Form } from '$lib/elements/forms'; + import { Form, InputText } from '$lib/elements/forms'; import { IconVue, IconAppwrite, @@ -44,6 +46,7 @@ AngularFrameworkIcon, JavascriptFrameworkIcon } from './components/index'; + import { hostnameRegex } from '$lib/helpers/string'; export let key; @@ -69,6 +72,8 @@ ${prefix}APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject.client.config.endpoint}" }; export let platform: PlatformType = PlatformType.Flutterandroid; export let selectedFrameworkKey: string | undefined = key ? key : undefined; + let hostname; + let hostnameError = false; let frameworks: Array = [ { @@ -140,6 +145,11 @@ ${prefix}APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject.client.config.endpoint}" $: selectedFrameworkIcon = selectedFramework ? selectedFramework.icon : NoFrameworkIcon; async function createWebPlatform() { + hostnameError = !new RegExp(hostnameRegex).test(hostname); + if (hostnameError) { + return; + } + try { isCreatingPlatform = true; await sdk.forConsole.projects.createPlatform( @@ -148,7 +158,7 @@ ${prefix}APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject.client.config.endpoint}" `${selectedFramework.label} app`, selectedFrameworkKey, undefined, - undefined + hostname ); isPlatformCreated = true; @@ -211,20 +221,38 @@ ${prefix}APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject.client.config.endpoint}" imageRadius="s" /> {/each} - {#if isChangingFramework} (isChangingFramework = false)}> Save - {:else} - Create platform {/if} + {#if !isChangingFramework} +
+ + + + + The hostname that your website will use to interact with the + Appwrite APIs in production or development environments. No + protocol or port number required. + + +
+ Create platform + {/if} {:else}