From 5521534f2e9068efe9343b6226cfa9d743c577b9 Mon Sep 17 00:00:00 2001 From: Sandro Lutz <sandro.lutz@temparus.ch> Date: Sat, 17 Feb 2018 21:35:46 +0100 Subject: [PATCH] Add joboffers model --- src/models/joboffers.js | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/models/joboffers.js diff --git a/src/models/joboffers.js b/src/models/joboffers.js new file mode 100644 index 00000000..fe80bdc8 --- /dev/null +++ b/src/models/joboffers.js @@ -0,0 +1,65 @@ +import m from 'mithril'; +import { apiUrl } from './config'; +import { getToken } from './auth'; + +const lang = 'de'; +const date = `${new Date().toISOString().split('.')[0]}Z`; + +let querySaved = {}; + + +export function getList() { + if (typeof this.list === 'undefined') { + return []; + } + return this.list; +} + +export function getSelectedOffer() { + return this.selectedOffer; +} + +export function load(query = {}) { + querySaved = query; + + // Parse query such that the backend understands it + const parsedQuery = {}; + Object.keys(query).forEach((key) => { + parsedQuery[key] = (key === 'sort') ? query[key] : JSON.stringify(query[key]); + }); + const queryString = m.buildQueryString(parsedQuery); + + return m.request({ + method: 'GET', + url: `${apiUrl}/joboffers?${queryString}`, + headers: { + Authorization: `Token ${getToken()}`, + }, + }).then((result) => { + this.list = result._items.map((event) => { + const newOffer = Object.assign({}, event); + newOffer.title = newOffer[`title_${lang}`]; + newOffer.description = newOffer[`description_${lang}`]; + return newOffer; + }); + }); +} + +export function selectOffer(offerId) { + this.selectedOffer = this.getList().find(item => item._id === offerId); + if (typeof this.selectedOffer === 'undefined') { + this.load({ + where: { + time_end: { $gte: date }, + show_website: true, + }, + sort: ['time_end'], + }).then(() => { + this.selectedOffer = this.getList().find(item => item._id === offerId); + }); + } +} + +export function reload() { + return load(querySaved); +} -- GitLab