diff --git a/package.json b/package.json index 31b7c3fff..f93c7a453 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "chart.js": "^4.4.2", "classnames": "^2.5.1", "core-js": "^3.36.1", + "firebase": "^10.12.0", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/src/App.js b/src/App.js index 7f8e6d7ea..947ba4148 100644 --- a/src/App.js +++ b/src/App.js @@ -1,7 +1,10 @@ -import React, { Suspense, useEffect } from 'react' +import React, { Suspense, useEffect, useState } from 'react' import { HashRouter, Route, Routes } from 'react-router-dom' import { useSelector } from 'react-redux' +import firebase from "firebase/compat/app"; +import "firebase/compat/auth"; + import { CSpinner, useColorModes } from '@coreui/react' import './scss/style.scss' @@ -17,6 +20,20 @@ const Page500 = React.lazy(() => import('./views/pages/page500/Page500')) const App = () => { const { isColorModeSet, setColorMode } = useColorModes('coreui-free-react-admin-template-theme') const storedTheme = useSelector((state) => state.theme) + const [currentUser, setCurrentUser] = useState(null); + + useEffect(() => { + // Firebase kullanıcı oturum durumunu izle + const unsubscribe = firebase.auth().onAuthStateChanged((user) => { + if (user) { + setCurrentUser(user); + } else { + setCurrentUser(null); + } + }); + // ComponentWillUnmount + return () => unsubscribe(); + }, []); useEffect(() => { const urlParams = new URLSearchParams(window.location.href.split('?')[1]) @@ -42,11 +59,11 @@ const App = () => { } > - } /> - } /> - } /> - } /> - } /> + } currentUser={currentUser} /> + } currentUser={currentUser} /> + } currentUser={currentUser} /> + } currentUser={currentUser} /> + } /> diff --git a/src/_nav.js b/src/_nav.js index 8f3d730db..ac8913f70 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -6,8 +6,9 @@ import { cilChartPie, cilCursor, cilDescription, - cilDrop, + cilWindowRestore, cilNotes, + cilQrCode, cilPencil, cilPuzzle, cilSpeedometer, @@ -28,19 +29,19 @@ const _nav = [ }, { component: CNavTitle, - name: 'Theme', + name: 'projelerim', }, { component: CNavItem, - name: 'Colors', - to: '/theme/colors', - icon: , + name: 'myqr', + to: '/projeler/myqr', + icon: , }, { component: CNavItem, - name: 'Typography', + name: 'mywebsite', to: '/theme/typography', - icon: , + icon: , }, { component: CNavTitle, @@ -57,66 +58,6 @@ const _nav = [ name: 'Accordion', to: '/base/accordion', }, - { - component: CNavItem, - name: 'Breadcrumb', - to: '/base/breadcrumbs', - }, - { - component: CNavItem, - name: 'Cards', - to: '/base/cards', - }, - { - component: CNavItem, - name: 'Carousel', - to: '/base/carousels', - }, - { - component: CNavItem, - name: 'Collapse', - to: '/base/collapses', - }, - { - component: CNavItem, - name: 'List group', - to: '/base/list-groups', - }, - { - component: CNavItem, - name: 'Navs & Tabs', - to: '/base/navs', - }, - { - component: CNavItem, - name: 'Pagination', - to: '/base/paginations', - }, - { - component: CNavItem, - name: 'Placeholders', - to: '/base/placeholders', - }, - { - component: CNavItem, - name: 'Popovers', - to: '/base/popovers', - }, - { - component: CNavItem, - name: 'Progress', - to: '/base/progress', - }, - { - component: CNavItem, - name: 'Spinners', - to: '/base/spinners', - }, - { - component: CNavItem, - name: 'Tables', - to: '/base/tables', - }, { component: CNavItem, name: 'Tooltips', @@ -124,176 +65,7 @@ const _nav = [ }, ], }, - { - component: CNavGroup, - name: 'Buttons', - to: '/buttons', - icon: , - items: [ - { - component: CNavItem, - name: 'Buttons', - to: '/buttons/buttons', - }, - { - component: CNavItem, - name: 'Buttons groups', - to: '/buttons/button-groups', - }, - { - component: CNavItem, - name: 'Dropdowns', - to: '/buttons/dropdowns', - }, - ], - }, - { - component: CNavGroup, - name: 'Forms', - icon: , - items: [ - { - component: CNavItem, - name: 'Form Control', - to: '/forms/form-control', - }, - { - component: CNavItem, - name: 'Select', - to: '/forms/select', - }, - { - component: CNavItem, - name: 'Checks & Radios', - to: '/forms/checks-radios', - }, - { - component: CNavItem, - name: 'Range', - to: '/forms/range', - }, - { - component: CNavItem, - name: 'Input Group', - to: '/forms/input-group', - }, - { - component: CNavItem, - name: 'Floating Labels', - to: '/forms/floating-labels', - }, - { - component: CNavItem, - name: 'Layout', - to: '/forms/layout', - }, - { - component: CNavItem, - name: 'Validation', - to: '/forms/validation', - }, - ], - }, - { - component: CNavItem, - name: 'Charts', - to: '/charts', - icon: , - }, - { - component: CNavGroup, - name: 'Icons', - icon: , - items: [ - { - component: CNavItem, - name: 'CoreUI Free', - to: '/icons/coreui-icons', - badge: { - color: 'success', - text: 'NEW', - }, - }, - { - component: CNavItem, - name: 'CoreUI Flags', - to: '/icons/flags', - }, - { - component: CNavItem, - name: 'CoreUI Brands', - to: '/icons/brands', - }, - ], - }, - { - component: CNavGroup, - name: 'Notifications', - icon: , - items: [ - { - component: CNavItem, - name: 'Alerts', - to: '/notifications/alerts', - }, - { - component: CNavItem, - name: 'Badges', - to: '/notifications/badges', - }, - { - component: CNavItem, - name: 'Modal', - to: '/notifications/modals', - }, - { - component: CNavItem, - name: 'Toasts', - to: '/notifications/toasts', - }, - ], - }, - { - component: CNavItem, - name: 'Widgets', - to: '/widgets', - icon: , - badge: { - color: 'info', - text: 'NEW', - }, - }, - { - component: CNavTitle, - name: 'Extras', - }, - { - component: CNavGroup, - name: 'Pages', - icon: , - items: [ - { - component: CNavItem, - name: 'Login', - to: '/login', - }, - { - component: CNavItem, - name: 'Register', - to: '/register', - }, - { - component: CNavItem, - name: 'Error 404', - to: '/404', - }, - { - component: CNavItem, - name: 'Error 500', - to: '/500', - }, - ], - }, + { component: CNavItem, name: 'Docs', diff --git a/src/components/AppBreadcrumb.js b/src/components/AppBreadcrumb.js index d37de8ce9..1c43a7527 100644 --- a/src/components/AppBreadcrumb.js +++ b/src/components/AppBreadcrumb.js @@ -33,7 +33,7 @@ const AppBreadcrumb = () => { return ( - Home + Anasayfa {breadcrumbs.map((breadcrumb, index) => { return ( { ) ) })} - } /> + } /> diff --git a/src/components/AppFooter.js b/src/components/AppFooter.js index fd126f460..ff21e6eb8 100644 --- a/src/components/AppFooter.js +++ b/src/components/AppFooter.js @@ -13,7 +13,7 @@ const AppFooter = () => { diff --git a/src/components/firebase.js b/src/components/firebase.js new file mode 100644 index 000000000..fe038e5ba --- /dev/null +++ b/src/components/firebase.js @@ -0,0 +1,18 @@ +// Import the functions you need from the SDKs you need +import { initializeApp } from 'firebase/app' +import { getAnalytics } from 'firebase/analytics' + +const firebaseConfig = { + apiKey: 'AIzaSyAfMX8RYSODQJhfkLv6Zc5IUJz2Q5W912Y', + authDomain: 'sulopanel-ab5f0.firebaseapp.com', + databaseURL: 'https://sulopanel-ab5f0-default-rtdb.europe-west1.firebasedatabase.app', + projectId: 'sulopanel-ab5f0', + storageBucket: 'sulopanel-ab5f0.appspot.com', + messagingSenderId: '46704013149', + appId: '1:46704013149:web:941cb7786157d761e982b4', + measurementId: 'G-3WF0T2PZ3S', +} + +// Initialize Firebase +const app = initializeApp(firebaseConfig) +export default firebaseConfig diff --git a/src/index.js b/src/index.js index 11d6e8658..61de90eed 100644 --- a/src/index.js +++ b/src/index.js @@ -2,10 +2,16 @@ import React from 'react' import { createRoot } from 'react-dom/client' import { Provider } from 'react-redux' import 'core-js' +import firebase from 'firebase/compat/app'; +import 'firebase/compat/storage'; // Firebase Storage için gerekli modülü ekleyin +import firebaseConfig from './components/firebase'; // Firebase config dosyasını içe aktarın + import App from './App' import store from './store' +firebase.initializeApp(firebaseConfig); + createRoot(document.getElementById('root')).render( diff --git a/src/routes.js b/src/routes.js index d168b1ca4..c30b968c1 100644 --- a/src/routes.js +++ b/src/routes.js @@ -4,6 +4,8 @@ const Dashboard = React.lazy(() => import('./views/dashboard/Dashboard')) const Colors = React.lazy(() => import('./views/theme/colors/Colors')) const Typography = React.lazy(() => import('./views/theme/typography/Typography')) +const Myqr = React.lazy(() => import('./views/projeler/Myqr')) + // Base const Accordion = React.lazy(() => import('./views/base/accordion/Accordion')) const Breadcrumbs = React.lazy(() => import('./views/base/breadcrumbs/Breadcrumbs')) @@ -53,6 +55,7 @@ const Widgets = React.lazy(() => import('./views/widgets/Widgets')) const routes = [ { path: '/', exact: true, name: 'Home' }, { path: '/dashboard', name: 'Dashboard', element: Dashboard }, + { path: '/projeler/myqr', name: 'Myqr', element: Myqr }, { path: '/theme', name: 'Theme', element: Colors, exact: true }, { path: '/theme/colors', name: 'Colors', element: Colors }, { path: '/theme/typography', name: 'Typography', element: Typography }, diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index 1b2ee0baa..165fde24a 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -1,5 +1,5 @@ -import React from 'react' -import { Link } from 'react-router-dom' +import React, { useEffect, useState } from 'react' +import { Link, Navigate } from 'react-router-dom' import { CButton, CCard, @@ -15,51 +15,112 @@ import { } from '@coreui/react' import CIcon from '@coreui/icons-react' import { cilLockLocked, cilUser } from '@coreui/icons' +import firebase from 'firebase/compat/app' +import 'firebase/compat/auth' const Login = () => { + const currentUser = firebase.auth().currentUser + const [redirectToUpload, setRedirectToUpload] = useState(false) + + useEffect(() => { + if (currentUser) { + setRedirectToUpload(true) + } + }, [currentUser]) + + if (redirectToUpload) { + return + } + + return ( +
+
+ +
+ ) +} + +const LoginForm = ({ setRedirectToUpload }) => { + const [email, setEmail] = useState('') + const [password, setPassword] = useState('') + const [error, setError] = useState(null) + const [successMessage, setSuccessMessage] = useState('') + + const handleLogin = async () => { + try { + await firebase.auth().signInWithEmailAndPassword(email, password) + setSuccessMessage('Başarılı giriş!') + setRedirectToUpload(true) + } catch (error) { + setError(error.message) + } + } + + const handleRegister = async () => { + try { + await firebase.auth().createUserWithEmailAndPassword(email, password) + setSuccessMessage('Başarılı kayıt!') + } catch (error) { + setError(error.message) + } + } + return (
- + -

Login

-

Sign In to your account

+

Giriş Yap

+
- + setEmail(e.target.value)} + autoComplete="username" + /> setPassword(e.target.value)} /> - - - Login + + + Giriş - - - Forgot password? - + + {error &&

{error}

} + {successMessage &&

{successMessage}

}
- + {/*

Sign up

@@ -74,7 +135,7 @@ const Login = () => {
-
+
*/}
diff --git a/src/views/projeler/Myqr.js b/src/views/projeler/Myqr.js new file mode 100644 index 000000000..f14c8c466 --- /dev/null +++ b/src/views/projeler/Myqr.js @@ -0,0 +1,82 @@ +import React from 'react' +import { + CButton, + CCard, + CCardBody, + CCardHeader, + CCol, + CForm, + CFormCheck, + CFormInput, + CFormLabel, + CFormSelect, + CInputGroup, + CInputGroupText, + CRow, +} from '@coreui/react' +import { DocsExample } from 'src/components' + +const Myqr = () => { + return ( + + + + + + + Email + + + + Password + + + + Address + + + + Address 2 + + + + City + + + + State + + + + + + + Zip + + + + + + +
+ +
+ + + Sign in + + +
+
+
+
+
+ ) +} +export default Myqr