2019-09-20 09:01:35 +02:00
|
|
|
<script>
|
|
|
|
import IconButton from "../common/IconButton.svelte";
|
|
|
|
import StateBindingControl from "./StateBindingControl.svelte";
|
|
|
|
import {
|
2019-10-18 18:32:03 +02:00
|
|
|
find, map, keys, reduce, keyBy
|
2019-09-20 09:01:35 +02:00
|
|
|
} from "lodash/fp";
|
2019-10-18 18:32:03 +02:00
|
|
|
import { pipe, userWithFullAccess } from "../common/core";
|
2019-09-24 07:11:02 +02:00
|
|
|
import { EVENT_TYPE_MEMBER_NAME, allHandlers } from "../common/eventHandlers";
|
2019-10-18 18:32:03 +02:00
|
|
|
import { store } from "../builderStore";
|
2019-09-20 09:01:35 +02:00
|
|
|
|
|
|
|
export let event;
|
|
|
|
export let onChanged;
|
|
|
|
export let onRemoved;
|
|
|
|
|
2019-10-18 18:32:03 +02:00
|
|
|
let events;
|
2019-09-20 09:01:35 +02:00
|
|
|
let eventType;
|
|
|
|
let parameters = [];
|
|
|
|
|
2019-10-18 18:32:03 +02:00
|
|
|
store.subscribe(s => {
|
|
|
|
events = allHandlers(
|
|
|
|
{hierarchy: s.hierarchy},
|
|
|
|
userWithFullAccess({
|
|
|
|
hierarchy: s.hierarchy,
|
|
|
|
actions: keyBy("name")(s.actions)
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2019-09-20 09:01:35 +02:00
|
|
|
$: {
|
|
|
|
if(event) {
|
2019-09-22 06:02:33 +02:00
|
|
|
eventType = event[EVENT_TYPE_MEMBER_NAME];
|
2019-09-20 09:01:35 +02:00
|
|
|
parameters = pipe(event.parameters, [
|
|
|
|
keys,
|
|
|
|
map(k => ({name:k, value:event.parameters[k]}))
|
|
|
|
]);
|
|
|
|
} else {
|
|
|
|
eventType = "";
|
|
|
|
parameters = [];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const eventChanged = (type, parameters) => {
|
|
|
|
const paramsAsObject = reduce(
|
|
|
|
(obj, p) => {
|
|
|
|
obj[p.name] = p.value;
|
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
, {}
|
|
|
|
)(parameters)
|
|
|
|
|
2019-09-22 06:02:33 +02:00
|
|
|
const ev = {};
|
|
|
|
ev[EVENT_TYPE_MEMBER_NAME]=type;
|
|
|
|
ev.parameters = paramsAsObject;
|
|
|
|
|
|
|
|
onChanged(ev);
|
2019-09-20 09:01:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
const eventTypeChanged = (ev) => {
|
|
|
|
const eType = find(e => e.name === ev.target.value)(events);
|
|
|
|
const emptyParameters = map(p => ({name:p, value:""}))(eType.parameters);
|
|
|
|
eventChanged(eType.name, emptyParameters);
|
|
|
|
}
|
|
|
|
|
2019-09-22 06:02:33 +02:00
|
|
|
const onParameterChanged = index => val => {
|
2019-09-20 09:01:35 +02:00
|
|
|
const newparameters = [...parameters];
|
2019-09-22 06:02:33 +02:00
|
|
|
newparameters[index].value = val;
|
2019-09-20 09:01:35 +02:00
|
|
|
eventChanged(eventType, newparameters);
|
|
|
|
}
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<div class="type-selector-container">
|
|
|
|
<select class="type-selector uk-select uk-form-small " value={eventType} on:change={eventTypeChanged}>
|
2019-10-31 10:24:54 +01:00
|
|
|
<option></option>
|
2019-09-20 09:01:35 +02:00
|
|
|
{#each events as ev}
|
|
|
|
<option value={ev.name}>{ev.name}</option>
|
|
|
|
{/each}
|
|
|
|
</select>
|
|
|
|
|
|
|
|
<IconButton icon="trash"
|
|
|
|
size="12"
|
|
|
|
on:click={onRemoved}/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
{#if parameters}
|
|
|
|
{#each parameters as p, index}
|
|
|
|
|
|
|
|
<div>
|
|
|
|
{p.name}
|
|
|
|
</div>
|
|
|
|
<StateBindingControl onChanged={onParameterChanged(index)}
|
|
|
|
value={p.value} />
|
|
|
|
|
|
|
|
{/each}
|
|
|
|
{/if}
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
|
|
|
.type-selector-container {
|
|
|
|
display: flex;
|
|
|
|
}
|
|
|
|
|
|
|
|
.type-selector {
|
|
|
|
border-color: var(--primary50);
|
|
|
|
border-radius: 2px;
|
|
|
|
width: 50px;
|
|
|
|
flex: 1 0 auto;
|
|
|
|
}
|
|
|
|
|
|
|
|
</style>
|