forked from tsai/budibase
6 changed files with 197 additions and 61 deletions
|
After Width: | Height: | Size: 405 B |
@ -0,0 +1,116 @@ |
|||
<script> |
|||
import { MoreIcon } from "components/common/Icons" |
|||
import { store } from "builderStore" |
|||
import { getComponentDefinition } from "builderStore/store" |
|||
import ConfirmDialog from "components/common/ConfirmDialog.svelte" |
|||
import { last } from "lodash/fp" |
|||
import UIkit from "uikit" |
|||
|
|||
export let component |
|||
|
|||
let confirmDeleteDialog |
|||
let dropdownEl |
|||
|
|||
$: dropdown = UIkit.dropdown(dropdownEl, { mode: "click", offset: 0, pos: "bottom-right" }); |
|||
$: noChildrenAllowed = !component || getComponentDefinition($store, component._component).children === false |
|||
$: noPaste = !$store.componentToPaste || $store.componentToPaste._id === component._id |
|||
|
|||
const lastPartOfName = c => (c ? last(c._component.split("/")) : "") |
|||
const showDropdown = () => { |
|||
dropdown.show() |
|||
} |
|||
|
|||
/* |
|||
{#if index > 0} |
|||
<button |
|||
class:solo={index === components.length - 1} |
|||
on:click|stopPropagation={() => onMoveUpComponent(component)}> |
|||
<ChevronUpIcon /> |
|||
</button> |
|||
{/if} |
|||
{#if index < components.length - 1} |
|||
<button |
|||
class:solo={index === 0} |
|||
on:click|stopPropagation={moveDownComponent(component)}> |
|||
<ChevronDownIcon /> |
|||
</button> |
|||
{/if} |
|||
*/ |
|||
|
|||
</script> |
|||
|
|||
<div class="root" on:click|stopPropagation={() => {}}> |
|||
<button> |
|||
<MoreIcon /> |
|||
</button> |
|||
<ul class="menu" bind:this={dropdownEl} on:mouseout={() => dropdown.hide()} on:click={() => dropdown.hide()}> |
|||
<li on:click={() => confirmDeleteDialog.show()}>Delete</li> |
|||
<li on:click={() => store.moveUpComponent(component)}>Move up</li> |
|||
<li on:click={() => store.moveDownComponent(component)}>Move down</li> |
|||
<li on:click={() => store.copyComponent(component)}>Duplicate</li> |
|||
<li on:click={() => store.storeComponentForCopy(component, true)}>Cut</li> |
|||
<li on:click={() => store.storeComponentForCopy(component)}>Copy</li> |
|||
<hr /> |
|||
<li class:disabled={noPaste} on:click={() => store.pasteComponent(component, "above")}>Paste above</li> |
|||
<li class:disabled={noPaste} on:click={() => store.pasteComponent(component, "below")}>Paste below</li> |
|||
<li class:disabled={noPaste || noChildrenAllowed} on:click={() => store.pasteComponent(component, "inside")}>Paste inside</li> |
|||
</ul> |
|||
</div> |
|||
|
|||
|
|||
|
|||
<ConfirmDialog |
|||
bind:this={confirmDeleteDialog} |
|||
title="Confirm Delete" |
|||
body={`Are you sure you wish to delete this '${lastPartOfName(component)}' component?`} |
|||
okText="Delete Component" |
|||
onOk={() => store.deleteComponent(component)} /> |
|||
|
|||
<style> |
|||
|
|||
.root { |
|||
overflow: hidden; |
|||
z-index:9; |
|||
} |
|||
|
|||
.root button { |
|||
border-style: none; |
|||
border-radius: 2px; |
|||
padding: 5px; |
|||
background: var(--grey); |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.menu { |
|||
z-index: 100000; |
|||
overflow: visible; |
|||
padding: 10px 0 |
|||
} |
|||
|
|||
.menu li { |
|||
border-style: none; |
|||
background-color: transparent; |
|||
list-style-type: none; |
|||
padding: 4px 5px 4px 15px; |
|||
margin: 0; |
|||
width: 100%; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
|
|||
.menu li:not(.disabled) { |
|||
cursor: pointer; |
|||
color: var(--ink); |
|||
} |
|||
|
|||
.menu li:not(.disabled):hover { |
|||
color: var(--button-text); |
|||
background-color: var(--grey-light); |
|||
} |
|||
|
|||
.disabled { |
|||
color: var(--grey-dark); |
|||
cursor: default; |
|||
} |
|||
|
|||
</style> |
|||
Loading…
Reference in new issue