diff --git a/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2a.vue b/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2a.vue
index 00da7bae04..3e51949d1a 100644
--- a/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2a.vue
+++ b/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2a.vue
@@ -64,6 +64,7 @@
{{ t('sort_field') }}
{
+ let fields = ['item', 'collection'];
+ if (junctionCollection.value) {
+ const relations = relationsStore.getRelationsForCollection(junctionCollection.value);
+ fields.push(...relations.map((field) => field.field));
+ }
+ return fields;
+ });
+
return {
t,
availableCollections,
@@ -218,6 +229,7 @@ export default defineComponent({
sortField,
onDelete,
onDeselect,
+ unsortableJunctionFields,
};
},
});
diff --git a/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2m.vue b/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2m.vue
index 907506a5a5..9d2f75a6ec 100644
--- a/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2m.vue
+++ b/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-m2m.vue
@@ -71,6 +71,7 @@
@@ -203,7 +204,7 @@ import { useFieldDetailStore, syncFieldDetailStoreProperty } from '../store';
import { storeToRefs } from 'pinia';
import RelatedCollectionSelect from '../shared/related-collection-select.vue';
import RelatedFieldSelect from '../shared/related-field-select.vue';
-import { useFieldsStore } from '@/stores';
+import { useFieldsStore, useRelationsStore } from '@/stores';
export default defineComponent({
components: { RelatedCollectionSelect, RelatedFieldSelect },
@@ -211,6 +212,7 @@ export default defineComponent({
const { t } = useI18n();
const fieldDetailStore = useFieldDetailStore();
+ const relationsStore = useRelationsStore();
const fieldsStore = useFieldsStore();
const { field, collection, editing, generationInfo } = storeToRefs(fieldDetailStore);
@@ -265,6 +267,15 @@ export default defineComponent({
return t('add_field_related');
});
+ const unsortableJunctionFields = computed(() => {
+ let fields = [];
+ if (junctionCollection.value) {
+ const relations = relationsStore.getRelationsForCollection(junctionCollection.value);
+ fields.push(...relations.map((field) => field.field));
+ }
+ return fields;
+ });
+
return {
t,
autoGenerateJunctionRelation,
@@ -285,6 +296,7 @@ export default defineComponent({
correspondingLabel,
correspondingFieldKey,
generationInfo,
+ unsortableJunctionFields,
};
},
});
diff --git a/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-o2m.vue b/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-o2m.vue
index f43146fdd8..0ca2002a9f 100644
--- a/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-o2m.vue
+++ b/app/src/modules/settings/routes/data-model/field-detail/field-detail-advanced/field-detail-advanced-relationship-o2m.vue
@@ -24,6 +24,7 @@
@@ -117,7 +118,7 @@ import { useFieldDetailStore, syncFieldDetailStoreProperty } from '../store';
import { storeToRefs } from 'pinia';
import RelatedCollectionSelect from '../shared/related-collection-select.vue';
import RelatedFieldSelect from '../shared/related-field-select.vue';
-import { useFieldsStore } from '@/stores';
+import { useFieldsStore, useRelationsStore } from '@/stores';
export default defineComponent({
components: { RelatedCollectionSelect, RelatedFieldSelect },
@@ -125,6 +126,7 @@ export default defineComponent({
const { t } = useI18n();
const fieldDetailStore = useFieldDetailStore();
+ const relationsStore = useRelationsStore();
const fieldsStore = useFieldsStore();
const relatedCollection = syncFieldDetailStoreProperty('relations.o2m.collection');
@@ -138,6 +140,15 @@ export default defineComponent({
const isExisting = computed(() => editing.value !== '+');
const currentPrimaryKey = computed(() => fieldsStore.getPrimaryKeyFieldForCollection(collection.value!)?.field);
+ const unsortableJunctionFields = computed(() => {
+ let fields = ['item', 'collection'];
+ if (relatedCollection.value) {
+ const relations = relationsStore.getRelationsForCollection(relatedCollection.value);
+ fields.push(...relations.map((field) => field.field));
+ }
+ return fields;
+ });
+
return {
t,
isExisting,
@@ -149,6 +160,7 @@ export default defineComponent({
sortField,
onDelete,
onDeselect,
+ unsortableJunctionFields,
};
},
});
diff --git a/app/src/modules/settings/routes/data-model/field-detail/shared/related-field-select.vue b/app/src/modules/settings/routes/data-model/field-detail/shared/related-field-select.vue
index fd32fb191d..34104fc010 100644
--- a/app/src/modules/settings/routes/data-model/field-detail/shared/related-field-select.vue
+++ b/app/src/modules/settings/routes/data-model/field-detail/shared/related-field-select.vue
@@ -57,6 +57,10 @@ export default defineComponent({
type: String,
default: null,
},
+ disabledFields: {
+ type: Array as PropType,
+ default: () => [],
+ },
typeDenyList: {
type: Array as PropType,
default: () => [],
@@ -81,7 +85,11 @@ export default defineComponent({
return fieldsStore.getFieldsForCollectionAlphabetical(props.collection).map((field) => ({
text: field.field,
value: field.field,
- disabled: !field.schema || !!field.schema?.is_primary_key || !!props.typeDenyList.includes(field.type),
+ disabled:
+ !field.schema ||
+ !!field.schema?.is_primary_key ||
+ props.disabledFields.includes(field.field) ||
+ props.typeDenyList.includes(field.type),
}));
});