mirror of https://github.com/Budibase/budibase.git
5 changed files with 67 additions and 214 deletions
@ -0,0 +1,39 @@ |
|||||
|
<script> |
||||
|
import { Button } from "@budibase/bbui" |
||||
|
import EventEditorModal from "./EventEditorModal.svelte" |
||||
|
import { createEventDispatcher, getContext } from "svelte" |
||||
|
|
||||
|
export let value |
||||
|
export let name |
||||
|
|
||||
|
const dispatch = createEventDispatcher() |
||||
|
|
||||
|
// Handle create app modal |
||||
|
const { open, close } = getContext("simple-modal") |
||||
|
|
||||
|
const openModal = () => { |
||||
|
open( |
||||
|
EventEditorModal, |
||||
|
{ |
||||
|
event: value, |
||||
|
eventType: name, |
||||
|
onChange: val => dispatch("change", val), |
||||
|
onClose: () => { |
||||
|
close() |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
closeButton: false, |
||||
|
closeOnEsc: false, |
||||
|
styleContent: { padding: 0 }, |
||||
|
closeOnOuterClick: true, |
||||
|
} |
||||
|
) |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<Button secondary small on:click={openModal}>Define Actions</Button> |
||||
|
|
||||
|
<style> |
||||
|
|
||||
|
</style> |
||||
@ -1,161 +0,0 @@ |
|||||
<script> |
|
||||
import { getContext } from "svelte" |
|
||||
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 { PencilIcon } from "components/common/Icons" |
|
||||
import { EVENT_TYPE_MEMBER_NAME } from "components/common/eventHandlers" |
|
||||
|
|
||||
export const EVENT_TYPE = "event" |
|
||||
|
|
||||
export let component |
|
||||
|
|
||||
let events = [] |
|
||||
let selectedEvent = null |
|
||||
|
|
||||
$: { |
|
||||
events = Object.keys(component) |
|
||||
// TODO: use real events |
|
||||
.filter(propName => ["onChange", "onClick", "onLoad"].includes(propName)) |
|
||||
.map(propName => ({ |
|
||||
name: propName, |
|
||||
handlers: component[propName] || [], |
|
||||
})) |
|
||||
} |
|
||||
|
|
||||
// Handle create app modal |
|
||||
const { open, close } = getContext("simple-modal") |
|
||||
|
|
||||
const openModal = event => { |
|
||||
selectedEvent = event |
|
||||
open( |
|
||||
EventEditorModal, |
|
||||
{ |
|
||||
eventOptions: events, |
|
||||
event: selectedEvent, |
|
||||
onClose: () => { |
|
||||
close() |
|
||||
selectedEvent = null |
|
||||
}, |
|
||||
}, |
|
||||
{ |
|
||||
closeButton: false, |
|
||||
closeOnEsc: false, |
|
||||
styleContent: { padding: 0 }, |
|
||||
closeOnOuterClick: true, |
|
||||
} |
|
||||
) |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<button class="newevent" on:click={() => openModal()}> |
|
||||
<i class="icon ri-add-circle-fill" /> |
|
||||
Create New Event |
|
||||
</button> |
|
||||
|
|
||||
<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> |
|
||||
|
|
||||
<style> |
|
||||
.root { |
|
||||
font-size: 10pt; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
.newevent { |
|
||||
cursor: pointer; |
|
||||
border: 1px solid var(--grey-4); |
|
||||
border-radius: 3px; |
|
||||
width: 100%; |
|
||||
padding: 8px 16px; |
|
||||
margin: 0px 0px 12px 0px; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
background: white; |
|
||||
color: var(--ink); |
|
||||
font-size: 14px; |
|
||||
font-weight: 500; |
|
||||
transition: all 2ms; |
|
||||
} |
|
||||
|
|
||||
.newevent:hover { |
|
||||
background: var(--grey-1); |
|
||||
} |
|
||||
|
|
||||
.icon { |
|
||||
color: var(--ink); |
|
||||
font-size: 16px; |
|
||||
margin-right: 4px; |
|
||||
} |
|
||||
|
|
||||
.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(--blue); |
|
||||
background: var(--grey-1) !important; |
|
||||
} |
|
||||
</style> |
|
||||
Loading…
Reference in new issue