diff --git a/src/components/InfoViewer/formatters/common.ts b/src/components/InfoViewer/formatters/common.ts index 43c592188..074e147b7 100644 --- a/src/components/InfoViewer/formatters/common.ts +++ b/src/components/InfoViewer/formatters/common.ts @@ -1,4 +1,5 @@ import type {TDirEntry} from '../../../types/api/schema'; +import {EMPTY_DATA_PLACEHOLDER} from '../../../utils/constants'; import {formatDateTime} from '../../../utils/dataFormatters/dataFormatters'; import i18n from '../i18n'; import {createInfoFormatter} from '../utils'; @@ -6,7 +7,7 @@ import {createInfoFormatter} from '../utils'; export const formatCommonItem = createInfoFormatter({ values: { PathType: (value) => value?.substring('EPathType'.length), - CreateStep: formatDateTime, + CreateStep: (value) => formatDateTime(value, {defaultValue: EMPTY_DATA_PLACEHOLDER}), }, labels: { PathType: i18n('common.type'), diff --git a/src/containers/Tenant/Diagnostics/Overview/ChangefeedInfo/ChangefeedInfo.tsx b/src/containers/Tenant/Diagnostics/Overview/ChangefeedInfo/ChangefeedInfo.tsx index 8701f8118..18104e061 100644 --- a/src/containers/Tenant/Diagnostics/Overview/ChangefeedInfo/ChangefeedInfo.tsx +++ b/src/containers/Tenant/Diagnostics/Overview/ChangefeedInfo/ChangefeedInfo.tsx @@ -21,17 +21,21 @@ const prepareChangefeedInfo = ( const {Mode, Format} = streamDescription || {}; - const created = formatCommonItem( - 'CreateStep', - changefeedData?.PathDescription?.Self?.CreateStep, - ); const changefeedInfo = formatObject(formatCdcStreamItem, { Mode, Format, }); const topicInfo = prepareTopicSchemaInfo(topicData); - return [created, ...changefeedInfo, ...topicInfo]; + const info = [...changefeedInfo, ...topicInfo]; + + const createStep = changefeedData?.PathDescription?.Self?.CreateStep; + + if (Number(createStep)) { + info.unshift(formatCommonItem('CreateStep', createStep)); + } + + return info; }; interface ChangefeedProps { diff --git a/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx b/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx index 0f5ef5d19..d4aab238f 100644 --- a/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx +++ b/src/containers/Tenant/Info/ExternalDataSource/ExternalDataSource.tsx @@ -11,14 +11,21 @@ import './ExternalDataSource.scss'; const b = cn('ydb-external-data-source-info'); -const prepareExternalDataSourceSummary = (data: TEvDescribeSchemeResult): InfoViewerItem[] => { - return [ +const prepareExternalDataSourceSummary = (data: TEvDescribeSchemeResult) => { + const info: InfoViewerItem[] = [ { label: i18n('external-objects.source-type'), value: data.PathDescription?.ExternalDataSourceDescription?.SourceType, }, - formatCommonItem('CreateStep', data.PathDescription?.Self?.CreateStep), ]; + + const createStep = data.PathDescription?.Self?.CreateStep; + + if (Number(createStep)) { + info.push(formatCommonItem('CreateStep', data.PathDescription?.Self?.CreateStep)); + } + + return info; }; const prepareExternalDataSourceInfo = (data: TEvDescribeSchemeResult): InfoViewerItem[] => { diff --git a/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx b/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx index 9d42cfec0..29ca038eb 100644 --- a/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx +++ b/src/containers/Tenant/Info/ExternalTable/ExternalTable.tsx @@ -15,27 +15,30 @@ import './ExternalTable.scss'; const b = cn('ydb-external-table-info'); -const prepareExternalTableSummary = ( - data: TEvDescribeSchemeResult, - pathToDataSource: string, -): InfoViewerItem[] => { +const prepareExternalTableSummary = (data: TEvDescribeSchemeResult, pathToDataSource: string) => { const {CreateStep} = data.PathDescription?.Self || {}; const {SourceType, DataSourcePath} = data.PathDescription?.ExternalTableDescription || {}; const dataSourceName = DataSourcePath?.split('/').pop(); - return [ + const info: InfoViewerItem[] = [ {label: i18n('external-objects.source-type'), value: SourceType}, - formatCommonItem('CreateStep', CreateStep), - { - label: i18n('external-objects.data-source'), - value: DataSourcePath && ( - - - - ), - }, ]; + + if (Number(CreateStep)) { + info.push(formatCommonItem('CreateStep', CreateStep)); + } + + info.push({ + label: i18n('external-objects.data-source'), + value: DataSourcePath && ( + + + + ), + }); + + return info; }; const prepareExternalTableInfo = ( diff --git a/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx b/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx index f1a05e509..933eb9d45 100644 --- a/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx +++ b/src/containers/Tenant/ObjectSummary/ObjectSummary.tsx @@ -167,10 +167,12 @@ export function ObjectSummary({ overview.push({name: i18n('field_version'), content: PathVersion}); - overview.push({ - name: i18n('field_created'), - content: formatDateTime(CreateStep), - }); + if (Number(CreateStep)) { + overview.push({ + name: i18n('field_created'), + content: formatDateTime(CreateStep), + }); + } const {PathDescription} = currentObjectData; diff --git a/src/utils/dataFormatters/dataFormatters.ts b/src/utils/dataFormatters/dataFormatters.ts index 3de0e6614..a15f3b8b0 100644 --- a/src/utils/dataFormatters/dataFormatters.ts +++ b/src/utils/dataFormatters/dataFormatters.ts @@ -215,6 +215,11 @@ export const formatDateTime = ( value?: number | string, {withTimeZone, defaultValue = ''}: {withTimeZone?: boolean; defaultValue?: string} = {}, ) => { + // prevent 1970-01-01 03:00 + if (!Number(value)) { + return defaultValue; + } + const tz = withTimeZone ? ' z' : ''; const formattedData = dateTimeParse(Number(value))?.format(`YYYY-MM-DD HH:mm${tz}`);