feat: Add PrimeProgress, PrimeSelect, and PrimeSkeleton components with customizable styles and props

- Implemented PrimeProgress component with support for labels, helper text, and various styles (size, variant, color).
- Created PrimeSelect component with dropdown functionality, custom templates, and validation states.
- Developed PrimeSkeleton component for loading placeholders with different shapes and animations.
- Updated index.ts to export new components for easy import.
- Enhanced PrimeVueTest.vue to include tests for new components and their functionalities.
- Introduced a custom ThrillWiki theme for PrimeVue with tailored color schemes and component styles.
- Added ambient type declarations for various components to improve TypeScript support.
This commit is contained in:
pacnpal
2025-08-27 21:00:02 -04:00
parent 6125c4ee44
commit 08a4a2d034
164 changed files with 73094 additions and 11001 deletions

View File

@@ -3,8 +3,12 @@ API serializers for the ride ranking system.
"""
from rest_framework import serializers
from drf_spectacular.utils import extend_schema_serializer, OpenApiExample
from django.utils.functional import cached_property
from drf_spectacular.utils import (
extend_schema_serializer,
extend_schema_field,
OpenApiExample,
)
from apps.rides.models import RideRanking, RankingSnapshot
@extend_schema_serializer(
@@ -44,19 +48,8 @@ class RideRankingSerializer(serializers.ModelSerializer):
rank_change = serializers.SerializerMethodField()
previous_rank = serializers.SerializerMethodField()
@cached_property
def _model(self):
from apps.rides.models import RideRanking
return RideRanking
class Meta:
@property
def model(self):
from apps.rides.models import RideRanking
return RideRanking
model = RideRanking
fields = [
"id",
"rank",
@@ -73,6 +66,7 @@ class RideRankingSerializer(serializers.ModelSerializer):
"previous_rank",
]
@extend_schema_field(serializers.DictField())
def get_ride(self, obj):
"""Get ride details."""
return {
@@ -87,6 +81,7 @@ class RideRankingSerializer(serializers.ModelSerializer):
"category": obj.ride.category,
}
@extend_schema_field(serializers.IntegerField(allow_null=True))
def get_rank_change(self, obj):
"""Calculate rank change from previous snapshot."""
from apps.rides.models import RankingSnapshot
@@ -99,6 +94,7 @@ class RideRankingSerializer(serializers.ModelSerializer):
return latest_snapshots[0].rank - latest_snapshots[1].rank
return None
@extend_schema_field(serializers.IntegerField(allow_null=True))
def get_previous_rank(self, obj):
"""Get previous rank."""
from apps.rides.models import RankingSnapshot
@@ -120,7 +116,7 @@ class RideRankingDetailSerializer(serializers.ModelSerializer):
ranking_history = serializers.SerializerMethodField()
class Meta:
model = "rides.RideRanking"
model = RideRanking
fields = [
"id",
"rank",
@@ -138,6 +134,7 @@ class RideRankingDetailSerializer(serializers.ModelSerializer):
"ranking_history",
]
@extend_schema_field(serializers.DictField())
def get_ride(self, obj):
"""Get detailed ride information."""
ride = obj.ride
@@ -178,6 +175,7 @@ class RideRankingDetailSerializer(serializers.ModelSerializer):
"status": ride.status,
}
@extend_schema_field(serializers.ListField(child=serializers.DictField()))
def get_head_to_head_comparisons(self, obj):
"""Get top head-to-head comparisons."""
from django.db.models import Q
@@ -220,6 +218,7 @@ class RideRankingDetailSerializer(serializers.ModelSerializer):
return results
@extend_schema_field(serializers.ListField(child=serializers.DictField()))
def get_ranking_history(self, obj):
"""Get recent ranking history."""
from apps.rides.models import RankingSnapshot
@@ -245,7 +244,7 @@ class RankingSnapshotSerializer(serializers.ModelSerializer):
park_name = serializers.CharField(source="ride.park.name", read_only=True)
class Meta:
model = "rides.RankingSnapshot"
model = RankingSnapshot
fields = [
"id",
"ride",