Merges the full git history of Inventory_frontend into the monorepo under frontend/. Removes the submodule in favor of a unified repo. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
114 lines
3.5 KiB
TypeScript
114 lines
3.5 KiB
TypeScript
import { ref } from 'vue'
|
|
import { useApi, type ApiResponse } from './useApi'
|
|
|
|
export interface CustomFieldValue {
|
|
id: string
|
|
customFieldId: string
|
|
entityType: string
|
|
entityId: string
|
|
value: unknown
|
|
[key: string]: unknown
|
|
}
|
|
|
|
export function useCustomFields() {
|
|
const { apiCall } = useApi()
|
|
const customFieldValues = ref<CustomFieldValue[]>([])
|
|
const loading = ref(false)
|
|
|
|
// Créer une valeur de champ personnalisé
|
|
const createCustomFieldValue = async (customFieldValueData: Record<string, unknown>): Promise<ApiResponse> => {
|
|
try {
|
|
const result = await apiCall('/custom-fields/values', {
|
|
method: 'POST',
|
|
body: JSON.stringify(customFieldValueData),
|
|
})
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la création de la valeur de champ personnalisé:', error)
|
|
return { success: false, error: (error as Error).message }
|
|
}
|
|
}
|
|
|
|
// Obtenir les valeurs de champs personnalisés pour une entité
|
|
const getCustomFieldValuesByEntity = async (entityType: string, entityId: string): Promise<ApiResponse> => {
|
|
try {
|
|
loading.value = true
|
|
const result = await apiCall(`/custom-fields/values/${entityType}/${entityId}`, {
|
|
method: 'GET',
|
|
})
|
|
if (result.success) {
|
|
customFieldValues.value = result.data as CustomFieldValue[]
|
|
}
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la récupération des valeurs de champs personnalisés:', error)
|
|
return { success: false, error: (error as Error).message }
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
// Mettre à jour une valeur de champ personnalisé
|
|
const updateCustomFieldValue = async (id: string, updateData: Record<string, unknown>): Promise<ApiResponse> => {
|
|
try {
|
|
const result = await apiCall(`/custom-fields/values/${id}`, {
|
|
method: 'PATCH',
|
|
body: JSON.stringify(updateData),
|
|
})
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la mise à jour de la valeur de champ personnalisé:', error)
|
|
return { success: false, error: (error as Error).message }
|
|
}
|
|
}
|
|
|
|
// Créer ou mettre à jour une valeur de champ personnalisé
|
|
const upsertCustomFieldValue = async (
|
|
customFieldId: string | null,
|
|
entityType: string,
|
|
entityId: string,
|
|
value: unknown,
|
|
metadata: Record<string, unknown> = {},
|
|
): Promise<ApiResponse> => {
|
|
try {
|
|
const result = await apiCall('/custom-fields/values/upsert', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
customFieldId,
|
|
entityType,
|
|
entityId,
|
|
value,
|
|
...metadata,
|
|
}),
|
|
})
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la création/mise à jour de la valeur de champ personnalisé:', error)
|
|
return { success: false, error: (error as Error).message }
|
|
}
|
|
}
|
|
|
|
// Supprimer une valeur de champ personnalisé
|
|
const deleteCustomFieldValue = async (id: string): Promise<ApiResponse> => {
|
|
try {
|
|
const result = await apiCall(`/custom-fields/values/${id}`, {
|
|
method: 'DELETE',
|
|
})
|
|
return result
|
|
} catch (error) {
|
|
console.error('Erreur lors de la suppression de la valeur de champ personnalisé:', error)
|
|
return { success: false, error: (error as Error).message }
|
|
}
|
|
}
|
|
|
|
return {
|
|
customFieldValues,
|
|
loading,
|
|
createCustomFieldValue,
|
|
getCustomFieldValuesByEntity,
|
|
updateCustomFieldValue,
|
|
upsertCustomFieldValue,
|
|
deleteCustomFieldValue,
|
|
}
|
|
}
|