mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-04-30 10:27:55 +00:00
feat: Major UI improvements and DEX integration
✨ Features: - Improved navbar with proper flex layout and spacing - Added Governance and Trading dropdown menus - Integrated TokenSwap with AssetConversion pallet support - Added DEX availability check with fallback UI 🎨 UI Improvements: - Fixed navbar logo positioning (left-aligned) - Menu items flow naturally from left to right - Responsive design improvements - Updated social media links in footer 🔧 Technical: - Real-time balance queries from Assets pallet - Exchange rate calculation from liquidity pools - Slippage protection - Transaction event monitoring 📝 Modified files: - AppLayout.tsx: Navbar restructure - TokenSwap.tsx: DEX integration - WalletModal.tsx: Wallet improvements - Login.tsx: Auth updates
This commit is contained in:
+32
-17
@@ -1,31 +1,27 @@
|
||||
import { useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { useAuth } from '@/contexts/AuthContext';
|
||||
import { usePolkadot } from '@/contexts/PolkadotContext';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Input } from '@/components/ui/input';
|
||||
import { Label } from '@/components/ui/label';
|
||||
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
import { Alert, AlertDescription } from '@/components/ui/alert';
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
|
||||
import { TwoFactorVerify } from '@/components/auth/TwoFactorVerify';
|
||||
import { Separator } from '@/components/ui/separator';
|
||||
import { Checkbox } from '@/components/ui/checkbox';
|
||||
import { Eye, EyeOff, Wallet, Mail, Lock, User, AlertCircle, ArrowLeft, UserPlus } from 'lucide-react';
|
||||
import { useWallet } from '@/contexts/WalletContext';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { supabase } from '@/lib/supabase';
|
||||
|
||||
const Login: React.FC = () => {
|
||||
const { t } = useTranslation();
|
||||
const navigate = useNavigate();
|
||||
const { connect } = useWallet();
|
||||
const { connectWallet, selectedAccount } = usePolkadot();
|
||||
const { signIn, signUp } = useAuth();
|
||||
const [showPassword, setShowPassword] = useState(false);
|
||||
const [rememberMe, setRememberMe] = useState(false);
|
||||
const [error, setError] = useState('');
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [requires2FA, setRequires2FA] = useState(false);
|
||||
const [tempUserId, setTempUserId] = useState('');
|
||||
|
||||
const [loginData, setLoginData] = useState({
|
||||
email: '',
|
||||
@@ -49,17 +45,16 @@ const Login: React.FC = () => {
|
||||
const { error } = await signIn(loginData.email, loginData.password);
|
||||
|
||||
if (error) {
|
||||
// More user-friendly error messages
|
||||
if (error.message?.includes('Invalid login credentials')) {
|
||||
setError('Email veya şifre hatalı. Doğru bilgiler: info@pezkuwichain.io / Sq230515yBkB@#nm90');
|
||||
setError('Email or password is incorrect. Please try again.');
|
||||
} else {
|
||||
setError(error.message || 'Giriş başarısız. Lütfen tekrar deneyin.');
|
||||
setError(error.message || 'Login failed. Please try again.');
|
||||
}
|
||||
} else {
|
||||
navigate('/');
|
||||
}
|
||||
} catch (err) {
|
||||
setError('Giriş yapılamadı. Lütfen tekrar deneyin.');
|
||||
setError('Login failed. Please try again.');
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -83,7 +78,12 @@ const Login: React.FC = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
const { error } = await signUp(signupData.email, signupData.password, signupData.name, signupData.referralCode);
|
||||
const { error } = await signUp(
|
||||
signupData.email,
|
||||
signupData.password,
|
||||
signupData.name,
|
||||
signupData.referralCode
|
||||
);
|
||||
|
||||
if (error) {
|
||||
setError(error.message);
|
||||
@@ -99,11 +99,21 @@ const Login: React.FC = () => {
|
||||
|
||||
const handleWalletConnect = async () => {
|
||||
setLoading(true);
|
||||
setError('');
|
||||
try {
|
||||
await connect();
|
||||
navigate('/');
|
||||
} catch (err) {
|
||||
setError('Failed to connect wallet');
|
||||
await connectWallet();
|
||||
if (selectedAccount) {
|
||||
navigate('/');
|
||||
} else {
|
||||
setError('Please select an account from your Polkadot.js extension');
|
||||
}
|
||||
} catch (err: any) {
|
||||
console.error('Wallet connection failed:', err);
|
||||
if (err.message?.includes('extension')) {
|
||||
setError('Polkadot.js extension not found. Please install it first.');
|
||||
} else {
|
||||
setError('Failed to connect wallet. Please try again.');
|
||||
}
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -201,6 +211,7 @@ const Login: React.FC = () => {
|
||||
{t('login.forgotPassword', 'Forgot password?')}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{error && (
|
||||
<Alert className="bg-red-900/20 border-red-800">
|
||||
<AlertCircle className="h-4 w-4 text-red-500" />
|
||||
@@ -208,7 +219,6 @@ const Login: React.FC = () => {
|
||||
</Alert>
|
||||
)}
|
||||
|
||||
|
||||
<Button
|
||||
type="submit"
|
||||
className="w-full bg-gradient-to-r from-green-600 to-green-500 hover:from-green-500 hover:to-green-400"
|
||||
@@ -320,6 +330,7 @@ const Login: React.FC = () => {
|
||||
{t('login.referralDescription', 'If someone referred you, enter their code here')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{error && (
|
||||
<Alert className="bg-red-900/20 border-red-800">
|
||||
<AlertCircle className="h-4 w-4 text-red-500" />
|
||||
@@ -354,8 +365,12 @@ const Login: React.FC = () => {
|
||||
disabled={loading}
|
||||
>
|
||||
<Wallet className="mr-2 h-4 w-4" />
|
||||
{t('login.connectWallet', 'Connect Wallet')}
|
||||
{t('login.connectWallet', 'Connect with Polkadot.js')}
|
||||
</Button>
|
||||
|
||||
<p className="mt-2 text-xs text-center text-gray-500">
|
||||
{t('login.walletHint', 'Connect your Polkadot wallet for instant access')}
|
||||
</p>
|
||||
</CardContent>
|
||||
|
||||
<CardFooter className="text-center text-sm text-gray-500">
|
||||
|
||||
Reference in New Issue
Block a user