diff --git a/packages/builder/src/pages/builder/portal/apps/onboarding/index.svelte b/packages/builder/src/pages/builder/portal/apps/onboarding/index.svelte index b8e64ccbab..1fa64526da 100644 --- a/packages/builder/src/pages/builder/portal/apps/onboarding/index.svelte +++ b/packages/builder/src/pages/builder/portal/apps/onboarding/index.svelte @@ -16,6 +16,7 @@ import CreateTableModal from "components/backend/TableNavigator/modals/CreateTableModal.svelte" import createFromScratchScreen from "builderStore/store/screenTemplates/createFromScratchScreen" import { Roles } from "constants/backend" + import Spinner from "components/common/Spinner.svelte" let name = "My first app" let url = "my-first-app" @@ -25,39 +26,46 @@ let plusIntegrations = {} let integrationsLoading = true $: getIntegrations() + let creationLoading = false let uploadModal const createApp = async useSampleData => { + creationLoading = true // Create form data to create app // This is form based and not JSON - let data = new FormData() - data.append("name", name.trim()) - data.append("url", url.trim()) - data.append("useTemplate", false) + try { + let data = new FormData() + data.append("name", name.trim()) + data.append("url", url.trim()) + data.append("useTemplate", false) - if (useSampleData) { - data.append("sampleData", true) + if (useSampleData) { + data.append("sampleData", true) + } + + const createdApp = await API.createApp(data) + + // Select Correct Application/DB in prep for creating user + const pkg = await API.fetchAppPackage(createdApp.instance._id) + await store.actions.initialise(pkg) + await automationStore.actions.fetch() + // Update checklist - in case first app + await admin.init() + + // Create user + await auth.setInitInfo({}) + + let defaultScreenTemplate = createFromScratchScreen.create() + defaultScreenTemplate.routing.route = "/home" + defaultScreenTemplate.routing.roldId = Roles.BASIC + await store.actions.screens.save(defaultScreenTemplate) + + appId = createdApp.instance._id + } catch (e) { + creationLoading = false + throw e } - - const createdApp = await API.createApp(data) - - // Select Correct Application/DB in prep for creating user - const pkg = await API.fetchAppPackage(createdApp.instance._id) - await store.actions.initialise(pkg) - await automationStore.actions.fetch() - // Update checklist - in case first app - await admin.init() - - // Create user - await auth.setInitInfo({}) - - let defaultScreenTemplate = createFromScratchScreen.create() - defaultScreenTemplate.routing.route = "/home" - defaultScreenTemplate.routing.roldId = Roles.BASIC - await store.actions.screens.save(defaultScreenTemplate) - - appId = createdApp.instance._id } const getIntegrations = async () => { @@ -102,6 +110,7 @@ goToApp() } catch (e) { console.log(e) + creationLoading = false notifications.error("There was a problem creating your app") } } @@ -118,8 +127,10 @@ {#if stage === "name"} (stage = "data")} /> - {:else if integrationsLoading} -

loading...

+ {:else if integrationsLoading || creationLoading} +
+ +
{:else if stage === "data"} (stage = "name")}>
@@ -175,6 +186,13 @@