+
-
+
diff --git a/src/modules/trasporti/pages/MyRidesPage.scss b/src/modules/viaggi/pages/MyRidesPage.scss
similarity index 100%
rename from src/modules/trasporti/pages/MyRidesPage.scss
rename to src/modules/viaggi/pages/MyRidesPage.scss
diff --git a/src/modules/trasporti/pages/MyRidesPage.ts b/src/modules/viaggi/pages/MyRidesPage.ts
similarity index 97%
rename from src/modules/trasporti/pages/MyRidesPage.ts
rename to src/modules/viaggi/pages/MyRidesPage.ts
index 3dd10ff3..46918862 100644
--- a/src/modules/trasporti/pages/MyRidesPage.ts
+++ b/src/modules/viaggi/pages/MyRidesPage.ts
@@ -97,19 +97,19 @@ export default defineComponent({
};
const goToCreate = () => {
- router.push({ path: '/trasporti/richiedi' });
+ router.push({ path: '/viaggi/richiedi' });
};
const goToRide = (rideId: string) => {
- router.push(`/trasporti/ride/${rideId}`);
+ router.push(`/viaggi/ride/${rideId}`);
};
const goToProfile = (userId: string) => {
- router.push(`/trasporti/profilo/${userId}`);
+ router.push(`/viaggi/profilo/${userId}`);
};
const editRide = (rideId: string) => {
- router.push(`/trasporti/ride/${rideId}/modifica`);
+ router.push(`/viaggi/ride/${rideId}/modifica`);
};
const cancelRide = async (ride: Ride) => {
diff --git a/src/modules/trasporti/pages/MyRidesPage.vue b/src/modules/viaggi/pages/MyRidesPage.vue
similarity index 100%
rename from src/modules/trasporti/pages/MyRidesPage.vue
rename to src/modules/viaggi/pages/MyRidesPage.vue
diff --git a/src/modules/trasporti/pages/Myfeedbackpage.vue b/src/modules/viaggi/pages/Myfeedbackpage.vue
similarity index 97%
rename from src/modules/trasporti/pages/Myfeedbackpage.vue
rename to src/modules/viaggi/pages/Myfeedbackpage.vue
index ba3b92e6..a95d84c3 100644
--- a/src/modules/trasporti/pages/Myfeedbackpage.vue
+++ b/src/modules/viaggi/pages/Myfeedbackpage.vue
@@ -90,7 +90,7 @@
label="Esplora viaggi"
rounded
unelevated
- to="/trasporti"
+ to="/viaggi"
/>
@@ -347,12 +347,12 @@ export default defineComponent({
const viewProfile = (feedback: FeedbackItem) => {
const user = getOtherUser(feedback);
if (user?._id) {
- router.push(`/trasporti/profilo/${user._id}`);
+ router.push(`/viaggi/profilo/${user._id}`);
}
};
const viewRide = (rideId: string) => {
- router.push(`/trasporti/ride/${rideId}`);
+ router.push(`/viaggi/ride/${rideId}`);
};
const loadFeedbacks = async () => {
@@ -360,9 +360,9 @@ export default defineComponent({
try {
const [statsRes, receivedRes, givenRes] = await Promise.all([
- Api.SendReqWithData('/api/trasporti/feedback/stats', 'GET'),
- Api.SendReqWithData('/api/trasporti/feedback/received', 'GET'),
- Api.SendReqWithData('/api/trasporti/feedback/given', 'GET')
+ Api.SendReqWithData('/api/viaggi/feedback/stats', 'GET'),
+ Api.SendReqWithData('/api/viaggi/feedback/received', 'GET'),
+ Api.SendReqWithData('/api/viaggi/feedback/given', 'GET')
]);
if (statsRes.success) {
@@ -393,8 +393,8 @@ export default defineComponent({
try {
const endpoint = activeTab.value === 'received'
- ? '/api/trasporti/feedback/received'
- : '/api/trasporti/feedback/given';
+ ? '/api/viaggi/feedback/received'
+ : '/api/viaggi/feedback/given';
const response = await Api.SendReqWithData(`${endpoint}?page=${currentPage.value}`, 'GET');
diff --git a/src/modules/trasporti/pages/Requestspage.vue b/src/modules/viaggi/pages/Requestspage.vue
similarity index 96%
rename from src/modules/trasporti/pages/Requestspage.vue
rename to src/modules/viaggi/pages/Requestspage.vue
index 53748b2b..6ec94cfd 100644
--- a/src/modules/trasporti/pages/Requestspage.vue
+++ b/src/modules/viaggi/pages/Requestspage.vue
@@ -83,7 +83,7 @@
{{ emptyTitle }}
{{ emptyMessage }}
-
+
@@ -334,16 +334,16 @@ export default defineComponent({
const viewProfile = (request: RideRequest) => {
const user = getOtherUser(request);
- if (user?._id) router.push(`/trasporti/profilo/${user._id}`);
+ if (user?._id) router.push(`/viaggi/profilo/${user._id}`);
};
const viewRide = (rideId?: string) => {
- if (rideId) router.push(`/trasporti/ride/${rideId}`);
+ if (rideId) router.push(`/viaggi/ride/${rideId}`);
};
const openChat = (request: RideRequest) => {
const user = getOtherUser(request);
- if (user?._id) router.push(`/trasporti/chat?userId=${user._id}&rideId=${request.rideId}`);
+ if (user?._id) router.push(`/viaggi/chat?userId=${user._id}&rideId=${request.rideId}`);
};
const acceptRequest = (request: RideRequest) => {
@@ -365,8 +365,8 @@ export default defineComponent({
responding.value = true;
try {
const endpoint = responseAction.value === 'accept'
- ? `/api/trasporti/richieste/${selectedRequest.value._id}/accept`
- : `/api/trasporti/richieste/${selectedRequest.value._id}/reject`;
+ ? `/api/viaggi/richieste/${selectedRequest.value._id}/accept`
+ : `/api/viaggi/richieste/${selectedRequest.value._id}/reject`;
const response = await Api.SendReqWithData(endpoint, 'PUT', { message: responseMessage.value });
if (response.success) {
const index = receivedRequests.value.findIndex(r => r._id === selectedRequest.value?._id);
@@ -390,7 +390,7 @@ export default defineComponent({
const cancelRequest = async (request: RideRequest) => {
$q.dialog({ title: 'Annulla richiesta', message: 'Sei sicuro?', cancel: true }).onOk(async () => {
try {
- const response = await Api.SendReqWithData(`/api/trasporti/richieste/${request._id}/cancel`, 'PUT');
+ const response = await Api.SendReqWithData(`/api/viaggi/richieste/${request._id}/cancel`, 'PUT');
if (response.success) {
const index = sentRequests.value.findIndex(r => r._id === request._id);
if (index !== -1) sentRequests.value[index].status = 'cancelled';
@@ -406,9 +406,9 @@ export default defineComponent({
loading.value = true;
try {
const [statsRes, receivedRes, sentRes] = await Promise.all([
- Api.SendReqWithData('/api/trasporti/richieste/stats', 'GET'),
- Api.SendReqWithData('/api/trasporti/richieste/received', 'GET'),
- Api.SendReqWithData('/api/trasporti/richieste/sent', 'GET')
+ Api.SendReqWithData('/api/viaggi/richieste/stats', 'GET'),
+ Api.SendReqWithData('/api/viaggi/richieste/received', 'GET'),
+ Api.SendReqWithData('/api/viaggi/richieste/sent', 'GET')
]);
if (statsRes.success) stats.value = statsRes.data;
if (receivedRes.success) {
@@ -427,7 +427,7 @@ export default defineComponent({
loadingMore.value = true;
currentPage.value++;
try {
- const endpoint = activeTab.value === 'received' ? '/api/trasporti/richieste/received' : '/api/trasporti/richieste/sent';
+ const endpoint = activeTab.value === 'received' ? '/api/viaggi/richieste/received' : '/api/viaggi/richieste/sent';
const response = await Api.SendReqWithData(`${endpoint}?page=${currentPage.value}`, 'GET');
if (response.success) {
const newRequests = response.data.requests || [];
diff --git a/src/modules/trasporti/pages/RideCreatePage.scss b/src/modules/viaggi/pages/RideCreatePage.scss
similarity index 100%
rename from src/modules/trasporti/pages/RideCreatePage.scss
rename to src/modules/viaggi/pages/RideCreatePage.scss
diff --git a/src/modules/trasporti/pages/RideCreatePage.ts b/src/modules/viaggi/pages/RideCreatePage.ts
similarity index 98%
rename from src/modules/trasporti/pages/RideCreatePage.ts
rename to src/modules/viaggi/pages/RideCreatePage.ts
index 7288a89f..97e4df83 100644
--- a/src/modules/trasporti/pages/RideCreatePage.ts
+++ b/src/modules/viaggi/pages/RideCreatePage.ts
@@ -2,7 +2,7 @@ import { ref, reactive, computed, onMounted, defineComponent } from 'vue';
import { useRouter, useRoute } from 'vue-router';
import { useQuasar } from 'quasar';
import { useRides } from '../composables/useRides';
-import { useGeocoding } from '../composables/useGeocoding';
+import { useGeocoding } from '../composables/useGeocoding_OLD';
import { useDriverProfile } from '../composables/useDriverProfile';
import RideTypeToggle from '../components/ride/RideTypeToggle.vue';
import CityAutocomplete from '../components/ride/CityAutocomplete.vue';
@@ -272,8 +272,7 @@ export default defineComponent({
});
router.push({
- name: 'ride-detail',
- params: { id: response.data?._id || rideId.value },
+ path: `/viaggi/ride/${response.data?._id || rideId.value}`,
});
}
} catch (error: any) {
diff --git a/src/modules/trasporti/pages/RideCreatePage.vue b/src/modules/viaggi/pages/RideCreatePage.vue
similarity index 100%
rename from src/modules/trasporti/pages/RideCreatePage.vue
rename to src/modules/viaggi/pages/RideCreatePage.vue
diff --git a/src/modules/trasporti/pages/RideDetailPage.scss b/src/modules/viaggi/pages/RideDetailPage.scss
similarity index 100%
rename from src/modules/trasporti/pages/RideDetailPage.scss
rename to src/modules/viaggi/pages/RideDetailPage.scss
diff --git a/src/modules/trasporti/pages/RideDetailPage.ts b/src/modules/viaggi/pages/RideDetailPage.ts
similarity index 97%
rename from src/modules/trasporti/pages/RideDetailPage.ts
rename to src/modules/viaggi/pages/RideDetailPage.ts
index 30bf671e..c46931fa 100644
--- a/src/modules/trasporti/pages/RideDetailPage.ts
+++ b/src/modules/viaggi/pages/RideDetailPage.ts
@@ -194,11 +194,11 @@ export default defineComponent({
const goBack = () => router.back();
const goToProfile = (userId: string) => {
- router.push(`/trasporti/profilo/${userId}`);
+ router.push(`/viaggi/profilo/${userId}`);
};
const editRide = () => {
- router.push(`/trasporti/ride/${rideId.value}/modifica`);
+ router.push(`/viaggi/ride/${rideId.value}/modifica`);
};
const shareRide = async () => {
@@ -235,7 +235,7 @@ export default defineComponent({
try {
await deleteRide(rideId.value, reason);
$q.notify({ type: 'positive', message: 'Viaggio cancellato' });
- router.push('/trasporti/viaggi');
+ router.push('/viaggi/viaggi');
} catch (error: any) {
$q.notify({ type: 'negative', message: error.data?.message || error.message });
@@ -281,7 +281,7 @@ export default defineComponent({
try {
const response = await getOrCreateDirectChat(driverId.value, rideId.value);
if (response?.data) {
- router.push(`/trasporti/chat/${response.data._id}`);
+ router.push(`/viaggi/chat/${response.data._id}`);
}
} catch (error: any) {
$q.notify({ type: 'negative', message: error.data?.message || error.message });
@@ -293,7 +293,7 @@ export default defineComponent({
try {
const response = await getOrCreateDirectChat(userId, rideId.value);
if (response?.data) {
- router.push(`/trasporti/chat/${response.data._id}`);
+ router.push(`/viaggi/chat/${response.data._id}`);
}
} catch (error: any) {
$q.notify({ type: 'negative', message: error.data?.message || error.message });
diff --git a/src/modules/trasporti/pages/RideDetailPage.vue b/src/modules/viaggi/pages/RideDetailPage.vue
similarity index 100%
rename from src/modules/trasporti/pages/RideDetailPage.vue
rename to src/modules/viaggi/pages/RideDetailPage.vue
diff --git a/src/modules/trasporti/pages/RideSearchPage.scss b/src/modules/viaggi/pages/RideSearchPage.scss
similarity index 100%
rename from src/modules/trasporti/pages/RideSearchPage.scss
rename to src/modules/viaggi/pages/RideSearchPage.scss
diff --git a/src/modules/trasporti/pages/RideSearchPage.ts b/src/modules/viaggi/pages/RideSearchPage.ts
similarity index 80%
rename from src/modules/trasporti/pages/RideSearchPage.ts
rename to src/modules/viaggi/pages/RideSearchPage.ts
index 277d746c..470c458c 100644
--- a/src/modules/trasporti/pages/RideSearchPage.ts
+++ b/src/modules/viaggi/pages/RideSearchPage.ts
@@ -1,4 +1,4 @@
-import { ref, reactive, computed, onMounted, defineComponent } from 'vue';
+import { ref, reactive, computed, onMounted, defineComponent, nextTick } from 'vue';
import { useRouter } from 'vue-router';
import { useQuasar, LocalStorage } from 'quasar';
import { useRides } from '../composables/useRides';
@@ -27,14 +27,22 @@ export default defineComponent({
components: {
CityAutocomplete,
- RideCard
+ RideCard,
},
setup() {
const router = useRouter();
const $q = useQuasar();
- const { rides, loading: searching, searchRides, hasMorePages, loadMore: loadMoreRides } = useRides();
+ const resultsSection = ref
(null);
+
+ const {
+ rides,
+ loading: searching,
+ searchRides,
+ hasMorePages,
+ loadMore: loadMoreRides,
+ } = useRides();
const { createRequest } = useRideRequests();
const { getOrCreateDirectChat } = useChat();
@@ -51,13 +59,13 @@ export default defineComponent({
destination: null,
date: '',
seats: 1,
- passingThrough: null
+ passingThrough: null,
});
const advancedFilters = reactive({
noSmoking: false,
petsAllowed: false,
- luggageOk: false
+ luggageOk: false,
});
const recentSearches = ref([]);
@@ -65,21 +73,21 @@ export default defineComponent({
// Options
const typeOptions = [
{ label: '🟢 Cerco passaggio', value: 'offer' },
- { label: '🔴 Offro passaggio', value: 'request' }
+ { label: '🔴 Offro passaggio', value: 'request' },
];
const seatsOptions = [
{ label: '1 passeggero', value: 1 },
{ label: '2 passeggeri', value: 2 },
{ label: '3 passeggeri', value: 3 },
- { label: '4+ passeggeri', value: 4 }
+ { label: '4+ passeggeri', value: 4 },
];
const sortOptions = [
{ label: 'Data (prima)', value: 'date_asc' },
{ label: 'Data (dopo)', value: 'date_desc' },
{ label: 'Prezzo (minore)', value: 'price_asc' },
- { label: 'Rating (migliore)', value: 'rating_desc' }
+ { label: 'Rating (migliore)', value: 'rating_desc' },
];
// Computed
@@ -96,12 +104,12 @@ export default defineComponent({
switch (sortBy.value) {
case 'date_asc':
- return sorted.sort((a, b) =>
- new Date(a.dateTime).getTime() - new Date(b.dateTime).getTime()
+ return sorted.sort(
+ (a, b) => new Date(a.dateTime).getTime() - new Date(b.dateTime).getTime()
);
case 'date_desc':
- return sorted.sort((a, b) =>
- new Date(b.dateTime).getTime() - new Date(a.dateTime).getTime()
+ return sorted.sort(
+ (a, b) => new Date(b.dateTime).getTime() - new Date(a.dateTime).getTime()
);
case 'price_asc':
return sorted.sort((a, b) => {
@@ -146,7 +154,7 @@ export default defineComponent({
from: searchParams.departure?.city,
to: searchParams.destination?.city,
date: searchParams.date,
- seats: searchParams.seats
+ seats: searchParams.seats,
};
if (searchParams.passingThrough?.city) {
@@ -154,7 +162,11 @@ export default defineComponent({
}
// Advanced filters
- if (advancedFilters.noSmoking || advancedFilters.petsAllowed || advancedFilters.luggageOk) {
+ if (
+ advancedFilters.noSmoking ||
+ advancedFilters.petsAllowed ||
+ advancedFilters.luggageOk
+ ) {
filters.preferences = {};
if (advancedFilters.noSmoking) filters.preferences.smoking = 'no';
if (advancedFilters.petsAllowed) filters.preferences.pets = 'all';
@@ -168,9 +180,10 @@ export default defineComponent({
addRecentSearch({
from: searchParams.departure.city,
to: searchParams.destination.city,
- date: searchParams.date
+ date: searchParams.date,
});
}
+ scrollToResults();
};
const loadMore = async () => {
@@ -180,11 +193,11 @@ export default defineComponent({
};
const goToRide = (rideId: string) => {
- router.push(`/trasporti/ride/${rideId}`);
+ router.push(`/viaggi/ride/${rideId}`);
};
const goToProfile = (userId: string) => {
- router.push(`/trasporti/profilo/${userId}`);
+ router.push(`/viaggi/profilo/${userId}`);
};
const handleBook = async (ride: Ride) => {
@@ -194,16 +207,16 @@ export default defineComponent({
prompt: {
model: '',
type: 'textarea',
- label: 'Messaggio'
+ label: 'Messaggio',
},
- cancel: true
+ cancel: true,
}).onOk(async (message: string) => {
try {
$q.loading.show();
await createRequest({
rideId: ride._id,
message,
- seatsRequested: searchParams.seats
+ seatsRequested: searchParams.seats,
});
$q.notify({ type: 'positive', message: 'Richiesta inviata!' });
} catch (error: any) {
@@ -219,7 +232,7 @@ export default defineComponent({
const userId = typeof ride.userId === 'string' ? ride.userId : ride.userId._id;
const response = await getOrCreateDirectChat(userId, ride._id);
if (response?.data) {
- router.push(`/trasporti/chat/${response.data._id}`);
+ router.push(`/viaggi/chat/${response.data._id}`);
}
} catch (error: any) {
$q.notify({ type: 'negative', message: error.data?.message || error.message });
@@ -230,18 +243,18 @@ export default defineComponent({
$q.notify({
type: 'info',
message: 'Funzionalità in arrivo!',
- caption: 'Presto potrai creare avvisi per le ricerche'
+ caption: 'Presto potrai creare avvisi per le ricerche',
});
};
const createRequestRoute = () => {
- router.push({ path: '/trasporti/richiedi', query: { type: 'request' } });
+ router.push({ path: '/viaggi/richiedi', query: { type: 'request' } });
};
// Recent searches management
const addRecentSearch = (search: RecentSearch) => {
const existing = recentSearches.value.findIndex(
- s => s.from === search.from && s.to === search.to
+ (s) => s.from === search.from && s.to === search.to
);
if (existing !== -1) {
@@ -268,10 +281,9 @@ export default defineComponent({
// Helpers
const getPrice = (ride: Ride): number => {
- const euro = ride.contribution?.contribTypes?.find(c => {
- const label = typeof c.contribTypeId === 'object'
- ? c.contribTypeId.label.toLowerCase()
- : '';
+ const euro = ride.contribution?.contribTypes?.find((c) => {
+ const label =
+ typeof c.contribTypeId === 'object' ? c.contribTypeId.label.toLowerCase() : '';
return label.includes('euro');
});
return euro?.price || 999;
@@ -284,6 +296,19 @@ export default defineComponent({
return 0;
};
+ const scrollToResults = () => {
+ if (window.innerWidth <= 768) {
+
+ // Usa nextTick per assicurarti che il DOM sia aggiornato
+ nextTick(() => {
+ resultsSection.value?.scrollIntoView({
+ behavior: 'smooth',
+ block: 'start',
+ });
+ });
+ }
+ };
+
// Lifecycle
onMounted(() => {
const saved = LocalStorage.getItem('recentRideSearches');
@@ -329,7 +354,9 @@ export default defineComponent({
createAlert,
createRequest: createRequestRoute,
removeRecentSearch,
- applyRecentSearch
+ applyRecentSearch,
+ scrollToResults,
+ resultsSection,
};
- }
+ },
});
diff --git a/src/modules/trasporti/pages/RideSearchPage.vue b/src/modules/viaggi/pages/RideSearchPage.vue
similarity index 98%
rename from src/modules/trasporti/pages/RideSearchPage.vue
rename to src/modules/viaggi/pages/RideSearchPage.vue
index 0a725b0d..b5bd7943 100644
--- a/src/modules/trasporti/pages/RideSearchPage.vue
+++ b/src/modules/viaggi/pages/RideSearchPage.vue
@@ -128,7 +128,8 @@
-