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.

109 lines
2.2 KiB

  1. const {query, queryForm} = require("../client")
  2. class File {
  3. /**
  4. * @param {{id:string,kind:string,time:Date|string|number,public:boolean,name:string,mimeType:string,size:number,author:string,url:string}} data
  5. */
  6. constructor(data) {
  7. this.id = data.id
  8. this.kind = data.kind
  9. this.time = new Date(data.time)
  10. this.public = data.public
  11. this.name = data.name
  12. this.mimeType = data.mimeType
  13. this.size = data.size
  14. this.author = data.author
  15. this.url = data.url
  16. }
  17. }
  18. class FileAPI {
  19. /**
  20. * Call `characters(filter)` query
  21. *
  22. * @param {{public:boolean,mimeTypes:string[]}} filter
  23. * @returns {Promise<File[]>}
  24. */
  25. list(filter = {public: true}, opts = {}) {
  26. return query(`
  27. query ListFiles($filter: FilesFilter!) {
  28. files(filter:$filter) {
  29. id
  30. kind
  31. time
  32. public
  33. name
  34. mimeType
  35. size
  36. author
  37. url
  38. }
  39. }
  40. `, {filter}, opts).then(({files}) => {
  41. return files.map(d => new File(d))
  42. })
  43. }
  44. /**
  45. * Upload a file
  46. *
  47. * @param {{public:boolean, file:File, name:string}} input
  48. */
  49. uploadFile(input) {
  50. return queryForm(`
  51. mutation UploadFile($input: FileUploadInput!) {
  52. uploadFile(input:$input) {
  53. id
  54. kind
  55. time
  56. public
  57. name
  58. mimeType
  59. size
  60. author
  61. url
  62. }
  63. }
  64. `, {input}).then(({uploadFile}) => {
  65. return new File(uploadFile)
  66. })
  67. }
  68. /**
  69. * Edit a file
  70. *
  71. * @param {{id: string, public:boolean, name:string}} input
  72. */
  73. editFile(input) {
  74. return queryForm(`
  75. mutation EditFile($input: FileEditInput!) {
  76. editFile(input:$input) {
  77. id
  78. public
  79. name
  80. }
  81. }
  82. `, {input}).then(({editFile}) => {
  83. return editFile
  84. })
  85. }
  86. /**
  87. * Edit a file
  88. *
  89. * @param {{id: string, public:boolean, name:string}} input
  90. */
  91. removeFile(input) {
  92. return queryForm(`
  93. mutation RemoveFIle($input: FileRemoveInput!) {
  94. removeFile(input:$input) {
  95. id
  96. }
  97. }
  98. `, {input}).then(({removeFile}) => {
  99. return removeFile
  100. })
  101. }
  102. }
  103. module.exports = { File, fileApi: new FileAPI() }