Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { ResourcefulApi } from '../api/ResourcefulApi' import { Router } from './Router' import { JsonApiRoute } from './JsonApiRoute' /** * A simple router implementation querying a json:api endpoint which delivers all * necessary route information * * The endpoint must return a list of Route objects: * * ```json * { * "data": [ * { * "type": "VuexJsonApiRoute", * "id": 1, * "attributes": { * "parameters": [], * "url": "api/route", * "method": "list", * "module": "route" * } * }, * { * "type": "VuexJsonApiRoute", * "id": 2, * "attributes": { * "parameters": [ * "id" * ], * "url": "api/route/{id}", * "method": "get", * "module": "route" * } * } * ] * } * ``` * * To initialize this router, simply `new` it with the desired fetch path, * e.g. `new JsonApiRouter('/api/route')`. * * @class JsonApiRouter */ export class JsonApiRouter extends Router { /** * * @param {String} baseUrl * @param {String} fetchPath */ constructor (baseUrl, fetchPath) { super() this.baseUrl = baseUrl this.fetchPath = fetchPath } /** * Update routes * * @returns {*} */ async updateRoutes () { const api = new ResourcefulApi() api.setBaseUrl(this.baseUrl) return api.get(this.fetchPath) .then(({ data }) => { this.parseApiResult(data) // returning self to make working with this in chained promises easier return this }) } parseApiResult (data) { for (const routeResource of Object.values(data.vuexJsonApiRoute)) { this.addRoute(new JsonApiRoute(routeResource)) } } } |