2023-01-16 09:45:12 +00:00
|
|
|
import { OrderDirection } from "@dashboard/graphql";
|
|
|
|
import { findValueInEnum, parseBoolean } from "@dashboard/misc";
|
2020-05-14 09:30:32 +00:00
|
|
|
|
2019-09-13 14:40:02 +00:00
|
|
|
import { TableCellHeaderArrowDirection } from "../components/TableCellHeader";
|
|
|
|
import { Sort } from "../types";
|
|
|
|
|
|
|
|
export function getSortUrlVariables<TSortKey extends string>(
|
|
|
|
field: TSortKey,
|
2022-06-21 09:36:55 +00:00
|
|
|
params: Sort<TSortKey>,
|
2019-09-13 14:40:02 +00:00
|
|
|
): Sort<TSortKey> {
|
|
|
|
if (field === params.sort) {
|
|
|
|
return {
|
|
|
|
asc: !params.asc,
|
2022-06-21 09:36:55 +00:00
|
|
|
sort: field,
|
2019-09-13 14:40:02 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
asc: true,
|
2022-06-21 09:36:55 +00:00
|
|
|
sort: field,
|
2019-09-13 14:40:02 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getOrderDirection(asc: boolean): OrderDirection {
|
|
|
|
return asc ? OrderDirection.ASC : OrderDirection.DESC;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getArrowDirection(asc: boolean): TableCellHeaderArrowDirection {
|
|
|
|
return asc ? "asc" : "desc";
|
|
|
|
}
|
2019-12-17 17:13:56 +00:00
|
|
|
|
|
|
|
// Extracts Sort object from the querystring
|
|
|
|
export function getSortParams<
|
|
|
|
TParams extends Sort<TFields>,
|
2023-01-25 12:32:30 +00:00
|
|
|
TFields extends string,
|
2019-12-17 17:13:56 +00:00
|
|
|
>(params: TParams): Sort<TFields> {
|
|
|
|
return {
|
|
|
|
asc: params.asc,
|
2022-06-21 09:36:55 +00:00
|
|
|
sort: params.sort,
|
2019-12-17 17:13:56 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Appends Sort object to the querystring params
|
|
|
|
export function asSortParams<
|
|
|
|
TParams extends Record<any, string>,
|
2023-01-25 12:32:30 +00:00
|
|
|
TFields extends Record<any, string>,
|
2019-12-17 17:13:56 +00:00
|
|
|
>(
|
|
|
|
params: TParams,
|
|
|
|
fields: TFields,
|
|
|
|
defaultField?: keyof TFields,
|
2022-06-21 09:36:55 +00:00
|
|
|
defaultOrder?: boolean,
|
2019-12-17 17:13:56 +00:00
|
|
|
): TParams & Sort {
|
|
|
|
return {
|
|
|
|
...params,
|
|
|
|
asc: parseBoolean(
|
|
|
|
params.asc,
|
2022-06-21 09:36:55 +00:00
|
|
|
defaultOrder === undefined ? true : defaultOrder,
|
2019-12-17 17:13:56 +00:00
|
|
|
),
|
|
|
|
sort: params.sort
|
|
|
|
? findValueInEnum(params.sort, fields)
|
2022-06-21 09:36:55 +00:00
|
|
|
: defaultField?.toString() || "name",
|
2019-12-17 17:13:56 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
interface SortingInput<T extends string> {
|
|
|
|
direction: OrderDirection;
|
2020-01-17 15:16:05 +00:00
|
|
|
field: T;
|
2019-12-17 17:13:56 +00:00
|
|
|
}
|
|
|
|
type GetSortQueryField<TUrlField extends string, TSortField extends string> = (
|
2022-06-21 09:36:55 +00:00
|
|
|
sort: TUrlField,
|
2023-08-03 07:52:39 +00:00
|
|
|
) => TSortField | undefined;
|
2019-12-17 17:13:56 +00:00
|
|
|
type GetSortQueryVariables<
|
|
|
|
TSortField extends string,
|
2023-01-25 12:32:30 +00:00
|
|
|
TParams extends Record<any, any>,
|
2023-01-23 08:30:04 +00:00
|
|
|
> = (params: TParams) => SortingInput<TSortField> | undefined;
|
2019-12-17 17:13:56 +00:00
|
|
|
export function createGetSortQueryVariables<
|
|
|
|
TUrlField extends string,
|
|
|
|
TSortField extends string,
|
2023-01-25 12:32:30 +00:00
|
|
|
TParams extends Record<any, any>,
|
2019-12-17 17:13:56 +00:00
|
|
|
>(
|
2022-06-21 09:36:55 +00:00
|
|
|
getSortQueryField: GetSortQueryField<TUrlField, TSortField>,
|
2019-12-17 17:13:56 +00:00
|
|
|
): GetSortQueryVariables<TSortField, TParams> {
|
2021-06-28 13:51:19 +00:00
|
|
|
return (params: TParams) => {
|
2020-01-10 16:18:59 +00:00
|
|
|
const field = getSortQueryField(params.sort);
|
|
|
|
|
|
|
|
if (!!field) {
|
|
|
|
return {
|
|
|
|
direction: getOrderDirection(params.asc),
|
2022-06-21 09:36:55 +00:00
|
|
|
field,
|
2020-01-10 16:18:59 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
return undefined;
|
|
|
|
};
|
2019-12-17 17:13:56 +00:00
|
|
|
}
|