fix: formula for table (#3004)

* fix: formula for table

* fix: empty column

* fix: formula values in table view

---------

Co-authored-by: Palash Gupta <palashgdev@gmail.com>
Co-authored-by: Vishal Sharma <makeavish786@gmail.com>
Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com>
This commit is contained in:
Yevhen Shevchenko 2023-07-05 07:51:31 +03:00 committed by GitHub
parent 22bbfaf495
commit ea89433dc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 39 deletions

View File

@ -39,7 +39,6 @@ type CreateTableDataFromQuery = (
type FillColumnData = ( type FillColumnData = (
queryTableData: QueryDataV3[], queryTableData: QueryDataV3[],
dynamicColumns: DynamicColumns, dynamicColumns: DynamicColumns,
query: Query,
) => { filledDynamicColumns: DynamicColumns; rowsLength: number }; ) => { filledDynamicColumns: DynamicColumns; rowsLength: number };
type GetDynamicColumns = ( type GetDynamicColumns = (
@ -76,13 +75,21 @@ const prepareColumnTitle = (title: string): string => {
return toCapitalize(title); return toCapitalize(title);
}; };
const getQueryOperator = (
queryData: IBuilderQuery[],
currentQueryName: string,
): string => {
const builderQuery = queryData.find((q) => q.queryName === currentQueryName);
return builderQuery ? builderQuery.aggregateOperator : '';
};
const createLabels = <T extends ListItemData | SeriesItemLabels>( const createLabels = <T extends ListItemData | SeriesItemLabels>(
labels: T, labels: T,
label: keyof T, label: keyof T,
dynamicColumns: DynamicColumns, dynamicColumns: DynamicColumns,
): void => { ): void => {
if (isColumnExist(label as string, dynamicColumns)) return; if (isColumnExist(label as string, dynamicColumns)) return;
if (isFormula(label as string)) return;
const labelValue = labels[label]; const labelValue = labels[label];
@ -130,14 +137,12 @@ const getDynamicColumns: GetDynamicColumns = (queryTableData, query) => {
}); });
}); });
if (!isFormula(currentQuery.queryName)) { const operator = getQueryOperator(
const builderQuery = query.builder.queryData.find( query.builder.queryData,
(q) => q.queryName === currentQuery.queryName, currentQuery.queryName,
); );
const operator = builderQuery ? builderQuery.aggregateOperator : ''; if (operator === '' || isColumnExist(operator, dynamicColumns)) return;
if (isColumnExist(operator, dynamicColumns)) return;
const operatorColumn: DynamicColumn = { const operatorColumn: DynamicColumn = {
key: operator, key: operator,
@ -147,21 +152,11 @@ const getDynamicColumns: GetDynamicColumns = (queryTableData, query) => {
}; };
dynamicColumns.push(operatorColumn); dynamicColumns.push(operatorColumn);
} }
}
}); });
return dynamicColumns; return dynamicColumns;
}; };
const getQueryOperator = (
queryData: IBuilderQuery[],
currentQueryName: string,
): string => {
const builderQuery = queryData.find((q) => q.queryName === currentQueryName);
return builderQuery ? builderQuery.aggregateOperator : '';
};
const fillEmptyRowCells = ( const fillEmptyRowCells = (
unusedColumnsKeys: Set<keyof RowData>, unusedColumnsKeys: Set<keyof RowData>,
sourceColumns: DynamicColumns, sourceColumns: DynamicColumns,
@ -182,7 +177,7 @@ const fillEmptyRowCells = (
const fillDataFromSeria = ( const fillDataFromSeria = (
seria: SeriesItem, seria: SeriesItem,
columns: DynamicColumns, columns: DynamicColumns,
currentOperator: string, currentQueryName: string,
): void => { ): void => {
const labelEntries = Object.entries(seria.labels); const labelEntries = Object.entries(seria.labels);
@ -192,15 +187,13 @@ const fillDataFromSeria = (
); );
columns.forEach((column) => { columns.forEach((column) => {
if (isFormula(column.key as string)) return;
if (column.key === 'timestamp') { if (column.key === 'timestamp') {
column.data.push(value.timestamp); column.data.push(value.timestamp);
unusedColumnsKeys.delete('timestamp'); unusedColumnsKeys.delete('timestamp');
return; return;
} }
if (column.key === currentOperator) { if (currentQueryName === column.key) {
column.data.push(parseFloat(value.value).toFixed(2)); column.data.push(parseFloat(value.value).toFixed(2));
unusedColumnsKeys.delete(column.key); unusedColumnsKeys.delete(column.key);
return; 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 fields = cols.filter((item) => item.type === 'field');
const operators = cols.filter((item) => item.type === 'operator'); const operators = cols.filter((item) => item.type === 'operator');
const resultColumns = [...fields, ...operators]; const resultColumns = [...fields, ...operators];
queryTableData.forEach((currentQuery) => { queryTableData.forEach((currentQuery) => {
const currentOperator = getQueryOperator( // const currentOperator = getQueryOperator(
query.builder.queryData, // query.builder.queryData,
currentQuery.queryName, // currentQuery.queryName,
); // );
if (currentQuery.series) { if (currentQuery.series) {
currentQuery.series.forEach((seria) => { 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( const { filledDynamicColumns, rowsLength } = fillColumnsData(
queryTableData, queryTableData,
dynamicColumns, dynamicColumns,
query,
); );
const dataSource = generateData(filledDynamicColumns, rowsLength); const dataSource = generateData(filledDynamicColumns, rowsLength);

View File

@ -1,2 +1,5 @@
export const toCapitalize = (str: string): string => export const toCapitalize = (str: string): string => {
str[0].toUpperCase() + str.slice(1); if (!str) return '';
return str[0].toUpperCase() + str.slice(1);
};