mirror of
https://github.com/SigNoz/signoz.git
synced 2026-03-15 17:32:45 +00:00
Some checks failed
build-staging / prepare (push) Has been cancelled
build-staging / js-build (push) Has been cancelled
build-staging / go-build (push) Has been cancelled
build-staging / staging (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
* feat: allow saving previous query in qb * feat: test cases added * feat: test cases added * feat: save only one prev query * feat: minor refactor * feat: lint fix * feat: minor refactor * fix: clear previous query before * fix: save one query per dataSource
71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData';
|
|
|
|
export const PREVIOUS_QUERY_KEY = 'previousQuery';
|
|
|
|
function getPreviousQueryFromStore(): Record<string, IBuilderQuery> {
|
|
try {
|
|
const raw = sessionStorage.getItem(PREVIOUS_QUERY_KEY);
|
|
if (!raw) {
|
|
return {};
|
|
}
|
|
const parsed = JSON.parse(raw);
|
|
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
} catch {
|
|
return {};
|
|
}
|
|
}
|
|
|
|
function writePreviousQueryToStore(store: Record<string, IBuilderQuery>): void {
|
|
try {
|
|
sessionStorage.setItem(PREVIOUS_QUERY_KEY, JSON.stringify(store));
|
|
} catch {
|
|
// ignore quota or serialization errors
|
|
}
|
|
}
|
|
|
|
export const getQueryKey = ({
|
|
queryName,
|
|
dataSource,
|
|
signalSource,
|
|
panelType,
|
|
}: {
|
|
queryName: string;
|
|
dataSource: string;
|
|
signalSource: string;
|
|
panelType: string;
|
|
}): string => {
|
|
const qn = queryName || '';
|
|
const ds = dataSource || '';
|
|
const ss = signalSource === 'meter' ? 'meter' : '';
|
|
const pt = panelType || '';
|
|
return `${qn}:${ds}:${ss}:${pt}`;
|
|
};
|
|
|
|
export const getPreviousQueryFromKey = (key: string): IBuilderQuery | null => {
|
|
const previousQuery = getPreviousQueryFromStore();
|
|
return previousQuery?.[key] ?? null;
|
|
};
|
|
|
|
export const saveAsPreviousQuery = (
|
|
key: string,
|
|
query: IBuilderQuery,
|
|
): void => {
|
|
const previousQuery = getPreviousQueryFromStore();
|
|
previousQuery[key] = query;
|
|
writePreviousQueryToStore(previousQuery);
|
|
};
|
|
|
|
export const removeKeyFromPreviousQuery = (key: string): void => {
|
|
const previousQuery = getPreviousQueryFromStore();
|
|
delete previousQuery[key];
|
|
writePreviousQueryToStore(previousQuery);
|
|
};
|
|
|
|
export const clearPreviousQuery = (): void => {
|
|
try {
|
|
sessionStorage.removeItem(PREVIOUS_QUERY_KEY);
|
|
} catch {
|
|
// no-op
|
|
}
|
|
};
|