signoz/frontend/src/lib/newQueryBuilder/getPaginationQueryData.ts
Yevhen Shevchenko 76ba364317
Feat/list infinity scroll (#2992)
* feat: add custom orderBy

* feat: infinity scroll list logs list

* feat: add infinity table view

* Fix/double query logs request (#3006)

* feat: add control panel

* fix: repeating query api request

* fix: scroll, remove id, page size

* fix: reset offset to 0

* feat: add log explorer detail (#3007)

* feat: add control panel

* fix: repeating query api request

* feat: add log explorer detail

---------

Co-authored-by: Vishal Sharma <makeavish786@gmail.com>

* feat: add group by in the logs chart (#3009)

* feat: add control panel

* fix: repeating query api request

* feat: add log explorer detail

* feat: add group by in the logs chart

* fix: list timestamp, limit, filter order

* feat: add list chart (#3037)

* feat: add list chart

* refactor: remove console log

* feat: hide aggregate every for table view (#3046)

* feat: hide aggregate every for table view

* fix: text filter for inactive filters

* refactor: remove log

* fix: table columns

* fix: timestamp type

---------

Co-authored-by: Vishal Sharma <makeavish786@gmail.com>
2023-07-06 16:52:44 +05:30

77 lines
1.8 KiB
TypeScript

import { initialFilters } from 'constants/queryBuilder';
import { FILTERS } from 'container/QueryBuilder/filters/OrderByFilter/config';
import {
IBuilderQuery,
OrderByPayload,
TagFilter,
} from 'types/api/queryBuilder/queryBuilderData';
import { v4 as uuid } from 'uuid';
type SetupPaginationQueryDataParams = {
currentStagedQueryData: IBuilderQuery | null;
listItemId: string | null;
orderByTimestamp: OrderByPayload | null;
page: number;
pageSize: number;
};
type SetupPaginationQueryData = (
params: SetupPaginationQueryDataParams,
) => Pick<IBuilderQuery, 'filters' | 'offset'>;
export const getPaginationQueryData: SetupPaginationQueryData = ({
currentStagedQueryData,
listItemId,
orderByTimestamp,
page,
pageSize,
}) => {
if (!currentStagedQueryData) {
return { limit: null, filters: initialFilters };
}
const filters = currentStagedQueryData.filters || initialFilters;
const offset = (page - 1) * pageSize;
const queryProps =
(orderByTimestamp && currentStagedQueryData.orderBy.length > 1) ||
!orderByTimestamp
? {
offset,
}
: {};
const updatedFilters: TagFilter = {
...filters,
items: filters.items.filter((item) => item.key?.key !== 'id'),
};
const tagFilters: TagFilter = {
...filters,
items:
listItemId && orderByTimestamp
? [
{
id: uuid(),
key: {
key: 'id',
type: null,
dataType: 'string',
isColumn: true,
},
op: orderByTimestamp.order === FILTERS.ASC ? '>' : '<',
value: listItemId,
},
...updatedFilters.items,
]
: updatedFilters.items,
};
const chunkOfQueryData: Partial<IBuilderQuery> = {
filters: orderByTimestamp ? tagFilters : updatedFilters,
...queryProps,
};
return { ...currentStagedQueryData, ...chunkOfQueryData };
};