diff --git a/src/lib/helpers/regions.ts b/src/lib/helpers/regions.ts new file mode 100644 index 000000000..9f04f3fda --- /dev/null +++ b/src/lib/helpers/regions.ts @@ -0,0 +1,27 @@ +import { getFlagUrl } from '$lib/helpers/flag'; +import type { Models } from '@appwrite.io/console'; + +type RegionOption = { + label: string; + value: string; + disabled: boolean; + leadingHtml: string; +}; + +export function filterRegions(regions: Models.ConsoleRegion[]): RegionOption[] { + if (!regions.length) return []; + + return regions + .filter((region) => region.$id !== 'default') + .sort((a, b) => { + if (a.disabled && !b.disabled) return 1; + if (!a.disabled && b.disabled) return -1; + return a.name.localeCompare(b.name); + }) + .map((region) => ({ + label: region.name, + value: region.$id, + disabled: region.disabled || !region.available, + leadingHtml: `Region flag` + })); +} diff --git a/src/lib/layout/createProject.svelte b/src/lib/layout/createProject.svelte index 5c206297e..7d368dde0 100644 --- a/src/lib/layout/createProject.svelte +++ b/src/lib/layout/createProject.svelte @@ -5,6 +5,7 @@ import { getFlagUrl } from '$lib/helpers/flag'; import { isCloud } from '$lib/system.js'; import type { Models } from '@appwrite.io/console'; + import { filterRegions } from '$lib/helpers/regions'; export let projectName: string; export let id: string; @@ -13,25 +14,6 @@ export let showTitle = true; let showCustomId = false; - - function getRegions() { - return regions - .filter((region) => region.$id !== 'default') - .sort((regionA, regionB) => { - if (regionA.disabled && !regionB.disabled) { - return 1; - } - return regionA.name > regionB.name ? 1 : -1; - }) - .map((region) => { - return { - label: region.name, - value: region.$id, - leadingHtml: `Region flag`, - disabled: region.disabled || !region.available - }; - }); - } @@ -69,7 +51,7 @@ Region cannot be changed after creation diff --git a/src/routes/(console)/(migration-wizard)/wizard.svelte b/src/routes/(console)/(migration-wizard)/wizard.svelte index 5c1980058..99c23b7d2 100644 --- a/src/routes/(console)/(migration-wizard)/wizard.svelte +++ b/src/routes/(console)/(migration-wizard)/wizard.svelte @@ -21,9 +21,8 @@ } from '@appwrite.io/pink-svelte'; import { isCloud } from '$lib/system'; import { regions } from '$lib/stores/organization'; - import { getFlagUrl } from '$lib/helpers/flag'; import { addNotification } from '$lib/stores/notifications'; - import { goto, invalidate, invalidateAll } from '$app/navigation'; + import { goto, invalidate } from '$app/navigation'; import { base } from '$app/paths'; import { migrationFormToResources } from '$lib/stores/migration'; import { EyebrowHeading } from '$lib/components'; @@ -32,10 +31,10 @@ IconCog, IconCurrencyDollar, IconExclamation, - IconGithub, IconTrendingUp } from '@appwrite.io/pink-icons-svelte'; import { Dependencies } from '$lib/constants'; + import { filterRegions } from '$lib/helpers/regions'; const onExit = () => { formData.reset(); @@ -79,11 +78,7 @@ } function getProjectName(): string { - return isExisting ? getSelectedProject().name : newProjName || 'Appwrite project'; - } - - function getSelectedProject() { - return projects.find((project) => project.$id === $selectedProject); + return isExisting ? currentSelectedProject.name : newProjName || 'Appwrite project'; } async function createNewProject() { @@ -108,25 +103,6 @@ } } - function getRegions() { - return $regions.regions - .filter((region) => region.$id !== 'default') - .sort((regionA, regionB) => { - if (regionA.disabled && !regionB.disabled) { - return 1; - } - return regionA.name > regionB.name ? 1 : -1; - }) - .map((region) => { - return { - label: region.name, - value: region.$id, - leadingHtml: `Region flag`, - disabled: region.disabled || !region.available - }; - }); - } - const onFinish = async () => { if ($provider.provider !== 'appwrite') return; @@ -141,16 +117,15 @@ $provider.apiKey ); - const project = getSelectedProject(); - addNotification({ type: 'success', message: 'Migration started' }); - onExit(); await invalidate(Dependencies.PROJECTS); - await goto(`${base}/project-${project.region}-${project.$id}/settings/migrations`); + await goto( + `${base}/project-${currentSelectedProject.region}-${currentSelectedProject.$id}/settings/migrations` + ); } catch (error) { addNotification({ type: 'error', @@ -163,11 +138,15 @@ $: getProjects(selectedOrg); + $: currentSelectedProject = projects.find((project) => project.$id === $selectedProject); + $: isExisting = projectType === 'existing'; $: if (isExisting && $selectedProject) { - const project = getSelectedProject(); - projectSdkInstance = sdk.forProject(project.region, project.$id); + projectSdkInstance = sdk.forProject( + currentSelectedProject.region, + currentSelectedProject.$id + ); } $: disableNextButton = isExisting @@ -258,7 +237,7 @@ >([]); let id = $state(); - function getRegions() { - return regions - .filter((region) => region.$id !== 'default') - .sort((regionA, regionB) => { - if (regionA.disabled && !regionB.disabled) { - return 1; - } - return regionA.name > regionB.name ? 1 : -1; - }) - .map((region) => { - return { - label: region.name, - value: region.$id, - leadingHtml: `Region flag`, - disabled: region.disabled - }; - }); - } - function isSiteTemplate( template: Models.TemplateFunction | Models.TemplateSite, product: 'site' | 'function' @@ -243,7 +224,7 @@ required bind:value={region} placeholder="Select a region" - options={getRegions()} + options={filterRegions(regions)} label="Region" /> Region cannot be changed after creation