class RailsVueGenerator::Handlers::StoreHandler

Public Instance Methods

generate() click to toggle source
# File lib/rails_vue_generator/handlers/store_handler.rb, line 6
def generate
  lines = []
  lines << "import api from '@/api'"
  lines << "import router from '@/router'"
  lines << ''
  lines << 'const state = {'
  lines << '  current: {},'
  lines << '  all: [],'
  lines << '  loading: {'
  lines << '    current: false,'
  lines << '    all: false'
  lines << '  }'
  lines << '}'
  lines << ''
  lines << 'const actions = {'
  lines << '  async getAll({'
  lines << '    commit'
  lines << '  }, code) {'
  lines << "    commit('startLoading', 'all')"
  lines << "    const result = await api.#{model_name}.getAll()"
  lines << '    const responseData = result.data'
  lines << "    commit('store#{model_name.pluralize.titleize}', responseData)"
  lines << "    commit('endLoading', 'all')"
  lines << '    return responseData'
  lines << '  },'
  lines << '  async get({'
  lines << '    commit'
  lines << '  }, id) {'
  lines << "    commit('startLoading', 'current')"
  lines << "    const result = await api.#{model_name}.get(id)"
  lines << '    const responseData = result.data'
  lines << "    commit('store#{model_name.titleize}', responseData)"
  lines << "    commit('endLoading', 'current')"
  lines << '    return responseData'
  lines << '  },'
  lines << '  async create({commit}, data) {'
  lines << "    const result = await api.#{model_name}.create(data)"
  lines << '    const responseData = result.data'
  lines << "    commit('store#{model_name.titleize}', responseData)"
  lines << '    return responseData'
  lines << '  },'
  lines << '  async update({commit}, {id, data}) {'
  lines << "    commit('startLoading', 'current')"
  lines << "    const result = await api.#{model_name}.update(id, data)"
  lines << '    const responseData = result.data'
  lines << "    commit('store#{model_name.titleize}', responseData)"
  lines << "    commit('endLoading', 'current')"
  lines << '    return responseData'
  lines << '  },'
  lines << '  async delete({commit}, id) {'
  lines << "    const result = await api.#{model_name}.delete(id)"
  lines << '    const responseData = result.data'
  lines << "    commit('clearCurrent')"
  lines << '    return responseData'
  lines << '  },'
  lines << '  clearCurrent({commit}) {'
  lines << '    commit("clearCurrent")'
  lines << '  }'
  lines << ''
  lines << '}'
  lines << 'const mutations = {'
  lines << "  store#{model_name.titleize}(state, #{model_name}) {"
  lines << "    state.current = #{model_name}"
  lines << '  },'
  lines << "  store#{model_name.pluralize.titleize}(state, data) {"
  lines << '    state.all = data'
  lines << '  },'
  lines << '  clearCurrent(state) {'
  lines << '    state.current = {}'
  lines << '  },'
  lines << '  startLoading(state, key) {'
  lines << '    state.loading[key] = true'
  lines << '  },'
  lines << '  endLoading(state, key) {'
  lines << '    state.loading[key] = false'
  lines << '  }'
  lines << '}'
  lines << ''
  lines << 'export default {'
  lines << '  namespaced: true,'
  lines << '  state,'
  lines << '  actions,'
  lines << '  mutations'
  lines << '}'
  lines << ''

  lines.join("\n")
end