api.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. const axios = require('axios')
  2. var toBlob = require('data-uri-to-blob')
  3. var db = require('./db.js')
  4. var currentPage = null
  5. var configFile = require('./.config.js')
  6. const setCurrentPage = function (value) {
  7. //set current page on the script so that api calls may notify user of errors
  8. //using quasar notification framework
  9. currentPage = value
  10. }
  11. const apiHostname = configFile.apiHostname
  12. // const apiHostname = 'http://66.228.50.176:80/'
  13. const apiPath = apiHostname + 'api/scanapp/'
  14. const login = function (path, data) {
  15. var options = {
  16. url: apiHostname + path,
  17. method: 'POST',
  18. data: data
  19. }
  20. return axios(options)
  21. }
  22. const register = function (data) {
  23. var options = {
  24. url: apiHostname + 'rest-auth/registration/',
  25. method: 'POST',
  26. data: data
  27. }
  28. return axios(options)
  29. }
  30. const prepare = function (url, method, payload, locale, token) {
  31. // All requests pass through here except the login request
  32. var options = {
  33. method: method,
  34. data: payload,
  35. headers: {
  36. 'Authorization': token
  37. }
  38. }
  39. options.url = apiHostname + url.replace('{LANG}', locale)
  40. return new Promise((resolve, reject) => {
  41. axios(options)
  42. .then((data) => resolve(data))
  43. .catch((err => {
  44. if (err.response) {
  45. if (err.response.status === 401) {
  46. currentPage.$q.notify('Authorization error, Redirecting to login page')
  47. currentPage.$router.push('/login')
  48. }
  49. else {
  50. reject(err)
  51. }
  52. }
  53. }))
  54. })
  55. }
  56. const configure = function (endpoint, method, payload) {
  57. // This add saved authentication data and locale to the request
  58. return db.getLang().then(langData => {
  59. return db.getToken().then(tokenData => prepare(endpoint, method, payload, langData.lang, tokenData.token))
  60. })
  61. }
  62. var get = function (url){
  63. return configure(url, 'get', {})
  64. }
  65. var getAndSaveList = function (url) {
  66. // All list request to the server pass through here
  67. return new Promise((resolve, reject) => {
  68. configure(url, 'get', {})
  69. .then((result) => {
  70. db.saveData(url + '.list', result.data)
  71. .then((data) => { resolve(result.data) })
  72. .catch((err) => { })
  73. })
  74. .catch(err => { })
  75. window.setTimeout(() => {
  76. db.getData(url + '.list')
  77. .then((data => { resolve(data) }))
  78. }, 5000)
  79. })
  80. }
  81. var getAndSaveDetail = function (url) {
  82. return new Promise((resolve, reject) => {
  83. configure(url, 'get', {})
  84. .catch(err => { })
  85. .then(result => {
  86. db.saveData(url + '.detail', result.data)
  87. .then(data => { resolve(result.data) })
  88. .catch(err => { reject(err) })
  89. })
  90. window.setTimeout(() => {
  91. db.getData(url + '.detail')
  92. .then((data) => { resolve(data) })
  93. }, 5000)
  94. })
  95. }
  96. var create = function (url, data) {
  97. return configure(url, 'post', data)
  98. }
  99. var uploadImage = function (id, name, image) {
  100. var formData = new FormData()
  101. formData.append('name', name)
  102. formData.append('image', toBlob(image))
  103. formData.append('product', Number(id))
  104. return create('scanapp/{LANG}/product_pictures/', formData)
  105. }
  106. export {
  107. get,
  108. getAndSaveList,
  109. getAndSaveDetail,
  110. apiHostname,
  111. uploadImage,
  112. create,
  113. login,
  114. register,
  115. setCurrentPage
  116. }