Obtain configuration from discovery endpoint
[arvados.git] / src / common / api / order-builder.ts
index ed990541c61bb960e4b1a5074a4530570d1617eb..196b06952e55c911d9cd0bac6ed881151918bf98 100644 (file)
@@ -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<T extends Resource = Resource> {
-
-    static create<T extends Resource = Resource>(prefix?: string){
-        return new OrderBuilder<T>([], prefix);
-    }
+export enum OrderDirection { ASC, DESC }
 
-    private constructor(
-        private order: string[] = [],
-        private prefix = ""){}
+export class OrderBuilder<T extends Resource = Resource> {
 
-    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<T>(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<T>(
-            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(",");
     }
 }