Allow bulk deleting all screens under a route
This commit is contained in:
parent
f5ff71f9d1
commit
8b4e464e8a
|
@ -1,7 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { store } from "builderStore"
|
import { store } from "builderStore"
|
||||||
import { DropEffect, DropPosition } from "./dragDropStore"
|
import { DropEffect, DropPosition } from "./dragDropStore"
|
||||||
import ComponentDropdownMenu from "../ComponentDropdownMenu.svelte"
|
import ComponentDropdownMenu from "./ComponentDropdownMenu.svelte"
|
||||||
import NavItem from "components/common/NavItem.svelte"
|
import NavItem from "components/common/NavItem.svelte"
|
||||||
import { capitalise } from "helpers"
|
import { capitalise } from "helpers"
|
||||||
import { notifications } from "@budibase/bbui"
|
import { notifications } from "@budibase/bbui"
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
bind:this={confirmDeleteDialog}
|
bind:this={confirmDeleteDialog}
|
||||||
title="Confirm Deletion"
|
title="Confirm Deletion"
|
||||||
body={"Are you sure you wish to delete this layout?"}
|
body={"Are you sure you wish to delete this layout?"}
|
||||||
okText="Delete Layout"
|
okText="Delete layout"
|
||||||
onOk={deleteLayout}
|
onOk={deleteLayout}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
<script>
|
||||||
|
import { goto } from "@roxi/routify"
|
||||||
|
import { store } from "builderStore"
|
||||||
|
import ConfirmDialog from "components/common/ConfirmDialog.svelte"
|
||||||
|
import {
|
||||||
|
ActionMenu,
|
||||||
|
MenuItem,
|
||||||
|
Icon,
|
||||||
|
Layout,
|
||||||
|
notifications,
|
||||||
|
} from "@budibase/bbui"
|
||||||
|
import { get } from "svelte/store"
|
||||||
|
|
||||||
|
export let path
|
||||||
|
export let screens
|
||||||
|
|
||||||
|
let confirmDeleteDialog
|
||||||
|
|
||||||
|
const deleteScreens = async () => {
|
||||||
|
if (!screens?.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
for (let { id } of screens) {
|
||||||
|
// We have to fetch the screen to be deleted immediately before deleting
|
||||||
|
// as otherwise we're very likely to 409
|
||||||
|
const screen = get(store).screens.find(screen => screen._id === id)
|
||||||
|
if (!screen) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
await store.actions.screens.delete(screen)
|
||||||
|
}
|
||||||
|
notifications.success("Screens deleted successfully")
|
||||||
|
$goto("../")
|
||||||
|
} catch (error) {
|
||||||
|
notifications.error("Error deleting screens")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<ActionMenu>
|
||||||
|
<div slot="control" class="icon">
|
||||||
|
<Icon size="S" hoverable name="MoreSmallList" />
|
||||||
|
</div>
|
||||||
|
<MenuItem icon="Delete" on:click={confirmDeleteDialog.show}>
|
||||||
|
Delete all screens
|
||||||
|
</MenuItem>
|
||||||
|
</ActionMenu>
|
||||||
|
|
||||||
|
<ConfirmDialog
|
||||||
|
bind:this={confirmDeleteDialog}
|
||||||
|
title="Confirm Deletion"
|
||||||
|
okText="Delete screens"
|
||||||
|
onOk={deleteScreens}
|
||||||
|
>
|
||||||
|
<Layout noPadding gap="S">
|
||||||
|
<div>
|
||||||
|
Are you sure you want to delete all screens under the <b>{path}</b> route?
|
||||||
|
</div>
|
||||||
|
<div>The following screens will be deleted:</div>
|
||||||
|
<div class="to-delete">
|
||||||
|
{#each screens as screen}
|
||||||
|
<div>{screen.route}</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
</ConfirmDialog>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.to-delete {
|
||||||
|
font-weight: bold;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding-left: var(--spacing-xl);
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -8,6 +8,7 @@
|
||||||
import instantiateStore from "./dragDropStore"
|
import instantiateStore from "./dragDropStore"
|
||||||
import ComponentTree from "./ComponentTree.svelte"
|
import ComponentTree from "./ComponentTree.svelte"
|
||||||
import NavItem from "components/common/NavItem.svelte"
|
import NavItem from "components/common/NavItem.svelte"
|
||||||
|
import PathDropdownMenu from "./PathDropdownMenu.svelte"
|
||||||
import ScreenDropdownMenu from "./ScreenDropdownMenu.svelte"
|
import ScreenDropdownMenu from "./ScreenDropdownMenu.svelte"
|
||||||
import { get } from "svelte/store"
|
import { get } from "svelte/store"
|
||||||
|
|
||||||
|
@ -73,7 +74,9 @@
|
||||||
opened={routeOpened}
|
opened={routeOpened}
|
||||||
{border}
|
{border}
|
||||||
withArrow={route.subpaths}
|
withArrow={route.subpaths}
|
||||||
/>
|
>
|
||||||
|
<PathDropdownMenu screens={allScreens} {path} />
|
||||||
|
</NavItem>
|
||||||
|
|
||||||
{#if routeOpened}
|
{#if routeOpened}
|
||||||
{#each filteredScreens as screen (screen.id)}
|
{#each filteredScreens as screen (screen.id)}
|
||||||
|
|
|
@ -76,7 +76,7 @@
|
||||||
bind:this={confirmDeleteDialog}
|
bind:this={confirmDeleteDialog}
|
||||||
title="Confirm Deletion"
|
title="Confirm Deletion"
|
||||||
body={"Are you sure you wish to delete this screen?"}
|
body={"Are you sure you wish to delete this screen?"}
|
||||||
okText="Delete Screen"
|
okText="Delete screen"
|
||||||
onOk={deleteScreen}
|
onOk={deleteScreen}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue