Skip to content

Commit 34e428a

Browse files
fix(Overview): use definition list for external objects info (#3002)
1 parent 9952f18 commit 34e428a

File tree

8 files changed

+65
-79
lines changed

8 files changed

+65
-79
lines changed

src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.scss

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,26 @@
1-
import {EntityStatus} from '../../../../components/EntityStatus/EntityStatus';
2-
import type {InfoViewerItem} from '../../../../components/InfoViewer';
3-
import {InfoViewer} from '../../../../components/InfoViewer';
4-
import {formatCommonItem} from '../../../../components/InfoViewer/formatters';
1+
import type {YDBDefinitionListItem} from '../../../../components/YDBDefinitionList/YDBDefinitionList';
2+
import {YDBDefinitionList} from '../../../../components/YDBDefinitionList/YDBDefinitionList';
53
import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
6-
import {cn} from '../../../../utils/cn';
74
import {getEntityName} from '../../utils';
85
import i18n from '../i18n';
6+
import {prepareCreateTimeItem, renderNoEntityDataError} from '../utils';
97

10-
import './ExternalDataSource.scss';
11-
12-
const b = cn('ydb-external-data-source-info');
13-
14-
const prepareExternalDataSourceSummary = (data: TEvDescribeSchemeResult) => {
15-
const info: InfoViewerItem[] = [
8+
function prepareExternalDataSourceSummary(data: TEvDescribeSchemeResult): YDBDefinitionListItem[] {
9+
const info: YDBDefinitionListItem[] = [
1610
{
17-
label: i18n('external-objects.source-type'),
18-
value: data.PathDescription?.ExternalDataSourceDescription?.SourceType,
11+
name: i18n('external-objects.source-type'),
12+
content: data.PathDescription?.ExternalDataSourceDescription?.SourceType,
1913
},
2014
];
2115

2216
const createStep = data.PathDescription?.Self?.CreateStep;
2317

2418
if (Number(createStep)) {
25-
info.push(formatCommonItem('CreateStep', data.PathDescription?.Self?.CreateStep));
19+
info.push(prepareCreateTimeItem(createStep));
2620
}
2721

2822
return info;
29-
};
23+
}
3024

3125
function getAuthMethodValue(data: TEvDescribeSchemeResult) {
3226
const {Auth} = data.PathDescription?.ExternalDataSourceDescription || {};
@@ -48,43 +42,35 @@ function getAuthMethodValue(data: TEvDescribeSchemeResult) {
4842
return i18n('external-objects.auth-method.none');
4943
}
5044

51-
const prepareExternalDataSourceInfo = (data: TEvDescribeSchemeResult): InfoViewerItem[] => {
45+
function prepareExternalDataSourceInfo(data: TEvDescribeSchemeResult): YDBDefinitionListItem[] {
5246
const {Location} = data.PathDescription?.ExternalDataSourceDescription || {};
5347

5448
return [
5549
...prepareExternalDataSourceSummary(data),
5650
{
57-
label: i18n('external-objects.location'),
58-
value: (
59-
<EntityStatus
60-
name={Location}
61-
showStatus={false}
62-
hasClipboardButton
63-
clipboardButtonAlwaysVisible
64-
className={b('location')}
65-
/>
66-
),
51+
name: i18n('external-objects.location'),
52+
content: Location,
53+
copyText: Location,
6754
},
6855
{
69-
label: i18n('external-objects.auth-method'),
70-
value: getAuthMethodValue(data),
56+
name: i18n('external-objects.auth-method'),
57+
content: getAuthMethodValue(data),
7158
},
7259
];
73-
};
60+
}
7461

7562
interface ExternalDataSourceProps {
7663
data?: TEvDescribeSchemeResult;
77-
prepareData: (data: TEvDescribeSchemeResult) => InfoViewerItem[];
64+
prepareData: (data: TEvDescribeSchemeResult) => YDBDefinitionListItem[];
7865
}
7966

8067
const ExternalDataSource = ({data, prepareData}: ExternalDataSourceProps) => {
8168
const entityName = getEntityName(data?.PathDescription);
8269

8370
if (!data) {
84-
return <div className="error">No {entityName} data</div>;
71+
return renderNoEntityDataError(entityName);
8572
}
86-
87-
return <InfoViewer title={entityName} info={prepareData(data)} />;
73+
return <YDBDefinitionList title={entityName} items={prepareData(data)} />;
8874
};
8975

9076
export const ExternalDataSourceInfo = ({data}: {data?: TEvDescribeSchemeResult}) => {

src/containers/Tenant/Info/ExternalTable/ExternalTable.scss

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,31 @@
11
import {useLocation} from 'react-router-dom';
22

3-
import {EntityStatus} from '../../../../components/EntityStatus/EntityStatus';
4-
import type {InfoViewerItem} from '../../../../components/InfoViewer';
5-
import {InfoViewer} from '../../../../components/InfoViewer';
6-
import {formatCommonItem} from '../../../../components/InfoViewer/formatters';
73
import {LinkWithIcon} from '../../../../components/LinkWithIcon/LinkWithIcon';
4+
import type {YDBDefinitionListItem} from '../../../../components/YDBDefinitionList/YDBDefinitionList';
5+
import {YDBDefinitionList} from '../../../../components/YDBDefinitionList/YDBDefinitionList';
86
import {createExternalUILink, parseQuery} from '../../../../routes';
97
import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
10-
import {cn} from '../../../../utils/cn';
118
import {getEntityName} from '../../utils';
129
import i18n from '../i18n';
13-
14-
import './ExternalTable.scss';
15-
16-
const b = cn('ydb-external-table-info');
10+
import {prepareCreateTimeItem, renderNoEntityDataError} from '../utils';
1711

1812
const prepareExternalTableSummary = (data: TEvDescribeSchemeResult, pathToDataSource: string) => {
1913
const {CreateStep} = data.PathDescription?.Self || {};
2014
const {SourceType, DataSourcePath} = data.PathDescription?.ExternalTableDescription || {};
2115

2216
const dataSourceName = DataSourcePath?.split('/').pop();
2317

24-
const info: InfoViewerItem[] = [
25-
{label: i18n('external-objects.source-type'), value: SourceType},
18+
const info: YDBDefinitionListItem[] = [
19+
{name: i18n('external-objects.source-type'), content: SourceType},
2620
];
2721

2822
if (Number(CreateStep)) {
29-
info.push(formatCommonItem('CreateStep', CreateStep));
23+
info.push(prepareCreateTimeItem(CreateStep));
3024
}
3125

3226
info.push({
33-
label: i18n('external-objects.data-source'),
34-
value: DataSourcePath && (
27+
name: i18n('external-objects.data-source'),
28+
content: DataSourcePath && (
3529
<span title={DataSourcePath}>
3630
<LinkWithIcon title={dataSourceName || ''} url={pathToDataSource} />
3731
</span>
@@ -44,29 +38,25 @@ const prepareExternalTableSummary = (data: TEvDescribeSchemeResult, pathToDataSo
4438
const prepareExternalTableInfo = (
4539
data: TEvDescribeSchemeResult,
4640
pathToDataSource: string,
47-
): InfoViewerItem[] => {
41+
): YDBDefinitionListItem[] => {
4842
const location = data.PathDescription?.ExternalTableDescription?.Location;
4943

5044
return [
5145
...prepareExternalTableSummary(data, pathToDataSource),
5246
{
53-
label: i18n('external-objects.location'),
54-
value: (
55-
<EntityStatus
56-
name={location}
57-
showStatus={false}
58-
hasClipboardButton
59-
clipboardButtonAlwaysVisible
60-
className={b('location')}
61-
/>
62-
),
47+
name: i18n('external-objects.location'),
48+
content: location,
49+
copyText: location,
6350
},
6451
];
6552
};
6653

6754
interface ExternalTableProps {
6855
data?: TEvDescribeSchemeResult;
69-
prepareData: (data: TEvDescribeSchemeResult, pathToDataSource: string) => InfoViewerItem[];
56+
prepareData: (
57+
data: TEvDescribeSchemeResult,
58+
pathToDataSource: string,
59+
) => YDBDefinitionListItem[];
7060
}
7161

7262
const ExternalTable = ({data, prepareData}: ExternalTableProps) => {
@@ -81,10 +71,10 @@ const ExternalTable = ({data, prepareData}: ExternalTableProps) => {
8171
const entityName = getEntityName(data?.PathDescription);
8272

8373
if (!data) {
84-
return <div className="error">No {entityName} data</div>;
74+
return renderNoEntityDataError(entityName);
8575
}
8676

87-
return <InfoViewer title={entityName} info={prepareData(data, pathToDataSource)} />;
77+
return <YDBDefinitionList title={entityName} items={prepareData(data, pathToDataSource)} />;
8878
};
8979

9080
export const ExternalTableInfo = ({data}: {data?: TEvDescribeSchemeResult}) => {

src/containers/Tenant/Info/SystemView/SystemView.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import {Text} from '@gravity-ui/uikit';
2-
31
import type {YDBDefinitionListItem} from '../../../../components/YDBDefinitionList/YDBDefinitionList';
42
import {YDBDefinitionList} from '../../../../components/YDBDefinitionList/YDBDefinitionList';
53
import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
64
import {prepareSystemViewType} from '../../../../utils/schema';
75
import {getEntityName} from '../../utils';
86
import i18n from '../i18n';
7+
import {renderNoEntityDataError} from '../utils';
98

109
const prepareSystemViewItems = (data: TEvDescribeSchemeResult): YDBDefinitionListItem[] => {
1110
const systemViewType = data.PathDescription?.SysViewDescription?.Type;
@@ -26,11 +25,7 @@ export function SystemViewInfo({data}: SystemViewInfoProps) {
2625
const entityName = getEntityName(data?.PathDescription);
2726

2827
if (!data) {
29-
return (
30-
<Text variant="body-2" color="danger">
31-
{i18n('no-entity-data', {entityName})}
32-
</Text>
33-
);
28+
return renderNoEntityDataError(entityName);
3429
}
3530

3631
const items = prepareSystemViewItems(data);

src/containers/Tenant/Info/View/View.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {YDBDefinitionList} from '../../../../components/YDBDefinitionList/YDBDef
44
import type {TEvDescribeSchemeResult} from '../../../../types/api/schema';
55
import {getEntityName} from '../../utils';
66
import i18n from '../i18n';
7+
import {renderNoEntityDataError} from '../utils';
78

89
const prepareViewItems = (data: TEvDescribeSchemeResult): YDBDefinitionListItem[] => {
910
const queryText = data.PathDescription?.ViewDescription?.QueryText;
@@ -25,7 +26,7 @@ export function ViewInfo({data}: ViewInfoProps) {
2526
const entityName = getEntityName(data?.PathDescription);
2627

2728
if (!data) {
28-
return <div className="error">No {entityName} data</div>;
29+
return renderNoEntityDataError(entityName);
2930
}
3031

3132
const items = prepareViewItems(data);

src/containers/Tenant/Info/i18n/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
{
2+
"created": "Created",
3+
24
"external-objects.source-type": "Source Type",
35
"external-objects.data-source": "Data Source",
46
"external-objects.location": "Location",
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {Text} from '@gravity-ui/uikit';
2+
3+
import type {YDBDefinitionListItem} from '../../../components/YDBDefinitionList/YDBDefinitionList';
4+
import {EMPTY_DATA_PLACEHOLDER} from '../../../utils/constants';
5+
import {formatDateTime} from '../../../utils/dataFormatters/dataFormatters';
6+
7+
import i18n from './i18n';
8+
9+
export function prepareCreateTimeItem(createStep?: string | number): YDBDefinitionListItem {
10+
return {
11+
name: i18n('created'),
12+
content: formatDateTime(createStep, {defaultValue: EMPTY_DATA_PLACEHOLDER}),
13+
};
14+
}
15+
16+
export function renderNoEntityDataError(entityName: string | undefined) {
17+
return (
18+
<Text variant="body-2" color="danger">
19+
{i18n('no-entity-data', {entityName: entityName ?? ''})}
20+
</Text>
21+
);
22+
}

0 commit comments

Comments
 (0)