ydb-embedded-ui 1.8.5 → 1.8.8

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.8.8](https://github.com/ydb-platform/ydb-embedded-ui/compare/v1.8.7...v1.8.8) (2022-07-21)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **TabletsFilters:** display tablets grid full-height ([0dde809](https://github.com/ydb-platform/ydb-embedded-ui/commit/0dde8097fe026248aade97f034fa35c56b28e903))
9
+ * **TabletsOverall:** properly hide tooltip on mouseleave ([df36eba](https://github.com/ydb-platform/ydb-embedded-ui/commit/df36ebaf44d8966bc419f3720d51390dfd767a87))
10
+ * **Tablets:** properly display tablets in grid ([f3b64fa](https://github.com/ydb-platform/ydb-embedded-ui/commit/f3b64fae3a1e1a46ababd2d2f04ddff488698676))
11
+ * **Tenant:** align info in overview ([acb39fa](https://github.com/ydb-platform/ydb-embedded-ui/commit/acb39fab70b7b4e0e78124fd887b2f1b76815221))
12
+ * **Tenant:** display tenant name in single line ([301e391](https://github.com/ydb-platform/ydb-embedded-ui/commit/301e3911330024f80ebfda6d1a16823b64d94b36))
13
+ * **Tenant:** move tablets under tenant name ([b7e4b8f](https://github.com/ydb-platform/ydb-embedded-ui/commit/b7e4b8f7027f1481a7c1baff77bf8ad5e2ed467c))
14
+
15
+ ## [1.8.7](https://github.com/ydb-platform/ydb-embedded-ui/compare/v1.8.6...v1.8.7) (2022-07-18)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **Preview:** sort numbers as numbers, not string ([6c42a62](https://github.com/ydb-platform/ydb-embedded-ui/commit/6c42a62d077fcb9419ceb680906d4cef78a0134f))
21
+
22
+ ## [1.8.6](https://github.com/ydb-platform/ydb-embedded-ui/compare/v1.8.5...v1.8.6) (2022-07-14)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * **Tenant:** fix switching between groups and nodes on storage tab ([6923885](https://github.com/ydb-platform/ydb-embedded-ui/commit/6923885336fa21ac985879e41685137adbf8159a))
28
+
3
29
  ## [1.8.5](https://github.com/ydb-platform/ydb-embedded-ui/compare/v1.8.4...v1.8.5) (2022-07-11)
4
30
 
5
31
 
@@ -93,7 +93,7 @@ function TabletsOverall({tablets}: TabletsOverallProps) {
93
93
  <div className={b('row', {overall: true})}>
94
94
  <span className={b('label', {overall: true})}>Overall:</span>
95
95
  <div
96
- onMouseLeave={dispatch(hideTooltip)}
96
+ onMouseLeave={() => dispatch(hideTooltip())}
97
97
  onMouseEnter={(e) => dispatch(showTooltip(e.target, tooltipData, 'tabletsOverall'))}
98
98
  >
99
99
  <Progress value={memoryProgress} stack={stack} />
@@ -3,7 +3,7 @@ import {connect} from 'react-redux';
3
3
  import PropTypes from 'prop-types';
4
4
 
5
5
  import {configure as configureUiKit} from '@yandex-cloud/uikit';
6
- import {i18n as YDBComponentsI18N} from 'ydb-ui-components';
6
+ import {configure as configureYdbUiComponents} from 'ydb-ui-components';
7
7
  import {i18n, Lang} from '../../utils/i18n';
8
8
 
9
9
  import ContentWrapper, {Content} from './Content';
@@ -27,10 +27,8 @@ class App extends React.Component {
27
27
  constructor(props) {
28
28
  super(props);
29
29
  i18n.setLang(Lang.En);
30
- YDBComponentsI18N.setLang(Lang.En);
31
- configureUiKit({
32
- lang: Lang.En,
33
- });
30
+ configureYdbUiComponents({lang: Lang.En});
31
+ configureUiKit({lang: Lang.En});
34
32
  }
35
33
 
36
34
  componentDidMount() {
@@ -11,7 +11,7 @@ const propTypes = {
11
11
  className: PropTypes.string,
12
12
  toolTipVisible: PropTypes.bool,
13
13
  currentHoveredRef: PropTypes.object,
14
- data: PropTypes.object,
14
+ data: PropTypes.any,
15
15
  template: PropTypes.func,
16
16
  hideTooltip: PropTypes.func,
17
17
  };
@@ -115,7 +115,9 @@ class Storage extends React.Component {
115
115
  filter: FILTER_OPTIONS[visibleEntities],
116
116
  type: storageType,
117
117
  });
118
+ };
118
119
 
120
+ const restartAutorefresh = () => {
119
121
  this.autofetcher.stop();
120
122
  this.autofetcher.start();
121
123
  this.autofetcher.fetch(() =>
@@ -131,14 +133,15 @@ class Storage extends React.Component {
131
133
  }
132
134
  if (database && autorefresh && !prevProps.autorefresh) {
133
135
  startFetch();
136
+ restartAutorefresh();
134
137
  }
135
138
 
136
- if (
137
- (storageType !== prevProps.storageType ||
138
- visibleEntities !== prevProps.visibleEntities) &&
139
- (!database || (database && autorefresh))
140
- ) {
139
+ if (storageType !== prevProps.storageType || visibleEntities !== prevProps.visibleEntities) {
141
140
  startFetch();
141
+
142
+ if (!database || (database && autorefresh)) {
143
+ restartAutorefresh();
144
+ }
142
145
  }
143
146
  }
144
147
 
@@ -150,7 +150,7 @@ class Tablets extends React.Component {
150
150
  const {stateFilter, typeFilter, className} = this.props;
151
151
 
152
152
  return (
153
- <div className={(b(), className)}>
153
+ <div className={b(null, className)}>
154
154
  <div className={b('header')}>
155
155
  <Select
156
156
  className={b('filter-control')}
@@ -13,13 +13,7 @@
13
13
  }
14
14
 
15
15
  &__items {
16
- display: flex;
17
16
  flex: 1 1 auto;
18
- flex-wrap: wrap;
19
- }
20
-
21
- &__items-wrapper {
22
- overflow: auto;
23
17
  }
24
18
 
25
19
  &__filters {
@@ -3,7 +3,6 @@
3
3
  .tablets-filters {
4
4
  overflow: auto;
5
5
 
6
- max-height: 400px;
7
6
  @include flex-container();
8
7
 
9
8
  &__node {
@@ -19,18 +18,12 @@
19
18
  }
20
19
 
21
20
  &__items {
22
- display: flex;
23
21
  overflow: auto;
24
22
  flex: 1 1 auto;
25
- flex-wrap: wrap;
26
23
 
27
24
  padding: 5px 20px;
28
25
  }
29
26
 
30
- &__items-wrapper {
31
- overflow: auto;
32
- }
33
-
34
27
  &__filters {
35
28
  display: flex;
36
29
  align-items: center;
@@ -1,9 +1,13 @@
1
+ $section-title-margin: 20px;
2
+ $section-title-line-height: 24px;
3
+
1
4
  .kv-detailed-overview {
2
5
  display: flex;
3
- gap: 10px;
6
+ gap: 20px;
4
7
  &__section {
5
8
  display: flex;
6
- flex: 0 0 50%;
9
+ overflow-x: hidden;
10
+ flex: 0 0 calc(50% - 10px);
7
11
  flex-direction: column;
8
12
  }
9
13
 
@@ -97,10 +97,14 @@ class Healthcheck extends React.Component {
97
97
  </div>
98
98
  {this.renderUpdateButton()}
99
99
  </div>
100
- <div>
100
+ <div className={b('preview-content')}>
101
101
  {text}
102
102
  {!statusOk && (
103
- <Button view="flat-info" onClick={showMoreHandler}>
103
+ <Button
104
+ view="flat-info"
105
+ onClick={showMoreHandler}
106
+ size="s"
107
+ >
104
108
  Show details
105
109
  </Button>
106
110
  )}
@@ -1,3 +1,4 @@
1
+ @use '../DetailedOverview/DetailedOverview.scss' as detailedOverview;
1
2
  @import '../../../../styles/mixins.scss';
2
3
 
3
4
  .healthcheck {
@@ -37,14 +38,17 @@
37
38
 
38
39
  &__status-wrapper {
39
40
  display: flex;
40
- align-items: baseline;
41
41
 
42
- margin-bottom: 15px;
42
+ margin-bottom: detailedOverview.$section-title-margin;
43
43
  gap: 8px;
44
44
  }
45
45
 
46
46
  &__preview-title {
47
47
  font-weight: 600;
48
+ line-height: detailedOverview.$section-title-line-height;
49
+ }
50
+
51
+ &__preview-content {
48
52
  line-height: 24px;
49
53
  }
50
54
 
@@ -25,9 +25,11 @@ const renderName = (tenant) => {
25
25
  if (tenant) {
26
26
  const {Name} = tenant;
27
27
  return (
28
- <div className={b('tenant-name')}>
28
+ <div className={b('tenant-name-wrapper')}>
29
29
  <EntityStatus status={tenant.State} />
30
- <span>{Name}</span>
30
+ <span className={b('tenant-name-trim')}>
31
+ <span className={b('tenant-name')}>{Name}</span>
32
+ </span>
31
33
  </div>
32
34
  );
33
35
  }
@@ -139,17 +141,17 @@ class TenantOverview extends React.Component {
139
141
  this.props.tenant.Name,
140
142
  this.props.tenant.Type,
141
143
  )}
142
- <div className={b('system-tablets')}>
143
- {SystemTablets &&
144
- SystemTablets.map((tablet, tabletIndex) => (
145
- <Tablet
146
- onMouseEnter={showTooltip}
147
- onMouseLeave={hideTooltip}
148
- key={tabletIndex}
149
- tablet={tablet}
150
- />
151
- ))}
152
- </div>
144
+ </div>
145
+ <div className={b('system-tablets')}>
146
+ {SystemTablets &&
147
+ SystemTablets.map((tablet, tabletIndex) => (
148
+ <Tablet
149
+ onMouseEnter={showTooltip}
150
+ onMouseLeave={hideTooltip}
151
+ key={tabletIndex}
152
+ tablet={tablet}
153
+ />
154
+ ))}
153
155
  </div>
154
156
  <div className={b('common-info')}>
155
157
  {PoolStats ? (
@@ -1,30 +1,46 @@
1
+ @use '../DetailedOverview/DetailedOverview.scss' as detailedOverview;
2
+
1
3
  .tenant-overview {
2
4
  padding-bottom: 20px;
3
5
  &__loader {
4
6
  display: flex;
5
7
  justify-content: center;
6
8
  }
7
- &__tenant-name {
9
+ &__tenant-name-wrapper {
8
10
  display: flex;
11
+ overflow: hidden;
9
12
  align-items: center;
10
13
 
11
14
  & .yc-link {
12
15
  display: flex;
13
16
  }
14
17
  }
18
+ &__tenant-name-trim {
19
+ overflow: hidden;
20
+
21
+ white-space: nowrap;
22
+ text-overflow: ellipsis;
23
+ direction: rtl;
24
+ }
25
+
26
+ &__tenant-name {
27
+ unicode-bidi: plaintext;
28
+ }
15
29
 
16
30
  &__top {
17
31
  display: flex;
18
32
  align-items: center;
19
33
 
20
- margin-bottom: 20px;
34
+ margin-bottom: 10px;
35
+
36
+ line-height: 24px;
21
37
  }
22
38
 
23
39
  &__top-label {
24
- margin-bottom: 20px;
40
+ margin-bottom: detailedOverview.$section-title-margin;
25
41
 
26
42
  font-weight: 600;
27
- line-height: 24px;
43
+ line-height: detailedOverview.$section-title-line-height;
28
44
  gap: 10px;
29
45
  }
30
46
 
@@ -42,7 +58,7 @@
42
58
  flex-wrap: wrap;
43
59
  align-items: center;
44
60
 
45
- margin-left: 15px;
61
+ margin-bottom: 35px;
46
62
  }
47
63
 
48
64
  &__collapse-title {
@@ -76,7 +92,7 @@
76
92
  margin-bottom: 20px;
77
93
 
78
94
  font-size: var(--yc-text-body-2-font-size);
79
- font-weight: 500;
95
+ font-weight: 600;
80
96
  line-height: var(--yc-text-body-2-line-height);
81
97
  }
82
98
  }
@@ -12,6 +12,7 @@ import Fullscreen from '../../../components/Fullscreen/Fullscreen';
12
12
  import {sendQuery, setQueryOptions} from '../../../store/reducers/preview';
13
13
  import {showTooltip, hideTooltip} from '../../../store/reducers/tooltip';
14
14
  import {prepareQueryError, prepareQueryResponse} from '../../../utils/index';
15
+ import {isNumeric} from '../../../utils/utils';
15
16
 
16
17
  import {isTableType} from '../utils/schema';
17
18
  import {AutoFetcher} from '../../../utils/autofetcher';
@@ -127,6 +128,8 @@ class Preview extends React.Component {
127
128
  if (data && data.length > 0) {
128
129
  columns = Object.keys(data[0]).map((key) => ({
129
130
  name: key,
131
+ align: isNumeric(data[0][key]) ? DataTable.RIGHT : DataTable.LEFT,
132
+ sortAccessor: (row) => isNumeric(row[key]) ? Number(row[key]) : row[key],
130
133
  render: ({value}) => {
131
134
  return (
132
135
  <span
@@ -81,4 +81,11 @@ export function pad9(val) {
81
81
  result = "0" + result;
82
82
  }
83
83
  return result;
84
- }
84
+ }
85
+
86
+ export function isNumeric(value) {
87
+ // need both isNaN and isNaN(parseFloat):
88
+ // - isNaN treats true/false/''/etc. as numbers, parseFloat fixes this
89
+ // - parseFloat treats '123qwe' as number, isNaN fixes this
90
+ return !isNaN(value) && !isNaN(parseFloat(value));
91
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ydb-embedded-ui",
3
- "version": "1.8.5",
3
+ "version": "1.8.8",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -40,7 +40,7 @@
40
40
  "reselect": "4.0.0",
41
41
  "sass": "1.32.8",
42
42
  "web-vitals": "1.1.2",
43
- "ydb-ui-components": "2.2.0"
43
+ "ydb-ui-components": "2.3.0"
44
44
  },
45
45
  "scripts": {
46
46
  "start": "react-app-rewired start",