101 lines
2.6 KiB
JavaScript
101 lines
2.6 KiB
JavaScript
import { ref } from 'vue'
|
|
import { useToast } from './useToast'
|
|
import { useApi } from './useApi'
|
|
|
|
const sites = ref([])
|
|
const loading = ref(false)
|
|
|
|
export function useSites () {
|
|
const { showSuccess, showInfo } = useToast()
|
|
const { get, post, patch, delete: del } = useApi()
|
|
|
|
const loadSites = async () => {
|
|
loading.value = true
|
|
try {
|
|
const result = await get('/sites')
|
|
if (result.success) {
|
|
sites.value = result.data
|
|
showInfo(`Chargement de ${sites.value.length} site(s) réussi`)
|
|
}
|
|
} catch (error) {
|
|
console.error('Erreur lors du chargement des sites:', error)
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const createSite = async (siteData) => {
|
|
loading.value = true
|
|
try {
|
|
const result = await post('/sites', siteData)
|
|
if (result.success) {
|
|
sites.value.push(result.data)
|
|
showSuccess(`Site "${siteData.name}" créé avec succès`)
|
|
}
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la création du site:', error)
|
|
return { success: false, error: error.message }
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const updateSite = async (id, siteData) => {
|
|
loading.value = true
|
|
try {
|
|
const result = await patch(`/sites/${id}`, siteData)
|
|
if (result.success) {
|
|
const index = sites.value.findIndex(site => site.id === id)
|
|
if (index !== -1) {
|
|
sites.value[index] = result.data
|
|
}
|
|
showSuccess(`Site "${siteData.name}" mis à jour avec succès`)
|
|
}
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la mise à jour du site:', error)
|
|
return { success: false, error: error.message }
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const deleteSite = async (id) => {
|
|
loading.value = true
|
|
try {
|
|
const result = await del(`/sites/${id}`)
|
|
if (result.success) {
|
|
const deletedSite = sites.value.find(site => site.id === id)
|
|
sites.value = sites.value.filter(site => site.id !== id)
|
|
showSuccess(`Site "${deletedSite?.name || 'inconnu'}" supprimé avec succès`)
|
|
}
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la suppression du site:', error)
|
|
return { success: false, error: error.message }
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const getSiteById = (id) => {
|
|
return sites.value.find(site => site.id === id)
|
|
}
|
|
|
|
const getSites = () => sites.value
|
|
const isLoading = () => loading.value
|
|
|
|
return {
|
|
sites,
|
|
loading,
|
|
loadSites,
|
|
createSite,
|
|
updateSite,
|
|
deleteSite,
|
|
getSiteById,
|
|
getSites,
|
|
isLoading
|
|
}
|
|
}
|