diff --git a/rsconcept/backend/apps/rsform/models.py b/rsconcept/backend/apps/rsform/models.py index 78b0bacc..18afe83a 100644 --- a/rsconcept/backend/apps/rsform/models.py +++ b/rsconcept/backend/apps/rsform/models.py @@ -106,7 +106,8 @@ class RSForm(models.Model): ) self._update_from_core() self.save() - return Constituenta.objects.get(pk=result.pk) + result.refresh_from_db() + return result @transaction.atomic def move_cst(self, listCst: list['Constituenta'], target: int): diff --git a/rsconcept/backend/apps/rsform/tests/t_views.py b/rsconcept/backend/apps/rsform/tests/t_views.py index 2415603a..e677cef0 100644 --- a/rsconcept/backend/apps/rsform/tests/t_views.py +++ b/rsconcept/backend/apps/rsform/tests/t_views.py @@ -200,26 +200,27 @@ class TestRSFormViewset(APITestCase): def test_delete_constituenta(self): schema = self.rsform_owned data = json.dumps({'items': [{'id': 1337}]}) - response = self.client.post(f'/api/rsforms/{schema.id}/cst-multidelete/', - data=data, content_type='application/json') + response = self.client.patch(f'/api/rsforms/{schema.id}/cst-multidelete/', + data=data, content_type='application/json') self.assertEqual(response.status_code, 400) x1 = Constituenta.objects.create(schema=schema, alias='X1', csttype='basic', order=1) x2 = Constituenta.objects.create(schema=schema, alias='X2', csttype='basic', order=2) data = json.dumps({'items': [{'id': x1.id}]}) - response = self.client.post(f'/api/rsforms/{schema.id}/cst-multidelete/', - data=data, content_type='application/json') + response = self.client.patch(f'/api/rsforms/{schema.id}/cst-multidelete/', + data=data, content_type='application/json') x2.refresh_from_db() schema.refresh_from_db() self.assertEqual(response.status_code, 202) + self.assertEqual(len(response.data['items']), 1) self.assertEqual(schema.constituents().count(), 1) self.assertEqual(x2.alias, 'X2') self.assertEqual(x2.order, 1) x3 = Constituenta.objects.create(schema=self.rsform_unowned, alias='X1', csttype='basic', order=1) data = json.dumps({'items': [{'id': x3.id}]}) - response = self.client.post(f'/api/rsforms/{schema.id}/cst-multidelete/', - data=data, content_type='application/json') + response = self.client.patch(f'/api/rsforms/{schema.id}/cst-multidelete/', + data=data, content_type='application/json') self.assertEqual(response.status_code, 400) def test_move_constituenta(self): diff --git a/rsconcept/backend/apps/rsform/views.py b/rsconcept/backend/apps/rsform/views.py index 618e34a9..55eb6b76 100644 --- a/rsconcept/backend/apps/rsform/views.py +++ b/rsconcept/backend/apps/rsform/views.py @@ -69,14 +69,16 @@ class RSFormViewSet(viewsets.ModelViewSet): response['Location'] = constituenta.get_absolute_url() return response - @action(detail=True, methods=['post'], url_path='cst-multidelete') + @action(detail=True, methods=['patch'], url_path='cst-multidelete') def cst_multidelete(self, request, pk): ''' Delete multiple constituents ''' schema: models.RSForm = self.get_object() serializer = serializers.CstListSerlializer(data=request.data, context={'schema': schema}) serializer.is_valid(raise_exception=True) schema.delete_cst(serializer.validated_data['constituents']) - return Response(status=202) + schema.refresh_from_db() + outSerializer = serializers.RSFormDetailsSerlializer(schema) + return Response(status=202, data=outSerializer.data) @action(detail=True, methods=['patch'], url_path='cst-moveto') def cst_moveto(self, request, pk): diff --git a/rsconcept/frontend/src/components/Common/Card.tsx b/rsconcept/frontend/src/components/Common/Card.tsx index 33a89608..d49be38b 100644 --- a/rsconcept/frontend/src/components/Common/Card.tsx +++ b/rsconcept/frontend/src/components/Common/Card.tsx @@ -7,7 +7,7 @@ interface CardProps { function Card({title, widthClass='min-w-fit', children}: CardProps) { return (
- { title &&

{title}

} + { title &&

{title}

} {children}
); diff --git a/rsconcept/frontend/src/components/Common/DataTableThemed.tsx b/rsconcept/frontend/src/components/Common/DataTableThemed.tsx index aa298bb5..3168c5e5 100644 --- a/rsconcept/frontend/src/components/Common/DataTableThemed.tsx +++ b/rsconcept/frontend/src/components/Common/DataTableThemed.tsx @@ -1,5 +1,5 @@ import DataTable, { createTheme, TableProps } from 'react-data-table-component'; -import { useTheme } from '../../context/ThemeContext'; +import { useConceptTheme } from '../../context/ThemeContext'; export interface SelectionInfo { allSelected: boolean; @@ -38,7 +38,7 @@ createTheme('customDark', { }, 'dark'); function DataTableThemed({theme, ...props}: TableProps) { - const { darkMode } = useTheme(); + const { darkMode } = useConceptTheme(); return ( diff --git a/rsconcept/frontend/src/components/Navigation/Navigation.tsx b/rsconcept/frontend/src/components/Navigation/Navigation.tsx index 69e4cc6e..b9b8108f 100644 --- a/rsconcept/frontend/src/components/Navigation/Navigation.tsx +++ b/rsconcept/frontend/src/components/Navigation/Navigation.tsx @@ -6,35 +6,35 @@ import UserMenu from './UserMenu'; import { useAuth } from '../../context/AuthContext'; import UserTools from './UserTools'; import Logo from './Logo'; -import { useState } from 'react'; +import { useConceptTheme } from '../../context/ThemeContext'; function Navigation() { const {user} = useAuth(); const navigate = useNavigate(); - const [isActive, setActive] = useState(true); + const { noNavigation, toggleNoNavigation } = useConceptTheme(); const navigateCommon = () => navigate('/rsforms?filter=common'); const navigateHelp = () => navigate('/manuals'); return (