useCompanies.js 921 Bytes
import { ref, watch } from 'vue'
import axios from 'axios'

const companies = ref([])
const hasLoaded = ref(false)
const activeCompanyId = ref(localStorage.getItem('lemon_active_company') || null)

watch(activeCompanyId, (newVal) => {
  if (newVal) localStorage.setItem('lemon_active_company', newVal)
  else localStorage.removeItem('lemon_active_company')
})

export function useCompanies() {
  async function loadCompanies() {
    try {
      if (hasLoaded.value) return companies.value
      const { data } = await axios.get('/api/company/list')
      companies.value = data
      hasLoaded.value = true
      return data
    } catch (e) {
      console.error(e)
      return []
    }
  }

  function addCompany(c) {
    companies.value.push(c)
  }

  function setActiveCompany(id) {
    activeCompanyId.value = id
  }

  return { companies, loadCompanies, addCompany, hasLoaded, activeCompanyId, setActiveCompany }
}