From eb94d2dbf9cf7ef6521e59e1f17e6e968a57d617 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Sun, 25 Oct 2020 18:13:25 -0300 Subject: [PATCH] Modal Stable / Login View --- components/auth/LoginView.tsx | 79 +++++++++++------------- components/core/Layout/Layout.tsx | 25 ++++---- components/core/UserNav/DropdownMenu.tsx | 11 +++- components/core/UserNav/UserNav.tsx | 36 ++++++----- components/ui/Input/Input.module.css | 4 ++ components/ui/Input/Input.tsx | 25 ++++++++ components/ui/Input/index.ts | 1 + components/ui/Modal/Modal.tsx | 24 ++++--- components/ui/context.tsx | 2 - components/ui/index.ts | 1 + 10 files changed, 124 insertions(+), 84 deletions(-) create mode 100644 components/ui/Input/Input.module.css create mode 100644 components/ui/Input/Input.tsx create mode 100644 components/ui/Input/index.ts diff --git a/components/auth/LoginView.tsx b/components/auth/LoginView.tsx index fb7f99ada..9229799df 100644 --- a/components/auth/LoginView.tsx +++ b/components/auth/LoginView.tsx @@ -1,19 +1,23 @@ -import { FC, useEffect } from 'react' -import { Logo, Modal, Button } from '@components/ui' +import { FC, useEffect, useState } from 'react' +import { Logo, Modal, Button, Input } from '@components/ui' import useSignup from '@lib/bigcommerce/use-signup' import useLogin from '@lib/bigcommerce/use-login' -import useLogout from '@lib/bigcommerce/use-logout' -import useCustomer from '@lib/bigcommerce/use-customer' import { useUI } from '@components/ui/context' -interface Props { - open: boolean -} +interface Props {} + +const LoginView: FC = () => { + const [email, setEmail] = useState('') + const [pass, setPass] = useState('') + // const { openModal, closeModal } = useUI() + + // useEffect(() => { + // open ? openModal() : closeModal() + // }, [open]) -const LoginView: FC = ({ open }) => { const signup = useSignup() const login = useLogin() - const logout = useLogout() + // // Data about the currently logged in customer, it will update // // automatically after a signup/login/logout // const { data } = useCustomer() @@ -56,43 +60,30 @@ const LoginView: FC = ({ open }) => { } } - const { openModal, closeModal } = useUI() - useEffect(() => { - open ? openModal() : closeModal() - }, [open]) - return ( - -
-
- -
-
-
- -
-
- -
- - - Don't have an account? - {` `} - - Sign Up - - -
+
+
+
- +
+
+ +
+
+ +
+ + + Don't have an account? + {` `} + + Sign Up + + +
+
) } diff --git a/components/core/Layout/Layout.tsx b/components/core/Layout/Layout.tsx index 90a5bca35..3e3eac2a1 100644 --- a/components/core/Layout/Layout.tsx +++ b/components/core/Layout/Layout.tsx @@ -1,14 +1,14 @@ -import { FC, useEffect, useState } from 'react' import cn from 'classnames' -import type { Page } from '@lib/bigcommerce/api/operations/get-all-pages' -import { CommerceProvider } from '@lib/bigcommerce' -import { Navbar, Featurebar, Footer } from '@components/core' -import { Container, Sidebar } from '@components/ui' -import Button from '@components/ui/Button' -import { CartSidebarView } from '@components/cart' -import { useUI } from '@components/ui/context' import s from './Layout.module.css' +import { FC, useEffect, useState } from 'react' +import { CartSidebarView } from '@components/cart' +import { Container, Sidebar, Button, Modal } from '@components/ui' +import { Navbar, Featurebar, Footer } from '@components/core' +import { LoginView } from '@components/auth' +import { useUI } from '@components/ui/context' import { usePreventScroll } from '@react-aria/overlays' +import { CommerceProvider } from '@lib/bigcommerce' +import type { Page } from '@lib/bigcommerce/api/operations/get-all-pages' interface Props { pageProps: { pages?: Page[] @@ -16,7 +16,7 @@ interface Props { } const Layout: FC = ({ children, pageProps }) => { - const { displaySidebar, displayDropdown, closeSidebar } = useUI() + const { displaySidebar, displayModal, closeSidebar, closeModal } = useUI() const [acceptedCookies, setAcceptedCookies] = useState(false) const [hasScrolled, setHasScrolled] = useState(false) @@ -36,7 +36,7 @@ const Layout: FC = ({ children, pageProps }) => { }, []) usePreventScroll({ - isDisabled: !displaySidebar, + isDisabled: !(displaySidebar || displayModal), }) return ( @@ -54,11 +54,12 @@ const Layout: FC = ({ children, pageProps }) => {
{children}
- - + + + = ({ open = false }) => { const { theme, setTheme } = useTheme() - + const logout = useLogout() return ( = ({ open = false }) => { - Logout + logout()} + > + Logout + diff --git a/components/core/UserNav/UserNav.tsx b/components/core/UserNav/UserNav.tsx index f129c4a2e..d7e2adf28 100644 --- a/components/core/UserNav/UserNav.tsx +++ b/components/core/UserNav/UserNav.tsx @@ -22,7 +22,7 @@ const UserNav: FC = ({ className, children, ...props }) => { const { data } = useCart() const { data: customer } = useCustomer() - const { openSidebar, closeSidebar, displaySidebar } = useUI() + const { openSidebar, closeSidebar, displaySidebar, openModal } = useUI() const itemsCount = Object.values(data?.line_items ?? {}).reduce(countItems, 0) return (
diff --git a/components/ui/Input/Input.module.css b/components/ui/Input/Input.module.css new file mode 100644 index 000000000..83570f065 --- /dev/null +++ b/components/ui/Input/Input.module.css @@ -0,0 +1,4 @@ +.root { + @apply focus:outline-none bg-primary focus:shadow-outline-gray border-none py-2 + px-6 w-full appearance-none transition duration-150 ease-in-out placeholder-accents-5 pr-10; +} diff --git a/components/ui/Input/Input.tsx b/components/ui/Input/Input.tsx new file mode 100644 index 000000000..86ae34fc9 --- /dev/null +++ b/components/ui/Input/Input.tsx @@ -0,0 +1,25 @@ +import cn from 'classnames' +import s from './Input.module.css' +import React, { InputHTMLAttributes } from 'react' + +export interface Props extends InputHTMLAttributes { + className?: string + onChange?: (...args: any[]) => any +} + +const Input: React.FC = (props) => { + const { className, children, onChange, ...rest } = props + + const rootClassName = cn(s.root, {}, className) + + const handleOnChange = (e: any) => { + if (onChange) { + onChange(e.target.value) + } + return null + } + + return +} + +export default Input diff --git a/components/ui/Input/index.ts b/components/ui/Input/index.ts new file mode 100644 index 000000000..aa97178e5 --- /dev/null +++ b/components/ui/Input/index.ts @@ -0,0 +1 @@ +export { default } from './Input' diff --git a/components/ui/Modal/Modal.tsx b/components/ui/Modal/Modal.tsx index bafc0ae6f..c19a21b10 100644 --- a/components/ui/Modal/Modal.tsx +++ b/components/ui/Modal/Modal.tsx @@ -8,7 +8,7 @@ import { useOverlay, useModal, OverlayContainer } from '@react-aria/overlays' interface Props { className?: string children?: any - open?: boolean + open: boolean onClose?: () => void } @@ -22,14 +22,22 @@ const Modal: FC = ({ const rootClassName = cn(s.root, className) let ref = useRef() as React.MutableRefObject let { modalProps } = useModal() - let { overlayProps } = useOverlay(props, ref) - let { dialogProps } = useDialog(props, ref) + let { dialogProps } = useDialog({}, ref) + let { overlayProps } = useOverlay( + { + isOpen: open, + isDismissable: true, + onClose: onClose, + ...props, + }, + ref + ) return ( -
- + +
= ({ leaveTo="opacity-0" >
{children}
- -
+
+
) diff --git a/components/ui/context.tsx b/components/ui/context.tsx index bacbca02f..ab1af74f1 100644 --- a/components/ui/context.tsx +++ b/components/ui/context.tsx @@ -101,8 +101,6 @@ export const UIProvider: FC = (props) => { closeModal, } - console.log('state', state) - return } diff --git a/components/ui/index.ts b/components/ui/index.ts index a53f0b513..581c12d53 100644 --- a/components/ui/index.ts +++ b/components/ui/index.ts @@ -9,3 +9,4 @@ export { default as LoadingDots } from './LoadingDots' export { default as Skeleton } from './Skeleton' export { default as Modal } from './Modal' export { default as Text } from './Text' +export { default as Input } from './Input'