add stuff to mark starting endpoint

This commit is contained in:
Matthias 2021-12-07 23:54:45 +01:00
parent 2cf4e20d9a
commit 948270bbcb
No known key found for this signature in database
GPG Key ID: F50EF5741D33E076
3 changed files with 33 additions and 4 deletions

View File

@ -255,14 +255,28 @@ class CategoryTree(generics.ListAPIView):
cat_id = params.get('id', None)
if cat_id in (None, '', '#', ):
queryset = queryset.filter(parent=None)
filter_kwargs = {}
# get whole tree
if 'ref_type' in self.kwargs and 'ref' in self.kwargs:
if 'part' in self.kwargs['ref_type']:
filter_kwargs['parts__id'] = self.kwargs['ref']
elif 'category' in self.kwargs['ref_type']:
filter_kwargs['id'] = self.kwargs['ref']
else:
filter_kwargs['id'] = None
branch = queryset.model.objects.filter(**filter_kwargs).get_ancestors(include_self=True)
queryset = queryset.filter(parent=None) | branch
self.kwargs['ancestors'] = branch
else:
queryset = queryset.filter(parent_id=cat_id)
return queryset
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
def get_serializer_context(self):
context = super().get_serializer_context()
if 'ancestors' in self.kwargs:
context['ancestors'] = self.kwargs['ancestors']
return context
class PartSalePriceList(generics.ListCreateAPIView):
@ -1541,6 +1555,7 @@ part_api_urls = [
# Base URL for PartCategory API endpoints
url(r'^category/', include([
url(r'^tree/(?P<ref_type>[-\w]+)/(?P<ref>\d+)/', CategoryTree.as_view(), name='api-part-category-root-tree'),
url(r'^tree/', CategoryTree.as_view(), name='api-part-category-tree'),
url(r'^parameters/', CategoryParameterList.as_view(), name='api-part-category-parameter-list'),

View File

@ -83,6 +83,8 @@ class CategoryTree(InvenTreeModelSerializer):
a_attr = serializers.SerializerMethodField()
state = serializers.SerializerMethodField()
def get_parent(self, obj):
return obj.parent.pk if obj.parent else '#'
@ -92,6 +94,11 @@ class CategoryTree(InvenTreeModelSerializer):
def get_a_attr(self, obj):
return {'href': obj.get_absolute_url()}
def get_state(self, obj):
if 'ancestors' in self.context:
return {'opened': obj in self.context['ancestors'] }
return {}
class Meta:
model = PartCategory
fields = [
@ -100,6 +107,7 @@ class CategoryTree(InvenTreeModelSerializer):
'parent',
'children',
'a_attr',
'state',
]

View File

@ -153,7 +153,13 @@ function enableSidetree(label) {
$('#tree').jstree({
'core': {
'data': {
'url': '/api/part/category/tree/',
'url': function(node) {
if (node.id == '#') {
var url_parts = String(window.location).split("/").slice(-3);
return `/api/part/category/tree/${url_parts[0]}/${url_parts[1]}/`;
}
return '/api/part/category/tree/'
},
'data': function(node) {
return {'id': node.id};
}