Files
mina-sidor-fa-web/mock-api/mina-sidor-fa/server.js
Daniel Appelgren 68c5c8d4a8 feat(Deltagarlista): Lade till startdatum, slutdatum, avbrott samt Visa händelser, som öppnar en modal med en deltagares händelser (TV-606)
Squashed commit of the following:

commit 932d0ce27b416652e241803e04dd9e98c6ca5757
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Wed Sep 22 08:17:56 2021 +0200

    fix lint and fails

commit b988fb7dc443d336e1e572d1a1f2993f7ed8f43b
Merge: 7eb75ec 5846c2c
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Wed Sep 22 07:54:00 2021 +0200

    Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns

commit 7eb75ec659a3a25386f76dd9aed1806fd603c35b
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Wed Sep 22 07:53:54 2021 +0200

    refactor

commit 3bfe1fe1d7d17f8ba3dcdc6d587d957ff584ef6c
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 11:53:20 2021 +0200

    Update deltagare-list-handelser-dialog.component.scss

commit 4c7275e24ca9fdf70fb26db8e67a747c2a26b825
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 11:51:08 2021 +0200

    set dialog width to auto

commit 1feb3b6f5779a810881a7592325dd9f1bf33d490
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 11:43:51 2021 +0200

    added captions to tables

commit 4b4137cd9ae8e4084ea6172119449d247c591c40
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 11:06:16 2021 +0200

    Update server.js

commit 203609c380f2d47ce248b94ed06e0dfde293ef24
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 11:05:05 2021 +0200

    full name in dialog heading

commit 265c38aefe8d1380c7cc0ae1b87a12d276671ced
Merge: e734ab5 2dd9d3d
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 10:58:29 2021 +0200

    Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns

commit e734ab5c6fe00923642da70dfe92cdbafc0f0c79
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 10:58:26 2021 +0200

    formatting

commit 1a13a9fc6d9329e6b5d6fce7c77352ac75123a5a
Merge: aa1552d 91eeb1d
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 10:49:07 2021 +0200

    Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns

commit aa1552d0ad85b3213a0e062ee3f786849013566a
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Tue Sep 21 09:33:10 2021 +0200

    add colums to handelser

commit 584ecd2cb2b5265cc885dcab713582083dbe19bb
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Mon Sep 20 15:46:38 2021 +0200

    fix test and lint

commit 890e741c69a6408a72ca7899cc5cd76eccbdb498
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Mon Sep 20 15:39:18 2021 +0200

    add dialog and fix mock apis

commit fc8ee963619a8cd24e482c56180536219c83ec28
Merge: 422563b 8da6899
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Mon Sep 20 14:14:49 2021 +0200

    Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns

commit 422563b5ecc8cc923b2e6791b5c533913ae6e4bd
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Mon Sep 20 13:01:45 2021 +0200

    wip

commit 2d83fa6e8a4d7459e8661bf7036388021bec460e
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Mon Sep 20 11:26:38 2021 +0200

    added columns to deltagare list

commit a9df57d4492ec3f08de8f20a3032c8a1a84fd8a4
Author: Daniel Appelgren <daniel.appelgren@arbetsformedlingen.se>
Date:   Mon Sep 20 10:21:27 2021 +0200

    wip
2021-09-22 08:19:25 +02:00

198 lines
5.7 KiB
JavaScript

import commandLineArgs from 'command-line-args';
import pause from 'connect-pause';
import jsonServer from 'json-server';
const optionDefinitions = [
{
name: 'delay',
description: 'Add a delay in ms to the server. Defaults to 200.',
alias: 'd',
type: Number,
defaultValue: 200,
},
];
const options = commandLineArgs(optionDefinitions);
const server = jsonServer.create();
const router = jsonServer.router('api.json');
const middlewares = jsonServer.defaults();
server.use(pause(options.delay));
server.use(middlewares);
server.use(
jsonServer.rewriter({
'/api/*': '/$1',
'*sort=utforandeVerksamhet*': '$1sort=utforandeVerksamhet[0]$2',
'*sort=tjanst*': '$1sort=tjanst[0]$2',
'/users/invite*': '/invites$1',
'/employees*search=*': '/employees$1fullName_like=$2',
'/employees*onlyEmployeesWithoutAuthorization=*': '/employees$1roles.length_lte=1',
'/employees*': '/employees$1',
'/services*': '/tjanster$1',
'/participants': '/participants?_embed=employees',
'/participant/:id': '/participants/:id?_embed=employees',
'/auth/userinfo': '/userinfo',
'/auth/organizations': '/organizations',
'/users/currentUser': '/currentUser',
'/users*': '/employees$1',
'/avrop/tjanster*': '/avropTjanster$1',
'/avrop/handledare*': '/handledare$1',
'/avrop/utforandeverksamheter*': '/utforandeVerksamheter$1',
'/avrop/kommuner*': '/kommuner$1',
'/avrop*utforandeverksamhetId*': '/avrop$1utforandeVerksamhetId$2',
'/deltagare*onlyMyDeltagare=*': '/minaDeltagare',
'/avrop*tjanstKod*': '/avrop$1tjanstekod$2',
'/deltagare?*': '/avrop?$1',
'/deltagare/:sokandeId/avrop': '/avrop?sokandeId=:sokandeId',
'/deltagare/:sokandeId/*': '/deltagare/:sokandeId',
'*page=*': '$1_page=$2',
'*limit=*': '$1_limit=$2',
'*sort=*': '$1_sort=$2',
'*order=*': '$1_order=$2',
'/auth/token?accessCode=auth_code_from_CIAM_with_all_permissions': '/getTokenFullAccess',
})
);
router.render = (req, res) => {
const method = req.originalMethod;
const parsedUrl = method === 'GET' ? req._parsedOriginalUrl : req._parsedUrl;
const pathname = parsedUrl.pathname;
const params = parsedUrl.query ? new URLSearchParams(parsedUrl.query) : null;
const requestHeaders = req.headers;
// all paths except /auth/token requires Authorization header.
if (!pathname.includes('/auth/token') && !requestHeaders.authorization) {
return res.status(401).jsonp({ error: 'No valid access-token' });
}
if (method === 'PATCH') {
if (pathname === '/handledare/assign') {
// Returning status 204 as this is the same as in the API, BUT we're not actually updating the mock-api
return res.status(204).jsonp();
}
if (pathname === '/invites' && req.body?.emails) {
return res.status(200).jsonp({
data: {
invitedUsers: req.body.emails,
assignedUsers: [],
existingUsersInCurrentOrg: [],
failedInvite: [],
alreadyInvitedUsers: [],
},
});
}
}
// Return custom error when status is 404.
if (res.statusCode === 404) {
return res.status(404).jsonp({ error: `Can't find path: ${pathname}` });
}
// Add createdAt to the body
if (method === 'POST') {
req.body.createdAt = Date.now();
}
let data = res.locals.data;
const deltagareRegex = /(?:\/deltagare\/)(?:\d*\/)(contact|driverlicense|educationlevels\/highest|educations|translator|work\/disabilities|work\/languages|work\/experiences)/g;
const isDeltagarePath = deltagareRegex.exec(pathname);
const avropRegex = /(?:\/avrop\/(?:tjanster|utforandeverksamheter|kommuner|\d))|(?:\/deltagare\/\d\/(avrop))/g;
const isAvropPath = avropRegex.exec(pathname);
if (isDeltagarePath) {
const deltagareSubPath = getDeltagareSubPath(isDeltagarePath[1]);
data = res.locals.data[deltagareSubPath] || {};
}
if (isAvropPath) {
if (params) {
const newData = [];
params.forEach((value, key) => {
newData.push(
...data.filter(item => {
return item[`related_${key}`].includes(value);
})
);
});
data = newData.filter((value, index, arr) => arr.findIndex(item => item.code === value.code) === index);
} else if (isAvropPath[1]) {
data = data[0];
}
}
if (pathname === '/deltagare') {
// NOTE: this is reading from avrop.js
data = data.map(
({
sokandeId,
fornamn,
efternamn,
tjansteNamn,
utforandeverksamhet,
adress,
startdatumAvrop,
slutdatumAvrop,
hasAvbrott,
genomforandeReferens,
}) => ({
sokandeId: sokandeId.toString(),
fornamn,
efternamn,
tjanst: tjansteNamn,
utforandeVerksamhet: utforandeverksamhet,
utforandeAdress: adress,
startdatumAvrop,
slutdatumAvrop,
hasAvbrott,
genomforandeReferens,
})
);
}
res.jsonp({
data,
...appendMetaData(params, res),
});
};
server.use(router);
server.listen(8000, () => {
console.info('JSON Server is running');
});
function appendMetaData(params, res) {
if (params && params.has('page')) {
const limit = +params.get('limit');
const page = +params.get('page');
const count = res.get('X-Total-Count');
const totalPage = Math.ceil(count / limit);
return {
meta: {
count,
limit,
page,
totalPage,
},
};
}
return null;
}
function getDeltagareSubPath(path) {
switch (path) {
case 'educationlevels/highest':
return 'highestEducation';
case 'work/disabilities':
return 'disabilities';
case 'work/languages':
return 'workLanguages';
case 'work/experiences':
return 'workExperiences';
default:
return path;
}
}