Browse Source

Fix logic around deleting autoscreens and autoscreen links

master
Andrew Kingston 4 years ago
parent
commit
56187d0d39
  1. 116
      packages/builder/src/builderStore/store/frontend.js
  2. 3
      packages/builder/src/components/design/NavigationPanel/ScreenWizard.svelte

116
packages/builder/src/builderStore/store/frontend.js

@ -190,6 +190,7 @@ export const getFrontendStore = () => {
// Build array of promises to speed up bulk deletions // Build array of promises to speed up bulk deletions
const promises = [] const promises = []
let deleteUrls = []
screensToDelete.forEach(screen => { screensToDelete.forEach(screen => {
// Delete the screen // Delete the screen
promises.push( promises.push(
@ -199,14 +200,10 @@ export const getFrontendStore = () => {
}) })
) )
// Remove links to this screen // Remove links to this screen
promises.push( deleteUrls.push(screen.routing.route)
store.actions.components.links.delete(
screen.routing.route,
screen.props._instanceName
)
)
}) })
promises.push(store.actions.links.delete(deleteUrls))
await Promise.all(promises) await Promise.all(promises)
const deletedIds = screensToDelete.map(screen => screen._id) const deletedIds = screensToDelete.map(screen => screen._id)
store.update(state => { store.update(state => {
@ -578,89 +575,38 @@ export const getFrontendStore = () => {
}) })
await store.actions.preview.saveSelected() await store.actions.preview.saveSelected()
}, },
links: { },
save: async (url, title) => { links: {
const layout = get(mainLayout) save: async (url, title) => {
if (!layout) { const layout = get(mainLayout)
return if (!layout) {
} return
}
// Add link setting to main layout
if (layout.props._component.endsWith("layout")) {
// If using a new SDK, add to the layout component settings
if (!layout.props.links) {
layout.props.links = []
}
layout.props.links.push({
text: title,
url,
})
} else {
// If using an old SDK, add to the navigation component
// TODO: remove this when we can assume everyone has updated
const nav = findComponentType(
layout.props,
"@budibase/standard-components/navigation"
)
if (!nav) {
return
}
let newLink // Add link setting to main layout
if (nav._children && nav._children.length) { if (!layout.props.links) {
// Clone an existing link if one exists layout.props.links = []
newLink = cloneDeep(nav._children[0]) }
layout.props.links.push({
// Set our new props text: title,
newLink._id = Helpers.uuid() url,
newLink._instanceName = `${title} Link` })
newLink.url = url
newLink.text = title
} else {
// Otherwise create vanilla new link
newLink = {
...store.actions.components.createInstance("link"),
url,
text: title,
_instanceName: `${title} Link`,
}
nav._children = [...nav._children, newLink]
}
}
// Save layout await store.actions.layouts.save(layout)
await store.actions.layouts.save(layout) },
}, delete: async urls => {
delete: async (url, title) => { const layout = get(mainLayout)
const layout = get(mainLayout) if (!layout?.props.links?.length) {
if (!layout) { return
return }
}
// Add link setting to main layout // Filter out the URLs to delete
if (layout.props._component.endsWith("layout")) { urls = Array.isArray(urls) ? urls : [urls]
// If using a new SDK, add to the layout component settings layout.props.links = layout.props.links.filter(
layout.props.links = layout.props.links.filter( link => !urls.includes(link.url)
link => !(link.text === title && link.url === url) )
)
} else {
// If using an old SDK, add to the navigation component
// TODO: remove this when we can assume everyone has updated
const nav = findComponentType(
layout.props,
"@budibase/standard-components/navigation"
)
if (!nav) {
return
}
nav._children = nav._children.filter( await store.actions.layouts.save(layout)
child => !(child.url === url && child.text === title)
)
}
// Save layout
await store.actions.layouts.save(layout)
},
}, },
}, },
settings: { settings: {

3
packages/builder/src/components/design/NavigationPanel/ScreenWizard.svelte

@ -66,7 +66,7 @@
// Add link in layout for list screens // Add link in layout for list screens
if (screen.props._instanceName.endsWith("List")) { if (screen.props._instanceName.endsWith("List")) {
await store.actions.components.links.save( await store.actions.links.save(
screen.routing.route, screen.routing.route,
screen.routing.route.split("/")[1] screen.routing.route.split("/")[1]
) )
@ -131,6 +131,7 @@
const screens = selectedTemplates.map(template => { const screens = selectedTemplates.map(template => {
let screenTemplate = template.create() let screenTemplate = template.create()
screenTemplate.datasource = template.datasource screenTemplate.datasource = template.datasource
screenTemplate.autoTableId = template.table
return screenTemplate return screenTemplate
}) })
await createScreens({ screens, screenAccessRole }) await createScreens({ screens, screenAccessRole })

Loading…
Cancel
Save