1
0
Fork 0
mirror of synced 2024-06-01 18:20:18 +12:00
budibase/packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/EventEditor.svelte

169 lines
3.6 KiB
Svelte
Raw Normal View History

2021-01-09 07:22:03 +13:00
<script>
import {
Button,
Body,
DropdownMenu,
ModalContent,
Spacer,
2021-01-09 07:22:03 +13:00
} from "@budibase/bbui"
import { AddIcon, ArrowDownIcon } from "components/common/Icons/"
import actionTypes from "./actions"
import { createEventDispatcher } from "svelte"
import { automationStore } from "builderStore"
2021-01-09 07:22:03 +13:00
const EVENT_TYPE_KEY = "##eventHandlerType"
2021-01-09 07:22:03 +13:00
export let actions
2021-01-09 07:22:03 +13:00
let addActionButton
let addActionDropdown
let selectedAction
$: selectedActionComponent =
selectedAction &&
actionTypes.find(t => t.name === selectedAction[EVENT_TYPE_KEY]).component
2021-01-09 07:22:03 +13:00
const deleteAction = index => {
actions.splice(index, 1)
actions = actions
}
const addAction = actionType => () => {
const newAction = {
parameters: {},
[EVENT_TYPE_KEY]: actionType.name,
2021-01-09 07:22:03 +13:00
}
actions.push(newAction)
selectedAction = newAction
actions = actions
addActionDropdown.hide()
}
const selectAction = action => () => {
selectedAction = action
}
</script>
<div class="actions-container">
<div class="actions-list">
<div>
<div bind:this={addActionButton}>
<Spacer small />
<Button wide secondary on:click={addActionDropdown.show}>
2021-01-09 07:22:03 +13:00
Add Action
</Button>
<Spacer medium />
2021-01-09 07:22:03 +13:00
</div>
<DropdownMenu
bind:this={addActionDropdown}
anchor={addActionButton}
align="right">
<div class="available-actions-container">
{#each actionTypes as actionType}
<div class="available-action" on:click={addAction(actionType)}>
<span>{actionType.name}</span>
</div>
{/each}
</div>
</DropdownMenu>
</div>
{#if actions && actions.length > 0}
{#each actions as action, index}
<div class="action-container">
<div class="action-header" on:click={selectAction(action)}>
<span class:selected={action === selectedAction}>
{index + 1}. {action[EVENT_TYPE_KEY]}
2021-01-09 07:22:03 +13:00
</span>
</div>
2021-01-13 05:49:11 +13:00
<i
class="ri-close-fill"
style="margin-left: auto;"
2021-01-13 05:49:11 +13:00
on:click={() => deleteAction(index)} />
2021-01-09 07:22:03 +13:00
</div>
{/each}
{/if}
</div>
<div class="action-config">
{#if selectedAction}
<div class="selected-action-container">
<svelte:component
this={selectedActionComponent}
parameters={selectedAction.parameters} />
</div>
{/if}
</div>
</div>
<style>
.action-header {
display: flex;
flex-direction: row;
align-items: center;
2021-01-12 09:17:56 +13:00
margin-top: var(--spacing-m);
2021-01-09 07:22:03 +13:00
}
.action-header > span {
margin-bottom: var(--spacing-m);
font-size: var(--font-size-xs);
2021-01-09 07:22:03 +13:00
}
.action-header > span:hover,
.selected {
cursor: pointer;
font-weight: 500;
}
.actions-list {
border-right: var(--border-light);
2021-01-12 09:17:56 +13:00
padding: var(--spacing-s);
2021-01-09 07:22:03 +13:00
}
.available-action {
padding: var(--spacing-s);
font-size: var(--font-size-xs);
2021-01-09 07:22:03 +13:00
cursor: pointer;
}
.available-action:hover {
background: var(--grey-2);
}
.actions-container {
2021-01-12 09:17:56 +13:00
height: 40vh;
2021-01-09 07:22:03 +13:00
display: grid;
grid-gap: var(--spacing-m);
grid-template-columns: 260px 1fr;
2021-01-09 07:22:03 +13:00
grid-auto-flow: column;
min-height: 0;
padding-top: 0;
overflow-y: auto;
}
.action-container {
border-top: var(--border-light);
2021-01-13 05:49:11 +13:00
display: flex;
align-items: center;
2021-01-09 07:22:03 +13:00
}
.selected-action-container {
padding: var(--spacing-xl);
2021-01-09 07:22:03 +13:00
}
a {
flex: 1;
color: var(--grey-5);
font-size: var(--font-size-s);
text-decoration: none;
}
a:hover {
color: var(--blue);
}
i:hover {
color: var(--red);
cursor: pointer;
}
2021-01-09 07:22:03 +13:00
</style>