feat(employee-list): Added possibility to sort and paginate inside the list of employees (TV-217) (TV-222)
Squashed commit of the following: commit f13b52a134693bb6237b2df6408020504c3fbe1c Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Jun 9 07:47:56 2021 +0200 Updated after PR commit 4055d3a14eda9737ef76ed5e85ea35480e19e71c Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Jun 7 15:20:26 2021 +0200 updates after PR comments commit f515ed6d06087f62de7522745691429d7ca91153 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Jun 7 12:07:50 2021 +0200 Now using Sort interface again commit 5c793a5a7579a520c3792bb3d13c00bb68dbfcd4 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Jun 7 11:54:27 2021 +0200 Fixed bug showing wrong amount in pagination component commit 7c55751147e05c1279b75356dc143b069e63e6b2 Merge: 11eab63a701888Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Jun 7 11:42:59 2021 +0200 Updated after merge with develop commit 11eab6330191a140c2cfd7094838495793e02719 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Jun 7 11:23:52 2021 +0200 Added functionality to sort on different columns commit f13422a2aa53a69a243f32f9cd0b7ed6bd3441fc Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Fri Jun 4 11:40:22 2021 +0200 Fixed other mappings after changes in the mock-api commit ba2d3200167281422354f5e3cfdf7720444a9c4c Merge: 6232b32d91b3e6Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Fri Jun 4 10:00:00 2021 +0200 Added paging functionality commit 6232b3274ff73f2da929342a244fbc87430b796f Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Fri Jun 4 09:25:01 2021 +0200 Added meta model and changed services to adapt new API data structure commit 3ea0046bb713a6ee13d2a2cb2983e92d10559aa3 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Thu Jun 3 13:02:44 2021 +0200 Adjusted mock-api functionality
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
"description": "A mock api implementing all needed endpoints for dafa-web",
|
||||
"scripts": {
|
||||
"generate-api": "node ./scripts/generate-api.js",
|
||||
"start": "npm run generate-api && json-server --watch api.json --port 8000 --routes routes.json",
|
||||
"start": "npm run generate-api && node server.js",
|
||||
"start:delay": "npm start -- --delay 500"
|
||||
},
|
||||
"author": "Erik Tiekstra (erik.tiekstra@arbetsformedlingen.se)",
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"/api/*": "/$1",
|
||||
"/participants": "/participants?_embed=employees",
|
||||
"/participant/:id": "/participants/:id?_embed=employees",
|
||||
"/employee": "/employees",
|
||||
"/employee/:id": "/employees/:id"
|
||||
}
|
||||
@@ -25,6 +25,7 @@ function generateEmployees(amount = 10) {
|
||||
organizations: [ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)]],
|
||||
services: [SERVICES[Math.floor(Math.random() * SERVICES.length)]],
|
||||
authorizations: authorizations.generate(),
|
||||
createdAt: Date.now(),
|
||||
};
|
||||
|
||||
employees.push(person);
|
||||
|
||||
@@ -8,7 +8,7 @@ import organizations from './organizations.js';
|
||||
import participants from './participants.js';
|
||||
import services from './services.js';
|
||||
|
||||
const generatedEmployees = employees.generate(10);
|
||||
const generatedEmployees = employees.generate(50);
|
||||
|
||||
const apiData = {
|
||||
services: services.generate(),
|
||||
|
||||
61
mock-api/dafa-web/server.js
Normal file
61
mock-api/dafa-web/server.js
Normal file
@@ -0,0 +1,61 @@
|
||||
import jsonServer from 'json-server';
|
||||
|
||||
const server = jsonServer.create();
|
||||
const router = jsonServer.router('api.json');
|
||||
const middlewares = jsonServer.defaults();
|
||||
|
||||
server.use(middlewares);
|
||||
|
||||
server.use(
|
||||
jsonServer.rewriter({
|
||||
'/api/*': '/$1',
|
||||
'*sort=services*': '$1sort=services[0].name$2',
|
||||
'*sort=organizations*': '$1sort=organizations[0].address.city$2',
|
||||
'*sort=fullName*': '$1sort=firstName,lastName$2',
|
||||
'/employee*': '/employees$1',
|
||||
'/participants': '/participants?_embed=employees',
|
||||
'/participant/:id': '/participants/:id?_embed=employees',
|
||||
'*page=*': '$1_page=$2',
|
||||
'*limit=*': '$1_limit=$2',
|
||||
'*sort=*': '$1_sort=$2',
|
||||
'*order=*': '$1_order=$2',
|
||||
})
|
||||
);
|
||||
|
||||
router.render = (req, res) => {
|
||||
const params = new URLSearchParams(req._parsedUrl.query);
|
||||
|
||||
// Add createdAt to the body
|
||||
if (req.originalMethod === 'POST') {
|
||||
req.body.createdAt = Date.now();
|
||||
}
|
||||
|
||||
res.jsonp({
|
||||
data: res.locals.data,
|
||||
...appendMetaData(params, res),
|
||||
});
|
||||
};
|
||||
|
||||
server.use(router);
|
||||
server.listen(8000, () => {
|
||||
console.info('JSON Server is running');
|
||||
});
|
||||
|
||||
function appendMetaData(params, res) {
|
||||
if (params.has('_page')) {
|
||||
const limit = +params.get('_limit');
|
||||
const page = +params.get('_page');
|
||||
const count = res.get('X-Total-Count');
|
||||
const totalPages = Math.ceil(count / limit);
|
||||
return {
|
||||
meta: {
|
||||
count,
|
||||
limit,
|
||||
page,
|
||||
totalPages,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user