@inkline/inkline
Version:
Inkline is the Vue.js UI/UX Library built for creating your next design system
42 lines (34 loc) • 1.28 kB
text/typescript
import { createServer, Model } from 'miragejs';
import data from './data.json';
import { Server } from 'miragejs/server';
export const usePagination = (schema: any, req: any, model: any) => {
const { models: items } = schema[model].all();
const page = req.queryParams.page ? parseInt(req.queryParams.page, 10) : 1;
const rowsPerPage = req.queryParams.rowsPerPage ? parseInt(req.queryParams.rowsPerPage, 10) : 25;
const query = req.queryParams.query;
const filteredItems = query
? items.filter((item: any) => `${item.firstName} ${item.lastName}`.toLowerCase().includes(query.toLowerCase()))
: items;
return {
items: filteredItems.slice((page - 1) * rowsPerPage, page * rowsPerPage),
total: filteredItems.length
};
};
let server: Server;
export const useServer = () => {
if (!server) {
server = createServer({
models: {
user: Model
},
seeds (server) {
data.forEach((row) => (server.schema as any).users.create(row));
},
routes () {
this.namespace = 'api';
this.get('/users', (schema, req) => usePagination(schema, req, 'users'));
}
});
}
return server;
};