-
Notifications
You must be signed in to change notification settings - Fork 8.3k
/
Copy pathrender_expressions.tsx
101 lines (93 loc) · 3.1 KB
/
render_expressions.tsx
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the "Elastic License
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
* Public License v 1"; you may not use this file except in compliance with, at
* your election, the "Elastic License 2.0", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/
import React, { useState } from 'react';
import {
EuiFlexItem,
EuiFlexGroup,
EuiPageBody,
EuiPageTemplate,
EuiPageSection,
EuiPageHeader,
EuiPageHeaderSection,
EuiPanel,
EuiText,
EuiTitle,
EuiButton,
EuiSpacer,
} from '@elastic/eui';
import { ExpressionsStart } from '@kbn/expressions-plugin/public';
import { Start as InspectorStart } from '@kbn/inspector-plugin/public';
import { ExpressionEditor } from './editor/expression_editor';
interface Props {
expressions: ExpressionsStart;
inspector: InspectorStart;
}
export function RenderExpressionsExample({ expressions, inspector }: Props) {
const [expression, updateExpression] = useState(
'markdownVis "## expressions explorer rendering"'
);
const expressionChanged = (value: string) => {
updateExpression(value);
};
const inspectorAdapters = {};
return (
<EuiPageBody>
<EuiPageHeader>
<EuiPageHeaderSection>
<EuiTitle size="l">
<h1>Render expressions</h1>
</EuiTitle>
</EuiPageHeaderSection>
</EuiPageHeader>
<EuiPageTemplate.Section>
<EuiPageSection>
<EuiFlexGroup>
<EuiFlexItem>
<EuiText>
In the below editor you can enter your expression and render it. Using
ReactExpressionRenderer component makes that very easy.
</EuiText>
</EuiFlexItem>
<EuiFlexItem>
<EuiButton
onClick={() => {
inspector.open(inspectorAdapters);
}}
>
Open Inspector
</EuiButton>
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer />
<EuiFlexGroup gutterSize="l">
<EuiFlexItem>
<EuiPanel data-test-subj="expressionEditor" paddingSize="none" role="figure">
<ExpressionEditor value={expression} onChange={expressionChanged} />
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem>
<EuiPanel data-test-subj="expressionRender" paddingSize="none" role="figure">
<expressions.ReactExpressionRenderer
expression={expression}
debug={true}
onData$={(result, panels) => {
Object.assign(inspectorAdapters, panels);
}}
renderError={(message: any) => {
return <div>{message}</div>;
}}
/>
</EuiPanel>
</EuiFlexItem>
</EuiFlexGroup>
</EuiPageSection>
</EuiPageTemplate.Section>
</EuiPageBody>
);
}