Skip to content
Snippets Groups Projects
studydocList.js 4.11 KiB
Newer Older
Cliff Li's avatar
Cliff Li committed
import m from 'mithril';
import * as studydocs from '../../models/studydocs';
import { apiUrl } from '../../models/config';
import { isLoggedIn } from '../../models/auth';
import { Error401 } from '../errors';
import { Button, Checkbox, RadioGroup } from '../../components';
scmoritz's avatar
scmoritz committed

const tableHeadings = ['title', 'type'];
scmoritz's avatar
scmoritz committed

export default class studydocList {
  constructor(vnode) {
    this.vnode = vnode;
  }

  static oninit() {
    studydocs.load();
scmoritz's avatar
scmoritz committed
    this.search = '';
trfloria's avatar
trfloria committed
    this.doc = {};
    this.filter = {
      department: {"itet": 0, "mavt": 0},
      // type: {"cheat sheets": 0, "exams": 0},
      // semester: {"first":0},
    };
scmoritz's avatar
scmoritz committed
  }

  static selectDocument(doc) {
    this.doc = doc;
Elias Asikainen's avatar
Elias Asikainen committed
  }

trfloria's avatar
trfloria committed
  static changeFilter(filterKey, filterValue, checked) {
    this.filter[filterKey][filterValue] = checked;
    console.log(this.filter);
    let query = {};
    for(var key in this.filter)
    {
      let queryValue = "";
      for(var subKey in this.filter[filterKey])
        if(this.filter[key][subKey])
          queryValue += subKey + "|";
      if(queryValue.length > 0) queryValue = queryValue.substring(0,queryValue.length-1);
      console.log("filterKey: "+filterKey);
      console.log("queryValue: "+queryValue);
      if(queryValue.length > 0)
      query[filterKey] = {$regex: `^(?i).*${queryValue}.*` };
trfloria's avatar
trfloria committed
    studydocs.load(query);
  }

scmoritz's avatar
scmoritz committed
  static view() {
    if (!isLoggedIn()) return m(Error401);

Cliff Li's avatar
Cliff Li committed
    return m('div#studydoc-list', [
Elias Asikainen's avatar
Elias Asikainen committed
      m('div.filter', [
        m(
          'form',
          {
            onsubmit: e => {
              e.preventDefault();
              const query = {
                $or: [
                  { title: { $regex: `^(?i).*${this.search}.*` } },
                  { lecture: { $regex: `^(?i).*${this.search}.*` } },
                  { professor: { $regex: `^(?i).*${this.search}.*` } },
                  { author: { $regex: `^(?i).*${this.search}.*` } },
                ],
              };
              studydocs.load(query);
Cliff Li's avatar
Cliff Li committed
            },
Elias Asikainen's avatar
Elias Asikainen committed
          },
          [
            m(
              'input',
              {
                type: 'text',
                oninput: m.withAttr('value', value => {
                  this.search = value;
                }),
              },
              ''
Elias Asikainen's avatar
Elias Asikainen committed
            m(Button, { label: 'Search' }),
          ]
        ),
Elias Asikainen's avatar
Elias Asikainen committed
        m(RadioGroup, {
          name: 'Departement',
          buttons: [
            {
              value: '1',
              label: 'D-MAVT',
            },
            {
              value: '2',
              label: 'D-ITET',
            },
          ],
        }),
Elias Asikainen's avatar
Elias Asikainen committed
        m(Checkbox, {
trfloria's avatar
trfloria committed
          label: 'D-ITET',
trfloria's avatar
trfloria committed
          onChange: state => this.changeFilter('department', 'itet', state.checked),
trfloria's avatar
trfloria committed
        }),
        m(Checkbox, {
          label: 'D-MAVT',
trfloria's avatar
trfloria committed
          onChange: state => this.changeFilter('department', 'mavt', state.checked),
trfloria's avatar
trfloria committed
        }),
        m(Checkbox, {
          label: 'Zusammenfassung',
        }),
        m(Checkbox, {
          label: 'Alte Prüfungen',
Elias Asikainen's avatar
Elias Asikainen committed
        }),
        m(Button, {
          label: 'Add new',
          events: { onclick: () => m.route.set('/studydocuments/new') },
        }),
Elias Asikainen's avatar
Elias Asikainen committed
      ]),
      m('div.content', [
        m('table', [
          m('thead', m('tr', tableHeadings.map(header => m('th', header)))),
          m(
            'tbody',
Elias Asikainen's avatar
Elias Asikainen committed
            studydocs
              .getList()
              .map(doc =>
Elias Asikainen's avatar
Elias Asikainen committed
                m('tr', { class: 'list-items', onclick: () => this.selectDocument(doc) }, [
Elias Asikainen's avatar
Elias Asikainen committed
                  m('td', doc.title),
                  m('td', doc.type),
Elias Asikainen's avatar
Elias Asikainen committed
                ])
Elias Asikainen's avatar
Elias Asikainen committed
              )
          ),
scmoritz's avatar
scmoritz committed
      ]),
      this.doc
        ? m('div.details', [
            m('table', [
              m('tr', this.doc.title),
              m('tr', this.doc.lecture),
              m('tr', this.doc.professor),
              m('tr', this.doc.semester),
              m('tr', this.doc.author),
Elias Asikainen's avatar
Elias Asikainen committed
              m(Button, {
                label: 'Download',
                events: {
                  onclick: () => window.open(`${apiUrl}${this.doc.files[0].file}`, '_blank'),
                },
              }),
scmoritz's avatar
scmoritz committed
    ]);
  }
}