mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-28 23:56:13 +00:00
* feat: removed ellipsis prop * feat: prevent unnecessary save calls * feat: fix dashboard detail resize icon * feat: adjusted resizable header - set minConstraint * feat: fixed dashboard vanishing issue * feat: removed dependency causing maximum callstack warning * feat: corrected the list edit view render issue and resize handler fix * feat: style fix * feat: removed comments * fix: updated test cases * feat: updated the test cases --------- Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com>
54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
import { FORMULA_REGEXP } from 'constants/regExp';
|
|
import { isEmpty, isEqual } from 'lodash-es';
|
|
import { Layout } from 'react-grid-layout';
|
|
import { Dashboard, Widgets } from 'types/api/dashboard/getAll';
|
|
|
|
export const removeUndefinedValuesFromLayout = (layout: Layout[]): Layout[] =>
|
|
layout.map((obj) =>
|
|
Object.fromEntries(
|
|
Object.entries(obj).filter(([, value]) => value !== undefined),
|
|
),
|
|
) as Layout[];
|
|
|
|
export const isFormula = (queryName: string): boolean =>
|
|
FORMULA_REGEXP.test(queryName);
|
|
|
|
/**
|
|
* Extracts query names from a formula expression
|
|
* Specifically targets capital letters A-Z as query names, as after Z we dont have any query names
|
|
*/
|
|
export function extractQueryNamesFromExpression(expression: string): string[] {
|
|
if (!expression) return [];
|
|
|
|
// Use regex to match standalone capital letters
|
|
// Uses word boundaries to ensure we only get standalone letters
|
|
const queryNameRegex = /\b[A-Z]\b/g;
|
|
|
|
// Extract matches and deduplicate
|
|
return [...new Set(expression.match(queryNameRegex) || [])];
|
|
}
|
|
|
|
export const hasColumnWidthsChanged = (
|
|
columnWidths: Record<string, Record<string, number>>,
|
|
selectedDashboard?: Dashboard,
|
|
): boolean => {
|
|
// If no column widths stored, no changes
|
|
if (isEmpty(columnWidths) || !selectedDashboard) return false;
|
|
|
|
// Check each widget's column widths
|
|
return Object.keys(columnWidths).some((widgetId) => {
|
|
const dashboardWidget = selectedDashboard?.data?.widgets?.find(
|
|
(widget) => widget.id === widgetId,
|
|
) as Widgets;
|
|
|
|
const newWidths = columnWidths[widgetId];
|
|
const existingWidths = dashboardWidget?.columnWidths;
|
|
|
|
// If both are empty/undefined, no change
|
|
if (isEmpty(newWidths) || isEmpty(existingWidths)) return false;
|
|
|
|
// Compare stored column widths with dashboard widget's column widths
|
|
return !isEqual(newWidths, existingWidths);
|
|
});
|
|
};
|