Home Reference Source Repository

src/utils/helpers.js

/*!
 * Codefolio
 * Copyright(c) 2016 MSMFSD
 * MIT Licensed
 */
/* eslint no-spaced-func: "off" */
import slugger from 'slugger'
import striptags from 'striptags'

/**
 * Helper method to convert custom avatar file stream to base64
 * @param {object} formData
 */
export const convertToBase64Async = (formData) => {
  return new Promise ((resolve, reject) => {
    // encoding needed?
    if(formData.use === 'customAvatar' && (formData.customAvatarFile && formData.customAvatarFile[0])) {
      const reader = new FileReader()
      reader.onload = (e) => resolve(e.target.result)
      reader.onerror = () => reject({ message: 'Error converting jpeg/png file.' })
      reader.readAsDataURL(formData.customAvatarFile[0])
    } else {
      resolve('null')
    }
  })
}

/**
* Helper method to reformat redux form data to profile state
* Why? Redux-form cannot map nested state props to fields
* See: Bindings on /src/components/admin/EditProfileForm/EditProfileForm.js
* @param {object} formData
* @param {string} base64
*/
export const formatProfileData = (formData, base64) => {
  // sanitize
  formData.bio = striptags(formData.bio)
  // layout
  formData.layout = {
    theme: formData.theme,
    displayBgImage: formData.displayBgImage
  }
  // avatar
  let customAvatarFilename
  if(base64 !== 'null') {
    customAvatarFilename = base64
  }
  formData.avatar = {
    use: formData.use,
    gravitarEmail: formData.gravitarEmail,
    customAvatar: customAvatarFilename
  }
  // clean up object
  delete formData.theme
  delete formData.displayBgImage
  delete formData.use
  delete formData.gravitarEmail
  delete formData.customAvatar
  delete formData.customAvatarFile
  delete formData.defaultAvatar
  return formData
}

/**
* Helper method to reformat redux form data to profile state
* Why? Redux-form cannot map nested state props to fields
* See: Bindings on /src/components/admin/NewProjectForm/NewProjectForm.js
* @param {object} formData
*/
export const formatProjectData = (formData) => {
  // sanitize
  formData.description = striptags(formData.description)
  formData.code = striptags(formData.code)
  // slug
  formData.slug = slugger(formData.name)
  formData.active = 1
  // repo
  formData.repo = {
    display: formData.repoDisplay,
    repoUrl: formData.repoUrl,
    repoUser: formData.repoUser,
    repoName: formData.repoName
  }
  // codeSnippet
  formData.codeSnippet = {
    display: formData.codeDisplay,
    code: formData.code
  }
  // clean up object
  delete formData.repoDisplay
  delete formData.repoUrl
  delete formData.repoUser
  delete formData.repoName
  delete formData.codeDisplay
  delete formData.code
  return formData
}