feat: non paged list (#204)
This commit is contained in:
parent
a7c4abb485
commit
d486768eda
@ -99,6 +99,14 @@ describe('list action', () => {
|
|||||||
expect(body.totalPage).toEqual(3);
|
expect(body.totalPage).toEqual(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('list with non-paged', async () => {
|
||||||
|
const response = await app.agent().resource('posts').list({
|
||||||
|
paginate: false,
|
||||||
|
});
|
||||||
|
const body = response.body;
|
||||||
|
expect(body.length).toEqual(3);
|
||||||
|
});
|
||||||
|
|
||||||
test('list by association', async () => {
|
test('list by association', async () => {
|
||||||
// tags with posts id eq 1
|
// tags with posts id eq 1
|
||||||
const response = await app
|
const response = await app
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import { Context } from '..';
|
import { Context } from '..';
|
||||||
import { getRepositoryFromParams } from './utils';
|
import { getRepositoryFromParams } from './utils';
|
||||||
|
import { Repository } from '@nocobase/database';
|
||||||
|
import { ActionParams } from '@nocobase/resourcer';
|
||||||
|
|
||||||
export const DEFAULT_PAGE = 1;
|
export const DEFAULT_PAGE = 1;
|
||||||
export const DEFAULT_PER_PAGE = 20;
|
export const DEFAULT_PER_PAGE = 20;
|
||||||
@ -21,17 +23,18 @@ function totalPage(total, pageSize): number {
|
|||||||
return Math.ceil(total / pageSize);
|
return Math.ceil(total / pageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function list(ctx: Context, next) {
|
function findArgs(params: ActionParams) {
|
||||||
const { page = DEFAULT_PAGE, pageSize = DEFAULT_PER_PAGE, fields, filter, appends, except, sort } = ctx.action.params;
|
const { fields, filter, appends, except, sort } = params;
|
||||||
|
return { filter, fields, appends, except, sort };
|
||||||
|
}
|
||||||
|
|
||||||
|
async function listWithPagination(ctx: Context) {
|
||||||
|
const { page = DEFAULT_PAGE, pageSize = DEFAULT_PER_PAGE } = ctx.action.params;
|
||||||
|
|
||||||
const repository = getRepositoryFromParams(ctx);
|
const repository = getRepositoryFromParams(ctx);
|
||||||
|
|
||||||
const [rows, count] = await repository.findAndCount({
|
const [rows, count] = await repository.findAndCount({
|
||||||
filter,
|
...findArgs(ctx.action.params),
|
||||||
fields,
|
|
||||||
appends,
|
|
||||||
except,
|
|
||||||
sort,
|
|
||||||
...pageArgsToLimitArgs(parseInt(String(page)), parseInt(String(pageSize))),
|
...pageArgsToLimitArgs(parseInt(String(page)), parseInt(String(pageSize))),
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -42,6 +45,24 @@ export async function list(ctx: Context, next) {
|
|||||||
pageSize,
|
pageSize,
|
||||||
totalPage: totalPage(count, pageSize),
|
totalPage: totalPage(count, pageSize),
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function listWithNonPaged(ctx: Context) {
|
||||||
|
const repository = getRepositoryFromParams(ctx);
|
||||||
|
|
||||||
|
const rows = await repository.find(findArgs(ctx.action.params));
|
||||||
|
|
||||||
|
ctx.body = rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function list(ctx: Context, next) {
|
||||||
|
const { paginate } = ctx.action.params;
|
||||||
|
|
||||||
|
if (paginate === false || paginate === 'false') {
|
||||||
|
await listWithNonPaged(ctx);
|
||||||
|
} else {
|
||||||
|
await listWithPagination(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
await next();
|
await next();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user