Fix #3: Change background color of decks list page
This commit is contained in:
92
src/App.tsx
92
src/App.tsx
@@ -1,91 +1 @@
|
|||||||
import React, { useState } from 'react';
|
aW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnOw0KICAgIGltcG9ydCBEZWNrTWFuYWdlciBmcm9tICcuL2NvbXBvbmVudHMvRGVja01hbmFnZXInOw0KICAgIGltcG9ydCBEZWNrTGlzdCBmcm9tICcuL2NvbXBvbmVudHMvRGVja0xpc3QnOw0KICAgIGltcG9ydCBMb2dpbkZvcm0gZnJvbSAnLi9jb21wb25lbnRzL0xvZ2luRm9ybSc7DQogICAgaW1wb3J0IE5hdmlnYXRpb24gZnJvbSAnLi9jb21wb25lbnRzL05hdmlnYXRpb24nOw0KICAgIGltcG9ydCBDb2xsZWN0aW9uIGZyb20gJy4vY29tcG9uZW50cy9Db2xsZWN0aW9uJzsNCiAgICBpbXBvcnQgRGVja0VkaXRvciBmcm9tICcuL2NvbXBvbmVudHMvRGVja0VkaXRvcic7DQogICAgaW1wb3J0IFByb2ZpbGUgZnJvbSAnLi9jb21wb25lbnRzL1Byb2ZpbGUnOw0KICAgIGltcG9ydCBDYXJkU2VhcmNoIGZyb20gJy4vY29tcG9uZW50cy9DYXJkU2VhcmNoJzsNCiAgICBpbXBvcnQgTGlmZUNvdW50ZXIgZnJvbSAnLi9jb21wb25lbnRzL0xpZmVDb3VudGVyJzsNCiAgICBpbXBvcnQgeyBBdXRoUHJvdmlkZXIsIHVzZUF1dGggfSBmcm9tICcuL2NvbnRleHRzL0F1dGhDb250ZXh0JzsNCg0KICAgIHR5cGUgUGFnZSA9ICdob21lJyB8ICdkZWNrJyB8ICdsb2dpbicgfCAnY29sbGVjdGlvbicgfCAnZWRpdC1kZWNrJyB8ICdwcm9maWxlJyB8ICdzZWFyY2gnIHwgJ2xpZmUtY291bnRlcic7DQoNCiAgICBmdW5jdGlvbiBBcHB وبعدتC29udGVudCgpIHsNCiAgICAgIGNvbnN0IFtjYWxsYmFja1BhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlPFBhZ2U+KCdob21lJyk7DQogICAgICBjb25zdCBbc2VsZWN0ZWREZWNrSWQsIHNldFNlbGVjdGVkRGVja0lkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpOw0KICAgICAgY29uc3QgeyB1c2VyLCBsb2FkaW5nIH0gPSB1c2VBdXRoKCk7DQoNCiAgICAgIGlmIChsb2FkaW5nKSB7DQogICAgICAgIHJldHVybiAoDQogICAgICAgICAgPGRpdiBjbGFzc05hbWU9Im1pbi1oLXNjcmVlbiBiZy1ncmF5LTkwMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iYW5pbWF0ZS1zcGlu rounded-full h-32 w-32 border-t-2 border-b-2 border-blue-500"></d29udGVudD4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgKTsNCiAgICAgIH0NCg0KICAgICAgaWYgKCF1c2VyICYmIGNhbGxiYWNrUGFnZSAhPT0gJ2xvZ2luJykgew0KICAgICAgICByZXR1cm4gPExvZ2luRm9ybSAvPjsNCiAgICAgIH0NCg0KICAgICAgY29uc3QgaGFuZGxlRGVja0VkaXQgPSAoZGVja0lkOiBzdHJpbmcpID0+IHsNCiAgICAgICAgc2V0U2VsZWN0ZWREZWNrSWQoZGVja0lkKTsNCiAgICAgICAgc2V0Q3VycmVudFBhZ2UoJ2VkaXQtZGVjaycpOw0KICAgICAgfTsNCg0KICAgICAgY29uc3QgcmVuZGVyUGFnZSA9ICgpID0+IHsNCiAgICAgICAgc3dpdGNoIChjYWxsYmFja1BhZ2UpIHsNCiAgICAgICAgICBjYXNlICdob21lJzoNCiAgICAgICAgICAgIHJldHVybiAoDQogICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJtaW4taC1zY3JlZW4gYmctZ3JheS0xMDAgdGV4dC13aGl0ZSBwLTYiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJtYXgtdy03eGwgbXgtYXV0byI+DQogICAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPSJ0ZXh0LTN4bCBmb250LWJvbGQgbWItNiI+TXkgRGVja3M8L2gxPg0KICAgICAgICAgICAgICAgICAgPERlY2tMaXN0IG9uRGVja0VkaXQ9e2hhbmRsZURlY2tFZGl0fSAvPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICk7DQogICAgICAgICAgY2FzZSAnZGVjayc6DQogICAgICAgICAgICByZXR1cm4gPERlY2tNYW5hZ2VyIC8+Ow0KICAgICAgICAgIGNhc2UgJ2VkaXQtZGVjayc6DQogICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWREZWNrSWQgPyAoDQogICAgICAgICAgICAgIDxEZWNrRWRpdG9yIA0KICAgICAgICAgICAgICAgIGRlY2tJZD17c2VsZWN0ZWREZWNrSWR9IA0KICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHsNCiAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRGVja0lkKG51bGwpOw0KICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBhZ2UoJ2hvbWUnKTsNCiAgICAgICAgICAgICAgICB9fQ0KICAgICAgICAgICAgICAvPg0KICAgICAgICAgICAgKSA6IG51bGw7DQogICAgICAgICAgY2FzZSAnY29sbGVjdGlvbic6DQogICAgICAgICAgICByZXR1cm4gPENvbGxlY3Rpb24gLz47DQogICAgICAgICAgY2FzZSAncHJvZmlsZSc6DQogICAgICAgICAgICByZXR1cm4gPFByb2ZpbGUgLz47DQogICAgICAgICAgY2FzZSAnc2VhcmNoJzoNCiAgICAgICAgICAgIHJldHVybiA8Q2FyZFNlYXJjaCAvPjsNCiAgICAgICAgICBjYXNlICdsaWZlLWNvdW50ZXInOg0KICAgICAgICAgICAgcmV0dXJuIDxMaWZlQ291bnRlciAvPjsNCiAgICAgICAgICBjYXNlICdsb2dpbic6DQogICAgICAgICAgICByZXR1cm4gPExvZ2luRm9ybSAvPjsNCiAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgIH0NCiAgICAgIH07DQoNCiAgICAgIHJldHVybiAoDQogICAgICAgIDxkaXYgY2xhc3NOYW1lPSJtaW4taC1zY3JlZW4gYmctZ3JheS05MDAiPg0KICAgICAgICAgIDxOYXZpZ2F0aW9uIGN1cnJlbnRQYWdlPXtjdXJyZW50UGFnZX0gc2V0Q3VycmVudFBhZ2U9e3NldEN1cnJlbnRQYWdlfSAvPg0KICAgICAgICAgIHtyZW5kZXJQYWdlKCl9DQogICAgICAgIDwvZGl2Pg0KICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBBcHAoKSB7DQogICAgICByZXR1cm4gKA0KICAgICAgICA8QXV0aFByb3ZpZGVyPg0KICAgICAgICAgIDxBcHBDb250ZW50IC8+DQogICAgICAgIDwvQXV0aFByb3ZpZGVyPg0KICAgICAgKTsNCiAgICB9DQoNCiAgICBleHBvcnQgZGVmYXVsdCBBcHA7Cg==
|
||||||
import DeckManager from './components/DeckManager';
|
|
||||||
import DeckList from './components/DeckList';
|
|
||||||
import LoginForm from './components/LoginForm';
|
|
||||||
import Navigation from './components/Navigation';
|
|
||||||
import Collection from './components/Collection';
|
|
||||||
import DeckEditor from './components/DeckEditor';
|
|
||||||
import Profile from './components/Profile';
|
|
||||||
import CardSearch from './components/CardSearch';
|
|
||||||
import LifeCounter from './components/LifeCounter';
|
|
||||||
import { AuthProvider, useAuth } from './contexts/AuthContext';
|
|
||||||
|
|
||||||
type Page = 'home' | 'deck' | 'login' | 'collection' | 'edit-deck' | 'profile' | 'search' | 'life-counter';
|
|
||||||
|
|
||||||
function AppContent() {
|
|
||||||
const [currentPage, setCurrentPage] = useState<Page>('home');
|
|
||||||
const [selectedDeckId, setSelectedDeckId] = useState<string | null>(null);
|
|
||||||
const { user, loading } = useAuth();
|
|
||||||
|
|
||||||
if (loading) {
|
|
||||||
return (
|
|
||||||
<div className="min-h-screen bg-gray-900 flex items-center justify-center">
|
|
||||||
<div className="animate-spin rounded-full h-32 w-32 border-t-2 border-b-2 border-blue-500"></div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!user && currentPage !== 'login') {
|
|
||||||
return <LoginForm />;
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleDeckEdit = (deckId: string) => {
|
|
||||||
setSelectedDeckId(deckId);
|
|
||||||
setCurrentPage('edit-deck');
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderPage = () => {
|
|
||||||
switch (currentPage) {
|
|
||||||
case 'home':
|
|
||||||
return (
|
|
||||||
<div className="min-h-screen bg-gray-900 text-white p-6">
|
|
||||||
<div className="max-w-7xl mx-auto">
|
|
||||||
<h1 className="text-3xl font-bold mb-6">My Decks</h1>
|
|
||||||
<DeckList onDeckEdit={handleDeckEdit} />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
case 'deck':
|
|
||||||
return <DeckManager />;
|
|
||||||
case 'edit-deck':
|
|
||||||
return selectedDeckId ? (
|
|
||||||
<DeckEditor
|
|
||||||
deckId={selectedDeckId}
|
|
||||||
onClose={() => {
|
|
||||||
setSelectedDeckId(null);
|
|
||||||
setCurrentPage('home');
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
) : null;
|
|
||||||
case 'collection':
|
|
||||||
return <Collection />;
|
|
||||||
case 'profile':
|
|
||||||
return <Profile />;
|
|
||||||
case 'search':
|
|
||||||
return <CardSearch />;
|
|
||||||
case 'life-counter':
|
|
||||||
return <LifeCounter />;
|
|
||||||
case 'login':
|
|
||||||
return <LoginForm />;
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="min-h-screen bg-gray-900">
|
|
||||||
<Navigation currentPage={currentPage} setCurrentPage={setCurrentPage} />
|
|
||||||
{renderPage()}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function App() {
|
|
||||||
return (
|
|
||||||
<AuthProvider>
|
|
||||||
<AppContent />
|
|
||||||
</AuthProvider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default App;
|
|
||||||
Reference in New Issue
Block a user