1+ import { duration } from '@gravity-ui/date-utils' ;
12import type { Column as DataTableColumn } from '@gravity-ui/react-data-table' ;
23import { Text } from '@gravity-ui/uikit' ;
34
45import { EntityStatus } from '../../components/EntityStatus/EntityStatus' ;
56import type { TOperation } from '../../types/api/operationList' ;
67import { EStatusCode } from '../../types/api/operationList' ;
7- import { EMPTY_DATA_PLACEHOLDER } from '../../utils/constants' ;
8+ import { EMPTY_DATA_PLACEHOLDER , HOUR_IN_SECONDS , SECOND_IN_MS } from '../../utils/constants' ;
9+ import { formatDateTime } from '../../utils/dataFormatters/dataFormatters' ;
10+ import { parseProtobufTimestampToMs } from '../../utils/timeParsers' ;
811
912import { COLUMNS_NAMES , COLUMNS_TITLES } from './constants' ;
13+ import i18n from './i18n' ;
1014
1115export function getColumns ( ) : DataTableColumn < TOperation > [ ] {
1216 return [
@@ -52,9 +56,10 @@ export function getColumns(): DataTableColumn<TOperation>[] {
5256 if ( ! row . create_time ) {
5357 return EMPTY_DATA_PLACEHOLDER ;
5458 }
55- return new Date ( row . create_time || '' ) . toLocaleString ( ) ;
59+ return formatDateTime ( parseProtobufTimestampToMs ( row . create_time ) ) ;
5660 } ,
57- sortAccessor : ( row ) => new Date ( row . create_time || '' ) . getTime ( ) ,
61+ sortAccessor : ( row ) =>
62+ row . create_time ? parseProtobufTimestampToMs ( row . create_time ) : 0 ,
5863 } ,
5964 {
6065 name : COLUMNS_NAMES . END_TIME ,
@@ -63,31 +68,46 @@ export function getColumns(): DataTableColumn<TOperation>[] {
6368 if ( ! row . end_time ) {
6469 return EMPTY_DATA_PLACEHOLDER ;
6570 }
66- return row . end_time ? new Date ( row . end_time ) . toLocaleString ( ) : '-' ;
71+ return formatDateTime ( parseProtobufTimestampToMs ( row . end_time ) ) ;
6772 } ,
6873 sortAccessor : ( row ) =>
69- row . end_time ? new Date ( row . end_time ) . getTime ( ) : Number . MAX_SAFE_INTEGER ,
74+ row . end_time ? parseProtobufTimestampToMs ( row . end_time ) : Number . MAX_SAFE_INTEGER ,
7075 } ,
7176 {
7277 name : COLUMNS_NAMES . DURATION ,
7378 header : COLUMNS_TITLES [ COLUMNS_NAMES . DURATION ] ,
7479 render : ( { row} ) => {
80+ let durationValue = 0 ;
7581 if ( ! row . create_time ) {
7682 return EMPTY_DATA_PLACEHOLDER ;
7783 }
78- if ( row . create_time && row . end_time ) {
79- const duration =
80- new Date ( row . end_time ) . getTime ( ) - new Date ( row . create_time ) . getTime ( ) ;
81- return `${ ( duration / 1000 ) . toFixed ( 2 ) } s` ;
84+ const createTime = parseProtobufTimestampToMs ( row . create_time ) ;
85+ if ( row . end_time ) {
86+ const endTime = parseProtobufTimestampToMs ( row . end_time ) ;
87+ durationValue = endTime - createTime ;
88+ } else {
89+ durationValue = Date . now ( ) - createTime ;
8290 }
83- const duration = Date . now ( ) - new Date ( row . create_time || '' ) . getTime ( ) ;
84- return `${ ( duration / 1000 ) . toFixed ( 2 ) } s (ongoing)` ;
91+
92+ const durationFormatted =
93+ durationValue > HOUR_IN_SECONDS * SECOND_IN_MS
94+ ? duration ( durationValue ) . format ( 'hh:mm:ss' )
95+ : duration ( durationValue ) . format ( 'mm:ss' ) ;
96+
97+ return row . end_time
98+ ? durationFormatted
99+ : i18n ( 'duration.ongoing' , { value : durationFormatted } ) ;
85100 } ,
86101 sortAccessor : ( row ) => {
87- if ( row . create_time && row . end_time ) {
88- return new Date ( row . end_time ) . getTime ( ) - new Date ( row . create_time ) . getTime ( ) ;
102+ if ( ! row . create_time ) {
103+ return 0 ;
104+ }
105+ const createTime = parseProtobufTimestampToMs ( row . create_time ) ;
106+ if ( row . end_time ) {
107+ const endTime = parseProtobufTimestampToMs ( row . end_time ) ;
108+ return endTime - createTime ;
89109 }
90- return Date . now ( ) - new Date ( row . create_time || '' ) . getTime ( ) ;
110+ return Date . now ( ) - createTime ;
91111 } ,
92112 } ,
93113 ] ;
0 commit comments