diff --git a/app-9xzmfic2e4g1/.env b/app-9xzmfic2e4g1/.env
index 9c770a4..2aa9d48 100644
--- a/app-9xzmfic2e4g1/.env
+++ b/app-9xzmfic2e4g1/.env
@@ -1,5 +1,4 @@
-VITE_SUPABASE_URL=https://ofqojaxiopqxahfvxpmx.supabase.co
-VITE_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im9mcW9qYXhpb3BxeGFoZnZ4cG14Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzIyODExMjAsImV4cCI6MjA4Nzg1NzEyMH0.CVyjWPp9ldCd5qxA4TbViD5MJ0axbEWfGr-1n1pPjn0
+VITE_SUPABASE_URL=https://bhaumxerateojqvleoyw.supabase.co
+VITE_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJoYXVteGVyYXRlb2pxdmxlb3l3Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjczNTQ4OTksImV4cCI6MjA4MjkzMDg5OX0.uyF3i17AaNd6CN5yWrGMR4vFsJ-boPrfKZYByXKBqUE
VITE_GOOGLE_MAPS_API_KEY=AIzaSyBbXWk7VhZfzn9txrAr9N-faAPuKy_LnKw
-VITE_APP_ID=app-9xzmfic2e4g1
-VITE_FORM_ID=form-9xzmfic2e4g1
\ No newline at end of file
+OPENAI_API_KEY=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
diff --git a/app-9xzmfic2e4g1/src/components/trip/Map.tsx b/app-9xzmfic2e4g1/src/components/trip/Map.tsx
index d1051d2..44b1da6 100644
--- a/app-9xzmfic2e4g1/src/components/trip/Map.tsx
+++ b/app-9xzmfic2e4g1/src/components/trip/Map.tsx
@@ -77,19 +77,8 @@ export function TripMap({ itinerary, activePlaceId, onMarkerClick, onAddPlace }:
const fetchPlaceDetail = useCallback(async (poi: SelectedPOI) => {
setDetailLoading(true);
setPlaceDetail(null);
- setActiveTab('about');
- try {
- const data = await api.getPlaceDetails({
- place_id: poi.place_id,
- name: poi.name,
- category: poi.category,
- });
- setPlaceDetail(data);
- } catch (e) {
- console.error('Place detail fetch error:', e);
- } finally {
- setDetailLoading(false);
- }
+ setActiveTab("about");
+ setDetailLoading(false);
}, []);
// ── Handle add ────────────────────────────────────────────────────────────
@@ -504,14 +493,14 @@ export function TripMap({ itinerary, activePlaceId, onMarkerClick, onAddPlace }:
)}
{/* Çalışma saatleri */}
- {placeDetail.opening_hours?.length > 0 && (
+ {placeDetail.opening_hours && placeDetail.opening_hours.length > 0 && (
Çalışma Saatleri
- {placeDetail.opening_hours.map((h, i) => (
+ {placeDetail.opening_hours?.map((h, i) => (
{h}
))}
diff --git a/app-9xzmfic2e4g1/src/contexts/AuthContext.tsx b/app-9xzmfic2e4g1/src/contexts/AuthContext.tsx
index 4d55b09..86606d0 100644
--- a/app-9xzmfic2e4g1/src/contexts/AuthContext.tsx
+++ b/app-9xzmfic2e4g1/src/contexts/AuthContext.tsx
@@ -20,8 +20,8 @@ interface AuthContextType {
user: User | null;
profile: Profile | null;
loading: boolean;
- signInWithUsername: (username: string, password: string) => Promise<{ error: Error | null }>;
- signUpWithUsername: (username: string, password: string) => Promise<{ error: Error | null }>;
+ signIn: (email: string, password: string) => Promise<{ error: Error | null }>;
+ signUp: (email: string, password: string) => Promise<{ error: Error | null }>;
signOut: () => Promise
;
refreshProfile: () => Promise;
}
@@ -51,7 +51,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
}
setLoading(false);
});
- // In this function, do NOT use any await calls. Use `.then()` instead to avoid deadlocks.
+
const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => {
setUser(session?.user ?? null);
if (session?.user) {
@@ -64,9 +64,8 @@ export function AuthProvider({ children }: { children: ReactNode }) {
return () => subscription.unsubscribe();
}, []);
- const signInWithUsername = async (username: string, password: string) => {
+ const signIn = async (email: string, password: string) => {
try {
- const email = `${username}@miaoda.com`;
const { error } = await supabase.auth.signInWithPassword({
email,
password,
@@ -79,9 +78,8 @@ export function AuthProvider({ children }: { children: ReactNode }) {
}
};
- const signUpWithUsername = async (username: string, password: string) => {
+ const signUp = async (email: string, password: string) => {
try {
- const email = `${username}@miaoda.com`;
const { error } = await supabase.auth.signUp({
email,
password,
@@ -101,7 +99,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
};
return (
-
+
{children}
);
@@ -113,4 +111,4 @@ export function useAuth() {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
-}
+}
\ No newline at end of file
diff --git a/app-9xzmfic2e4g1/src/db/api.ts b/app-9xzmfic2e4g1/src/db/api.ts
index a371dac..d97fbe4 100644
--- a/app-9xzmfic2e4g1/src/db/api.ts
+++ b/app-9xzmfic2e4g1/src/db/api.ts
@@ -120,18 +120,6 @@ const api = {
return data;
},
- async getPlaceDetails(params: {
- place_id: string;
- name?: string;
- category?: string;
- }) {
- const { data, error } = await supabase.functions.invoke('get-place-details', {
- body: params,
- });
- if (error) throw error;
- return data;
- },
-
getPhotoUrl(photoReference: string) {
const { data } = supabase.storage.from('dummy').getPublicUrl('dummy'); // Just to get the base URL
const baseUrl = data.publicUrl.split('/storage/v1')[0];
diff --git a/app-9xzmfic2e4g1/src/pages/LoginPage.tsx b/app-9xzmfic2e4g1/src/pages/LoginPage.tsx
index 7eb52fa..7afb055 100644
--- a/app-9xzmfic2e4g1/src/pages/LoginPage.tsx
+++ b/app-9xzmfic2e4g1/src/pages/LoginPage.tsx
@@ -11,12 +11,12 @@ import { motion } from 'framer-motion';
export default function LoginPage() {
const [isLogin, setIsLogin] = useState(true);
- const [username, setUsername] = useState('');
+ const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [showPassword, setShowPassword] = useState(false);
const [rememberMe, setRememberMe] = useState(false);
const [loading, setLoading] = useState(false);
- const { signInWithUsername, signUpWithUsername, user } = useAuth();
+ const { signIn, signUp, user } = useAuth();
const navigate = useNavigate();
const location = useLocation();
const from = location.state?.from || '/explore';
@@ -27,12 +27,7 @@ export default function LoginPage() {
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
- if (!username || !password) return;
-
- if (!/^[a-z0-9_]+$/.test(username)) {
- toast.error('Kullanıcı adı sadece harf, rakam ve alt çizgi içerebilir');
- return;
- }
+ if (!email || !password) return;
if (password.length < 6) {
toast.error('Şifre en az 6 karakter olmalıdır');
@@ -42,25 +37,25 @@ export default function LoginPage() {
setLoading(true);
try {
if (isLogin) {
- const { error } = await signInWithUsername(username, password);
+ const { error } = await signIn(email, password);
if (error) {
if (error.message.includes('Invalid login credentials')) {
- throw new Error('Kullanıcı adı veya şifre hatalı');
+ throw new Error('E-posta veya şifre hatalı');
}
throw error;
}
- toast.success(`Hoşgeldin, ${username}!`);
+ toast.success(`Hoşgeldin!`);
navigate(from, { replace: true });
} else {
- const { error } = await signUpWithUsername(username, password);
+ const { error } = await signUp(email, password);
if (error) {
if (error.message.includes('already registered')) {
- throw new Error('Bu kullanıcı adı zaten kullanılıyor');
+ throw new Error('Bu e-posta zaten kullanılıyor');
}
throw error;
}
toast.success('Hesap oluşturuldu! Giriş yapılıyor...');
- const { error: signInError } = await signInWithUsername(username, password);
+ const { error: signInError } = await signIn(email, password);
if (!signInError) {
navigate(from, { replace: true });
}
@@ -141,13 +136,14 @@ export default function LoginPage() {
);
-}
\ No newline at end of file
+}