diff --git a/rsconcept/backend/apps/rsform/serializers.py b/rsconcept/backend/apps/rsform/serializers.py index fd10efd3..1e5421c5 100644 --- a/rsconcept/backend/apps/rsform/serializers.py +++ b/rsconcept/backend/apps/rsform/serializers.py @@ -69,11 +69,20 @@ class StandaloneCstSerializer(serializers.ModelSerializer): return attrs -class CstCreateSerializer(serializers.Serializer): - alias = serializers.CharField(max_length=8) - cst_type = serializers.CharField(max_length=10) +class CstCreateSerializer(serializers.ModelSerializer): insert_after = serializers.IntegerField(required=False, allow_null=True) + class Meta: + model = Constituenta + fields = 'alias', 'cst_type', 'convention', 'term_raw', 'definition_raw', 'definition_formal', 'insert_after' + + def validate(self, attrs): + if ('term_raw' in attrs): + attrs['term_resolved'] = attrs['term_raw'] + if ('definition_raw' in attrs): + attrs['definition_resolved'] = attrs['definition_raw'] + return attrs + class CstListSerlializer(serializers.Serializer): items = serializers.ListField( diff --git a/rsconcept/backend/apps/rsform/tests/t_views.py b/rsconcept/backend/apps/rsform/tests/t_views.py index d5e791a0..6041f0b1 100644 --- a/rsconcept/backend/apps/rsform/tests/t_views.py +++ b/rsconcept/backend/apps/rsform/tests/t_views.py @@ -215,6 +215,28 @@ class TestRSFormViewset(APITestCase): x4 = Constituenta.objects.get(alias=response.data['new_cst']['alias']) self.assertEqual(x4.order, 3) + def test_create_constituenta_data(self): + data = json.dumps({ + 'alias': 'X3', + 'cst_type': 'basic', + 'convention': '1', + 'term_raw': '2', + 'definition_formal': '3', + 'definition_raw': '4' + }) + schema = self.rsform_owned + response = self.client.post(f'/api/rsforms/{schema.id}/cst-create/', + data=data, content_type='application/json') + self.assertEqual(response.status_code, 201) + self.assertEqual(response.data['new_cst']['alias'], 'X3') + self.assertEqual(response.data['new_cst']['cst_type'], 'basic') + self.assertEqual(response.data['new_cst']['convention'], '1') + self.assertEqual(response.data['new_cst']['term_raw'], '2') + self.assertEqual(response.data['new_cst']['term_resolved'], '2') + self.assertEqual(response.data['new_cst']['definition_formal'], '3') + self.assertEqual(response.data['new_cst']['definition_raw'], '4') + self.assertEqual(response.data['new_cst']['definition_resolved'], '4') + def test_delete_constituenta(self): schema = self.rsform_owned data = json.dumps({'items': [{'id': 1337}]}) diff --git a/rsconcept/backend/apps/rsform/views.py b/rsconcept/backend/apps/rsform/views.py index 8eba85e7..4c8fd019 100644 --- a/rsconcept/backend/apps/rsform/views.py +++ b/rsconcept/backend/apps/rsform/views.py @@ -82,6 +82,14 @@ class RSFormViewSet(viewsets.ModelViewSet): serializer.validated_data['cst_type']) else: constituenta = schema.insert_last(serializer.validated_data['alias'], serializer.validated_data['cst_type']) + + constituenta.convention = serializer.validated_data.get('convention', '') + constituenta.term_raw = serializer.validated_data.get('term_raw', '') + constituenta.term_resolved = serializer.validated_data.get('term_resolved', '') + constituenta.definition_formal = serializer.validated_data.get('definition_formal', '') + constituenta.definition_raw = serializer.validated_data.get('definition_raw', '') + constituenta.definition_resolved = serializer.validated_data.get('definition_resolved', '') + constituenta.save() schema.refresh_from_db() outSerializer = serializers.RSFormDetailsSerlializer(schema) response = Response(status=201, data={ diff --git a/rsconcept/frontend/src/components/Common/TextInput.tsx b/rsconcept/frontend/src/components/Common/TextInput.tsx index 5e1ddbe1..75a78699 100644 --- a/rsconcept/frontend/src/components/Common/TextInput.tsx +++ b/rsconcept/frontend/src/components/Common/TextInput.tsx @@ -8,16 +8,17 @@ extends Omit, 'className'> { label: string widthClass?: string colorClass?: string + singleRow?: boolean } function TextInput({ - id, required, label, + id, required, label, singleRow, widthClass = 'w-full', colorClass = 'clr-input', ...props }: TextInputProps) { return ( -
+