Skip to content

Commit

Permalink
Merge branch 'development' into feat/post-page-info
Browse files Browse the repository at this point in the history
  • Loading branch information
gustfernandez authored Nov 5, 2024
2 parents 967ca52 + 7d482ee commit 6e7f884
Show file tree
Hide file tree
Showing 50 changed files with 5,677 additions and 1,396 deletions.
10 changes: 10 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@
# NEXT_PUBLIC_LOGIN_REDIRECT_URL=http://localhost:3000/post/CreateProperty
# NEXT_PUBLIC_LOGOUT_REDIRECT_URL=http://localhost:3000


VITE_GOOGLE_MAPS_API_KEY=AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E

#VITE_AUTH0_AUDIENCE=https://geomap/
#VITE_AUTH0_DOMAIN=dev-7w1no2zl1opt24if.us.auth0.com
#VITE_AUTH0_CLIENT_ID=QrElcRF9AI2H6dRBwCChbc04JvtKygJo

VITE_AUTH0_AUDIENCE=https://geomap/
VITE_AUTH0_DOMAIN=dev-7w1no2zl1opt24if.us.auth0.com
VITE_AUTH0_CLIENT_ID=QrElcRF9AI2H6dRBwCChbc04JvtKygJo

VITE_API_URL=http://localhost:8000/

7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,18 @@
"@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0",
"@material-tailwind/react": "^2.1.10",
"@mui/icons-material": "^6.1.6",
"@mui/lab": "^6.0.0-beta.10",
"@mui/material": "^6.1.2",
"@mui/system": "^6.1.2",
"@mui/x-date-pickers": "^7.19.0",
"@react-google-maps/api": "^2.19.3",
"@react-google-maps/api": "^2.20.3",
"aws-sdk": "^2.1691.0",
"axios": "^1.7.7",
"browser-image-compression": "^2.0.2",
"compress.js": "1.1.2",
"date-fns": "2.29.3",
"lucide-react": "^0.453.0",
"lucide-react": "^0.454.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-dropzone": "^14.2.9",
Expand Down
Binary file added src/assets/Empanadas.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/Logo270.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/fblogo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/iglogo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/pin2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/tellogo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/components/GoogleMap.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ const GoogleMapComponent = ({ onMapLoad, filterType, places }) => {
return (
<div style={containerStyle}>
<div style={mapStyle}>
<LoadScript googleMapsApiKey="AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E">
<LoadScript googleMapsApiKey={import.meta.env.VITE_GOOGLE_MAPS_API_KEY}>
<GoogleMap
mapContainerStyle={mapStyle}
center={userLocation}
Expand Down
59 changes: 59 additions & 0 deletions src/components/GoogleMapSelectLocation.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import React, { useState } from 'react';
import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';

const containerStyle = {
height: '400px', // Ajusta el tamaño del contenedor si es necesario
width: '100%',
};

const center = {
lat: -33.45694, // Coordenadas iniciales para Santiago, Chile
lng: -70.64827,
};

const GoogleMapSelectLocation = ({ onLocationSelect }) => {
const [selectedLocation, setSelectedLocation] = useState(null);

const handleMapClick = (event) => {
const location = {
lat: event.latLng.lat(),
lng: event.latLng.lng(),
};
setSelectedLocation(location);

//Llamada a la API de Geocoding
const geocoder = new window.google.maps.Geocoder();
geocoder.geocode({ location }, (results, status) => {
if (status === "OK") {
if (results[0]) {
const address = results[0].formatted_address;
onLocationSelect(address); // Pasar la dirección al formulario
} else {
console.log("No se encontraron resultados");
}
} else {
console.log("Geocoder falló debido a: " + status);
}
});
};

return (
<LoadScript googleMapsApiKey={import.meta.env.VITE_GOOGLE_MAPS_API_KEY}>
<GoogleMap
mapContainerStyle={containerStyle}
center={center}
zoom={12}
onClick={handleMapClick} // Añade la función para manejar clics en el mapa
>
{selectedLocation && (
<Marker
position={selectedLocation}
title="Ubicación seleccionada"
/>
)}
</GoogleMap>
</LoadScript>
);
};

export default GoogleMapSelectLocation;
43 changes: 43 additions & 0 deletions src/components/ImageUpload.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
.image-upload-container {
max-width: 800px;
margin: 0 auto;
}

.dropzone {
background-color: #f9fafb; /* Color de fondo más claro */
transition: background-color 0.2s;
}

.dropzone:hover {
background-color: #e5e7eb; /* Color de fondo al pasar el mouse */
}

.image-preview {
margin-top: 0.5rem;
width: 100%; /* Asegúrate de que ocupe todo el ancho de su contenedor */
height: 150px; /* Altura fija para todas las imágenes */
object-fit: cover; /* Mantener la relación de aspecto y recortar si es necesario */
}

.font-medium {
padding-left: 10px;
margin-bottom: 70px;
}
.absolute{
position: absolute;
border: none;
background-color: transparent;
}
.absolute:hover{
color: #666;
}
.flex{
display: flex flex-wrap;
}







114 changes: 114 additions & 0 deletions src/components/ImageUpload2.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import React, { useState } from 'react';
import { useDropzone } from 'react-dropzone';
import DeleteIcon from '@mui/icons-material/Cancel';
import './ImageUpload.css';
import logo from '../assets/logoo.png';
import imageCompression from 'browser-image-compression'; // Importa la nueva librería

function ImageUpload({ files, setFiles }) {
const [error, setError] = useState('');

const onDrop = async acceptedFiles => {
if (acceptedFiles.length + files.length > 5) {
setError('Solo se permiten un máximo de 5 imágenes');
return;
}

setError('');

const newFiles = await Promise.all(
acceptedFiles.map(async file => {
const options = {
maxSizeMB: 1, // Ajusta el tamaño máximo de la imagen
maxWidthOrHeight: 800, // Cambia el tamaño máximo
useWebWorker: true,
};
const compressedFile = await imageCompression(file, options);
return Object.assign(compressedFile, {
preview: URL.createObjectURL(compressedFile)
});
})
);

setFiles(prevFiles => [...prevFiles, ...newFiles]);
};

const { getRootProps, getInputProps } = useDropzone({
onDrop,
accept: 'image/jpeg, image/png',
maxFiles: 5,
maxSize: 5000000 // 5MB
});

return (
<div className="image-upload-container mb-4">
<label className="block text-sm font-medium text-black">
<h2>Cargar imágenes de publicación</h2>
</label>
<div className="dropzone mt-1 flex justify-center rounded-lg border-2 border-dashed border-gray-300 px-6 pb-6 pt-4">
<div {...getRootProps()} className="cursor-pointer flex flex-wrap">
<input {...getInputProps()} />
<div className="text-center w-full">
<div className="text-xs text-gray-600">
<span className="font-medium text-indigo-600" style={{ marginBottom: '0.5rem' }}>
Hasta 5 imágenes en formato PNG o JPG
</span>
</div>
<svg
className="mx-auto h-6 w-6 text-black mb-2"
stroke="currentColor"
fill="none"
viewBox="0 0 150 40"
aria-hidden="true"
>
<path
d="M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28m0 0l4 4m4-24h8m-4-4v8m-12 4h.02"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
transform='scale(0.5)'
/>
</svg>
</div>

{/* Aquí es donde renderizamos las imágenes dentro del dropzone */}
<div className="flex flex-wrap w-full mt-4">
{files.map((file, index) => (
<div className="relative mb-4 w-1/3 px-2" key={file.name}>
<img
className="image-preview rounded-lg shadow-md resizeable"
src={file.preview}
alt={file.name}
style={{ width: "30%", height: "auto" }} // ajustar tamaño
/>
<img
src={logo}
alt="Watermark"
style={{ width: "3%", height: "auto", objectFit: "contain" , opacity: "0.5",
bottom: "0", right: "10" }} //poner el logo dentro de la imagen ahora esta afuera}} //poner el logo dentro de la imagen ahora esta afuera
className="absolute2 bottom-0 right-0 w-1/3 h-1/3 opacity-50" // Ajusta la posición y tamaño del logo
/>
<button
className="absolute right-0 top-0 rounded-md bg-transparent border border-gray-300 p-1 hover:bg-gray-200"
type="button"
onClick={() => {
const newFiles = files.filter((_, idx) => idx !== index);
setFiles(newFiles);
URL.revokeObjectURL(file.preview);
setError('');
}}
>
<DeleteIcon />
</button>
</div>
))}
</div>
</div>
</div>

{error && <p className="text-red-500 text-sm">{error}</p>}
</div>
);
}

export default ImageUpload;
19 changes: 19 additions & 0 deletions src/components/TailwinSvgIcons/CrossDeleteIcon2.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
export default function CrossDeleteIcon() {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
strokeWidth="1.5"
stroke="currentColor"
className="h-6 w-6"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
/>
</svg>
);
}

88 changes: 88 additions & 0 deletions src/pages/helloworld.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ import { Link, useNavigate } from 'react-router-dom';
import publicar from '../assets/publicar.jpg'
import buscar from '../assets/buscar2.jpg'
import servicios from '../assets/servicios.jpg'
import pin from '../assets/pin2.png'
import wsplogo from '../assets/whatsapp.png'
import fblogo from '../assets/fblogo.png'
import iglogo from '../assets/iglogo.png'
import tellogo from '../assets/tellogo.png'
import logoviejo from '../assets/logo270.png'


const HelloWorld = () => {
const { loginWithRedirect, logout, isAuthenticated } = useAuth0();
Expand Down Expand Up @@ -77,6 +84,87 @@ const HelloWorld = () => {
<br></br>
<br></br>
<br></br>
<div className="info-section row">
<div className="column image-column">
<img src={pin} alt="Logo GeoRent" className="section-image"/>
</div>
<div className="column text-column">
<h2>GeoRent es una solución de búsqueda de alojamientos y servicios geolocalizados para tus vacaciones a través de mapas de navegación.</h2>
<p>Permite visualizar las propiedades disponibles en el entorno inmediato, de acuerdo a las condiciones de filtro de búsqueda definidas por el usuario del móvil.</p>
<p>La plataforma permite comparar de manera rápida y en tiempo real las distintas propiedades en arriendo y todas geo localizadas según el destino de tus vacaciones.</p>
<p>Ya no darás más vueltas buscando la mejor alternativa para disfrutar de tus vacaciones.</p>
<p>Georent, para las personas que requieren de una propiedad, es la forma más rápida y eficaz de localizar una vivienda o alojamiento en el momento mismo de la llegada al lugar de vacaciones.</p>
</div>
</div>

<div className="info-section row">
<div className="column image-column">
<img src={pin} alt="Icono de búsqueda en tiempo real" className="section-image"/>
</div>
<div className="column text-column">
<h2>Búsquedas en tu ruta en tiempo real</h2>
<ul>
<li>Buscar en el momento de la necesidad, el arriendo de la propiedad en el sector que te gusta.</li>
<li>Ver las propiedades que cumplen con las fechas de vacaciones que tu necesitas y condiciones que requieres en el sector que quieres.</li>
<li>Poder contrastar lo que te ofrecen con la realidad antes de pagar.</li>
<li>No se requiere pagar con anticipación, evitando fraudes de publicaciones mal intencionadas.</li>
<li>No requiere que tengas que disponer de Tarjetas de Débito o Crédito.</li>
<li>Tienes la posibilidad de negociar en el momento de la transacción.</li>
<li>Podrás verificar calificaciones de clientes anteriores.</li>
</ul>
</div>
</div>

<div className="info-section row">
<div className="column image-column">
<img src={pin} alt="Icono de GeoRent" className="section-image"/>
</div>
<div className="column text-column">
<h2>Comienza a disfrutar de tus destinos vacacionales junto a GeoRent, la manera más fácil y segura de buscar alojamiento para tu merecido descanso.</h2>
<p>La obtención del bien o servicio, corresponde a una transacción entre el oferente y el cliente interesado en el bien o servicio, y en ningún caso GeoRent interviene en el proceso de negociación y pago posterior de lo acordado.</p>
<p>GeoRent realiza la conexión entre el oferente de la propiedad o servicio y el potencial cliente, a través de la publicación geo localizada del bien o servicio, en los mapas de navegación.</p>
<p>APP de mapas de navegación para todo dispositivo, donde los clientes pueden buscar su destino de vacaciones en tiempo real.</p>
<p>WEB de administración para propietarios y oferentes, que requieran publicar sus propiedades, lugares de camping o servicios.</p>
</div>
</div>

<div className="membership-section">
<div className="membership-banner">
<p className="membership-title">Sé parte de GeoRent, inicia tu membresía anual con nosotros, y da inicio a tu mejor vitrina inmobiliaria.</p>
</div>
<div className="membership-content">
<h2 className="membership-header">Aprovecha</h2>
<h3 className="membership-subheader">Publica tu PROPIEDAD y/o SERVICIO</h3>
<p className="membership-details">Publicación Verano 2024</p>
<p className="membership-details">Membresía GeoRent</p>
</div>
</div>

<div className="georent-footer">
<img src={logoviejo}></img>
<p>Comienza a disfrutar de tus destinos vacacionales junto a GeoRent, la manera más fácil y segura de buscar alojamiento para tu merecido descanso</p>
<p>Destinos, Imágenes, calificaciones y mucho más</p>

<div className="contact-info">
<a href="https://wa.me/56992679247" target="_blank" rel="noopener noreferrer" className="contact-method">
<img src={wsplogo} alt="WhatsApp" />
<p>WhatsApp</p>
</a>
<a href="tel:+56992679247" className="contact-method">
<img src={tellogo} alt="Teléfono" />
<p>Teléfono</p>
</a>
<a href="https://www.instagram.com/georent_chile/" target="_blank" rel="noopener noreferrer" className="contact-method">
<img src={iglogo} alt="Instagram" />
<p>Instagram</p>
</a>
<a href="https://www.facebook.com/profile.php?id=100093292396748&mibextid=ZbWKwL" target="_blank" rel="noopener noreferrer" className="contact-method">
<img src={fblogo} alt="Facebook" />
<p>Facebook</p>
</a>
</div>
</div>

{/* <div className="image-card">
{!isAuthenticated ? (
<button className="image-button" onClick={loginWithRedirect}>Iniciar sesión</button>
Expand Down
Loading

0 comments on commit 6e7f884

Please sign in to comment.