forked from tsai/budibase
2 changed files with 1 additions and 161 deletions
@ -1,161 +0,0 @@ |
|||
<script> |
|||
import { store, backendUiStore } from "builderStore" |
|||
import { map, join } from "lodash/fp" |
|||
import iframeTemplate from "./iframeTemplate" |
|||
import { pipe } from "components/common/core" |
|||
|
|||
let iframe |
|||
let styles = "" |
|||
|
|||
function transform_component(comp) { |
|||
const props = comp.props || comp |
|||
if (props && props._children && props._children.length) { |
|||
props._children = props._children.map(transform_component) |
|||
} |
|||
|
|||
return props |
|||
} |
|||
|
|||
const getComponentTypeName = component => { |
|||
let [componentName] = component._component.match(/[a-z]*$/) |
|||
return componentName || "element" |
|||
} |
|||
|
|||
const screenPlaceholder = { |
|||
name: "Screen Placeholder", |
|||
route: "*", |
|||
props: { |
|||
_component: "@budibase/standard-components/container", |
|||
type: "div", |
|||
_children: [ |
|||
{ |
|||
_component: "@budibase/standard-components/container", |
|||
_styles: { normal: {}, hover: {}, active: {}, selected: {} }, |
|||
_id: "__screenslot__text", |
|||
_code: "", |
|||
className: "", |
|||
onLoad: [], |
|||
type: "div", |
|||
_children: [ |
|||
{ |
|||
_component: "@budibase/standard-components/text", |
|||
_styles: { |
|||
normal: {}, |
|||
hover: {}, |
|||
active: {}, |
|||
selected: {}, |
|||
}, |
|||
_id: "__screenslot__text_2", |
|||
_code: "", |
|||
text: "content", |
|||
font: "", |
|||
color: "", |
|||
textAlign: "inline", |
|||
verticalAlign: "inline", |
|||
formattingTag: "none", |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
} |
|||
|
|||
$: hasComponent = !!$store.currentPreviewItem |
|||
|
|||
$: { |
|||
styles = "" |
|||
// Apply the CSS from the currently selected page and its screens |
|||
const currentPage = $store.pages[$store.currentPageName] |
|||
styles += currentPage._css |
|||
for (let screen of currentPage._screens) { |
|||
styles += screen._css |
|||
} |
|||
styles = styles |
|||
} |
|||
|
|||
$: stylesheetLinks = pipe($store.pages.stylesheets, [ |
|||
map(s => `<link rel="stylesheet" href="${s}"/>`), |
|||
join("\n"), |
|||
]) |
|||
|
|||
$: screensExist = |
|||
$store.currentPreviewItem._screens && |
|||
$store.currentPreviewItem._screens.length > 0 |
|||
|
|||
$: frontendDefinition = { |
|||
appId: $store.appId, |
|||
libraries: $store.libraries, |
|||
page: $store.pages[$store.currentPageName], |
|||
screens: [ |
|||
$store.currentFrontEndType === "page" |
|||
? screenPlaceholder |
|||
: $store.currentPreviewItem, |
|||
], |
|||
} |
|||
|
|||
$: selectedComponentType = getComponentTypeName($store.currentComponentInfo) |
|||
|
|||
$: selectedComponentId = $store.currentComponentInfo |
|||
? $store.currentComponentInfo._id |
|||
: "" |
|||
|
|||
const refreshContent = () => { |
|||
<<<<<<< HEAD |
|||
iframe.contentWindow.postMessage(JSON.stringify({ |
|||
styles, |
|||
stylesheetLinks, |
|||
selectedComponentType, |
|||
selectedComponentId, |
|||
frontendDefinition, |
|||
appId: $store.appId |
|||
})) |
|||
======= |
|||
iframe.contentWindow.postMessage( |
|||
JSON.stringify({ |
|||
styles, |
|||
stylesheetLinks, |
|||
selectedComponentType, |
|||
selectedComponentId, |
|||
frontendDefinition, |
|||
}) |
|||
) |
|||
>>>>>>> master |
|||
} |
|||
|
|||
$: if (iframe) |
|||
iframe.contentWindow.addEventListener("bb-ready", refreshContent, { |
|||
once: true, |
|||
}) |
|||
|
|||
$: if (iframe && frontendDefinition) { |
|||
refreshContent() |
|||
} |
|||
</script> |
|||
|
|||
<div class="component-container"> |
|||
{#if hasComponent && $store.currentPreviewItem} |
|||
<iframe |
|||
style="height: 100%; width: 100%" |
|||
title="componentPreview" |
|||
bind:this={iframe} |
|||
srcdoc={iframeTemplate} /> |
|||
{/if} |
|||
</div> |
|||
|
|||
<style> |
|||
.component-container { |
|||
grid-row-start: middle; |
|||
grid-column-start: middle; |
|||
position: relative; |
|||
overflow: hidden; |
|||
margin: auto; |
|||
height: 100%; |
|||
} |
|||
|
|||
.component-container iframe { |
|||
border: 0; |
|||
left: 0; |
|||
top: 0; |
|||
width: 100%; |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue