mirror of https://github.com/Budibase/budibase.git
nocodelowcodelow-codedockerdocker-composeinternal-projectinternal-toolinternal-toolslow-code-developmentlow-code-development-platformopensourceselfhostedweb-devweb-developmentweb-development-toolswebdevwebdevelopmentworkflow-automationautomationdeveloper-tools
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.1 KiB
141 lines
3.1 KiB
<script>
|
|
import {
|
|
keys,
|
|
map,
|
|
some,
|
|
includes,
|
|
cloneDeep,
|
|
isEqual,
|
|
sortBy,
|
|
filter,
|
|
difference,
|
|
} from "lodash/fp"
|
|
import { pipe } from "components/common/core"
|
|
import Checkbox from "components/common/Checkbox.svelte"
|
|
import Textbox from "components/common/Textbox.svelte"
|
|
import Dropdown from "components/common/Dropdown.svelte"
|
|
import PlusButton from "components/common/PlusButton.svelte"
|
|
import IconButton from "components/common/IconButton.svelte"
|
|
import EventEditorModal from "./EventEditorModal.svelte"
|
|
import HandlerSelector from "./HandlerSelector.svelte"
|
|
|
|
import { PencilIcon } from "components/common/Icons"
|
|
import { EVENT_TYPE_MEMBER_NAME } from "components/common/eventHandlers"
|
|
|
|
export const EVENT_TYPE = "event"
|
|
|
|
export let component
|
|
export let onPropChanged = () => {}
|
|
export let components
|
|
|
|
let modalOpen = false
|
|
let events = []
|
|
let selectedEvent = null
|
|
|
|
$: {
|
|
const componentDefinition = components.find(
|
|
c => c.name === component._component
|
|
)
|
|
events = Object.keys(componentDefinition.props)
|
|
.filter(
|
|
propName => componentDefinition.props[propName].type === EVENT_TYPE
|
|
)
|
|
.map(propName => ({
|
|
name: propName,
|
|
handlers: component[propName] || [],
|
|
}))
|
|
}
|
|
|
|
const openModal = event => {
|
|
selectedEvent = event
|
|
modalOpen = true
|
|
}
|
|
|
|
const closeModal = () => {
|
|
selectedEvent = null
|
|
modalOpen = false
|
|
}
|
|
</script>
|
|
|
|
<header>
|
|
<h3>Events</h3>
|
|
<PlusButton on:click={() => openModal()} />
|
|
</header>
|
|
|
|
<div class="root">
|
|
<form on:submit|preventDefault class="uk-form-stacked form-root">
|
|
{#each events as event, index}
|
|
{#if event.handlers.length > 0}
|
|
<div
|
|
class:selected={selectedEvent && selectedEvent.index === index}
|
|
class="handler-container budibase__nav-item"
|
|
on:click={() => openModal({ ...event, index })}>
|
|
<span class="event-name">{event.name}</span>
|
|
<span class="edit-text">EDIT</span>
|
|
</div>
|
|
{/if}
|
|
{/each}
|
|
</form>
|
|
</div>
|
|
<EventEditorModal
|
|
{onPropChanged}
|
|
open={modalOpen}
|
|
onClose={closeModal}
|
|
eventOptions={events}
|
|
event={selectedEvent} />
|
|
|
|
<style>
|
|
h3 {
|
|
text-transform: uppercase;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
color: #8997ab;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.root {
|
|
font-size: 10pt;
|
|
width: 100%;
|
|
}
|
|
|
|
.form-root {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.handler-container {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
border: 2px solid #f9f9f9;
|
|
height: 80px;
|
|
width: 100%;
|
|
}
|
|
|
|
.event-name {
|
|
margin-top: 5px;
|
|
font-weight: bold;
|
|
font-size: 16px;
|
|
color: rgba(22, 48, 87, 0.6);
|
|
align-self: end;
|
|
}
|
|
|
|
.edit-text {
|
|
font-family: Arial, Helvetica, sans-serif;
|
|
font-weight: bold;
|
|
align-self: end;
|
|
justify-self: end;
|
|
font-size: 10px;
|
|
color: rgba(35, 65, 105, 0.4);
|
|
}
|
|
|
|
.selected {
|
|
color: var(--button-text);
|
|
background: var(--background-button) !important;
|
|
}
|
|
</style>
|
|
|