101 lines
2.8 KiB
JavaScript
101 lines
2.8 KiB
JavaScript
import { ref } from 'vue'
|
|
import { useToast } from './useToast'
|
|
import { useApi } from './useApi'
|
|
|
|
const pieces = ref([])
|
|
const loading = ref(false)
|
|
|
|
export function usePieces () {
|
|
const { showSuccess, showError, showInfo } = useToast()
|
|
const { get, post, patch, delete: del } = useApi()
|
|
|
|
const loadPieces = async () => {
|
|
loading.value = true
|
|
try {
|
|
const result = await get('/pieces')
|
|
if (result.success) {
|
|
pieces.value = result.data
|
|
showInfo(`Chargement de ${pieces.value.length} pièce(s) réussi`)
|
|
}
|
|
} catch (error) {
|
|
console.error('Erreur lors du chargement des pièces:', error)
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const createPiece = async (pieceData) => {
|
|
loading.value = true
|
|
try {
|
|
const result = await post('/pieces', pieceData)
|
|
if (result.success) {
|
|
pieces.value.push(result.data)
|
|
const displayName = result.data?.name
|
|
|| pieceData?.definition?.name
|
|
|| pieceData?.name
|
|
|| 'Pièce'
|
|
showSuccess(`Pièce "${displayName}" créée avec succès`)
|
|
}
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la création de la pièce:', error)
|
|
return { success: false, error: error.message }
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const updatePieceData = async (id, pieceData) => {
|
|
loading.value = true
|
|
try {
|
|
const result = await patch(`/pieces/${id}`, pieceData)
|
|
if (result.success) {
|
|
const updated = result.data
|
|
const index = pieces.value.findIndex(piece => piece.id === id)
|
|
if (index !== -1) {
|
|
pieces.value[index] = updated
|
|
}
|
|
showSuccess(`Pièce "${updated?.name || pieceData.name || ''}" mise à jour avec succès`)
|
|
}
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la mise à jour de la pièce:', error)
|
|
return { success: false, error: error.message }
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const deletePiece = async (id) => {
|
|
loading.value = true
|
|
try {
|
|
const result = await del(`/pieces/${id}`)
|
|
if (result.success) {
|
|
const deletedPiece = pieces.value.find(piece => piece.id === id)
|
|
pieces.value = pieces.value.filter(piece => piece.id !== id)
|
|
showSuccess(`Pièce "${deletedPiece?.name || 'inconnu'}" supprimée avec succès`)
|
|
}
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la suppression de la pièce:', error)
|
|
return { success: false, error: error.message }
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
const getPieces = () => pieces.value
|
|
const isLoading = () => loading.value
|
|
|
|
return {
|
|
pieces,
|
|
loading,
|
|
loadPieces,
|
|
createPiece,
|
|
updatePiece: updatePieceData,
|
|
deletePiece,
|
|
getPieces,
|
|
isLoading
|
|
}
|
|
}
|