Merge pull request #1213 from Budibase/labday/dnd-actions

Adds drag and drop to the actions drawer
This commit is contained in:
Kevin Åberg Kultalahti 2021-03-01 09:12:25 +01:00 committed by GitHub
commit abba6727ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 16 deletions

View File

@ -79,6 +79,7 @@
"posthog-js": "1.4.5", "posthog-js": "1.4.5",
"remixicon": "2.5.0", "remixicon": "2.5.0",
"shortid": "2.2.15", "shortid": "2.2.15",
"svelte-dnd-action": "^0.8.9",
"svelte-loading-spinners": "^0.1.1", "svelte-loading-spinners": "^0.1.1",
"svelte-portal": "0.1.0", "svelte-portal": "0.1.0",
"uuid": "8.3.1", "uuid": "8.3.1",

View File

@ -1,11 +1,22 @@
<script> <script>
import {flip} from "svelte/animate";
import {dndzone} from "svelte-dnd-action";
import { Button, DropdownMenu, Spacer } from "@budibase/bbui" import { Button, DropdownMenu, Spacer } from "@budibase/bbui"
import actionTypes from "./actions" import actionTypes from "./actions"
const flipDurationMs = 150;
const EVENT_TYPE_KEY = "##eventHandlerType" const EVENT_TYPE_KEY = "##eventHandlerType"
export let actions export let actions
// dndzone needs an id on the array items, so this adds some temporary ones.
if (actions) {
actions = actions.map((action, i) => {
return {...action, id: i}
})
}
let addActionButton let addActionButton
let addActionDropdown let addActionDropdown
let selectedAction = actions?.length ? actions[0] : null let selectedAction = actions?.length ? actions[0] : null
@ -30,19 +41,26 @@
const newAction = { const newAction = {
parameters: {}, parameters: {},
[EVENT_TYPE_KEY]: actionType.name, [EVENT_TYPE_KEY]: actionType.name,
id: actions ? actions.length + 1 : 0
} }
if (!actions) { if (!actions) {
actions = [] actions = []
} }
actions.push(newAction) actions = [...actions, newAction]
selectedAction = newAction selectedAction = newAction
actions = actions
addActionDropdown.hide() addActionDropdown.hide()
} }
const selectAction = action => () => { const selectAction = action => () => {
selectedAction = action selectedAction = action
} }
function handleDndConsider(e) {
actions = e.detail.items;
}
function handleDndFinalize(e) {
actions = e.detail.items;
}
</script> </script>
<div class="actions-container"> <div class="actions-container">
@ -69,8 +87,9 @@
</div> </div>
{#if actions && actions.length > 0} {#if actions && actions.length > 0}
{#each actions as action, index} <div class="action-dnd-container" use:dndzone={{items: actions, flipDurationMs, dropTargetStyle: { outline: 'none'}}} on:consider={handleDndConsider} on:finalize={handleDndFinalize}>
<div class="action-container"> {#each actions as action, index (action.id)}
<div class="action-container" animate:flip={{duration: flipDurationMs}}>
<div <div
class="action-header" class="action-header"
class:selected={action === selectedAction} class:selected={action === selectedAction}
@ -84,6 +103,7 @@
on:click={() => deleteAction(index)} /> on:click={() => deleteAction(index)} />
</div> </div>
{/each} {/each}
</div>
{/if} {/if}
</div> </div>
<div class="action-config"> <div class="action-config">

View File

@ -6686,6 +6686,11 @@ supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0:
dependencies: dependencies:
has-flag "^4.0.0" has-flag "^4.0.0"
svelte-dnd-action@^0.8.9:
version "0.8.9"
resolved "https://registry.yarnpkg.com/svelte-dnd-action/-/svelte-dnd-action-0.8.9.tgz#90fa211057a5d9e832d5521511f9c1b87242d2ae"
integrity sha512-4WaLRvERr2JoX6Lh9GnlEZRzFF5eY3h2q0n5+lS4/+nqqQjTIpCwTrncMf9tJNa+M4AGy43I5aq5F+Ohl/nxLg==
svelte-flatpickr@^2.4.0: svelte-flatpickr@^2.4.0:
version "2.4.0" version "2.4.0"
resolved "https://registry.yarnpkg.com/svelte-flatpickr/-/svelte-flatpickr-2.4.0.tgz#190871fc3305956c8c8fd3601cd036b8ac71ef49" resolved "https://registry.yarnpkg.com/svelte-flatpickr/-/svelte-flatpickr-2.4.0.tgz#190871fc3305956c8c8fd3601cd036b8ac71ef49"