Improve collection editing and rendering
This commit is contained in:
+31
-1
@@ -163,6 +163,8 @@ def user_can_delete_item(user, item):
|
||||
def desired_item_scope(item, user, force_private=False):
|
||||
if force_private:
|
||||
return Item.Visibility.PRIVATE, None
|
||||
if item.visibility == Item.Visibility.PUBLIC:
|
||||
return Item.Visibility.PUBLIC, None
|
||||
tag_names = {match.group(1).lower() for match in re.finditer(r'(?<!\w)#([\wäöüÄÖÜß-]+)', item.content)}
|
||||
membership = TeamMembership.objects.select_related('team').filter(user=user, team__slug__in=tag_names).first()
|
||||
if membership:
|
||||
@@ -187,6 +189,10 @@ def apply_team_from_tags(item, user, force_private=False):
|
||||
item.visibility = Item.Visibility.PRIVATE
|
||||
item.save(update_fields=['team', 'visibility', 'updated_at'])
|
||||
return
|
||||
if item.visibility == Item.Visibility.PUBLIC:
|
||||
item.team = None
|
||||
item.save(update_fields=['team', 'updated_at'])
|
||||
return
|
||||
tag_names = list(item.tags.values_list('name', flat=True))
|
||||
membership = TeamMembership.objects.select_related('team').filter(user=user, team__slug__in=tag_names).first()
|
||||
if membership:
|
||||
@@ -980,6 +986,29 @@ def api_item_suggestions(request):
|
||||
return JsonResponse({'items': data})
|
||||
|
||||
|
||||
def api_items_queryset(request, user, api_key=None):
|
||||
items = visible_items(user, api_key)
|
||||
tags = [tag.strip().lstrip('#').lower() for tag in request.GET.getlist('tag') if tag.strip()]
|
||||
if tags:
|
||||
if request.GET.get('tag_mode') == 'all':
|
||||
for tag in tags:
|
||||
items = items.filter(tags__name=tag)
|
||||
else:
|
||||
items = items.filter(tags__name__in=tags).distinct()
|
||||
q = request.GET.get('q', '').strip()
|
||||
if q:
|
||||
items = items.filter(Q(content__icontains=q) | Q(comment__icontains=q) | Q(url__icontains=q) | Q(tags__name__icontains=q)).distinct()
|
||||
return items
|
||||
|
||||
|
||||
def api_items_limit(request):
|
||||
try:
|
||||
limit = int(request.GET.get('limit', 200))
|
||||
except (TypeError, ValueError):
|
||||
limit = 200
|
||||
return max(1, min(limit, 500))
|
||||
|
||||
|
||||
def serialize_item(item):
|
||||
return {
|
||||
'id': item.id,
|
||||
@@ -1006,7 +1035,8 @@ def serialize_item(item):
|
||||
def api_items(request):
|
||||
user = request.api_key.owner if request.api_key else request.user
|
||||
if request.method == 'GET':
|
||||
return JsonResponse({'items': [serialize_item(i) for i in visible_items(user, request.api_key)[:200]]})
|
||||
items = api_items_queryset(request, user, request.api_key)[:api_items_limit(request)]
|
||||
return JsonResponse({'items': [serialize_item(i) for i in items]})
|
||||
data = json.loads(request.body or '{}') if request.content_type == 'application/json' else request.POST
|
||||
raw = data.get('content', '')
|
||||
raw, command_due_at, _ = parse_due_command(raw)
|
||||
|
||||
Reference in New Issue
Block a user