This is an automated email from the ASF dual-hosted git repository.
ccaominh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new f470bcd Fix deleting a data node tier causes load rules to display
incorrectly (#9891)
f470bcd is described below
commit f470bcd11fbf1be98e364a7acbb20757d91e6e0b
Author: Maytas Monsereenusorn <[email protected]>
AuthorDate: Wed May 20 13:49:28 2020 -1000
Fix deleting a data node tier causes load rules to display incorrectly
(#9891)
* Fix Deleting a data node tier causes load rules to malfunction & display
incorrectly
* add tests
* fix style
---
.../__snapshots__/rule-editor.spec.tsx.snap | 1322 +++++++++++++++++++-
.../components/rule-editor/rule-editor.spec.tsx | 62 +-
.../src/components/rule-editor/rule-editor.tsx | 5 +-
3 files changed, 1386 insertions(+), 3 deletions(-)
diff --git
a/web-console/src/components/rule-editor/__snapshots__/rule-editor.spec.tsx.snap
b/web-console/src/components/rule-editor/__snapshots__/rule-editor.spec.tsx.snap
index e1e7c49..43d59de 100644
---
a/web-console/src/components/rule-editor/__snapshots__/rule-editor.spec.tsx.snap
+++
b/web-console/src/components/rule-editor/__snapshots__/rule-editor.spec.tsx.snap
@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`rule editor matches snapshot 1`] = `
+exports[`rule editor matches snapshot no tier in rule 1`] = `
<div
class="rule-editor"
>
@@ -213,3 +213,1323 @@ exports[`rule editor matches snapshot 1`] = `
</div>
</div>
`;
+
+exports[`rule editor matches snapshot with existing tier and non existing tier
in rule 1`] = `
+<div
+ class="rule-editor"
+>
+ <div
+ class="title"
+ >
+ <button
+ class="bp3-button bp3-minimal left"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ loadByInterval(2010-01-01/2015-01-01)
+ </span>
+ <span
+ class="bp3-icon bp3-icon-caret-down"
+ icon="caret-down"
+ >
+ <svg
+ data-icon="caret-down"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ caret-down
+ </desc>
+ <path
+ d="M12 6.5c0-.28-.22-.5-.5-.5h-7a.495.495 0 00-.37.83l3.5
4c.09.1.22.17.37.17s.28-.07.37-.17l3.5-4c.08-.09.13-.2.13-.33z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ <div
+ class="spacer"
+ />
+ <button
+ class="bp3-button bp3-minimal"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-trash"
+ icon="trash"
+ >
+ <svg
+ data-icon="trash"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ trash
+ </desc>
+ <path
+ d="M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0 .55.45 1 1
1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5 9c0 .55-.45
1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1
.45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ <div
+ class="bp3-collapse"
+ style="height: auto; overflow-y: visible; transition: none;"
+ >
+ <div
+ aria-hidden="false"
+ class="bp3-collapse-body"
+ style="transform: translateY(0); transition: none;"
+ >
+ <div
+ class="bp3-card bp3-elevation-0"
+ >
+ <div
+ class="bp3-form-group"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <div
+ class="bp3-control-group"
+ >
+ <div
+ class="bp3-html-select"
+ >
+ <select>
+ <option
+ value="loadForever"
+ >
+ loadForever
+ </option>
+ <option
+ value="loadByInterval"
+ >
+ loadByInterval
+ </option>
+ <option
+ value="loadByPeriod"
+ >
+ loadByPeriod
+ </option>
+ <option
+ value="dropForever"
+ >
+ dropForever
+ </option>
+ <option
+ value="dropByInterval"
+ >
+ dropByInterval
+ </option>
+ <option
+ value="dropByPeriod"
+ >
+ dropByPeriod
+ </option>
+ <option
+ value="dropBeforeByPeriod"
+ >
+ dropBeforeByPeriod
+ </option>
+ <option
+ value="broadcastForever"
+ >
+ broadcastForever
+ </option>
+ <option
+ value="broadcastByInterval"
+ >
+ broadcastByInterval
+ </option>
+ <option
+ value="broadcastByPeriod"
+ >
+ broadcastByPeriod
+ </option>
+ </select>
+ <span
+ class="bp3-icon bp3-icon-double-caret-vertical"
+ icon="double-caret-vertical"
+ >
+ <svg
+ data-icon="double-caret-vertical"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ double-caret-vertical
+ </desc>
+ <path
+ d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2
8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3
3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </div>
+ <div
+ class="bp3-input-group"
+ >
+ <input
+ class="bp3-input"
+ placeholder="2010-01-01/2020-01-01"
+ style="padding-right: 10px;"
+ type="text"
+ value=""
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div
+ class="bp3-form-group"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <div
+ class="bp3-control-group"
+ >
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Replicants:
+ </span>
+ </button>
+ <div
+ class="bp3-control-group bp3-numeric-input"
+ >
+ <div
+ class="bp3-input-group"
+ >
+ <input
+ autocomplete="off"
+ class="bp3-input"
+ max="256"
+ min="1"
+ style="padding-right: 10px;"
+ type="text"
+ value="1"
+ />
+ </div>
+ <div
+ class="bp3-button-group bp3-vertical bp3-fixed"
+ >
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-up"
+ icon="chevron-up"
+ >
+ <svg
+ data-icon="chevron-up"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-up
+ </desc>
+ <path
+ d="M12.71 9.29l-4-4C8.53 5.11 8.28 5 8
5s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 7.41l3.29
3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-down"
+ icon="chevron-down"
+ >
+ <svg
+ data-icon="chevron-down"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-down
+ </desc>
+ <path
+ d="M12 5c-.28 0-.53.11-.71.29L8 8.59l-3.29-3.3a1.003
1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0
0012 5z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ </div>
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Tier:
+ </span>
+ </button>
+ <div
+ class="bp3-html-select bp3-fill"
+ >
+ <select>
+ <option
+ value="nonexist"
+ >
+ nonexist
+ </option>
+ <option
+ value="test2"
+ >
+ test2
+ </option>
+ <option
+ value="test3"
+ >
+ test3
+ </option>
+ </select>
+ <span
+ class="bp3-icon bp3-icon-double-caret-vertical"
+ icon="double-caret-vertical"
+ >
+ <svg
+ data-icon="double-caret-vertical"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ double-caret-vertical
+ </desc>
+ <path
+ d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2
8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3
3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </div>
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-trash"
+ icon="trash"
+ >
+ <svg
+ data-icon="trash"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ trash
+ </desc>
+ <path
+ d="M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0
.55.45 1 1 1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5
9c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1
.45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ <div
+ class="bp3-control-group"
+ >
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Replicants:
+ </span>
+ </button>
+ <div
+ class="bp3-control-group bp3-numeric-input"
+ >
+ <div
+ class="bp3-input-group"
+ >
+ <input
+ autocomplete="off"
+ class="bp3-input"
+ max="256"
+ min="1"
+ style="padding-right: 10px;"
+ type="text"
+ value="2"
+ />
+ </div>
+ <div
+ class="bp3-button-group bp3-vertical bp3-fixed"
+ >
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-up"
+ icon="chevron-up"
+ >
+ <svg
+ data-icon="chevron-up"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-up
+ </desc>
+ <path
+ d="M12.71 9.29l-4-4C8.53 5.11 8.28 5 8
5s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 7.41l3.29
3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-down"
+ icon="chevron-down"
+ >
+ <svg
+ data-icon="chevron-down"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-down
+ </desc>
+ <path
+ d="M12 5c-.28 0-.53.11-.71.29L8 8.59l-3.29-3.3a1.003
1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0
0012 5z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ </div>
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Tier:
+ </span>
+ </button>
+ <div
+ class="bp3-html-select bp3-fill"
+ >
+ <select>
+ <option
+ value="test1"
+ >
+ test1
+ </option>
+ <option
+ value="test2"
+ >
+ test2
+ </option>
+ <option
+ value="test3"
+ >
+ test3
+ </option>
+ </select>
+ <span
+ class="bp3-icon bp3-icon-double-caret-vertical"
+ icon="double-caret-vertical"
+ >
+ <svg
+ data-icon="double-caret-vertical"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ double-caret-vertical
+ </desc>
+ <path
+ d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2
8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3
3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </div>
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-trash"
+ icon="trash"
+ >
+ <svg
+ data-icon="trash"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ trash
+ </desc>
+ <path
+ d="M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0
.55.45 1 1 1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5
9c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1
.45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ <div
+ class="bp3-form-group right"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <button
+ class="bp3-button bp3-minimal"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-plus"
+ icon="plus"
+ >
+ <svg
+ data-icon="plus"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ plus
+ </desc>
+ <path
+ d="M13 7H9V3c0-.55-.45-1-1-1s-1 .45-1 1v4H3c-.55 0-1
.45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V9h4c.55 0 1-.45 1-1s-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ <span
+ class="bp3-button-text"
+ >
+ Add a tier
+ </span>
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+`;
+
+exports[`rule editor matches snapshot with existing tier in rule 1`] = `
+<div
+ class="rule-editor"
+>
+ <div
+ class="title"
+ >
+ <button
+ class="bp3-button bp3-minimal left"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ loadByInterval(2010-01-01/2015-01-01)
+ </span>
+ <span
+ class="bp3-icon bp3-icon-caret-down"
+ icon="caret-down"
+ >
+ <svg
+ data-icon="caret-down"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ caret-down
+ </desc>
+ <path
+ d="M12 6.5c0-.28-.22-.5-.5-.5h-7a.495.495 0 00-.37.83l3.5
4c.09.1.22.17.37.17s.28-.07.37-.17l3.5-4c.08-.09.13-.2.13-.33z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ <div
+ class="spacer"
+ />
+ <button
+ class="bp3-button bp3-minimal"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-trash"
+ icon="trash"
+ >
+ <svg
+ data-icon="trash"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ trash
+ </desc>
+ <path
+ d="M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0 .55.45 1 1
1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5 9c0 .55-.45
1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1
.45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ <div
+ class="bp3-collapse"
+ style="height: auto; overflow-y: visible; transition: none;"
+ >
+ <div
+ aria-hidden="false"
+ class="bp3-collapse-body"
+ style="transform: translateY(0); transition: none;"
+ >
+ <div
+ class="bp3-card bp3-elevation-0"
+ >
+ <div
+ class="bp3-form-group"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <div
+ class="bp3-control-group"
+ >
+ <div
+ class="bp3-html-select"
+ >
+ <select>
+ <option
+ value="loadForever"
+ >
+ loadForever
+ </option>
+ <option
+ value="loadByInterval"
+ >
+ loadByInterval
+ </option>
+ <option
+ value="loadByPeriod"
+ >
+ loadByPeriod
+ </option>
+ <option
+ value="dropForever"
+ >
+ dropForever
+ </option>
+ <option
+ value="dropByInterval"
+ >
+ dropByInterval
+ </option>
+ <option
+ value="dropByPeriod"
+ >
+ dropByPeriod
+ </option>
+ <option
+ value="dropBeforeByPeriod"
+ >
+ dropBeforeByPeriod
+ </option>
+ <option
+ value="broadcastForever"
+ >
+ broadcastForever
+ </option>
+ <option
+ value="broadcastByInterval"
+ >
+ broadcastByInterval
+ </option>
+ <option
+ value="broadcastByPeriod"
+ >
+ broadcastByPeriod
+ </option>
+ </select>
+ <span
+ class="bp3-icon bp3-icon-double-caret-vertical"
+ icon="double-caret-vertical"
+ >
+ <svg
+ data-icon="double-caret-vertical"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ double-caret-vertical
+ </desc>
+ <path
+ d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2
8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3
3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </div>
+ <div
+ class="bp3-input-group"
+ >
+ <input
+ class="bp3-input"
+ placeholder="2010-01-01/2020-01-01"
+ style="padding-right: 10px;"
+ type="text"
+ value=""
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div
+ class="bp3-form-group"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <div
+ class="bp3-control-group"
+ >
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Replicants:
+ </span>
+ </button>
+ <div
+ class="bp3-control-group bp3-numeric-input"
+ >
+ <div
+ class="bp3-input-group"
+ >
+ <input
+ autocomplete="off"
+ class="bp3-input"
+ max="256"
+ min="1"
+ style="padding-right: 10px;"
+ type="text"
+ value="2"
+ />
+ </div>
+ <div
+ class="bp3-button-group bp3-vertical bp3-fixed"
+ >
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-up"
+ icon="chevron-up"
+ >
+ <svg
+ data-icon="chevron-up"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-up
+ </desc>
+ <path
+ d="M12.71 9.29l-4-4C8.53 5.11 8.28 5 8
5s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 7.41l3.29
3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-down"
+ icon="chevron-down"
+ >
+ <svg
+ data-icon="chevron-down"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-down
+ </desc>
+ <path
+ d="M12 5c-.28 0-.53.11-.71.29L8 8.59l-3.29-3.3a1.003
1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0
0012 5z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ </div>
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Tier:
+ </span>
+ </button>
+ <div
+ class="bp3-html-select bp3-fill"
+ >
+ <select>
+ <option
+ value="test1"
+ >
+ test1
+ </option>
+ <option
+ value="test2"
+ >
+ test2
+ </option>
+ <option
+ value="test3"
+ >
+ test3
+ </option>
+ </select>
+ <span
+ class="bp3-icon bp3-icon-double-caret-vertical"
+ icon="double-caret-vertical"
+ >
+ <svg
+ data-icon="double-caret-vertical"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ double-caret-vertical
+ </desc>
+ <path
+ d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2
8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3
3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </div>
+ <button
+ class="bp3-button bp3-disabled"
+ disabled=""
+ tabindex="-1"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-trash"
+ icon="trash"
+ >
+ <svg
+ data-icon="trash"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ trash
+ </desc>
+ <path
+ d="M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0
.55.45 1 1 1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5
9c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1
.45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ <div
+ class="bp3-form-group right"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <button
+ class="bp3-button bp3-minimal"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-plus"
+ icon="plus"
+ >
+ <svg
+ data-icon="plus"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ plus
+ </desc>
+ <path
+ d="M13 7H9V3c0-.55-.45-1-1-1s-1 .45-1 1v4H3c-.55 0-1
.45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V9h4c.55 0 1-.45 1-1s-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ <span
+ class="bp3-button-text"
+ >
+ Add a tier
+ </span>
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+`;
+
+exports[`rule editor matches snapshot with non existing tier in rule 1`] = `
+<div
+ class="rule-editor"
+>
+ <div
+ class="title"
+ >
+ <button
+ class="bp3-button bp3-minimal left"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ loadByInterval(2010-01-01/2015-01-01)
+ </span>
+ <span
+ class="bp3-icon bp3-icon-caret-down"
+ icon="caret-down"
+ >
+ <svg
+ data-icon="caret-down"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ caret-down
+ </desc>
+ <path
+ d="M12 6.5c0-.28-.22-.5-.5-.5h-7a.495.495 0 00-.37.83l3.5
4c.09.1.22.17.37.17s.28-.07.37-.17l3.5-4c.08-.09.13-.2.13-.33z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ <div
+ class="spacer"
+ />
+ <button
+ class="bp3-button bp3-minimal"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-trash"
+ icon="trash"
+ >
+ <svg
+ data-icon="trash"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ trash
+ </desc>
+ <path
+ d="M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0 .55.45 1 1
1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5 9c0 .55-.45
1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1
.45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ <div
+ class="bp3-collapse"
+ style="height: auto; overflow-y: visible; transition: none;"
+ >
+ <div
+ aria-hidden="false"
+ class="bp3-collapse-body"
+ style="transform: translateY(0); transition: none;"
+ >
+ <div
+ class="bp3-card bp3-elevation-0"
+ >
+ <div
+ class="bp3-form-group"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <div
+ class="bp3-control-group"
+ >
+ <div
+ class="bp3-html-select"
+ >
+ <select>
+ <option
+ value="loadForever"
+ >
+ loadForever
+ </option>
+ <option
+ value="loadByInterval"
+ >
+ loadByInterval
+ </option>
+ <option
+ value="loadByPeriod"
+ >
+ loadByPeriod
+ </option>
+ <option
+ value="dropForever"
+ >
+ dropForever
+ </option>
+ <option
+ value="dropByInterval"
+ >
+ dropByInterval
+ </option>
+ <option
+ value="dropByPeriod"
+ >
+ dropByPeriod
+ </option>
+ <option
+ value="dropBeforeByPeriod"
+ >
+ dropBeforeByPeriod
+ </option>
+ <option
+ value="broadcastForever"
+ >
+ broadcastForever
+ </option>
+ <option
+ value="broadcastByInterval"
+ >
+ broadcastByInterval
+ </option>
+ <option
+ value="broadcastByPeriod"
+ >
+ broadcastByPeriod
+ </option>
+ </select>
+ <span
+ class="bp3-icon bp3-icon-double-caret-vertical"
+ icon="double-caret-vertical"
+ >
+ <svg
+ data-icon="double-caret-vertical"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ double-caret-vertical
+ </desc>
+ <path
+ d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2
8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3
3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </div>
+ <div
+ class="bp3-input-group"
+ >
+ <input
+ class="bp3-input"
+ placeholder="2010-01-01/2020-01-01"
+ style="padding-right: 10px;"
+ type="text"
+ value=""
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div
+ class="bp3-form-group"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <div
+ class="bp3-control-group"
+ >
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Replicants:
+ </span>
+ </button>
+ <div
+ class="bp3-control-group bp3-numeric-input"
+ >
+ <div
+ class="bp3-input-group"
+ >
+ <input
+ autocomplete="off"
+ class="bp3-input"
+ max="256"
+ min="1"
+ style="padding-right: 10px;"
+ type="text"
+ value="2"
+ />
+ </div>
+ <div
+ class="bp3-button-group bp3-vertical bp3-fixed"
+ >
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-up"
+ icon="chevron-up"
+ >
+ <svg
+ data-icon="chevron-up"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-up
+ </desc>
+ <path
+ d="M12.71 9.29l-4-4C8.53 5.11 8.28 5 8
5s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 7.41l3.29
3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ <button
+ class="bp3-button"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-chevron-down"
+ icon="chevron-down"
+ >
+ <svg
+ data-icon="chevron-down"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ chevron-down
+ </desc>
+ <path
+ d="M12 5c-.28 0-.53.11-.71.29L8 8.59l-3.29-3.3a1.003
1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0
0012 5z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ </div>
+ <button
+ class="bp3-button bp3-minimal"
+ style="pointer-events: none;"
+ type="button"
+ >
+ <span
+ class="bp3-button-text"
+ >
+ Tier:
+ </span>
+ </button>
+ <div
+ class="bp3-html-select bp3-fill"
+ >
+ <select>
+ <option
+ value="nonexist"
+ >
+ nonexist
+ </option>
+ <option
+ value="test1"
+ >
+ test1
+ </option>
+ <option
+ value="test2"
+ >
+ test2
+ </option>
+ <option
+ value="test3"
+ >
+ test3
+ </option>
+ </select>
+ <span
+ class="bp3-icon bp3-icon-double-caret-vertical"
+ icon="double-caret-vertical"
+ >
+ <svg
+ data-icon="double-caret-vertical"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ double-caret-vertical
+ </desc>
+ <path
+ d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2
8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3
3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </div>
+ <button
+ class="bp3-button bp3-disabled"
+ disabled=""
+ tabindex="-1"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-trash"
+ icon="trash"
+ >
+ <svg
+ data-icon="trash"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ trash
+ </desc>
+ <path
+ d="M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0
.55.45 1 1 1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5
9c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1
1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1
.45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ </button>
+ </div>
+ <div
+ class="bp3-form-group right"
+ >
+ <div
+ class="bp3-form-content"
+ >
+ <button
+ class="bp3-button bp3-minimal"
+ type="button"
+ >
+ <span
+ class="bp3-icon bp3-icon-plus"
+ icon="plus"
+ >
+ <svg
+ data-icon="plus"
+ height="16"
+ viewBox="0 0 16 16"
+ width="16"
+ >
+ <desc>
+ plus
+ </desc>
+ <path
+ d="M13 7H9V3c0-.55-.45-1-1-1s-1 .45-1 1v4H3c-.55 0-1
.45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V9h4c.55 0 1-.45 1-1s-.45-1-1-1z"
+ fill-rule="evenodd"
+ />
+ </svg>
+ </span>
+ <span
+ class="bp3-button-text"
+ >
+ Add a tier
+ </span>
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+`;
diff --git a/web-console/src/components/rule-editor/rule-editor.spec.tsx
b/web-console/src/components/rule-editor/rule-editor.spec.tsx
index fc945a3..36aeb1c 100644
--- a/web-console/src/components/rule-editor/rule-editor.spec.tsx
+++ b/web-console/src/components/rule-editor/rule-editor.spec.tsx
@@ -22,7 +22,7 @@ import React from 'react';
import { RuleEditor } from './rule-editor';
describe('rule editor', () => {
- it('matches snapshot', () => {
+ it('matches snapshot no tier in rule', () => {
const ruleEditor = (
<RuleEditor
rule={{ type: 'loadForever' }}
@@ -36,4 +36,64 @@ describe('rule editor', () => {
const { container } = render(ruleEditor);
expect(container.firstChild).toMatchSnapshot();
});
+
+ it('matches snapshot with non existing tier in rule', () => {
+ const ruleEditor = (
+ <RuleEditor
+ rule={{
+ type: 'loadByInterval',
+ period: '2010-01-01/2015-01-01',
+ tieredReplicants: { nonexist: 2 },
+ }}
+ tiers={['test1', 'test2', 'test3']}
+ onChange={() => {}}
+ onDelete={() => {}}
+ moveUp={null}
+ moveDown={null}
+ />
+ );
+ const { container } = render(ruleEditor);
+ expect(container.firstChild).toMatchSnapshot();
+ });
+
+ it('matches snapshot with existing tier in rule', () => {
+ const ruleEditor = (
+ <RuleEditor
+ rule={{
+ type: 'loadByInterval',
+ period: '2010-01-01/2015-01-01',
+ tieredReplicants: { test1: 2 },
+ }}
+ tiers={['test1', 'test2', 'test3']}
+ onChange={() => {}}
+ onDelete={() => {}}
+ moveUp={null}
+ moveDown={null}
+ />
+ );
+ const { container } = render(ruleEditor);
+ expect(container.firstChild).toMatchSnapshot();
+ });
+
+ it('matches snapshot with existing tier and non existing tier in rule', ()
=> {
+ const ruleEditor = (
+ <RuleEditor
+ rule={{
+ type: 'loadByInterval',
+ period: '2010-01-01/2015-01-01',
+ tieredReplicants: {
+ test1: 2,
+ nonexist: 1,
+ },
+ }}
+ tiers={['test1', 'test2', 'test3']}
+ onChange={() => {}}
+ onDelete={() => {}}
+ moveUp={null}
+ moveDown={null}
+ />
+ );
+ const { container } = render(ruleEditor);
+ expect(container.firstChild).toMatchSnapshot();
+ });
});
diff --git a/web-console/src/components/rule-editor/rule-editor.tsx
b/web-console/src/components/rule-editor/rule-editor.tsx
index f811adc..cf861c0 100644
--- a/web-console/src/components/rule-editor/rule-editor.tsx
+++ b/web-console/src/components/rule-editor/rule-editor.tsx
@@ -102,8 +102,11 @@ export const RuleEditor = React.memo(function
RuleEditor(props: RuleEditorProps)
onChange(RuleUtil.renameTieredReplicants(rule, tier,
e.target.value))
}
>
+ <option key={tier} value={tier}>
+ {tier}
+ </option>
{tiers
- .filter(t => t === tier || !tieredReplicants[t])
+ .filter(t => t !== tier && !tieredReplicants[t])
.map(t => {
return (
<option key={t} value={t}>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]