helper.js 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import color from 'color'
  2. export const libHandleFetchResult = async fetchResult => {
  3. switch (fetchResult.status) {
  4. case 200:
  5. case 304:
  6. const resultJson = await fetchResult.clone().json()
  7. return new Promise((resolve, reject) => resolve({
  8. apiResponse: fetchResult,
  9. body: resultJson
  10. }))
  11. case 204:
  12. return fetchResult
  13. case 400:
  14. case 404:
  15. case 409:
  16. case 500:
  17. case 501:
  18. case 502:
  19. case 503:
  20. case 504:
  21. return new Promise((resolve, reject) => reject(fetchResult)) // @TODO : handle errors from api result
  22. }
  23. }
  24. export const libAddAllResourceI18n = (i18n, translation) => {
  25. Object.keys(translation).forEach(lang =>
  26. Object.keys(translation[lang]).forEach(namespace =>
  27. i18n.addResources(lang, namespace, translation[lang][namespace])
  28. )
  29. )
  30. }
  31. export const libGenerateAvatarFromPublicName = publicName => {
  32. // code from https://stackoverflow.com/questions/3426404/create-a-hexadecimal-colour-based-on-a-string-with-javascript
  33. const stringToHashCode = str => str.split('').reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0)
  34. const intToRGB = i => {
  35. const c = (i & 0x00FFFFFF).toString(16).toUpperCase()
  36. return '00000'.substring(0, 6 - c.length) + c
  37. }
  38. const hexcolor = '#' + intToRGB(stringToHashCode(publicName))
  39. let canvas = document.createElement('canvas')
  40. // http://code.google.com/p/explorercanvas/wiki/Instructions#Dynamically_created_elements
  41. if (!canvas.getContext) G_vmlCanvasManager.initElement(canvas)
  42. let ctx = canvas.getContext('2d')
  43. canvas.width = 44
  44. canvas.height = 44
  45. const { r, g, b } = color(hexcolor).desaturate(0.75).rgb()
  46. ctx.beginPath()
  47. ctx.arc(22, 22, 20, 0, 2 * Math.PI, false)
  48. ctx.fillStyle = 'rgba(' + [r, g, b, 1].join() + ')'
  49. ctx.fill()
  50. ctx.stroke()
  51. return canvas.toDataURL('image/png', '')
  52. }