-
Notifications
You must be signed in to change notification settings - Fork 144
Expand file tree
/
Copy pathschedule-input-payload.svelte
More file actions
80 lines (72 loc) · 2.46 KB
/
schedule-input-payload.svelte
File metadata and controls
80 lines (72 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<script lang="ts">
import type { Writable } from 'svelte/store';
import Button from '$lib/holocene/button.svelte';
import { translate } from '$lib/i18n/translate';
import {
isPayloadInputEncodingType,
type PayloadInputEncoding,
} from '$lib/models/payload-encoding';
import type { Payloads } from '$lib/types';
import { atob } from '$lib/utilities/atob';
import { getSinglePayload } from '$lib/utilities/encode-payload';
import PayloadDecoder from '../event/payload-decoder.svelte';
import PayloadInputWithEncoding from '../payload-input-with-encoding.svelte';
export let input: string;
export let editInput: boolean;
export let encoding: Writable<PayloadInputEncoding>;
export let messageType: string;
export let payloads: Payloads;
export let showEditActions: boolean = false;
let initialInput = '';
let initialEncoding: PayloadInputEncoding = 'json/plain';
let initialMessageType = '';
let loading = true;
const setInitialInput = (decodedValue: string): void => {
initialInput = getSinglePayload(decodedValue);
input = initialInput;
const currentEncoding = atob(
String(payloads?.payloads[0]?.metadata?.encoding ?? 'json/plain'),
);
const currentMessageType = payloads?.payloads[0]?.metadata?.messageType
? atob(String(payloads?.payloads[0]?.metadata?.messageType))
: '';
if (isPayloadInputEncodingType(currentEncoding)) {
$encoding = currentEncoding;
initialEncoding = $encoding;
if (currentEncoding === 'json/protobuf' && currentMessageType) {
messageType = currentMessageType;
initialMessageType = currentMessageType;
}
}
loading = false;
};
const handleEdit = () => {
if (editInput) {
editInput = false;
input = initialInput;
$encoding = initialEncoding;
messageType = initialMessageType;
} else {
editInput = true;
input;
}
};
</script>
<div class="flex flex-col gap-1">
<PayloadDecoder value={payloads} key="payloads" onDecode={setInitialInput}>
<PayloadInputWithEncoding
bind:input
bind:encoding
bind:messageType
bind:loading
editing={editInput}
id="schedule-payload-input"
>
<div slot="action" class:hidden={!showEditActions}>
<Button variant="secondary" on:click={handleEdit}>
{editInput ? translate('common.cancel') : translate('common.edit')}
</Button>
</div>
</PayloadInputWithEncoding>
</PayloadDecoder>
</div>