Skip to content
Snippets Groups Projects
Commit a3ae7cd8 authored by scmoritz's avatar scmoritz
Browse files

Added events

parent 31001439
No related branches found
No related tags found
No related merge requests found
// src/index.js
import studydocList from './views/studydocList';
import eventList from './views/eventList';
import eventDetails from './views/eventDetails';
const m = require('mithril');
......@@ -49,4 +51,14 @@ m.route(document.body, '/', {
return m(Layout, m(studydocList));
},
},
'/events': {
render() {
return m(Layout, m(eventList));
},
},
'/events/:eventId': {
render(vnode) {
return m(Layout, m(eventDetails, vnode.attrs));
},
},
});
import { apiUrl } from './config';
import { getToken } from './auth';
const m = require('mithril');
const lang = 'de';
let querySaved = '';
export function getList() {
if (typeof this.list === 'undefined') {
return [];
}
return this.list;
}
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}/events?${queryString}`,
headers: {
Authorization: `Token ${getToken()}`,
},
}).then((result) => {
this.list = result._items.map((event) => {
const newEvent = Object.assign({}, event);
newEvent.title = newEvent[`title_${lang}`];
newEvent.description = newEvent[`description_${lang}`];
return newEvent;
});
});
}
export function reload() {
return load(querySaved);
}
// Generic API resource
import { apiUrl } from './config';
import { getToken, logout } from './auth';
const m = require('mithril');
export default class Resource {
constructor(name, query = {}) {
this.name = name;
this.list = [];
this.query = query;
}
load() {
// Parse query such that the backend understands it
const parsedQuery = {};
Object.keys(this.query).forEach((key) => {
parsedQuery[key] = JSON.stringify(this.query[key]);
});
const queryString = m.buildQueryString(parsedQuery);
return m.request({
method: 'GET',
url: `${apiUrl}/${this.resource}/?${queryString}`,
headers: { Authorization: `Token ${getToken()}` },
}).then((data) => {
this.list = data._items;
return data;
}).catch((err) => {
// If the error is 401, the token is invalid -> auto log out
if (err._error.code === 401) { logout(); }
// Actual error information is in the '_error' field, pass this on
throw err._error;
});
}
}
import * as events from '../models/event';
const m = require('mithril');
const date = `${new Date().toISOString().split('.')[0]}Z`;
export default class EventList {
oninit(vnode) {
this.id = vnode.attrs.eventId;
this.current = {};
this.current = events.getList().find(item => item._id === this.id);
if (typeof current === 'undefined') {
events.load({
where: {
time_advertising_start: { $lte: date },
time_advertising_end: { $gte: date },
show_website: true,
},
sort: ['-priority', 'time_advertising_start'],
}).then(() => {
this.current = events.getList().find(item => item._id === this.id);
if (typeof this.current === 'undefined') {
this.current = {};
}
});
}
}
view() {
if (typeof this.current === 'undefined') {
return m('div');
}
return m('div', [
m('h1', this.current.title_de),
m('span', this.current.time_start),
m('span', this.current.signup_count),
m('span', this.current.spots),
m('p', this.current.description_de),
]);
}
}
import * as events from '../models/event';
const m = require('mithril');
const date = `${new Date().toISOString().split('.')[0]}Z`;
export default class EventList {
static oninit() {
events.load({
where: {
time_advertising_start: { $lte: date },
time_advertising_end: { $gte: date },
show_website: true,
},
sort: ['-priority', 'time_advertising_start'],
});
}
static view() {
return m('table', [
m('thead', [
m('tr', [
m('th', 'Title'),
m('th', 'Starting time'),
m('th', 'Signup count'),
m('th', 'Spots'),
]),
]),
m('tbody', events.getList().map(event =>
m('tr', [
m('td', event.title),
m('td', event.time_start),
m('td', event.signup_count),
m('td', event.spots),
m('td', m('button', 'show details')),
]))),
]);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment