X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/10ce16c28de952f6533ca3cc9df909269e3d2a53..964b7f2cea81f087bbaddc94c9eeb08bab945742:/src/common/api/order-builder.ts diff --git a/src/common/api/order-builder.ts b/src/common/api/order-builder.ts index ed990541c6..196b06952e 100644 --- a/src/common/api/order-builder.ts +++ b/src/common/api/order-builder.ts @@ -3,40 +3,28 @@ // SPDX-License-Identifier: AGPL-3.0 import * as _ from "lodash"; -import { Resource } from "../../models/resource"; +import { Resource } from "~/models/resource"; -export class OrderBuilder { - - static create(prefix?: string){ - return new OrderBuilder([], prefix); - } +export enum OrderDirection { ASC, DESC } - private constructor( - private order: string[] = [], - private prefix = ""){} +export class OrderBuilder { - private addRule (direction: string, attribute: keyof T) { - const prefix = this.prefix ? this.prefix + "." : ""; - const order = [...this.order, `${prefix}${_.snakeCase(attribute.toString())} ${direction}`]; - return new OrderBuilder(order, prefix); - } + constructor(private order: string[] = []) {} - addAsc(attribute: keyof T) { - return this.addRule("asc", attribute); + addOrder(direction: OrderDirection, attribute: keyof T, prefix?: string) { + this.order.push(`${prefix ? prefix + "." : ""}${_.snakeCase(attribute.toString())} ${direction === OrderDirection.ASC ? "asc" : "desc"}`); + return this; } - addDesc(attribute: keyof T) { - return this.addRule("desc", attribute); + addAsc(attribute: keyof T, prefix?: string) { + return this.addOrder(OrderDirection.ASC, attribute, prefix); } - concat(orderBuilder: OrderBuilder){ - return new OrderBuilder( - this.order.concat(orderBuilder.getOrder()), - this.prefix - ); + addDesc(attribute: keyof T, prefix?: string) { + return this.addOrder(OrderDirection.DESC, attribute, prefix); } getOrder() { - return this.order.slice(); + return this.order.join(","); } }