Skip to content

Commit 081c130

Browse files
committed
fix: fix types
1 parent ce3cd4b commit 081c130

File tree

4 files changed

+41
-18
lines changed

4 files changed

+41
-18
lines changed

src/containers/Operations/columns.tsx

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
import {duration} from '@gravity-ui/date-utils';
12
import type {Column as DataTableColumn} from '@gravity-ui/react-data-table';
23
import {Text} from '@gravity-ui/uikit';
34

45
import {EntityStatus} from '../../components/EntityStatus/EntityStatus';
56
import type {TOperation} from '../../types/api/operationList';
67
import {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

912
import {COLUMNS_NAMES, COLUMNS_TITLES} from './constants';
13+
import i18n from './i18n';
1014

1115
export 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
];

src/containers/Operations/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const BASE_COLUMNS = [
3232
];
3333

3434
export const OPERATION_KINDS: {value: OperationKind; content: string}[] = [
35-
{value: 'ss/backgrounds', content: i18n('kind.ssBackgrounds')},
3635
{value: 'export', content: i18n('kind.export')},
36+
{value: 'ss/backgrounds', content: i18n('kind.ssBackgrounds')},
3737
{value: 'buildindex', content: i18n('kind.buildIndex')},
3838
];

src/containers/Operations/i18n/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,6 @@
3636
"column.createdBy": "Created By",
3737
"column.createTime": "Create Time",
3838
"column.endTime": "End Time",
39-
"column.duration": "Duration"
39+
"column.duration": "Duration",
40+
"duration.ongoing": "{{value}} (ongoing)"
4041
}

src/types/api/operationList.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type {IProtobufTimeObject} from './common';
2+
13
/**
24
* endpoint: /operation/list
35
*
@@ -99,8 +101,8 @@ export interface TOperation {
99101
issues?: TIssueMessage[];
100102
metadata?: TOperationMetadata;
101103
cost_info?: TCostInfo;
102-
create_time?: string;
103-
end_time?: string;
104+
create_time?: IProtobufTimeObject;
105+
end_time?: IProtobufTimeObject;
104106
created_by?: string;
105107
}
106108

0 commit comments

Comments
 (0)