1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-22 06:19:38 +02:00

feat: Add start_date to collection ordering and enhance localization for itinerary features

This commit is contained in:
Sean Morley 2025-03-21 17:31:33 -04:00
parent 794df82ec6
commit fe25f8e2c8
12 changed files with 82 additions and 23 deletions

View file

@ -22,7 +22,7 @@ class CollectionViewSet(viewsets.ModelViewSet):
order_by = self.request.query_params.get('order_by', 'name') order_by = self.request.query_params.get('order_by', 'name')
order_direction = self.request.query_params.get('order_direction', 'asc') order_direction = self.request.query_params.get('order_direction', 'asc')
valid_order_by = ['name', 'upated_at'] valid_order_by = ['name', 'upated_at', 'start_date']
if order_by not in valid_order_by: if order_by not in valid_order_by:
order_by = 'updated_at' order_by = 'updated_at'
@ -35,6 +35,12 @@ class CollectionViewSet(viewsets.ModelViewSet):
ordering = 'lower_name' ordering = 'lower_name'
if order_direction == 'desc': if order_direction == 'desc':
ordering = f'-{ordering}' ordering = f'-{ordering}'
elif order_by == 'start_date':
ordering = 'start_date'
if order_direction == 'asc':
ordering = 'start_date'
else:
ordering = '-start_date'
else: else:
order_by == 'updated_at' order_by == 'updated_at'
ordering = 'updated_at' ordering = 'updated_at'

View file

@ -248,7 +248,11 @@
"reservation_number": "Reservierungsnummer", "reservation_number": "Reservierungsnummer",
"welcome_map_info": "Frei zugängliche Abenteuer auf diesem Server", "welcome_map_info": "Frei zugängliche Abenteuer auf diesem Server",
"open_in_maps": "In Karten öffnen", "open_in_maps": "In Karten öffnen",
"all_day": "Den ganzen Tag" "all_day": "Den ganzen Tag",
"collection_no_start_end_date": "Durch das Hinzufügen eines Start- und Enddatums zur Sammlung werden Reiseroutenplanungsfunktionen auf der Sammlungsseite freigegeben.",
"date_itinerary": "Datumstrecke",
"no_ordered_items": "Fügen Sie der Sammlung Elemente mit Daten hinzu, um sie hier zu sehen.",
"ordered_itinerary": "Reiseroute bestellt"
}, },
"home": { "home": {
"desc_1": "Entdecken, planen und erkunden Sie mühelos", "desc_1": "Entdecken, planen und erkunden Sie mühelos",

View file

@ -296,7 +296,11 @@
"reservation_number": "Número de reserva", "reservation_number": "Número de reserva",
"welcome_map_info": "Aventuras públicas en este servidor", "welcome_map_info": "Aventuras públicas en este servidor",
"open_in_maps": "Abrir en mapas", "open_in_maps": "Abrir en mapas",
"all_day": "Todo el día" "all_day": "Todo el día",
"collection_no_start_end_date": "Agregar una fecha de inicio y finalización a la colección desbloqueará las funciones de planificación del itinerario en la página de colección.",
"date_itinerary": "Itinerario de fecha",
"no_ordered_items": "Agregue elementos con fechas a la colección para verlos aquí.",
"ordered_itinerary": "Itinerario ordenado"
}, },
"worldtravel": { "worldtravel": {
"all": "Todo", "all": "Todo",

View file

@ -248,7 +248,11 @@
"reservation_number": "Numéro de réservation", "reservation_number": "Numéro de réservation",
"welcome_map_info": "Aventures publiques sur ce serveur", "welcome_map_info": "Aventures publiques sur ce serveur",
"open_in_maps": "Ouvert dans les cartes", "open_in_maps": "Ouvert dans les cartes",
"all_day": "Toute la journée" "all_day": "Toute la journée",
"collection_no_start_end_date": "L'ajout d'une date de début et de fin à la collection débloquera les fonctionnalités de planification de l'itinéraire dans la page de collection.",
"date_itinerary": "Itinéraire de date",
"no_ordered_items": "Ajoutez des articles avec des dates à la collection pour les voir ici.",
"ordered_itinerary": "Itinéraire ordonné"
}, },
"home": { "home": {
"desc_1": "Découvrez, planifiez et explorez en toute simplicité", "desc_1": "Découvrez, planifiez et explorez en toute simplicité",

View file

@ -248,7 +248,11 @@
"welcome_map_info": "Avventure pubbliche su questo server", "welcome_map_info": "Avventure pubbliche su questo server",
"reservation_number": "Numero di prenotazione", "reservation_number": "Numero di prenotazione",
"open_in_maps": "Aperto in mappe", "open_in_maps": "Aperto in mappe",
"all_day": "Tutto il giorno" "all_day": "Tutto il giorno",
"collection_no_start_end_date": "L'aggiunta di una data di inizio e fine alla raccolta sbloccherà le funzionalità di pianificazione dell'itinerario nella pagina di raccolta.",
"date_itinerary": "Itinerario della data",
"no_ordered_items": "Aggiungi articoli con date alla collezione per vederli qui.",
"ordered_itinerary": "Itinerario ordinato"
}, },
"home": { "home": {
"desc_1": "Scopri, pianifica ed esplora con facilità", "desc_1": "Scopri, pianifica ed esplora con facilità",

View file

@ -248,7 +248,11 @@
"reservation_number": "예약 번호", "reservation_number": "예약 번호",
"welcome_map_info": "이 서버의 공개 모험", "welcome_map_info": "이 서버의 공개 모험",
"open_in_maps": "지도에서 열립니다", "open_in_maps": "지도에서 열립니다",
"all_day": "하루 종일" "all_day": "하루 종일",
"collection_no_start_end_date": "컬렉션에 시작 및 종료 날짜를 추가하면 컬렉션 페이지에서 여정 계획 기능이 잠금 해제됩니다.",
"date_itinerary": "날짜 일정",
"no_ordered_items": "컬렉션에 날짜가있는 항목을 추가하여 여기에서 확인하십시오.",
"ordered_itinerary": "주문한 여정"
}, },
"auth": { "auth": {
"both_passwords_required": "두 암호 모두 필요합니다", "both_passwords_required": "두 암호 모두 필요합니다",

View file

@ -248,7 +248,11 @@
"price": "Prijs", "price": "Prijs",
"region": "Regio", "region": "Regio",
"open_in_maps": "Open in kaarten", "open_in_maps": "Open in kaarten",
"all_day": "De hele dag" "all_day": "De hele dag",
"collection_no_start_end_date": "Als u een start- en einddatum aan de collectie toevoegt, ontgrendelt u de functies van de planning van de route ontgrendelen in de verzamelpagina.",
"date_itinerary": "Datumroute",
"no_ordered_items": "Voeg items toe met datums aan de collectie om ze hier te zien.",
"ordered_itinerary": "Besteld reisschema"
}, },
"home": { "home": {
"desc_1": "Ontdek, plan en verken met gemak", "desc_1": "Ontdek, plan en verken met gemak",

View file

@ -296,7 +296,11 @@
"reservation_number": "Numer rezerwacji", "reservation_number": "Numer rezerwacji",
"welcome_map_info": "Publiczne przygody na tym serwerze", "welcome_map_info": "Publiczne przygody na tym serwerze",
"open_in_maps": "Otwarte w mapach", "open_in_maps": "Otwarte w mapach",
"all_day": "Cały dzień" "all_day": "Cały dzień",
"collection_no_start_end_date": "Dodanie daty rozpoczęcia i końca do kolekcji odblokuje funkcje planowania planu podróży na stronie kolekcji.",
"date_itinerary": "Trasa daty",
"no_ordered_items": "Dodaj przedmioty z datami do kolekcji, aby je zobaczyć tutaj.",
"ordered_itinerary": "Zamówiono trasę"
}, },
"worldtravel": { "worldtravel": {
"country_list": "Lista krajów", "country_list": "Lista krajów",

View file

@ -248,7 +248,11 @@
"region": "Område", "region": "Område",
"reservation_number": "Bokningsnummer", "reservation_number": "Bokningsnummer",
"open_in_maps": "Kappas in", "open_in_maps": "Kappas in",
"all_day": "Hela dagen" "all_day": "Hela dagen",
"collection_no_start_end_date": "Att lägga till ett start- och slutdatum till samlingen kommer att låsa upp planeringsfunktioner för resplan på insamlingssidan.",
"date_itinerary": "Datum resplan",
"no_ordered_items": "Lägg till objekt med datum i samlingen för att se dem här.",
"ordered_itinerary": "Beställd resplan"
}, },
"home": { "home": {
"desc_1": "Upptäck, planera och utforska med lätthet", "desc_1": "Upptäck, planera och utforska med lätthet",

View file

@ -296,7 +296,11 @@
"price": "价格", "price": "价格",
"reservation_number": "预订号", "reservation_number": "预订号",
"open_in_maps": "在地图上打开", "open_in_maps": "在地图上打开",
"all_day": "整天" "all_day": "整天",
"collection_no_start_end_date": "在集合页面中添加开始日期和结束日期将在“收集”页面中解锁行程计划功能。",
"date_itinerary": "日期行程",
"no_ordered_items": "将带有日期的项目添加到集合中,以便在此处查看它们。",
"ordered_itinerary": "订购了行程"
}, },
"auth": { "auth": {
"forgot_password": "忘记密码?", "forgot_password": "忘记密码?",

View file

@ -208,7 +208,7 @@ export const actions: Actions = {
const order_direction = formData.get('order_direction') as string; const order_direction = formData.get('order_direction') as string;
const order_by = formData.get('order_by') as string; const order_by = formData.get('order_by') as string;
console.log(order_direction, order_by); // console.log(order_direction, order_by);
let adventures: Adventure[] = []; let adventures: Adventure[] = [];
@ -242,7 +242,7 @@ export const actions: Actions = {
previous = res.previous; previous = res.previous;
count = res.count; count = res.count;
adventures = [...adventures, ...visited]; adventures = [...adventures, ...visited];
console.log(next, previous, count); // console.log(next, previous, count);
} }
return { return {

View file

@ -15,8 +15,6 @@
let collections: Collection[] = data.props.adventures || []; let collections: Collection[] = data.props.adventures || [];
let currentSort = { attribute: 'name', order: 'asc' };
let newType: string = ''; let newType: string = '';
let resultsPerPage: number = 25; let resultsPerPage: number = 25;
@ -235,17 +233,36 @@
aria-label={$t(`adventures.descending`)} aria-label={$t(`adventures.descending`)}
/> />
</div> </div>
<br /> <p class="text-lg font-semibold mt-2 mb-2">{$t('adventures.order_by')}</p>
<div class="join">
<input <input
class="join-item btn btn-neutral"
type="radio"
name="order_by"
id="upated_at"
value="upated_at"
aria-label={$t('adventures.updated')}
checked
/>
<input
class="join-item btn btn-neutral"
type="radio"
name="order_by"
id="start_date"
value="start_date"
aria-label={$t('adventures.start_date')}
/>
<input
class="join-item btn btn-neutral"
type="radio" type="radio"
name="order_by" name="order_by"
id="name" id="name"
class="radio radio-primary"
checked
value="name" value="name"
hidden aria-label={$t('adventures.name')}
/> />
</div>
<br />
<button type="submit" class="btn btn-success btn-primary mt-4" <button type="submit" class="btn btn-success btn-primary mt-4"
>{$t(`adventures.sort`)}</button >{$t(`adventures.sort`)}</button
> >