|
|
|
@ -2,15 +2,56 @@ |
|
|
|
import { goto } from "@roxi/routify" |
|
|
|
import { store, allScreens } from "builderStore" |
|
|
|
import ConfirmDialog from "components/common/ConfirmDialog.svelte" |
|
|
|
import { ActionMenu, MenuItem, Icon, notifications } from "@budibase/bbui" |
|
|
|
import { |
|
|
|
ActionMenu, |
|
|
|
MenuItem, |
|
|
|
Icon, |
|
|
|
Modal, |
|
|
|
Helpers, |
|
|
|
notifications, |
|
|
|
} from "@budibase/bbui" |
|
|
|
import ScreenDetailsModal from "../ScreenDetailsModal.svelte" |
|
|
|
import sanitizeUrl from "builderStore/store/screenTemplates/utils/sanitizeUrl" |
|
|
|
import analytics, { Events } from "analytics" |
|
|
|
import { makeComponentUnique } from "builderStore/componentUtils" |
|
|
|
|
|
|
|
export let screenId |
|
|
|
|
|
|
|
let confirmDeleteDialog |
|
|
|
let screenDetailsModal |
|
|
|
|
|
|
|
$: screen = $allScreens.find(screen => screen._id === screenId) |
|
|
|
|
|
|
|
const duplicateScreen = () => {} |
|
|
|
const duplicateScreen = () => { |
|
|
|
screenDetailsModal.show() |
|
|
|
} |
|
|
|
|
|
|
|
const createDuplicateScreen = async ({ screenName, screenUrl }) => { |
|
|
|
// Create a dupe and ensure it is unique |
|
|
|
let duplicateScreen = Helpers.cloneDeep(screen) |
|
|
|
delete duplicateScreen._id |
|
|
|
delete duplicateScreen._rev |
|
|
|
makeComponentUnique(duplicateScreen.props) |
|
|
|
|
|
|
|
// Attach the new name and URL |
|
|
|
duplicateScreen.routing.route = sanitizeUrl(screenUrl) |
|
|
|
duplicateScreen.props._instanceName = screenName |
|
|
|
|
|
|
|
try { |
|
|
|
// Create the screen |
|
|
|
await store.actions.screens.save(duplicateScreen) |
|
|
|
|
|
|
|
// Analytics |
|
|
|
if (screen.template) { |
|
|
|
analytics.captureEvent(Events.SCREEN.CREATED, { |
|
|
|
template: "createFromScratch", |
|
|
|
}) |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
notifications.error("Error duplicating screen") |
|
|
|
console.log(error) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const deleteScreen = async () => { |
|
|
|
try { |
|
|
|
@ -27,9 +68,7 @@ |
|
|
|
<div slot="control" class="icon"> |
|
|
|
<Icon size="S" hoverable name="MoreSmallList" /> |
|
|
|
</div> |
|
|
|
<MenuItem noClose icon="Duplicate" on:click={duplicateScreen}> |
|
|
|
Duplicate |
|
|
|
</MenuItem> |
|
|
|
<MenuItem icon="Duplicate" on:click={duplicateScreen}>Duplicate</MenuItem> |
|
|
|
<MenuItem icon="Delete" on:click={confirmDeleteDialog.show}>Delete</MenuItem> |
|
|
|
</ActionMenu> |
|
|
|
|
|
|
|
@ -40,3 +79,11 @@ |
|
|
|
okText="Delete Screen" |
|
|
|
onOk={deleteScreen} |
|
|
|
/> |
|
|
|
|
|
|
|
<Modal bind:this={screenDetailsModal}> |
|
|
|
<ScreenDetailsModal |
|
|
|
onConfirm={createDuplicateScreen} |
|
|
|
screenName={screen?.props._instanceName} |
|
|
|
screenUrl={screen?.routing.route} |
|
|
|
/> |
|
|
|
</Modal> |
|
|
|
|