diff --git a/frontend/app/components/ComponentItem.vue b/frontend/app/components/ComponentItem.vue index cef9d28..d21fed9 100644 --- a/frontend/app/components/ComponentItem.vue +++ b/frontend/app/components/ComponentItem.vue @@ -200,21 +200,26 @@ :fields="displayedCustomFields" :is-edit-mode="isEditMode" :columns="2" + title="Champs personnalisés item" + :editable="false" @field-blur="updateComponentCustomField" /> - -
-

- Champs contextuels -

- +
@@ -323,7 +328,6 @@ import { parseConstructeurLinksFromApi, } from '~/shared/constructeurUtils' import { - formatSize, shouldInlinePdf, documentPreviewSrc, documentIcon, @@ -332,9 +336,12 @@ import { import { useEntityDocuments } from '~/composables/useEntityDocuments' import { useEntityProductDisplay } from '~/composables/useEntityProductDisplay' import { useEntityCustomFields } from '~/composables/useEntityCustomFields' -import { mergeFieldDefinitionsWithValues, dedupeMergedFields } from '~/shared/utils/entityCustomFieldLogic' -import { useCustomFields } from '~/composables/useCustomFields' -import { useToast } from '~/composables/useToast' +import { + mergeFieldDefinitionsWithValues, + dedupeMergedFields, + resolveCustomFieldId, + resolveFieldId, +} from '~/shared/utils/entityCustomFieldLogic' const props = defineProps({ component: { type: Object, required: true }, @@ -374,9 +381,6 @@ const { updateCustomField: updateComponentCustomField, } = useEntityCustomFields({ entity: () => props.component, entityType: 'composant' }) -const { upsertCustomFieldValue } = useCustomFields() -const { showSuccess, showError } = useToast() - const mergedContextFields = computed(() => { const definitions = props.component?.contextCustomFields ?? [] const values = props.component?.contextCustomFieldValues ?? [] @@ -386,26 +390,23 @@ const mergedContextFields = computed(() => { ) }) -const updateContextCustomField = async (field) => { +const queueContextCustomFieldUpdate = (field, value) => { const linkId = props.component?.linkId if (!linkId || !field) return - const customFieldId = field.customFieldId || field.customField?.id - if (!customFieldId) return + const customFieldId = resolveCustomFieldId(field) + const customFieldValueId = resolveFieldId(field) + if (!customFieldId && !customFieldValueId) return - const result = await upsertCustomFieldValue( - customFieldId, - 'machineComponentLink', - linkId, - field.value ?? '', - ) - - if (result.success) { - showSuccess(`Champ contextuel "${field.name || field.customField?.name}" mis à jour`) - } - else { - showError(`Erreur lors de la mise à jour du champ contextuel`) - } + field.value = value + emit('custom-field-update', { + entityType: 'machineComponentLink', + entityId: linkId, + fieldId: customFieldId, + customFieldValueId, + value: value ?? '', + fieldName: field.name || field.customField?.name || 'Champ contextuel', + }) } // --- Document edit modal --- diff --git a/frontend/app/components/PieceItem.vue b/frontend/app/components/PieceItem.vue index e79ba80..c715deb 100644 --- a/frontend/app/components/PieceItem.vue +++ b/frontend/app/components/PieceItem.vue @@ -241,22 +241,27 @@ - -
-

- Champs contextuels -

- -
+
@@ -316,13 +321,14 @@ import { } from '~/shared/constructeurUtils' import { resolveFieldId, - resolveFieldReadOnly, mergeFieldDefinitionsWithValues, dedupeMergedFields + resolveFieldReadOnly, + resolveCustomFieldId, + mergeFieldDefinitionsWithValues, + dedupeMergedFields, } from '~/shared/utils/entityCustomFieldLogic' import { useEntityDocuments } from '~/composables/useEntityDocuments' import { useEntityProductDisplay } from '~/composables/useEntityProductDisplay' import { useEntityCustomFields } from '~/composables/useEntityCustomFields' -import { useCustomFields } from '~/composables/useCustomFields' -import { useToast } from '~/composables/useToast' const props = defineProps({ piece: { type: Object, required: true }, @@ -390,9 +396,6 @@ const { updateCustomField, } = useEntityCustomFields({ entity: () => props.piece, entityType: 'piece' }) -const { upsertCustomFieldValue } = useCustomFields() -const { showSuccess, showError } = useToast() - const mergedContextFields = computed(() => { const definitions = props.piece?.contextCustomFields ?? [] const values = props.piece?.contextCustomFieldValues ?? [] @@ -402,26 +405,23 @@ const mergedContextFields = computed(() => { ) }) -const updateContextCustomField = async (field) => { +const queueContextCustomFieldUpdate = (field, value) => { const linkId = props.piece?.linkId if (!linkId || !field) return - const customFieldId = field.customFieldId || field.customField?.id - if (!customFieldId) return + const customFieldId = resolveCustomFieldId(field) + const customFieldValueId = resolveFieldId(field) + if (!customFieldId && !customFieldValueId) return - const result = await upsertCustomFieldValue( - customFieldId, - 'machinePieceLink', - linkId, - field.value ?? '', - ) - - if (result.success) { - showSuccess(`Champ contextuel "${field.name || field.customField?.name}" mis à jour`) - } - else { - showError(`Erreur lors de la mise à jour du champ contextuel`) - } + field.value = value + emit('custom-field-update', { + entityType: 'machinePieceLink', + entityId: linkId, + fieldId: customFieldId, + customFieldValueId, + value: value ?? '', + fieldName: field.name || field.customField?.name || 'Champ contextuel', + }) } // --- Document edit modal --- diff --git a/frontend/app/components/common/CustomFieldDisplay.vue b/frontend/app/components/common/CustomFieldDisplay.vue index 30e04c7..5dcab65 100644 --- a/frontend/app/components/common/CustomFieldDisplay.vue +++ b/frontend/app/components/common/CustomFieldDisplay.vue @@ -1,10 +1,10 @@