From ea89433dc0ec12063bcd02aa2d65b98ec6e65233 Mon Sep 17 00:00:00 2001 From: Yevhen Shevchenko <90138953+yeshev@users.noreply.github.com> Date: Wed, 5 Jul 2023 07:51:31 +0300 Subject: [PATCH] fix: formula for table (#3004) * fix: formula for table * fix: empty column * fix: formula values in table view --------- Co-authored-by: Palash Gupta Co-authored-by: Vishal Sharma Co-authored-by: Srikanth Chekuri --- .../lib/query/createTableColumnsFromQuery.ts | 66 ++++++++----------- frontend/src/lib/toCapitalize.ts | 7 +- 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/frontend/src/lib/query/createTableColumnsFromQuery.ts b/frontend/src/lib/query/createTableColumnsFromQuery.ts index 7aaa10480d..168261238f 100644 --- a/frontend/src/lib/query/createTableColumnsFromQuery.ts +++ b/frontend/src/lib/query/createTableColumnsFromQuery.ts @@ -39,7 +39,6 @@ type CreateTableDataFromQuery = ( type FillColumnData = ( queryTableData: QueryDataV3[], dynamicColumns: DynamicColumns, - query: Query, ) => { filledDynamicColumns: DynamicColumns; rowsLength: number }; type GetDynamicColumns = ( @@ -76,13 +75,21 @@ const prepareColumnTitle = (title: string): string => { return toCapitalize(title); }; +const getQueryOperator = ( + queryData: IBuilderQuery[], + currentQueryName: string, +): string => { + const builderQuery = queryData.find((q) => q.queryName === currentQueryName); + + return builderQuery ? builderQuery.aggregateOperator : ''; +}; + const createLabels = ( labels: T, label: keyof T, dynamicColumns: DynamicColumns, ): void => { if (isColumnExist(label as string, dynamicColumns)) return; - if (isFormula(label as string)) return; const labelValue = labels[label]; @@ -130,38 +137,26 @@ const getDynamicColumns: GetDynamicColumns = (queryTableData, query) => { }); }); - if (!isFormula(currentQuery.queryName)) { - const builderQuery = query.builder.queryData.find( - (q) => q.queryName === currentQuery.queryName, - ); + const operator = getQueryOperator( + query.builder.queryData, + currentQuery.queryName, + ); - const operator = builderQuery ? builderQuery.aggregateOperator : ''; + if (operator === '' || isColumnExist(operator, dynamicColumns)) return; - if (isColumnExist(operator, dynamicColumns)) return; - - const operatorColumn: DynamicColumn = { - key: operator, - data: [], - type: 'operator', - sortable: true, - }; - dynamicColumns.push(operatorColumn); - } + const operatorColumn: DynamicColumn = { + key: operator, + data: [], + type: 'operator', + sortable: true, + }; + dynamicColumns.push(operatorColumn); } }); return dynamicColumns; }; -const getQueryOperator = ( - queryData: IBuilderQuery[], - currentQueryName: string, -): string => { - const builderQuery = queryData.find((q) => q.queryName === currentQueryName); - - return builderQuery ? builderQuery.aggregateOperator : ''; -}; - const fillEmptyRowCells = ( unusedColumnsKeys: Set, sourceColumns: DynamicColumns, @@ -182,7 +177,7 @@ const fillEmptyRowCells = ( const fillDataFromSeria = ( seria: SeriesItem, columns: DynamicColumns, - currentOperator: string, + currentQueryName: string, ): void => { const labelEntries = Object.entries(seria.labels); @@ -192,15 +187,13 @@ const fillDataFromSeria = ( ); columns.forEach((column) => { - if (isFormula(column.key as string)) return; - if (column.key === 'timestamp') { column.data.push(value.timestamp); unusedColumnsKeys.delete('timestamp'); return; } - if (column.key === currentOperator) { + if (currentQueryName === column.key) { column.data.push(parseFloat(value.value).toFixed(2)); unusedColumnsKeys.delete(column.key); return; @@ -237,20 +230,20 @@ const fillDataFromList = ( }); }; -const fillColumnsData: FillColumnData = (queryTableData, cols, query) => { +const fillColumnsData: FillColumnData = (queryTableData, cols) => { const fields = cols.filter((item) => item.type === 'field'); const operators = cols.filter((item) => item.type === 'operator'); const resultColumns = [...fields, ...operators]; queryTableData.forEach((currentQuery) => { - const currentOperator = getQueryOperator( - query.builder.queryData, - currentQuery.queryName, - ); + // const currentOperator = getQueryOperator( + // query.builder.queryData, + // currentQuery.queryName, + // ); if (currentQuery.series) { currentQuery.series.forEach((seria) => { - fillDataFromSeria(seria, resultColumns, currentOperator); + fillDataFromSeria(seria, resultColumns, currentQuery.queryName); }); } @@ -320,7 +313,6 @@ export const createTableColumnsFromQuery: CreateTableDataFromQuery = ({ const { filledDynamicColumns, rowsLength } = fillColumnsData( queryTableData, dynamicColumns, - query, ); const dataSource = generateData(filledDynamicColumns, rowsLength); diff --git a/frontend/src/lib/toCapitalize.ts b/frontend/src/lib/toCapitalize.ts index a42a7336bf..7692dbf246 100644 --- a/frontend/src/lib/toCapitalize.ts +++ b/frontend/src/lib/toCapitalize.ts @@ -1,2 +1,5 @@ -export const toCapitalize = (str: string): string => - str[0].toUpperCase() + str.slice(1); +export const toCapitalize = (str: string): string => { + if (!str) return ''; + + return str[0].toUpperCase() + str.slice(1); +};