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

is visited

This commit is contained in:
Sean Morley 2024-10-31 09:51:04 -04:00
parent 9d42dbac98
commit 727daf0cfd
10 changed files with 284 additions and 281 deletions

View file

@ -1,3 +1,4 @@
from django.utils import timezone
import os
from .models import Adventure, AdventureImage, ChecklistItem, Collection, Note, Transportation, Checklist, Visit
from rest_framework import serializers
@ -19,18 +20,28 @@ class AdventureImageSerializer(serializers.ModelSerializer):
return representation
class VisitSerializer(serializers.ModelSerializer):
class Meta:
model = Visit
fields = ['id', 'start_date', 'end_date', 'notes']
read_only_fields = ['id']
class AdventureSerializer(serializers.ModelSerializer):
images = AdventureImageSerializer(many=True, read_only=True)
visits = VisitSerializer(many=True, read_only=False)
is_visited = serializers.SerializerMethodField()
class Meta:
model = Adventure
fields = ['id', 'user_id', 'name', 'description', 'rating', 'activity_types', 'location', 'is_public', 'collection', 'created_at', 'updated_at', 'images', 'link', 'type', 'longitude', 'latitude', 'visits']
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id']
fields = ['id', 'user_id', 'name', 'description', 'rating', 'activity_types', 'location', 'is_public', 'collection', 'created_at', 'updated_at', 'images', 'link', 'type', 'longitude', 'latitude', 'visits', 'is_visited']
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id', 'is_visited']
def get_is_visited(self, obj):
current_date = timezone.now().date()
for visit in obj.visits.all():
if visit.start_date and visit.end_date and (visit.start_date <= current_date):
return True
return False
def to_representation(self, instance):
representation = super().to_representation(instance)

View file

@ -16,7 +16,6 @@
import CollectionLink from './CollectionLink.svelte';
import DotsHorizontal from '~icons/mdi/dots-horizontal';
import DeleteWarning from './DeleteWarning.svelte';
import { isAdventureVisited } from '$lib';
import CardCarousel from './CardCarousel.svelte';
import { t } from 'svelte-i18n';
@ -132,7 +131,7 @@
<div>
<div class="badge badge-primary">{$t(`adventures.activities.${adventure.type}`)}</div>
<div class="badge badge-success">
{isAdventureVisited(adventure) ? $t('adventures.visited') : $t('adventures.planned')}
{adventure.is_visited ? $t('adventures.visited') : $t('adventures.planned')}
</div>
<div class="badge badge-secondary">
{adventure.is_public ? $t('adventures.public') : $t('adventures.private')}

View file

@ -28,6 +28,7 @@
import ActivityComplete from './ActivityComplete.svelte';
import { appVersion } from '$lib/config';
import { ADVENTURE_TYPES } from '$lib';
import RegionCard from './RegionCard.svelte';
let wikiError: string = '';
@ -629,7 +630,11 @@ it would also work to just use on:click on the MapLibre component itself. -->
{#if reverseGeocodePlace}
<div class="mt-2">
<p>{reverseGeocodePlace.region}, {reverseGeocodePlace.country}</p>
<p>{reverseGeocodePlace.is_visited ? 'Visited' : 'Not Visited'}</p>
<p>
{reverseGeocodePlace.is_visited
? $t('adventures.visited')
: $t('adventures.not_visited')}
</p>
</div>
{#if !reverseGeocodePlace.is_visited}
<div role="alert" class="alert alert-info mt-2">
@ -647,10 +652,15 @@ it would also work to just use on:click on the MapLibre component itself. -->
></path>
</svg>
<span
>Mark region {reverseGeocodePlace.region}, {reverseGeocodePlace.country} as visited?</span
>{$t('adventures.mark_region_as_visited', {
values: {
region: reverseGeocodePlace.region,
country: reverseGeocodePlace.country
}
})}</span
>
<button type="button" class="btn btn-neutral" on:click={markVisited}>
Mark as Visited
{$t('adventures.mark_visited')}
</button>
</div>
{/if}

View file

@ -253,28 +253,6 @@ export let ADVENTURE_TYPES = [
{ type: 'other', label: 'Other' }
];
/**
* Checks if an adventure has been visited.
*
* This function determines if the `adventure.visits` array contains at least one visit
* with a `start_date` that is before the current date.
*
* @param adventure - The adventure object to check.
* @returns `true` if the adventure has been visited, otherwise `false`.
*/
export function isAdventureVisited(adventure: Adventure) {
const currentTime = Date.now();
// Check if any visit's start_date is before the current time.
return (
adventure.visits &&
adventure.visits.some((visit) => {
const visitStartTime = new Date(visit.start_date).getTime();
return visit.start_date && visitStartTime <= currentTime;
})
);
}
export function getRandomBackground() {
const randomIndex = Math.floor(Math.random() * randomBackgrounds.backgrounds.length);
return randomBackgrounds.backgrounds[randomIndex] as Background;

View file

@ -37,6 +37,7 @@ export type Adventure = {
is_public: boolean;
created_at?: string | null;
updated_at?: string | null;
is_visited?: boolean;
};
export type Country = {

View file

@ -139,6 +139,7 @@
"unarchive": "Unarchive",
"archive": "Archive",
"no_collections_found": "No collections found to add this adventure to.",
"not_visited": "Not Visited",
"archived_collection_message": "Collection archived successfully!",
"unarchived_collection_message": "Collection unarchived successfully!",
"delete_collection_success": "Collection deleted successfully!",
@ -173,6 +174,8 @@
"basic_information": "Basic Information",
"adventure_not_found": "There are no adventures to display. Add some using the plus button at the bottom right or try changing filters!",
"no_adventures_found": "No adventures found",
"mark_region_as_visited": "Mark region {region}, {country} as visited?",
"mark_visited": "Mark Visited",
"activities": {
"general": "General 🌍",
"outdoor": "Outdoor 🏞️",

View file

@ -1,245 +1,248 @@
{
"navbar": {
"adventures": "Aventuras",
"collections": "Colecciones",
"worldtravel": "Viajar por el Mundo",
"map": "Mapa",
"users": "Usuarios",
"search": "Buscar",
"profile": "Perfil",
"greeting": "Hola",
"my_adventures": "Mis Aventuras",
"my_activities": "Mis Actividades",
"shared_with_me": "Compartido Conmigo",
"settings": "Configuraciones",
"logout": "Cerrar Sesión",
"about": "Acerca de AdventureLog",
"documentation": "Documentación",
"discord": "Discord",
"theme_selection": "Selección de Tema",
"themes": {
"light": "Claro",
"dark": "Oscuro",
"night": "Noche",
"forest": "Bosque",
"aestetic-dark": "Estético Oscuro",
"aestetic-light": "Estético Claro",
"aqua": "Aqua"
}
},
"about": {
"about": "Acerca de",
"license": "Licenciado bajo la Licencia GPL-3.0.",
"source_code": "Código Fuente",
"message": "Hecho con ❤️ en los Estados Unidos.",
"oss_attributions": "Atribuciones de Código Abierto",
"nominatim_1": "La búsqueda de ubicaciones y geocodificación es proporcionada por",
"nominatim_2": "Sus datos están licenciados bajo la licencia ODbL.",
"other_attributions": "Atribuciones adicionales se pueden encontrar en el archivo README.",
"close": "Cerrar"
},
"home": {
"hero_1": "Descubre las Aventuras Más Emocionantes del Mundo",
"hero_2": "Descubre y planifica tu próxima aventura con AdventureLog. Explora destinos impresionantes, crea itinerarios personalizados y mantente conectado en todo momento.",
"go_to": "Ir a AdventureLog",
"key_features": "Características Clave",
"desc_1": "Descubre, Planifica y Explora Fácilmente",
"desc_2": "AdventureLog está diseñado para simplificar tu viaje, brindándote las herramientas y recursos para planificar, empacar y navegar tu próxima aventura inolvidable.",
"feature_1": "Registro de Viajes",
"feature_1_desc": "Mantén un registro de tus aventuras con un diario de viaje personalizado y comparte tus experiencias con amigos y familiares.",
"feature_2": "Planificación de Viajes",
"feature_2_desc": "Crea fácilmente itinerarios personalizados y obtén un desglose diario de tu viaje.",
"feature_3": "Mapa de Viaje",
"feature_3_desc": "Visualiza tus viajes por el mundo con un mapa interactivo y explora nuevos destinos."
},
"adventures": {
"collection_remove_success": "¡Aventura eliminada de la colección con éxito!",
"collection_remove_error": "Error al eliminar la aventura de la colección",
"collection_link_success": "¡Aventura vinculada a la colección con éxito!",
"collection_link_error": "Error al vincular la aventura a la colección",
"adventure_delete_confirm": "¿Estás seguro de que quieres eliminar esta aventura? Esta acción no se puede deshacer.",
"open_details": "Abrir Detalles",
"edit_adventure": "Editar Aventura",
"remove_from_collection": "Eliminar de la Colección",
"add_to_collection": "Añadir a la Colección",
"delete": "Eliminar",
"activities": {
"activity": "Actividad 🏄",
"art_museums": "Arte",
"attraction": "Atracción 🎢",
"culture": "Cultura 🎭",
"dining": "Cenar 🍽️",
"event": "Evento 🎉",
"festivals": "Festivales 🎪",
"fitness": "Fitness 🏋️",
"general": "Generales 🌍",
"hiking": "Senderismo 🥾",
"historical_sites": "Sitios Históricos 🏛️",
"lodging": "Alojamiento 🛌",
"music_concerts": "Música",
"nightlife": "Vida nocturna 🌃",
"other": "Otro",
"outdoor": "Al aire libre 🏞️",
"shopping": "Compras 🛍️",
"spiritual_journeys": "Viajes espirituales 🧘‍♀️",
"transportation": "Transporte 🚗",
"volunteer_work": "Trabajo voluntario 🤝",
"water_sports": "Deportes acuáticos 🚤",
"wildlife": "Vida silvestre 🦒"
},
"no_image_found": "No se encontró ninguna imagen",
"adventure_details": "Detalles de la aventura",
"adventure_type": "Tipo de aventura",
"collection": "Recopilación",
"homepage": "Página principal",
"latitude": "Latitud",
"longitude": "Longitud",
"not_found": "Aventura no encontrada",
"not_found_desc": "La aventura que buscabas no se pudo encontrar. \nPruebe una aventura diferente o vuelva a consultar más tarde.",
"visit": "Visita",
"visits": "Visitas",
"adventure": "Aventura",
"count_txt": "resultados que coinciden con su búsqueda",
"create_new": "Crear nuevo...",
"ascending": "Ascendente",
"collection_adventures": "Incluir aventuras de colección",
"date": "Fecha",
"descending": "Descendente",
"filter": "Filtrar",
"name": "Nombre",
"order_by": "Ordenar por",
"order_direction": "Dirección del pedido",
"rating": "Clasificación",
"sort": "Clasificar",
"sources": "Fuentes",
"updated": "Actualizado",
"category_filter": "Filtro de categoría",
"clear": "Claro",
"archived_collections": "Colecciones archivadas",
"close_filters": "Cerrar filtros",
"my_collections": "Mis colecciones",
"open_filters": "Abrir filtros",
"private": "Privado",
"public": "Público",
"archived_collection_message": "¡Colección archivada exitosamente!",
"delete_collection": "Eliminar colección",
"delete_collection_success": "¡Colección eliminada exitosamente!",
"delete_collection_warning": "¿Estás seguro de que deseas eliminar esta colección? \nEsto también eliminará todas las aventuras vinculadas. \nEsta acción no se puede deshacer.",
"unarchived_collection_message": "¡Colección desarchivada exitosamente!",
"archive": "Archivo",
"archived": "Archivado",
"edit_collection": "Editar colección",
"share": "Compartir",
"unarchive": "Desarchivar",
"cancel": "Cancelar",
"adventure_delete_success": "¡Aventura eliminada con éxito!",
"delete_adventure": "Eliminar aventura",
"planned": "Planificado",
"visited": "Visitado",
"dates": "Fechas",
"duration": "Duración",
"image_removed_error": "Error al eliminar la imagen",
"image_removed_success": "¡Imagen eliminada exitosamente!",
"image_upload_error": "Error al subir la imagen",
"image_upload_success": "¡Imagen cargada exitosamente!",
"no_image_url": "No se encontró ninguna imagen en esa URL.",
"start_before_end_error": "La fecha de inicio debe ser anterior a la fecha de finalización.",
"wiki_image_error": "Error al obtener la imagen de Wikipedia",
"actions": "Comportamiento",
"activity": "Actividad",
"see_adventures": "Ver Aventuras",
"activity_types": "Tipos de actividad",
"add": "Agregar",
"add_notes": "Agregar notas",
"adventure_create_error": "No se pudo crear la aventura",
"adventure_created": "Aventura creada",
"adventure_update_error": "No se pudo actualizar la aventura",
"adventure_updated": "Aventura actualizada",
"basic_information": "Información básica",
"category": "Categoría",
"clear_map": "Borrar mapa",
"copy_link": "Copiar enlace",
"date_constrain": "Restringir a las fechas de recolección",
"description": "Descripción",
"end_date": "Fecha de finalización",
"fetch_image": "Obtener imagen",
"generate_desc": "Generar descripción",
"image": "Imagen",
"image_fetch_failed": "No se pudo recuperar la imagen",
"link": "Enlace",
"location": "Ubicación",
"location_information": "Información de ubicación",
"my_images": "Mis imágenes",
"my_visits": "Mis visitas",
"new_adventure": "Nueva aventura",
"no_description_found": "No se encontró ninguna descripción",
"no_images": "Sin imágenes",
"no_location": "Por favor ingresa una ubicación",
"no_results": "No se encontraron resultados",
"no_start_date": "Por favor ingrese una fecha de inicio",
"public_adventure": "Aventura pública",
"remove": "Eliminar",
"save_next": "Ahorrar",
"search_for_location": "Buscar una ubicación",
"search_results": "Resultados de búsqueda",
"select_adventure_category": "Seleccionar categoría de aventura",
"share_adventure": "¡Comparte esta aventura!",
"start_date": "Fecha de inicio",
"upload_image": "Subir imagen",
"upload_images_here": "Sube imágenes aquí",
"url": "URL",
"warning": "Advertencia",
"wiki_desc": "Extrae un extracto de un artículo de Wikipedia que coincide con el nombre de la aventura.",
"wikipedia": "Wikipedia",
"add_an_activity": "Agregar una actividad",
"adventure_not_found": "No hay aventuras que mostrar. \n¡Agregue algunos usando el botón más en la parte inferior derecha o intente cambiar los filtros!",
"no_adventures_found": "No se encontraron aventuras",
"no_collections_found": "No se encontraron colecciones para agregar esta aventura.",
"my_adventures": "mis aventuras",
"no_linkable_adventures": "No se encontraron aventuras que puedan vincularse a esta colección."
},
"worldtravel": {
"all": "Todo",
"all_subregions": "Todas las subregiones",
"clear_search": "Borrar búsqueda",
"completely_visited": "Completamente visitado",
"no_countries_found": "No se encontraron países",
"not_visited": "No visitado",
"num_countries": "países encontrados",
"partially_visited": "Parcialmente visitado",
"country_list": "Lista de países"
},
"auth": {
"forgot_password": "¿Has olvidado tu contraseña?",
"login": "Acceso",
"login_error": "No se puede iniciar sesión con las credenciales proporcionadas.",
"password": "Contraseña",
"signup": "Inscribirse",
"username": "Nombre de usuario",
"confirm_password": "confirmar Contraseña",
"email": "Correo electrónico",
"first_name": "Nombre de pila",
"last_name": "Apellido",
"registration_disabled": "El registro está actualmente deshabilitado.",
"profile_picture": "Foto de perfil",
"public_profile": "Perfil público",
"public_tooltip": "Con un perfil público, los usuarios pueden compartir colecciones con usted y ver su perfil en la página de usuarios."
},
"users": {
"no_users_found": "No se encontraron usuarios con perfiles públicos."
},
"settings": {
"account_settings": "Configuración de cuenta de usuario",
"confirm_new_password": "Confirmar nueva contraseña",
"current_email": "Correo electrónico actual",
"email_change": "Cambiar correo electrónico",
"new_email": "Nuevo correo electrónico",
"new_password": "Nueva contraseña",
"no_email_set": "No hay correo electrónico configurado",
"password_change": "Cambiar la contraseña",
"settings_page": "Página de configuración",
"update": "Actualizar",
"update_error": "Error al actualizar la configuración",
"update_success": "¡La configuración se actualizó correctamente!"
}
"navbar": {
"adventures": "Aventuras",
"collections": "Colecciones",
"worldtravel": "Viajar por el Mundo",
"map": "Mapa",
"users": "Usuarios",
"search": "Buscar",
"profile": "Perfil",
"greeting": "Hola",
"my_adventures": "Mis Aventuras",
"my_activities": "Mis Actividades",
"shared_with_me": "Compartido Conmigo",
"settings": "Configuraciones",
"logout": "Cerrar Sesión",
"about": "Acerca de AdventureLog",
"documentation": "Documentación",
"discord": "Discord",
"theme_selection": "Selección de Tema",
"themes": {
"light": "Claro",
"dark": "Oscuro",
"night": "Noche",
"forest": "Bosque",
"aestetic-dark": "Estético Oscuro",
"aestetic-light": "Estético Claro",
"aqua": "Aqua"
}
},
"about": {
"about": "Acerca de",
"license": "Licenciado bajo la Licencia GPL-3.0.",
"source_code": "Código Fuente",
"message": "Hecho con ❤️ en los Estados Unidos.",
"oss_attributions": "Atribuciones de Código Abierto",
"nominatim_1": "La búsqueda de ubicaciones y geocodificación es proporcionada por",
"nominatim_2": "Sus datos están licenciados bajo la licencia ODbL.",
"other_attributions": "Atribuciones adicionales se pueden encontrar en el archivo README.",
"close": "Cerrar"
},
"home": {
"hero_1": "Descubre las Aventuras Más Emocionantes del Mundo",
"hero_2": "Descubre y planifica tu próxima aventura con AdventureLog. Explora destinos impresionantes, crea itinerarios personalizados y mantente conectado en todo momento.",
"go_to": "Ir a AdventureLog",
"key_features": "Características Clave",
"desc_1": "Descubre, Planifica y Explora Fácilmente",
"desc_2": "AdventureLog está diseñado para simplificar tu viaje, brindándote las herramientas y recursos para planificar, empacar y navegar tu próxima aventura inolvidable.",
"feature_1": "Registro de Viajes",
"feature_1_desc": "Mantén un registro de tus aventuras con un diario de viaje personalizado y comparte tus experiencias con amigos y familiares.",
"feature_2": "Planificación de Viajes",
"feature_2_desc": "Crea fácilmente itinerarios personalizados y obtén un desglose diario de tu viaje.",
"feature_3": "Mapa de Viaje",
"feature_3_desc": "Visualiza tus viajes por el mundo con un mapa interactivo y explora nuevos destinos."
},
"adventures": {
"collection_remove_success": "¡Aventura eliminada de la colección con éxito!",
"collection_remove_error": "Error al eliminar la aventura de la colección",
"collection_link_success": "¡Aventura vinculada a la colección con éxito!",
"collection_link_error": "Error al vincular la aventura a la colección",
"adventure_delete_confirm": "¿Estás seguro de que quieres eliminar esta aventura? Esta acción no se puede deshacer.",
"open_details": "Abrir Detalles",
"edit_adventure": "Editar Aventura",
"remove_from_collection": "Eliminar de la Colección",
"add_to_collection": "Añadir a la Colección",
"delete": "Eliminar",
"activities": {
"activity": "Actividad 🏄",
"art_museums": "Arte",
"attraction": "Atracción 🎢",
"culture": "Cultura 🎭",
"dining": "Cenar 🍽️",
"event": "Evento 🎉",
"festivals": "Festivales 🎪",
"fitness": "Fitness 🏋️",
"general": "Generales 🌍",
"hiking": "Senderismo 🥾",
"historical_sites": "Sitios Históricos 🏛️",
"lodging": "Alojamiento 🛌",
"music_concerts": "Música",
"nightlife": "Vida nocturna 🌃",
"other": "Otro",
"outdoor": "Al aire libre 🏞️",
"shopping": "Compras 🛍️",
"spiritual_journeys": "Viajes espirituales 🧘‍♀️",
"transportation": "Transporte 🚗",
"volunteer_work": "Trabajo voluntario 🤝",
"water_sports": "Deportes acuáticos 🚤",
"wildlife": "Vida silvestre 🦒"
},
"no_image_found": "No se encontró ninguna imagen",
"adventure_details": "Detalles de la aventura",
"adventure_type": "Tipo de aventura",
"collection": "Recopilación",
"homepage": "Página principal",
"latitude": "Latitud",
"longitude": "Longitud",
"not_found": "Aventura no encontrada",
"not_found_desc": "La aventura que buscabas no se pudo encontrar. \nPruebe una aventura diferente o vuelva a consultar más tarde.",
"visit": "Visita",
"visits": "Visitas",
"adventure": "Aventura",
"count_txt": "resultados que coinciden con su búsqueda",
"create_new": "Crear nuevo...",
"ascending": "Ascendente",
"collection_adventures": "Incluir aventuras de colección",
"date": "Fecha",
"descending": "Descendente",
"filter": "Filtrar",
"name": "Nombre",
"order_by": "Ordenar por",
"order_direction": "Dirección del pedido",
"rating": "Clasificación",
"sort": "Clasificar",
"sources": "Fuentes",
"updated": "Actualizado",
"category_filter": "Filtro de categoría",
"clear": "Claro",
"archived_collections": "Colecciones archivadas",
"close_filters": "Cerrar filtros",
"my_collections": "Mis colecciones",
"open_filters": "Abrir filtros",
"private": "Privado",
"public": "Público",
"archived_collection_message": "¡Colección archivada exitosamente!",
"delete_collection": "Eliminar colección",
"delete_collection_success": "¡Colección eliminada exitosamente!",
"delete_collection_warning": "¿Estás seguro de que deseas eliminar esta colección? \nEsto también eliminará todas las aventuras vinculadas. \nEsta acción no se puede deshacer.",
"unarchived_collection_message": "¡Colección desarchivada exitosamente!",
"archive": "Archivo",
"archived": "Archivado",
"edit_collection": "Editar colección",
"share": "Compartir",
"unarchive": "Desarchivar",
"cancel": "Cancelar",
"adventure_delete_success": "¡Aventura eliminada con éxito!",
"delete_adventure": "Eliminar aventura",
"planned": "Planificado",
"visited": "Visitado",
"dates": "Fechas",
"duration": "Duración",
"image_removed_error": "Error al eliminar la imagen",
"image_removed_success": "¡Imagen eliminada exitosamente!",
"image_upload_error": "Error al subir la imagen",
"image_upload_success": "¡Imagen cargada exitosamente!",
"no_image_url": "No se encontró ninguna imagen en esa URL.",
"start_before_end_error": "La fecha de inicio debe ser anterior a la fecha de finalización.",
"wiki_image_error": "Error al obtener la imagen de Wikipedia",
"actions": "Comportamiento",
"activity": "Actividad",
"see_adventures": "Ver Aventuras",
"activity_types": "Tipos de actividad",
"add": "Agregar",
"add_notes": "Agregar notas",
"adventure_create_error": "No se pudo crear la aventura",
"adventure_created": "Aventura creada",
"adventure_update_error": "No se pudo actualizar la aventura",
"adventure_updated": "Aventura actualizada",
"basic_information": "Información básica",
"category": "Categoría",
"clear_map": "Borrar mapa",
"copy_link": "Copiar enlace",
"date_constrain": "Restringir a las fechas de recolección",
"description": "Descripción",
"end_date": "Fecha de finalización",
"fetch_image": "Obtener imagen",
"generate_desc": "Generar descripción",
"image": "Imagen",
"image_fetch_failed": "No se pudo recuperar la imagen",
"link": "Enlace",
"location": "Ubicación",
"location_information": "Información de ubicación",
"my_images": "Mis imágenes",
"my_visits": "Mis visitas",
"new_adventure": "Nueva aventura",
"no_description_found": "No se encontró ninguna descripción",
"no_images": "Sin imágenes",
"no_location": "Por favor ingresa una ubicación",
"no_results": "No se encontraron resultados",
"no_start_date": "Por favor ingrese una fecha de inicio",
"public_adventure": "Aventura pública",
"remove": "Eliminar",
"save_next": "Ahorrar",
"search_for_location": "Buscar una ubicación",
"search_results": "Resultados de búsqueda",
"select_adventure_category": "Seleccionar categoría de aventura",
"share_adventure": "¡Comparte esta aventura!",
"start_date": "Fecha de inicio",
"upload_image": "Subir imagen",
"upload_images_here": "Sube imágenes aquí",
"url": "URL",
"warning": "Advertencia",
"wiki_desc": "Extrae un extracto de un artículo de Wikipedia que coincide con el nombre de la aventura.",
"wikipedia": "Wikipedia",
"add_an_activity": "Agregar una actividad",
"adventure_not_found": "No hay aventuras que mostrar. \n¡Agregue algunos usando el botón más en la parte inferior derecha o intente cambiar los filtros!",
"no_adventures_found": "No se encontraron aventuras",
"no_collections_found": "No se encontraron colecciones para agregar esta aventura.",
"my_adventures": "mis aventuras",
"no_linkable_adventures": "No se encontraron aventuras que puedan vincularse a esta colección.",
"mark_region_as_visited": "¿Marcar región {region}, {country} como visitada?",
"mark_visited": "Marcos visitó",
"not_visited": "No visitado"
},
"worldtravel": {
"all": "Todo",
"all_subregions": "Todas las subregiones",
"clear_search": "Borrar búsqueda",
"completely_visited": "Completamente visitado",
"no_countries_found": "No se encontraron países",
"not_visited": "No visitado",
"num_countries": "países encontrados",
"partially_visited": "Parcialmente visitado",
"country_list": "Lista de países"
},
"auth": {
"forgot_password": "¿Has olvidado tu contraseña?",
"login": "Acceso",
"login_error": "No se puede iniciar sesión con las credenciales proporcionadas.",
"password": "Contraseña",
"signup": "Inscribirse",
"username": "Nombre de usuario",
"confirm_password": "confirmar Contraseña",
"email": "Correo electrónico",
"first_name": "Nombre de pila",
"last_name": "Apellido",
"registration_disabled": "El registro está actualmente deshabilitado.",
"profile_picture": "Foto de perfil",
"public_profile": "Perfil público",
"public_tooltip": "Con un perfil público, los usuarios pueden compartir colecciones con usted y ver su perfil en la página de usuarios."
},
"users": {
"no_users_found": "No se encontraron usuarios con perfiles públicos."
},
"settings": {
"account_settings": "Configuración de cuenta de usuario",
"confirm_new_password": "Confirmar nueva contraseña",
"current_email": "Correo electrónico actual",
"email_change": "Cambiar correo electrónico",
"new_email": "Nuevo correo electrónico",
"new_password": "Nueva contraseña",
"no_email_set": "No hay correo electrónico configurado",
"password_change": "Cambiar la contraseña",
"settings_page": "Página de configuración",
"update": "Actualizar",
"update_error": "Error al actualizar la configuración",
"update_success": "¡La configuración se actualizó correctamente!"
}
}

View file

@ -20,8 +20,7 @@
groupAdventuresByDate,
groupNotesByDate,
groupTransportationsByDate,
groupChecklistsByDate,
isAdventureVisited
groupChecklistsByDate
} from '$lib';
import ChecklistCard from '$lib/components/ChecklistCard.svelte';
import ChecklistModal from '$lib/components/ChecklistModal.svelte';
@ -45,7 +44,7 @@
$: {
numAdventures = adventures.length;
numVisited = adventures.filter(isAdventureVisited).length;
numVisited = adventures.filter((adventure) => adventure.is_visited).length;
}
let notFound: boolean = false;

View file

@ -46,6 +46,7 @@ export const load = (async (event) => {
name: adventure.name,
visits: adventure.visits,
type: adventure.type,
is_visited: adventure.is_visited
};
});

View file

@ -1,7 +1,6 @@
<script>
// @ts-nocheck
import { isAdventureVisited } from '$lib';
import AdventureModal from '$lib/components/AdventureModal.svelte';
import {
DefaultMarker,
@ -25,8 +24,7 @@
let showPlanned = true;
$: filteredMarkers = markers.filter(
(marker) =>
(showVisited && isAdventureVisited(marker)) || (showPlanned && !isAdventureVisited(marker))
(marker) => (showVisited && marker.is_visited) || (showPlanned && !marker.is_visited)
);
let newMarker = [];
@ -145,7 +143,7 @@
standardControls
>
{#each filteredMarkers as marker}
{#if isAdventureVisited(marker)}
{#if marker.is_visited}
<Marker
lngLat={marker.lngLat}
on:click={() => (clickedName = marker.name)}
@ -205,7 +203,7 @@
<div class="text-lg text-black font-bold">{marker.name}</div>
<p class="font-semibold text-black text-md">Planned</p>
<p class="font-semibold text-black text-md">
{$t(`adventures.activities.${marker.type}`)}}
{$t(`adventures.activities.${marker.type}`)}
</p>
{#if marker.visits && marker.visits.length > 0}
<p class="text-black text-sm">