follow = async options => {
  let defaults = {
      user: null,
      username: null,
      firstname: null,
      surname: null,
      update_followers: false,
      update_followings: false,
      dispatch: () => null,
      done: () => null,
    },
    obj = { ...defaults, ...options },
    {
      user,
      username,
      firstname,
      surname,
      dispatch,
      update_followers,
      update_followings,
      done,
    } = obj,
    {
      data: { mssg, success, ff },
    } = await post('/api/follow', { user, username })

  if (success) {
    let fwing = {
      follow_id: ff.follow_id,
      follow_to: user,
      follow_by: Number(uData('session')),
      username,
      firstname,
      surname,
      isFollowing: true,
      follow_time: ff.follow_time,
    }

    update_followers ? dispatch(followA.Follower(ff)) : null

    update_followings ? dispatch(followA.Following(fwing)) : null

    insta_notify({
      to: user,
      type: 'follow',
    })

    done()
  }

  Notify({ value: mssg })
}
Follow user

user, username & done properties must be provided.

Provide update_followers when user's followers data need to be updated.
Eg. On Banner Comp.

Provide update_followings when user's followings data need to be updated.
Eg. On Followers Comp.

Provide dispatch when either update_followers OR update_followings needs to be updated

Provide Firstname & Surname when update_followings=true

Provide username as it used for notifying.

@param {Object} options Options for following user
@param {Number} options.user
@param {String} options.username
@param {firstname} options.firstname
@param {surname} options.surname
@param {Boolean} options.update_followers
@param {Boolean} options.update_followings
@param {Function} options.dispatch
@param {Function} options.done