The frontend/UI server, written in JS using the MarkoJS library
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

84 lines
2.3 KiB

const {query} = require("../client")
class LogHeader {
/**
* Construct a log header. You should probably use the logHeaderApi instead of doing
* this manually, even for mutations.
*
* @param {string} id
* @param {Date|string} date
* @param {string} channelName
* @param {string} title
* @param {string} description
* @param {string} event
* @param {boolean} open
* @param {{id:string,name:string,shortName:string,author:string}[]} characters
*/
constructor(id, shortId, date, channelName, title, description, event, open, characters) {
this.id = id
this.shortId = shortId
this.date = new Date(date)
this.channelName = channelName
this.title = title || null
this.description = description || null
this.event = event || null
this.open = open
this.characters = characters.map(ch => new LogHeaderCharacter(ch.id, ch.name, ch.shortName, ch.author))
}
}
class LogHeaderCharacter {
/**
* Construct a log header character list entry.
*
* @param {string} id
* @param {string} name
* @param {string} shortName
* @param {string} author
*/
constructor(id, name, shortName, author) {
this.id = id
this.name = name
this.shortName = shortName
this.author = author
}
}
/**
* logHeaderApi contains the API queries for the LogHeader frontend model, which is a subset of the
* logs model.
*/
const logHeaderApi = {
/**
* Call `stories(filter)` query
*
* @param {{search:string, channels:string|string[], events:string|string[], open:boolean, characters:string|string[], limit:number}} filter
* @returns {Promise<LogHeader[]>}
*/
list(filter = {}) {
return query(`
query LogHeaders($filter: LogsFilter) {
headers: logs(filter:$filter) {
id
shortId
date
channelName
title
description
event
open
characters {
id
name
shortName
author
}
}
}
`, {filter}).then(({headers}) => {
return headers.map(h => new LogHeader(h.id, h.shortId, h.date, h.channelName, h.title, h.description, h.event, h.open, h.characters))
})
},
}
module.exports = {LogHeader, LogHeaderCharacter, logHeaderApi}