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.

83 lines
2.0 KiB

  1. const {query} = require("../client")
  2. class Channel {
  3. constructor(name, logged, hub, eventName, locationName) {
  4. this.name = name
  5. this.logged = logged
  6. this.hub = hub
  7. this.eventName = eventName
  8. this.locationName = locationName
  9. }
  10. static fromData(data) {
  11. return new Channel(data.name, data.logged, data.hub, data.eventName, data.locationName)
  12. }
  13. }
  14. class ChannelAPI {
  15. /**
  16. * Call `channels(filter)` query
  17. *
  18. * @param {{logged:boolean, eventName:string, locationName:string}} filter
  19. * @returns {Promise<Channel[]>}
  20. */
  21. list(filter = {}) {
  22. return query(`
  23. query ListChannel($filter: ChannelsFilter) {
  24. channels(filter: $filter) {
  25. name
  26. logged
  27. hub
  28. eventName
  29. locationName
  30. }
  31. }
  32. `, {filter}).then(({channels}) => {
  33. return channels.map(d => Channel.fromData(d))
  34. })
  35. }
  36. /**
  37. * Call `channels(filter)` query
  38. *
  39. * @param {{name:string, logged:boolean, eventName:string, locationName:string}} filter
  40. * @returns {Promise<Channel>}
  41. */
  42. add(input = {}) {
  43. return query(`
  44. mutation AddChannel($input: ChannelAddInput!) {
  45. addChannel(input: $input) {
  46. name
  47. hub
  48. logged
  49. eventName
  50. locationName
  51. }
  52. }
  53. `, {input}, {permissions: ["channel.add"]}).then(({addChannel}) => {
  54. return Channel.fromData(addChannel)
  55. })
  56. }
  57. /**
  58. * Call `channels(filter)` query
  59. *
  60. * @param {{name:string, logged:boolean, eventName:string, locationName:string}} filter
  61. * @returns {Promise<{name:string, logged:boolean, eventName:string, locationName:string}>}
  62. */
  63. edit(input = {}) {
  64. return query(`
  65. mutation EditChannel($input: ChannelEditInput!) {
  66. editChannel(input: $input) {
  67. name
  68. logged
  69. eventName
  70. locationName
  71. }
  72. }
  73. `, {input}, {permissions: ["channel.edit"]}).then(({editChannel}) => {
  74. return editChannel
  75. })
  76. }
  77. }
  78. module.exports = { Channel, channelApi: new ChannelAPI }