Skip to content

Commit

Permalink
adds a reverse pagination mode
Browse files Browse the repository at this point in the history
  • Loading branch information
billdami committed Aug 13, 2020
1 parent 60c61f4 commit aa746ed
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 7 deletions.
6 changes: 5 additions & 1 deletion addon/mixins/controller-pagination.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export interface PaginationController extends Controller {
filterRootKey: string | null;
hasMore: boolean;
includeKey: string;
isPaginationReversed: boolean;
isLoadingPage: boolean;
isLoadingModels: boolean;
isLoadingRoute: RegExpMatchArray | null;
Expand Down Expand Up @@ -69,6 +70,7 @@ export function ControllerPagination<U extends GenericConstructor<Controller>>(
sort: NativeArray<any> = A();
hasMore: boolean = true;
limit: number = 10;
isPaginationReversed: boolean = false;
isLoadingPage: boolean = false;
pagingRootKey: string | null = 'page';
filterRootKey: string | null = 'filter';
Expand Down Expand Up @@ -112,7 +114,9 @@ export function ControllerPagination<U extends GenericConstructor<Controller>>(
hasMore: models.length >= limit
});

tryInvoke(this.model, 'pushObjects', [models]);
tryInvoke(this.model, this.isPaginationReversed ? 'unshiftObjects' : 'pushObjects', [
this.isPaginationReversed ? models.reverse() : models
]);
} catch (errors) {
reject(errors);
}
Expand Down
5 changes: 4 additions & 1 deletion addon/mixins/route-pagination.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,10 @@ export function RoutePagination<T extends PaginationRouteClass>(
});

const modelForController = model.toArray();
super.setupController(controller, modelForController);
super.setupController(
controller,
controller.isPaginationReversed ? modelForController.reverse() : modelForController
);
}

/**
Expand Down
11 changes: 7 additions & 4 deletions tests/dummy/app/controllers/application.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
import Controller from '@ember/controller';
import {ControllerPagination} from '@gavant/ember-pagination/mixins/controller-pagination';
import { ControllerPagination } from '@gavant/ember-pagination/mixins/controller-pagination';

export default class Application extends ControllerPagination(Controller) {
serverQueryParams = ['foo', 'bar', 'baz'];
include = ['some-rel', 'another-rel.foo'];
//enables reversed pagination
isPaginationReversed = true;

foo = 123;
bar = true;
baz = null;
}

// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.
declare module '@ember/controller' {
interface Registry {
'application': Application;
}
interface Registry {
application: Application;
}
}
2 changes: 1 addition & 1 deletion tests/dummy/app/routes/application.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Route from '@ember/routing/route';
import {RoutePagination} from '@gavant/ember-pagination/mixins/route-pagination';
import { RoutePagination } from '@gavant/ember-pagination/mixins/route-pagination';

export default class Application extends RoutePagination(Route) {
model(this: any) {
Expand Down

0 comments on commit aa746ed

Please sign in to comment.