give topic cards a colour before anyone picks one
رنگ و آیکونِ مبحث تازه اضافه شده بودند و هنوز هیچکس پرشان نکرده، یعنی کارتها تا وقتی کسی از پنلِ ادمین وقت بگذارد بیرنگ میماندند. حالا وقتی فیلد خالی است، مقدارِ پیشفرض از پالت و آیکونهای خودِ اپ میآید (همان رنگهای طرح و همان آیکونهایی که از lucide وارد میشوند)، تا بومی به نظر برسد نه وصله. چرخشی بر اساسِ جایگاهِ مبحث در پایه است، نه تصادفی: رنگی که بینِ دو بارگذاری عوض شود بدتر از بیرنگ بودن است، و دو مبحثِ کنارِ هم نباید یکرنگ دربیایند. مقدارِ صریحِ ادمین همیشه برنده است. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -94,6 +94,16 @@ def _grades_payload() -> dict:
|
||||
return cache.get_or_set(key, build, _CACHE_TTL)
|
||||
|
||||
|
||||
# پالت و آیکونِ پیشفرضِ کارتِ مبحث — هر دو از خودِ اپ گرفته شدهاند
|
||||
# (رنگهای موجود در طرح، و آیکونهایی که از lucide وارد میشوند)، تا تا وقتی
|
||||
# کسی از پنلِ ادمین مقدارِ دلخواه نگذاشته، کارتها بیرنگ نمانند.
|
||||
#
|
||||
# چرخشی و بر اساسِ جایگاهِ مبحث است، نه تصادفی: رنگ نباید بینِ دو درخواست
|
||||
# عوض شود، و دو مبحثِ کنارِ هم نباید یکرنگ دربیایند.
|
||||
_NODE_COLORS = ['#ED6956', '#91ADC6', '#97C0C0', '#9B7BFF', '#FF7A3D']
|
||||
_NODE_ICONS = ['Grid3x3', 'TrendingUp', 'LineChart', 'Sigma', 'Compass', 'Repeat']
|
||||
|
||||
|
||||
def _grade_tree(grade_id: int):
|
||||
"""اسکلتِ گریدِ [{id,title,nodes:[{id,title,lesson_ids}]}] — بدونِ status/دیتای کاربر.
|
||||
None یعنی گریدِ ناموجود؛ [] یعنی گریدِ موجودِ بدونِ واحد."""
|
||||
@@ -110,24 +120,25 @@ def _grade_tree(grade_id: int):
|
||||
Grade.objects.get(pk=grade_id)
|
||||
.units.prefetch_related('nodes__lessons').all()
|
||||
)
|
||||
tree = [
|
||||
{
|
||||
tree = []
|
||||
position = 0 # شمارندهی سراسریِ مبحث در این پایه، برای چرخشِ رنگ
|
||||
for unit in units:
|
||||
nodes = []
|
||||
for node in unit.nodes.all():
|
||||
nodes.append({
|
||||
'id': str(node.id),
|
||||
'title': node.title,
|
||||
'icon': node.icon or _NODE_ICONS[position % len(_NODE_ICONS)],
|
||||
'color': node.color or _NODE_COLORS[position % len(_NODE_COLORS)],
|
||||
'lesson_ids': [lsn.id for lsn in node.lessons.all()],
|
||||
})
|
||||
position += 1
|
||||
tree.append({
|
||||
'id': str(unit.id),
|
||||
'title': unit.title,
|
||||
'blurb': unit.blurb,
|
||||
'nodes': [
|
||||
{
|
||||
'id': str(node.id),
|
||||
'title': node.title,
|
||||
'icon': node.icon,
|
||||
'color': node.color,
|
||||
'lesson_ids': [lsn.id for lsn in node.lessons.all()],
|
||||
}
|
||||
for node in unit.nodes.all()
|
||||
],
|
||||
}
|
||||
for unit in units
|
||||
]
|
||||
'nodes': nodes,
|
||||
})
|
||||
cache.set(key, tree, _CACHE_TTL)
|
||||
return tree
|
||||
|
||||
|
||||
Reference in New Issue
Block a user