diff --git a/app/src/interfaces/list-m2a/list-m2a.vue b/app/src/interfaces/list-m2a/list-m2a.vue index 6b0baed10e..a10cb31ad1 100644 --- a/app/src/interfaces/list-m2a/list-m2a.vue +++ b/app/src/interfaces/list-m2a/list-m2a.vue @@ -165,7 +165,7 @@ export default defineComponent({ required: true, }, value: { - type: Array as PropType, + type: Array as PropType, default: null, }, disabled: { @@ -529,10 +529,13 @@ export default defineComponent({ } function deselect(item: any) { - emit( - 'input', - (props.value || []).filter((current) => current !== item) - ); + const newValue = (props.value || []).filter((current) => current !== item); + + if (newValue.length === 0) { + emit('input', null); + } else { + emit('input', newValue); + } } } diff --git a/app/src/interfaces/list-m2m/use-actions.ts b/app/src/interfaces/list-m2m/use-actions.ts index 89b4fa710e..9f8c614a8c 100644 --- a/app/src/interfaces/list-m2m/use-actions.ts +++ b/app/src/interfaces/list-m2m/use-actions.ts @@ -140,7 +140,12 @@ export default function useActions( return isEqual(item, deletingItem) === false; }); - emit(newValue); + + if (newValue.length === 0) { + emit(null); + } else { + emit(newValue); + } } return { diff --git a/app/src/interfaces/list-o2m-tree-view/list-o2m-tree-view.vue b/app/src/interfaces/list-o2m-tree-view/list-o2m-tree-view.vue index 63ca11b206..c15a47fd11 100644 --- a/app/src/interfaces/list-o2m-tree-view/list-o2m-tree-view.vue +++ b/app/src/interfaces/list-o2m-tree-view/list-o2m-tree-view.vue @@ -218,15 +218,20 @@ export default defineComponent({ return result; } - function emitValue(value: Record[]) { - stagedValues.value = value; + function emitValue(value: Record[] | null) { + if (!value || value.length === 0) { + stagedValues.value = []; + emit('input', null); + } else { + stagedValues.value = value; - if (relation.value.meta?.sort_field) { - return emit('input', addSort(value)); + if (relation.value.meta?.sort_field) { + return emit('input', addSort(value)); + } + + emit('input', value); } - emit('input', value); - function addSort(value: Record[]): Record[] { return (value || []).map((item, index) => { return { @@ -315,7 +320,7 @@ export default defineComponent({ const newVal = [...response.data.data, ...stagedValues.value]; - if (newVal.length === 0) emitValue([]); + if (newVal.length === 0) emitValue(null); else emitValue(newVal); loading.value = false; diff --git a/app/src/interfaces/list-o2m/list-o2m.vue b/app/src/interfaces/list-o2m/list-o2m.vue index 4e77587fc0..27a0435322 100644 --- a/app/src/interfaces/list-o2m/list-o2m.vue +++ b/app/src/interfaces/list-o2m/list-o2m.vue @@ -259,16 +259,19 @@ export default defineComponent({ } const id = item[relatedPrimKey]; - emit( - 'input', - props.value.filter((item) => { - if (typeof item === 'number' || typeof item === 'string') return item !== id; - if (typeof item === 'object' && relatedPrimKey in item) { - return item[relatedPrimKey] !== id; - } - return true; - }) - ); + const newValue = props.value.filter((item) => { + if (typeof item === 'number' || typeof item === 'string') return item !== id; + if (typeof item === 'object' && relatedPrimKey in item) { + return item[relatedPrimKey] !== id; + } + return true; + }); + + if (newValue.length === 0) { + emit('input', null); + } else { + emit('input', newValue); + } } function useSort() {