Add ability to copy components from legacy layouts for backwards compatibility
This commit is contained in:
parent
b041700ea8
commit
e7605b65a9
|
@ -1,5 +1,49 @@
|
||||||
<script>
|
<script>
|
||||||
import Panel from "components/design/Panel.svelte"
|
import Panel from "components/design/Panel.svelte"
|
||||||
|
import { store, selectedLayout } from "builderStore"
|
||||||
|
import { Layout, Body, Button, notifications } from "@budibase/bbui"
|
||||||
|
import { Component } from "builderStore/store/screenTemplates/utils/Component"
|
||||||
|
|
||||||
|
const copyLayout = () => {
|
||||||
|
// Build an outer container component to put layout contents inside
|
||||||
|
let container = new Component("@budibase/standard-components/container")
|
||||||
|
.instanceName($selectedLayout.name)
|
||||||
|
.customProps({
|
||||||
|
gap: "M",
|
||||||
|
direction: "column",
|
||||||
|
hAlign: "stretch",
|
||||||
|
vAlign: "top",
|
||||||
|
size: "shrink",
|
||||||
|
})
|
||||||
|
.json()
|
||||||
|
|
||||||
|
// Attach layout components
|
||||||
|
container._children = $selectedLayout.props._children
|
||||||
|
|
||||||
|
// Replace the screenslot component with a container. This is better than
|
||||||
|
// simply removing it as it still shows its position.
|
||||||
|
container = JSON.parse(
|
||||||
|
JSON.stringify(container).replace(
|
||||||
|
"@budibase/standard-components/screenslot",
|
||||||
|
"@budibase/standard-components/container"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Copy new component structure
|
||||||
|
store.actions.components.copy(container)
|
||||||
|
notifications.success("Components copied successfully")
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Panel title="Layout" borderLeft />
|
<Panel title={$selectedLayout?.name} icon="Experience" borderLeft>
|
||||||
|
<Layout paddingX="L" paddingY="XL" gap="S">
|
||||||
|
<Body size="S">
|
||||||
|
You can save the content of this layout by pressing the button below.
|
||||||
|
</Body>
|
||||||
|
<Body size="S">
|
||||||
|
This will copy all components inside your layout, which you can then paste
|
||||||
|
into a screen.
|
||||||
|
</Body>
|
||||||
|
<Button cta on:click={copyLayout}>Copy components</Button>
|
||||||
|
</Layout>
|
||||||
|
</Panel>
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
if ($store.layouts?.length) {
|
if ($store.layouts?.length) {
|
||||||
$redirect(`./${$store.layouts[0]._id}`)
|
$redirect(`./${$store.layouts[0]._id}`)
|
||||||
|
} else {
|
||||||
|
$redirect("../")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
You don't have any layouts
|
|
||||||
|
|
|
@ -30,11 +30,11 @@
|
||||||
<Panel title="Navigation" borderRight>
|
<Panel title="Navigation" borderRight>
|
||||||
<Layout paddingX="L" paddingY="XL" gap="S">
|
<Layout paddingX="L" paddingY="XL" gap="S">
|
||||||
<Body size="S">
|
<Body size="S">
|
||||||
Your navigation is configured for all the screens within your app
|
Your navigation is configured for all the screens within your app.
|
||||||
</Body>
|
</Body>
|
||||||
<Body size="S">
|
<Body size="S">
|
||||||
You can hide and show your navigation for each screen in the screen
|
You can hide and show your navigation for each screen in the screen
|
||||||
settings
|
settings.
|
||||||
</Body>
|
</Body>
|
||||||
<NavigationLinksEditor />
|
<NavigationLinksEditor />
|
||||||
<Layout noPadding gap="XS">
|
<Layout noPadding gap="XS">
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
<Panel title="Theme" borderRight>
|
<Panel title="Theme" borderRight>
|
||||||
<Layout paddingX="L" paddingY="XL" gap="S">
|
<Layout paddingX="L" paddingY="XL" gap="S">
|
||||||
<Body size="S">
|
<Body size="S">
|
||||||
Your theme is set across all the screens within your app
|
Your theme is set across all the screens within your app.
|
||||||
</Body>
|
</Body>
|
||||||
<Layout noPadding gap="XS">
|
<Layout noPadding gap="XS">
|
||||||
<Label>Theme</Label>
|
<Label>Theme</Label>
|
||||||
|
|
Loading…
Reference in New Issue