diff --git a/cookbook/models.py b/cookbook/models.py index a0a2cbf3..a8302f69 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -983,6 +983,8 @@ class RecipeBook(ExportModelOperationsMixin('book'), models.Model, PermissionMod shared = models.ManyToManyField(User, blank=True, related_name='shared_with') created_by = models.ForeignKey(User, on_delete=models.CASCADE) filter = models.ForeignKey('cookbook.CustomFilter', null=True, blank=True, on_delete=models.SET_NULL) + order = models.IntegerField(default=0) + space = models.ForeignKey(Space, on_delete=models.CASCADE) objects = ScopedManager(space='space') diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 4c7e2dfb..873880d6 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -979,7 +979,7 @@ class RecipeBookSerializer(SpacedModelSerializer, WritableNestedModelSerializer) class Meta: model = RecipeBook - fields = ('id', 'name', 'description', 'shared', 'created_by', 'filter') + fields = ('id', 'name', 'description', 'shared', 'created_by', 'filter', 'order') read_only_fields = ('created_by',) diff --git a/cookbook/views/api.py b/cookbook/views/api.py index e4c91b2b..1b1bd29a 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -662,8 +662,16 @@ class RecipeBookViewSet(viewsets.ModelViewSet, StandardFilterMixin): permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope] def get_queryset(self): + order_field = self.request.GET.get('order_field') + order_direction = self.request.GET.get('order_direction') + + if not order_field: + order_field = 'id' + + ordering = f"{'' if order_direction == 'asc' else '-'}{order_field}" + self.queryset = self.queryset.filter(Q(created_by=self.request.user) | Q(shared=self.request.user)).filter( - space=self.request.space).distinct() + space=self.request.space).distinct().order_by(ordering) return super().get_queryset() diff --git a/vue/src/apps/CookbookView/CookbookView.vue b/vue/src/apps/CookbookView/CookbookView.vue index bc922d7e..9ad465d5 100644 --- a/vue/src/apps/CookbookView/CookbookView.vue +++ b/vue/src/apps/CookbookView/CookbookView.vue @@ -11,50 +11,90 @@ + + oldest to newest + newest to oldest + alphabetical order + manually + + + {{submitText}} + -
-
-
-
- - - - - -
- {{ book.name }} -
-
{{ book.description }}
-
-
-
-
-
-
+
+
+
+
+
+ + + + + + +
+ {{ book.name }} +
+
{{ book.description }}
+
+
+
+
+
+
+
+
+ + + + + +
- - - - - - +
+
+ + + +
+
+ +
+
+
+ + #{{ index + 1 }} + + {{ book.name }} +
+
+
+
+
+
-
-