Merge remote-tracking branch 'origin/master' into feature/merge-code

This commit is contained in:
Fuyao Zhao 2019-03-11 13:15:04 -07:00
commit 7c3fe2c8eb
151 changed files with 2243 additions and 4802 deletions

View file

@ -45,18 +45,6 @@ with dashboard*.
[[loading-a-saved-dashboard]]
To import, export, and delete dashboards, see <<managing-saved-objects>>.
[float]
=== Changing the Color Theme ===
By default, Kibana dashboards use the light color theme. To use the dark color theme:
. Go to the menu bar and click *Edit*.
. Click *Options* in the menu bar.
. Select *Use dark theme*.
To set the dark theme as the default, go to *Management > Advanced Settings*.
Scroll down to *Dashboard* and toggle *Dark Theme* to *On*.
[[customizing-your-dashboard]]
== Arranging Dashboard Elements

View file

@ -39,6 +39,13 @@ Alternatively, you can download other Docker images that contain only features
available under the Apache 2.0 license. To download the images, go to
https://www.docker.elastic.co[www.docker.elastic.co].
[float]
=== Running Kibana on Docker for development
Kibana can be quickly started and connected to a local Elasticsearch container for development
or testing use with the following command:
--------------------------------------------
docker run --link YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID:elasticsearch -p 5601:5601 {docker-repo}:{version}
--------------------------------------------
endif::[]
[float]

View file

@ -95,7 +95,7 @@
},
"dependencies": {
"@elastic/datemath": "5.0.2",
"@elastic/eui": "9.0.2",
"@elastic/eui": "9.2.1",
"@elastic/filesaver": "1.1.2",
"@elastic/good": "8.1.1-kibana2",
"@elastic/numeral": "2.3.2",

File diff suppressed because it is too large Load diff

View file

@ -57,13 +57,8 @@
* 5. Fixing this bug means we now need to align the children to the right.
*/
:focus:not([class^="eui"]) {
z-index: 1;
/* 1 */
outline: none !important;
/* 2 */
-webkit-box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #006BB4;
box-shadow: 0 0 0 1px #FFF, 0 0 0 2px #006BB4;
/* 3 */ }
-webkit-animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards focusRingAnimate;
animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards focusRingAnimate; }
/**
* 1. Required for IE11.
@ -144,7 +139,7 @@ main {
appearance: none;
cursor: pointer;
padding: 4px 12px 5px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
height: 30px;
@ -205,13 +200,13 @@ main {
* 1. Override Bootstrap.
*/
.kuiButton--basic {
color: #2D2D2D;
color: #343741;
background-color: #F5F7FA; }
.kuiButton--basic:not(a):enabled:focus {
color: #2D2D2D; }
color: #343741; }
a.kuiButton--basic:not(.kuiButton-isDisabled):focus {
/* 1 */
color: #2D2D2D; }
color: #343741; }
.kuiButton--basic:enabled:hover {
background-color: #d3dce9 !important;
/* 1 */ }
@ -494,7 +489,7 @@ main {
border: none;
line-height: 1;
font-size: 16px;
color: #2D2D2D !important;
color: #343741 !important;
/* 1 */
cursor: pointer;
opacity: 0.35; }
@ -510,7 +505,7 @@ main {
padding: 5px 0px;
border: none;
border-bottom: dotted 2px #D3DAE6;
font-size: 14px;
font-size: 16px;
cursor: pointer; }
.kuiExpressionButton__description {
@ -518,7 +513,7 @@ main {
text-transform: uppercase; }
.kuiExpressionButton__value {
color: #2D2D2D;
color: #343741;
text-transform: lowercase; }
.kuiExpressionButton-isActive {
@ -562,9 +557,9 @@ main {
/* 2 */
margin: 0 !important;
/* 2 */
font: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important;
font: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important;
/* 2 */
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important;
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important;
/* 2 */
font-size: 10px !important;
/* 2 */
@ -611,14 +606,14 @@ main {
line-height: 1.5; }
.kuiCheckBoxLabel__text {
font-size: 14px;
font-size: 16px;
margin-left: 8px; }
/**
* 1. Override Bootstrap.
*/
.kuiLabel {
font-size: 14px;
font-size: 16px;
line-height: 1.5;
font-weight: bold;
margin-bottom: 0;
@ -628,7 +623,7 @@ main {
width: 180px;
display: inline-block;
position: relative;
font-size: 14px;
font-size: 16px;
line-height: 1.5; }
.kuiSearchInput.kuiSearchInput-isInvalid .kuiSearchInput__input {
border-color: #BD271E; }
@ -648,12 +643,12 @@ main {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
padding: 4px 12px 4px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #2D2D2D;
color: #343741;
background-color: #fbfcfd;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px;
@ -687,12 +682,12 @@ main {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
padding: 4px 12px 4px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #2D2D2D;
color: #343741;
background-color: #fbfcfd;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px;
@ -744,12 +739,12 @@ main {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
padding: 4px 12px 4px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #2D2D2D;
color: #343741;
border: 1px solid transparent;
/* 1 */
background-color: transparent; }
@ -759,12 +754,12 @@ main {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
padding: 4px 12px 4px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #2D2D2D;
color: #343741;
background-color: #fbfcfd;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px;
@ -802,12 +797,12 @@ main {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
padding: 4px 12px 4px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #2D2D2D;
color: #343741;
background-color: #fbfcfd;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px;
@ -950,11 +945,11 @@ main {
.kuiInfoPanelHeader__icon {
margin-right: 10px;
font-size: 14px;
font-size: 16px;
line-height: 1.5; }
.kuiInfoPanelHeader__title {
font-size: 14px;
font-size: 16px;
line-height: 1.5;
font-weight: 700; }
@ -964,7 +959,7 @@ main {
margin-top: 8px; }
.kuiInfoPanelBody__message {
font-size: 14px;
font-size: 16px;
line-height: 1.5; }
.kuiLink {
@ -1052,7 +1047,7 @@ main {
/* 2 */
color: #006BB4;
/* 1 */
font-size: 14px; }
font-size: 16px; }
.kuiLocalBreadcrumb__link:visited, .kuiLocalBreadcrumb__link:active {
color: #006BB4; }
.kuiLocalBreadcrumb__link:hover {
@ -1096,7 +1091,7 @@ main {
background-color: transparent;
border: none;
font-size: 14px;
color: #2D2D2D;
color: #343741;
padding: 3px 6px;
border-radius: 4px; }
.kuiDatePickerNavigationButton:hover, .kuiDatePickerNavigationButton:active {
@ -1111,12 +1106,12 @@ main {
-webkit-box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4;
box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4;
/* 3 */
color: #2D2D2D;
color: #343741;
/* 1 */ }
.kuiDatePickerHeaderCell {
padding: 9px 0;
color: #2D2D2D;
color: #343741;
font-size: 14px;
font-weight: bold;
text-align: center;
@ -1145,7 +1140,7 @@ main {
background-color: transparent;
width: 100%;
border: 1px solid transparent;
color: #2D2D2D;
color: #343741;
font-size: 14px;
padding: 8px;
border-radius: 4px;
@ -1158,7 +1153,7 @@ main {
-webkit-box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4;
box-shadow: 0 0 0 1px transparent, 0 0 0 2px #006BB4;
/* 3 */
color: #2D2D2D;
color: #343741;
/* 1 */ }
.kuiDatePickerRowCellContent:disabled {
pointer-events: none;
@ -1170,7 +1165,7 @@ main {
color: #006BB4; }
.kuiDatePickerRowCellContent.kuiDatePickerRowCellContent-isSelected {
background-color: #69707D;
color: #2D2D2D; }
color: #343741; }
.kuiDatePickerRowCellContent:hover, .kuiDatePickerRowCellContent:active {
cursor: pointer;
color: #F5F7FA;
@ -1192,7 +1187,7 @@ main {
border: none;
line-height: 1;
font-size: 16px;
color: #2D2D2D !important;
color: #343741 !important;
/* 1 */
cursor: pointer;
opacity: 0.35;
@ -1228,7 +1223,7 @@ main {
/* 1 */
margin-bottom: 12px;
font-size: 18px;
color: #2D2D2D; }
color: #343741; }
.kuiLocalDropdownSection {
margin-bottom: 16px; }
@ -1258,7 +1253,7 @@ main {
font-weight: 700;
margin-bottom: 0;
/* 1 */
color: #2D2D2D; }
color: #343741; }
.kuiLocalDropdownHeader__actions {
display: -webkit-box;
@ -1282,7 +1277,7 @@ main {
margin-bottom: 12px;
padding: 5px 15px;
font-size: 14px;
color: #2D2D2D;
color: #343741;
background-color: #fbfcfd;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px; }
@ -1297,7 +1292,7 @@ main {
margin-bottom: 16px;
padding: 6px 10px;
font-size: 14px;
color: #2D2D2D;
color: #343741;
background-color: #FFF;
border-left: solid 2px #BD271E; }
@ -1328,9 +1323,9 @@ main {
-ms-flex-align: center;
align-items: center;
padding: 2px 8px;
font-size: 14px;
font-size: 16px;
background-color: transparent;
color: #2D2D2D;
color: #343741;
border: 0;
cursor: pointer;
border-bottom: solid 2px transparent; }
@ -1375,7 +1370,7 @@ main {
justify-content: space-between;
min-height: 69px;
/* 1 */
color: #2D2D2D;
color: #343741;
background-color: #FFF;
line-height: 1.5;
border-bottom: solid 1px #D3DAE6; }
@ -1435,12 +1430,12 @@ main {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
padding: 4px 12px 4px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #2D2D2D;
color: #343741;
background-color: #fbfcfd;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px;
@ -1516,12 +1511,12 @@ main {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
padding: 4px 12px 4px;
font-size: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #2D2D2D;
color: #343741;
background-color: #fbfcfd;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 4px;
@ -1557,7 +1552,7 @@ main {
.kuiLocalSearchButton {
width: 43px;
height: 32px;
font-size: 14px;
font-size: 16px;
line-height: 0;
/* 1 */
color: #FFF;
@ -1629,7 +1624,7 @@ main {
align-items: center;
height: 100%;
padding: 12px 8px;
font-size: 14px;
font-size: 16px;
font-weight: bold;
border-bottom: 1px solid #D3DAE6;
-webkit-box-flex: 1;
@ -1714,14 +1709,14 @@ main {
* 2. Safari won't respect :enabled:hover/active on links.
*/
.kuiMenuButton--basic {
color: #2D2D2D;
color: #343741;
background-color: #FFF; }
.kuiMenuButton--basic:focus {
color: #2D2D2D !important;
color: #343741 !important;
/* 1 */ }
.kuiMenuButton--basic:hover, .kuiMenuButton--basic:active {
/* 2 */
color: #2D2D2D !important;
color: #343741 !important;
/* 1 */
background-color: #F5F7FA; }
.kuiMenuButton--basic:disabled {
@ -1841,7 +1836,7 @@ main {
border-bottom: 1px solid #D3DAE6; }
.kuiModalHeader__title {
font-size: 18.0px; }
font-size: 20px; }
.kuiModalHeaderCloseButton {
display: inline-block;
@ -1856,9 +1851,9 @@ main {
background-color: transparent;
line-height: 1;
/* 2 */
font-size: 18.0px; }
font-size: 20px; }
.kuiModalHeaderCloseButton:hover {
color: #2D2D2D; }
color: #343741; }
.kuiModalBody {
padding: 20px; }
@ -1917,7 +1912,7 @@ main {
/* 1 */ }
.kuiPagerText {
font-size: 14px;
font-size: 16px;
line-height: 1.5;
color: #69707D;
white-space: nowrap;
@ -2041,7 +2036,7 @@ main {
* 1. This way we can use h1, h2, etc.
*/
.kuiPanelHeader__title {
font-size: 18.0px;
font-size: 20px;
line-height: 1.5;
margin: 0;
/* 1 */ }
@ -2198,7 +2193,7 @@ main {
background-color: #F5F7FA;
border-bottom: 1px solid #D3DAE6;
padding: 12px;
font-size: 14px; }
font-size: 16px; }
.kuiEmptyTablePrompt {
display: -webkit-box;
@ -2217,7 +2212,7 @@ main {
padding: 30px; }
.kuiEmptyTablePrompt__message {
font-size: 18.0px;
font-size: 20px;
color: #69707D;
line-height: 1.5; }
@ -2298,7 +2293,7 @@ main {
/* 1 */ }
.kuiTableHeaderCell {
font-size: 14px;
font-size: 16px;
font-weight: 400;
text-align: left;
max-width: 20px;
@ -2372,12 +2367,12 @@ main {
display: none; }
.kuiTableRowCell {
font-size: 14px;
font-size: 16px;
font-weight: 400;
text-align: left;
max-width: 20px;
/* 1 */
color: #2D2D2D;
color: #343741;
border-top: 1px solid #D3DAE6;
vertical-align: middle; }
@ -2445,7 +2440,7 @@ main {
.kuiTableInfo {
padding: 30px;
font-size: 18.0px;
font-size: 20px;
color: #69707D;
line-height: 1.5; }
@ -2470,7 +2465,7 @@ main {
/* 1 */
cursor: pointer;
padding: 10px 30px;
font-size: 14px;
font-size: 16px;
color: #69707D;
background-color: transparent;
/* 1 */
@ -2502,7 +2497,7 @@ main {
background-color: #F5F7FA; }
.kuiTab.kuiTab-isSelected {
cursor: default;
color: #2D2D2D;
color: #343741;
background-color: transparent;
border-bottom-color: transparent; }
@ -2522,9 +2517,9 @@ main {
/* 1 */
line-height: inherit;
/* 1 */
color: #2D2D2D; }
color: #343741; }
.kuiToggleButton:focus {
color: #2D2D2D; }
color: #343741; }
.kuiToggleButton:active {
color: #006BB4 !important;
/* 2 */ }
@ -2767,7 +2762,7 @@ main {
-ms-flex: 1 1 auto;
flex: 1 1 auto;
position: relative;
font-size: 14px;
font-size: 16px;
max-width: 800px; }
.kuiToolBarSearchBox__icon {
@ -2784,10 +2779,10 @@ main {
width: 100%;
min-width: 200px;
padding: 4px 12px 5px 28px;
font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
/* 1 */
background-color: #FFF;
color: #2D2D2D;
color: #343741;
border-radius: 4px;
font-size: 1em;
border: 1px solid #D3DAE6;
@ -2803,7 +2798,7 @@ main {
* 1. We don't want the text to take up two lines and overflow the ToolBar.
*/
.kuiToolBarText {
font-size: 14px;
font-size: 16px;
line-height: 1.5;
color: #69707D;
white-space: nowrap;
@ -2827,7 +2822,7 @@ main {
/* 1 */
font-weight: 400;
/* 1 */
font-size: 18.0px; }
font-size: 20px; }
/**
* 1. Override p.
@ -2838,7 +2833,7 @@ main {
font-weight: 700;
/* 1 */
line-height: 1.5;
font-size: 14px; }
font-size: 16px; }
/**
* 1. Override p.
@ -2849,7 +2844,7 @@ main {
font-weight: 400;
/* 1 */
line-height: 1.5;
font-size: 14px; }
font-size: 16px; }
.kuiSubText {
margin: 0;

View file

@ -1,9 +1,8 @@
// We apply brute force focus states to anything not coming from Eui
// which has focus states designed at the component level.
:focus {
&:not([class^="eui"]),
{
@include focus;
&:not([class^="eui"]) {
@include euiFocusRing;
}
}

View file

@ -1,6 +1,5 @@
// EUI global scope is used for KUI variables till fully deprecated
@import '../../../node_modules/@elastic/eui/src/themes/k6/k6_globals';
@import '../../../node_modules/@elastic/eui/src/themes/k6/k6_colors_dark';
@import '../../../node_modules/@elastic/eui/src/themes/eui/eui_colors_dark';
@import '../../../node_modules/@elastic/eui/src/global_styling/functions/index';
@import '../../../node_modules/@elastic/eui/src/global_styling/variables/index';
@import '../../../node_modules/@elastic/eui/src/global_styling/mixins/index';

View file

@ -1,6 +1,5 @@
// EUI global scope is used for KUI variables till fully deprecated
@import '../../../node_modules/@elastic/eui/src/themes/k6/k6_globals';
@import '../../../node_modules/@elastic/eui/src/themes/k6/k6_colors_light';
@import '../../../node_modules/@elastic/eui/src/themes/eui/eui_colors_light';
@import '../../../node_modules/@elastic/eui/src/global_styling/functions/index';
@import '../../../node_modules/@elastic/eui/src/global_styling/variables/index';
@import '../../../node_modules/@elastic/eui/src/global_styling/mixins/index';

View file

@ -76,19 +76,8 @@ exports[`renders ControlsTab 1`] = `
hasShadow={false}
paddingSize="m"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiFormRow
describedByIds={Array []}
fullWidth={false}
@ -120,7 +109,6 @@ exports[`renders ControlsTab 1`] = `
</EuiFormRow>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiFormRow

View file

@ -5,18 +5,10 @@ exports[`Apply and Cancel change btns enabled when there are changes 1`] = `
className="icvContainer"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
data-test-subj="inputControlItem"
grow={true}
key="mock-list-control"
style={
Object {
@ -44,16 +36,9 @@ exports[`Apply and Cancel change btns enabled when there are changes 1`] = `
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -73,7 +58,6 @@ exports[`Apply and Cancel change btns enabled when there are changes 1`] = `
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -92,7 +76,6 @@ exports[`Apply and Cancel change btns enabled when there are changes 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -119,18 +102,10 @@ exports[`Clear btns enabled when there are values 1`] = `
className="icvContainer"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
data-test-subj="inputControlItem"
grow={true}
key="mock-list-control"
style={
Object {
@ -158,16 +133,9 @@ exports[`Clear btns enabled when there are values 1`] = `
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -187,7 +155,6 @@ exports[`Clear btns enabled when there are values 1`] = `
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -206,7 +173,6 @@ exports[`Clear btns enabled when there are values 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -233,18 +199,10 @@ exports[`Renders list control 1`] = `
className="icvContainer"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
data-test-subj="inputControlItem"
grow={true}
key="mock-list-control"
style={
Object {
@ -272,16 +230,9 @@ exports[`Renders list control 1`] = `
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -301,7 +252,6 @@ exports[`Renders list control 1`] = `
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -320,7 +270,6 @@ exports[`Renders list control 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -347,18 +296,10 @@ exports[`Renders range control 1`] = `
className="icvContainer"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
data-test-subj="inputControlItem"
grow={true}
key="mock-range-control"
style={
Object {
@ -392,16 +333,9 @@ exports[`Renders range control 1`] = `
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -421,7 +355,6 @@ exports[`Renders range control 1`] = `
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -440,7 +373,6 @@ exports[`Renders range control 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty

View file

@ -42,15 +42,9 @@ exports[`renders RangeControl 1`] = `
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<input
@ -67,7 +61,6 @@ exports[`renders RangeControl 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="icvInputRange__container"
component="div"
grow={false}
>
<InputRange
@ -104,7 +97,6 @@ exports[`renders RangeControl 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<input

View file

@ -340,18 +340,12 @@ exports[`Inspector Data View component should render loading state 1`] = `
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--alignItemsCenter euiFlexGroup--justifyContentCenter euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -367,7 +361,6 @@ exports[`Inspector Data View component should render loading state 1`] = `
className="euiPanel euiPanel--paddingMedium eui-textCenter"
>
<EuiLoadingChart
mono={false}
size="m"
>
<div

View file

@ -217,9 +217,8 @@
i18n-id="kbnVislibVisTypes.controls.gaugeOptions.addRangeTitle"
i18n-default-message="Add Range"
></div>
<div class="euiSpacer euiSpacer--s"></div>
<div
class="text text-center text-info"
class="euiFormHelpText"
i18n-id="kbnVislibVisTypes.controls.gaugeOptions.howToChangeColorsDescription"
i18n-default-message="Note: colors can be changed in the legend"
></div>

View file

@ -36,16 +36,9 @@ exports[`render 1`] = `
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexEnd"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -54,14 +54,14 @@ test('renders DashboardCloneModal', () => {
test('onClone', () => {
createComponent();
findTestSubject(component, 'cloneConfirmButton', false).simulate('click');
findTestSubject(component, 'cloneConfirmButton').simulate('click');
sinon.assert.calledWith(onClone, 'dash title');
sinon.assert.notCalled(onClose);
});
test('onClose', () => {
createComponent();
findTestSubject(component, 'cloneCancelButton', false).simulate('click');
findTestSubject(component, 'cloneCancelButton').simulate('click');
sinon.assert.calledOnce(onClose);
sinon.assert.notCalled(onClone);
});
@ -70,6 +70,6 @@ test('title', () => {
createComponent();
const event = { target: { value: 'a' } };
component.find('input').simulate('change', event);
findTestSubject(component, 'cloneConfirmButton', false).simulate('click');
findTestSubject(component, 'cloneConfirmButton').simulate('click');
sinon.assert.calledWith(onClone, 'a');
});

View file

@ -49,16 +49,9 @@ exports[`render 1`] = `
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexEnd"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -6,19 +6,8 @@ exports[`apmUiEnabled 1`] = `
hasShadow={false}
paddingSize="l"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiTitle
size="m"
textTransform="none"
@ -47,17 +36,13 @@ exports[`apmUiEnabled 1`] = `
</EuiFlexGroup>
<EuiSpacer />
<EuiFlexGroup
alignItems="stretch"
className="homeAddData__flexGroup"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceAround"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -92,7 +77,6 @@ exports[`apmUiEnabled 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -127,7 +111,6 @@ exports[`apmUiEnabled 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -162,7 +145,6 @@ exports[`apmUiEnabled 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -200,13 +182,9 @@ exports[`apmUiEnabled 1`] = `
<EuiHorizontalRule />
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
>
<EuiFlexItem
className="homAddData__footerItem"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -246,8 +224,6 @@ exports[`apmUiEnabled 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="homAddData__footerItem"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -295,19 +271,8 @@ exports[`isNewKibanaInstance 1`] = `
hasShadow={false}
paddingSize="l"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiTitle
size="m"
textTransform="none"
@ -336,17 +301,13 @@ exports[`isNewKibanaInstance 1`] = `
</EuiFlexGroup>
<EuiSpacer />
<EuiFlexGroup
alignItems="stretch"
className="homeAddData__flexGroup"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceAround"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -381,7 +342,6 @@ exports[`isNewKibanaInstance 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -416,7 +376,6 @@ exports[`isNewKibanaInstance 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -454,13 +413,9 @@ exports[`isNewKibanaInstance 1`] = `
<EuiHorizontalRule />
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
>
<EuiFlexItem
className="homAddData__footerItem homAddData__footerItem--highlight"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -500,8 +455,6 @@ exports[`isNewKibanaInstance 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="homAddData__footerItem homAddData__footerItem--highlight"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -549,19 +502,8 @@ exports[`mlEnabled 1`] = `
hasShadow={false}
paddingSize="l"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiTitle
size="m"
textTransform="none"
@ -590,17 +532,13 @@ exports[`mlEnabled 1`] = `
</EuiFlexGroup>
<EuiSpacer />
<EuiFlexGroup
alignItems="stretch"
className="homeAddData__flexGroup"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceAround"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -635,7 +573,6 @@ exports[`mlEnabled 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -670,7 +607,6 @@ exports[`mlEnabled 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -705,7 +641,6 @@ exports[`mlEnabled 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -743,13 +678,9 @@ exports[`mlEnabled 1`] = `
<EuiHorizontalRule />
<EuiFlexGrid
columns={3}
gutterSize="l"
responsive={true}
>
<EuiFlexItem
className="homAddData__footerItem"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -789,8 +720,6 @@ exports[`mlEnabled 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="homAddData__footerItem"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -830,8 +759,6 @@ exports[`mlEnabled 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="homAddData__footerItem"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -879,19 +806,8 @@ exports[`render 1`] = `
hasShadow={false}
paddingSize="l"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiTitle
size="m"
textTransform="none"
@ -920,17 +836,13 @@ exports[`render 1`] = `
</EuiFlexGroup>
<EuiSpacer />
<EuiFlexGroup
alignItems="stretch"
className="homeAddData__flexGroup"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceAround"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -965,7 +877,6 @@ exports[`render 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -1000,7 +911,6 @@ exports[`render 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCard
@ -1038,13 +948,9 @@ exports[`render 1`] = `
<EuiHorizontalRule />
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
>
<EuiFlexItem
className="homAddData__footerItem"
component="div"
grow={true}
>
<EuiText
grow={true}
@ -1084,8 +990,6 @@ exports[`render 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="homAddData__footerItem"
component="div"
grow={true}
>
<EuiText
grow={true}

View file

@ -16,19 +16,8 @@ exports[`home directories should not render directory entry when showOnHomePage
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -52,14 +41,10 @@ exports[`home directories should not render directory entry when showOnHomePage
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -82,8 +67,6 @@ exports[`home directories should not render directory entry when showOnHomePage
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -92,17 +75,10 @@ exports[`home directories should not render directory entry when showOnHomePage
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -156,19 +132,8 @@ exports[`home directories should render ADMIN directory entry in "Manage" panel
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -192,14 +157,10 @@ exports[`home directories should render ADMIN directory entry in "Manage" panel
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -222,13 +183,9 @@ exports[`home directories should render ADMIN directory entry in "Manage" panel
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
>
<EuiFlexItem
className="homHome__synopsisItem"
component="div"
grow={true}
key="index_patterns"
>
<Synopsis
@ -247,17 +204,10 @@ exports[`home directories should render ADMIN directory entry in "Manage" panel
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -311,19 +261,8 @@ exports[`home directories should render DATA directory entry in "Explore Data" p
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -347,12 +286,9 @@ exports[`home directories should render DATA directory entry in "Explore Data" p
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
>
<EuiFlexItem
className="homHome__synopsisItem"
component="div"
grow={true}
key="dashboard"
>
<Synopsis
@ -366,10 +302,7 @@ exports[`home directories should render DATA directory entry in "Explore Data" p
</EuiFlexGrid>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -392,8 +325,6 @@ exports[`home directories should render DATA directory entry in "Explore Data" p
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -402,17 +333,10 @@ exports[`home directories should render DATA directory entry in "Explore Data" p
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -466,19 +390,8 @@ exports[`home isNewKibanaInstance should safely handle execeptions 1`] = `
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -502,14 +415,10 @@ exports[`home isNewKibanaInstance should safely handle execeptions 1`] = `
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -532,8 +441,6 @@ exports[`home isNewKibanaInstance should safely handle execeptions 1`] = `
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -542,17 +449,10 @@ exports[`home isNewKibanaInstance should safely handle execeptions 1`] = `
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -606,19 +506,8 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to false when t
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -642,14 +531,10 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to false when t
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -672,8 +557,6 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to false when t
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -682,17 +565,10 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to false when t
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -746,19 +622,8 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to true when th
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -782,14 +647,10 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to true when th
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -812,8 +673,6 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to true when th
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -822,17 +681,10 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to true when th
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -886,19 +738,8 @@ exports[`home should render home component 1`] = `
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -922,14 +763,10 @@ exports[`home should render home component 1`] = `
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -952,8 +789,6 @@ exports[`home should render home component 1`] = `
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -962,17 +797,10 @@ exports[`home should render home component 1`] = `
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -1026,19 +854,8 @@ exports[`home welcome should show the normal home page if loading fails 1`] = `
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -1062,14 +879,10 @@ exports[`home welcome should show the normal home page if loading fails 1`] = `
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -1092,8 +905,6 @@ exports[`home welcome should show the normal home page if loading fails 1`] = `
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -1102,17 +913,10 @@ exports[`home welcome should show the normal home page if loading fails 1`] = `
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -1166,19 +970,8 @@ exports[`home welcome should show the normal home page if welcome screen is disa
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -1202,14 +995,10 @@ exports[`home welcome should show the normal home page if welcome screen is disa
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -1232,8 +1021,6 @@ exports[`home welcome should show the normal home page if welcome screen is disa
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -1242,17 +1029,10 @@ exports[`home welcome should show the normal home page if welcome screen is disa
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText
@ -1313,19 +1093,8 @@ exports[`home welcome stores skip welcome setting if skipped 1`] = `
<EuiSpacer
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -1349,14 +1118,10 @@ exports[`home welcome stores skip welcome setting if skipped 1`] = `
<EuiFlexGrid
columns={2}
gutterSize="s"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiPanel
grow={true}
hasShadow={false}
@ -1379,8 +1144,6 @@ exports[`home welcome stores skip welcome setting if skipped 1`] = `
/>
<EuiFlexGrid
columns={2}
gutterSize="l"
responsive={true}
/>
</EuiPanel>
</EuiFlexItem>
@ -1389,17 +1152,10 @@ exports[`home welcome stores skip welcome setting if skipped 1`] = `
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="eui-textCenter"
component="div"
grow={false}
>
<EuiText

View file

@ -28,30 +28,16 @@ exports[`render 1`] = `
/>
<EuiFlexGroup
alignItems="flexEnd"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={true}
>
<EuiFlexItem
className="homRecentlyAccessed__flexItem"
component="div"
grow={false}
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<EuiFlexItem
className="homRecentlyAccessed__item"
component="div"
grow={false}
style={
Object {
@ -77,7 +63,6 @@ exports[`render 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="homRecentlyAccessed__separator"
component="div"
grow={false}
>
<EuiText
@ -92,7 +77,6 @@ exports[`render 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="homRecentlyAccessed__item"
component="div"
grow={false}
style={
Object {
@ -119,7 +103,6 @@ exports[`render 1`] = `
</EuiFlexGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>

View file

@ -5,15 +5,9 @@ exports[`render 1`] = `
<EuiHorizontalRule />
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiText
@ -30,7 +24,6 @@ exports[`render 1`] = `
</EuiText>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -3,16 +3,11 @@
exports[`render 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -25,7 +20,6 @@ exports[`render 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -93,16 +87,11 @@ exports[`render 1`] = `
exports[`statusCheckState checking status 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -115,7 +104,6 @@ exports[`statusCheckState checking status 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -178,23 +166,14 @@ exports[`statusCheckState checking status 1`] = `
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<Content
text="custom status check description"
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -226,16 +205,11 @@ exports[`statusCheckState checking status 1`] = `
exports[`statusCheckState failed status check - error 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -248,7 +222,6 @@ exports[`statusCheckState failed status check - error 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -311,23 +284,14 @@ exports[`statusCheckState failed status check - error 1`] = `
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<Content
text="custom status check description"
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -364,16 +328,11 @@ exports[`statusCheckState failed status check - error 1`] = `
exports[`statusCheckState failed status check - no data 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -386,7 +345,6 @@ exports[`statusCheckState failed status check - no data 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -449,23 +407,14 @@ exports[`statusCheckState failed status check - no data 1`] = `
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<Content
text="custom status check description"
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -502,16 +451,11 @@ exports[`statusCheckState failed status check - no data 1`] = `
exports[`statusCheckState initial state - no check has been attempted 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -524,7 +468,6 @@ exports[`statusCheckState initial state - no check has been attempted 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -587,23 +530,14 @@ exports[`statusCheckState initial state - no check has been attempted 1`] = `
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<Content
text="custom status check description"
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -635,16 +569,11 @@ exports[`statusCheckState initial state - no check has been attempted 1`] = `
exports[`statusCheckState successful status check 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={false}
wrap={true}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -657,7 +586,6 @@ exports[`statusCheckState successful status check 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -720,23 +648,14 @@ exports[`statusCheckState successful status check 1`] = `
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<Content
text="custom status check description"
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -1,30 +1,13 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`props exportedFieldsUrl 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -61,37 +44,19 @@ exports[`props exportedFieldsUrl 1`] = `
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
`;
exports[`props iconType 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -100,7 +65,6 @@ exports[`props iconType 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -119,37 +83,19 @@ exports[`props iconType 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
`;
exports[`props isBeta 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -172,37 +118,19 @@ exports[`props isBeta 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
`;
exports[`props previewUrl 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -221,7 +149,6 @@ exports[`props previewUrl 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiImage
@ -237,30 +164,13 @@ exports[`props previewUrl 1`] = `
`;
exports[`render 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexGroup>
<EuiFlexItem>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -279,7 +189,6 @@ exports[`render 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>

View file

@ -124,17 +124,9 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiText
grow={true}
size="m"
@ -145,7 +137,6 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1
</EuiText>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -230,20 +221,12 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--alignItemsCenter euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
@ -262,7 +245,6 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -458,17 +440,9 @@ exports[`bulkCreate should display success message when bulkCreate is successful
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiText
grow={true}
size="m"
@ -479,7 +453,6 @@ exports[`bulkCreate should display success message when bulkCreate is successful
</EuiText>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -602,20 +575,12 @@ exports[`bulkCreate should display success message when bulkCreate is successful
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--alignItemsCenter euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
@ -634,7 +599,6 @@ exports[`bulkCreate should display success message when bulkCreate is successful
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -716,17 +680,9 @@ exports[`renders 1`] = `
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiText
grow={true}
size="m"
@ -737,7 +693,6 @@ exports[`renders 1`] = `
</EuiText>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -68,16 +68,9 @@ exports[`isCloudEnabled is false should render ON_PREM instructions with instruc
className="eui-textCenter"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonGroup

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 191 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 177 KiB

Before After
Before After

View file

@ -25,15 +25,9 @@ exports[`Header should render a different name, prompt, and beta tag if provided
</EuiTitle>
<EuiFlexGroup
alignItems="flexEnd"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiText
@ -87,15 +81,9 @@ exports[`Header should render normally 1`] = `
</EuiTitle>
<EuiFlexGroup
alignItems="flexEnd"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiText
@ -143,15 +131,9 @@ exports[`Header should render without including system indices 1`] = `
</EuiTitle>
<EuiFlexGroup
alignItems="flexEnd"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiText

View file

@ -3,15 +3,11 @@
exports[`LoadingState should render normally 1`] = `
<EuiFlexGroup
alignItems="center"
component="div"
direction="column"
gutterSize="s"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -34,7 +30,6 @@ exports[`LoadingState should render normally 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiLoadingSpinner

View file

@ -19,15 +19,9 @@ exports[`Header should mark the input as invalid 1`] = `
/>
<EuiFlexGroup
alignItems="flexEnd"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiForm
@ -97,7 +91,6 @@ exports[`Header should mark the input as invalid 1`] = `
</EuiForm>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -140,15 +133,9 @@ exports[`Header should render normally 1`] = `
/>
<EuiFlexGroup
alignItems="flexEnd"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiForm
@ -214,7 +201,6 @@ exports[`Header should render normally 1`] = `
</EuiForm>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -61,15 +61,9 @@ exports[`IndicesList should change pages 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -184,15 +178,9 @@ exports[`IndicesList should change per page 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -267,7 +255,6 @@ exports[`IndicesList should change per page 1`] = `
</EuiPopover>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPagination
@ -346,15 +333,9 @@ exports[`IndicesList should highlight the query in the matches 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -493,15 +474,9 @@ exports[`IndicesList should render normally 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -832,15 +807,9 @@ exports[`IndicesList updating props should render all new indices 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -915,7 +884,6 @@ exports[`IndicesList updating props should render all new indices 1`] = `
</EuiPopover>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPagination

View file

@ -3,15 +3,9 @@
exports[`LoadingIndices should render normally 1`] = `
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="center"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiLoadingSpinner
@ -19,7 +13,6 @@ exports[`LoadingIndices should render normally 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiText

View file

@ -24,21 +24,13 @@ exports[`StepTimeField should render a loading state when creating the index pat
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiLoadingSpinner />
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiText

View file

@ -27,15 +27,10 @@ exports[`TimeField should render a loading state 1`] = `
label={
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="xs"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<span>
@ -47,7 +42,6 @@ exports[`TimeField should render a loading state 1`] = `
</span>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiLoadingSpinner
@ -106,15 +100,10 @@ exports[`TimeField should render a selected time field 1`] = `
label={
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="xs"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<span>
@ -126,7 +115,6 @@ exports[`TimeField should render a selected time field 1`] = `
</span>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiLink
@ -196,15 +184,10 @@ exports[`TimeField should render normally 1`] = `
label={
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="xs"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<span>
@ -216,7 +199,6 @@ exports[`TimeField should render normally 1`] = `
</span>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiLink

View file

@ -3,17 +3,8 @@
exports[`Header should render normally 1`] = `
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiTitle
size="s"
textTransform="none"
@ -40,7 +31,6 @@ exports[`Header should render normally 1`] = `
</EuiText>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -1,17 +1,8 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`AddFilter should ignore strings with just spaces 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<EuiFlexItem
component="div"
grow={10}
>
<EuiFieldText
@ -23,10 +14,7 @@ exports[`AddFilter should ignore strings with just spaces 1`] = `
value=""
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiButton
color="primary"
fill={false}
@ -46,17 +34,8 @@ exports[`AddFilter should ignore strings with just spaces 1`] = `
`;
exports[`AddFilter should render normally 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<EuiFlexItem
component="div"
grow={10}
>
<EuiFieldText
@ -68,10 +47,7 @@ exports[`AddFilter should render normally 1`] = `
value=""
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiButton
color="primary"
fill={false}

View file

@ -120,16 +120,9 @@ exports[`Flyout conflicts should allow conflict resolution 1`] = `
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -147,7 +140,6 @@ exports[`Flyout conflicts should allow conflict resolution 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -265,16 +257,9 @@ exports[`Flyout should render import step 1`] = `
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -292,7 +277,6 @@ exports[`Flyout should render import step 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton

View file

@ -4,15 +4,9 @@ exports[`Header should render normally 1`] = `
<Fragment>
<EuiFlexGroup
alignItems="baseline"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -29,20 +23,14 @@ exports[`Header should render normally 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiFlexGroup
alignItems="baseline"
component="div"
direction="row"
gutterSize="m"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -66,7 +54,6 @@ exports[`Header should render normally 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -86,7 +73,6 @@ exports[`Header should render normally 1`] = `
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty

View file

@ -32,12 +32,7 @@ exports[`Relationships should render dashboards normally 1`] = `
</EuiTitle>
</EuiFlyoutHeader>
<EuiFlyoutBody>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="row"
>
<EuiDescriptionList>
<EuiDescriptionListTitle
style={
Object {
@ -191,12 +186,7 @@ exports[`Relationships should render index patterns normally 1`] = `
</EuiTitle>
</EuiFlyoutHeader>
<EuiFlyoutBody>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="row"
>
<EuiDescriptionList>
<EuiDescriptionListTitle
style={
Object {
@ -350,12 +340,7 @@ exports[`Relationships should render searches normally 1`] = `
</EuiTitle>
</EuiFlyoutHeader>
<EuiFlyoutBody>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="row"
>
<EuiDescriptionList>
<EuiDescriptionListTitle
style={
Object {
@ -521,12 +506,7 @@ exports[`Relationships should render visualizations normally 1`] = `
</EuiTitle>
</EuiFlyoutHeader>
<EuiFlyoutBody>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="row"
>
<EuiDescriptionList>
<EuiDescriptionListTitle
style={
Object {

View file

@ -3,24 +3,12 @@
exports[`AdvancedSettings should render normally 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<advanced_settings_page_title />
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<Search
categories={
Array [
@ -346,24 +334,12 @@ exports[`AdvancedSettings should render normally 1`] = `
exports[`AdvancedSettings should render specific setting if given setting key 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<advanced_settings_page_title />
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<Search
categories={
Array [

View file

@ -2,17 +2,9 @@
exports[`Field for array setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -103,7 +95,6 @@ exports[`Field for array setting should render as read only with help text if ov
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -111,17 +102,9 @@ exports[`Field for array setting should render as read only with help text if ov
exports[`Field for array setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -189,7 +172,6 @@ exports[`Field for array setting should render custom setting icon if it is cust
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -197,17 +179,9 @@ exports[`Field for array setting should render custom setting icon if it is cust
exports[`Field for array setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -264,7 +238,6 @@ exports[`Field for array setting should render default value if there is no user
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -272,17 +245,9 @@ exports[`Field for array setting should render default value if there is no user
exports[`Field for array setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -381,7 +346,6 @@ exports[`Field for array setting should render user value if there is user value
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -389,17 +353,9 @@ exports[`Field for array setting should render user value if there is user value
exports[`Field for boolean setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -494,7 +450,6 @@ exports[`Field for boolean setting should render as read only with help text if
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -502,17 +457,9 @@ exports[`Field for boolean setting should render as read only with help text if
exports[`Field for boolean setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -584,7 +531,6 @@ exports[`Field for boolean setting should render custom setting icon if it is cu
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -592,17 +538,9 @@ exports[`Field for boolean setting should render custom setting icon if it is cu
exports[`Field for boolean setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -663,7 +601,6 @@ exports[`Field for boolean setting should render default value if there is no us
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -671,17 +608,9 @@ exports[`Field for boolean setting should render default value if there is no us
exports[`Field for boolean setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -784,7 +713,6 @@ exports[`Field for boolean setting should render user value if there is user val
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -792,17 +720,9 @@ exports[`Field for boolean setting should render user value if there is user val
exports[`Field for image setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -890,7 +810,6 @@ exports[`Field for image setting should render as read only with help text if ov
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -898,17 +817,9 @@ exports[`Field for image setting should render as read only with help text if ov
exports[`Field for image setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -974,7 +885,6 @@ exports[`Field for image setting should render custom setting icon if it is cust
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -982,17 +892,9 @@ exports[`Field for image setting should render custom setting icon if it is cust
exports[`Field for image setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1047,7 +949,6 @@ exports[`Field for image setting should render default value if there is no user
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1055,17 +956,9 @@ exports[`Field for image setting should render default value if there is no user
exports[`Field for image setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1176,7 +1069,6 @@ exports[`Field for image setting should render user value if there is user value
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1184,17 +1076,9 @@ exports[`Field for image setting should render user value if there is user value
exports[`Field for json setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1306,7 +1190,6 @@ exports[`Field for json setting should render as read only with help text if ove
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1314,17 +1197,9 @@ exports[`Field for json setting should render as read only with help text if ove
exports[`Field for json setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1409,7 +1284,6 @@ exports[`Field for json setting should render custom setting icon if it is custo
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1417,17 +1291,9 @@ exports[`Field for json setting should render custom setting icon if it is custo
exports[`Field for json setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1547,7 +1413,6 @@ exports[`Field for json setting should render default value if there is no user
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1555,17 +1420,9 @@ exports[`Field for json setting should render default value if there is no user
exports[`Field for json setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1685,7 +1542,6 @@ exports[`Field for json setting should render user value if there is user value
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1693,17 +1549,9 @@ exports[`Field for json setting should render user value if there is user value
exports[`Field for markdown setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1811,7 +1659,6 @@ exports[`Field for markdown setting should render as read only with help text if
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1819,17 +1666,9 @@ exports[`Field for markdown setting should render as read only with help text if
exports[`Field for markdown setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -1914,7 +1753,6 @@ exports[`Field for markdown setting should render custom setting icon if it is c
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -1922,17 +1760,9 @@ exports[`Field for markdown setting should render custom setting icon if it is c
exports[`Field for markdown setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2006,7 +1836,6 @@ exports[`Field for markdown setting should render default value if there is no u
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2014,17 +1843,9 @@ exports[`Field for markdown setting should render default value if there is no u
exports[`Field for markdown setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2140,7 +1961,6 @@ exports[`Field for markdown setting should render user value if there is user va
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2148,17 +1968,9 @@ exports[`Field for markdown setting should render user value if there is user va
exports[`Field for number setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2249,7 +2061,6 @@ exports[`Field for number setting should render as read only with help text if o
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2257,17 +2068,9 @@ exports[`Field for number setting should render as read only with help text if o
exports[`Field for number setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2335,7 +2138,6 @@ exports[`Field for number setting should render custom setting icon if it is cus
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2343,17 +2145,9 @@ exports[`Field for number setting should render custom setting icon if it is cus
exports[`Field for number setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2410,7 +2204,6 @@ exports[`Field for number setting should render default value if there is no use
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2418,17 +2211,9 @@ exports[`Field for number setting should render default value if there is no use
exports[`Field for number setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2527,7 +2312,6 @@ exports[`Field for number setting should render user value if there is user valu
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2535,17 +2319,9 @@ exports[`Field for number setting should render user value if there is user valu
exports[`Field for select setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2653,7 +2429,6 @@ exports[`Field for select setting should render as read only with help text if o
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2661,17 +2436,9 @@ exports[`Field for select setting should render as read only with help text if o
exports[`Field for select setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2756,7 +2523,6 @@ exports[`Field for select setting should render custom setting icon if it is cus
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2764,17 +2530,9 @@ exports[`Field for select setting should render custom setting icon if it is cus
exports[`Field for select setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2848,7 +2606,6 @@ exports[`Field for select setting should render default value if there is no use
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2856,17 +2613,9 @@ exports[`Field for select setting should render default value if there is no use
exports[`Field for select setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -2982,7 +2731,6 @@ exports[`Field for select setting should render user value if there is user valu
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -2990,17 +2738,9 @@ exports[`Field for select setting should render user value if there is user valu
exports[`Field for string setting should render as read only with help text if overridden 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -3091,7 +2831,6 @@ exports[`Field for string setting should render as read only with help text if o
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -3099,17 +2838,9 @@ exports[`Field for string setting should render as read only with help text if o
exports[`Field for string setting should render custom setting icon if it is custom 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -3177,7 +2908,6 @@ exports[`Field for string setting should render custom setting icon if it is cus
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -3185,17 +2915,9 @@ exports[`Field for string setting should render custom setting icon if it is cus
exports[`Field for string setting should render default value if there is no user value set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -3252,7 +2974,6 @@ exports[`Field for string setting should render default value if there is no use
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>
@ -3260,17 +2981,9 @@ exports[`Field for string setting should render default value if there is no use
exports[`Field for string setting should render user value if there is user value is set 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="mgtAdvancedSettings__field"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiDescribedFormGroup
@ -3369,7 +3082,6 @@ exports[`Field for string setting should render user value if there is user valu
</EuiDescribedFormGroup>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
/>
</EuiFlexGroup>

View file

@ -46,15 +46,8 @@ exports[`Form should render normally 1`] = `
>
<EuiFlexGroup
alignItems="baseline"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<h2>
@ -115,15 +108,8 @@ exports[`Form should render normally 1`] = `
>
<EuiFlexGroup
alignItems="baseline"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<h2>
@ -167,15 +153,8 @@ exports[`Form should render normally 1`] = `
>
<EuiFlexGroup
alignItems="baseline"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<h2>
@ -183,7 +162,6 @@ exports[`Form should render normally 1`] = `
</h2>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<em>

View file

@ -990,40 +990,26 @@ exports[`NewVisModal filter for visualization types should render as expected 1`
className="visNewVisDialog__body"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="xl"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterExtraLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
<EuiFlexGroup
alignItems="stretch"
className="visNewVisDialog__list"
component="div"
direction="column"
gutterSize="none"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--directionColumn visNewVisDialog__list"
>
<EuiFlexItem
className="visNewVisDialog__searchWrapper"
component="div"
grow={false}
>
<div
@ -1128,7 +1114,6 @@ exports[`NewVisModal filter for visualization types should render as expected 1`
</EuiFlexItem>
<EuiFlexItem
className="visNewVisDialog__typesWrapper"
component="div"
grow={1}
>
<div
@ -1366,7 +1351,6 @@ exports[`NewVisModal filter for visualization types should render as expected 1`
</EuiFlexItem>
<EuiFlexItem
className="visNewVisDialog__description"
component="div"
grow={false}
>
<div
@ -2428,40 +2412,26 @@ exports[`NewVisModal should render as expected 1`] = `
className="visNewVisDialog__body"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="xl"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterExtraLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
<EuiFlexGroup
alignItems="stretch"
className="visNewVisDialog__list"
component="div"
direction="column"
gutterSize="none"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--directionColumn visNewVisDialog__list"
>
<EuiFlexItem
className="visNewVisDialog__searchWrapper"
component="div"
grow={false}
>
<div
@ -2566,7 +2536,6 @@ exports[`NewVisModal should render as expected 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="visNewVisDialog__typesWrapper"
component="div"
grow={1}
>
<div
@ -2789,7 +2758,6 @@ exports[`NewVisModal should render as expected 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="visNewVisDialog__description"
component="div"
grow={false}
>
<div

View file

@ -1,3 +1,4 @@
@import '@elastic/eui/src/components/tool_tip/variables';
@import '@elastic/eui/src/components/tool_tip/mixins';
.tvbVisTimeSeries {

View file

@ -3,20 +3,14 @@
exports[`render 1`] = `
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
style={
Object {
"flexGrow": 0,
}
}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle
@ -42,7 +36,6 @@ exports[`render 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiText

View file

@ -77,7 +77,7 @@ it('builds dark themed SASS', async () => {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
background: #191919 url(./images/img.png) url(ui/assets/favicons/favicon.ico); }
background: #232635 url(./images/img.png) url(ui/assets/favicons/favicon.ico); }
/*# sourceMappingURL=... */"
`);
});
@ -106,7 +106,7 @@ it('rewrites url imports', async () => {
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
background: #191919 url(__REPLACE_WITH_PUBLIC_PATH__foo/bar/images/img.png) url(__REPLACE_WITH_PUBLIC_PATH__ui/favicons/favicon.ico); }
background: #232635 url(__REPLACE_WITH_PUBLIC_PATH__foo/bar/images/img.png) url(__REPLACE_WITH_PUBLIC_PATH__ui/favicons/favicon.ico); }
/*# sourceMappingURL=... */"
`);

View file

@ -0,0 +1,244 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { getSortedObjectsForExport } from './get_sorted_objects_for_export';
describe('getSortedObjectsForExport()', () => {
const savedObjectsClient = {
errors: {} as any,
find: jest.fn(),
bulkGet: jest.fn(),
create: jest.fn(),
bulkCreate: jest.fn(),
delete: jest.fn(),
get: jest.fn(),
update: jest.fn(),
};
afterEach(() => {
savedObjectsClient.find.mockReset();
savedObjectsClient.bulkGet.mockReset();
savedObjectsClient.create.mockReset();
savedObjectsClient.bulkCreate.mockReset();
savedObjectsClient.delete.mockReset();
savedObjectsClient.get.mockReset();
savedObjectsClient.update.mockReset();
});
test('exports selected types and sorts them', async () => {
savedObjectsClient.find.mockResolvedValueOnce({
total: 2,
saved_objects: [
{
id: '2',
type: 'search',
references: [
{
type: 'index-pattern',
id: '1',
},
],
},
{
id: '1',
type: 'index-pattern',
references: [],
},
],
});
const response = await getSortedObjectsForExport({
savedObjectsClient,
exportSizeLimit: 500,
types: ['index-pattern', 'search'],
});
expect(response).toMatchInlineSnapshot(`
Array [
Object {
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"id": "2",
"references": Array [
Object {
"id": "1",
"type": "index-pattern",
},
],
"type": "search",
},
]
`);
expect(savedObjectsClient.find).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Object {
"perPage": 500,
"sortField": "_id",
"sortOrder": "asc",
"type": Array [
"index-pattern",
"search",
],
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('export selected types throws error when exceeding exportSizeLimit', async () => {
savedObjectsClient.find.mockResolvedValueOnce({
total: 2,
saved_objects: [
{
id: '2',
type: 'search',
references: [
{
type: 'index-pattern',
id: '1',
},
],
},
{
id: '1',
type: 'index-pattern',
references: [],
},
],
});
await expect(
getSortedObjectsForExport({
savedObjectsClient,
exportSizeLimit: 1,
types: ['index-pattern', 'search'],
})
).rejects.toThrowErrorMatchingInlineSnapshot(`"Can't export more than 1 objects"`);
});
test('exports selected objects and sorts them', async () => {
savedObjectsClient.bulkGet.mockResolvedValueOnce({
saved_objects: [
{
id: '2',
type: 'search',
references: [
{
type: 'index-pattern',
id: '1',
},
],
},
{
id: '1',
type: 'index-pattern',
references: [],
},
],
});
const response = await getSortedObjectsForExport({
exportSizeLimit: 10000,
savedObjectsClient,
types: ['index-pattern', 'search'],
objects: [
{
type: 'index-pattern',
id: '1',
},
{
type: 'search',
id: '2',
},
],
});
expect(response).toMatchInlineSnapshot(`
Array [
Object {
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"id": "2",
"references": Array [
Object {
"id": "1",
"type": "index-pattern",
},
],
"type": "search",
},
]
`);
expect(savedObjectsClient.bulkGet).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"id": "1",
"type": "index-pattern",
},
Object {
"id": "2",
"type": "search",
},
],
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('export selected objects throws error when exceeding exportSizeLimit', async () => {
const exportOpts = {
exportSizeLimit: 1,
savedObjectsClient,
types: ['index-pattern', 'search'],
objects: [
{
type: 'index-pattern',
id: '1',
},
{
type: 'search',
id: '2',
},
],
};
await expect(getSortedObjectsForExport(exportOpts)).rejects.toThrowErrorMatchingInlineSnapshot(
`"Can't export more than 1 objects"`
);
});
});

View file

@ -19,6 +19,7 @@
import Boom from 'boom';
import { SavedObject, SavedObjectsClient } from '../service/saved_objects_client';
import { sortObjects } from './sort_objects';
interface ObjectToExport {
id: string;
@ -66,38 +67,3 @@ export async function getSortedObjectsForExport({
}
return sortObjects(objectsToExport);
}
export function sortObjects(savedObjects: SavedObject[]) {
const path = new Set();
const sorted = new Set();
const objectsByTypeId = new Map(
savedObjects.map(object => [`${object.type}:${object.id}`, object] as [string, SavedObject])
);
function includeObjects(objects: SavedObject[]) {
for (const object of objects) {
if (path.has(object)) {
throw Boom.badRequest(
`circular reference: ${[...path, object]
.map(obj => `[${obj.type}:${obj.id}]`)
.join(' ref-> ')}`
);
}
const refdObjects = object.references
.map(ref => objectsByTypeId.get(`${ref.type}:${ref.id}`))
.filter((ref): ref is SavedObject => !!ref);
if (refdObjects.length) {
path.add(object);
includeObjects(refdObjects);
path.delete(object);
}
sorted.add(object);
}
}
includeObjects(savedObjects);
return [...sorted];
}

View file

@ -17,5 +17,4 @@
* under the License.
*/
export { importSavedObjects, resolveImportConflicts } from './import';
export { getSortedObjectsForExport } from './export';
export { getSortedObjectsForExport } from './get_sorted_objects_for_export';

View file

@ -17,231 +17,7 @@
* under the License.
*/
import { getSortedObjectsForExport, sortObjects } from './export';
describe('getSortedObjectsForExport()', () => {
const savedObjectsClient = {
errors: {} as any,
find: jest.fn(),
bulkGet: jest.fn(),
create: jest.fn(),
bulkCreate: jest.fn(),
delete: jest.fn(),
get: jest.fn(),
update: jest.fn(),
};
afterEach(() => {
savedObjectsClient.find.mockReset();
savedObjectsClient.bulkGet.mockReset();
savedObjectsClient.create.mockReset();
savedObjectsClient.bulkCreate.mockReset();
savedObjectsClient.delete.mockReset();
savedObjectsClient.get.mockReset();
savedObjectsClient.update.mockReset();
});
test('exports selected types and sorts them', async () => {
savedObjectsClient.find.mockResolvedValueOnce({
total: 2,
saved_objects: [
{
id: '2',
type: 'search',
references: [
{
type: 'index-pattern',
id: '1',
},
],
},
{
id: '1',
type: 'index-pattern',
references: [],
},
],
});
const response = await getSortedObjectsForExport({
savedObjectsClient,
exportSizeLimit: 500,
types: ['index-pattern', 'search'],
});
expect(response).toMatchInlineSnapshot(`
Array [
Object {
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"id": "2",
"references": Array [
Object {
"id": "1",
"type": "index-pattern",
},
],
"type": "search",
},
]
`);
expect(savedObjectsClient.find).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Object {
"perPage": 500,
"sortField": "_id",
"sortOrder": "asc",
"type": Array [
"index-pattern",
"search",
],
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('export selected types throws error when exceeding exportSizeLimit', async () => {
savedObjectsClient.find.mockResolvedValueOnce({
total: 2,
saved_objects: [
{
id: '2',
type: 'search',
references: [
{
type: 'index-pattern',
id: '1',
},
],
},
{
id: '1',
type: 'index-pattern',
references: [],
},
],
});
await expect(
getSortedObjectsForExport({
savedObjectsClient,
exportSizeLimit: 1,
types: ['index-pattern', 'search'],
})
).rejects.toThrowErrorMatchingInlineSnapshot(`"Can't export more than 1 objects"`);
});
test('exports selected objects and sorts them', async () => {
savedObjectsClient.bulkGet.mockResolvedValueOnce({
saved_objects: [
{
id: '2',
type: 'search',
references: [
{
type: 'index-pattern',
id: '1',
},
],
},
{
id: '1',
type: 'index-pattern',
references: [],
},
],
});
const response = await getSortedObjectsForExport({
exportSizeLimit: 10000,
savedObjectsClient,
types: ['index-pattern', 'search'],
objects: [
{
type: 'index-pattern',
id: '1',
},
{
type: 'search',
id: '2',
},
],
});
expect(response).toMatchInlineSnapshot(`
Array [
Object {
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"id": "2",
"references": Array [
Object {
"id": "1",
"type": "index-pattern",
},
],
"type": "search",
},
]
`);
expect(savedObjectsClient.bulkGet).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"id": "1",
"type": "index-pattern",
},
Object {
"id": "2",
"type": "search",
},
],
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('export selected objects throws error when exceeding exportSizeLimit', async () => {
const exportOpts = {
exportSizeLimit: 1,
savedObjectsClient,
types: ['index-pattern', 'search'],
objects: [
{
type: 'index-pattern',
id: '1',
},
{
type: 'search',
id: '2',
},
],
};
await expect(getSortedObjectsForExport(exportOpts)).rejects.toThrowErrorMatchingInlineSnapshot(
`"Can't export more than 1 objects"`
);
});
});
import { sortObjects } from './sort_objects';
describe('sortObjects()', () => {
test('should return on empty array', () => {

View file

@ -0,0 +1,56 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import Boom from 'boom';
import { SavedObject } from '../service/saved_objects_client';
export function sortObjects(savedObjects: SavedObject[]) {
const path = new Set();
const sorted = new Set();
const objectsByTypeId = new Map(
savedObjects.map(object => [`${object.type}:${object.id}`, object] as [string, SavedObject])
);
function includeObjects(objects: SavedObject[]) {
for (const object of objects) {
if (path.has(object)) {
throw Boom.badRequest(
`circular reference: ${[...path, object]
.map(obj => `[${obj.type}:${obj.id}]`)
.join(' ref-> ')}`
);
}
const refdObjects = object.references
.map(ref => objectsByTypeId.get(`${ref.type}:${ref.id}`))
.filter((ref): ref is SavedObject => !!ref);
if (refdObjects.length) {
path.add(object);
includeObjects(refdObjects);
path.delete(object);
}
sorted.add(object);
}
}
includeObjects(savedObjects);
return [...sorted];
}

View file

@ -0,0 +1,80 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Readable } from 'stream';
import { collectSavedObjects } from './collect_saved_objects';
describe('collectSavedObjects()', () => {
test('collects nothing when stream is empty', async () => {
const readStream = new Readable({
read() {
this.push(null);
},
});
const objects = await collectSavedObjects(readStream, 10);
expect(objects).toMatchInlineSnapshot(`Array []`);
});
test('collects objects from stream', async () => {
const readStream = new Readable({
read() {
this.push('{"foo":true}');
this.push(null);
},
});
const objects = await collectSavedObjects(readStream, 1);
expect(objects).toMatchInlineSnapshot(`
Array [
Object {
"foo": true,
},
]
`);
});
test('filters out empty lines', async () => {
const readStream = new Readable({
read() {
this.push('{"foo":true}\n\n');
this.push(null);
},
});
const objects = await collectSavedObjects(readStream, 1);
expect(objects).toMatchInlineSnapshot(`
Array [
Object {
"foo": true,
},
]
`);
});
test('throws error when object limit is reached', async () => {
const readStream = new Readable({
read() {
this.push('{"foo":true}\n');
this.push('{"bar":true}\n');
this.push(null);
},
});
await expect(collectSavedObjects(readStream, 1)).rejects.toThrowErrorMatchingInlineSnapshot(
`"Can't import more than 1 objects"`
);
});
});

View file

@ -0,0 +1,49 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Readable } from 'stream';
import {
createConcatStream,
createFilterStream,
createMapStream,
createPromiseFromStreams,
createSplitStream,
} from '../../../utils/streams';
import { SavedObject } from '../service';
import { createLimitStream } from './create_limit_stream';
export async function collectSavedObjects(
readStream: Readable,
objectLimit: number,
filter?: (obj: SavedObject) => boolean
): Promise<SavedObject[]> {
return (await createPromiseFromStreams([
readStream,
createSplitStream('\n'),
createMapStream((str: string) => {
if (str && str !== '') {
return JSON.parse(str);
}
}),
createFilterStream<SavedObject>(obj => !!obj),
createLimitStream(objectLimit),
createFilterStream<SavedObject>(obj => (filter ? filter(obj) : true)),
createConcatStream([]),
])) as SavedObject[];
}

View file

@ -0,0 +1,53 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {
createConcatStream,
createListStream,
createPromiseFromStreams,
} from '../../../utils/streams';
import { createLimitStream } from './create_limit_stream';
describe('createLimitStream()', () => {
test('limit of 5 allows 5 items through', async () => {
await createPromiseFromStreams([createListStream([1, 2, 3, 4, 5]), createLimitStream(5)]);
});
test('limit of 5 errors out when 6 items are through', async () => {
await expect(
createPromiseFromStreams([createListStream([1, 2, 3, 4, 5, 6]), createLimitStream(5)])
).rejects.toThrowErrorMatchingInlineSnapshot(`"Can't import more than 5 objects"`);
});
test('send the values on the output stream', async () => {
const result = await createPromiseFromStreams([
createListStream([1, 2, 3]),
createLimitStream(3),
createConcatStream([]),
]);
expect(result).toMatchInlineSnapshot(`
Array [
1,
2,
3,
]
`);
});
});

View file

@ -0,0 +1,35 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import Boom from 'boom';
import { Transform } from 'stream';
export function createLimitStream(limit: number) {
let counter = 0;
return new Transform({
objectMode: true,
async transform(obj, enc, done) {
if (counter >= limit) {
return done(Boom.badRequest(`Can't import more than ${limit} objects`));
}
counter++;
done(undefined, obj);
},
});
}

View file

@ -0,0 +1,185 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { createObjectsFilter } from './create_objects_filter';
describe('createObjectsFilter()', () => {
test('filters should return false when contains empty parameters', () => {
const fn = createObjectsFilter([], [], []);
expect(fn({ type: 'a', id: '1', attributes: {}, references: [] })).toEqual(false);
});
test('filters should exclude skips', () => {
const fn = createObjectsFilter(
[
{
type: 'a',
id: '1',
},
],
[],
[
{
type: 'b',
from: '1',
to: '2',
},
]
);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [{ name: 'ref_0', type: 'b', id: '1' }],
})
).toEqual(false);
expect(
fn({
type: 'a',
id: '2',
attributes: {},
references: [{ name: 'ref_0', type: 'b', id: '1' }],
})
).toEqual(true);
});
test('filter should include references to replace', () => {
const fn = createObjectsFilter(
[],
[],
[
{
type: 'b',
from: '1',
to: '2',
},
]
);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '1',
},
],
})
).toEqual(true);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '2',
},
],
})
).toEqual(false);
});
test('filter should include objects to overwrite', () => {
const fn = createObjectsFilter(
[],
[
{
type: 'a',
id: '1',
},
],
[]
);
expect(fn({ type: 'a', id: '1', attributes: {}, references: [] })).toEqual(true);
expect(fn({ type: 'a', id: '2', attributes: {}, references: [] })).toEqual(false);
});
test('filter should work with skips, overwrites and replaceReferences', () => {
const fn = createObjectsFilter(
[
{
type: 'a',
id: '1',
},
],
[
{
type: 'a',
id: '2',
},
],
[
{
type: 'b',
from: '1',
to: '2',
},
]
);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '1',
},
],
})
).toEqual(false);
expect(
fn({
type: 'a',
id: '2',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '2',
},
],
})
).toEqual(true);
expect(
fn({
type: 'a',
id: '3',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '1',
},
],
})
).toEqual(true);
});
});

View file

@ -0,0 +1,54 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { SavedObject } from '../service';
export function createObjectsFilter(
skips: Array<{
type: string;
id: string;
}>,
overwrites: Array<{
type: string;
id: string;
}>,
replaceReferences: Array<{
type: string;
from: string;
to: string;
}>
) {
const refReplacements = replaceReferences.map(ref => `${ref.type}:${ref.from}`);
return (obj: SavedObject) => {
if (skips.some(skipObj => skipObj.type === obj.type && skipObj.id === obj.id)) {
return false;
}
if (
overwrites.some(overwriteObj => overwriteObj.type === obj.type && overwriteObj.id === obj.id)
) {
return true;
}
for (const reference of obj.references || []) {
if (refReplacements.includes(`${reference.type}:${reference.id}`)) {
return true;
}
}
return false;
};
}

View file

@ -0,0 +1,63 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { SavedObject } from '../service';
import { extractErrors } from './extract_errors';
describe('extractErrors()', () => {
test('returns empty array when no errors exist', () => {
const savedObjects: SavedObject[] = [];
const result = extractErrors(savedObjects);
expect(result).toMatchInlineSnapshot(`Array []`);
});
test('extracts errors from saved objects', () => {
const savedObjects: SavedObject[] = [
{
id: '1',
type: 'dashboard',
attributes: {},
references: [],
},
{
id: '2',
type: 'dashboard',
attributes: {},
references: [],
error: {
statusCode: 409,
message: 'Conflict',
},
},
];
const result = extractErrors(savedObjects);
expect(result).toMatchInlineSnapshot(`
Array [
Object {
"error": Object {
"message": "Conflict",
"statusCode": 409,
},
"id": "2",
"type": "dashboard",
},
]
`);
});
});

View file

@ -0,0 +1,43 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { SavedObject } from '../service';
export interface CustomError {
id: string;
type: string;
error: {
message: string;
statusCode: number;
};
}
export function extractErrors(savedObjects: SavedObject[]) {
const errors: CustomError[] = [];
for (const savedObject of savedObjects) {
if (savedObject.error) {
errors.push({
id: savedObject.id,
type: savedObject.type,
error: savedObject.error,
});
}
}
return errors;
}

View file

@ -0,0 +1,270 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Readable } from 'stream';
import { SavedObject } from '../service';
import { importSavedObjects } from './import_saved_objects';
describe('importSavedObjects()', () => {
const savedObjects: SavedObject[] = [
{
id: '1',
type: 'index-pattern',
attributes: {},
references: [],
},
{
id: '2',
type: 'search',
attributes: {},
references: [],
},
{
id: '3',
type: 'visualization',
attributes: {},
references: [],
},
{
id: '4',
type: 'dashboard',
attributes: {},
references: [],
},
];
const savedObjectsClient = {
errors: {} as any,
bulkCreate: jest.fn(),
bulkGet: jest.fn(),
create: jest.fn(),
delete: jest.fn(),
find: jest.fn(),
get: jest.fn(),
update: jest.fn(),
};
beforeEach(() => {
savedObjectsClient.bulkCreate.mockReset();
savedObjectsClient.bulkGet.mockReset();
savedObjectsClient.create.mockReset();
savedObjectsClient.delete.mockReset();
savedObjectsClient.find.mockReset();
savedObjectsClient.get.mockReset();
savedObjectsClient.update.mockReset();
});
test('calls bulkCreate without overwrite', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await importSavedObjects({
readStream,
objectLimit: 4,
overwrite: false,
savedObjectsClient,
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 4,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"attributes": Object {},
"id": "2",
"references": Array [],
"type": "search",
},
Object {
"attributes": Object {},
"id": "3",
"references": Array [],
"type": "visualization",
},
Object {
"attributes": Object {},
"id": "4",
"references": Array [],
"type": "dashboard",
},
],
Object {
"overwrite": false,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('calls bulkCreate with overwrite', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await importSavedObjects({
readStream,
objectLimit: 4,
overwrite: true,
savedObjectsClient,
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 4,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"attributes": Object {},
"id": "2",
"references": Array [],
"type": "search",
},
Object {
"attributes": Object {},
"id": "3",
"references": Array [],
"type": "visualization",
},
Object {
"attributes": Object {},
"id": "4",
"references": Array [],
"type": "dashboard",
},
],
Object {
"overwrite": true,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('extracts errors', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects.map(savedObject => ({
type: savedObject.type,
id: savedObject.id,
error: {
statusCode: 409,
message: 'conflict',
},
})),
});
const result = await importSavedObjects({
readStream,
objectLimit: 4,
overwrite: false,
savedObjectsClient,
});
expect(result).toMatchInlineSnapshot(`
Object {
"errors": Array [
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "1",
"type": "index-pattern",
},
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "2",
"type": "search",
},
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "3",
"type": "visualization",
},
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "4",
"type": "dashboard",
},
],
"success": false,
"successCount": 0,
}
`);
});
});

View file

@ -0,0 +1,63 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Readable } from 'stream';
import { SavedObjectsClient } from '../service';
import { collectSavedObjects } from './collect_saved_objects';
import { CustomError, extractErrors } from './extract_errors';
interface ImportSavedObjectsOptions {
readStream: Readable;
objectLimit: number;
overwrite: boolean;
savedObjectsClient: SavedObjectsClient;
}
interface ImportResponse {
success: boolean;
successCount: number;
errors?: CustomError[];
}
export async function importSavedObjects({
readStream,
objectLimit,
overwrite,
savedObjectsClient,
}: ImportSavedObjectsOptions): Promise<ImportResponse> {
const objectsToImport = await collectSavedObjects(readStream, objectLimit);
if (objectsToImport.length === 0) {
return {
success: true,
successCount: 0,
};
}
const bulkCreateResult = await savedObjectsClient.bulkCreate(objectsToImport, {
overwrite,
});
const errors = extractErrors(bulkCreateResult.saved_objects);
return {
success: errors.length === 0,
successCount: objectsToImport.length - errors.length,
...(errors.length ? { errors } : {}),
};
}

View file

@ -0,0 +1,21 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
export { importSavedObjects } from './import_saved_objects';
export { resolveImportConflicts } from './resolve_import_conflicts';

View file

@ -0,0 +1,261 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Readable } from 'stream';
import { SavedObject } from '../service';
import { resolveImportConflicts } from './resolve_import_conflicts';
describe('resolveImportConflicts()', () => {
const savedObjects: SavedObject[] = [
{
id: '1',
type: 'index-pattern',
attributes: {},
references: [],
},
{
id: '2',
type: 'search',
attributes: {},
references: [],
},
{
id: '3',
type: 'visualization',
attributes: {},
references: [],
},
{
id: '4',
type: 'dashboard',
attributes: {},
references: [
{
name: 'panel_0',
type: 'visualization',
id: '3',
},
],
},
];
const savedObjectsClient = {
errors: {} as any,
bulkCreate: jest.fn(),
bulkGet: jest.fn(),
create: jest.fn(),
delete: jest.fn(),
find: jest.fn(),
get: jest.fn(),
update: jest.fn(),
};
beforeEach(() => {
savedObjectsClient.bulkCreate.mockReset();
savedObjectsClient.bulkGet.mockReset();
savedObjectsClient.create.mockReset();
savedObjectsClient.delete.mockReset();
savedObjectsClient.find.mockReset();
savedObjectsClient.get.mockReset();
savedObjectsClient.update.mockReset();
});
test('works with empty parameters', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [],
overwrites: [],
savedObjectsClient,
replaceReferences: [],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 0,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`[MockFunction]`);
});
test('works with skips', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [
{
type: 'dashboard',
id: '4',
},
],
overwrites: [],
savedObjectsClient,
replaceReferences: [
{
type: 'visualization',
from: '3',
to: '30',
},
],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 0,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`[MockFunction]`);
});
test('works with overwrites', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [],
overwrites: [
{
type: 'index-pattern',
id: '1',
},
],
savedObjectsClient,
replaceReferences: [],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 1,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "1",
"references": Array [],
"type": "index-pattern",
},
],
Object {
"overwrite": true,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('works wtih replaceReferences', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [],
overwrites: [],
savedObjectsClient,
replaceReferences: [
{
type: 'visualization',
from: '3',
to: '13',
},
],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 1,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "4",
"references": Array [
Object {
"id": "13",
"name": "panel_0",
"type": "visualization",
},
],
"type": "dashboard",
},
],
Object {
"overwrite": true,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
});

View file

@ -0,0 +1,88 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Readable } from 'stream';
import { SavedObjectsClient } from '../service';
import { collectSavedObjects } from './collect_saved_objects';
import { createObjectsFilter } from './create_objects_filter';
import { CustomError, extractErrors } from './extract_errors';
interface ResolveImportConflictsOptions {
readStream: Readable;
objectLimit: number;
savedObjectsClient: SavedObjectsClient;
overwrites: Array<{
type: string;
id: string;
}>;
replaceReferences: Array<{
type: string;
from: string;
to: string;
}>;
skips: Array<{
type: string;
id: string;
}>;
}
interface ImportResponse {
success: boolean;
successCount: number;
errors?: CustomError[];
}
export async function resolveImportConflicts({
readStream,
objectLimit,
skips,
overwrites,
savedObjectsClient,
replaceReferences,
}: ResolveImportConflictsOptions): Promise<ImportResponse> {
let errors: CustomError[] = [];
const filter = createObjectsFilter(skips, overwrites, replaceReferences);
const objectsToResolve = await collectSavedObjects(readStream, objectLimit, filter);
// Replace references
const refReplacementsMap: Record<string, string> = {};
for (const { type, to, from } of replaceReferences) {
refReplacementsMap[`${type}:${from}`] = to;
}
for (const savedObject of objectsToResolve) {
for (const reference of savedObject.references || []) {
if (refReplacementsMap[`${reference.type}:${reference.id}`]) {
reference.id = refReplacementsMap[`${reference.type}:${reference.id}`];
}
}
}
if (objectsToResolve.length) {
const bulkCreateResult = await savedObjectsClient.bulkCreate(objectsToResolve, {
overwrite: true,
});
errors = extractErrors(bulkCreateResult.saved_objects);
}
return {
success: errors.length === 0,
successCount: objectsToResolve.length - errors.length,
...(errors.length ? { errors } : {}),
};
}

View file

@ -1,815 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Readable } from 'stream';
import {
createConcatStream,
createListStream,
createPromiseFromStreams,
} from '../../../utils/streams';
import { SavedObject } from '../service';
import {
collectSavedObjects,
createLimitStream,
createObjectsFilter,
extractErrors,
importSavedObjects,
resolveImportConflicts,
} from './import';
describe('extractErrors()', () => {
test('returns empty array when no errors exist', () => {
const savedObjects: SavedObject[] = [];
const result = extractErrors(savedObjects);
expect(result).toMatchInlineSnapshot(`Array []`);
});
test('extracts errors from saved objects', () => {
const savedObjects: SavedObject[] = [
{
id: '1',
type: 'dashboard',
attributes: {},
references: [],
},
{
id: '2',
type: 'dashboard',
attributes: {},
references: [],
error: {
statusCode: 409,
message: 'Conflict',
},
},
];
const result = extractErrors(savedObjects);
expect(result).toMatchInlineSnapshot(`
Array [
Object {
"error": Object {
"message": "Conflict",
"statusCode": 409,
},
"id": "2",
"type": "dashboard",
},
]
`);
});
});
describe('createLimitStream()', () => {
test('limit of 5 allows 5 items through', async () => {
await createPromiseFromStreams([createListStream([1, 2, 3, 4, 5]), createLimitStream(5)]);
});
test('limit of 5 errors out when 6 items are through', async () => {
await expect(
createPromiseFromStreams([createListStream([1, 2, 3, 4, 5, 6]), createLimitStream(5)])
).rejects.toThrowErrorMatchingInlineSnapshot(`"Can't import more than 5 objects"`);
});
test('send the values on the output stream', async () => {
const result = await createPromiseFromStreams([
createListStream([1, 2, 3]),
createLimitStream(3),
createConcatStream([]),
]);
expect(result).toMatchInlineSnapshot(`
Array [
1,
2,
3,
]
`);
});
});
describe('collectSavedObjects()', () => {
test('collects nothing when stream is empty', async () => {
const readStream = new Readable({
read() {
this.push(null);
},
});
const objects = await collectSavedObjects(readStream, 10);
expect(objects).toMatchInlineSnapshot(`Array []`);
});
test('collects objects from stream', async () => {
const readStream = new Readable({
read() {
this.push('{"foo":true}');
this.push(null);
},
});
const objects = await collectSavedObjects(readStream, 1);
expect(objects).toMatchInlineSnapshot(`
Array [
Object {
"foo": true,
},
]
`);
});
test('filters out empty lines', async () => {
const readStream = new Readable({
read() {
this.push('{"foo":true}\n\n');
this.push(null);
},
});
const objects = await collectSavedObjects(readStream, 1);
expect(objects).toMatchInlineSnapshot(`
Array [
Object {
"foo": true,
},
]
`);
});
test('throws error when object limit is reached', async () => {
const readStream = new Readable({
read() {
this.push('{"foo":true}\n');
this.push('{"bar":true}\n');
this.push(null);
},
});
await expect(collectSavedObjects(readStream, 1)).rejects.toThrowErrorMatchingInlineSnapshot(
`"Can't import more than 1 objects"`
);
});
});
describe('createObjectsFilter()', () => {
test('filters should return false when contains empty parameters', () => {
const fn = createObjectsFilter([], [], []);
expect(fn({ type: 'a', id: '1', attributes: {}, references: [] })).toEqual(false);
});
test('filters should exclude skips', () => {
const fn = createObjectsFilter(
[
{
type: 'a',
id: '1',
},
],
[],
[
{
type: 'b',
from: '1',
to: '2',
},
]
);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [{ name: 'ref_0', type: 'b', id: '1' }],
})
).toEqual(false);
expect(
fn({
type: 'a',
id: '2',
attributes: {},
references: [{ name: 'ref_0', type: 'b', id: '1' }],
})
).toEqual(true);
});
test('filter should include references to replace', () => {
const fn = createObjectsFilter(
[],
[],
[
{
type: 'b',
from: '1',
to: '2',
},
]
);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '1',
},
],
})
).toEqual(true);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '2',
},
],
})
).toEqual(false);
});
test('filter should include objects to overwrite', () => {
const fn = createObjectsFilter(
[],
[
{
type: 'a',
id: '1',
},
],
[]
);
expect(fn({ type: 'a', id: '1', attributes: {}, references: [] })).toEqual(true);
expect(fn({ type: 'a', id: '2', attributes: {}, references: [] })).toEqual(false);
});
test('filter should work with skips, overwrites and replaceReferences', () => {
const fn = createObjectsFilter(
[
{
type: 'a',
id: '1',
},
],
[
{
type: 'a',
id: '2',
},
],
[
{
type: 'b',
from: '1',
to: '2',
},
]
);
expect(
fn({
type: 'a',
id: '1',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '1',
},
],
})
).toEqual(false);
expect(
fn({
type: 'a',
id: '2',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '2',
},
],
})
).toEqual(true);
expect(
fn({
type: 'a',
id: '3',
attributes: {},
references: [
{
name: 'ref_0',
type: 'b',
id: '1',
},
],
})
).toEqual(true);
});
});
describe('importSavedObjects()', () => {
const savedObjects: SavedObject[] = [
{
id: '1',
type: 'index-pattern',
attributes: {},
references: [],
},
{
id: '2',
type: 'search',
attributes: {},
references: [],
},
{
id: '3',
type: 'visualization',
attributes: {},
references: [],
},
{
id: '4',
type: 'dashboard',
attributes: {},
references: [],
},
];
const savedObjectsClient = {
errors: {} as any,
bulkCreate: jest.fn(),
bulkGet: jest.fn(),
create: jest.fn(),
delete: jest.fn(),
find: jest.fn(),
get: jest.fn(),
update: jest.fn(),
};
beforeEach(() => {
savedObjectsClient.bulkCreate.mockReset();
savedObjectsClient.bulkGet.mockReset();
savedObjectsClient.create.mockReset();
savedObjectsClient.delete.mockReset();
savedObjectsClient.find.mockReset();
savedObjectsClient.get.mockReset();
savedObjectsClient.update.mockReset();
});
test('calls bulkCreate without overwrite', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await importSavedObjects({
readStream,
objectLimit: 4,
overwrite: false,
savedObjectsClient,
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 4,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"attributes": Object {},
"id": "2",
"references": Array [],
"type": "search",
},
Object {
"attributes": Object {},
"id": "3",
"references": Array [],
"type": "visualization",
},
Object {
"attributes": Object {},
"id": "4",
"references": Array [],
"type": "dashboard",
},
],
Object {
"overwrite": false,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('calls bulkCreate with overwrite', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await importSavedObjects({
readStream,
objectLimit: 4,
overwrite: true,
savedObjectsClient,
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 4,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "1",
"references": Array [],
"type": "index-pattern",
},
Object {
"attributes": Object {},
"id": "2",
"references": Array [],
"type": "search",
},
Object {
"attributes": Object {},
"id": "3",
"references": Array [],
"type": "visualization",
},
Object {
"attributes": Object {},
"id": "4",
"references": Array [],
"type": "dashboard",
},
],
Object {
"overwrite": true,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('extracts errors', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects.map(savedObject => ({
type: savedObject.type,
id: savedObject.id,
error: {
statusCode: 409,
message: 'conflict',
},
})),
});
const result = await importSavedObjects({
readStream,
objectLimit: 4,
overwrite: false,
savedObjectsClient,
});
expect(result).toMatchInlineSnapshot(`
Object {
"errors": Array [
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "1",
"type": "index-pattern",
},
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "2",
"type": "search",
},
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "3",
"type": "visualization",
},
Object {
"error": Object {
"message": "conflict",
"statusCode": 409,
},
"id": "4",
"type": "dashboard",
},
],
"success": false,
"successCount": 0,
}
`);
});
});
describe('resolveImportConflicts()', () => {
const savedObjects: SavedObject[] = [
{
id: '1',
type: 'index-pattern',
attributes: {},
references: [],
},
{
id: '2',
type: 'search',
attributes: {},
references: [],
},
{
id: '3',
type: 'visualization',
attributes: {},
references: [],
},
{
id: '4',
type: 'dashboard',
attributes: {},
references: [
{
name: 'panel_0',
type: 'visualization',
id: '3',
},
],
},
];
const savedObjectsClient = {
errors: {} as any,
bulkCreate: jest.fn(),
bulkGet: jest.fn(),
create: jest.fn(),
delete: jest.fn(),
find: jest.fn(),
get: jest.fn(),
update: jest.fn(),
};
beforeEach(() => {
savedObjectsClient.bulkCreate.mockReset();
savedObjectsClient.bulkGet.mockReset();
savedObjectsClient.create.mockReset();
savedObjectsClient.delete.mockReset();
savedObjectsClient.find.mockReset();
savedObjectsClient.get.mockReset();
savedObjectsClient.update.mockReset();
});
test('works with empty parameters', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [],
overwrites: [],
savedObjectsClient,
replaceReferences: [],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 0,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`[MockFunction]`);
});
test('works with skips', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [
{
type: 'dashboard',
id: '4',
},
],
overwrites: [],
savedObjectsClient,
replaceReferences: [
{
type: 'visualization',
from: '3',
to: '30',
},
],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 0,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`[MockFunction]`);
});
test('works with overwrites', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [],
overwrites: [
{
type: 'index-pattern',
id: '1',
},
],
savedObjectsClient,
replaceReferences: [],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 1,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "1",
"references": Array [],
"type": "index-pattern",
},
],
Object {
"overwrite": true,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
test('works wtih replaceReferences', async () => {
const readStream = new Readable({
read() {
savedObjects.forEach(obj => this.push(JSON.stringify(obj) + '\n'));
this.push(null);
},
});
savedObjectsClient.bulkCreate.mockResolvedValue({
saved_objects: savedObjects,
});
const result = await resolveImportConflicts({
readStream,
objectLimit: 4,
skips: [],
overwrites: [],
savedObjectsClient,
replaceReferences: [
{
type: 'visualization',
from: '3',
to: '13',
},
],
});
expect(result).toMatchInlineSnapshot(`
Object {
"success": true,
"successCount": 1,
}
`);
expect(savedObjectsClient.bulkCreate).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
Array [
Object {
"attributes": Object {},
"id": "4",
"references": Array [
Object {
"id": "13",
"name": "panel_0",
"type": "visualization",
},
],
"type": "dashboard",
},
],
Object {
"overwrite": true,
},
],
],
"results": Array [
Object {
"type": "return",
"value": Promise {},
},
],
}
`);
});
});

View file

@ -1,218 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import Boom from 'boom';
import { Readable, Transform } from 'stream';
import {
createConcatStream,
createFilterStream,
createMapStream,
createPromiseFromStreams,
createSplitStream,
} from '../../../utils/streams';
import { SavedObject, SavedObjectsClient } from '../service';
interface CustomError {
id: string;
type: string;
error: {
message: string;
statusCode: number;
};
}
interface ImportResponse {
success: boolean;
successCount: number;
errors?: CustomError[];
}
interface ImportSavedObjectsOptions {
readStream: Readable;
objectLimit: number;
overwrite: boolean;
savedObjectsClient: SavedObjectsClient;
}
interface ResolveImportConflictsOptions {
readStream: Readable;
objectLimit: number;
savedObjectsClient: SavedObjectsClient;
overwrites: Array<{
type: string;
id: string;
}>;
replaceReferences: Array<{
type: string;
from: string;
to: string;
}>;
skips: Array<{
type: string;
id: string;
}>;
}
export function extractErrors(savedObjects: SavedObject[]) {
const errors: CustomError[] = [];
for (const savedObject of savedObjects) {
if (savedObject.error) {
errors.push({
id: savedObject.id,
type: savedObject.type,
error: savedObject.error,
});
}
}
return errors;
}
export function createLimitStream(limit: number) {
let counter = 0;
return new Transform({
objectMode: true,
async transform(obj, enc, done) {
if (counter >= limit) {
return done(Boom.badRequest(`Can't import more than ${limit} objects`));
}
counter++;
done(undefined, obj);
},
});
}
export async function collectSavedObjects(
readStream: Readable,
objectLimit: number,
filter?: (obj: SavedObject) => boolean
): Promise<SavedObject[]> {
return (await createPromiseFromStreams([
readStream,
createSplitStream('\n'),
createMapStream((str: string) => {
if (str && str !== '') {
return JSON.parse(str);
}
}),
createFilterStream<SavedObject>(obj => !!obj),
createLimitStream(objectLimit),
createFilterStream<SavedObject>(obj => (filter ? filter(obj) : true)),
createConcatStream([]),
])) as SavedObject[];
}
export function createObjectsFilter(
skips: Array<{
type: string;
id: string;
}>,
overwrites: Array<{
type: string;
id: string;
}>,
replaceReferences: Array<{
type: string;
from: string;
to: string;
}>
) {
const refReplacements = replaceReferences.map(ref => `${ref.type}:${ref.from}`);
return (obj: SavedObject) => {
if (skips.some(skipObj => skipObj.type === obj.type && skipObj.id === obj.id)) {
return false;
}
if (
overwrites.some(overwriteObj => overwriteObj.type === obj.type && overwriteObj.id === obj.id)
) {
return true;
}
for (const reference of obj.references || []) {
if (refReplacements.includes(`${reference.type}:${reference.id}`)) {
return true;
}
}
return false;
};
}
export async function importSavedObjects({
readStream,
objectLimit,
overwrite,
savedObjectsClient,
}: ImportSavedObjectsOptions): Promise<ImportResponse> {
const objectsToImport = await collectSavedObjects(readStream, objectLimit);
if (objectsToImport.length === 0) {
return {
success: true,
successCount: 0,
};
}
const bulkCreateResult = await savedObjectsClient.bulkCreate(objectsToImport, {
overwrite,
});
const errors = extractErrors(bulkCreateResult.saved_objects);
return {
success: errors.length === 0,
successCount: objectsToImport.length - errors.length,
...(errors.length ? { errors } : {}),
};
}
export async function resolveImportConflicts({
readStream,
objectLimit,
skips,
overwrites,
savedObjectsClient,
replaceReferences,
}: ResolveImportConflictsOptions): Promise<ImportResponse> {
let errors: CustomError[] = [];
const filter = createObjectsFilter(skips, overwrites, replaceReferences);
const objectsToResolve = await collectSavedObjects(readStream, objectLimit, filter);
// Replace references
const refReplacementsMap: Record<string, string> = {};
for (const { type, to, from } of replaceReferences) {
refReplacementsMap[`${type}:${from}`] = to;
}
for (const savedObject of objectsToResolve) {
for (const reference of savedObject.references || []) {
if (refReplacementsMap[`${reference.type}:${reference.id}`]) {
reference.id = refReplacementsMap[`${reference.type}:${reference.id}`];
}
}
}
if (objectsToResolve.length) {
const bulkCreateResult = await savedObjectsClient.bulkCreate(objectsToResolve, {
overwrite: true,
});
errors = extractErrors(bulkCreateResult.saved_objects);
}
return {
success: errors.length === 0,
successCount: objectsToResolve.length - errors.length,
...(errors.length ? { errors } : {}),
};
}

View file

@ -21,7 +21,7 @@ import Hapi from 'hapi';
import Joi from 'joi';
import stringify from 'json-stable-stringify';
import { SavedObjectsClient } from '../';
import { getSortedObjectsForExport } from '../lib';
import { getSortedObjectsForExport } from '../export';
import { Prerequisites } from './types';
const ALLOWED_TYPES = ['index-pattern', 'search', 'visualization', 'dashboard'];

View file

@ -23,7 +23,7 @@ import Joi from 'joi';
import { extname } from 'path';
import { Readable } from 'stream';
import { SavedObjectsClient } from '../';
import { importSavedObjects } from '../lib';
import { importSavedObjects } from '../import';
import { Prerequisites, WithoutQueryAndParams } from './types';
interface HapiReadableStream extends Readable {

View file

@ -23,7 +23,7 @@ import Joi from 'joi';
import { extname } from 'path';
import { Readable } from 'stream';
import { SavedObjectsClient } from '../';
import { resolveImportConflicts } from '../lib';
import { resolveImportConflicts } from '../import';
import { Prerequisites } from './types';
interface HapiReadableStream extends Readable {

View file

@ -144,18 +144,12 @@ exports[`InspectorPanel should render as expected 1`] = `
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--alignItemsCenter euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={true}
>
<div
@ -174,7 +168,6 @@ exports[`InspectorPanel should render as expected 1`] = `
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div

View file

@ -2,19 +2,11 @@
exports[`QueryBar Should disable autoFocus on EuiFieldText when disableAutoFocus prop is true 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="kbnQueryBar"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiOutsideClickDetector
onOutsideClick={[Function]}
>
@ -83,7 +75,6 @@ exports[`QueryBar Should disable autoFocus on EuiFieldText when disableAutoFocus
</EuiOutsideClickDetector>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiSuperUpdateButton
@ -99,19 +90,11 @@ exports[`QueryBar Should disable autoFocus on EuiFieldText when disableAutoFocus
exports[`QueryBar Should pass the query language to the language switcher 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="kbnQueryBar"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiOutsideClickDetector
onOutsideClick={[Function]}
>
@ -180,7 +163,6 @@ exports[`QueryBar Should pass the query language to the language switcher 1`] =
</EuiOutsideClickDetector>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiSuperUpdateButton
@ -196,19 +178,11 @@ exports[`QueryBar Should pass the query language to the language switcher 1`] =
exports[`QueryBar Should render the given query 1`] = `
<EuiFlexGroup
alignItems="stretch"
className="kbnQueryBar"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiOutsideClickDetector
onOutsideClick={[Function]}
>
@ -277,7 +251,6 @@ exports[`QueryBar Should render the given query 1`] = `
</EuiOutsideClickDetector>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiSuperUpdateButton

View file

@ -38,18 +38,9 @@ exports[`render 1`] = `
"data-test-subj": "exportAsSnapshot",
"id": "snapshot",
"label": <EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<FormattedMessage
defaultMessage="Snapshot"
id="common.ui.share.urlPanel.snapshotLabel"
@ -57,7 +48,6 @@ exports[`render 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -85,18 +75,9 @@ exports[`render 1`] = `
"disabled": true,
"id": "savedObject",
"label": <EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<FormattedMessage
defaultMessage="Saved object"
id="common.ui.share.urlPanel.savedObjectLabel"
@ -104,7 +85,6 @@ exports[`render 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -137,18 +117,9 @@ exports[`render 1`] = `
labelType="label"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiSwitch
checked={false}
data-test-subj="useShortUrl"
@ -163,7 +134,6 @@ exports[`render 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -221,18 +191,9 @@ exports[`should enable saved object export option when objectId is provided 1`]
"data-test-subj": "exportAsSnapshot",
"id": "snapshot",
"label": <EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<FormattedMessage
defaultMessage="Snapshot"
id="common.ui.share.urlPanel.snapshotLabel"
@ -240,7 +201,6 @@ exports[`should enable saved object export option when objectId is provided 1`]
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -268,18 +228,9 @@ exports[`should enable saved object export option when objectId is provided 1`]
"disabled": false,
"id": "savedObject",
"label": <EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<FormattedMessage
defaultMessage="Saved object"
id="common.ui.share.urlPanel.savedObjectLabel"
@ -287,7 +238,6 @@ exports[`should enable saved object export option when objectId is provided 1`]
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -320,18 +270,9 @@ exports[`should enable saved object export option when objectId is provided 1`]
labelType="label"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiSwitch
checked={false}
data-test-subj="useShortUrl"
@ -346,7 +287,6 @@ exports[`should enable saved object export option when objectId is provided 1`]
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip

View file

@ -1,20 +1,20 @@
//== Colors
//
//## Gray and brand colors for use across Bootstrap.
@white: #000;
@blue: #4DA1C0;
@white: #1D1E24;
@blue: #1BA9F5;
@brand-primary: #F5F5F5;
@brand-success: #017D73;
@brand-primary: #F5F7FA;
@brand-success: #7DE2D1;
@brand-info: @blue;
@brand-warning: #C06C4C;
@brand-danger: #BF4D4D;
@brand-warning: #FF977A;
@brand-danger: #FF6666;
@gray-base: #FFF;
@gray-darker: #F5F5F5;
@gray-darker: #F5F7FA;
@gray-dark: #ababab;
@gray5: #8A8A8A;
@gray: #444;
@gray-light: darken(#444, 9%);
@gray-lighter: #333;
@gray-lightest: #242424;
@gray5: #D4DAE5;
@gray: #535966;
@gray-light: darken(#535966, 9%);
@gray-lighter: #343741;
@gray-lightest: #25262E;

View file

@ -1,3 +1,4 @@
@import '@elastic/eui/src/components/tool_tip/variables';
@import '@elastic/eui/src/components/tool_tip/mixins';
.visTooltip,

View file

@ -30,8 +30,8 @@
.visEditorSidebar__indexPattern {
font-weight: $euiFontWeightBold;
padding: $euiSizeXS $euiSizeS;
background-color: shade($euiColorPrimary, 60%);
color: $euiColorGhost;
background-color: shadeOrTint($euiColorPrimary, 60%, 60%);
color: $euiColorEmptyShade;
line-height: $euiSizeL;
}

View file

@ -1,11 +1,11 @@
<div ng-show="add.form">
<div ng-show="add.form" class="form-group">
<label
i18n-id="common.ui.vis.editors.aggAdd.selectGroupTypeLabel"
i18n-default-message="Select {groupNameLabel} type"
i18n-values="{ groupNameLabel }"
>
</label>
<ul class="form-group list-group list-group-menu">
<ul class="list-group list-group-menu">
<li
tabindex="0"
id="aggSchemaListItem-{{$index}}"

View file

@ -10,10 +10,10 @@ block content
width: 100%;
height: 100%;
margin: 0;
background-color: #F5F7FA;
background-color: #{darkMode ? '#25262E' : '#F5F7FA'};
}
.kibanaWelcomeView {
background-color: #{darkMode ? '#242424' : '#F5F7FA'};
background-color: #{darkMode ? '#25262E' : '#F5F7FA'};
}
.kibanaWelcomeTitle {

View file

@ -29,7 +29,7 @@ export default function ({ getService, getPageObjects, updateBaselines }) {
describe('dashboard snapshots', function describeIndexTests() {
before(async function () {
// We use a really small window to minimize differences across os's and browsers.
await browser.setWindowSize(1000, 500);
await browser.setWindowSize(1000, 700);
});
after(async function () {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Before After
Before After

View file

@ -152,7 +152,7 @@
},
"dependencies": {
"@elastic/datemath": "5.0.2",
"@elastic/eui": "9.0.2",
"@elastic/eui": "9.2.1",
"@elastic/javascript-typescript-langserver": "^0.1.16",
"@elastic/lsp-extension": "^0.1.1",
"@elastic/node-crypto": "0.1.2",

View file

@ -3,18 +3,9 @@
exports[`Home component should render 1`] = `
<div>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiTitle
size="l"
textTransform="none"
@ -25,7 +16,6 @@ exports[`Home component should render 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<SetupInstructionsLink />

View file

@ -2,12 +2,7 @@
exports[`StickyProperties should render entire component 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
style={
Object {
"marginBottom": "-1em",
@ -17,8 +12,6 @@ exports[`StickyProperties should render entire component 1`] = `
wrap={true}
>
<EuiFlexItem
component="div"
grow={true}
key="0"
style={
Object {
@ -47,8 +40,6 @@ exports[`StickyProperties should render entire component 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
key="1"
style={
Object {
@ -83,8 +74,6 @@ exports[`StickyProperties should render entire component 1`] = `
</EuiToolTip>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
key="2"
style={
Object {
@ -113,8 +102,6 @@ exports[`StickyProperties should render entire component 1`] = `
</PropertyValue>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
key="3"
style={
Object {
@ -143,8 +130,6 @@ exports[`StickyProperties should render entire component 1`] = `
</PropertyValue>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
key="4"
style={
Object {

View file

@ -26,18 +26,9 @@ exports[`TransactionActionMenu component should render with data 1`] = `
toolTipPosition="right"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="primary"
type="button"
@ -46,7 +37,6 @@ exports[`TransactionActionMenu component should render with data 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -62,18 +52,9 @@ exports[`TransactionActionMenu component should render with data 1`] = `
toolTipPosition="right"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="primary"
type="button"
@ -82,7 +63,6 @@ exports[`TransactionActionMenu component should render with data 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -98,18 +78,9 @@ exports[`TransactionActionMenu component should render with data 1`] = `
toolTipPosition="right"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="primary"
type="button"
@ -118,7 +89,6 @@ exports[`TransactionActionMenu component should render with data 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -134,18 +104,9 @@ exports[`TransactionActionMenu component should render with data 1`] = `
toolTipPosition="right"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="primary"
type="button"
@ -154,7 +115,6 @@ exports[`TransactionActionMenu component should render with data 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -170,18 +130,9 @@ exports[`TransactionActionMenu component should render with data 1`] = `
toolTipPosition="right"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="primary"
type="button"
@ -190,7 +141,6 @@ exports[`TransactionActionMenu component should render with data 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -206,18 +156,9 @@ exports[`TransactionActionMenu component should render with data 1`] = `
toolTipPosition="right"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="primary"
type="button"
@ -226,7 +167,6 @@ exports[`TransactionActionMenu component should render with data 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -242,18 +182,9 @@ exports[`TransactionActionMenu component should render with data 1`] = `
toolTipPosition="right"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="primary"
type="button"
@ -262,7 +193,6 @@ exports[`TransactionActionMenu component should render with data 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon

View file

@ -1,3 +1,4 @@
@import '@elastic/eui/src/components/tool_tip/variables';
@import '@elastic/eui/src/components/tool_tip/mixins';
.tooltipAnnotation {

View file

@ -354,29 +354,15 @@ exports[`ilm summary extension should return extension when index has lifecycle
className="euiSpacer euiSpacer--m"
/>
</EuiSpacer>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="column"
>
<dl
@ -457,17 +443,11 @@ exports[`ilm summary extension should return extension when index has lifecycle
</EuiDescriptionList>
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="column"
>
<dl
@ -737,29 +717,15 @@ exports[`ilm summary extension should return extension when index has lifecycle
className="euiSpacer euiSpacer--m"
/>
</EuiSpacer>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="column"
>
<dl
@ -840,17 +806,11 @@ exports[`ilm summary extension should return extension when index has lifecycle
</EuiDescriptionList>
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<div
className="euiFlexItem"
>
<EuiDescriptionList
align="left"
compressed={false}
textStyle="normal"
type="column"
>
<dl

View file

@ -986,19 +986,12 @@ exports[`UploadLicense should display a modal when license requires acknowledgem
/>
</EuiSpacer>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -1034,7 +1027,6 @@ exports[`UploadLicense should display a modal when license requires acknowledgem
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -1488,19 +1480,12 @@ exports[`UploadLicense should display an error when ES says license is expired 1
/>
</EuiSpacer>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -1536,7 +1521,6 @@ exports[`UploadLicense should display an error when ES says license is expired 1
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -1990,19 +1974,12 @@ exports[`UploadLicense should display an error when ES says license is invalid 1
/>
</EuiSpacer>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -2038,7 +2015,6 @@ exports[`UploadLicense should display an error when ES says license is invalid 1
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -2492,19 +2468,12 @@ exports[`UploadLicense should display an error when submitting invalid JSON 1`]
/>
</EuiSpacer>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -2540,7 +2509,6 @@ exports[`UploadLicense should display an error when submitting invalid JSON 1`]
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -2994,19 +2962,12 @@ exports[`UploadLicense should display error when ES returns error 1`] = `
/>
</EuiSpacer>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -3042,7 +3003,6 @@ exports[`UploadLicense should display error when ES returns error 1`] = `
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div

View file

@ -2,7 +2,6 @@
exports[`FlexItemSetting component renders a null label if label/tooltip text not supplied 1`] = `
<EuiFlexItem
component="div"
grow={false}
>
<EuiFormRow
@ -21,7 +20,6 @@ exports[`FlexItemSetting component renders a null label if label/tooltip text no
exports[`FlexItemSetting component renders component and children as expected 1`] = `
<EuiFlexItem
component="div"
grow={false}
>
<EuiFormRow

View file

@ -137,15 +137,7 @@ Default value: Number of the hosts CPU cores"
value={1}
/>
</EuiFormRow>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Pipeline batch size"
formRowTooltipText="The maximum number of events an individual worker thread will collect from inputs before attempting to execute its filters and outputs. Larger batch sizes are generally more efficient, but come at the cost of increased memory overhead. You may have to increase the JVM heap size by setting the LS_HEAP_SIZE variable to effectively use the option.
@ -177,15 +169,7 @@ Default value: 50ms"
/>
</FlexItemSetting>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Queue type"
formRowTooltipText="The internal queuing model to use for event buffering. Specify memory for legacy in-memory based queuing, or persisted for disk-based ACKed queueing
@ -295,16 +279,9 @@ Default value: 1024"
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -324,7 +301,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -483,15 +459,7 @@ Default value: Number of the hosts CPU cores"
value={1}
/>
</EuiFormRow>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Pipeline batch size"
formRowTooltipText="The maximum number of events an individual worker thread will collect from inputs before attempting to execute its filters and outputs. Larger batch sizes are generally more efficient, but come at the cost of increased memory overhead. You may have to increase the JVM heap size by setting the LS_HEAP_SIZE variable to effectively use the option.
@ -523,15 +491,7 @@ Default value: 50ms"
/>
</FlexItemSetting>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Queue type"
formRowTooltipText="The internal queuing model to use for event buffering. Specify memory for legacy in-memory based queuing, or persisted for disk-based ACKed queueing
@ -641,16 +601,9 @@ Default value: 1024"
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -670,7 +623,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -829,15 +781,7 @@ Default value: Number of the hosts CPU cores"
value={1}
/>
</EuiFormRow>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Pipeline batch size"
formRowTooltipText="The maximum number of events an individual worker thread will collect from inputs before attempting to execute its filters and outputs. Larger batch sizes are generally more efficient, but come at the cost of increased memory overhead. You may have to increase the JVM heap size by setting the LS_HEAP_SIZE variable to effectively use the option.
@ -869,15 +813,7 @@ Default value: 50ms"
/>
</FlexItemSetting>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Queue type"
formRowTooltipText="The internal queuing model to use for event buffering. Specify memory for legacy in-memory based queuing, or persisted for disk-based ACKed queueing
@ -987,16 +923,9 @@ Default value: 1024"
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -1016,7 +945,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -1146,15 +1074,7 @@ Default value: Number of the hosts CPU cores"
value={1}
/>
</EuiFormRow>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Pipeline batch size"
formRowTooltipText="The maximum number of events an individual worker thread will collect from inputs before attempting to execute its filters and outputs. Larger batch sizes are generally more efficient, but come at the cost of increased memory overhead. You may have to increase the JVM heap size by setting the LS_HEAP_SIZE variable to effectively use the option.
@ -1186,15 +1106,7 @@ Default value: 50ms"
/>
</FlexItemSetting>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Queue type"
formRowTooltipText="The internal queuing model to use for event buffering. Specify memory for legacy in-memory based queuing, or persisted for disk-based ACKed queueing
@ -1304,16 +1216,9 @@ Default value: 1024"
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -1333,7 +1238,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -1352,7 +1256,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -1506,15 +1409,7 @@ Default value: Number of the hosts CPU cores"
value={1}
/>
</EuiFormRow>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Pipeline batch size"
formRowTooltipText="The maximum number of events an individual worker thread will collect from inputs before attempting to execute its filters and outputs. Larger batch sizes are generally more efficient, but come at the cost of increased memory overhead. You may have to increase the JVM heap size by setting the LS_HEAP_SIZE variable to effectively use the option.
@ -1546,15 +1441,7 @@ Default value: 50ms"
/>
</FlexItemSetting>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Queue type"
formRowTooltipText="The internal queuing model to use for event buffering. Specify memory for legacy in-memory based queuing, or persisted for disk-based ACKed queueing
@ -1664,16 +1551,9 @@ Default value: 1024"
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -1693,7 +1573,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -1823,15 +1702,7 @@ Default value: Number of the hosts CPU cores"
value={1}
/>
</EuiFormRow>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Pipeline batch size"
formRowTooltipText="The maximum number of events an individual worker thread will collect from inputs before attempting to execute its filters and outputs. Larger batch sizes are generally more efficient, but come at the cost of increased memory overhead. You may have to increase the JVM heap size by setting the LS_HEAP_SIZE variable to effectively use the option.
@ -1863,15 +1734,7 @@ Default value: 50ms"
/>
</FlexItemSetting>
</EuiFlexGroup>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<FlexItemSetting
formRowLabelText="Queue type"
formRowTooltipText="The internal queuing model to use for event buffering. Specify memory for legacy in-memory based queuing, or persisted for disk-based ACKed queueing
@ -1981,16 +1844,9 @@ Default value: 1024"
size="l"
/>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -2010,7 +1866,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -2029,7 +1884,6 @@ Default value: 1024"
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty

View file

@ -173,20 +173,11 @@ exports[`UpgradeFailure component passes expected text for new pipeline 1`] = `
className="euiTitle euiTitle--medium"
titleText="Upgrade failed"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -224,7 +215,6 @@ exports[`UpgradeFailure component passes expected text for new pipeline 1`] = `
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -293,19 +283,12 @@ exports[`UpgradeFailure component passes expected text for new pipeline 1`] = `
upgradeButtonText="Try again"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -337,7 +320,6 @@ exports[`UpgradeFailure component passes expected text for new pipeline 1`] = `
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -558,20 +540,11 @@ exports[`UpgradeFailure component passes expected text for not manual upgrade 1`
className="euiTitle euiTitle--medium"
titleText="Time for an upgrade!"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -609,7 +582,6 @@ exports[`UpgradeFailure component passes expected text for not manual upgrade 1`
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -678,19 +650,12 @@ exports[`UpgradeFailure component passes expected text for not manual upgrade 1`
upgradeButtonText="Upgrade"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -722,7 +687,6 @@ exports[`UpgradeFailure component passes expected text for not manual upgrade 1`
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -943,20 +907,11 @@ exports[`UpgradeFailure component passes expected text for not new pipeline 1`]
className="euiTitle euiTitle--medium"
titleText="Upgrade failed"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -994,7 +949,6 @@ exports[`UpgradeFailure component passes expected text for not new pipeline 1`]
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -1063,19 +1017,12 @@ exports[`UpgradeFailure component passes expected text for not new pipeline 1`]
upgradeButtonText="Try again"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<div
className="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--directionRow euiFlexGroup--responsive"
>
<EuiFlexItem
component="div"
grow={false}
>
<div
@ -1107,7 +1054,6 @@ exports[`UpgradeFailure component passes expected text for not new pipeline 1`]
</div>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<div

View file

@ -2,16 +2,9 @@
exports[`UpgradeFailureActions component renders component as expected 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -25,7 +18,6 @@ exports[`UpgradeFailureActions component renders component as expected 1`] = `
</EuiButton>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty

View file

@ -1,17 +1,8 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`UpgradeFailureTitle component renders component as expected 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexGroup>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIcon
@ -20,7 +11,6 @@ exports[`UpgradeFailureTitle component renders component as expected 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiTitle

View file

@ -2,13 +2,8 @@
exports[`LayerPanel is rendered 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="column"
gutterSize="none"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlyoutHeader
className="mapLayerPanel__header"
@ -16,15 +11,10 @@ exports[`LayerPanel is rendered 1`] = `
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonIcon
@ -42,10 +32,7 @@ exports[`LayerPanel is rendered 1`] = `
/>
</EuiButtonIcon>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiTitle
size="s"
textTransform="none"

View file

@ -9,22 +9,15 @@ exports[`LayerControl is rendered 1`] = `
>
<EuiFlexItem
className="mapWidgetControl__header"
component="div"
grow={false}
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="none"
justifyContent="spaceBetween"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiTitle
size="xs"
textTransform="none"
@ -39,7 +32,6 @@ exports[`LayerControl is rendered 1`] = `
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -62,8 +54,6 @@ exports[`LayerControl is rendered 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="mapLayerControl"
component="div"
grow={true}
>
<LayerTOC />
</EuiFlexItem>
@ -79,22 +69,15 @@ exports[`LayerControl props isReadOnly 1`] = `
>
<EuiFlexItem
className="mapWidgetControl__header"
component="div"
grow={false}
>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="none"
justifyContent="spaceBetween"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiTitle
size="xs"
textTransform="none"
@ -112,8 +95,6 @@ exports[`LayerControl props isReadOnly 1`] = `
</EuiFlexItem>
<EuiFlexItem
className="mapLayerControl"
component="div"
grow={true}
>
<LayerTOC />
</EuiFlexItem>

View file

@ -9,15 +9,10 @@ exports[`TOCEntry is rendered 1`] = `
<EuiFlexGroup
alignItems="center"
className="mapTocEntry-visible"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<LayerTocActions
@ -37,10 +32,7 @@ exports[`TOCEntry is rendered 1`] = `
zoom={0}
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiLink
color="text"
data-test-subj="mapOpenLayerButtonlayer_1"
@ -60,7 +52,6 @@ exports[`TOCEntry is rendered 1`] = `
</EuiLink>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<span
@ -72,10 +63,7 @@ exports[`TOCEntry is rendered 1`] = `
</span>
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiSpacer
size="s"
/>
@ -95,15 +83,10 @@ exports[`TOCEntry props isReadOnly 1`] = `
<EuiFlexGroup
alignItems="center"
className="mapTocEntry-visible"
component="div"
direction="row"
gutterSize="none"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<LayerTocActions
@ -123,10 +106,7 @@ exports[`TOCEntry props isReadOnly 1`] = `
zoom={0}
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiText
grow={true}
size="m"
@ -144,10 +124,7 @@ exports[`TOCEntry props isReadOnly 1`] = `
</EuiText>
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexItem
component="div"
grow={true}
>
<EuiFlexItem>
<EuiSpacer
size="s"
/>

View file

@ -2,9 +2,7 @@
exports[`AnnotationDescriptionList Initialization with annotation. 1`] = `
<EuiDescriptionList
align="left"
className="ml-annotation-description-list"
compressed={false}
listItems={
Array [
Object {
@ -37,7 +35,6 @@ exports[`AnnotationDescriptionList Initialization with annotation. 1`] = `
},
]
}
textStyle="normal"
type="column"
/>
`;

View file

@ -107,16 +107,9 @@ exports[`AnnotationsTable Initialization with annotations prop. 1`] = `
exports[`AnnotationsTable Initialization with job config prop. 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceAround"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiLoadingSpinner

View file

@ -19,15 +19,10 @@ exports[`ActionsSection renders with no actions selected 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCheckbox
@ -47,7 +42,6 @@ exports[`ActionsSection renders with no actions selected 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -70,15 +64,10 @@ exports[`ActionsSection renders with no actions selected 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCheckbox
@ -98,7 +87,6 @@ exports[`ActionsSection renders with no actions selected 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -138,15 +126,10 @@ exports[`ActionsSection renders with skip_result and skip_model_update selected
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCheckbox
@ -166,7 +149,6 @@ exports[`ActionsSection renders with skip_result and skip_model_update selected
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -189,15 +171,10 @@ exports[`ActionsSection renders with skip_result and skip_model_update selected
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCheckbox
@ -217,7 +194,6 @@ exports[`ActionsSection renders with skip_result and skip_model_update selected
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -257,15 +233,10 @@ exports[`ActionsSection renders with skip_result selected 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCheckbox
@ -285,7 +256,6 @@ exports[`ActionsSection renders with skip_result selected 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip
@ -308,15 +278,10 @@ exports[`ActionsSection renders with skip_result selected 1`] = `
/>
<EuiFlexGroup
alignItems="center"
component="div"
direction="row"
gutterSize="s"
justifyContent="flexStart"
responsive={false}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiCheckbox
@ -336,7 +301,6 @@ exports[`ActionsSection renders with skip_result selected 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiIconTip

View file

@ -2,16 +2,9 @@
exports[`ConditionExpression renders with appliesTo, operator and value supplied 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="m"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -89,7 +82,6 @@ exports[`ConditionExpression renders with appliesTo, operator and value supplied
</EuiPopover>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -138,21 +130,13 @@ exports[`ConditionExpression renders with appliesTo, operator and value supplied
className="euiExpression"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
style={
Object {
"maxWidth": 450,
}
}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -190,7 +174,6 @@ exports[`ConditionExpression renders with appliesTo, operator and value supplied
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -212,7 +195,6 @@ exports[`ConditionExpression renders with appliesTo, operator and value supplied
</EuiPopover>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonIcon
@ -230,16 +212,9 @@ exports[`ConditionExpression renders with appliesTo, operator and value supplied
exports[`ConditionExpression renders with only value supplied 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="m"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -316,7 +291,6 @@ exports[`ConditionExpression renders with only value supplied 1`] = `
</EuiPopover>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -365,21 +339,13 @@ exports[`ConditionExpression renders with only value supplied 1`] = `
className="euiExpression"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
style={
Object {
"maxWidth": 450,
}
}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -416,7 +382,6 @@ exports[`ConditionExpression renders with only value supplied 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -438,7 +403,6 @@ exports[`ConditionExpression renders with only value supplied 1`] = `
</EuiPopover>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonIcon

View file

@ -229,16 +229,9 @@ exports[`RuleEditorFlyout renders the flyout after adding a condition to a rule
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -257,7 +250,6 @@ exports[`RuleEditorFlyout renders the flyout after adding a condition to a rule
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -520,16 +512,9 @@ exports[`RuleEditorFlyout renders the flyout after setting the rule to edit 1`]
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -548,7 +533,6 @@ exports[`RuleEditorFlyout renders the flyout after setting the rule to edit 1`]
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -789,16 +773,9 @@ exports[`RuleEditorFlyout renders the flyout for creating a rule with conditions
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty
@ -817,7 +794,6 @@ exports[`RuleEditorFlyout renders the flyout for creating a rule with conditions
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButton
@ -927,16 +903,9 @@ exports[`RuleEditorFlyout renders the select action component for a detector wit
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="spaceBetween"
responsive={true}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
>
<EuiButtonEmpty

View file

@ -2,17 +2,10 @@
exports[`ScopeExpression renders when empty list of filter IDs is supplied 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="m"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="scope-field-checkbox"
component="div"
grow={false}
>
<EuiCheckbox
@ -25,7 +18,6 @@ exports[`ScopeExpression renders when empty list of filter IDs is supplied 1`] =
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiExpression
@ -47,17 +39,10 @@ exports[`ScopeExpression renders when empty list of filter IDs is supplied 1`] =
exports[`ScopeExpression renders when enabled set to false 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="m"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="scope-field-checkbox"
component="div"
grow={false}
>
<EuiCheckbox
@ -70,7 +55,6 @@ exports[`ScopeExpression renders when enabled set to false 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiExpression
@ -88,7 +72,6 @@ exports[`ScopeExpression renders when enabled set to false 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -137,21 +120,13 @@ exports[`ScopeExpression renders when enabled set to false 1`] = `
className="euiExpression"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
style={
Object {
"maxWidth": 450,
}
}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -181,7 +156,6 @@ exports[`ScopeExpression renders when enabled set to false 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -224,17 +198,10 @@ exports[`ScopeExpression renders when enabled set to false 1`] = `
exports[`ScopeExpression renders when filter ID and type supplied 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="m"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="scope-field-checkbox"
component="div"
grow={false}
>
<EuiCheckbox
@ -247,7 +214,6 @@ exports[`ScopeExpression renders when filter ID and type supplied 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiExpression
@ -265,7 +231,6 @@ exports[`ScopeExpression renders when filter ID and type supplied 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -314,21 +279,13 @@ exports[`ScopeExpression renders when filter ID and type supplied 1`] = `
className="euiExpression"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
style={
Object {
"maxWidth": 450,
}
}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -358,7 +315,6 @@ exports[`ScopeExpression renders when filter ID and type supplied 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -401,17 +357,10 @@ exports[`ScopeExpression renders when filter ID and type supplied 1`] = `
exports[`ScopeExpression renders when no filter ID or type supplied 1`] = `
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="m"
justifyContent="flexStart"
responsive={true}
wrap={false}
>
<EuiFlexItem
className="scope-field-checkbox"
component="div"
grow={false}
>
<EuiCheckbox
@ -424,7 +373,6 @@ exports[`ScopeExpression renders when no filter ID or type supplied 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiExpression
@ -442,7 +390,6 @@ exports[`ScopeExpression renders when no filter ID or type supplied 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
>
<EuiPopover
@ -491,21 +438,13 @@ exports[`ScopeExpression renders when no filter ID or type supplied 1`] = `
className="euiExpression"
>
<EuiFlexGroup
alignItems="stretch"
component="div"
direction="row"
gutterSize="l"
justifyContent="flexStart"
responsive={true}
style={
Object {
"maxWidth": 450,
}
}
wrap={false}
>
<EuiFlexItem
component="div"
grow={false}
style={
Object {
@ -534,7 +473,6 @@ exports[`ScopeExpression renders when no filter ID or type supplied 1`] = `
/>
</EuiFlexItem>
<EuiFlexItem
component="div"
grow={false}
style={
Object {

Some files were not shown because too many files have changed in this diff Show more