2020-11-14 04:42:32 +13:00
|
|
|
<script>
|
2020-11-25 22:50:51 +13:00
|
|
|
import { writable } from "svelte/store"
|
2020-11-20 07:39:22 +13:00
|
|
|
import { setContext, onMount } from "svelte"
|
2020-11-14 04:42:32 +13:00
|
|
|
import Component from "./Component.svelte"
|
2021-01-28 04:52:12 +13:00
|
|
|
import NotificationDisplay from "./NotificationDisplay.svelte"
|
2021-02-06 00:44:33 +13:00
|
|
|
import Provider from "./Provider.svelte"
|
2020-11-19 08:18:18 +13:00
|
|
|
import SDK from "../sdk"
|
2021-02-02 07:51:22 +13:00
|
|
|
import {
|
|
|
|
createContextStore,
|
|
|
|
initialise,
|
|
|
|
screenStore,
|
|
|
|
authStore,
|
2021-05-21 01:47:17 +12:00
|
|
|
routeStore,
|
|
|
|
builderStore,
|
2021-02-02 07:51:22 +13:00
|
|
|
} from "../store"
|
2021-02-27 03:04:31 +13:00
|
|
|
import { TableNames, ActionTypes } from "../constants"
|
2020-11-14 04:42:32 +13:00
|
|
|
|
2020-11-20 22:50:10 +13:00
|
|
|
// Provide contexts
|
|
|
|
setContext("sdk", SDK)
|
2020-11-25 22:50:51 +13:00
|
|
|
setContext("component", writable({}))
|
2021-02-02 07:51:22 +13:00
|
|
|
setContext("context", createContextStore())
|
2020-11-14 04:42:32 +13:00
|
|
|
|
2021-05-21 01:47:17 +12:00
|
|
|
let dataLoaded = false
|
2020-11-20 07:39:22 +13:00
|
|
|
|
|
|
|
// Load app config
|
|
|
|
onMount(async () => {
|
2020-12-12 03:24:19 +13:00
|
|
|
await initialise()
|
2021-01-29 03:29:35 +13:00
|
|
|
await authStore.actions.fetchUser()
|
2021-05-21 01:47:17 +12:00
|
|
|
dataLoaded = true
|
2020-11-20 07:39:22 +13:00
|
|
|
})
|
2021-02-27 03:04:31 +13:00
|
|
|
|
|
|
|
// Register this as a refreshable datasource so that user changes cause
|
|
|
|
// the user object to be refreshed
|
|
|
|
$: actions = [
|
|
|
|
{
|
|
|
|
type: ActionTypes.RefreshDatasource,
|
|
|
|
callback: () => authStore.actions.fetchUser(),
|
2021-03-17 02:54:34 +13:00
|
|
|
metadata: { dataSource: { type: "table", tableId: TableNames.USERS } },
|
2021-02-27 03:04:31 +13:00
|
|
|
},
|
|
|
|
]
|
2021-05-21 01:47:17 +12:00
|
|
|
|
|
|
|
// Redirect to home layout if no matching route
|
|
|
|
$: {
|
|
|
|
if (dataLoaded && $routeStore.routerLoaded && !$routeStore.activeRoute) {
|
|
|
|
if ($authStore) {
|
|
|
|
routeStore.actions.navigate("/")
|
|
|
|
} else {
|
|
|
|
const returnUrl = `${window.location.pathname}${window.location.hash}`
|
|
|
|
const encodedUrl = encodeURIComponent(returnUrl)
|
|
|
|
window.location = `/builder/auth/login?returnUrl=${encodedUrl}`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-11-14 04:42:32 +13:00
|
|
|
</script>
|
|
|
|
|
2021-05-21 01:47:17 +12:00
|
|
|
{#if dataLoaded && $screenStore.activeLayout}
|
2021-05-14 03:32:52 +12:00
|
|
|
<div lang="en" dir="ltr" class="spectrum spectrum--medium spectrum--light">
|
|
|
|
<Provider key="user" data={$authStore} {actions}>
|
|
|
|
<Component definition={$screenStore.activeLayout.props} />
|
|
|
|
<NotificationDisplay />
|
|
|
|
</Provider>
|
|
|
|
</div>
|
2021-01-23 00:31:56 +13:00
|
|
|
{/if}
|
2021-05-14 03:32:52 +12:00
|
|
|
|
|
|
|
<style>
|
|
|
|
div {
|
|
|
|
background: transparent;
|
|
|
|
height: 100%;
|
|
|
|
position: relative;
|
|
|
|
}
|
|
|
|
</style>
|