|
|
|
@ -24,6 +24,7 @@ |
|
|
|
import DeviceBindingsProvider from "components/context/DeviceBindingsProvider.svelte" |
|
|
|
import StateBindingsProvider from "components/context/StateBindingsProvider.svelte" |
|
|
|
import RowSelectionProvider from "components/context/RowSelectionProvider.svelte" |
|
|
|
import QueryParamsProvider from "components/context/QueryParamsProvider.svelte" |
|
|
|
import SettingsBar from "components/preview/SettingsBar.svelte" |
|
|
|
import SelectionIndicator from "components/preview/SelectionIndicator.svelte" |
|
|
|
import HoverIndicator from "components/preview/HoverIndicator.svelte" |
|
|
|
@ -94,95 +95,97 @@ |
|
|
|
<UserBindingsProvider> |
|
|
|
<StateBindingsProvider> |
|
|
|
<RowSelectionProvider> |
|
|
|
<!-- Settings bar can be rendered outside of device preview --> |
|
|
|
<!-- Key block needs to be outside the if statement or it breaks --> |
|
|
|
{#key $builderStore.selectedComponentId} |
|
|
|
{#if $builderStore.inBuilder} |
|
|
|
<SettingsBar /> |
|
|
|
{/if} |
|
|
|
{/key} |
|
|
|
|
|
|
|
<!-- Clip boundary for selection indicators --> |
|
|
|
<div |
|
|
|
id="clip-root" |
|
|
|
class:preview={$builderStore.inBuilder} |
|
|
|
class:tablet-preview={$builderStore.previewDevice === "tablet"} |
|
|
|
class:mobile-preview={$builderStore.previewDevice === "mobile"} |
|
|
|
> |
|
|
|
<!-- Actual app --> |
|
|
|
<div id="app-root"> |
|
|
|
{#if showDevTools} |
|
|
|
<DevToolsHeader /> |
|
|
|
<QueryParamsProvider> |
|
|
|
<!-- Settings bar can be rendered outside of device preview --> |
|
|
|
<!-- Key block needs to be outside the if statement or it breaks --> |
|
|
|
{#key $builderStore.selectedComponentId} |
|
|
|
{#if $builderStore.inBuilder} |
|
|
|
<SettingsBar /> |
|
|
|
{/if} |
|
|
|
{/key} |
|
|
|
|
|
|
|
<!-- Clip boundary for selection indicators --> |
|
|
|
<div |
|
|
|
id="clip-root" |
|
|
|
class:preview={$builderStore.inBuilder} |
|
|
|
class:tablet-preview={$builderStore.previewDevice === "tablet"} |
|
|
|
class:mobile-preview={$builderStore.previewDevice === "mobile"} |
|
|
|
> |
|
|
|
<!-- Actual app --> |
|
|
|
<div id="app-root"> |
|
|
|
{#if showDevTools} |
|
|
|
<DevToolsHeader /> |
|
|
|
{/if} |
|
|
|
|
|
|
|
<div id="app-body"> |
|
|
|
{#if permissionError} |
|
|
|
<div class="error"> |
|
|
|
<Layout justifyItems="center" gap="S"> |
|
|
|
{@html ErrorSVG} |
|
|
|
<Heading size="L"> |
|
|
|
You don't have permission to use this app |
|
|
|
</Heading> |
|
|
|
<Body size="S"> |
|
|
|
Ask your administrator to grant you access |
|
|
|
</Body> |
|
|
|
</Layout> |
|
|
|
</div> |
|
|
|
{:else if !$screenStore.activeLayout} |
|
|
|
<div class="error"> |
|
|
|
<Layout justifyItems="center" gap="S"> |
|
|
|
{@html ErrorSVG} |
|
|
|
<Heading size="L"> |
|
|
|
Something went wrong rendering your app |
|
|
|
</Heading> |
|
|
|
<Body size="S"> |
|
|
|
Get in touch with support if this issue persists |
|
|
|
</Body> |
|
|
|
</Layout> |
|
|
|
</div> |
|
|
|
{:else} |
|
|
|
<CustomThemeWrapper> |
|
|
|
{#key $screenStore.activeLayout._id} |
|
|
|
<Component |
|
|
|
isLayout |
|
|
|
instance={$screenStore.activeLayout.props} |
|
|
|
/> |
|
|
|
{/key} |
|
|
|
<div id="app-body"> |
|
|
|
{#if permissionError} |
|
|
|
<div class="error"> |
|
|
|
<Layout justifyItems="center" gap="S"> |
|
|
|
{@html ErrorSVG} |
|
|
|
<Heading size="L"> |
|
|
|
You don't have permission to use this app |
|
|
|
</Heading> |
|
|
|
<Body size="S"> |
|
|
|
Ask your administrator to grant you access |
|
|
|
</Body> |
|
|
|
</Layout> |
|
|
|
</div> |
|
|
|
{:else if !$screenStore.activeLayout} |
|
|
|
<div class="error"> |
|
|
|
<Layout justifyItems="center" gap="S"> |
|
|
|
{@html ErrorSVG} |
|
|
|
<Heading size="L"> |
|
|
|
Something went wrong rendering your app |
|
|
|
</Heading> |
|
|
|
<Body size="S"> |
|
|
|
Get in touch with support if this issue persists |
|
|
|
</Body> |
|
|
|
</Layout> |
|
|
|
</div> |
|
|
|
{:else} |
|
|
|
<CustomThemeWrapper> |
|
|
|
{#key $screenStore.activeLayout._id} |
|
|
|
<Component |
|
|
|
isLayout |
|
|
|
instance={$screenStore.activeLayout.props} |
|
|
|
/> |
|
|
|
{/key} |
|
|
|
|
|
|
|
<!-- |
|
|
|
<!-- |
|
|
|
Flatpickr needs to be inside the theme wrapper. |
|
|
|
It also needs its own container because otherwise it hijacks |
|
|
|
key events on the whole page. It is painful to work with. |
|
|
|
--> |
|
|
|
<div id="flatpickr-root" /> |
|
|
|
<div id="flatpickr-root" /> |
|
|
|
|
|
|
|
<!-- Modal container to ensure they sit on top --> |
|
|
|
<div class="modal-container" /> |
|
|
|
<!-- Modal container to ensure they sit on top --> |
|
|
|
<div class="modal-container" /> |
|
|
|
|
|
|
|
<!-- Layers on top of app --> |
|
|
|
<NotificationDisplay /> |
|
|
|
<ConfirmationDisplay /> |
|
|
|
<PeekScreenDisplay /> |
|
|
|
</CustomThemeWrapper> |
|
|
|
{/if} |
|
|
|
<!-- Layers on top of app --> |
|
|
|
<NotificationDisplay /> |
|
|
|
<ConfirmationDisplay /> |
|
|
|
<PeekScreenDisplay /> |
|
|
|
</CustomThemeWrapper> |
|
|
|
{/if} |
|
|
|
|
|
|
|
{#if showDevTools} |
|
|
|
<DevTools /> |
|
|
|
{/if} |
|
|
|
{#if showDevTools} |
|
|
|
<DevTools /> |
|
|
|
{/if} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- Preview and dev tools utilities --> |
|
|
|
{#if $appStore.isDevApp} |
|
|
|
<SelectionIndicator /> |
|
|
|
{/if} |
|
|
|
{#if $builderStore.inBuilder || $devToolsStore.allowSelection} |
|
|
|
<HoverIndicator /> |
|
|
|
{/if} |
|
|
|
{#if $builderStore.inBuilder} |
|
|
|
<DNDHandler /> |
|
|
|
{/if} |
|
|
|
</div> |
|
|
|
<!-- Preview and dev tools utilities --> |
|
|
|
{#if $appStore.isDevApp} |
|
|
|
<SelectionIndicator /> |
|
|
|
{/if} |
|
|
|
{#if $builderStore.inBuilder || $devToolsStore.allowSelection} |
|
|
|
<HoverIndicator /> |
|
|
|
{/if} |
|
|
|
{#if $builderStore.inBuilder} |
|
|
|
<DNDHandler /> |
|
|
|
{/if} |
|
|
|
</div> |
|
|
|
</QueryParamsProvider> |
|
|
|
</RowSelectionProvider> |
|
|
|
</StateBindingsProvider> |
|
|
|
</UserBindingsProvider> |
|
|
|
|